@anvia/gemini 1.0.0-rc.9 → 1.0.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 +7 -5
- package/dist/index.d.ts +11 -5
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ const client = new GeminiClient({
|
|
|
26
26
|
apiKey,
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
const model = client.completionModel({ modelId: "gemini-
|
|
29
|
+
const model = client.completionModel({ modelId: "gemini-3.7-flash" });
|
|
30
30
|
|
|
31
31
|
const agent = new Agent({
|
|
32
32
|
id: "assistant",
|
|
@@ -35,7 +35,7 @@ const agent = new Agent({
|
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
const result = await agent.generate({ prompt: "Summarize Anvia in one sentence." });
|
|
38
|
-
if (result.
|
|
38
|
+
if (result.type === "response") console.log(result.output);
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
## Vertex AI
|
|
@@ -52,7 +52,7 @@ const client = new GeminiClient({
|
|
|
52
52
|
},
|
|
53
53
|
});
|
|
54
54
|
|
|
55
|
-
const model = client.completionModel({ modelId: "gemini-
|
|
55
|
+
const model = client.completionModel({ modelId: "gemini-3.7-flash" });
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
The Google SDK uses Application Default Credentials. For a service-account JSON file, set
|
|
@@ -82,7 +82,7 @@ JSON or service-account keys.
|
|
|
82
82
|
## Embeddings
|
|
83
83
|
|
|
84
84
|
```ts
|
|
85
|
-
const embeddings = client.embeddingModel({ modelId: "gemini-embedding-
|
|
85
|
+
const embeddings = client.embeddingModel({ modelId: "gemini-embedding-2" });
|
|
86
86
|
const vectors = await embeddings.embedTexts(["Anvia is a TypeScript AI runtime."]);
|
|
87
87
|
```
|
|
88
88
|
|
|
@@ -112,7 +112,9 @@ const imagenModel = client.imageGenerationModel({
|
|
|
112
112
|
- structural completion, embedding, image, and transcription handle types
|
|
113
113
|
- Gemini model-ID types
|
|
114
114
|
- `GEMINI_2_5_FLASH_IMAGE`
|
|
115
|
-
- `
|
|
115
|
+
- `GEMINI_3_1_FLASH_IMAGE`
|
|
116
|
+
- `GEMINI_3_1_FLASH_LITE_IMAGE`
|
|
117
|
+
- `GEMINI_3_PRO_IMAGE`
|
|
116
118
|
- `IMAGEN_4_GENERATE`
|
|
117
119
|
- `gemini`
|
|
118
120
|
|
package/dist/index.d.ts
CHANGED
|
@@ -5,11 +5,11 @@ import { ModelId, ModelListingClient, ModelList } from '@anvia/core/model-listin
|
|
|
5
5
|
import { TranscriptionModel } from '@anvia/core/transcription';
|
|
6
6
|
import { GoogleGenAIOptions, GoogleGenAI } from '@google/genai';
|
|
7
7
|
|
|
8
|
-
type KnownGeminiCompletionModelId = "gemini-2.0-flash" | "gemini-2.0-flash-lite" | "gemini-2.5-flash" | "gemini-2.5-flash-image" | "gemini-2.5-flash-lite" | "gemini-2.5-flash-preview-tts" | "gemini-2.5-pro" | "gemini-2.5-pro-preview-tts" | "gemini-3-flash-preview" | "gemini-3-pro-image-preview" | "gemini-3-pro-preview" | "gemini-3.1-flash-image-preview" | "gemini-3.1-flash-lite" | "gemini-3.1-flash-lite-preview" | "gemini-3.1-pro-preview" | "gemini-3.1-pro-preview-customtools" | "gemini-3.5-flash" | "gemini-flash-latest" | "gemini-flash-lite-latest" | "gemma-4-26b-a4b-it" | "gemma-4-31b-it";
|
|
8
|
+
type KnownGeminiCompletionModelId = "gemini-2.0-flash" | "gemini-2.0-flash-lite" | "gemini-2.5-flash" | "gemini-2.5-flash-image" | "gemini-2.5-flash-lite" | "gemini-2.5-flash-preview-tts" | "gemini-2.5-pro" | "gemini-2.5-pro-preview-tts" | "gemini-3-flash-preview" | "gemini-3-pro-image-preview" | "gemini-3-pro-preview" | "gemini-3.1-flash-image-preview" | "gemini-3.1-flash-image" | "gemini-3.1-flash-lite-image" | "gemini-3.1-flash-lite" | "gemini-3.1-flash-lite-preview" | "gemini-3.1-pro-preview" | "gemini-3.1-pro-preview-customtools" | "gemini-3.5-flash" | "gemini-3.5-flash-lite" | "gemini-3.6-flash" | "gemini-3.7-flash" | "gemini-3-pro-image" | "gemini-flash-latest" | "gemini-flash-lite-latest" | "gemma-4-26b-a4b-it" | "gemma-4-31b-it";
|
|
9
9
|
type GeminiCompletionModelId = ModelId<KnownGeminiCompletionModelId>;
|
|
10
|
-
type KnownGeminiEmbeddingModelId = "gemini-embedding-001";
|
|
10
|
+
type KnownGeminiEmbeddingModelId = "gemini-embedding-001" | "gemini-embedding-2" | "gemini-embedding-2-preview";
|
|
11
11
|
type GeminiEmbeddingModelId = ModelId<KnownGeminiEmbeddingModelId>;
|
|
12
|
-
type KnownGeminiGenerateContentImageModelId = "gemini-2.5-flash-image" | "gemini-3-pro-image-preview" | "gemini-3.1-flash-image-preview";
|
|
12
|
+
type KnownGeminiGenerateContentImageModelId = "gemini-2.5-flash-image" | "gemini-3.1-flash-image" | "gemini-3.1-flash-lite-image" | "gemini-3-pro-image-preview" | "gemini-3.1-flash-image-preview" | "gemini-3-pro-image";
|
|
13
13
|
type KnownGeminiGenerateImagesModelId = "imagen-4.0-generate-001";
|
|
14
14
|
type GeminiGenerateContentImageModelId = ModelId<KnownGeminiGenerateContentImageModelId>;
|
|
15
15
|
type GeminiGenerateImagesModelId = ModelId<KnownGeminiGenerateImagesModelId>;
|
|
@@ -75,10 +75,16 @@ declare class GeminiClient implements ModelListingClient {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
declare const GEMINI_2_5_FLASH_IMAGE = "gemini-2.5-flash-image";
|
|
78
|
+
declare const GEMINI_3_1_FLASH_IMAGE = "gemini-3.1-flash-image";
|
|
79
|
+
declare const GEMINI_3_1_FLASH_LITE_IMAGE = "gemini-3.1-flash-lite-image";
|
|
80
|
+
declare const GEMINI_3_PRO_IMAGE = "gemini-3-pro-image";
|
|
78
81
|
declare const GEMINI_3_PRO_IMAGE_PREVIEW = "gemini-3-pro-image-preview";
|
|
79
82
|
declare const IMAGEN_4_GENERATE = "imagen-4.0-generate-001";
|
|
80
83
|
|
|
81
84
|
declare const index_GEMINI_2_5_FLASH_IMAGE: typeof GEMINI_2_5_FLASH_IMAGE;
|
|
85
|
+
declare const index_GEMINI_3_1_FLASH_IMAGE: typeof GEMINI_3_1_FLASH_IMAGE;
|
|
86
|
+
declare const index_GEMINI_3_1_FLASH_LITE_IMAGE: typeof GEMINI_3_1_FLASH_LITE_IMAGE;
|
|
87
|
+
declare const index_GEMINI_3_PRO_IMAGE: typeof GEMINI_3_PRO_IMAGE;
|
|
82
88
|
declare const index_GEMINI_3_PRO_IMAGE_PREVIEW: typeof GEMINI_3_PRO_IMAGE_PREVIEW;
|
|
83
89
|
type index_GeminiClient = GeminiClient;
|
|
84
90
|
declare const index_GeminiClient: typeof GeminiClient;
|
|
@@ -103,7 +109,7 @@ type index_KnownGeminiEmbeddingModelId = KnownGeminiEmbeddingModelId;
|
|
|
103
109
|
type index_KnownGeminiGenerateContentImageModelId = KnownGeminiGenerateContentImageModelId;
|
|
104
110
|
type index_KnownGeminiGenerateImagesModelId = KnownGeminiGenerateImagesModelId;
|
|
105
111
|
declare namespace index {
|
|
106
|
-
export { index_GEMINI_2_5_FLASH_IMAGE as GEMINI_2_5_FLASH_IMAGE, index_GEMINI_3_PRO_IMAGE_PREVIEW as GEMINI_3_PRO_IMAGE_PREVIEW, index_GeminiClient as GeminiClient, type index_GeminiClientOptions as GeminiClientOptions, type index_GeminiCompletionModelHandle as GeminiCompletionModelHandle, type index_GeminiCompletionModelId as GeminiCompletionModelId, type index_GeminiCompletionModelOptions as GeminiCompletionModelOptions, type index_GeminiEmbeddingModelHandle as GeminiEmbeddingModelHandle, type index_GeminiEmbeddingModelId as GeminiEmbeddingModelId, type index_GeminiEmbeddingModelOptions as GeminiEmbeddingModelOptions, type index_GeminiEmbeddingTaskType as GeminiEmbeddingTaskType, type index_GeminiGenerateContentImageModelId as GeminiGenerateContentImageModelId, type index_GeminiGenerateImagesModelId as GeminiGenerateImagesModelId, type index_GeminiImageGenerationModelHandle as GeminiImageGenerationModelHandle, type index_GeminiImageGenerationModelOptions as GeminiImageGenerationModelOptions, type index_GeminiTranscriptionModelHandle as GeminiTranscriptionModelHandle, type index_GeminiTranscriptionModelId as GeminiTranscriptionModelId, type index_GeminiTranscriptionModelOptions as GeminiTranscriptionModelOptions, index_IMAGEN_4_GENERATE as IMAGEN_4_GENERATE, type index_KnownGeminiCompletionModelId as KnownGeminiCompletionModelId, type index_KnownGeminiEmbeddingModelId as KnownGeminiEmbeddingModelId, type index_KnownGeminiGenerateContentImageModelId as KnownGeminiGenerateContentImageModelId, type index_KnownGeminiGenerateImagesModelId as KnownGeminiGenerateImagesModelId };
|
|
112
|
+
export { index_GEMINI_2_5_FLASH_IMAGE as GEMINI_2_5_FLASH_IMAGE, index_GEMINI_3_1_FLASH_IMAGE as GEMINI_3_1_FLASH_IMAGE, index_GEMINI_3_1_FLASH_LITE_IMAGE as GEMINI_3_1_FLASH_LITE_IMAGE, index_GEMINI_3_PRO_IMAGE as GEMINI_3_PRO_IMAGE, index_GEMINI_3_PRO_IMAGE_PREVIEW as GEMINI_3_PRO_IMAGE_PREVIEW, index_GeminiClient as GeminiClient, type index_GeminiClientOptions as GeminiClientOptions, type index_GeminiCompletionModelHandle as GeminiCompletionModelHandle, type index_GeminiCompletionModelId as GeminiCompletionModelId, type index_GeminiCompletionModelOptions as GeminiCompletionModelOptions, type index_GeminiEmbeddingModelHandle as GeminiEmbeddingModelHandle, type index_GeminiEmbeddingModelId as GeminiEmbeddingModelId, type index_GeminiEmbeddingModelOptions as GeminiEmbeddingModelOptions, type index_GeminiEmbeddingTaskType as GeminiEmbeddingTaskType, type index_GeminiGenerateContentImageModelId as GeminiGenerateContentImageModelId, type index_GeminiGenerateImagesModelId as GeminiGenerateImagesModelId, type index_GeminiImageGenerationModelHandle as GeminiImageGenerationModelHandle, type index_GeminiImageGenerationModelOptions as GeminiImageGenerationModelOptions, type index_GeminiTranscriptionModelHandle as GeminiTranscriptionModelHandle, type index_GeminiTranscriptionModelId as GeminiTranscriptionModelId, type index_GeminiTranscriptionModelOptions as GeminiTranscriptionModelOptions, index_IMAGEN_4_GENERATE as IMAGEN_4_GENERATE, type index_KnownGeminiCompletionModelId as KnownGeminiCompletionModelId, type index_KnownGeminiEmbeddingModelId as KnownGeminiEmbeddingModelId, type index_KnownGeminiGenerateContentImageModelId as KnownGeminiGenerateContentImageModelId, type index_KnownGeminiGenerateImagesModelId as KnownGeminiGenerateImagesModelId };
|
|
107
113
|
}
|
|
108
114
|
|
|
109
|
-
export { GEMINI_2_5_FLASH_IMAGE, GEMINI_3_PRO_IMAGE_PREVIEW, GeminiClient, type GeminiClientOptions, type GeminiCompletionModelHandle, type GeminiCompletionModelId, type GeminiCompletionModelOptions, type GeminiEmbeddingModelHandle, type GeminiEmbeddingModelId, type GeminiEmbeddingModelOptions, type GeminiEmbeddingTaskType, type GeminiGenerateContentImageModelId, type GeminiGenerateImagesModelId, type GeminiImageGenerationModelHandle, type GeminiImageGenerationModelOptions, type GeminiTranscriptionModelHandle, type GeminiTranscriptionModelId, type GeminiTranscriptionModelOptions, IMAGEN_4_GENERATE, type KnownGeminiCompletionModelId, type KnownGeminiEmbeddingModelId, type KnownGeminiGenerateContentImageModelId, type KnownGeminiGenerateImagesModelId, index as gemini };
|
|
115
|
+
export { GEMINI_2_5_FLASH_IMAGE, GEMINI_3_1_FLASH_IMAGE, GEMINI_3_1_FLASH_LITE_IMAGE, GEMINI_3_PRO_IMAGE, GEMINI_3_PRO_IMAGE_PREVIEW, GeminiClient, type GeminiClientOptions, type GeminiCompletionModelHandle, type GeminiCompletionModelId, type GeminiCompletionModelOptions, type GeminiEmbeddingModelHandle, type GeminiEmbeddingModelId, type GeminiEmbeddingModelOptions, type GeminiEmbeddingTaskType, type GeminiGenerateContentImageModelId, type GeminiGenerateImagesModelId, type GeminiImageGenerationModelHandle, type GeminiImageGenerationModelOptions, type GeminiTranscriptionModelHandle, type GeminiTranscriptionModelId, type GeminiTranscriptionModelOptions, IMAGEN_4_GENERATE, type KnownGeminiCompletionModelId, type KnownGeminiEmbeddingModelId, type KnownGeminiGenerateContentImageModelId, type KnownGeminiGenerateImagesModelId, index as gemini };
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,9 @@ var __export = (target, all) => {
|
|
|
8
8
|
var gemini_exports = {};
|
|
9
9
|
__export(gemini_exports, {
|
|
10
10
|
GEMINI_2_5_FLASH_IMAGE: () => GEMINI_2_5_FLASH_IMAGE,
|
|
11
|
+
GEMINI_3_1_FLASH_IMAGE: () => GEMINI_3_1_FLASH_IMAGE,
|
|
12
|
+
GEMINI_3_1_FLASH_LITE_IMAGE: () => GEMINI_3_1_FLASH_LITE_IMAGE,
|
|
13
|
+
GEMINI_3_PRO_IMAGE: () => GEMINI_3_PRO_IMAGE,
|
|
11
14
|
GEMINI_3_PRO_IMAGE_PREVIEW: () => GEMINI_3_PRO_IMAGE_PREVIEW,
|
|
12
15
|
GeminiClient: () => GeminiClient,
|
|
13
16
|
IMAGEN_4_GENERATE: () => IMAGEN_4_GENERATE
|
|
@@ -1178,6 +1181,9 @@ function isNumberArray(value) {
|
|
|
1178
1181
|
// src/gemini/image-generation.ts
|
|
1179
1182
|
import { Buffer as Buffer2 } from "buffer";
|
|
1180
1183
|
var GEMINI_2_5_FLASH_IMAGE = "gemini-2.5-flash-image";
|
|
1184
|
+
var GEMINI_3_1_FLASH_IMAGE = "gemini-3.1-flash-image";
|
|
1185
|
+
var GEMINI_3_1_FLASH_LITE_IMAGE = "gemini-3.1-flash-lite-image";
|
|
1186
|
+
var GEMINI_3_PRO_IMAGE = "gemini-3-pro-image";
|
|
1181
1187
|
var GEMINI_3_PRO_IMAGE_PREVIEW = "gemini-3-pro-image-preview";
|
|
1182
1188
|
var IMAGEN_4_GENERATE = "imagen-4.0-generate-001";
|
|
1183
1189
|
var GeminiImageGenerationModel = class {
|
|
@@ -1374,11 +1380,29 @@ var GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS = {
|
|
|
1374
1380
|
maxInputTokens: 65536,
|
|
1375
1381
|
maxOutputTokens: 65536
|
|
1376
1382
|
},
|
|
1383
|
+
"gemini-3.1-flash-image": {
|
|
1384
|
+
contextWindow: 131072,
|
|
1385
|
+
maxInputTokens: 131072,
|
|
1386
|
+
maxOutputTokens: 32768
|
|
1387
|
+
},
|
|
1388
|
+
"gemini-3.1-flash-lite-image": {
|
|
1389
|
+
contextWindow: 65536,
|
|
1390
|
+
maxInputTokens: 65536,
|
|
1391
|
+
maxOutputTokens: 4096
|
|
1392
|
+
},
|
|
1377
1393
|
"gemini-3.1-flash-lite": CONTEXT_1M_64K,
|
|
1378
1394
|
"gemini-3.1-flash-lite-preview": CONTEXT_1M_64K,
|
|
1379
1395
|
"gemini-3.1-pro-preview": CONTEXT_1M_64K,
|
|
1380
1396
|
"gemini-3.1-pro-preview-customtools": CONTEXT_1M_64K,
|
|
1381
1397
|
"gemini-3.5-flash": CONTEXT_1M_64K,
|
|
1398
|
+
"gemini-3.5-flash-lite": CONTEXT_1M_64K,
|
|
1399
|
+
"gemini-3.6-flash": CONTEXT_1M_64K,
|
|
1400
|
+
"gemini-3.7-flash": CONTEXT_1M_64K,
|
|
1401
|
+
"gemini-3-pro-image": {
|
|
1402
|
+
contextWindow: 65536,
|
|
1403
|
+
maxInputTokens: 65536,
|
|
1404
|
+
maxOutputTokens: 32768
|
|
1405
|
+
},
|
|
1382
1406
|
"gemini-flash-latest": CONTEXT_1M_64K,
|
|
1383
1407
|
"gemini-flash-lite-latest": CONTEXT_1M_64K,
|
|
1384
1408
|
"gemma-4-26b-a4b-it": {
|
|
@@ -1663,6 +1687,9 @@ function isAsyncIterable(value) {
|
|
|
1663
1687
|
}
|
|
1664
1688
|
export {
|
|
1665
1689
|
GEMINI_2_5_FLASH_IMAGE,
|
|
1690
|
+
GEMINI_3_1_FLASH_IMAGE,
|
|
1691
|
+
GEMINI_3_1_FLASH_LITE_IMAGE,
|
|
1692
|
+
GEMINI_3_PRO_IMAGE,
|
|
1666
1693
|
GEMINI_3_PRO_IMAGE_PREVIEW,
|
|
1667
1694
|
GeminiClient,
|
|
1668
1695
|
IMAGEN_4_GENERATE,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gemini/index.ts","../src/gemini/client.ts","../src/gemini/completion.ts","../src/request-messages.ts","../src/gemini/retry.ts","../src/gemini/embedding.ts","../src/gemini/image-generation.ts","../src/gemini/models.ts","../src/gemini/transcription.ts"],"sourcesContent":["export {\n GeminiClient,\n type GeminiClientOptions,\n type GeminiCompletionModelHandle,\n type GeminiCompletionModelOptions,\n type GeminiEmbeddingModelHandle,\n type GeminiImageGenerationModelHandle,\n type GeminiImageGenerationModelOptions,\n type GeminiTranscriptionModelHandle,\n type GeminiTranscriptionModelOptions,\n} from \"./client\";\nexport type {\n GeminiEmbeddingModelOptions,\n GeminiEmbeddingTaskType,\n} from \"./embedding\";\nexport {\n GEMINI_2_5_FLASH_IMAGE,\n GEMINI_3_PRO_IMAGE_PREVIEW,\n IMAGEN_4_GENERATE,\n} from \"./image-generation\";\nexport type {\n GeminiCompletionModelId,\n GeminiEmbeddingModelId,\n GeminiGenerateContentImageModelId,\n GeminiGenerateImagesModelId,\n GeminiTranscriptionModelId,\n KnownGeminiCompletionModelId,\n KnownGeminiEmbeddingModelId,\n KnownGeminiGenerateContentImageModelId,\n KnownGeminiGenerateImagesModelId,\n} from \"./models\";\n","import {\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport type { EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type { ImageGenerationModel } from \"@anvia/core/image-generation\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport type { TranscriptionModel } from \"@anvia/core/transcription\";\nimport { GoogleGenAI, type GoogleGenAIOptions } from \"@google/genai\";\nimport { GeminiCompletionModel } from \"./completion\";\nimport { GeminiEmbeddingModel, type GeminiEmbeddingModelOptions } from \"./embedding\";\nimport { GeminiImageGenerationModel, GeminiImagenGenerationModel } from \"./image-generation\";\nimport type {\n GeminiCompletionModelId,\n GeminiGenerateContentImageModelId,\n GeminiGenerateImagesModelId,\n GeminiTranscriptionModelId,\n} from \"./models\";\nimport { GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\nimport { GeminiTranscriptionModel } from \"./transcription\";\n\ntype GeminiApiClientOptions = {\n apiKey: string;\n vertexAi?: never;\n client?: never;\n};\n\ntype VertexClientOptions = {\n vertexAi: {\n projectId: string;\n location: string;\n googleAuthOptions?: GoogleGenAIOptions[\"googleAuthOptions\"];\n };\n apiKey?: never;\n client?: never;\n};\n\ntype InjectedClientOptions = {\n client: GoogleGenAI;\n apiKey?: never;\n vertexAi?: never;\n};\n\nexport type GeminiClientOptions =\n | GeminiApiClientOptions\n | VertexClientOptions\n | InjectedClientOptions;\n\nexport type GeminiCompletionModelOptions = {\n modelId: GeminiCompletionModelId;\n contextLimits?: ModelContextLimits | undefined;\n};\n\nexport type GeminiImageGenerationModelOptions =\n | { api: \"generateContent\"; modelId: GeminiGenerateContentImageModelId }\n | { api: \"generateImages\"; modelId: GeminiGenerateImagesModelId };\n\nexport type GeminiTranscriptionModelOptions = { modelId: GeminiTranscriptionModelId };\n\nexport type GeminiCompletionModelHandle = StreamingCompletionModel<unknown>;\nexport type GeminiEmbeddingModelHandle = EmbeddingModel;\nexport type GeminiImageGenerationModelHandle = ImageGenerationModel<unknown>;\nexport type GeminiTranscriptionModelHandle = TranscriptionModel<unknown>;\n\nexport class GeminiClient implements ModelListingClient {\n private readonly sdk: GoogleGenAI;\n\n constructor(options: GeminiClientOptions) {\n if (options.client !== undefined) {\n rejectManagedOptionsWithInjectedClient(options, [\"apiKey\", \"vertexAi\"]);\n this.sdk = options.client;\n return;\n }\n this.sdk = new GoogleGenAI(toGoogleGenAIOptions(options));\n }\n\n completionModel(options: GeminiCompletionModelOptions): GeminiCompletionModelHandle {\n const modelId = requireModelId(options.modelId);\n return new GeminiCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n );\n }\n\n embeddingModel(options: GeminiEmbeddingModelOptions): GeminiEmbeddingModelHandle {\n requireModelId(options.modelId);\n validateOptionalPositiveSafeInteger(options.dimensions, \"dimensions\");\n validateOptionalPositiveSafeInteger(options.maxBatchSize, \"maxBatchSize\");\n return new GeminiEmbeddingModel(this.sdk, options);\n }\n\n imageGenerationModel(\n options: GeminiImageGenerationModelOptions,\n ): GeminiImageGenerationModelHandle {\n const modelId = requireModelId(options.modelId);\n return options.api === \"generateContent\"\n ? new GeminiImageGenerationModel(this.sdk, modelId)\n : new GeminiImagenGenerationModel(this.sdk, modelId);\n }\n\n transcriptionModel(options: GeminiTranscriptionModelOptions): GeminiTranscriptionModelHandle {\n return new GeminiTranscriptionModel(this.sdk, requireModelId(options.modelId));\n }\n\n async listModels(options: { abortSignal?: AbortSignal | undefined } = {}): Promise<ModelList> {\n try {\n const config = { pageSize: 1000 };\n if (options.abortSignal !== undefined) {\n Object.assign(config, { abortSignal: options.abortSignal });\n }\n const response = await this.sdk.models.list({\n config: disableGeminiNativeRetries(config),\n });\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"Gemini\", error);\n }\n }\n}\n\nfunction rejectManagedOptionsWithInjectedClient(options: object, keys: readonly string[]): void {\n const conflict = keys.find((key) => key in options);\n if (conflict !== undefined) {\n throw new TypeError(`GeminiClient cannot combine client with ${conflict}.`);\n }\n}\n\nexport function toGoogleGenAIOptions(options: GeminiClientOptions): GoogleGenAIOptions {\n if (\"client\" in options && options.client !== undefined) {\n throw new TypeError(\"Injected Gemini clients do not have managed SDK options.\");\n }\n if (\"vertexAi\" in options && options.vertexAi !== undefined) {\n const sdkOptions: GoogleGenAIOptions = {\n vertexai: true,\n project: requireOption(options.vertexAi.projectId, \"projectId\", \"Vertex Gemini\"),\n location: requireOption(options.vertexAi.location, \"location\", \"Vertex Gemini\"),\n };\n if (options.vertexAi.googleAuthOptions !== undefined) {\n sdkOptions.googleAuthOptions = options.vertexAi.googleAuthOptions;\n }\n return sdkOptions;\n }\n\n return {\n apiKey: requireOption(options.apiKey, \"apiKey\", \"Gemini\"),\n };\n}\n\nfunction requireOption(value: string | undefined, name: string, label: string): string {\n if (value === undefined || value.trim().length === 0) {\n throw new Error(`Missing ${label} ${name}. Pass ${name} when constructing GeminiClient.`);\n }\n\n return value;\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n\nfunction validateOptionalPositiveSafeInteger(value: number | undefined, name: string): void {\n if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {\n throw new TypeError(`${name} must be a positive safe integer`);\n }\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.models)) {\n return response.models;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model)) {\n return undefined;\n }\n\n const id =\n stringValue(model.baseModelId) ??\n stringValue(model.base_model_id) ??\n normalizeGeminiModelId(stringValue(model.name));\n\n if (id === undefined) {\n return undefined;\n }\n\n const listedModel: ModelList[\"data\"][number] = {\n id,\n };\n if (typeof model.displayName === \"string\") {\n listedModel.name = model.displayName;\n }\n if (typeof model.display_name === \"string\") {\n listedModel.name = model.display_name;\n }\n if (typeof model.description === \"string\") {\n listedModel.description = model.description;\n }\n if (typeof model.type === \"string\") {\n listedModel.type = model.type;\n }\n if (typeof model.inputTokenLimit === \"number\") {\n listedModel.contextLength = model.inputTokenLimit;\n }\n if (typeof model.input_token_limit === \"number\") {\n listedModel.contextLength = model.input_token_limit;\n }\n return listedModel;\n}\n\nfunction normalizeGeminiModelId(name: string | undefined): string | undefined {\n const trimmed = name?.trim().replace(/^models\\//, \"\");\n return trimmed === undefined || trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n statusCode,\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport {\n type AssistantContentPart,\n assertCompletionRequestSupported,\n type CompletionFinishReason,\n type CompletionModelCapabilities,\n type CompletionModelInfo,\n type CompletionModelStreamEvent,\n CompletionProviderOutputError,\n type CompletionRequest,\n type CompletionResponse,\n isJsonValue,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ModelCallOptions,\n type StreamingCompletionModel,\n type ToolCallArgumentsMode,\n type ToolChoice,\n type ToolDefinition,\n type ToolResultPart,\n Usage,\n type UserContentPart,\n withContextUsage,\n} from \"@anvia/core/completion\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport type { GeminiCompletionModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\ntype GeminiGenerateParams = Record<string, unknown>;\ntype GeminiConfig = Record<string, unknown>;\ntype GeminiContent = {\n role: \"user\" | \"model\";\n parts: GeminiPart[];\n};\ntype GeminiPart = Record<string, unknown>;\ntype IndexedGeminiPart = Readonly<{\n index: number;\n part: GeminiPart;\n}>;\ntype GeminiFunctionCall = Readonly<{\n toolCallId: string;\n callId?: string | undefined;\n name: string;\n args: JsonObject;\n signature?: string | undefined;\n partIndex: number;\n}>;\ntype GeminiStreamChunkMapping = Readonly<{\n events: CompletionModelStreamEvent[];\n toolCalls: Extract<AssistantContentPart, { type: \"tool-call\" }>[];\n hasToolCallMarker: boolean;\n hasSyntheticToolCalls: boolean;\n providerFinishReason?: string | undefined;\n terminalError?: CompletionProviderOutputError | undefined;\n}>;\n\nexport class GeminiCompletionModel implements StreamingCompletionModel<unknown> {\n readonly provider = \"gemini\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiCompletionModelId,\n readonly contextLimits?: ModelContextLimits,\n ) {}\n\n private modelInfo(): CompletionModelInfo | undefined {\n return this.contextLimits === undefined\n ? undefined\n : { modelId: this.modelId, context: this.contextLimits };\n }\n\n traceRequest(\n request: CompletionRequest,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toGeminiGenerateContentParams(this.modelId, request);\n return providerRequestSummary(params, request, options);\n }\n\n async completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toGeminiGenerateContentParams(this.modelId, request);\n applyAbortSignal(params, options);\n const response = await this.client.models.generateContent(params as never);\n return withContextUsage(fromGeminiGenerateContentResponse(response), this.modelInfo());\n }\n\n async *streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = toGeminiGenerateContentParams(this.modelId, request);\n applyAbortSignal(params, options);\n const stream = await this.client.models.generateContentStream(params as never);\n const streamState = new GeminiCompletionStreamState();\n for await (const chunk of stream as unknown as AsyncIterable<unknown>) {\n const mapping = mapGeminiGenerateContentStreamChunk(chunk);\n streamState.accept(chunk, mapping);\n for (const event of mapping.events) {\n if (event.type !== \"final\") {\n yield event;\n }\n }\n }\n streamState.assertComplete();\n const finalEvent = streamState.finalEvent();\n if (finalEvent !== undefined) {\n yield {\n ...finalEvent,\n response: withContextUsage(finalEvent.response, this.modelInfo()),\n };\n }\n }\n}\n\nexport function toGeminiGenerateContentParams(\n modelId: GeminiCompletionModelId,\n request: CompletionRequest,\n): GeminiGenerateParams {\n const messages = requestMessages(request);\n if (\n request.providerOptions !== undefined &&\n (!isPlainObject(request.providerOptions) || !isJsonValue(request.providerOptions))\n ) {\n throw new TypeError(\"Gemini providerOptions must be a JSON object.\");\n }\n const providerOptions = request.providerOptions ?? {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n if (providerConfigValue !== undefined && !isPlainObject(providerConfigValue)) {\n throw new TypeError(\"Gemini providerOptions.config must be a JSON object.\");\n }\n const providerConfig = providerConfigValue === undefined ? {} : { ...providerConfigValue };\n delete providerConfig.tools;\n const config = disableGeminiNativeRetries({\n ...providerConfig,\n ...geminiConfig(request, messages),\n });\n const params: GeminiGenerateParams = {\n ...providerTopLevel,\n model: modelId,\n contents: messagesToGeminiContents(messages),\n config,\n };\n\n return params;\n}\n\nfunction applyAbortSignal(\n params: GeminiGenerateParams,\n options: ModelCallOptions | undefined,\n): void {\n if (options?.abortSignal === undefined) return;\n const config = isPlainObject(params.config) ? params.config : {};\n params.config = { ...config, abortSignal: options.abortSignal };\n}\n\nfunction providerRequestSummary(\n params: GeminiGenerateParams,\n request: CompletionRequest,\n options: { stream?: boolean | undefined },\n): JsonObject {\n const config = isPlainObject(params.config) ? params.config : {};\n return compactJsonObject({\n provider: \"gemini\",\n api: options.stream === true ? \"models.generateContentStream\" : \"models.generateContent\",\n stream: options.stream === true,\n model: typeof params.model === \"string\" ? params.model : undefined,\n parameterKeys: Object.keys(params).sort(),\n contentCount: Array.isArray(params.contents) ? params.contents.length : undefined,\n configKeys: Object.keys(config).sort(),\n toolCount: request.tools.length,\n toolNames: request.tools.map((tool) => tool.name),\n hasSystemInstruction: config.systemInstruction !== undefined,\n hasOutputSchema: request.outputSchema !== undefined,\n temperature: request.temperature,\n maxTokens: request.maxTokens,\n toolChoice: toolChoiceSummary(request.toolChoice),\n providerOptionKeys: isPlainObject(request.providerOptions)\n ? Object.keys(request.providerOptions).sort()\n : undefined,\n });\n}\n\nfunction toolChoiceSummary(toolChoice: ToolChoice | undefined): JsonValue | undefined {\n if (toolChoice === undefined || typeof toolChoice === \"string\") {\n return toolChoice;\n }\n return { type: toolChoice.type, name: toolChoice.name };\n}\n\nfunction compactJsonObject(values: Record<string, unknown>): JsonObject {\n return Object.fromEntries(\n Object.entries(values).flatMap(([key, value]) => {\n if (!isJsonValue(value)) {\n return [];\n }\n return [[key, value]];\n }),\n ) as JsonObject;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction geminiConfig(request: CompletionRequest, messages: MessageType[]): GeminiConfig {\n const config: GeminiConfig = {};\n const systemInstruction = systemInstructionFrom(request, messages);\n if (systemInstruction !== undefined) {\n config.systemInstruction = systemInstruction;\n }\n if (request.temperature !== undefined) {\n config.temperature = request.temperature;\n }\n if (request.maxTokens !== undefined) {\n config.maxOutputTokens = request.maxTokens;\n }\n if (request.tools.length > 0) {\n config.tools = [{ functionDeclarations: request.tools.map(toolDefinitionToGemini) }];\n }\n if (request.toolChoice !== undefined) {\n config.toolConfig = toolChoiceToGemini(request.toolChoice);\n }\n if (request.outputSchema !== undefined) {\n config.responseMimeType = \"application/json\";\n config.responseJsonSchema = request.outputSchema;\n }\n return config;\n}\n\nfunction systemInstructionFrom(\n request: CompletionRequest,\n messages: MessageType[],\n): string | undefined {\n const systemMessages = messages.flatMap((message) =>\n message.role === \"system\" ? [message.content] : [],\n );\n if (request.instructions !== undefined) {\n systemMessages.unshift(request.instructions);\n }\n return systemMessages.length === 0 ? undefined : systemMessages.join(\"\\n\\n\");\n}\n\nexport function messagesToGeminiContents(messages: MessageType[]): GeminiContent[] {\n const toolNamesById = new Map<string, string>();\n const contents: GeminiContent[] = [];\n\n for (const message of messages) {\n if (message.role === \"system\") {\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content = assistantMessageToGeminiContent(message);\n for (const item of typeof message.content === \"string\" ? [] : message.content) {\n if (item.type === \"tool-call\") {\n toolNamesById.set(item.toolCallId, item.toolName);\n if (item.callId !== undefined) {\n toolNamesById.set(item.callId, item.toolName);\n }\n }\n }\n if (content.parts.length > 0) {\n contents.push(content);\n }\n continue;\n }\n\n const content =\n message.role === \"tool\"\n ? toolMessageToGeminiContent(message, toolNamesById)\n : userMessageToGeminiContent(message);\n if (content.parts.length > 0) {\n contents.push(content);\n }\n }\n\n return contents;\n}\n\nfunction userMessageToGeminiContent(\n message: Extract<MessageType, { role: \"user\" }>,\n): GeminiContent {\n return {\n role: \"user\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : message.content.map(userContentToGeminiPart),\n };\n}\n\nfunction toolMessageToGeminiContent(\n message: Extract<MessageType, { role: \"tool\" }>,\n toolNamesById: Map<string, string>,\n): GeminiContent {\n return {\n role: \"user\",\n parts: message.content.map((content) => {\n if (content.type !== \"tool-result\") {\n throw new TypeError(\n \"Anvia interaction responses must be resolved by Agent before provider calls.\",\n );\n }\n return toolContentToGeminiPart(content, toolNamesById);\n }),\n };\n}\n\nfunction assistantMessageToGeminiContent(\n message: Extract<MessageType, { role: \"assistant\" }>,\n): GeminiContent {\n return {\n role: \"model\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : message.content.flatMap((content): GeminiPart[] => {\n if (content.type === \"text\") {\n const part: GeminiPart = { text: content.text };\n if (content.signature !== undefined) {\n part.thoughtSignature = content.signature;\n }\n return [part];\n }\n if (content.type === \"tool-call\") {\n const functionCall: Record<string, unknown> = {\n name: content.toolName,\n args: content.input,\n };\n if (content.callId !== undefined) {\n functionCall.id = content.callId;\n }\n const part: GeminiPart = { functionCall };\n if (content.signature !== undefined) {\n part.thoughtSignature = content.signature;\n }\n return [part];\n }\n if (content.type === \"reasoning\" && content.details !== undefined) {\n return content.details.flatMap((reasoning): GeminiPart[] => {\n if (reasoning.type !== \"text\" && reasoning.type !== \"summary\") {\n return [];\n }\n const part: GeminiPart = { text: reasoning.text, thought: true };\n if (reasoning.type === \"text\" && reasoning.signature !== undefined) {\n part.thoughtSignature = reasoning.signature;\n }\n return [part];\n });\n }\n if (content.type === \"image\" || content.type === \"file\") {\n throw new Error(\n \"Gemini does not support image or file content in assistant history yet\",\n );\n }\n return [];\n }),\n };\n}\n\nfunction userContentToGeminiPart(content: UserContentPart): GeminiPart {\n if (content.type === \"text\") {\n return { text: content.text };\n }\n if (content.type === \"image\") {\n return imageContentToGeminiPart(content);\n }\n return documentContentToGeminiPart(content);\n}\n\nfunction imageContentToGeminiPart(\n content: Extract<UserContentPart, { type: \"image\" }>,\n): GeminiPart {\n if (content.image.type === \"data\") {\n return {\n inlineData: {\n mimeType: content.mediaType ?? \"image/png\",\n data: content.image.data,\n },\n };\n }\n\n return {\n fileData: {\n fileUri: content.image.url,\n mimeType: content.mediaType ?? mimeTypeFromImageUrl(content.image.url),\n },\n };\n}\n\nfunction mimeTypeFromImageUrl(url: string): string {\n const pathname = safeUrlPathname(url).toLowerCase();\n if (pathname.endsWith(\".jpg\") || pathname.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (pathname.endsWith(\".webp\")) return \"image/webp\";\n if (pathname.endsWith(\".gif\")) return \"image/gif\";\n if (pathname.endsWith(\".bmp\")) return \"image/bmp\";\n if (pathname.endsWith(\".heic\")) return \"image/heic\";\n if (pathname.endsWith(\".heif\")) return \"image/heif\";\n return \"image/png\";\n}\n\nfunction safeUrlPathname(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n return url;\n }\n}\n\nfunction documentContentToGeminiPart(\n content: Extract<UserContentPart, { type: \"file\" }>,\n): GeminiPart {\n if (content.data.type === \"text\") {\n return { text: content.data.text };\n }\n\n if (content.data.type === \"data\") {\n return {\n inlineData: {\n mimeType: content.mediaType,\n data: content.data.data,\n },\n };\n }\n\n return {\n fileData: {\n fileUri: content.data.url,\n mimeType: content.mediaType,\n },\n };\n}\n\nfunction toolContentToGeminiPart(\n content: ToolResultPart,\n toolNamesById: Map<string, string>,\n): GeminiPart {\n const id = content.callId ?? content.toolCallId;\n const functionResponse: Record<string, unknown> = {\n name: content.toolName || toolNamesById.get(id) || content.toolCallId,\n response: toolResultResponse(content),\n };\n if (content.callId !== undefined) {\n functionResponse.id = content.callId;\n }\n return { functionResponse };\n}\n\nfunction toolResultResponse(content: ToolResultPart): Record<string, unknown> {\n const output = content.output;\n if (output.type === \"json\") {\n return { result: output.value };\n }\n if (output.type === \"text\") {\n return { content: output.value };\n }\n if (output.type === \"error-json\" || output.type === \"error-text\") {\n return { error: output.value };\n }\n if (output.type === \"execution-denied\") {\n return { error: output.reason ?? \"Tool execution was denied.\" };\n }\n return {\n content: output.value\n .map((item) => (item.type === \"text\" ? item.text : `[file:${item.mediaType}]`))\n .join(\"\\n\"),\n };\n}\n\nfunction toolDefinitionToGemini(tool: ToolDefinition): GeminiPart {\n return {\n name: tool.name,\n description: tool.description,\n parametersJsonSchema: tool.parameters,\n };\n}\n\nfunction toolChoiceToGemini(toolChoice: ToolChoice): GeminiPart {\n if (toolChoice === \"auto\") {\n return { functionCallingConfig: { mode: \"AUTO\" } };\n }\n if (toolChoice === \"required\") {\n return { functionCallingConfig: { mode: \"ANY\" } };\n }\n if (toolChoice === \"none\") {\n return { functionCallingConfig: { mode: \"NONE\" } };\n }\n return {\n functionCallingConfig: {\n mode: \"ANY\",\n allowedFunctionNames: [toolChoice.name],\n },\n };\n}\n\nexport function fromGeminiGenerateContentResponse(response: unknown): CompletionResponse {\n const raw = isPlainObject(response) ? response : {};\n const usage = usageFromGemini(raw.usageMetadata);\n const parts = candidateParts(raw, usage);\n const providerFinishReason = providerFinishReasonFromGeminiResponse(raw);\n const finishError = geminiToolFinishError(\n providerFinishReason,\n hasGeminiFunctionCallMarker(raw, parts),\n usage,\n );\n if (finishError !== undefined) throw finishError;\n const choice = assistantContentFromGeminiResponse(raw, usage);\n\n const result: CompletionResponse = {\n choice,\n usage,\n rawResponse: response,\n };\n applyGeminiFinishReason(result, raw);\n const id = stringFrom(raw.responseId) ?? stringFrom(raw.id);\n if (id !== undefined) {\n result.messageId = id;\n }\n assertSafeGeminiCompletionResponse(result);\n return result;\n}\n\nfunction applyGeminiFinishReason(\n response: CompletionResponse,\n raw: Record<string, unknown>,\n hasStreamedToolCalls = false,\n): void {\n const value = providerFinishReasonFromGeminiResponse(raw);\n if (value === undefined) return;\n applyGeminiFinishReasonValue(response, value, hasStreamedToolCalls);\n}\n\nfunction applyGeminiFinishReasonValue(\n response: CompletionResponse,\n value: string,\n hasStreamedToolCalls: boolean,\n): void {\n response.finishReason = geminiFinishReason(\n value,\n hasStreamedToolCalls || response.choice.some((part) => part.type === \"tool-call\"),\n );\n response.providerFinishReason = value;\n}\n\nfunction geminiFinishReason(value: string, hasToolCalls: boolean): CompletionFinishReason {\n if (value === \"MAX_TOKENS\") return \"length\";\n if (\n value === \"SAFETY\" ||\n value === \"RECITATION\" ||\n value === \"BLOCKLIST\" ||\n value === \"PROHIBITED_CONTENT\" ||\n value === \"SPII\" ||\n value === \"IMAGE_SAFETY\" ||\n value === \"IMAGE_PROHIBITED_CONTENT\"\n ) {\n return \"content-filter\";\n }\n if (value === \"STOP\") {\n return hasToolCalls ? \"tool-calls\" : \"stop\";\n }\n return \"other\";\n}\n\nexport function fromGeminiGenerateContentStreamChunk(chunk: unknown): CompletionModelStreamEvent[] {\n const mapping = mapGeminiGenerateContentStreamChunk(chunk);\n if (mapping.terminalError !== undefined) throw mapping.terminalError;\n return mapping.events;\n}\n\nfunction mapGeminiGenerateContentStreamChunk(chunk: unknown): GeminiStreamChunkMapping {\n if (!isPlainObject(chunk)) {\n return {\n events: [],\n toolCalls: [],\n hasToolCallMarker: false,\n hasSyntheticToolCalls: false,\n };\n }\n\n const events: CompletionModelStreamEvent[] = [];\n const usage = usageFromGemini(chunk.usageMetadata);\n const parts = candidateParts(chunk, usage);\n const providerFinishReason = providerFinishReasonFromGeminiResponse(chunk);\n const hasToolCallMarker = hasGeminiFunctionCallMarker(chunk, parts);\n const terminalError =\n providerFinishReason === undefined\n ? undefined\n : geminiToolFinishError(providerFinishReason, hasToolCallMarker, usage);\n const calls =\n terminalError === undefined ? functionCallsFromGeminiResponse(chunk, parts, usage) : [];\n const directText = textFromGeminiResponse(chunk, parts);\n if (terminalError === undefined && directText.length > 0 && parts.length === 0) {\n events.push({ type: \"text_delta\", delta: directText });\n }\n for (const { part } of terminalError === undefined ? parts : []) {\n if (typeof part.text === \"string\" && part.text.length > 0) {\n if (part.thought === true) {\n events.push({ type: \"reasoning_delta\", delta: part.text, contentType: \"summary\" });\n } else {\n events.push({ type: \"text_delta\", delta: part.text });\n }\n }\n }\n for (const call of calls) {\n events.push(\n toolCallDelta(call.toolCallId, {\n callId: call.callId,\n name: call.name,\n signature: call.signature,\n }),\n );\n const argumentsDelta = JSON.stringify(call.args);\n if (argumentsDelta === undefined) {\n throw invalidGeminiToolCallArguments(call.toolCallId, usage);\n }\n events.push(\n toolCallDelta(call.toolCallId, {\n callId: call.callId,\n argumentsDelta,\n argumentsMode: \"replace\",\n }),\n );\n }\n const id = stringFrom(chunk.responseId) ?? stringFrom(chunk.id);\n if (id !== undefined) {\n events.push({ type: \"message_id\", id });\n }\n if (isPlainObject(chunk.usageMetadata)) {\n if (terminalError === undefined) {\n events.push({ type: \"final\", response: fromGeminiGenerateContentResponse(chunk) });\n } else {\n const response: CompletionResponse = { choice: [], usage, rawResponse: chunk };\n if (providerFinishReason !== undefined) {\n applyGeminiFinishReasonValue(response, providerFinishReason, true);\n }\n events.push({ type: \"final\", response });\n }\n }\n return providerFinishReason === undefined\n ? {\n events,\n toolCalls: calls.map(toolCallFromGeminiFunctionCall),\n hasToolCallMarker,\n hasSyntheticToolCalls: calls.some((call) => call.callId === undefined),\n terminalError,\n }\n : {\n events,\n toolCalls: calls.map(toolCallFromGeminiFunctionCall),\n hasToolCallMarker,\n hasSyntheticToolCalls: calls.some((call) => call.callId === undefined),\n providerFinishReason,\n terminalError,\n };\n}\n\nclass GeminiCompletionStreamState {\n private readonly toolCalls = new Map<\n string,\n Extract<AssistantContentPart, { type: \"tool-call\" }>\n >();\n private providerFinishReason: string | undefined;\n private terminalChunk: unknown;\n private finalResponse: CompletionResponse | undefined;\n private sawToolCallMarker = false;\n private sawSyntheticToolCallChunk = false;\n private terminalError: CompletionProviderOutputError | undefined;\n\n accept(chunk: unknown, mapping: GeminiStreamChunkMapping): void {\n if (mapping.hasSyntheticToolCalls && this.sawSyntheticToolCallChunk) {\n const toolCallId = mapping.toolCalls.find(\n (toolCall) => toolCall.callId === undefined,\n )?.toolCallId;\n throw toolCallId === undefined\n ? new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n usage: this.currentUsage(),\n })\n : invalidGeminiToolCall(toolCallId, this.currentUsage());\n }\n if (\n this.providerFinishReason !== undefined &&\n (mapping.hasToolCallMarker || hasGeminiSemanticProgress(mapping.events))\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: \"other\",\n usage: this.currentUsage(),\n });\n }\n for (const toolCall of mapping.toolCalls) {\n const existing = this.toolCalls.get(toolCall.toolCallId);\n if (existing !== undefined) {\n if (\n existing.callId === undefined ||\n toolCall.callId === undefined ||\n !sameGeminiToolCall(existing, toolCall)\n ) {\n throw invalidGeminiToolCall(toolCall.toolCallId, this.currentUsage());\n }\n continue;\n }\n this.toolCalls.set(toolCall.toolCallId, toolCall);\n }\n this.sawToolCallMarker ||= mapping.hasToolCallMarker;\n this.sawSyntheticToolCallChunk ||= mapping.hasSyntheticToolCalls;\n for (const event of mapping.events) {\n if (event.type === \"final\") {\n this.finalResponse = event.response;\n }\n }\n this.terminalError ??= mapping.terminalError;\n\n if (mapping.providerFinishReason !== undefined) {\n if (\n this.providerFinishReason !== undefined &&\n this.providerFinishReason !== mapping.providerFinishReason\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: \"other\",\n usage: this.currentUsage(),\n });\n }\n this.providerFinishReason = mapping.providerFinishReason;\n this.terminalChunk = chunk;\n }\n }\n\n assertComplete(): void {\n if (this.terminalError !== undefined) {\n throw geminiProviderOutputErrorWithUsage(this.terminalError, this.currentUsage());\n }\n if (!this.sawToolCallMarker && this.toolCalls.size === 0) return;\n if (this.providerFinishReason !== undefined) {\n assertSafeGeminiToolFinishReason(this.providerFinishReason, this.currentUsage());\n return;\n }\n const toolCallId = this.toolCalls.keys().next().value as string | undefined;\n throw new CompletionProviderOutputError(\n toolCallId === undefined\n ? { kind: \"incomplete-tool-call\", usage: this.currentUsage() }\n : { kind: \"incomplete-tool-call\", toolCallId, usage: this.currentUsage() },\n );\n }\n\n finalEvent(): Extract<CompletionModelStreamEvent, { type: \"final\" }> | undefined {\n let response = this.finalResponse;\n if (response === undefined) {\n if (this.terminalChunk === undefined) {\n return undefined;\n }\n const raw = isPlainObject(this.terminalChunk) ? this.terminalChunk : {};\n response = {\n choice: [],\n usage: usageFromGemini(raw.usageMetadata),\n rawResponse: this.terminalChunk,\n };\n const messageId = stringFrom(raw.responseId) ?? stringFrom(raw.id);\n if (messageId !== undefined) response.messageId = messageId;\n }\n\n response = mergeGeminiStreamToolCalls(response, [...this.toolCalls.values()]);\n if (this.providerFinishReason !== undefined) {\n applyGeminiFinishReasonValue(response, this.providerFinishReason, this.toolCalls.size > 0);\n }\n assertSafeGeminiCompletionResponse(response);\n return { type: \"final\", response };\n }\n\n private currentUsage(): Usage {\n if (this.finalResponse !== undefined) {\n return this.finalResponse.usage;\n }\n const raw = isPlainObject(this.terminalChunk) ? this.terminalChunk : {};\n return usageFromGemini(raw.usageMetadata);\n }\n}\n\nfunction hasGeminiSemanticProgress(events: readonly CompletionModelStreamEvent[]): boolean {\n return events.some(\n (event) =>\n event.type === \"text_delta\" ||\n event.type === \"reasoning_delta\" ||\n event.type === \"tool_call_delta\" ||\n event.type === \"tool_call\" ||\n event.type === \"provider_tool_call\",\n );\n}\n\nfunction sameGeminiToolCall(\n left: Extract<AssistantContentPart, { type: \"tool-call\" }>,\n right: Extract<AssistantContentPart, { type: \"tool-call\" }>,\n): boolean {\n return (\n left.toolName === right.toolName &&\n left.callId === right.callId &&\n left.signature === right.signature &&\n sameJsonValue(left.input, right.input)\n );\n}\n\nfunction sameJsonValue(left: JsonValue, right: JsonValue): boolean {\n if (Object.is(left, right)) return true;\n if (isJsonArray(left) || isJsonArray(right)) {\n return (\n isJsonArray(left) &&\n isJsonArray(right) &&\n left.length === right.length &&\n left.every((value, index) => {\n const rightValue = right[index];\n return rightValue !== undefined && sameJsonValue(value, rightValue);\n })\n );\n }\n if (left === null || right === null || typeof left !== \"object\" || typeof right !== \"object\") {\n return false;\n }\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every(\n (key) =>\n Object.hasOwn(right, key) && sameJsonValue(left[key] as JsonValue, right[key] as JsonValue),\n )\n );\n}\n\nfunction isJsonArray(value: JsonValue): value is readonly JsonValue[] {\n return Array.isArray(value);\n}\n\nfunction assistantContentFromGeminiResponse(\n response: Record<string, unknown>,\n usage: Usage,\n): AssistantContentPart[] {\n const parts = candidateParts(response, usage);\n const calls = functionCallsFromGeminiResponse(response, parts, usage);\n if (parts.length === 0) {\n const choice: AssistantContentPart[] = [];\n const text = textFromGeminiResponse(response, parts);\n if (text.length > 0) choice.push({ type: \"text\", text });\n choice.push(...calls.map(toolCallFromGeminiFunctionCall));\n return choice;\n }\n\n const callsByPartIndex = new Map(calls.map((call) => [call.partIndex, call]));\n const choice: AssistantContentPart[] = [];\n for (const { index, part } of parts) {\n if (typeof part.text === \"string\" && part.text.length > 0) {\n if (part.thought === true) {\n choice.push({\n type: \"reasoning\",\n text: part.text,\n details: [{ type: \"summary\", text: part.text }],\n });\n } else {\n const signature = thoughtSignatureFrom(part);\n let text: Extract<AssistantContentPart, { type: \"text\" }> = {\n type: \"text\",\n text: part.text,\n };\n if (signature !== undefined) text = { ...text, signature };\n choice.push(text);\n }\n }\n const call = callsByPartIndex.get(index);\n if (call !== undefined) {\n choice.push(toolCallFromGeminiFunctionCall(call));\n }\n }\n return choice;\n}\n\nfunction textFromGeminiResponse(\n response: Record<string, unknown>,\n parts = candidateParts(response),\n): string {\n if (parts.length > 0) {\n return parts\n .flatMap(({ part }) =>\n part.thought !== true && typeof part.text === \"string\" ? [part.text] : [],\n )\n .join(\"\");\n }\n if (hasGeminiCandidatePayload(response)) {\n return \"\";\n }\n const directText = ownDataProperty(response, \"text\");\n return typeof directText === \"string\" ? directText : \"\";\n}\n\nfunction functionCallsFromGeminiResponse(\n response: Record<string, unknown>,\n parts: IndexedGeminiPart[],\n usage: Usage,\n): GeminiFunctionCall[] {\n if (parts.length > 0) {\n const calls = parts.flatMap(({ index, part }) => {\n if (part.functionCall === undefined) {\n return [];\n }\n if (!isPlainObject(part.functionCall)) {\n throw invalidGeminiToolCall(deterministicGeminiToolCallId(index), usage);\n }\n return [functionCallFromGeminiPart(part.functionCall, part, index, usage)];\n });\n assertDistinctGeminiFunctionCalls(calls, usage);\n return calls;\n }\n if (hasGeminiCandidatePayload(response)) {\n return [];\n }\n\n const camelCaseCalls = ownDataProperty(response, \"functionCalls\");\n const snakeCaseCalls = ownDataProperty(response, \"function_calls\");\n const directCalls = Array.isArray(camelCaseCalls)\n ? camelCaseCalls\n : Array.isArray(snakeCaseCalls)\n ? snakeCaseCalls\n : [];\n const calls = directCalls.map((call, index) => {\n if (!isPlainObject(call)) {\n throw invalidGeminiToolCall(deterministicGeminiToolCallId(index), usage);\n }\n return functionCallFromGeminiPart(call, call, index, usage);\n });\n assertDistinctGeminiFunctionCalls(calls, usage);\n return calls;\n}\n\nfunction functionCallFromGeminiPart(\n call: Record<string, unknown>,\n part: Record<string, unknown>,\n partIndex: number,\n usage: Usage,\n): GeminiFunctionCall {\n const fallbackId = deterministicGeminiToolCallId(partIndex);\n const rawCallId = call.id;\n const callId = isNonblankString(rawCallId) ? rawCallId : undefined;\n const toolCallId = callId ?? fallbackId;\n if (rawCallId !== undefined && callId === undefined) {\n throw invalidGeminiToolCall(toolCallId, usage);\n }\n if (\n call.partialArgs !== undefined ||\n call.partial_args !== undefined ||\n call.willContinue !== undefined ||\n call.will_continue !== undefined\n ) {\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n toolCallId,\n usage,\n });\n }\n const name = call.name;\n if (!isNonblankString(name)) {\n throw invalidGeminiToolCall(toolCallId, usage);\n }\n const args = call.args;\n if (!isPlainObject(args) || !isJsonValue(args)) {\n throw invalidGeminiToolCallArguments(toolCallId, usage);\n }\n\n const normalized: GeminiFunctionCall = {\n toolCallId,\n name,\n args,\n partIndex,\n };\n const signature = thoughtSignatureFrom(part) ?? thoughtSignatureFrom(call);\n if (callId !== undefined) {\n return signature === undefined\n ? { ...normalized, callId }\n : { ...normalized, callId, signature };\n }\n return signature === undefined ? normalized : { ...normalized, signature };\n}\n\nfunction candidateParts(response: Record<string, unknown>, usage?: Usage): IndexedGeminiPart[] {\n const candidate = primaryGeminiCandidate(response);\n if (candidate === undefined || candidate.content === undefined) {\n return [];\n }\n if (!isPlainObject(candidate.content)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (candidate.content.parts === undefined) return [];\n if (!Array.isArray(candidate.content.parts)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (candidate.content.parts.some((part) => !isPlainObject(part))) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n return candidate.content.parts.map((part, index) => ({\n index,\n part: part as Record<string, unknown>,\n }));\n}\n\nfunction primaryGeminiCandidate(\n response: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (response.candidates === undefined) return undefined;\n if (!Array.isArray(response.candidates)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const candidates = response.candidates;\n if (\n candidates.some(\n (candidate) =>\n !isPlainObject(candidate) ||\n (candidate.index !== undefined &&\n (!Number.isSafeInteger(candidate.index) || (candidate.index as number) < 0)),\n )\n ) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const primaryCandidates = candidates.filter(\n (candidate): candidate is Record<string, unknown> =>\n isPlainObject(candidate) && candidate.index === 0,\n );\n if (primaryCandidates.length === 1) {\n return primaryCandidates[0];\n }\n if (primaryCandidates.length > 1) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n if (candidates.length === 0) return undefined;\n if (candidates.length !== 1) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const candidate = candidates[0] as Record<string, unknown>;\n if (candidate.index !== undefined && candidate.index !== 0) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n return candidate;\n}\n\nfunction providerFinishReasonFromGeminiResponse(\n response: Record<string, unknown>,\n): string | undefined {\n const candidateFinishReason = stringFrom(primaryGeminiCandidate(response)?.finishReason);\n if (candidateFinishReason !== undefined) return candidateFinishReason;\n const promptFeedback = response.promptFeedback ?? response.prompt_feedback;\n if (promptFeedback === undefined) return undefined;\n if (!isPlainObject(promptFeedback)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-response\" });\n }\n const blockReason = promptFeedback.blockReason ?? promptFeedback.block_reason;\n if (blockReason === undefined) return undefined;\n if (typeof blockReason !== \"string\" || blockReason.length === 0) {\n throw new CompletionProviderOutputError({ kind: \"invalid-response\" });\n }\n return blockReason;\n}\n\nfunction hasGeminiCandidatePayload(response: Record<string, unknown>): boolean {\n return Array.isArray(response.candidates) && response.candidates.length > 0;\n}\n\nfunction hasGeminiFunctionCallMarker(\n response: Record<string, unknown>,\n parts: readonly IndexedGeminiPart[],\n): boolean {\n if (parts.some(({ part }) => ownDataProperty(part, \"functionCall\") !== undefined)) {\n return true;\n }\n if (hasGeminiCandidatePayload(response)) return false;\n const camelCaseCalls = ownDataProperty(response, \"functionCalls\");\n const snakeCaseCalls = ownDataProperty(response, \"function_calls\");\n return (\n (Array.isArray(camelCaseCalls) && camelCaseCalls.length > 0) ||\n (Array.isArray(snakeCaseCalls) && snakeCaseCalls.length > 0)\n );\n}\n\nfunction deterministicGeminiToolCallId(partIndex: number): string {\n return `gemini-tool-${partIndex.toString()}`;\n}\n\nfunction toolCallFromGeminiFunctionCall(\n call: GeminiFunctionCall,\n): Extract<AssistantContentPart, { type: \"tool-call\" }> {\n let toolCall: Extract<AssistantContentPart, { type: \"tool-call\" }> = {\n type: \"tool-call\",\n toolCallId: call.toolCallId,\n toolName: call.name,\n input: call.args,\n };\n if (call.callId !== undefined) toolCall = { ...toolCall, callId: call.callId };\n if (call.signature !== undefined) toolCall = { ...toolCall, signature: call.signature };\n return toolCall;\n}\n\nfunction mergeGeminiStreamToolCalls(\n response: CompletionResponse,\n toolCalls: readonly Extract<AssistantContentPart, { type: \"tool-call\" }>[],\n): CompletionResponse {\n if (toolCalls.length === 0) return response;\n const finalIds = new Set(\n response.choice.flatMap((part) => (part.type === \"tool-call\" ? [part.toolCallId] : [])),\n );\n const missing = toolCalls.filter((toolCall) => !finalIds.has(toolCall.toolCallId));\n return missing.length === 0\n ? response\n : { ...response, choice: [...response.choice, ...missing] };\n}\n\nfunction assertSafeGeminiToolFinishReason(value: string, usage: Usage): void {\n const error = geminiToolFinishError(value, true, usage);\n if (error !== undefined) throw error;\n}\n\nfunction geminiToolFinishError(\n value: string | undefined,\n hasToolCalls: boolean,\n usage: Usage,\n): CompletionProviderOutputError | undefined {\n if (value === \"MALFORMED_FUNCTION_CALL\") {\n return new CompletionProviderOutputError({ kind: \"malformed-tool-arguments\", usage });\n }\n if (value === \"UNEXPECTED_TOOL_CALL\" || value === \"TOO_MANY_TOOL_CALLS\") {\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (!hasToolCalls) return undefined;\n if (value === undefined) {\n return new CompletionProviderOutputError({ kind: \"incomplete-tool-call\", usage });\n }\n const finishReason = geminiFinishReason(value, true);\n if (finishReason === \"tool-calls\") return undefined;\n if (finishReason === \"length\") {\n return new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage,\n });\n }\n if (finishReason === \"content-filter\") {\n return new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage,\n });\n }\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", finishReason, usage });\n}\n\nfunction assertSafeGeminiCompletionResponse(response: CompletionResponse): void {\n const toolCalls = response.choice.filter(\n (part): part is Extract<AssistantContentPart, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (toolCalls.length > 0) {\n if (response.finishReason === undefined) {\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n usage: response.usage,\n });\n }\n assertNormalizedGeminiToolFinishReason(response.finishReason, response.usage);\n } else if (toolCalls.length === 0 && response.finishReason === \"tool-calls\") {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: response.finishReason,\n usage: response.usage,\n });\n }\n\n const toolCallIds = new Set<string>();\n const callIds = new Set<string>();\n for (const toolCall of toolCalls) {\n if (toolCallIds.has(toolCall.toolCallId)) {\n throw invalidGeminiToolCall(toolCall.toolCallId, response.usage);\n }\n toolCallIds.add(toolCall.toolCallId);\n if (toolCall.callId !== undefined) {\n if (callIds.has(toolCall.callId)) {\n throw invalidGeminiToolCall(toolCall.toolCallId, response.usage);\n }\n callIds.add(toolCall.callId);\n }\n }\n}\n\nfunction assertDistinctGeminiFunctionCalls(\n calls: readonly GeminiFunctionCall[],\n usage: Usage,\n): void {\n const toolCallIds = new Set<string>();\n const callIds = new Set<string>();\n for (const call of calls) {\n if (toolCallIds.has(call.toolCallId)) {\n throw invalidGeminiToolCall(call.toolCallId, usage);\n }\n toolCallIds.add(call.toolCallId);\n if (call.callId !== undefined) {\n if (callIds.has(call.callId)) {\n throw invalidGeminiToolCall(call.toolCallId, usage);\n }\n callIds.add(call.callId);\n }\n }\n}\n\nfunction assertNormalizedGeminiToolFinishReason(\n finishReason: CompletionFinishReason,\n usage: Usage,\n): void {\n if (finishReason === \"stop\" || finishReason === \"tool-calls\") return;\n if (finishReason === \"length\") {\n throw new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage,\n });\n }\n if (finishReason === \"content-filter\") {\n throw new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage,\n });\n }\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", finishReason, usage });\n}\n\nfunction geminiProviderOutputErrorWithUsage(\n error: CompletionProviderOutputError,\n usage: Usage,\n): CompletionProviderOutputError {\n if (error.kind === \"truncated-tool-call\") {\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: \"length\",\n toolCallId: error.toolCallId,\n usage,\n });\n }\n if (error.kind === \"filtered-tool-call\") {\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: \"content-filter\",\n toolCallId: error.toolCallId,\n usage,\n });\n }\n if (error.finishReason === \"length\" || error.finishReason === \"content-filter\") {\n throw error;\n }\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: error.finishReason,\n toolCallId: error.toolCallId,\n usage,\n });\n}\n\nfunction invalidGeminiToolCall(toolCallId: string, usage: Usage): CompletionProviderOutputError {\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", toolCallId, usage });\n}\n\nfunction invalidGeminiToolCallArguments(\n toolCallId: string,\n usage: Usage,\n): CompletionProviderOutputError {\n return new CompletionProviderOutputError({\n kind: \"invalid-tool-arguments\",\n toolCallId,\n usage,\n });\n}\n\nfunction ownDataProperty(value: Record<string, unknown>, key: string): unknown {\n try {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return descriptor !== undefined && \"value\" in descriptor ? descriptor.value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction isNonblankString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction usageFromGemini(usage: unknown): Usage {\n const raw = isPlainObject(usage) ? usage : {};\n const promptInputTokens = numberFrom(raw.promptTokenCount);\n const toolInputTokens = numberFrom(raw.toolUsePromptTokenCount);\n const inputTokens = promptInputTokens + toolInputTokens;\n const candidateOutputTokens = numberFrom(raw.candidatesTokenCount);\n const reasoningOutputTokens = numberFrom(raw.thoughtsTokenCount);\n const outputTokens = candidateOutputTokens + reasoningOutputTokens;\n const cachedInputTokens = Math.min(promptInputTokens, numberFrom(raw.cachedContentTokenCount));\n const totalTokens = inputTokens + outputTokens;\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens,\n details: {\n input: promptInputTokens - cachedInputTokens,\n input_cached_tokens: cachedInputTokens,\n input_tool_use_tokens: toolInputTokens,\n output: candidateOutputTokens,\n output_reasoning_tokens: reasoningOutputTokens,\n total: totalTokens,\n },\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n}\n\nfunction stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction thoughtSignatureFrom(value: Record<string, unknown>): string | undefined {\n return stringFrom(value.thoughtSignature) ?? stringFrom(value.thought_signature);\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n argumentsMode?: ToolCallArgumentsMode | undefined;\n signature?: string | undefined;\n },\n): CompletionModelStreamEvent {\n const event: CompletionModelStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n if (values.argumentsMode !== undefined) event.argumentsMode = values.argumentsMode;\n if (values.signature !== undefined) event.signature = values.signature;\n return event;\n}\n","import {\n type CompletionRequest,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport function orderedRequestMessages(request: CompletionRequest): MessageType[] {\n const messages: MessageType[] = [];\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","export function disableGeminiNativeRetries(\n config: Record<string, unknown>,\n): Record<string, unknown> {\n const httpOptions = isPlainObject(config.httpOptions) ? config.httpOptions : {};\n const retryOptions = isPlainObject(httpOptions.retryOptions) ? httpOptions.retryOptions : {};\n return {\n ...config,\n httpOptions: {\n ...httpOptions,\n retryOptions: {\n ...retryOptions,\n attempts: 1,\n },\n },\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { Embedding, EmbeddingModel, ModelCallOptions } from \"@anvia/core/embeddings\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiEmbeddingModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nexport type GeminiEmbeddingTaskType =\n | \"TASK_TYPE_UNSPECIFIED\"\n | \"RETRIEVAL_QUERY\"\n | \"RETRIEVAL_DOCUMENT\"\n | \"SEMANTIC_SIMILARITY\"\n | \"CLASSIFICATION\"\n | \"CLUSTERING\"\n | \"QUESTION_ANSWERING\"\n | \"FACT_VERIFICATION\"\n | \"CODE_RETRIEVAL_QUERY\";\n\nexport type GeminiEmbeddingModelOptions = {\n modelId: GeminiEmbeddingModelId;\n dimensions?: number | undefined;\n maxBatchSize?: number | undefined;\n taskType?: GeminiEmbeddingTaskType | undefined;\n title?: string | undefined;\n};\n\nexport class GeminiEmbeddingModel implements EmbeddingModel {\n readonly provider = \"gemini\";\n readonly modelId: GeminiEmbeddingModelId;\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n private readonly taskType: GeminiEmbeddingTaskType | undefined;\n private readonly title: string | undefined;\n\n constructor(\n private readonly client: GoogleGenAI,\n options: GeminiEmbeddingModelOptions,\n ) {\n this.modelId = options.modelId;\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 100;\n this.taskType = options.taskType;\n this.title = options.title;\n }\n\n async embedTexts(texts: string[], options?: ModelCallOptions): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch, options)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[], options?: ModelCallOptions): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const config = { ...this.embeddingConfig() };\n if (options?.abortSignal !== undefined) {\n Object.assign(config, { abortSignal: options.abortSignal });\n }\n const response = await this.client.models.embedContent({\n model: this.modelId,\n contents: texts,\n config: disableGeminiNativeRetries(config),\n } as never);\n const rawEmbeddings = embeddingsFromResponse(response);\n if (rawEmbeddings.length !== texts.length) {\n throw new Error(\n `Embedding response length ${rawEmbeddings.length} did not match input length ${texts.length}`,\n );\n }\n\n return rawEmbeddings.map((vector, index) => ({\n document: texts[index] as string,\n vector,\n }));\n }\n\n private embeddingConfig(): Record<string, unknown> {\n const config: Record<string, unknown> = {};\n if (this.dimensions !== undefined) config.outputDimensionality = this.dimensions;\n if (this.taskType !== undefined) config.taskType = this.taskType;\n if (this.title !== undefined) config.title = this.title;\n return config;\n }\n}\n\nfunction embeddingsFromResponse(response: unknown): number[][] {\n const raw = response as Record<string, unknown>;\n if (Array.isArray(raw.embeddings)) {\n return raw.embeddings.map((embedding, index) => vectorFromEmbedding(embedding, index));\n }\n if (raw.embedding !== undefined) {\n return [vectorFromEmbedding(raw.embedding, 0)];\n }\n return [];\n}\n\nfunction vectorFromEmbedding(embedding: unknown, position: number): number[] {\n if (!isObject(embedding) || !isNumberArray(embedding.values)) {\n throw new Error(`Invalid Gemini embedding response vector at position ${position}.`);\n }\n return embedding.values;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNumberArray(value: unknown): value is number[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"number\");\n}\n","import { Buffer } from \"node:buffer\";\nimport type {\n GeneratedImage,\n ImageGenerationModel,\n ImageGenerationRequest,\n ImageGenerationResult,\n ModelCallOptions,\n} from \"@anvia/core/image-generation\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiGenerateContentImageModelId, GeminiGenerateImagesModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nexport const GEMINI_2_5_FLASH_IMAGE = \"gemini-2.5-flash-image\";\nexport const GEMINI_3_PRO_IMAGE_PREVIEW = \"gemini-3-pro-image-preview\";\nexport const IMAGEN_4_GENERATE = \"imagen-4.0-generate-001\";\n\nexport class GeminiImageGenerationModel implements ImageGenerationModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiGenerateContentImageModelId,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n options?: ModelCallOptions,\n ): Promise<ImageGenerationResult<unknown>> {\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n const providerConfig = isPlainObject(providerConfigValue) ? providerConfigValue : {};\n const providerImageConfig = isPlainObject(providerConfig.imageConfig)\n ? providerConfig.imageConfig\n : {};\n const config: Record<string, unknown> = {\n ...providerConfig,\n responseModalities: [\"TEXT\", \"IMAGE\"],\n imageConfig: {\n ...providerImageConfig,\n aspectRatio: aspectRatio(request.width, request.height),\n },\n };\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n const params: Record<string, unknown> = {\n ...providerTopLevel,\n model: this.modelId,\n contents: request.prompt,\n config: disableGeminiNativeRetries(config),\n };\n\n const response = await this.client.models.generateContent(params as never);\n return nativeImageResponseFromGemini(response);\n }\n}\n\nexport class GeminiImagenGenerationModel implements ImageGenerationModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiGenerateImagesModelId,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n options?: ModelCallOptions,\n ): Promise<ImageGenerationResult<unknown>> {\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n const providerConfig = isPlainObject(providerConfigValue) ? providerConfigValue : {};\n const config: Record<string, unknown> = {\n ...providerConfig,\n aspectRatio: aspectRatio(request.width, request.height),\n };\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n const params: Record<string, unknown> = {\n ...providerTopLevel,\n model: this.modelId,\n prompt: request.prompt,\n config: disableGeminiNativeRetries(config),\n };\n\n const response = await this.client.models.generateImages(params as never);\n return imagenResponseFromGemini(response);\n }\n}\n\nexport function nativeImageResponseFromGemini(response: unknown): ImageGenerationResult<unknown> {\n const raw = response as Record<string, unknown>;\n const candidates = Array.isArray(raw.candidates) ? raw.candidates : [];\n const images = candidates.flatMap((candidate): GeneratedImage[] => {\n if (!isPlainObject(candidate) || !isPlainObject(candidate.content)) {\n return [];\n }\n const parts = Array.isArray(candidate.content.parts) ? candidate.content.parts : [];\n return parts.flatMap((part): GeneratedImage[] => {\n if (!isPlainObject(part) || !isPlainObject(part.inlineData)) {\n return [];\n }\n const data = part.inlineData.data;\n if (typeof data !== \"string\") {\n return [];\n }\n return [\n {\n data: decodeBase64Image(data),\n mediaType:\n typeof part.inlineData.mimeType === \"string\" ? part.inlineData.mimeType : \"image/png\",\n },\n ];\n });\n });\n\n if (images.length === 0) {\n throw new Error(\"Gemini image generation response contained no inline image data.\");\n }\n\n return {\n images: images as [GeneratedImage, ...GeneratedImage[]],\n rawResponse: response,\n };\n}\n\nexport function imagenResponseFromGemini(response: unknown): ImageGenerationResult<unknown> {\n const raw = response as Record<string, unknown>;\n const images = (Array.isArray(raw.generatedImages) ? raw.generatedImages : []).flatMap(\n (item): GeneratedImage[] => {\n if (!isPlainObject(item) || !isPlainObject(item.image)) {\n return [];\n }\n const imageBytes = item.image.imageBytes;\n if (typeof imageBytes !== \"string\") {\n return [];\n }\n return [\n {\n data: decodeBase64Image(imageBytes),\n mediaType: typeof item.image.mimeType === \"string\" ? item.image.mimeType : \"image/png\",\n },\n ];\n },\n );\n\n if (images.length === 0) {\n throw new Error(\"Gemini image generation response contained no base64 images.\");\n }\n\n return {\n images: images as [GeneratedImage, ...GeneratedImage[]],\n rawResponse: response,\n };\n}\n\nexport function aspectRatio(width: number, height: number): string {\n const normalizedWidth = Math.max(1, Math.trunc(width));\n const normalizedHeight = Math.max(1, Math.trunc(height));\n const divisor = gcd(normalizedWidth, normalizedHeight);\n return `${normalizedWidth / divisor}:${normalizedHeight / divisor}`;\n}\n\nfunction gcd(left: number, right: number): number {\n let a = left;\n let b = right;\n while (b !== 0) {\n const next = a % b;\n a = b;\n b = next;\n }\n return a;\n}\n\nfunction decodeBase64Image(value: string): Uint8Array {\n const normalized = value.replace(/\\s/g, \"\").replace(/=+$/, \"\");\n const bytes = Buffer.from(value, \"base64\");\n const roundTrip = bytes.toString(\"base64\").replace(/=+$/, \"\");\n if (normalized.length === 0 || bytes.length === 0 || roundTrip !== normalized) {\n throw new Error(\"Gemini image generation response contained invalid base64 image data.\");\n }\n return new Uint8Array(bytes);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport type { ModelId } from \"@anvia/core/model-listing\";\n\nexport type KnownGeminiCompletionModelId =\n | \"gemini-2.0-flash\"\n | \"gemini-2.0-flash-lite\"\n | \"gemini-2.5-flash\"\n | \"gemini-2.5-flash-image\"\n | \"gemini-2.5-flash-lite\"\n | \"gemini-2.5-flash-preview-tts\"\n | \"gemini-2.5-pro\"\n | \"gemini-2.5-pro-preview-tts\"\n | \"gemini-3-flash-preview\"\n | \"gemini-3-pro-image-preview\"\n | \"gemini-3-pro-preview\"\n | \"gemini-3.1-flash-image-preview\"\n | \"gemini-3.1-flash-lite\"\n | \"gemini-3.1-flash-lite-preview\"\n | \"gemini-3.1-pro-preview\"\n | \"gemini-3.1-pro-preview-customtools\"\n | \"gemini-3.5-flash\"\n | \"gemini-flash-latest\"\n | \"gemini-flash-lite-latest\"\n | \"gemma-4-26b-a4b-it\"\n | \"gemma-4-31b-it\";\n\nexport type GeminiCompletionModelId = ModelId<KnownGeminiCompletionModelId>;\n\nconst CONTEXT_1M_64K = {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 65_536,\n};\n\nexport const GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS = {\n \"gemini-2.0-flash\": {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 8_192,\n },\n \"gemini-2.0-flash-lite\": {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 8_192,\n },\n \"gemini-2.5-flash\": CONTEXT_1M_64K,\n \"gemini-2.5-flash-image\": {\n contextWindow: 32_768,\n maxInputTokens: 32_768,\n maxOutputTokens: 32_768,\n },\n \"gemini-2.5-flash-lite\": CONTEXT_1M_64K,\n \"gemini-2.5-flash-preview-tts\": {\n contextWindow: 8_192,\n maxInputTokens: 8_192,\n maxOutputTokens: 16_384,\n },\n \"gemini-2.5-pro\": CONTEXT_1M_64K,\n \"gemini-2.5-pro-preview-tts\": {\n contextWindow: 8_192,\n maxInputTokens: 8_192,\n maxOutputTokens: 16_384,\n },\n \"gemini-3-flash-preview\": CONTEXT_1M_64K,\n \"gemini-3-pro-image-preview\": {\n contextWindow: 131_072,\n maxInputTokens: 131_072,\n maxOutputTokens: 32_768,\n },\n \"gemini-3-pro-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-flash-image-preview\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 65_536,\n },\n \"gemini-3.1-flash-lite\": CONTEXT_1M_64K,\n \"gemini-3.1-flash-lite-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-pro-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-pro-preview-customtools\": CONTEXT_1M_64K,\n \"gemini-3.5-flash\": CONTEXT_1M_64K,\n \"gemini-flash-latest\": CONTEXT_1M_64K,\n \"gemini-flash-lite-latest\": CONTEXT_1M_64K,\n \"gemma-4-26b-a4b-it\": {\n contextWindow: 262_144,\n maxInputTokens: 262_144,\n maxOutputTokens: 32_768,\n },\n \"gemma-4-31b-it\": {\n contextWindow: 262_144,\n maxInputTokens: 262_144,\n maxOutputTokens: 32_768,\n },\n} satisfies Readonly<Record<KnownGeminiCompletionModelId, ModelContextLimits>>;\n\nexport type KnownGeminiEmbeddingModelId = \"gemini-embedding-001\";\n\nexport type GeminiEmbeddingModelId = ModelId<KnownGeminiEmbeddingModelId>;\n\nexport type KnownGeminiGenerateContentImageModelId =\n | \"gemini-2.5-flash-image\"\n | \"gemini-3-pro-image-preview\"\n | \"gemini-3.1-flash-image-preview\";\n\nexport type KnownGeminiGenerateImagesModelId = \"imagen-4.0-generate-001\";\n\nexport type GeminiGenerateContentImageModelId = ModelId<KnownGeminiGenerateContentImageModelId>;\nexport type GeminiGenerateImagesModelId = ModelId<KnownGeminiGenerateImagesModelId>;\n\nexport type GeminiTranscriptionModelId = GeminiCompletionModelId;\n","import { Buffer } from \"node:buffer\";\nimport type {\n ModelCallOptions,\n TranscriptionModel,\n TranscriptionRequest,\n TranscriptionResult,\n} from \"@anvia/core/transcription\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiTranscriptionModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nconst TRANSCRIPTION_PREAMBLE =\n \"Transcribe the provided audio exactly. Do not add additional information.\";\n\nexport class GeminiTranscriptionModel implements TranscriptionModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiTranscriptionModelId,\n ) {}\n\n async transcription(\n request: TranscriptionRequest,\n options?: ModelCallOptions,\n ): Promise<TranscriptionResult<unknown>> {\n const config: Record<string, unknown> = isPlainObject(request.providerOptions)\n ? { ...request.providerOptions }\n : {};\n if (request.temperature !== undefined) {\n config.temperature = request.temperature;\n }\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n\n const response = await this.client.models.generateContent({\n model: this.modelId,\n contents: [\n {\n role: \"user\",\n parts: [\n {\n inlineData: {\n mimeType: request.mediaType ?? mimeTypeFromFilename(request.filename),\n data: Buffer.from(request.data).toString(\"base64\"),\n },\n },\n ],\n },\n ],\n config: disableGeminiNativeRetries({\n ...config,\n systemInstruction:\n request.prompt === undefined\n ? TRANSCRIPTION_PREAMBLE\n : `${TRANSCRIPTION_PREAMBLE}\\n\\n${request.prompt}`,\n }),\n } as never);\n\n return {\n text: textFromGenerateContentResponse(response),\n rawResponse: response,\n };\n }\n}\n\nexport function textFromGenerateContentResponse(response: unknown): string {\n const raw = response as Record<string, unknown>;\n if (typeof raw.text === \"string\") {\n return raw.text;\n }\n const candidates = Array.isArray(raw.candidates) ? raw.candidates : [];\n for (const candidate of candidates) {\n if (!isPlainObject(candidate) || !isPlainObject(candidate.content)) {\n continue;\n }\n const parts = Array.isArray(candidate.content.parts) ? candidate.content.parts : [];\n for (const part of parts) {\n if (isPlainObject(part) && typeof part.text === \"string\") {\n return part.text;\n }\n }\n }\n throw new Error(\"Gemini transcription response contained no text.\");\n}\n\nfunction mimeTypeFromFilename(filename: string): string {\n const lower = filename.toLowerCase();\n if (lower.endsWith(\".wav\")) return \"audio/wav\";\n if (lower.endsWith(\".aac\")) return \"audio/aac\";\n if (lower.endsWith(\".ogg\")) return \"audio/ogg\";\n if (lower.endsWith(\".flac\")) return \"audio/flac\";\n if (lower.endsWith(\".m4a\")) return \"audio/m4a\";\n if (lower.endsWith(\".opus\")) return \"audio/opus\";\n return \"audio/mpeg\";\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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","names":["isPlainObject","content","isPlainObject","choice","calls","candidate","Buffer","isPlainObject","Buffer","Buffer","isPlainObject","Buffer","isObject"]}
|
|
1
|
+
{"version":3,"sources":["../src/gemini/index.ts","../src/gemini/client.ts","../src/gemini/completion.ts","../src/request-messages.ts","../src/gemini/retry.ts","../src/gemini/embedding.ts","../src/gemini/image-generation.ts","../src/gemini/models.ts","../src/gemini/transcription.ts"],"sourcesContent":["export {\n GeminiClient,\n type GeminiClientOptions,\n type GeminiCompletionModelHandle,\n type GeminiCompletionModelOptions,\n type GeminiEmbeddingModelHandle,\n type GeminiImageGenerationModelHandle,\n type GeminiImageGenerationModelOptions,\n type GeminiTranscriptionModelHandle,\n type GeminiTranscriptionModelOptions,\n} from \"./client\";\nexport type {\n GeminiEmbeddingModelOptions,\n GeminiEmbeddingTaskType,\n} from \"./embedding\";\nexport {\n GEMINI_2_5_FLASH_IMAGE,\n GEMINI_3_1_FLASH_IMAGE,\n GEMINI_3_1_FLASH_LITE_IMAGE,\n GEMINI_3_PRO_IMAGE,\n GEMINI_3_PRO_IMAGE_PREVIEW,\n IMAGEN_4_GENERATE,\n} from \"./image-generation\";\nexport type {\n GeminiCompletionModelId,\n GeminiEmbeddingModelId,\n GeminiGenerateContentImageModelId,\n GeminiGenerateImagesModelId,\n GeminiTranscriptionModelId,\n KnownGeminiCompletionModelId,\n KnownGeminiEmbeddingModelId,\n KnownGeminiGenerateContentImageModelId,\n KnownGeminiGenerateImagesModelId,\n} from \"./models\";\n","import {\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport type { EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type { ImageGenerationModel } from \"@anvia/core/image-generation\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport type { TranscriptionModel } from \"@anvia/core/transcription\";\nimport { GoogleGenAI, type GoogleGenAIOptions } from \"@google/genai\";\nimport { GeminiCompletionModel } from \"./completion\";\nimport { GeminiEmbeddingModel, type GeminiEmbeddingModelOptions } from \"./embedding\";\nimport { GeminiImageGenerationModel, GeminiImagenGenerationModel } from \"./image-generation\";\nimport type {\n GeminiCompletionModelId,\n GeminiGenerateContentImageModelId,\n GeminiGenerateImagesModelId,\n GeminiTranscriptionModelId,\n} from \"./models\";\nimport { GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\nimport { GeminiTranscriptionModel } from \"./transcription\";\n\ntype GeminiApiClientOptions = {\n apiKey: string;\n vertexAi?: never;\n client?: never;\n};\n\ntype VertexClientOptions = {\n vertexAi: {\n projectId: string;\n location: string;\n googleAuthOptions?: GoogleGenAIOptions[\"googleAuthOptions\"];\n };\n apiKey?: never;\n client?: never;\n};\n\ntype InjectedClientOptions = {\n client: GoogleGenAI;\n apiKey?: never;\n vertexAi?: never;\n};\n\nexport type GeminiClientOptions =\n | GeminiApiClientOptions\n | VertexClientOptions\n | InjectedClientOptions;\n\nexport type GeminiCompletionModelOptions = {\n modelId: GeminiCompletionModelId;\n contextLimits?: ModelContextLimits | undefined;\n};\n\nexport type GeminiImageGenerationModelOptions =\n | { api: \"generateContent\"; modelId: GeminiGenerateContentImageModelId }\n | { api: \"generateImages\"; modelId: GeminiGenerateImagesModelId };\n\nexport type GeminiTranscriptionModelOptions = { modelId: GeminiTranscriptionModelId };\n\nexport type GeminiCompletionModelHandle = StreamingCompletionModel<unknown>;\nexport type GeminiEmbeddingModelHandle = EmbeddingModel;\nexport type GeminiImageGenerationModelHandle = ImageGenerationModel<unknown>;\nexport type GeminiTranscriptionModelHandle = TranscriptionModel<unknown>;\n\nexport class GeminiClient implements ModelListingClient {\n private readonly sdk: GoogleGenAI;\n\n constructor(options: GeminiClientOptions) {\n if (options.client !== undefined) {\n rejectManagedOptionsWithInjectedClient(options, [\"apiKey\", \"vertexAi\"]);\n this.sdk = options.client;\n return;\n }\n this.sdk = new GoogleGenAI(toGoogleGenAIOptions(options));\n }\n\n completionModel(options: GeminiCompletionModelOptions): GeminiCompletionModelHandle {\n const modelId = requireModelId(options.modelId);\n return new GeminiCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n );\n }\n\n embeddingModel(options: GeminiEmbeddingModelOptions): GeminiEmbeddingModelHandle {\n requireModelId(options.modelId);\n validateOptionalPositiveSafeInteger(options.dimensions, \"dimensions\");\n validateOptionalPositiveSafeInteger(options.maxBatchSize, \"maxBatchSize\");\n return new GeminiEmbeddingModel(this.sdk, options);\n }\n\n imageGenerationModel(\n options: GeminiImageGenerationModelOptions,\n ): GeminiImageGenerationModelHandle {\n const modelId = requireModelId(options.modelId);\n return options.api === \"generateContent\"\n ? new GeminiImageGenerationModel(this.sdk, modelId)\n : new GeminiImagenGenerationModel(this.sdk, modelId);\n }\n\n transcriptionModel(options: GeminiTranscriptionModelOptions): GeminiTranscriptionModelHandle {\n return new GeminiTranscriptionModel(this.sdk, requireModelId(options.modelId));\n }\n\n async listModels(options: { abortSignal?: AbortSignal | undefined } = {}): Promise<ModelList> {\n try {\n const config = { pageSize: 1000 };\n if (options.abortSignal !== undefined) {\n Object.assign(config, { abortSignal: options.abortSignal });\n }\n const response = await this.sdk.models.list({\n config: disableGeminiNativeRetries(config),\n });\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"Gemini\", error);\n }\n }\n}\n\nfunction rejectManagedOptionsWithInjectedClient(options: object, keys: readonly string[]): void {\n const conflict = keys.find((key) => key in options);\n if (conflict !== undefined) {\n throw new TypeError(`GeminiClient cannot combine client with ${conflict}.`);\n }\n}\n\nexport function toGoogleGenAIOptions(options: GeminiClientOptions): GoogleGenAIOptions {\n if (\"client\" in options && options.client !== undefined) {\n throw new TypeError(\"Injected Gemini clients do not have managed SDK options.\");\n }\n if (\"vertexAi\" in options && options.vertexAi !== undefined) {\n const sdkOptions: GoogleGenAIOptions = {\n vertexai: true,\n project: requireOption(options.vertexAi.projectId, \"projectId\", \"Vertex Gemini\"),\n location: requireOption(options.vertexAi.location, \"location\", \"Vertex Gemini\"),\n };\n if (options.vertexAi.googleAuthOptions !== undefined) {\n sdkOptions.googleAuthOptions = options.vertexAi.googleAuthOptions;\n }\n return sdkOptions;\n }\n\n return {\n apiKey: requireOption(options.apiKey, \"apiKey\", \"Gemini\"),\n };\n}\n\nfunction requireOption(value: string | undefined, name: string, label: string): string {\n if (value === undefined || value.trim().length === 0) {\n throw new Error(`Missing ${label} ${name}. Pass ${name} when constructing GeminiClient.`);\n }\n\n return value;\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n\nfunction validateOptionalPositiveSafeInteger(value: number | undefined, name: string): void {\n if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {\n throw new TypeError(`${name} must be a positive safe integer`);\n }\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.models)) {\n return response.models;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model)) {\n return undefined;\n }\n\n const id =\n stringValue(model.baseModelId) ??\n stringValue(model.base_model_id) ??\n normalizeGeminiModelId(stringValue(model.name));\n\n if (id === undefined) {\n return undefined;\n }\n\n const listedModel: ModelList[\"data\"][number] = {\n id,\n };\n if (typeof model.displayName === \"string\") {\n listedModel.name = model.displayName;\n }\n if (typeof model.display_name === \"string\") {\n listedModel.name = model.display_name;\n }\n if (typeof model.description === \"string\") {\n listedModel.description = model.description;\n }\n if (typeof model.type === \"string\") {\n listedModel.type = model.type;\n }\n if (typeof model.inputTokenLimit === \"number\") {\n listedModel.contextLength = model.inputTokenLimit;\n }\n if (typeof model.input_token_limit === \"number\") {\n listedModel.contextLength = model.input_token_limit;\n }\n return listedModel;\n}\n\nfunction normalizeGeminiModelId(name: string | undefined): string | undefined {\n const trimmed = name?.trim().replace(/^models\\//, \"\");\n return trimmed === undefined || trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n statusCode,\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport {\n type AssistantContentPart,\n assertCompletionRequestSupported,\n type CompletionFinishReason,\n type CompletionModelCapabilities,\n type CompletionModelInfo,\n type CompletionModelStreamEvent,\n CompletionProviderOutputError,\n type CompletionRequest,\n type CompletionResponse,\n isJsonValue,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ModelCallOptions,\n type StreamingCompletionModel,\n type ToolCallArgumentsMode,\n type ToolChoice,\n type ToolDefinition,\n type ToolResultPart,\n Usage,\n type UserContentPart,\n withContextUsage,\n} from \"@anvia/core/completion\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport type { GeminiCompletionModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\ntype GeminiGenerateParams = Record<string, unknown>;\ntype GeminiConfig = Record<string, unknown>;\ntype GeminiContent = {\n role: \"user\" | \"model\";\n parts: GeminiPart[];\n};\ntype GeminiPart = Record<string, unknown>;\ntype IndexedGeminiPart = Readonly<{\n index: number;\n part: GeminiPart;\n}>;\ntype GeminiFunctionCall = Readonly<{\n toolCallId: string;\n callId?: string | undefined;\n name: string;\n args: JsonObject;\n signature?: string | undefined;\n partIndex: number;\n}>;\ntype GeminiStreamChunkMapping = Readonly<{\n events: CompletionModelStreamEvent[];\n toolCalls: Extract<AssistantContentPart, { type: \"tool-call\" }>[];\n hasToolCallMarker: boolean;\n hasSyntheticToolCalls: boolean;\n providerFinishReason?: string | undefined;\n terminalError?: CompletionProviderOutputError | undefined;\n}>;\n\nexport class GeminiCompletionModel implements StreamingCompletionModel<unknown> {\n readonly provider = \"gemini\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiCompletionModelId,\n readonly contextLimits?: ModelContextLimits,\n ) {}\n\n private modelInfo(): CompletionModelInfo | undefined {\n return this.contextLimits === undefined\n ? undefined\n : { modelId: this.modelId, context: this.contextLimits };\n }\n\n traceRequest(\n request: CompletionRequest,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toGeminiGenerateContentParams(this.modelId, request);\n return providerRequestSummary(params, request, options);\n }\n\n async completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toGeminiGenerateContentParams(this.modelId, request);\n applyAbortSignal(params, options);\n const response = await this.client.models.generateContent(params as never);\n return withContextUsage(fromGeminiGenerateContentResponse(response), this.modelInfo());\n }\n\n async *streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = toGeminiGenerateContentParams(this.modelId, request);\n applyAbortSignal(params, options);\n const stream = await this.client.models.generateContentStream(params as never);\n const streamState = new GeminiCompletionStreamState();\n for await (const chunk of stream as unknown as AsyncIterable<unknown>) {\n const mapping = mapGeminiGenerateContentStreamChunk(chunk);\n streamState.accept(chunk, mapping);\n for (const event of mapping.events) {\n if (event.type !== \"final\") {\n yield event;\n }\n }\n }\n streamState.assertComplete();\n const finalEvent = streamState.finalEvent();\n if (finalEvent !== undefined) {\n yield {\n ...finalEvent,\n response: withContextUsage(finalEvent.response, this.modelInfo()),\n };\n }\n }\n}\n\nexport function toGeminiGenerateContentParams(\n modelId: GeminiCompletionModelId,\n request: CompletionRequest,\n): GeminiGenerateParams {\n const messages = requestMessages(request);\n if (\n request.providerOptions !== undefined &&\n (!isPlainObject(request.providerOptions) || !isJsonValue(request.providerOptions))\n ) {\n throw new TypeError(\"Gemini providerOptions must be a JSON object.\");\n }\n const providerOptions = request.providerOptions ?? {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n if (providerConfigValue !== undefined && !isPlainObject(providerConfigValue)) {\n throw new TypeError(\"Gemini providerOptions.config must be a JSON object.\");\n }\n const providerConfig = providerConfigValue === undefined ? {} : { ...providerConfigValue };\n delete providerConfig.tools;\n const config = disableGeminiNativeRetries({\n ...providerConfig,\n ...geminiConfig(request, messages),\n });\n const params: GeminiGenerateParams = {\n ...providerTopLevel,\n model: modelId,\n contents: messagesToGeminiContents(messages),\n config,\n };\n\n return params;\n}\n\nfunction applyAbortSignal(\n params: GeminiGenerateParams,\n options: ModelCallOptions | undefined,\n): void {\n if (options?.abortSignal === undefined) return;\n const config = isPlainObject(params.config) ? params.config : {};\n params.config = { ...config, abortSignal: options.abortSignal };\n}\n\nfunction providerRequestSummary(\n params: GeminiGenerateParams,\n request: CompletionRequest,\n options: { stream?: boolean | undefined },\n): JsonObject {\n const config = isPlainObject(params.config) ? params.config : {};\n return compactJsonObject({\n provider: \"gemini\",\n api: options.stream === true ? \"models.generateContentStream\" : \"models.generateContent\",\n stream: options.stream === true,\n model: typeof params.model === \"string\" ? params.model : undefined,\n parameterKeys: Object.keys(params).sort(),\n contentCount: Array.isArray(params.contents) ? params.contents.length : undefined,\n configKeys: Object.keys(config).sort(),\n toolCount: request.tools.length,\n toolNames: request.tools.map((tool) => tool.name),\n hasSystemInstruction: config.systemInstruction !== undefined,\n hasOutputSchema: request.outputSchema !== undefined,\n temperature: request.temperature,\n maxTokens: request.maxTokens,\n toolChoice: toolChoiceSummary(request.toolChoice),\n providerOptionKeys: isPlainObject(request.providerOptions)\n ? Object.keys(request.providerOptions).sort()\n : undefined,\n });\n}\n\nfunction toolChoiceSummary(toolChoice: ToolChoice | undefined): JsonValue | undefined {\n if (toolChoice === undefined || typeof toolChoice === \"string\") {\n return toolChoice;\n }\n return { type: toolChoice.type, name: toolChoice.name };\n}\n\nfunction compactJsonObject(values: Record<string, unknown>): JsonObject {\n return Object.fromEntries(\n Object.entries(values).flatMap(([key, value]) => {\n if (!isJsonValue(value)) {\n return [];\n }\n return [[key, value]];\n }),\n ) as JsonObject;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction geminiConfig(request: CompletionRequest, messages: MessageType[]): GeminiConfig {\n const config: GeminiConfig = {};\n const systemInstruction = systemInstructionFrom(request, messages);\n if (systemInstruction !== undefined) {\n config.systemInstruction = systemInstruction;\n }\n if (request.temperature !== undefined) {\n config.temperature = request.temperature;\n }\n if (request.maxTokens !== undefined) {\n config.maxOutputTokens = request.maxTokens;\n }\n if (request.tools.length > 0) {\n config.tools = [{ functionDeclarations: request.tools.map(toolDefinitionToGemini) }];\n }\n if (request.toolChoice !== undefined) {\n config.toolConfig = toolChoiceToGemini(request.toolChoice);\n }\n if (request.outputSchema !== undefined) {\n config.responseMimeType = \"application/json\";\n config.responseJsonSchema = request.outputSchema;\n }\n return config;\n}\n\nfunction systemInstructionFrom(\n request: CompletionRequest,\n messages: MessageType[],\n): string | undefined {\n const systemMessages = messages.flatMap((message) =>\n message.role === \"system\" ? [message.content] : [],\n );\n if (request.instructions !== undefined) {\n systemMessages.unshift(request.instructions);\n }\n return systemMessages.length === 0 ? undefined : systemMessages.join(\"\\n\\n\");\n}\n\nexport function messagesToGeminiContents(messages: MessageType[]): GeminiContent[] {\n const toolNamesById = new Map<string, string>();\n const contents: GeminiContent[] = [];\n\n for (const message of messages) {\n if (message.role === \"system\") {\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content = assistantMessageToGeminiContent(message);\n for (const item of typeof message.content === \"string\" ? [] : message.content) {\n if (item.type === \"tool-call\") {\n toolNamesById.set(item.toolCallId, item.toolName);\n if (item.callId !== undefined) {\n toolNamesById.set(item.callId, item.toolName);\n }\n }\n }\n if (content.parts.length > 0) {\n contents.push(content);\n }\n continue;\n }\n\n const content =\n message.role === \"tool\"\n ? toolMessageToGeminiContent(message, toolNamesById)\n : userMessageToGeminiContent(message);\n if (content.parts.length > 0) {\n contents.push(content);\n }\n }\n\n return contents;\n}\n\nfunction userMessageToGeminiContent(\n message: Extract<MessageType, { role: \"user\" }>,\n): GeminiContent {\n return {\n role: \"user\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : message.content.map(userContentToGeminiPart),\n };\n}\n\nfunction toolMessageToGeminiContent(\n message: Extract<MessageType, { role: \"tool\" }>,\n toolNamesById: Map<string, string>,\n): GeminiContent {\n return {\n role: \"user\",\n parts: message.content.map((content) => {\n if (content.type !== \"tool-result\") {\n throw new TypeError(\n \"Anvia interaction responses must be resolved by Agent before provider calls.\",\n );\n }\n return toolContentToGeminiPart(content, toolNamesById);\n }),\n };\n}\n\nfunction assistantMessageToGeminiContent(\n message: Extract<MessageType, { role: \"assistant\" }>,\n): GeminiContent {\n return {\n role: \"model\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : message.content.flatMap((content): GeminiPart[] => {\n if (content.type === \"text\") {\n const part: GeminiPart = { text: content.text };\n if (content.signature !== undefined) {\n part.thoughtSignature = content.signature;\n }\n return [part];\n }\n if (content.type === \"tool-call\") {\n const functionCall: Record<string, unknown> = {\n name: content.toolName,\n args: content.input,\n };\n if (content.callId !== undefined) {\n functionCall.id = content.callId;\n }\n const part: GeminiPart = { functionCall };\n if (content.signature !== undefined) {\n part.thoughtSignature = content.signature;\n }\n return [part];\n }\n if (content.type === \"reasoning\" && content.details !== undefined) {\n return content.details.flatMap((reasoning): GeminiPart[] => {\n if (reasoning.type !== \"text\" && reasoning.type !== \"summary\") {\n return [];\n }\n const part: GeminiPart = { text: reasoning.text, thought: true };\n if (reasoning.type === \"text\" && reasoning.signature !== undefined) {\n part.thoughtSignature = reasoning.signature;\n }\n return [part];\n });\n }\n if (content.type === \"image\" || content.type === \"file\") {\n throw new Error(\n \"Gemini does not support image or file content in assistant history yet\",\n );\n }\n return [];\n }),\n };\n}\n\nfunction userContentToGeminiPart(content: UserContentPart): GeminiPart {\n if (content.type === \"text\") {\n return { text: content.text };\n }\n if (content.type === \"image\") {\n return imageContentToGeminiPart(content);\n }\n return documentContentToGeminiPart(content);\n}\n\nfunction imageContentToGeminiPart(\n content: Extract<UserContentPart, { type: \"image\" }>,\n): GeminiPart {\n if (content.image.type === \"data\") {\n return {\n inlineData: {\n mimeType: content.mediaType ?? \"image/png\",\n data: content.image.data,\n },\n };\n }\n\n return {\n fileData: {\n fileUri: content.image.url,\n mimeType: content.mediaType ?? mimeTypeFromImageUrl(content.image.url),\n },\n };\n}\n\nfunction mimeTypeFromImageUrl(url: string): string {\n const pathname = safeUrlPathname(url).toLowerCase();\n if (pathname.endsWith(\".jpg\") || pathname.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (pathname.endsWith(\".webp\")) return \"image/webp\";\n if (pathname.endsWith(\".gif\")) return \"image/gif\";\n if (pathname.endsWith(\".bmp\")) return \"image/bmp\";\n if (pathname.endsWith(\".heic\")) return \"image/heic\";\n if (pathname.endsWith(\".heif\")) return \"image/heif\";\n return \"image/png\";\n}\n\nfunction safeUrlPathname(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n return url;\n }\n}\n\nfunction documentContentToGeminiPart(\n content: Extract<UserContentPart, { type: \"file\" }>,\n): GeminiPart {\n if (content.data.type === \"text\") {\n return { text: content.data.text };\n }\n\n if (content.data.type === \"data\") {\n return {\n inlineData: {\n mimeType: content.mediaType,\n data: content.data.data,\n },\n };\n }\n\n return {\n fileData: {\n fileUri: content.data.url,\n mimeType: content.mediaType,\n },\n };\n}\n\nfunction toolContentToGeminiPart(\n content: ToolResultPart,\n toolNamesById: Map<string, string>,\n): GeminiPart {\n const id = content.callId ?? content.toolCallId;\n const functionResponse: Record<string, unknown> = {\n name: content.toolName || toolNamesById.get(id) || content.toolCallId,\n response: toolResultResponse(content),\n };\n if (content.callId !== undefined) {\n functionResponse.id = content.callId;\n }\n return { functionResponse };\n}\n\nfunction toolResultResponse(content: ToolResultPart): Record<string, unknown> {\n const output = content.output;\n if (output.type === \"json\") {\n return { result: output.value };\n }\n if (output.type === \"text\") {\n return { content: output.value };\n }\n if (output.type === \"error-json\" || output.type === \"error-text\") {\n return { error: output.value };\n }\n if (output.type === \"execution-denied\") {\n return { error: output.reason ?? \"Tool execution was denied.\" };\n }\n return {\n content: output.value\n .map((item) => (item.type === \"text\" ? item.text : `[file:${item.mediaType}]`))\n .join(\"\\n\"),\n };\n}\n\nfunction toolDefinitionToGemini(tool: ToolDefinition): GeminiPart {\n return {\n name: tool.name,\n description: tool.description,\n parametersJsonSchema: tool.parameters,\n };\n}\n\nfunction toolChoiceToGemini(toolChoice: ToolChoice): GeminiPart {\n if (toolChoice === \"auto\") {\n return { functionCallingConfig: { mode: \"AUTO\" } };\n }\n if (toolChoice === \"required\") {\n return { functionCallingConfig: { mode: \"ANY\" } };\n }\n if (toolChoice === \"none\") {\n return { functionCallingConfig: { mode: \"NONE\" } };\n }\n return {\n functionCallingConfig: {\n mode: \"ANY\",\n allowedFunctionNames: [toolChoice.name],\n },\n };\n}\n\nexport function fromGeminiGenerateContentResponse(response: unknown): CompletionResponse {\n const raw = isPlainObject(response) ? response : {};\n const usage = usageFromGemini(raw.usageMetadata);\n const parts = candidateParts(raw, usage);\n const providerFinishReason = providerFinishReasonFromGeminiResponse(raw);\n const finishError = geminiToolFinishError(\n providerFinishReason,\n hasGeminiFunctionCallMarker(raw, parts),\n usage,\n );\n if (finishError !== undefined) throw finishError;\n const choice = assistantContentFromGeminiResponse(raw, usage);\n\n const result: CompletionResponse = {\n choice,\n usage,\n rawResponse: response,\n };\n applyGeminiFinishReason(result, raw);\n const id = stringFrom(raw.responseId) ?? stringFrom(raw.id);\n if (id !== undefined) {\n result.messageId = id;\n }\n assertSafeGeminiCompletionResponse(result);\n return result;\n}\n\nfunction applyGeminiFinishReason(\n response: CompletionResponse,\n raw: Record<string, unknown>,\n hasStreamedToolCalls = false,\n): void {\n const value = providerFinishReasonFromGeminiResponse(raw);\n if (value === undefined) return;\n applyGeminiFinishReasonValue(response, value, hasStreamedToolCalls);\n}\n\nfunction applyGeminiFinishReasonValue(\n response: CompletionResponse,\n value: string,\n hasStreamedToolCalls: boolean,\n): void {\n response.finishReason = geminiFinishReason(\n value,\n hasStreamedToolCalls || response.choice.some((part) => part.type === \"tool-call\"),\n );\n response.providerFinishReason = value;\n}\n\nfunction geminiFinishReason(value: string, hasToolCalls: boolean): CompletionFinishReason {\n if (value === \"MAX_TOKENS\") return \"length\";\n if (\n value === \"SAFETY\" ||\n value === \"RECITATION\" ||\n value === \"BLOCKLIST\" ||\n value === \"PROHIBITED_CONTENT\" ||\n value === \"SPII\" ||\n value === \"IMAGE_SAFETY\" ||\n value === \"IMAGE_PROHIBITED_CONTENT\"\n ) {\n return \"content-filter\";\n }\n if (value === \"STOP\") {\n return hasToolCalls ? \"tool-calls\" : \"stop\";\n }\n return \"other\";\n}\n\nexport function fromGeminiGenerateContentStreamChunk(chunk: unknown): CompletionModelStreamEvent[] {\n const mapping = mapGeminiGenerateContentStreamChunk(chunk);\n if (mapping.terminalError !== undefined) throw mapping.terminalError;\n return mapping.events;\n}\n\nfunction mapGeminiGenerateContentStreamChunk(chunk: unknown): GeminiStreamChunkMapping {\n if (!isPlainObject(chunk)) {\n return {\n events: [],\n toolCalls: [],\n hasToolCallMarker: false,\n hasSyntheticToolCalls: false,\n };\n }\n\n const events: CompletionModelStreamEvent[] = [];\n const usage = usageFromGemini(chunk.usageMetadata);\n const parts = candidateParts(chunk, usage);\n const providerFinishReason = providerFinishReasonFromGeminiResponse(chunk);\n const hasToolCallMarker = hasGeminiFunctionCallMarker(chunk, parts);\n const terminalError =\n providerFinishReason === undefined\n ? undefined\n : geminiToolFinishError(providerFinishReason, hasToolCallMarker, usage);\n const calls =\n terminalError === undefined ? functionCallsFromGeminiResponse(chunk, parts, usage) : [];\n const directText = textFromGeminiResponse(chunk, parts);\n if (terminalError === undefined && directText.length > 0 && parts.length === 0) {\n events.push({ type: \"text_delta\", delta: directText });\n }\n for (const { part } of terminalError === undefined ? parts : []) {\n if (typeof part.text === \"string\" && part.text.length > 0) {\n if (part.thought === true) {\n events.push({ type: \"reasoning_delta\", delta: part.text, contentType: \"summary\" });\n } else {\n events.push({ type: \"text_delta\", delta: part.text });\n }\n }\n }\n for (const call of calls) {\n events.push(\n toolCallDelta(call.toolCallId, {\n callId: call.callId,\n name: call.name,\n signature: call.signature,\n }),\n );\n const argumentsDelta = JSON.stringify(call.args);\n if (argumentsDelta === undefined) {\n throw invalidGeminiToolCallArguments(call.toolCallId, usage);\n }\n events.push(\n toolCallDelta(call.toolCallId, {\n callId: call.callId,\n argumentsDelta,\n argumentsMode: \"replace\",\n }),\n );\n }\n const id = stringFrom(chunk.responseId) ?? stringFrom(chunk.id);\n if (id !== undefined) {\n events.push({ type: \"message_id\", id });\n }\n if (isPlainObject(chunk.usageMetadata)) {\n if (terminalError === undefined) {\n events.push({ type: \"final\", response: fromGeminiGenerateContentResponse(chunk) });\n } else {\n const response: CompletionResponse = { choice: [], usage, rawResponse: chunk };\n if (providerFinishReason !== undefined) {\n applyGeminiFinishReasonValue(response, providerFinishReason, true);\n }\n events.push({ type: \"final\", response });\n }\n }\n return providerFinishReason === undefined\n ? {\n events,\n toolCalls: calls.map(toolCallFromGeminiFunctionCall),\n hasToolCallMarker,\n hasSyntheticToolCalls: calls.some((call) => call.callId === undefined),\n terminalError,\n }\n : {\n events,\n toolCalls: calls.map(toolCallFromGeminiFunctionCall),\n hasToolCallMarker,\n hasSyntheticToolCalls: calls.some((call) => call.callId === undefined),\n providerFinishReason,\n terminalError,\n };\n}\n\nclass GeminiCompletionStreamState {\n private readonly toolCalls = new Map<\n string,\n Extract<AssistantContentPart, { type: \"tool-call\" }>\n >();\n private providerFinishReason: string | undefined;\n private terminalChunk: unknown;\n private finalResponse: CompletionResponse | undefined;\n private sawToolCallMarker = false;\n private sawSyntheticToolCallChunk = false;\n private terminalError: CompletionProviderOutputError | undefined;\n\n accept(chunk: unknown, mapping: GeminiStreamChunkMapping): void {\n if (mapping.hasSyntheticToolCalls && this.sawSyntheticToolCallChunk) {\n const toolCallId = mapping.toolCalls.find(\n (toolCall) => toolCall.callId === undefined,\n )?.toolCallId;\n throw toolCallId === undefined\n ? new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n usage: this.currentUsage(),\n })\n : invalidGeminiToolCall(toolCallId, this.currentUsage());\n }\n if (\n this.providerFinishReason !== undefined &&\n (mapping.hasToolCallMarker || hasGeminiSemanticProgress(mapping.events))\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: \"other\",\n usage: this.currentUsage(),\n });\n }\n for (const toolCall of mapping.toolCalls) {\n const existing = this.toolCalls.get(toolCall.toolCallId);\n if (existing !== undefined) {\n if (\n existing.callId === undefined ||\n toolCall.callId === undefined ||\n !sameGeminiToolCall(existing, toolCall)\n ) {\n throw invalidGeminiToolCall(toolCall.toolCallId, this.currentUsage());\n }\n continue;\n }\n this.toolCalls.set(toolCall.toolCallId, toolCall);\n }\n this.sawToolCallMarker ||= mapping.hasToolCallMarker;\n this.sawSyntheticToolCallChunk ||= mapping.hasSyntheticToolCalls;\n for (const event of mapping.events) {\n if (event.type === \"final\") {\n this.finalResponse = event.response;\n }\n }\n this.terminalError ??= mapping.terminalError;\n\n if (mapping.providerFinishReason !== undefined) {\n if (\n this.providerFinishReason !== undefined &&\n this.providerFinishReason !== mapping.providerFinishReason\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: \"other\",\n usage: this.currentUsage(),\n });\n }\n this.providerFinishReason = mapping.providerFinishReason;\n this.terminalChunk = chunk;\n }\n }\n\n assertComplete(): void {\n if (this.terminalError !== undefined) {\n throw geminiProviderOutputErrorWithUsage(this.terminalError, this.currentUsage());\n }\n if (!this.sawToolCallMarker && this.toolCalls.size === 0) return;\n if (this.providerFinishReason !== undefined) {\n assertSafeGeminiToolFinishReason(this.providerFinishReason, this.currentUsage());\n return;\n }\n const toolCallId = this.toolCalls.keys().next().value as string | undefined;\n throw new CompletionProviderOutputError(\n toolCallId === undefined\n ? { kind: \"incomplete-tool-call\", usage: this.currentUsage() }\n : { kind: \"incomplete-tool-call\", toolCallId, usage: this.currentUsage() },\n );\n }\n\n finalEvent(): Extract<CompletionModelStreamEvent, { type: \"final\" }> | undefined {\n let response = this.finalResponse;\n if (response === undefined) {\n if (this.terminalChunk === undefined) {\n return undefined;\n }\n const raw = isPlainObject(this.terminalChunk) ? this.terminalChunk : {};\n response = {\n choice: [],\n usage: usageFromGemini(raw.usageMetadata),\n rawResponse: this.terminalChunk,\n };\n const messageId = stringFrom(raw.responseId) ?? stringFrom(raw.id);\n if (messageId !== undefined) response.messageId = messageId;\n }\n\n response = mergeGeminiStreamToolCalls(response, [...this.toolCalls.values()]);\n if (this.providerFinishReason !== undefined) {\n applyGeminiFinishReasonValue(response, this.providerFinishReason, this.toolCalls.size > 0);\n }\n assertSafeGeminiCompletionResponse(response);\n return { type: \"final\", response };\n }\n\n private currentUsage(): Usage {\n if (this.finalResponse !== undefined) {\n return this.finalResponse.usage;\n }\n const raw = isPlainObject(this.terminalChunk) ? this.terminalChunk : {};\n return usageFromGemini(raw.usageMetadata);\n }\n}\n\nfunction hasGeminiSemanticProgress(events: readonly CompletionModelStreamEvent[]): boolean {\n return events.some(\n (event) =>\n event.type === \"text_delta\" ||\n event.type === \"reasoning_delta\" ||\n event.type === \"tool_call_delta\" ||\n event.type === \"tool_call\" ||\n event.type === \"provider_tool_call\",\n );\n}\n\nfunction sameGeminiToolCall(\n left: Extract<AssistantContentPart, { type: \"tool-call\" }>,\n right: Extract<AssistantContentPart, { type: \"tool-call\" }>,\n): boolean {\n return (\n left.toolName === right.toolName &&\n left.callId === right.callId &&\n left.signature === right.signature &&\n sameJsonValue(left.input, right.input)\n );\n}\n\nfunction sameJsonValue(left: JsonValue, right: JsonValue): boolean {\n if (Object.is(left, right)) return true;\n if (isJsonArray(left) || isJsonArray(right)) {\n return (\n isJsonArray(left) &&\n isJsonArray(right) &&\n left.length === right.length &&\n left.every((value, index) => {\n const rightValue = right[index];\n return rightValue !== undefined && sameJsonValue(value, rightValue);\n })\n );\n }\n if (left === null || right === null || typeof left !== \"object\" || typeof right !== \"object\") {\n return false;\n }\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every(\n (key) =>\n Object.hasOwn(right, key) && sameJsonValue(left[key] as JsonValue, right[key] as JsonValue),\n )\n );\n}\n\nfunction isJsonArray(value: JsonValue): value is readonly JsonValue[] {\n return Array.isArray(value);\n}\n\nfunction assistantContentFromGeminiResponse(\n response: Record<string, unknown>,\n usage: Usage,\n): AssistantContentPart[] {\n const parts = candidateParts(response, usage);\n const calls = functionCallsFromGeminiResponse(response, parts, usage);\n if (parts.length === 0) {\n const choice: AssistantContentPart[] = [];\n const text = textFromGeminiResponse(response, parts);\n if (text.length > 0) choice.push({ type: \"text\", text });\n choice.push(...calls.map(toolCallFromGeminiFunctionCall));\n return choice;\n }\n\n const callsByPartIndex = new Map(calls.map((call) => [call.partIndex, call]));\n const choice: AssistantContentPart[] = [];\n for (const { index, part } of parts) {\n if (typeof part.text === \"string\" && part.text.length > 0) {\n if (part.thought === true) {\n choice.push({\n type: \"reasoning\",\n text: part.text,\n details: [{ type: \"summary\", text: part.text }],\n });\n } else {\n const signature = thoughtSignatureFrom(part);\n let text: Extract<AssistantContentPart, { type: \"text\" }> = {\n type: \"text\",\n text: part.text,\n };\n if (signature !== undefined) text = { ...text, signature };\n choice.push(text);\n }\n }\n const call = callsByPartIndex.get(index);\n if (call !== undefined) {\n choice.push(toolCallFromGeminiFunctionCall(call));\n }\n }\n return choice;\n}\n\nfunction textFromGeminiResponse(\n response: Record<string, unknown>,\n parts = candidateParts(response),\n): string {\n if (parts.length > 0) {\n return parts\n .flatMap(({ part }) =>\n part.thought !== true && typeof part.text === \"string\" ? [part.text] : [],\n )\n .join(\"\");\n }\n if (hasGeminiCandidatePayload(response)) {\n return \"\";\n }\n const directText = ownDataProperty(response, \"text\");\n return typeof directText === \"string\" ? directText : \"\";\n}\n\nfunction functionCallsFromGeminiResponse(\n response: Record<string, unknown>,\n parts: IndexedGeminiPart[],\n usage: Usage,\n): GeminiFunctionCall[] {\n if (parts.length > 0) {\n const calls = parts.flatMap(({ index, part }) => {\n if (part.functionCall === undefined) {\n return [];\n }\n if (!isPlainObject(part.functionCall)) {\n throw invalidGeminiToolCall(deterministicGeminiToolCallId(index), usage);\n }\n return [functionCallFromGeminiPart(part.functionCall, part, index, usage)];\n });\n assertDistinctGeminiFunctionCalls(calls, usage);\n return calls;\n }\n if (hasGeminiCandidatePayload(response)) {\n return [];\n }\n\n const camelCaseCalls = ownDataProperty(response, \"functionCalls\");\n const snakeCaseCalls = ownDataProperty(response, \"function_calls\");\n const directCalls = Array.isArray(camelCaseCalls)\n ? camelCaseCalls\n : Array.isArray(snakeCaseCalls)\n ? snakeCaseCalls\n : [];\n const calls = directCalls.map((call, index) => {\n if (!isPlainObject(call)) {\n throw invalidGeminiToolCall(deterministicGeminiToolCallId(index), usage);\n }\n return functionCallFromGeminiPart(call, call, index, usage);\n });\n assertDistinctGeminiFunctionCalls(calls, usage);\n return calls;\n}\n\nfunction functionCallFromGeminiPart(\n call: Record<string, unknown>,\n part: Record<string, unknown>,\n partIndex: number,\n usage: Usage,\n): GeminiFunctionCall {\n const fallbackId = deterministicGeminiToolCallId(partIndex);\n const rawCallId = call.id;\n const callId = isNonblankString(rawCallId) ? rawCallId : undefined;\n const toolCallId = callId ?? fallbackId;\n if (rawCallId !== undefined && callId === undefined) {\n throw invalidGeminiToolCall(toolCallId, usage);\n }\n if (\n call.partialArgs !== undefined ||\n call.partial_args !== undefined ||\n call.willContinue !== undefined ||\n call.will_continue !== undefined\n ) {\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n toolCallId,\n usage,\n });\n }\n const name = call.name;\n if (!isNonblankString(name)) {\n throw invalidGeminiToolCall(toolCallId, usage);\n }\n const args = call.args;\n if (!isPlainObject(args) || !isJsonValue(args)) {\n throw invalidGeminiToolCallArguments(toolCallId, usage);\n }\n\n const normalized: GeminiFunctionCall = {\n toolCallId,\n name,\n args,\n partIndex,\n };\n const signature = thoughtSignatureFrom(part) ?? thoughtSignatureFrom(call);\n if (callId !== undefined) {\n return signature === undefined\n ? { ...normalized, callId }\n : { ...normalized, callId, signature };\n }\n return signature === undefined ? normalized : { ...normalized, signature };\n}\n\nfunction candidateParts(response: Record<string, unknown>, usage?: Usage): IndexedGeminiPart[] {\n const candidate = primaryGeminiCandidate(response);\n if (candidate === undefined || candidate.content === undefined) {\n return [];\n }\n if (!isPlainObject(candidate.content)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (candidate.content.parts === undefined) return [];\n if (!Array.isArray(candidate.content.parts)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (candidate.content.parts.some((part) => !isPlainObject(part))) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n return candidate.content.parts.map((part, index) => ({\n index,\n part: part as Record<string, unknown>,\n }));\n}\n\nfunction primaryGeminiCandidate(\n response: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (response.candidates === undefined) return undefined;\n if (!Array.isArray(response.candidates)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const candidates = response.candidates;\n if (\n candidates.some(\n (candidate) =>\n !isPlainObject(candidate) ||\n (candidate.index !== undefined &&\n (!Number.isSafeInteger(candidate.index) || (candidate.index as number) < 0)),\n )\n ) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const primaryCandidates = candidates.filter(\n (candidate): candidate is Record<string, unknown> =>\n isPlainObject(candidate) && candidate.index === 0,\n );\n if (primaryCandidates.length === 1) {\n return primaryCandidates[0];\n }\n if (primaryCandidates.length > 1) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n if (candidates.length === 0) return undefined;\n if (candidates.length !== 1) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const candidate = candidates[0] as Record<string, unknown>;\n if (candidate.index !== undefined && candidate.index !== 0) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n return candidate;\n}\n\nfunction providerFinishReasonFromGeminiResponse(\n response: Record<string, unknown>,\n): string | undefined {\n const candidateFinishReason = stringFrom(primaryGeminiCandidate(response)?.finishReason);\n if (candidateFinishReason !== undefined) return candidateFinishReason;\n const promptFeedback = response.promptFeedback ?? response.prompt_feedback;\n if (promptFeedback === undefined) return undefined;\n if (!isPlainObject(promptFeedback)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-response\" });\n }\n const blockReason = promptFeedback.blockReason ?? promptFeedback.block_reason;\n if (blockReason === undefined) return undefined;\n if (typeof blockReason !== \"string\" || blockReason.length === 0) {\n throw new CompletionProviderOutputError({ kind: \"invalid-response\" });\n }\n return blockReason;\n}\n\nfunction hasGeminiCandidatePayload(response: Record<string, unknown>): boolean {\n return Array.isArray(response.candidates) && response.candidates.length > 0;\n}\n\nfunction hasGeminiFunctionCallMarker(\n response: Record<string, unknown>,\n parts: readonly IndexedGeminiPart[],\n): boolean {\n if (parts.some(({ part }) => ownDataProperty(part, \"functionCall\") !== undefined)) {\n return true;\n }\n if (hasGeminiCandidatePayload(response)) return false;\n const camelCaseCalls = ownDataProperty(response, \"functionCalls\");\n const snakeCaseCalls = ownDataProperty(response, \"function_calls\");\n return (\n (Array.isArray(camelCaseCalls) && camelCaseCalls.length > 0) ||\n (Array.isArray(snakeCaseCalls) && snakeCaseCalls.length > 0)\n );\n}\n\nfunction deterministicGeminiToolCallId(partIndex: number): string {\n return `gemini-tool-${partIndex.toString()}`;\n}\n\nfunction toolCallFromGeminiFunctionCall(\n call: GeminiFunctionCall,\n): Extract<AssistantContentPart, { type: \"tool-call\" }> {\n let toolCall: Extract<AssistantContentPart, { type: \"tool-call\" }> = {\n type: \"tool-call\",\n toolCallId: call.toolCallId,\n toolName: call.name,\n input: call.args,\n };\n if (call.callId !== undefined) toolCall = { ...toolCall, callId: call.callId };\n if (call.signature !== undefined) toolCall = { ...toolCall, signature: call.signature };\n return toolCall;\n}\n\nfunction mergeGeminiStreamToolCalls(\n response: CompletionResponse,\n toolCalls: readonly Extract<AssistantContentPart, { type: \"tool-call\" }>[],\n): CompletionResponse {\n if (toolCalls.length === 0) return response;\n const finalIds = new Set(\n response.choice.flatMap((part) => (part.type === \"tool-call\" ? [part.toolCallId] : [])),\n );\n const missing = toolCalls.filter((toolCall) => !finalIds.has(toolCall.toolCallId));\n return missing.length === 0\n ? response\n : { ...response, choice: [...response.choice, ...missing] };\n}\n\nfunction assertSafeGeminiToolFinishReason(value: string, usage: Usage): void {\n const error = geminiToolFinishError(value, true, usage);\n if (error !== undefined) throw error;\n}\n\nfunction geminiToolFinishError(\n value: string | undefined,\n hasToolCalls: boolean,\n usage: Usage,\n): CompletionProviderOutputError | undefined {\n if (value === \"MALFORMED_FUNCTION_CALL\") {\n return new CompletionProviderOutputError({ kind: \"malformed-tool-arguments\", usage });\n }\n if (value === \"UNEXPECTED_TOOL_CALL\" || value === \"TOO_MANY_TOOL_CALLS\") {\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (!hasToolCalls) return undefined;\n if (value === undefined) {\n return new CompletionProviderOutputError({ kind: \"incomplete-tool-call\", usage });\n }\n const finishReason = geminiFinishReason(value, true);\n if (finishReason === \"tool-calls\") return undefined;\n if (finishReason === \"length\") {\n return new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage,\n });\n }\n if (finishReason === \"content-filter\") {\n return new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage,\n });\n }\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", finishReason, usage });\n}\n\nfunction assertSafeGeminiCompletionResponse(response: CompletionResponse): void {\n const toolCalls = response.choice.filter(\n (part): part is Extract<AssistantContentPart, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (toolCalls.length > 0) {\n if (response.finishReason === undefined) {\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n usage: response.usage,\n });\n }\n assertNormalizedGeminiToolFinishReason(response.finishReason, response.usage);\n } else if (toolCalls.length === 0 && response.finishReason === \"tool-calls\") {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: response.finishReason,\n usage: response.usage,\n });\n }\n\n const toolCallIds = new Set<string>();\n const callIds = new Set<string>();\n for (const toolCall of toolCalls) {\n if (toolCallIds.has(toolCall.toolCallId)) {\n throw invalidGeminiToolCall(toolCall.toolCallId, response.usage);\n }\n toolCallIds.add(toolCall.toolCallId);\n if (toolCall.callId !== undefined) {\n if (callIds.has(toolCall.callId)) {\n throw invalidGeminiToolCall(toolCall.toolCallId, response.usage);\n }\n callIds.add(toolCall.callId);\n }\n }\n}\n\nfunction assertDistinctGeminiFunctionCalls(\n calls: readonly GeminiFunctionCall[],\n usage: Usage,\n): void {\n const toolCallIds = new Set<string>();\n const callIds = new Set<string>();\n for (const call of calls) {\n if (toolCallIds.has(call.toolCallId)) {\n throw invalidGeminiToolCall(call.toolCallId, usage);\n }\n toolCallIds.add(call.toolCallId);\n if (call.callId !== undefined) {\n if (callIds.has(call.callId)) {\n throw invalidGeminiToolCall(call.toolCallId, usage);\n }\n callIds.add(call.callId);\n }\n }\n}\n\nfunction assertNormalizedGeminiToolFinishReason(\n finishReason: CompletionFinishReason,\n usage: Usage,\n): void {\n if (finishReason === \"stop\" || finishReason === \"tool-calls\") return;\n if (finishReason === \"length\") {\n throw new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage,\n });\n }\n if (finishReason === \"content-filter\") {\n throw new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage,\n });\n }\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", finishReason, usage });\n}\n\nfunction geminiProviderOutputErrorWithUsage(\n error: CompletionProviderOutputError,\n usage: Usage,\n): CompletionProviderOutputError {\n if (error.kind === \"truncated-tool-call\") {\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: \"length\",\n toolCallId: error.toolCallId,\n usage,\n });\n }\n if (error.kind === \"filtered-tool-call\") {\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: \"content-filter\",\n toolCallId: error.toolCallId,\n usage,\n });\n }\n if (error.finishReason === \"length\" || error.finishReason === \"content-filter\") {\n throw error;\n }\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: error.finishReason,\n toolCallId: error.toolCallId,\n usage,\n });\n}\n\nfunction invalidGeminiToolCall(toolCallId: string, usage: Usage): CompletionProviderOutputError {\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", toolCallId, usage });\n}\n\nfunction invalidGeminiToolCallArguments(\n toolCallId: string,\n usage: Usage,\n): CompletionProviderOutputError {\n return new CompletionProviderOutputError({\n kind: \"invalid-tool-arguments\",\n toolCallId,\n usage,\n });\n}\n\nfunction ownDataProperty(value: Record<string, unknown>, key: string): unknown {\n try {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return descriptor !== undefined && \"value\" in descriptor ? descriptor.value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction isNonblankString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction usageFromGemini(usage: unknown): Usage {\n const raw = isPlainObject(usage) ? usage : {};\n const promptInputTokens = numberFrom(raw.promptTokenCount);\n const toolInputTokens = numberFrom(raw.toolUsePromptTokenCount);\n const inputTokens = promptInputTokens + toolInputTokens;\n const candidateOutputTokens = numberFrom(raw.candidatesTokenCount);\n const reasoningOutputTokens = numberFrom(raw.thoughtsTokenCount);\n const outputTokens = candidateOutputTokens + reasoningOutputTokens;\n const cachedInputTokens = Math.min(promptInputTokens, numberFrom(raw.cachedContentTokenCount));\n const totalTokens = inputTokens + outputTokens;\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens,\n details: {\n input: promptInputTokens - cachedInputTokens,\n input_cached_tokens: cachedInputTokens,\n input_tool_use_tokens: toolInputTokens,\n output: candidateOutputTokens,\n output_reasoning_tokens: reasoningOutputTokens,\n total: totalTokens,\n },\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n}\n\nfunction stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction thoughtSignatureFrom(value: Record<string, unknown>): string | undefined {\n return stringFrom(value.thoughtSignature) ?? stringFrom(value.thought_signature);\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n argumentsMode?: ToolCallArgumentsMode | undefined;\n signature?: string | undefined;\n },\n): CompletionModelStreamEvent {\n const event: CompletionModelStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n if (values.argumentsMode !== undefined) event.argumentsMode = values.argumentsMode;\n if (values.signature !== undefined) event.signature = values.signature;\n return event;\n}\n","import {\n type CompletionRequest,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport function orderedRequestMessages(request: CompletionRequest): MessageType[] {\n const messages: MessageType[] = [];\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","export function disableGeminiNativeRetries(\n config: Record<string, unknown>,\n): Record<string, unknown> {\n const httpOptions = isPlainObject(config.httpOptions) ? config.httpOptions : {};\n const retryOptions = isPlainObject(httpOptions.retryOptions) ? httpOptions.retryOptions : {};\n return {\n ...config,\n httpOptions: {\n ...httpOptions,\n retryOptions: {\n ...retryOptions,\n attempts: 1,\n },\n },\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { Embedding, EmbeddingModel, ModelCallOptions } from \"@anvia/core/embeddings\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiEmbeddingModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nexport type GeminiEmbeddingTaskType =\n | \"TASK_TYPE_UNSPECIFIED\"\n | \"RETRIEVAL_QUERY\"\n | \"RETRIEVAL_DOCUMENT\"\n | \"SEMANTIC_SIMILARITY\"\n | \"CLASSIFICATION\"\n | \"CLUSTERING\"\n | \"QUESTION_ANSWERING\"\n | \"FACT_VERIFICATION\"\n | \"CODE_RETRIEVAL_QUERY\";\n\nexport type GeminiEmbeddingModelOptions = {\n modelId: GeminiEmbeddingModelId;\n dimensions?: number | undefined;\n maxBatchSize?: number | undefined;\n taskType?: GeminiEmbeddingTaskType | undefined;\n title?: string | undefined;\n};\n\nexport class GeminiEmbeddingModel implements EmbeddingModel {\n readonly provider = \"gemini\";\n readonly modelId: GeminiEmbeddingModelId;\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n private readonly taskType: GeminiEmbeddingTaskType | undefined;\n private readonly title: string | undefined;\n\n constructor(\n private readonly client: GoogleGenAI,\n options: GeminiEmbeddingModelOptions,\n ) {\n this.modelId = options.modelId;\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 100;\n this.taskType = options.taskType;\n this.title = options.title;\n }\n\n async embedTexts(texts: string[], options?: ModelCallOptions): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch, options)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[], options?: ModelCallOptions): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const config = { ...this.embeddingConfig() };\n if (options?.abortSignal !== undefined) {\n Object.assign(config, { abortSignal: options.abortSignal });\n }\n const response = await this.client.models.embedContent({\n model: this.modelId,\n contents: texts,\n config: disableGeminiNativeRetries(config),\n } as never);\n const rawEmbeddings = embeddingsFromResponse(response);\n if (rawEmbeddings.length !== texts.length) {\n throw new Error(\n `Embedding response length ${rawEmbeddings.length} did not match input length ${texts.length}`,\n );\n }\n\n return rawEmbeddings.map((vector, index) => ({\n document: texts[index] as string,\n vector,\n }));\n }\n\n private embeddingConfig(): Record<string, unknown> {\n const config: Record<string, unknown> = {};\n if (this.dimensions !== undefined) config.outputDimensionality = this.dimensions;\n if (this.taskType !== undefined) config.taskType = this.taskType;\n if (this.title !== undefined) config.title = this.title;\n return config;\n }\n}\n\nfunction embeddingsFromResponse(response: unknown): number[][] {\n const raw = response as Record<string, unknown>;\n if (Array.isArray(raw.embeddings)) {\n return raw.embeddings.map((embedding, index) => vectorFromEmbedding(embedding, index));\n }\n if (raw.embedding !== undefined) {\n return [vectorFromEmbedding(raw.embedding, 0)];\n }\n return [];\n}\n\nfunction vectorFromEmbedding(embedding: unknown, position: number): number[] {\n if (!isObject(embedding) || !isNumberArray(embedding.values)) {\n throw new Error(`Invalid Gemini embedding response vector at position ${position}.`);\n }\n return embedding.values;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNumberArray(value: unknown): value is number[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"number\");\n}\n","import { Buffer } from \"node:buffer\";\nimport type {\n GeneratedImage,\n ImageGenerationModel,\n ImageGenerationRequest,\n ImageGenerationResult,\n ModelCallOptions,\n} from \"@anvia/core/image-generation\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiGenerateContentImageModelId, GeminiGenerateImagesModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nexport const GEMINI_2_5_FLASH_IMAGE = \"gemini-2.5-flash-image\";\nexport const GEMINI_3_1_FLASH_IMAGE = \"gemini-3.1-flash-image\";\nexport const GEMINI_3_1_FLASH_LITE_IMAGE = \"gemini-3.1-flash-lite-image\";\nexport const GEMINI_3_PRO_IMAGE = \"gemini-3-pro-image\";\nexport const GEMINI_3_PRO_IMAGE_PREVIEW = \"gemini-3-pro-image-preview\";\nexport const IMAGEN_4_GENERATE = \"imagen-4.0-generate-001\";\n\nexport class GeminiImageGenerationModel implements ImageGenerationModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiGenerateContentImageModelId,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n options?: ModelCallOptions,\n ): Promise<ImageGenerationResult<unknown>> {\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n const providerConfig = isPlainObject(providerConfigValue) ? providerConfigValue : {};\n const providerImageConfig = isPlainObject(providerConfig.imageConfig)\n ? providerConfig.imageConfig\n : {};\n const config: Record<string, unknown> = {\n ...providerConfig,\n responseModalities: [\"TEXT\", \"IMAGE\"],\n imageConfig: {\n ...providerImageConfig,\n aspectRatio: aspectRatio(request.width, request.height),\n },\n };\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n const params: Record<string, unknown> = {\n ...providerTopLevel,\n model: this.modelId,\n contents: request.prompt,\n config: disableGeminiNativeRetries(config),\n };\n\n const response = await this.client.models.generateContent(params as never);\n return nativeImageResponseFromGemini(response);\n }\n}\n\nexport class GeminiImagenGenerationModel implements ImageGenerationModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiGenerateImagesModelId,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n options?: ModelCallOptions,\n ): Promise<ImageGenerationResult<unknown>> {\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n const providerConfig = isPlainObject(providerConfigValue) ? providerConfigValue : {};\n const config: Record<string, unknown> = {\n ...providerConfig,\n aspectRatio: aspectRatio(request.width, request.height),\n };\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n const params: Record<string, unknown> = {\n ...providerTopLevel,\n model: this.modelId,\n prompt: request.prompt,\n config: disableGeminiNativeRetries(config),\n };\n\n const response = await this.client.models.generateImages(params as never);\n return imagenResponseFromGemini(response);\n }\n}\n\nexport function nativeImageResponseFromGemini(response: unknown): ImageGenerationResult<unknown> {\n const raw = response as Record<string, unknown>;\n const candidates = Array.isArray(raw.candidates) ? raw.candidates : [];\n const images = candidates.flatMap((candidate): GeneratedImage[] => {\n if (!isPlainObject(candidate) || !isPlainObject(candidate.content)) {\n return [];\n }\n const parts = Array.isArray(candidate.content.parts) ? candidate.content.parts : [];\n return parts.flatMap((part): GeneratedImage[] => {\n if (!isPlainObject(part) || !isPlainObject(part.inlineData)) {\n return [];\n }\n const data = part.inlineData.data;\n if (typeof data !== \"string\") {\n return [];\n }\n return [\n {\n data: decodeBase64Image(data),\n mediaType:\n typeof part.inlineData.mimeType === \"string\" ? part.inlineData.mimeType : \"image/png\",\n },\n ];\n });\n });\n\n if (images.length === 0) {\n throw new Error(\"Gemini image generation response contained no inline image data.\");\n }\n\n return {\n images: images as [GeneratedImage, ...GeneratedImage[]],\n rawResponse: response,\n };\n}\n\nexport function imagenResponseFromGemini(response: unknown): ImageGenerationResult<unknown> {\n const raw = response as Record<string, unknown>;\n const images = (Array.isArray(raw.generatedImages) ? raw.generatedImages : []).flatMap(\n (item): GeneratedImage[] => {\n if (!isPlainObject(item) || !isPlainObject(item.image)) {\n return [];\n }\n const imageBytes = item.image.imageBytes;\n if (typeof imageBytes !== \"string\") {\n return [];\n }\n return [\n {\n data: decodeBase64Image(imageBytes),\n mediaType: typeof item.image.mimeType === \"string\" ? item.image.mimeType : \"image/png\",\n },\n ];\n },\n );\n\n if (images.length === 0) {\n throw new Error(\"Gemini image generation response contained no base64 images.\");\n }\n\n return {\n images: images as [GeneratedImage, ...GeneratedImage[]],\n rawResponse: response,\n };\n}\n\nexport function aspectRatio(width: number, height: number): string {\n const normalizedWidth = Math.max(1, Math.trunc(width));\n const normalizedHeight = Math.max(1, Math.trunc(height));\n const divisor = gcd(normalizedWidth, normalizedHeight);\n return `${normalizedWidth / divisor}:${normalizedHeight / divisor}`;\n}\n\nfunction gcd(left: number, right: number): number {\n let a = left;\n let b = right;\n while (b !== 0) {\n const next = a % b;\n a = b;\n b = next;\n }\n return a;\n}\n\nfunction decodeBase64Image(value: string): Uint8Array {\n const normalized = value.replace(/\\s/g, \"\").replace(/=+$/, \"\");\n const bytes = Buffer.from(value, \"base64\");\n const roundTrip = bytes.toString(\"base64\").replace(/=+$/, \"\");\n if (normalized.length === 0 || bytes.length === 0 || roundTrip !== normalized) {\n throw new Error(\"Gemini image generation response contained invalid base64 image data.\");\n }\n return new Uint8Array(bytes);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport type { ModelId } from \"@anvia/core/model-listing\";\n\nexport type KnownGeminiCompletionModelId =\n | \"gemini-2.0-flash\"\n | \"gemini-2.0-flash-lite\"\n | \"gemini-2.5-flash\"\n | \"gemini-2.5-flash-image\"\n | \"gemini-2.5-flash-lite\"\n | \"gemini-2.5-flash-preview-tts\"\n | \"gemini-2.5-pro\"\n | \"gemini-2.5-pro-preview-tts\"\n | \"gemini-3-flash-preview\"\n | \"gemini-3-pro-image-preview\"\n | \"gemini-3-pro-preview\"\n | \"gemini-3.1-flash-image-preview\"\n | \"gemini-3.1-flash-image\"\n | \"gemini-3.1-flash-lite-image\"\n | \"gemini-3.1-flash-lite\"\n | \"gemini-3.1-flash-lite-preview\"\n | \"gemini-3.1-pro-preview\"\n | \"gemini-3.1-pro-preview-customtools\"\n | \"gemini-3.5-flash\"\n | \"gemini-3.5-flash-lite\"\n | \"gemini-3.6-flash\"\n | \"gemini-3.7-flash\"\n | \"gemini-3-pro-image\"\n | \"gemini-flash-latest\"\n | \"gemini-flash-lite-latest\"\n | \"gemma-4-26b-a4b-it\"\n | \"gemma-4-31b-it\";\n\nexport type GeminiCompletionModelId = ModelId<KnownGeminiCompletionModelId>;\n\nconst CONTEXT_1M_64K = {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 65_536,\n};\n\nexport const GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS = {\n \"gemini-2.0-flash\": {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 8_192,\n },\n \"gemini-2.0-flash-lite\": {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 8_192,\n },\n \"gemini-2.5-flash\": CONTEXT_1M_64K,\n \"gemini-2.5-flash-image\": {\n contextWindow: 32_768,\n maxInputTokens: 32_768,\n maxOutputTokens: 32_768,\n },\n \"gemini-2.5-flash-lite\": CONTEXT_1M_64K,\n \"gemini-2.5-flash-preview-tts\": {\n contextWindow: 8_192,\n maxInputTokens: 8_192,\n maxOutputTokens: 16_384,\n },\n \"gemini-2.5-pro\": CONTEXT_1M_64K,\n \"gemini-2.5-pro-preview-tts\": {\n contextWindow: 8_192,\n maxInputTokens: 8_192,\n maxOutputTokens: 16_384,\n },\n \"gemini-3-flash-preview\": CONTEXT_1M_64K,\n \"gemini-3-pro-image-preview\": {\n contextWindow: 131_072,\n maxInputTokens: 131_072,\n maxOutputTokens: 32_768,\n },\n \"gemini-3-pro-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-flash-image-preview\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 65_536,\n },\n \"gemini-3.1-flash-image\": {\n contextWindow: 131_072,\n maxInputTokens: 131_072,\n maxOutputTokens: 32_768,\n },\n \"gemini-3.1-flash-lite-image\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 4_096,\n },\n \"gemini-3.1-flash-lite\": CONTEXT_1M_64K,\n \"gemini-3.1-flash-lite-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-pro-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-pro-preview-customtools\": CONTEXT_1M_64K,\n \"gemini-3.5-flash\": CONTEXT_1M_64K,\n \"gemini-3.5-flash-lite\": CONTEXT_1M_64K,\n \"gemini-3.6-flash\": CONTEXT_1M_64K,\n \"gemini-3.7-flash\": CONTEXT_1M_64K,\n \"gemini-3-pro-image\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 32_768,\n },\n \"gemini-flash-latest\": CONTEXT_1M_64K,\n \"gemini-flash-lite-latest\": CONTEXT_1M_64K,\n \"gemma-4-26b-a4b-it\": {\n contextWindow: 262_144,\n maxInputTokens: 262_144,\n maxOutputTokens: 32_768,\n },\n \"gemma-4-31b-it\": {\n contextWindow: 262_144,\n maxInputTokens: 262_144,\n maxOutputTokens: 32_768,\n },\n} satisfies Readonly<Record<KnownGeminiCompletionModelId, ModelContextLimits>>;\n\nexport type KnownGeminiEmbeddingModelId =\n | \"gemini-embedding-001\"\n | \"gemini-embedding-2\"\n | \"gemini-embedding-2-preview\";\n\nexport type GeminiEmbeddingModelId = ModelId<KnownGeminiEmbeddingModelId>;\n\nexport type KnownGeminiGenerateContentImageModelId =\n | \"gemini-2.5-flash-image\"\n | \"gemini-3.1-flash-image\"\n | \"gemini-3.1-flash-lite-image\"\n | \"gemini-3-pro-image-preview\"\n | \"gemini-3.1-flash-image-preview\"\n | \"gemini-3-pro-image\";\n\nexport type KnownGeminiGenerateImagesModelId = \"imagen-4.0-generate-001\";\n\nexport type GeminiGenerateContentImageModelId = ModelId<KnownGeminiGenerateContentImageModelId>;\nexport type GeminiGenerateImagesModelId = ModelId<KnownGeminiGenerateImagesModelId>;\n\nexport type GeminiTranscriptionModelId = GeminiCompletionModelId;\n","import { Buffer } from \"node:buffer\";\nimport type {\n ModelCallOptions,\n TranscriptionModel,\n TranscriptionRequest,\n TranscriptionResult,\n} from \"@anvia/core/transcription\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiTranscriptionModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nconst TRANSCRIPTION_PREAMBLE =\n \"Transcribe the provided audio exactly. Do not add additional information.\";\n\nexport class GeminiTranscriptionModel implements TranscriptionModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiTranscriptionModelId,\n ) {}\n\n async transcription(\n request: TranscriptionRequest,\n options?: ModelCallOptions,\n ): Promise<TranscriptionResult<unknown>> {\n const config: Record<string, unknown> = isPlainObject(request.providerOptions)\n ? { ...request.providerOptions }\n : {};\n if (request.temperature !== undefined) {\n config.temperature = request.temperature;\n }\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n\n const response = await this.client.models.generateContent({\n model: this.modelId,\n contents: [\n {\n role: \"user\",\n parts: [\n {\n inlineData: {\n mimeType: request.mediaType ?? mimeTypeFromFilename(request.filename),\n data: Buffer.from(request.data).toString(\"base64\"),\n },\n },\n ],\n },\n ],\n config: disableGeminiNativeRetries({\n ...config,\n systemInstruction:\n request.prompt === undefined\n ? TRANSCRIPTION_PREAMBLE\n : `${TRANSCRIPTION_PREAMBLE}\\n\\n${request.prompt}`,\n }),\n } as never);\n\n return {\n text: textFromGenerateContentResponse(response),\n rawResponse: response,\n };\n }\n}\n\nexport function textFromGenerateContentResponse(response: unknown): string {\n const raw = response as Record<string, unknown>;\n if (typeof raw.text === \"string\") {\n return raw.text;\n }\n const candidates = Array.isArray(raw.candidates) ? raw.candidates : [];\n for (const candidate of candidates) {\n if (!isPlainObject(candidate) || !isPlainObject(candidate.content)) {\n continue;\n }\n const parts = Array.isArray(candidate.content.parts) ? candidate.content.parts : [];\n for (const part of parts) {\n if (isPlainObject(part) && typeof part.text === \"string\") {\n return part.text;\n }\n }\n }\n throw new Error(\"Gemini transcription response contained no text.\");\n}\n\nfunction mimeTypeFromFilename(filename: string): string {\n const lower = filename.toLowerCase();\n if (lower.endsWith(\".wav\")) return \"audio/wav\";\n if (lower.endsWith(\".aac\")) return \"audio/aac\";\n if (lower.endsWith(\".ogg\")) return \"audio/ogg\";\n if (lower.endsWith(\".flac\")) return \"audio/flac\";\n if (lower.endsWith(\".m4a\")) return \"audio/m4a\";\n if (lower.endsWith(\".opus\")) return \"audio/opus\";\n return \"audio/mpeg\";\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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","names":["isPlainObject","content","isPlainObject","choice","calls","candidate","Buffer","isPlainObject","Buffer","Buffer","isPlainObject","Buffer","isObject"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvia/gemini",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Gemini provider adapter for Anvia.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"maintainer": "Indra Zulfi",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"tsup": "^8.5.0",
|
|
34
34
|
"typescript": "^5.9.3",
|
|
35
35
|
"vitest": "^4.0.8",
|
|
36
|
-
"@anvia/core": "1.0.0
|
|
36
|
+
"@anvia/core": "1.0.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@anvia/core": "1.0.0
|
|
39
|
+
"@anvia/core": "1.0.0"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
42
|
"prebuild": "test -f ../core/dist/index.d.ts || pnpm --filter @anvia/core build",
|