mcp-hydrocoder-image 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -29
- package/dist/api/geminiClient.d.ts +3 -30
- package/dist/api/geminiClient.d.ts.map +1 -1
- package/dist/api/geminiClient.js +13 -57
- package/dist/api/geminiClient.js.map +1 -1
- package/dist/api/geminiTextClient.js +1 -1
- package/dist/api/geminiTextClient.js.map +1 -1
- package/dist/api/imageProvider.d.ts +29 -0
- package/dist/api/imageProvider.d.ts.map +1 -0
- package/dist/api/imageProvider.js +5 -0
- package/dist/api/imageProvider.js.map +1 -0
- package/dist/api/volcengineClient.d.ts +13 -0
- package/dist/api/volcengineClient.d.ts.map +1 -0
- package/dist/api/volcengineClient.js +288 -0
- package/dist/api/volcengineClient.js.map +1 -0
- package/dist/business/inputValidator.d.ts.map +1 -1
- package/dist/business/inputValidator.js +69 -1
- package/dist/business/inputValidator.js.map +1 -1
- package/dist/business/multiImagePrompt.d.ts +13 -0
- package/dist/business/multiImagePrompt.d.ts.map +1 -0
- package/dist/business/multiImagePrompt.js +135 -0
- package/dist/business/multiImagePrompt.js.map +1 -0
- package/dist/business/responseBuilder.d.ts +3 -2
- package/dist/business/responseBuilder.d.ts.map +1 -1
- package/dist/business/responseBuilder.js +69 -48
- package/dist/business/responseBuilder.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/server/errorHandler.d.ts.map +1 -1
- package/dist/server/errorHandler.js +3 -2
- package/dist/server/errorHandler.js.map +1 -1
- package/dist/server/mcpServer.d.ts +90 -29
- package/dist/server/mcpServer.d.ts.map +1 -1
- package/dist/server/mcpServer.js +429 -288
- package/dist/server/mcpServer.js.map +1 -1
- package/dist/types/mcp.d.ts +62 -15
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/mcp.js +15 -0
- package/dist/types/mcp.js.map +1 -1
- package/dist/utils/config.d.ts +6 -2
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +39 -14
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errors.d.ts +9 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +50 -1
- package/dist/utils/errors.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -36,6 +36,8 @@ The prompt optimizer uses a **Subject–Context–Style** framework (powered by
|
|
|
36
36
|
|
|
37
37
|
## Features
|
|
38
38
|
|
|
39
|
+
- **Multi-Provider Support**: Use either Google Gemini or Volcengine Seedream behind the same MCP server, with provider selection via config or per-request override.
|
|
40
|
+
- **Dedicated Multi-Image Tooling**: Use `generate_image` for single-image work and `generate_multi_image` for grouped multi-image output with server-side fan-out and prompt normalization.
|
|
39
41
|
- **Built-in Prompt Optimization**: Your simple prompt is automatically enriched with photographic and artistic details — lighting, composition, atmosphere — using Gemini 2.5 Flash. No prompt engineering skills required.
|
|
40
42
|
- **Three Quality Tiers**: Choose between fast iteration, balanced quality, or maximum fidelity with Nano Banana 2 (Gemini 3.1 Flash Image) and Nano Banana Pro (Gemini 3 Pro Image). [See Quality Presets](#quality-presets).
|
|
41
43
|
- **Image Editing**: Transform existing images with natural language instructions (image-to-image) while preserving original style and visual consistency.
|
|
@@ -90,15 +92,19 @@ npx mcp-hydrocoder-image skills install --path ~/.claude/skills
|
|
|
90
92
|
## Prerequisites
|
|
91
93
|
|
|
92
94
|
- **Node.js** 20 or higher
|
|
93
|
-
- **
|
|
95
|
+
- **API Key**
|
|
96
|
+
- Gemini: get yours at [Google AI Studio](https://aistudio.google.com/apikey)
|
|
97
|
+
- Volcengine: create an Ark API key in the Volcengine console
|
|
94
98
|
- An MCP-compatible AI tool: **Cursor**, **Claude Code**, **Codex**, or others
|
|
95
99
|
- Basic terminal/command line knowledge
|
|
96
100
|
|
|
97
101
|
## Quick Start
|
|
98
102
|
|
|
99
|
-
### 1. Get Your
|
|
103
|
+
### 1. Get Your API Key
|
|
100
104
|
|
|
101
|
-
|
|
105
|
+
Choose a provider and create an API key:
|
|
106
|
+
- **Gemini**: [Google AI Studio](https://aistudio.google.com/apikey)
|
|
107
|
+
- **Volcengine**: Volcengine Ark console (`ARK_API_KEY`-compatible key)
|
|
102
108
|
|
|
103
109
|
### 2. MCP Configuration
|
|
104
110
|
|
|
@@ -112,8 +118,10 @@ command = "npx"
|
|
|
112
118
|
args = ["-y", "mcp-hydrocoder-image"]
|
|
113
119
|
|
|
114
120
|
[mcp_servers.mcp-hydrocoder-image.env]
|
|
121
|
+
IMAGE_PROVIDER = "gemini"
|
|
115
122
|
GEMINI_API_KEY = "your_gemini_api_key_here"
|
|
116
123
|
IMAGE_OUTPUT_DIR = "/absolute/path/to/images"
|
|
124
|
+
API_TIMEOUT = "120000" # Optional: timeout in milliseconds (default: 120s)
|
|
117
125
|
```
|
|
118
126
|
|
|
119
127
|
#### For Cursor
|
|
@@ -130,8 +138,10 @@ Add to your Cursor settings:
|
|
|
130
138
|
"command": "npx",
|
|
131
139
|
"args": ["-y", "mcp-hydrocoder-image"],
|
|
132
140
|
"env": {
|
|
141
|
+
"IMAGE_PROVIDER": "gemini",
|
|
133
142
|
"GEMINI_API_KEY": "your_gemini_api_key_here",
|
|
134
|
-
"IMAGE_OUTPUT_DIR": "/absolute/path/to/images"
|
|
143
|
+
"IMAGE_OUTPUT_DIR": "/absolute/path/to/images",
|
|
144
|
+
"API_TIMEOUT": "120000"
|
|
135
145
|
}
|
|
136
146
|
}
|
|
137
147
|
}
|
|
@@ -146,8 +156,10 @@ Add to your Cursor settings:
|
|
|
146
156
|
"command": "npx",
|
|
147
157
|
"args": ["-y", "mcp-hydrocoder-image"],
|
|
148
158
|
"env": {
|
|
159
|
+
"IMAGE_PROVIDER": "gemini",
|
|
149
160
|
"GEMINI_API_KEY": "your_gemini_api_key_here",
|
|
150
|
-
"IMAGE_OUTPUT_DIR": "C:\\absolute\\path\\to\\images"
|
|
161
|
+
"IMAGE_OUTPUT_DIR": "C:\\absolute\\path\\to\\images",
|
|
162
|
+
"API_TIMEOUT": "120000"
|
|
151
163
|
}
|
|
152
164
|
}
|
|
153
165
|
}
|
|
@@ -160,13 +172,23 @@ Run in your project directory to enable for that project:
|
|
|
160
172
|
|
|
161
173
|
```bash
|
|
162
174
|
cd /path/to/your/project
|
|
163
|
-
claude mcp add mcp-hydrocoder-image
|
|
175
|
+
claude mcp add mcp-hydrocoder-image \
|
|
176
|
+
--env IMAGE_PROVIDER=gemini \
|
|
177
|
+
--env GEMINI_API_KEY=your-api-key \
|
|
178
|
+
--env IMAGE_OUTPUT_DIR=/absolute/path/to/images \
|
|
179
|
+
--env API_TIMEOUT=120000 \
|
|
180
|
+
-- npx -y mcp-hydrocoder-image
|
|
164
181
|
```
|
|
165
182
|
|
|
166
183
|
Or add globally for all projects:
|
|
167
184
|
|
|
168
185
|
```bash
|
|
169
|
-
claude mcp add mcp-hydrocoder-image --scope user
|
|
186
|
+
claude mcp add mcp-hydrocoder-image --scope user \
|
|
187
|
+
--env IMAGE_PROVIDER=gemini \
|
|
188
|
+
--env GEMINI_API_KEY=your-api-key \
|
|
189
|
+
--env IMAGE_OUTPUT_DIR=/absolute/path/to/images \
|
|
190
|
+
--env API_TIMEOUT=120000 \
|
|
191
|
+
-- npx -y mcp-hydrocoder-image
|
|
170
192
|
```
|
|
171
193
|
|
|
172
194
|
Or add via JSON config (`~/.claude/settings.json` for global, `.mcp.json` for project):
|
|
@@ -179,8 +201,10 @@ Or add via JSON config (`~/.claude/settings.json` for global, `.mcp.json` for pr
|
|
|
179
201
|
"command": "npx",
|
|
180
202
|
"args": ["-y", "mcp-hydrocoder-image"],
|
|
181
203
|
"env": {
|
|
204
|
+
"IMAGE_PROVIDER": "gemini",
|
|
182
205
|
"GEMINI_API_KEY": "your_gemini_api_key_here",
|
|
183
|
-
"IMAGE_OUTPUT_DIR": "/absolute/path/to/images"
|
|
206
|
+
"IMAGE_OUTPUT_DIR": "/absolute/path/to/images",
|
|
207
|
+
"API_TIMEOUT": "120000"
|
|
184
208
|
}
|
|
185
209
|
}
|
|
186
210
|
}
|
|
@@ -195,8 +219,10 @@ Or add via JSON config (`~/.claude/settings.json` for global, `.mcp.json` for pr
|
|
|
195
219
|
"command": "npx",
|
|
196
220
|
"args": ["-y", "mcp-hydrocoder-image"],
|
|
197
221
|
"env": {
|
|
222
|
+
"IMAGE_PROVIDER": "gemini",
|
|
198
223
|
"GEMINI_API_KEY": "your_gemini_api_key_here",
|
|
199
|
-
"IMAGE_OUTPUT_DIR": "C:\\absolute\\path\\to\\images"
|
|
224
|
+
"IMAGE_OUTPUT_DIR": "C:\\absolute\\path\\to\\images",
|
|
225
|
+
"API_TIMEOUT": "120000"
|
|
200
226
|
}
|
|
201
227
|
}
|
|
202
228
|
}
|
|
@@ -250,7 +276,48 @@ IMAGE_OUTPUT_DIR = "/absolute/path/to/images"
|
|
|
250
276
|
|
|
251
277
|
> **Note**: The base URL should be the root domain (e.g., `https://llm.myseek.fun`), without the `/v1` suffix — the SDK will append the API version automatically.
|
|
252
278
|
|
|
253
|
-
|
|
279
|
+
### Volcengine Example
|
|
280
|
+
|
|
281
|
+
To use Volcengine Seedream as the default backend, switch provider and set a Volcengine API key.
|
|
282
|
+
|
|
283
|
+
Current implementation status for Volcengine in this repo:
|
|
284
|
+
- Stable path: text-to-image
|
|
285
|
+
- Reference-image workflows are wired through the OpenAI-compatible image API using the `image` field
|
|
286
|
+
- Base64 image inputs are normalized to the official Volcengine format: `data:image/<format>;base64,<Base64编码>`
|
|
287
|
+
- Grouped output (`outputCount`) is best-effort and depends on provider-side behavior
|
|
288
|
+
- If the user does not specify `aspectRatio` or `imageSize`, Gemini and Volcengine default to `16:9` and `4K`
|
|
289
|
+
- If the user specifies `aspectRatio` and/or `imageSize`, the server automatically normalizes the final `WxH` into Volcengine's legal pixel range
|
|
290
|
+
- When the user provides local image paths, they should be passed through `inputImagePath` / `inputImagePaths` instead of being summarized into the prompt
|
|
291
|
+
|
|
292
|
+
**Claude Code:**
|
|
293
|
+
```bash
|
|
294
|
+
claude mcp add mcp-hydrocoder-image \
|
|
295
|
+
--env IMAGE_PROVIDER=volcengine \
|
|
296
|
+
--env VOLCENGINE_API_KEY=your-volcengine-api-key \
|
|
297
|
+
--env VOLCENGINE_API_BASE_URL=https://ark.cn-beijing.volces.com/api/v3 \
|
|
298
|
+
--env IMAGE_OUTPUT_DIR=/absolute/path/to/images \
|
|
299
|
+
-- npx -y mcp-hydrocoder-image
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**Cursor / JSON config:**
|
|
303
|
+
```json
|
|
304
|
+
{
|
|
305
|
+
"mcpServers": {
|
|
306
|
+
"mcp-hydrocoder-image": {
|
|
307
|
+
"command": "npx",
|
|
308
|
+
"args": ["-y", "mcp-hydrocoder-image"],
|
|
309
|
+
"env": {
|
|
310
|
+
"IMAGE_PROVIDER": "volcengine",
|
|
311
|
+
"VOLCENGINE_API_KEY": "your_volcengine_api_key_here",
|
|
312
|
+
"VOLCENGINE_MODEL": "doubao-seedream-4-5-251128",
|
|
313
|
+
"VOLCENGINE_API_BASE_URL": "https://ark.cn-beijing.volces.com/api/v3",
|
|
314
|
+
"IMAGE_OUTPUT_DIR": "/absolute/path/to/images"
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
254
321
|
|
|
255
322
|
Choose the right balance of speed, quality, and cost:
|
|
256
323
|
|
|
@@ -317,7 +384,7 @@ Your prompt is automatically enhanced with rich details about lighting, material
|
|
|
317
384
|
(with inputImagePath: "/path/to/image.jpg")
|
|
318
385
|
```
|
|
319
386
|
|
|
320
|
-
### Advanced Features
|
|
387
|
+
### Advanced Features
|
|
321
388
|
|
|
322
389
|
**Character Consistency:**
|
|
323
390
|
```
|
|
@@ -331,41 +398,98 @@ Your prompt is automatically enhanced with rich details about lighting, material
|
|
|
331
398
|
(with imageSize: "4K")
|
|
332
399
|
```
|
|
333
400
|
|
|
334
|
-
**Custom Aspect Ratio:**
|
|
335
|
-
```
|
|
336
|
-
"Generate a cinematic landscape of a desert at golden hour"
|
|
337
|
-
(with aspectRatio: "21:9")
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
401
|
+
**Custom Aspect Ratio:**
|
|
402
|
+
```
|
|
403
|
+
"Generate a cinematic landscape of a desert at golden hour"
|
|
404
|
+
(with aspectRatio: "21:9")
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Grouped Multi-Image Generation
|
|
408
|
+
|
|
409
|
+
For a grouped multi-image task, prefer `generate_multi_image` instead of repeating `generate_image`.
|
|
410
|
+
|
|
411
|
+
**Natural-language grouped request:**
|
|
412
|
+
```text
|
|
413
|
+
"Use generate_multi_image to create 4 unified e-commerce product images of the same minimalist white thermos cup: hero shot, side-detail shot, handheld lifestyle shot, and desk scene. Return 4 separate images in one run."
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
**Structured grouped request with inferred numbering:**
|
|
417
|
+
```json
|
|
418
|
+
{
|
|
419
|
+
"prompt": "同一款极简白色保温杯,整体风格统一,高级感、干净、真实、适合品牌官网和详情页使用。",
|
|
420
|
+
"outputCount": 4,
|
|
421
|
+
"provider": "volcengine"
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**Structured grouped request with explicit per-image prompts:**
|
|
426
|
+
```json
|
|
427
|
+
{
|
|
428
|
+
"prompt": "同一款极简白色保温杯,整体风格统一,高级感、干净、真实、适合品牌官网和详情页使用。",
|
|
429
|
+
"provider": "volcengine",
|
|
430
|
+
"imageRequests": [
|
|
431
|
+
"电商主图,白底,正面展示产品",
|
|
432
|
+
"侧面细节图,突出杯盖和材质纹理",
|
|
433
|
+
"手持使用场景图,突出尺寸感",
|
|
434
|
+
"办公桌场景图,氛围高级"
|
|
435
|
+
]
|
|
436
|
+
}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
## API Reference
|
|
440
|
+
|
|
441
|
+
### `generate_image` Tool
|
|
343
442
|
|
|
344
443
|
The server uses a two-stage process with separate models for each stage:
|
|
345
444
|
1. **Prompt Optimization** (Gemini 2.5 Flash): Refines your prompt using the Subject–Context–Style framework. Skippable via `SKIP_PROMPT_ENHANCEMENT`.
|
|
346
|
-
2. **Image Generation** (Nano Banana 2 or Pro): Creates the final image. Model varies by quality preset.
|
|
445
|
+
2. **Image Generation** (Nano Banana 2 or Pro): Creates the final image. Model varies by quality preset.
|
|
446
|
+
|
|
447
|
+
Use `generate_image` as the default tool for single-image generation and image editing. If the user wants multiple images in one grouped request, prefer `generate_multi_image`.
|
|
347
448
|
|
|
348
449
|
#### Parameters
|
|
349
450
|
|
|
350
451
|
| Parameter | Type | Required | Description |
|
|
351
452
|
|-----------|------|----------|-------------|
|
|
352
453
|
| `prompt` | string | Yes | Text description or editing instruction |
|
|
454
|
+
| `provider` | string | - | Optional provider override: `gemini` or `volcengine`. Defaults to `IMAGE_PROVIDER` |
|
|
353
455
|
| `quality` | string | - | Quality preset: `fast` (default), `balanced`, `quality`. Overrides `IMAGE_QUALITY` env var for this request |
|
|
354
|
-
| `
|
|
355
|
-
| `
|
|
356
|
-
| `
|
|
357
|
-
| `
|
|
358
|
-
| `
|
|
456
|
+
| `outputFormat` | string | - | Output image format if supported by the provider. Some provider endpoints may ignore or reject format overrides |
|
|
457
|
+
| `outputCount` | integer | - | Backward-compatible grouped output count for `generate_image`. For new multi-image requests, prefer `generate_multi_image` |
|
|
458
|
+
| `inputImagePath` | string | - | Absolute path to input image for image-to-image editing. Supported by Gemini and by Volcengine reference-image workflows |
|
|
459
|
+
| `inputImage` | string | - | Base64 encoded image data for image-to-image editing. Gemini accepts raw base64; Volcengine sends it as `data:image/<format>;base64,<data>` and uses `inputImageMimeType` to build the official request format |
|
|
460
|
+
| `inputImageMimeType` | string | - | MIME type of the input image (`image/jpeg`, `image/png`, `image/webp`, `image/gif`, `image/bmp`). Required for correct Volcengine Data URL formatting when `inputImage` is provided |
|
|
461
|
+
| `inputImages` | array | - | Multiple input images for multi-image composition. Each item uses `{ data, mimeType }`; Volcengine converts them to `data:image/<format>;base64,<data>` entries in the `image` array |
|
|
462
|
+
| `inputImagePaths` | array | - | Multiple input image file paths for multi-image composition. Supported by Gemini and by Volcengine when mapped to reference-image arrays |
|
|
359
463
|
| `returnBase64` | boolean | - | Return the generated image as base64 data in the response. Image is always saved to disk regardless |
|
|
360
464
|
| `fileName` | string | - | Custom filename for output (auto-generated if not specified). Extension is auto-appended based on output format if omitted |
|
|
361
465
|
| `skipPromptEnhancement` | boolean | - | Skip prompt enhancement and use the prompt as-is. Recommended for multi-image blending. Overrides `SKIP_PROMPT_ENHANCEMENT` env var. Default: `false` |
|
|
362
|
-
| `aspectRatio` | string | - | `1:1
|
|
363
|
-
| `
|
|
466
|
+
| `aspectRatio` | string | - | `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9`, `1:4`, `1:8`, `4:1`, `8:1`. When omitted, Gemini and Volcengine default to `16:9` |
|
|
467
|
+
| `imageRequests` | array | - | Backward-compatible per-image prompts for `generate_image`. For new grouped multi-image requests, prefer `generate_multi_image` |
|
|
468
|
+
| `imageSize` | string | - | `1K`, `2K`, `4K`. When omitted, Gemini and Volcengine default to `4K`. Volcengine further normalizes the final `WxH` into the provider legal pixel range |
|
|
364
469
|
| `blendImages` | boolean | - | Enable multi-image blending for combining multiple visual elements naturally |
|
|
365
470
|
| `maintainCharacterConsistency` | boolean | - | Maintain character appearance consistency across different poses and scenes |
|
|
366
471
|
| `useWorldKnowledge` | boolean | - | Use real-world knowledge for accurate context (historical figures, landmarks, factual scenarios) |
|
|
367
472
|
| `useGoogleSearch` | boolean | - | Enable Google Search grounding for real-time factual accuracy |
|
|
368
|
-
| `purpose` | string | - | Intended use (e.g., "cookbook cover", "social media post"). Helps tailor visual style and details |
|
|
473
|
+
| `purpose` | string | - | Intended use (e.g., "cookbook cover", "social media post"). Helps tailor visual style and details |
|
|
474
|
+
|
|
475
|
+
### `generate_multi_image` Tool
|
|
476
|
+
|
|
477
|
+
Use `generate_multi_image` for grouped multi-image generation in a single tool call. This is the preferred entry for Notebook planners that might otherwise split one user request into multiple `generate_image` calls.
|
|
478
|
+
|
|
479
|
+
#### Recommended patterns
|
|
480
|
+
|
|
481
|
+
- Use `outputCount` when the user wants multiple images with shared overall constraints.
|
|
482
|
+
- Use `imageRequests` when the user wants several distinct images in one grouped request.
|
|
483
|
+
- If `outputCount` is omitted, the server will try to infer it from phrases such as `4张图`, `四张海报`, or `4 images`.
|
|
484
|
+
|
|
485
|
+
#### Example
|
|
486
|
+
|
|
487
|
+
```json
|
|
488
|
+
{
|
|
489
|
+
"prompt": "请生成4张统一风格的电商产品图,主题都是同一款极简白色保温杯,分别覆盖主图、侧面细节、手持使用场景、办公桌场景。要求返回4张独立图片,不要拆成多次生成。",
|
|
490
|
+
"provider": "volcengine"
|
|
491
|
+
}
|
|
492
|
+
```
|
|
369
493
|
|
|
370
494
|
#### Response
|
|
371
495
|
|
|
@@ -3,22 +3,10 @@
|
|
|
3
3
|
* Integrates with Google's Gemini AI API using the official SDK
|
|
4
4
|
* Supports automatic URL Context processing and feature parameters
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { GeneratedImageResult, ImageProviderClient } from './imageProvider.js';
|
|
7
7
|
import type { Result } from '../types/result.js';
|
|
8
8
|
import type { Config } from '../utils/config.js';
|
|
9
9
|
import { GeminiAPIError, NetworkError } from '../utils/errors.js';
|
|
10
|
-
/**
|
|
11
|
-
* Metadata for generated images
|
|
12
|
-
*/
|
|
13
|
-
export interface GeminiGenerationMetadata {
|
|
14
|
-
model: string;
|
|
15
|
-
prompt: string;
|
|
16
|
-
mimeType: string;
|
|
17
|
-
timestamp: Date;
|
|
18
|
-
inputImageProvided: boolean;
|
|
19
|
-
modelVersion?: string;
|
|
20
|
-
responseId?: string;
|
|
21
|
-
}
|
|
22
10
|
/**
|
|
23
11
|
* Parameters for Gemini API image generation
|
|
24
12
|
*/
|
|
@@ -33,25 +21,10 @@ export interface GeminiApiParams {
|
|
|
33
21
|
aspectRatio?: string;
|
|
34
22
|
imageSize?: string;
|
|
35
23
|
useGoogleSearch?: boolean;
|
|
36
|
-
quality?:
|
|
24
|
+
quality?: 'fast' | 'balanced' | 'quality';
|
|
37
25
|
}
|
|
38
|
-
|
|
39
|
-
* Result of image generation
|
|
40
|
-
*/
|
|
41
|
-
export interface GeneratedImageResult {
|
|
42
|
-
imageData: Buffer;
|
|
43
|
-
metadata: GeminiGenerationMetadata;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Gemini API client interface
|
|
47
|
-
*/
|
|
48
|
-
export interface GeminiClient {
|
|
26
|
+
export interface GeminiClient extends ImageProviderClient {
|
|
49
27
|
generateImage(params: GeminiApiParams): Promise<Result<GeneratedImageResult, GeminiAPIError | NetworkError>>;
|
|
50
28
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Creates a new Gemini API client
|
|
53
|
-
* @param config Configuration containing API key and other settings
|
|
54
|
-
* @returns Result containing the client or an error
|
|
55
|
-
*/
|
|
56
29
|
export declare function createGeminiClient(config: Config): Result<GeminiClient, GeminiAPIError>;
|
|
57
30
|
//# sourceMappingURL=geminiClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/api/geminiClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/api/geminiClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAA0B,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE3G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAkHjE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CAC1C;AAED,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,aAAa,CACX,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC,CAAA;CACxE;AA6TD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAiDvF"}
|
package/dist/api/geminiClient.js
CHANGED
|
@@ -8,9 +8,6 @@ import { GEMINI_MODELS } from '../types/mcp.js';
|
|
|
8
8
|
import { Err, Ok } from '../types/result.js';
|
|
9
9
|
import { GeminiAPIError, NetworkError } from '../utils/errors.js';
|
|
10
10
|
import { applyProxyFetch } from '../utils/proxyFetch.js';
|
|
11
|
-
/**
|
|
12
|
-
* Safely analyze response structure for debugging (removes sensitive data)
|
|
13
|
-
*/
|
|
14
11
|
function analyzeResponseStructure(obj) {
|
|
15
12
|
if (!obj || typeof obj !== 'object') {
|
|
16
13
|
return { type: typeof obj, value: obj };
|
|
@@ -21,10 +18,11 @@ function analyzeResponseStructure(obj) {
|
|
|
21
18
|
return '[max depth]';
|
|
22
19
|
if (value === null || value === undefined)
|
|
23
20
|
return value;
|
|
24
|
-
if (typeof value !== 'object')
|
|
21
|
+
if (typeof value !== 'object') {
|
|
25
22
|
return typeof value === 'string' && value.length > 100
|
|
26
23
|
? `[string length: ${value.length}]`
|
|
27
24
|
: value;
|
|
25
|
+
}
|
|
28
26
|
if (seen.has(value))
|
|
29
27
|
return '[circular]';
|
|
30
28
|
seen.add(value);
|
|
@@ -34,12 +32,10 @@ function analyzeResponseStructure(obj) {
|
|
|
34
32
|
const record = value;
|
|
35
33
|
const result = {};
|
|
36
34
|
for (const [key, val] of Object.entries(record)) {
|
|
37
|
-
// Skip sensitive keys
|
|
38
35
|
if (/apikey|token|secret|password|credential/i.test(key)) {
|
|
39
36
|
result[key] = '[REDACTED]';
|
|
40
37
|
}
|
|
41
38
|
else if (key === 'data' && typeof val === 'string' && val.length > 100) {
|
|
42
|
-
// Likely base64 image data
|
|
43
39
|
result[key] = `[base64 data, length: ${val.length}]`;
|
|
44
40
|
}
|
|
45
41
|
else {
|
|
@@ -50,24 +46,18 @@ function analyzeResponseStructure(obj) {
|
|
|
50
46
|
};
|
|
51
47
|
return sanitize(obj);
|
|
52
48
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Type guard for Gemini response validation
|
|
55
|
-
*/
|
|
56
49
|
function isGeminiResponse(obj) {
|
|
57
50
|
if (!obj || typeof obj !== 'object')
|
|
58
51
|
return false;
|
|
59
52
|
const response = obj;
|
|
60
|
-
// Check if it has response property (wrapped response)
|
|
61
53
|
if ('response' in response && response['response'] && typeof response['response'] === 'object') {
|
|
62
54
|
const innerResponse = response['response'];
|
|
63
55
|
return 'candidates' in innerResponse && Array.isArray(innerResponse['candidates']);
|
|
64
56
|
}
|
|
65
|
-
// Check direct candidates property (direct response)
|
|
66
57
|
return 'candidates' in response && Array.isArray(response['candidates']);
|
|
67
58
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
*/
|
|
59
|
+
const DEFAULT_GEMINI_ASPECT_RATIO = '16:9';
|
|
60
|
+
const DEFAULT_GEMINI_IMAGE_SIZE = '4K';
|
|
71
61
|
class GeminiClientImpl {
|
|
72
62
|
constructor(genai, defaultQuality = 'fast') {
|
|
73
63
|
this.genai = genai;
|
|
@@ -75,12 +65,8 @@ class GeminiClientImpl {
|
|
|
75
65
|
}
|
|
76
66
|
async generateImage(params) {
|
|
77
67
|
try {
|
|
78
|
-
// Prepare the request content with proper structure for multimodal input
|
|
79
68
|
const requestContent = [];
|
|
80
|
-
// Structure the contents properly for image generation/editing
|
|
81
|
-
// Priority: inputImages > inputImage > text-only
|
|
82
69
|
if (params.inputImages && params.inputImages.length > 0) {
|
|
83
|
-
// For multi-image: multiple inlineData parts + text
|
|
84
70
|
const parts = params.inputImages.map((img) => ({
|
|
85
71
|
inlineData: {
|
|
86
72
|
data: img.data,
|
|
@@ -91,7 +77,6 @@ class GeminiClientImpl {
|
|
|
91
77
|
requestContent.push({ parts });
|
|
92
78
|
}
|
|
93
79
|
else if (params.inputImage) {
|
|
94
|
-
// For image editing: provide image first, then text instructions
|
|
95
80
|
requestContent.push({
|
|
96
81
|
parts: [
|
|
97
82
|
{
|
|
@@ -107,7 +92,6 @@ class GeminiClientImpl {
|
|
|
107
92
|
});
|
|
108
93
|
}
|
|
109
94
|
else {
|
|
110
|
-
// For text-to-image: provide only text prompt
|
|
111
95
|
requestContent.push({
|
|
112
96
|
parts: [
|
|
113
97
|
{
|
|
@@ -116,38 +100,27 @@ class GeminiClientImpl {
|
|
|
116
100
|
],
|
|
117
101
|
});
|
|
118
102
|
}
|
|
119
|
-
// Determine effective quality
|
|
120
103
|
const effectiveQuality = params.quality ?? this.defaultQuality;
|
|
121
|
-
// Select model based on quality preset
|
|
122
104
|
const modelName = effectiveQuality === 'quality' ? GEMINI_MODELS.PRO : GEMINI_MODELS.FLASH;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
if (params.imageSize) {
|
|
129
|
-
imageConfig['imageSize'] = params.imageSize;
|
|
130
|
-
}
|
|
131
|
-
// Build config with optional thinkingConfig
|
|
105
|
+
const imageConfig = {
|
|
106
|
+
aspectRatio: params.aspectRatio ?? DEFAULT_GEMINI_ASPECT_RATIO,
|
|
107
|
+
imageSize: params.imageSize ?? DEFAULT_GEMINI_IMAGE_SIZE,
|
|
108
|
+
};
|
|
132
109
|
const thinkingConfig = effectiveQuality === 'balanced' ? { thinkingConfig: { thinkingLevel: 'high' } } : {};
|
|
133
110
|
const config = {
|
|
134
|
-
|
|
111
|
+
imageConfig,
|
|
135
112
|
responseModalities: ['IMAGE'],
|
|
136
113
|
...thinkingConfig,
|
|
137
114
|
};
|
|
138
|
-
// Construct tools array for Google Search grounding
|
|
139
115
|
const tools = params.useGoogleSearch ? [{ googleSearch: {} }] : undefined;
|
|
140
|
-
// Generate content using Gemini API
|
|
141
116
|
const rawResponse = await this.genai.models.generateContent({
|
|
142
117
|
model: modelName,
|
|
143
118
|
contents: requestContent,
|
|
144
119
|
config,
|
|
145
120
|
...(tools && { tools }),
|
|
146
121
|
});
|
|
147
|
-
// Validate response structure with type guard
|
|
148
122
|
if (!isGeminiResponse(rawResponse)) {
|
|
149
123
|
const responseStructure = analyzeResponseStructure(rawResponse);
|
|
150
|
-
// Check if it's an error response from Gemini
|
|
151
124
|
const asRecord = rawResponse;
|
|
152
125
|
if (asRecord['error']) {
|
|
153
126
|
const error = asRecord['error'];
|
|
@@ -160,16 +133,14 @@ class GeminiClientImpl {
|
|
|
160
133
|
}
|
|
161
134
|
return Err(new GeminiAPIError('Invalid response structure from Gemini API', {
|
|
162
135
|
message: 'The API returned an unexpected response format',
|
|
163
|
-
responseStructure
|
|
136
|
+
responseStructure,
|
|
164
137
|
stage: 'response_validation',
|
|
165
138
|
suggestion: 'Check if the API endpoint or model configuration is correct',
|
|
166
139
|
}));
|
|
167
140
|
}
|
|
168
|
-
// Extract the actual response data (handle wrapped responses)
|
|
169
141
|
const responseData = rawResponse['response']
|
|
170
142
|
? rawResponse['response']
|
|
171
143
|
: rawResponse;
|
|
172
|
-
// Check for prompt feedback (safety blocking)
|
|
173
144
|
const responseAsRecord = responseData;
|
|
174
145
|
if (responseAsRecord['promptFeedback']) {
|
|
175
146
|
const promptFeedback = responseAsRecord['promptFeedback'];
|
|
@@ -189,7 +160,6 @@ class GeminiClientImpl {
|
|
|
189
160
|
}));
|
|
190
161
|
}
|
|
191
162
|
}
|
|
192
|
-
// Check for candidates
|
|
193
163
|
if (!responseData.candidates || responseData.candidates.length === 0) {
|
|
194
164
|
return Err(new GeminiAPIError('No image generated: Content may have been filtered', {
|
|
195
165
|
stage: 'generation',
|
|
@@ -205,7 +175,6 @@ class GeminiClientImpl {
|
|
|
205
175
|
}));
|
|
206
176
|
}
|
|
207
177
|
const parts = candidate.content.parts;
|
|
208
|
-
// Handle finish reason specific errors before checking parts
|
|
209
178
|
if (candidate.finishReason) {
|
|
210
179
|
const finishReason = candidate.finishReason;
|
|
211
180
|
if (finishReason === 'IMAGE_SAFETY') {
|
|
@@ -241,11 +210,9 @@ class GeminiClientImpl {
|
|
|
241
210
|
suggestion: 'The generation was incomplete. Please try again',
|
|
242
211
|
}));
|
|
243
212
|
}
|
|
244
|
-
// Check if we got an image or text (error message)
|
|
245
213
|
const imagePart = parts.find((part) => part.inlineData?.data);
|
|
246
214
|
const textPart = parts.find((part) => part.text);
|
|
247
215
|
if (!imagePart?.inlineData) {
|
|
248
|
-
// If there's text, it's likely an error message from Gemini
|
|
249
216
|
const errorMessage = textPart?.text || 'Image generation failed';
|
|
250
217
|
return Err(new GeminiAPIError('Image generation failed due to content filtering', {
|
|
251
218
|
reason: errorMessage,
|
|
@@ -253,11 +220,10 @@ class GeminiClientImpl {
|
|
|
253
220
|
suggestion: 'The prompt was blocked by safety filters. Try rephrasing your prompt to avoid potentially sensitive content.',
|
|
254
221
|
}));
|
|
255
222
|
}
|
|
256
|
-
// Convert base64 image data to Buffer
|
|
257
223
|
const imageBuffer = Buffer.from(imagePart.inlineData.data, 'base64');
|
|
258
224
|
const mimeType = imagePart.inlineData.mimeType || 'image/png';
|
|
259
|
-
// Create metadata
|
|
260
225
|
const metadata = {
|
|
226
|
+
provider: 'gemini',
|
|
261
227
|
model: modelName,
|
|
262
228
|
prompt: params.prompt,
|
|
263
229
|
mimeType,
|
|
@@ -277,15 +243,12 @@ class GeminiClientImpl {
|
|
|
277
243
|
}
|
|
278
244
|
handleError(error, prompt) {
|
|
279
245
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
280
|
-
// Check if it's a network error
|
|
281
246
|
if (this.isNetworkError(error)) {
|
|
282
247
|
return Err(new NetworkError(`Network error during image generation: ${errorMessage}`, 'Check your internet connection and try again', error instanceof Error ? error : undefined));
|
|
283
248
|
}
|
|
284
|
-
// Check if it's an API-specific error
|
|
285
249
|
if (this.isAPIError(error)) {
|
|
286
250
|
return Err(new GeminiAPIError(`Failed to generate image: ${errorMessage}`, this.getAPIErrorSuggestion(errorMessage), this.extractStatusCode(error)));
|
|
287
251
|
}
|
|
288
|
-
// Generic API error
|
|
289
252
|
return Err(new GeminiAPIError(`Failed to generate image with prompt "${prompt}": ${errorMessage}`, 'Check your API key, quota, and prompt validity. Try again with a different prompt'));
|
|
290
253
|
}
|
|
291
254
|
isNetworkError(error) {
|
|
@@ -322,16 +285,10 @@ class GeminiClientImpl {
|
|
|
322
285
|
return undefined;
|
|
323
286
|
}
|
|
324
287
|
}
|
|
325
|
-
/**
|
|
326
|
-
* Creates a new Gemini API client
|
|
327
|
-
* @param config Configuration containing API key and other settings
|
|
328
|
-
* @returns Result containing the client or an error
|
|
329
|
-
*/
|
|
330
288
|
export function createGeminiClient(config) {
|
|
331
289
|
try {
|
|
332
290
|
const createClient = async () => {
|
|
333
291
|
await applyProxyFetch();
|
|
334
|
-
// Build httpOptions with optional baseUrl
|
|
335
292
|
const httpOptions = {};
|
|
336
293
|
if (config.geminiApiBaseUrl) {
|
|
337
294
|
httpOptions.baseUrl = config.geminiApiBaseUrl;
|
|
@@ -340,11 +297,10 @@ export function createGeminiClient(config) {
|
|
|
340
297
|
httpOptions.timeout = config.apiTimeout;
|
|
341
298
|
}
|
|
342
299
|
return new GoogleGenAI({
|
|
343
|
-
apiKey: config.geminiApiKey,
|
|
344
|
-
...(Object.keys(httpOptions).length > 0 && { httpOptions })
|
|
300
|
+
apiKey: config.geminiApiKey || '',
|
|
301
|
+
...(Object.keys(httpOptions).length > 0 && { httpOptions }),
|
|
345
302
|
});
|
|
346
303
|
};
|
|
347
|
-
// Create client synchronously with lazy proxy initialization
|
|
348
304
|
let genaiInstance = null;
|
|
349
305
|
const genaiProxy = new Proxy({}, {
|
|
350
306
|
get(_target, prop) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/api/geminiClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/api/geminiClient.ts"],"names":[],"mappings":"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"}
|