(
providerConfig: ProviderConfig,
model: string,
prompt: string,
modeConfig: ProviderModeConfig,
image?: AIImage,
token?: AbortToken,
)
| 3260 | |
| 3261 | private async generateGeminiImageRest( |
| 3262 | providerConfig: ProviderConfig, |
| 3263 | model: string, |
| 3264 | prompt: string, |
| 3265 | modeConfig: ProviderModeConfig, |
| 3266 | image?: AIImage, |
| 3267 | token?: AbortToken, |
| 3268 | ): Promise<AIImage[]> { |
| 3269 | const baseUrl = resolveBaseUrl(providerConfig, modeConfig); |
| 3270 | |
| 3271 | if (model.includes("imagen")) { |
| 3272 | const endpoint = `v1beta/models/${model}:predict`; |
| 3273 | const url = resolveEndpointUrl(baseUrl, endpoint); |
| 3274 | const authMode = resolveAuthMode( |
| 3275 | getProviderProfile(providerConfig), |
| 3276 | modeConfig, |
| 3277 | providerConfig, |
| 3278 | ); |
| 3279 | const authConfig = applyAuthConfig(authMode, providerConfig, url, { |
| 3280 | "Content-Type": "application/json", |
| 3281 | }); |
| 3282 | |
| 3283 | const data: any = { |
| 3284 | instances: [{ prompt: prompt || "" }], |
| 3285 | parameters: { |
| 3286 | sampleCount: 1, |
| 3287 | outputOptions: { mimeType: "image/png" }, |
| 3288 | }, |
| 3289 | }; |
| 3290 | |
| 3291 | const response = await this.httpClient.request( |
| 3292 | { |
| 3293 | url: authConfig.url, |
| 3294 | method: "POST", |
| 3295 | headers: authConfig.headers, |
| 3296 | data, |
| 3297 | }, |
| 3298 | token, |
| 3299 | ); |
| 3300 | |
| 3301 | const predictions = response.data?.predictions || []; |
| 3302 | const images: AIImage[] = []; |
| 3303 | for (const p of predictions) { |
| 3304 | if (p.bytesBase64Encoded) { |
| 3305 | images.push({ |
| 3306 | data: Buffer.from(p.bytesBase64Encoded, "base64"), |
| 3307 | mimeType: p.mimeType || "image/png", |
| 3308 | }); |
| 3309 | } |
| 3310 | } |
| 3311 | if (images.length === 0) throw new Error("图片生成失败"); |
| 3312 | return images; |
| 3313 | } |
| 3314 | |
| 3315 | const endpoint = ( |
| 3316 | modeConfig.endpoint || "models/{model}:generateContent" |
| 3317 | ).replace("{model}", model); |
| 3318 | const url = resolveEndpointUrl(baseUrl, endpoint); |
| 3319 |
no test coverage detected