@standardagents/google 0.14.1 → 0.15.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 +6 -0
- package/dist/index.js +133 -23
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -123,6 +123,11 @@ const result = await provider.generate({
|
|
|
123
123
|
|
|
124
124
|
For multimodal Gemini requests, pass Standard Agents image parts or image attachments and the provider will translate them to Google inline parts. For Imagen requests, the provider will route through the image generation path automatically when the target model is an Imagen model.
|
|
125
125
|
|
|
126
|
+
For tool results with image attachments, the provider keeps the internal Standard Agents message shape unchanged and applies a Google-only request transform at send time:
|
|
127
|
+
|
|
128
|
+
- Gemini 3 series models keep image data nested inside `functionResponse.parts`
|
|
129
|
+
- Older Google chat models receive a text-only `functionResponse`, with image attachments lifted into sibling inline image parts so the request remains accepted by those models
|
|
130
|
+
|
|
126
131
|
## Debugging
|
|
127
132
|
|
|
128
133
|
Use `inspectRequest()` to view the transformed Google-native request body:
|
|
@@ -140,3 +145,4 @@ console.log(inspected?.body);
|
|
|
140
145
|
|
|
141
146
|
- Model IDs are normalized so variants like `google/...`, `models/...`, and `publishers/google/models/...` resolve to the same pricing and capability entries where possible.
|
|
142
147
|
- Cost is computed from Google usage metadata and pricing tables when available; Google does not currently return a direct monetary cost field for Gemini requests.
|
|
148
|
+
- Gemini thought signatures attached to tool-call parts are preserved through Standard Agents history so multi-step Google tool calling can continue across turns.
|
package/dist/index.js
CHANGED
|
@@ -451,6 +451,13 @@ var STATIC_MODELS = [
|
|
|
451
451
|
function normalizeModelId(modelId) {
|
|
452
452
|
return modelId.trim().replace(/^google\//, "").replace(/^models\//, "").replace(/^publishers\/google\/models\//, "");
|
|
453
453
|
}
|
|
454
|
+
function supportsGoogleMultimodalFunctionResponses(modelId) {
|
|
455
|
+
return normalizeModelId(modelId).startsWith("gemini-3");
|
|
456
|
+
}
|
|
457
|
+
function supportsGoogleVisionInput(modelId) {
|
|
458
|
+
const normalizedId = normalizeModelId(modelId);
|
|
459
|
+
return normalizedId.startsWith("gemini-") || normalizedId.startsWith("gemma-3") || normalizedId.startsWith("gemma-4");
|
|
460
|
+
}
|
|
454
461
|
function isImagenModel(modelId) {
|
|
455
462
|
return normalizeModelId(modelId).startsWith("imagen-");
|
|
456
463
|
}
|
|
@@ -603,23 +610,30 @@ function buildAssistantParts(message) {
|
|
|
603
610
|
if (message.content) {
|
|
604
611
|
parts.push({ text: message.content });
|
|
605
612
|
}
|
|
606
|
-
|
|
607
|
-
|
|
613
|
+
const reasoningParts = buildGoogleReasoningParts(message.reasoning, message.reasoningDetails);
|
|
614
|
+
if (reasoningParts.length) {
|
|
615
|
+
parts.push(...reasoningParts);
|
|
608
616
|
}
|
|
609
617
|
if (message.toolCalls?.length) {
|
|
610
618
|
for (const toolCall of message.toolCalls) {
|
|
619
|
+
const thoughtSignature = getGoogleThoughtSignature(
|
|
620
|
+
toolCall.extraContent,
|
|
621
|
+
message.reasoningDetails,
|
|
622
|
+
toolCall.id
|
|
623
|
+
);
|
|
611
624
|
parts.push({
|
|
612
625
|
functionCall: {
|
|
613
626
|
id: toolCall.id,
|
|
614
627
|
name: toolCall.name,
|
|
615
628
|
args: toolCall.arguments
|
|
616
|
-
}
|
|
629
|
+
},
|
|
630
|
+
...thoughtSignature ? { thoughtSignature } : {}
|
|
617
631
|
});
|
|
618
632
|
}
|
|
619
633
|
}
|
|
620
634
|
return parts;
|
|
621
635
|
}
|
|
622
|
-
function buildToolParts(message) {
|
|
636
|
+
function buildToolParts(message, modelId) {
|
|
623
637
|
const response = {};
|
|
624
638
|
if (typeof message.content === "string") {
|
|
625
639
|
response.output = message.content;
|
|
@@ -630,26 +644,33 @@ function buildToolParts(message) {
|
|
|
630
644
|
} else {
|
|
631
645
|
response.output = message.content;
|
|
632
646
|
}
|
|
633
|
-
const imageParts = message.attachments?.filter((attachment) => attachment.type === "image" && attachment.data).map((attachment
|
|
647
|
+
const imageParts = message.attachments?.filter((attachment) => attachment.type === "image" && attachment.data).map((attachment) => {
|
|
634
648
|
const normalized = normalizeInlineBytes(attachment.data, attachment.mediaType);
|
|
635
|
-
return
|
|
636
|
-
inlineData: {
|
|
637
|
-
mimeType: normalized.mediaType,
|
|
638
|
-
data: normalized.data
|
|
639
|
-
},
|
|
640
|
-
partMetadata: { attachmentIndex: index }
|
|
641
|
-
};
|
|
649
|
+
return createPartFromBase64(normalized.data, normalized.mediaType || "image/png");
|
|
642
650
|
}) || [];
|
|
643
|
-
|
|
651
|
+
if (supportsGoogleMultimodalFunctionResponses(modelId)) {
|
|
652
|
+
return [
|
|
653
|
+
createPartFromFunctionResponse(
|
|
654
|
+
message.toolCallId,
|
|
655
|
+
message.toolName,
|
|
656
|
+
response,
|
|
657
|
+
imageParts.length ? imageParts : void 0
|
|
658
|
+
)
|
|
659
|
+
];
|
|
660
|
+
}
|
|
661
|
+
const parts = [
|
|
644
662
|
createPartFromFunctionResponse(
|
|
645
663
|
message.toolCallId,
|
|
646
664
|
message.toolName,
|
|
647
|
-
response
|
|
648
|
-
imageParts.length ? imageParts.map((part) => ({ inlineData: part.inlineData })) : void 0
|
|
665
|
+
response
|
|
649
666
|
)
|
|
650
667
|
];
|
|
668
|
+
if (supportsGoogleVisionInput(modelId) && imageParts.length) {
|
|
669
|
+
parts.push(...imageParts);
|
|
670
|
+
}
|
|
671
|
+
return parts;
|
|
651
672
|
}
|
|
652
|
-
function buildContents(messages) {
|
|
673
|
+
function buildContents(messages, modelId) {
|
|
653
674
|
const contents = [];
|
|
654
675
|
const systemMessages = messages.filter((message) => message.role === "system").map((message) => message.content);
|
|
655
676
|
const systemInstruction = systemMessages.length ? { role: "user", parts: [{ text: systemMessages.join("\n\n") }] } : void 0;
|
|
@@ -663,7 +684,7 @@ function buildContents(messages) {
|
|
|
663
684
|
contents.push({ role: "model", parts: buildAssistantParts(message) });
|
|
664
685
|
continue;
|
|
665
686
|
}
|
|
666
|
-
contents.push({ role: "user", parts: buildToolParts(message) });
|
|
687
|
+
contents.push({ role: "user", parts: buildToolParts(message, modelId) });
|
|
667
688
|
}
|
|
668
689
|
return { systemInstruction, contents };
|
|
669
690
|
}
|
|
@@ -672,6 +693,28 @@ function extractReasoningFromParts(parts) {
|
|
|
672
693
|
const text = parts.filter((part) => part.thought && typeof part.text === "string").map((part) => part.text).join("");
|
|
673
694
|
return text || null;
|
|
674
695
|
}
|
|
696
|
+
function extractGoogleReasoningDetails(parts) {
|
|
697
|
+
if (!parts?.length) return void 0;
|
|
698
|
+
const reasoningDetails = [];
|
|
699
|
+
for (const part of parts) {
|
|
700
|
+
if (!part.thought) continue;
|
|
701
|
+
if (typeof part.text === "string" && part.text.length > 0) {
|
|
702
|
+
reasoningDetails.push({
|
|
703
|
+
type: "text",
|
|
704
|
+
text: part.text,
|
|
705
|
+
format: "google-gemini-v1"
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
if (typeof part.thoughtSignature === "string" && part.thoughtSignature.length > 0) {
|
|
709
|
+
reasoningDetails.push({
|
|
710
|
+
type: "encrypted",
|
|
711
|
+
data: part.thoughtSignature,
|
|
712
|
+
format: "google-gemini-thought-signature-v1"
|
|
713
|
+
});
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
return reasoningDetails.length ? reasoningDetails : void 0;
|
|
717
|
+
}
|
|
675
718
|
function extractImagesFromParts(parts) {
|
|
676
719
|
if (!parts?.length) return void 0;
|
|
677
720
|
const images = parts.filter((part) => part.inlineData?.mimeType?.startsWith("image/")).map((part, index) => ({
|
|
@@ -686,10 +729,61 @@ function extractToolCalls(parts) {
|
|
|
686
729
|
const toolCalls = parts.filter((part) => part.functionCall?.name).map((part) => ({
|
|
687
730
|
id: part.functionCall?.id || crypto.randomUUID(),
|
|
688
731
|
name: part.functionCall?.name || "tool",
|
|
689
|
-
arguments: part.functionCall?.args || {}
|
|
732
|
+
arguments: part.functionCall?.args || {},
|
|
733
|
+
extraContent: getGoogleToolCallExtraContent(part)
|
|
690
734
|
}));
|
|
691
735
|
return toolCalls.length ? toolCalls : void 0;
|
|
692
736
|
}
|
|
737
|
+
function getGoogleThoughtSignature(extraContent, reasoningDetails, toolCallId) {
|
|
738
|
+
if (extraContent && typeof extraContent === "object") {
|
|
739
|
+
const google2 = extraContent.google;
|
|
740
|
+
if (google2 && typeof google2 === "object") {
|
|
741
|
+
const thoughtSignature = google2.thought_signature;
|
|
742
|
+
if (typeof thoughtSignature === "string" && thoughtSignature.length > 0) {
|
|
743
|
+
return thoughtSignature;
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
if (!toolCallId || !reasoningDetails?.length) return void 0;
|
|
748
|
+
const detail = reasoningDetails.find((candidate) => candidate?.type === "encrypted" && candidate?.id === toolCallId && typeof candidate?.data === "string" && candidate.data.length > 0 && (candidate.format === "google-gemini-v1" || candidate.format === "google-gemini-thought-signature-v1" || !candidate.format));
|
|
749
|
+
return detail?.data;
|
|
750
|
+
}
|
|
751
|
+
function getGoogleToolCallExtraContent(part) {
|
|
752
|
+
const thoughtSignature = typeof part.thoughtSignature === "string" && part.thoughtSignature.length > 0 ? part.thoughtSignature : void 0;
|
|
753
|
+
if (!thoughtSignature) return void 0;
|
|
754
|
+
return {
|
|
755
|
+
google: {
|
|
756
|
+
thought_signature: thoughtSignature
|
|
757
|
+
}
|
|
758
|
+
};
|
|
759
|
+
}
|
|
760
|
+
function buildGoogleReasoningParts(reasoning, reasoningDetails) {
|
|
761
|
+
const googleReasoningDetails = reasoningDetails?.filter(
|
|
762
|
+
(detail) => detail?.format === "google-gemini-v1" || detail?.format === "google-gemini-thought-signature-v1"
|
|
763
|
+
) || [];
|
|
764
|
+
if (googleReasoningDetails.length === 0) {
|
|
765
|
+
return reasoning ? [{ text: reasoning, thought: true }] : [];
|
|
766
|
+
}
|
|
767
|
+
const parts = [];
|
|
768
|
+
for (const detail of googleReasoningDetails) {
|
|
769
|
+
if (detail.format === "google-gemini-v1" && typeof detail.text === "string") {
|
|
770
|
+
parts.push({ text: detail.text, thought: true });
|
|
771
|
+
continue;
|
|
772
|
+
}
|
|
773
|
+
if (detail.format === "google-gemini-thought-signature-v1" && typeof detail.data === "string") {
|
|
774
|
+
const lastThoughtPart = parts.length > 0 ? parts[parts.length - 1] : void 0;
|
|
775
|
+
if (lastThoughtPart?.thought && !lastThoughtPart.thoughtSignature) {
|
|
776
|
+
lastThoughtPart.thoughtSignature = detail.data;
|
|
777
|
+
} else {
|
|
778
|
+
parts.push({ thought: true, thoughtSignature: detail.data });
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
if (parts.length === 0 && reasoning) {
|
|
783
|
+
parts.push({ text: reasoning, thought: true });
|
|
784
|
+
}
|
|
785
|
+
return parts;
|
|
786
|
+
}
|
|
693
787
|
function transformUsage(modelId, usage, imageCount = 0) {
|
|
694
788
|
const mapped = {
|
|
695
789
|
promptTokens: usage?.promptTokenCount || 0,
|
|
@@ -848,7 +942,7 @@ var GoogleProvider = class _GoogleProvider {
|
|
|
848
942
|
}
|
|
849
943
|
buildGenerateContentParams(request) {
|
|
850
944
|
const providerOptions = request.providerOptions || {};
|
|
851
|
-
const { systemInstruction, contents } = buildContents(request.messages);
|
|
945
|
+
const { systemInstruction, contents } = buildContents(request.messages, request.model);
|
|
852
946
|
const config = {
|
|
853
947
|
...this.getHttpOptions() ? { httpOptions: this.getHttpOptions() } : {},
|
|
854
948
|
...systemInstruction ? { systemInstruction } : {},
|
|
@@ -961,7 +1055,7 @@ var GoogleProvider = class _GoogleProvider {
|
|
|
961
1055
|
return {
|
|
962
1056
|
content: response.text || null,
|
|
963
1057
|
reasoning: extractReasoningFromParts(parts),
|
|
964
|
-
reasoningDetails:
|
|
1058
|
+
reasoningDetails: extractGoogleReasoningDetails(parts),
|
|
965
1059
|
toolCalls: extractToolCalls(parts),
|
|
966
1060
|
images,
|
|
967
1061
|
finishReason: mapFinishReason(candidate?.finishReason),
|
|
@@ -1029,6 +1123,7 @@ var GoogleProvider = class _GoogleProvider {
|
|
|
1029
1123
|
async *[Symbol.asyncIterator]() {
|
|
1030
1124
|
let sawContent = false;
|
|
1031
1125
|
let sawReasoning = false;
|
|
1126
|
+
const reasoningDetails = [];
|
|
1032
1127
|
let finishReason = "stop";
|
|
1033
1128
|
let finalUsage = {
|
|
1034
1129
|
promptTokens: 0,
|
|
@@ -1041,6 +1136,10 @@ var GoogleProvider = class _GoogleProvider {
|
|
|
1041
1136
|
for await (const chunk of stream) {
|
|
1042
1137
|
const candidate = chunk.candidates?.[0];
|
|
1043
1138
|
const parts = candidate?.content?.parts || [];
|
|
1139
|
+
const chunkReasoningDetails = extractGoogleReasoningDetails(parts);
|
|
1140
|
+
if (chunkReasoningDetails?.length) {
|
|
1141
|
+
reasoningDetails.push(...chunkReasoningDetails);
|
|
1142
|
+
}
|
|
1044
1143
|
for (const part of parts) {
|
|
1045
1144
|
if (part.text && !part.thought) {
|
|
1046
1145
|
sawContent = true;
|
|
@@ -1050,8 +1149,14 @@ var GoogleProvider = class _GoogleProvider {
|
|
|
1050
1149
|
yield { type: "reasoning-delta", delta: part.text };
|
|
1051
1150
|
} else if (part.functionCall?.name) {
|
|
1052
1151
|
const id = part.functionCall.id || crypto.randomUUID();
|
|
1053
|
-
|
|
1054
|
-
yield { type: "tool-call-
|
|
1152
|
+
const extraContent = getGoogleToolCallExtraContent(part);
|
|
1153
|
+
yield { type: "tool-call-start", id, name: part.functionCall.name, extraContent };
|
|
1154
|
+
yield {
|
|
1155
|
+
type: "tool-call-done",
|
|
1156
|
+
id,
|
|
1157
|
+
arguments: part.functionCall.args || {},
|
|
1158
|
+
extraContent
|
|
1159
|
+
};
|
|
1055
1160
|
} else if (part.inlineData?.mimeType?.startsWith("image/")) {
|
|
1056
1161
|
const image = {
|
|
1057
1162
|
id: `image_${imageIndex}`,
|
|
@@ -1071,7 +1176,12 @@ var GoogleProvider = class _GoogleProvider {
|
|
|
1071
1176
|
}
|
|
1072
1177
|
if (sawContent) yield { type: "content-done" };
|
|
1073
1178
|
if (sawReasoning) yield { type: "reasoning-done" };
|
|
1074
|
-
yield {
|
|
1179
|
+
yield {
|
|
1180
|
+
type: "finish",
|
|
1181
|
+
finishReason,
|
|
1182
|
+
usage: finalUsage,
|
|
1183
|
+
reasoningDetails: reasoningDetails.length ? reasoningDetails : void 0
|
|
1184
|
+
};
|
|
1075
1185
|
} catch (error) {
|
|
1076
1186
|
yield { type: "error", error: self.toProviderError(error).message };
|
|
1077
1187
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/GoogleProvider.ts","../src/icons.ts","../src/pricing.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import {\n GoogleGenAI,\n FunctionCallingConfigMode,\n createPartFromBase64,\n createPartFromFunctionResponse,\n RawReferenceImage,\n} from '@google/genai/web';\nimport type { Model as GoogleModel, Part } from '@google/genai/web';\nimport type {\n InspectedRequest,\n LLMProviderInterface as Provider,\n ModelCapabilities,\n ProviderFactoryConfig,\n ProviderFinishReason,\n ProviderGeneratedImage,\n ProviderMessage,\n ProviderModelInfo,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderTool,\n ProviderToolCallPart,\n ProviderUsage,\n} from '@standardagents/spec';\nimport { ProviderError } from '@standardagents/spec';\nimport { getGoogleIconDataUri } from './icons';\nimport { calculateGoogleUsageCost } from './pricing';\n\ninterface GoogleStaticModelEntry {\n id: string;\n name: string;\n description: string;\n capabilities: ModelCapabilities;\n}\n\nconst STATIC_MODELS: GoogleStaticModelEntry[] = [\n {\n id: 'gemma-4-31b-it',\n name: 'Gemma 4 31B IT',\n description: 'Hosted Gemma 4 instruction-tuned model with image input and optional thinking.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 262144,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'gemini-2.5-pro',\n name: 'Gemini 2.5 Pro',\n description: 'State-of-the-art Gemini model for coding and reasoning.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n reasoningLevels: { 0: null, 50: 'medium', 100: 'high' },\n },\n },\n {\n id: 'gemini-2.5-flash',\n name: 'Gemini 2.5 Flash',\n description: 'Fast multimodal Gemini model for general-purpose tasks.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-2.5-flash-lite',\n name: 'Gemini 2.5 Flash-Lite',\n description: 'Low-cost Gemini model for high-volume workloads.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-2.5-flash-image',\n name: 'Gemini 2.5 Flash Image',\n description: 'Gemini image generation model with native image output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-3-pro-image-preview',\n name: 'Gemini 3 Pro Image Preview',\n description: 'High-end Gemini image-preview model with image generation output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-3.1-flash-image-preview',\n name: 'Gemini 3.1 Flash Image Preview',\n description: 'Fast Gemini image-preview model with image output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'imagen-4.0-generate-001',\n name: 'Imagen 4 Generate',\n description: 'Google Imagen model for image generation.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n {\n id: 'imagen-3.0-capability-001',\n name: 'Imagen 3 Capability',\n description: 'Google Imagen model for image editing.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n];\n\nfunction normalizeModelId(modelId: string): string {\n return modelId\n .trim()\n .replace(/^google\\//, '')\n .replace(/^models\\//, '')\n .replace(/^publishers\\/google\\/models\\//, '');\n}\n\nfunction isImagenModel(modelId: string): boolean {\n return normalizeModelId(modelId).startsWith('imagen-');\n}\n\nfunction supportsGoogleVision(model: GoogleModel, normalizedId: string): boolean {\n const description = (model.description || '').toLowerCase();\n\n if (isImagenModel(normalizedId)) {\n return true;\n }\n\n if (normalizedId.startsWith('gemini-')) {\n return true;\n }\n\n if (normalizedId.startsWith('gemma-3') || normalizedId.startsWith('gemma-4')) {\n return true;\n }\n\n return ['multimodal', 'image', 'vision', 'video', 'audio'].some((term) => description.includes(term));\n}\n\nfunction supportsGoogleToolCalls(normalizedId: string): boolean {\n return normalizedId.startsWith('gemini-') || normalizedId.startsWith('functiongemma');\n}\n\nfunction inferGoogleReasoningLevels(model: GoogleModel, normalizedId: string): Record<number, string | null> | undefined {\n if (!model.thinking) return undefined;\n\n if (normalizedId.startsWith('gemma-')) {\n return { 0: null, 100: 'high' };\n }\n\n return { 0: null, 50: 'medium', 100: 'high' };\n}\n\nfunction mapDynamicCapabilities(model: GoogleModel): ModelCapabilities {\n const normalizedId = normalizeModelId(model.name || model.displayName || '');\n const supportedActions = new Set(model.supportedActions || []);\n const supportsContentGeneration = supportedActions.has('generateContent') || normalizedId.startsWith('gemini-') || normalizedId.startsWith('gemma-');\n const supportsTools = supportsGoogleToolCalls(normalizedId);\n\n return {\n supportsImages: supportsGoogleVision(model, normalizedId),\n supportsToolCalls: supportsTools,\n supportsStreaming: supportsContentGeneration && !isImagenModel(normalizedId),\n supportsJsonMode: supportsTools,\n maxContextTokens: model.inputTokenLimit,\n maxOutputTokens: model.outputTokenLimit,\n reasoningLevels: inferGoogleReasoningLevels(model, normalizedId),\n };\n}\n\nfunction toProviderModelInfo(model: GoogleModel): ProviderModelInfo {\n const id = normalizeModelId(model.name || model.displayName || '');\n return {\n id,\n name: model.displayName || id,\n description: model.description,\n contextLength: model.inputTokenLimit,\n iconId: getGoogleIconDataUri(),\n slug: id,\n };\n}\n\nfunction mapFinishReason(value: string | undefined): ProviderFinishReason {\n switch (value) {\n case 'MAX_TOKENS':\n return 'length';\n case 'SAFETY':\n case 'IMAGE_SAFETY':\n case 'PROHIBITED_CONTENT':\n case 'IMAGE_PROHIBITED_CONTENT':\n return 'content_filter';\n case 'MALFORMED_FUNCTION_CALL':\n case 'UNEXPECTED_TOOL_CALL':\n return 'error';\n case 'STOP':\n default:\n return 'stop';\n }\n}\n\nfunction toolChoiceToGoogle(choice: ProviderRequest['toolChoice']): { mode: FunctionCallingConfigMode; allowedFunctionNames?: string[] } | undefined {\n if (choice === 'auto') {\n return { mode: FunctionCallingConfigMode.AUTO };\n }\n if (choice === 'none') {\n return { mode: FunctionCallingConfigMode.NONE };\n }\n if (choice === 'required') {\n return { mode: FunctionCallingConfigMode.ANY };\n }\n if (choice && typeof choice === 'object' && 'name' in choice) {\n return {\n mode: FunctionCallingConfigMode.ANY,\n allowedFunctionNames: [choice.name],\n };\n }\n return undefined;\n}\n\nfunction transformTools(tools: ProviderTool[] | undefined): any[] | undefined {\n if (!tools?.length) return undefined;\n\n return [{\n functionDeclarations: tools.map((tool) => ({\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters || {\n type: 'object',\n properties: {},\n required: [],\n },\n })),\n }];\n}\n\nfunction normalizeInlineBytes(\n data: string | undefined,\n mediaType: string | undefined,\n): { data: string; mediaType?: string } {\n const value = data || '';\n const match = value.match(/^data:([^;]+);base64,(.*)$/);\n if (!match) {\n return { data: value, mediaType };\n }\n\n return {\n data: match[2],\n mediaType: match[1] || mediaType,\n };\n}\n\nfunction buildUserParts(message: Extract<ProviderMessage, { role: 'user' }>): Part[] {\n if (typeof message.content === 'string') {\n return [{ text: message.content }];\n }\n\n return message.content.map((part: any) => {\n if (part.type === 'text') {\n return { text: part.text };\n }\n\n if (part.type === 'image') {\n const normalized = normalizeInlineBytes(part.data, part.mediaType || 'image/png');\n return createPartFromBase64(normalized.data, normalized.mediaType || 'image/png');\n }\n\n if (part.type === 'image_url') {\n const url = part.image_url?.url || '';\n if (url.startsWith('data:')) {\n const match = url.match(/^data:([^;]+);base64,(.*)$/);\n if (match) {\n return createPartFromBase64(match[2], match[1]);\n }\n }\n return {\n fileData: {\n mimeType: 'image/*',\n fileUri: url,\n },\n };\n }\n\n return {\n inlineData: {\n mimeType: part.mediaType,\n data: part.data,\n },\n };\n });\n}\n\nfunction buildAssistantParts(message: Extract<ProviderMessage, { role: 'assistant' }>): Part[] {\n const parts: Part[] = [];\n\n if (message.content) {\n parts.push({ text: message.content });\n }\n\n if (message.reasoning) {\n parts.push({ text: message.reasoning, thought: true });\n }\n\n if (message.toolCalls?.length) {\n for (const toolCall of message.toolCalls) {\n parts.push({\n functionCall: {\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.arguments,\n },\n });\n }\n }\n\n return parts;\n}\n\nfunction buildToolParts(message: Extract<ProviderMessage, { role: 'tool' }>): Part[] {\n const response: Record<string, unknown> = {};\n\n if (typeof message.content === 'string') {\n response.output = message.content;\n } else if ('type' in message.content) {\n if (message.content.type === 'text') response.output = message.content.text;\n else if (message.content.type === 'error') response.error = message.content.error;\n else response.output = message.content;\n } else {\n response.output = message.content;\n }\n\n const imageParts = message.attachments\n ?.filter((attachment: any) => attachment.type === 'image' && attachment.data)\n .map((attachment: any, index: number) => {\n const normalized = normalizeInlineBytes(attachment.data, attachment.mediaType);\n return {\n inlineData: {\n mimeType: normalized.mediaType,\n data: normalized.data,\n },\n partMetadata: { attachmentIndex: index },\n };\n }) || [];\n\n return [\n createPartFromFunctionResponse(\n message.toolCallId,\n message.toolName,\n response,\n imageParts.length ? imageParts.map((part: any) => ({ inlineData: part.inlineData })) : undefined\n ),\n ];\n}\n\nfunction buildContents(messages: ProviderMessage[]): { systemInstruction?: any; contents: any[] } {\n const contents: any[] = [];\n const systemMessages = messages.filter((message) => message.role === 'system').map((message) => message.content);\n const systemInstruction = systemMessages.length\n ? { role: 'user', parts: [{ text: systemMessages.join('\\n\\n') }] }\n : undefined;\n\n for (const message of messages) {\n if (message.role === 'system') continue;\n if (message.role === 'user') {\n contents.push({ role: 'user', parts: buildUserParts(message) });\n continue;\n }\n if (message.role === 'assistant') {\n contents.push({ role: 'model', parts: buildAssistantParts(message) });\n continue;\n }\n contents.push({ role: 'user', parts: buildToolParts(message) });\n }\n\n return { systemInstruction, contents };\n}\n\nfunction extractReasoningFromParts(parts: Part[] | undefined): string | null {\n if (!parts?.length) return null;\n const text = parts\n .filter((part: any) => part.thought && typeof part.text === 'string')\n .map((part: any) => part.text)\n .join('');\n return text || null;\n}\n\nfunction extractImagesFromParts(parts: Part[] | undefined): ProviderGeneratedImage[] | undefined {\n if (!parts?.length) return undefined;\n const images = parts\n .filter((part: any) => part.inlineData?.mimeType?.startsWith('image/'))\n .map((part: any, index: number) => ({\n id: `image_${index}`,\n data: part.inlineData?.data || '',\n mediaType: part.inlineData?.mimeType || 'image/png',\n }));\n return images.length ? images : undefined;\n}\n\nfunction extractToolCalls(parts: Part[] | undefined): ProviderToolCallPart[] | undefined {\n if (!parts?.length) return undefined;\n const toolCalls = parts\n .filter((part: any) => part.functionCall?.name)\n .map((part: any) => ({\n id: part.functionCall?.id || crypto.randomUUID(),\n name: part.functionCall?.name || 'tool',\n arguments: (part.functionCall?.args || {}) as Record<string, unknown>,\n }));\n\n return toolCalls.length ? toolCalls : undefined;\n}\n\nfunction transformUsage(modelId: string, usage: any, imageCount = 0): ProviderUsage {\n const mapped: ProviderUsage = {\n promptTokens: usage?.promptTokenCount || 0,\n completionTokens: usage?.candidatesTokenCount || 0,\n totalTokens: usage?.totalTokenCount || 0,\n reasoningTokens: usage?.thoughtsTokenCount,\n cachedTokens: usage?.cachedContentTokenCount,\n provider: 'google',\n };\n\n mapped.cost = calculateGoogleUsageCost(\n modelId,\n {\n ...mapped,\n promptTokenDetails: usage?.promptTokensDetails,\n completionTokenDetails: usage?.candidatesTokensDetails || usage?.responseTokensDetails,\n cachedTokenDetails: usage?.cacheTokensDetails,\n },\n imageCount\n );\n return mapped;\n}\n\nexport class GoogleProvider implements Provider {\n readonly name = 'google';\n readonly specificationVersion = '1' as const;\n\n private readonly config: ProviderFactoryConfig;\n private client: GoogleGenAI | null = null;\n\n private static readonly cacheTtl = 5 * 60 * 1000;\n private static modelsCache: ProviderModelInfo[] | null = null;\n private static modelsCacheTime = 0;\n private static modelMetadataCache = new Map<string, GoogleModel>();\n\n constructor(config: ProviderFactoryConfig) {\n this.config = config;\n }\n\n private getClient(): GoogleGenAI {\n if (!this.client) {\n this.client = new GoogleGenAI({\n apiKey: this.config.apiKey,\n });\n }\n return this.client;\n }\n\n supportsModel(modelId: string): boolean {\n return modelId.startsWith('gemini-')\n || modelId.startsWith('gemma-')\n || modelId.startsWith('imagen-')\n || modelId.startsWith('models/');\n }\n\n getIcon(_modelId?: string): string {\n return getGoogleIconDataUri();\n }\n\n private getHttpOptions(): Record<string, unknown> | undefined {\n if (!this.config.baseUrl && !this.config.timeout) return undefined;\n\n return {\n ...(this.config.baseUrl ? { baseUrl: this.config.baseUrl } : {}),\n ...(this.config.timeout ? { timeout: this.config.timeout } : {}),\n };\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n const now = Date.now();\n if (GoogleProvider.modelsCache && now - GoogleProvider.modelsCacheTime < GoogleProvider.cacheTtl) {\n return this.filterModels(GoogleProvider.modelsCache, filter);\n }\n\n try {\n const models: ProviderModelInfo[] = [];\n const client = this.getClient();\n const pager = await client.models.list({\n config: {\n httpOptions: this.getHttpOptions() as any,\n },\n } as any);\n\n for await (const model of pager as AsyncIterable<GoogleModel>) {\n const id = normalizeModelId(model.name || '');\n if (!id) continue;\n const supportsGeneration = model.supportedActions?.some((action: string) =>\n ['generateContent', 'generateImages', 'editImage', 'predict'].includes(action)\n );\n if (!supportsGeneration) continue;\n GoogleProvider.modelMetadataCache.set(id, model);\n models.push(toProviderModelInfo(model));\n }\n\n for (const staticModel of STATIC_MODELS) {\n if (!models.some((model) => model.id === staticModel.id)) {\n models.push({\n id: staticModel.id,\n name: staticModel.name,\n description: staticModel.description,\n iconId: this.getIcon(staticModel.id),\n slug: staticModel.id,\n });\n }\n }\n\n GoogleProvider.modelsCache = models.sort((a, b) => a.name.localeCompare(b.name));\n GoogleProvider.modelsCacheTime = now;\n return this.filterModels(GoogleProvider.modelsCache, filter);\n } catch (error) {\n console.error('Failed to list Google models:', error);\n return this.filterModels(\n STATIC_MODELS.map((model) => ({\n id: model.id,\n name: model.name,\n description: model.description,\n iconId: this.getIcon(model.id),\n slug: model.id,\n })),\n filter\n );\n }\n }\n\n private filterModels(models: ProviderModelInfo[], filter?: string): ProviderModelInfo[] {\n if (!filter) return models;\n const query = filter.toLowerCase();\n return models.filter((model) =>\n model.id.toLowerCase().includes(query) ||\n model.name.toLowerCase().includes(query) ||\n (model.description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n private async getModelMetadata(modelId: string): Promise<GoogleModel | null> {\n const normalized = normalizeModelId(modelId);\n const cached = GoogleProvider.modelMetadataCache.get(normalized);\n if (cached) {\n return cached;\n }\n\n try {\n const model = await this.getClient().models.get({\n model: normalized,\n config: {\n httpOptions: this.getHttpOptions() as any,\n },\n } as any);\n GoogleProvider.modelMetadataCache.set(normalized, model);\n return model;\n } catch {\n return null;\n }\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n const normalized = normalizeModelId(modelId);\n const staticModel = STATIC_MODELS.find((model) => model.id === normalized);\n if (staticModel) {\n return { ...staticModel.capabilities };\n }\n\n try {\n const metadata = await this.getModelMetadata(normalized);\n if (metadata) {\n return mapDynamicCapabilities(metadata);\n }\n\n const models = await this.getModels();\n const found = models.find((model) => model.id === normalized);\n if (!found) return null;\n\n return {\n supportsImages: normalized.startsWith('gemini-') || normalized.startsWith('gemma-') || normalized.includes('image'),\n supportsToolCalls: supportsGoogleToolCalls(normalized),\n supportsStreaming: !isImagenModel(normalized),\n supportsJsonMode: supportsGoogleToolCalls(normalized),\n maxContextTokens: found.contextLength,\n };\n } catch {\n return null;\n }\n }\n\n private buildGenerateContentParams(request: ProviderRequest): Record<string, unknown> {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const { systemInstruction, contents } = buildContents(request.messages);\n\n const config: Record<string, unknown> = {\n ...(this.getHttpOptions() ? { httpOptions: this.getHttpOptions() } : {}),\n ...(systemInstruction ? { systemInstruction } : {}),\n ...(typeof request.temperature === 'number' ? { temperature: request.temperature } : {}),\n ...(typeof request.topP === 'number' ? { topP: request.topP } : {}),\n ...(typeof request.topK === 'number' ? { topK: request.topK } : {}),\n ...(typeof request.maxOutputTokens === 'number' ? { maxOutputTokens: request.maxOutputTokens } : {}),\n ...(request.stopSequences?.length ? { stopSequences: request.stopSequences } : {}),\n ...(request.responseFormat?.type === 'json'\n ? {\n responseMimeType: 'application/json',\n ...(request.responseFormat.schema ? { responseJsonSchema: request.responseFormat.schema } : {}),\n }\n : {}),\n ...(request.tools?.length ? { tools: transformTools(request.tools) } : {}),\n ...(request.tools?.length && toolChoiceToGoogle(request.toolChoice)\n ? { toolConfig: { functionCallingConfig: toolChoiceToGoogle(request.toolChoice) } }\n : {}),\n ...(typeof providerOptions.candidateCount === 'number' ? { candidateCount: providerOptions.candidateCount } : {}),\n ...(Array.isArray(providerOptions.responseModalities) ? { responseModalities: providerOptions.responseModalities } : {}),\n ...(typeof providerOptions.mediaResolution === 'string' ? { mediaResolution: providerOptions.mediaResolution } : {}),\n ...(typeof providerOptions.cachedContent === 'string' ? { cachedContent: providerOptions.cachedContent } : {}),\n ...(typeof providerOptions.enableEnhancedCivicAnswers === 'boolean'\n ? { enableEnhancedCivicAnswers: providerOptions.enableEnhancedCivicAnswers }\n : {}),\n ...(providerOptions.labels ? { labels: providerOptions.labels } : {}),\n ...(providerOptions.safetySettings ? { safetySettings: providerOptions.safetySettings } : {}),\n ...(providerOptions.thinkingConfig ? { thinkingConfig: providerOptions.thinkingConfig } : {}),\n ...(providerOptions.imageConfig ? { imageConfig: providerOptions.imageConfig } : {}),\n ...(typeof request.reasoning?.maxTokens === 'number'\n ? { thinkingConfig: { ...(providerOptions.thinkingConfig as Record<string, unknown> || {}), thinkingBudget: request.reasoning.maxTokens } }\n : {}),\n };\n\n return {\n model: normalizeModelId(request.model),\n contents,\n config,\n };\n }\n\n private extractImagenRequest(request: ProviderRequest): {\n prompt: string;\n referenceImages?: RawReferenceImage[];\n body: Record<string, unknown>;\n } {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const latestUser = [...request.messages].reverse().find((message) => message.role === 'user');\n const prompt = latestUser ? (typeof latestUser.content === 'string'\n ? latestUser.content\n : latestUser.content.filter((part: any) => part.type === 'text').map((part: any) => part.text).join('\\n')) : '';\n\n const referenceImages = latestUser && typeof latestUser.content !== 'string'\n ? latestUser.content\n .filter((part: any) => part.type === 'image')\n .map((part: any, index: number) => {\n const normalized = normalizeInlineBytes(part.data, part.mediaType);\n const image = new RawReferenceImage();\n image.referenceId = index + 1;\n image.referenceImage = {\n imageBytes: normalized.data,\n mimeType: normalized.mediaType,\n };\n return image;\n })\n : [];\n\n const body: Record<string, unknown> = {\n model: normalizeModelId(request.model),\n prompt,\n ...(referenceImages.length ? { referenceImages: '[binary images omitted]' } : {}),\n config: {\n ...(this.getHttpOptions() ? { httpOptions: this.getHttpOptions() } : {}),\n ...(typeof providerOptions.numberOfImages === 'number' ? { numberOfImages: providerOptions.numberOfImages } : {}),\n ...(typeof providerOptions.negativePrompt === 'string' ? { negativePrompt: providerOptions.negativePrompt } : {}),\n ...(typeof providerOptions.aspectRatio === 'string' ? { aspectRatio: providerOptions.aspectRatio } : {}),\n ...(typeof providerOptions.guidanceScale === 'number' ? { guidanceScale: providerOptions.guidanceScale } : {}),\n ...(typeof providerOptions.seed === 'number' ? { seed: providerOptions.seed } : {}),\n ...(typeof providerOptions.safetyFilterLevel === 'string' ? { safetyFilterLevel: providerOptions.safetyFilterLevel } : {}),\n ...(typeof providerOptions.personGeneration === 'string' ? { personGeneration: providerOptions.personGeneration } : {}),\n ...(typeof providerOptions.includeSafetyAttributes === 'boolean' ? { includeSafetyAttributes: providerOptions.includeSafetyAttributes } : {}),\n ...(typeof providerOptions.includeRaiReason === 'boolean' ? { includeRaiReason: providerOptions.includeRaiReason } : {}),\n ...(typeof providerOptions.language === 'string' ? { language: providerOptions.language } : {}),\n ...(typeof providerOptions.outputMimeType === 'string' ? { outputMimeType: providerOptions.outputMimeType } : {}),\n ...(typeof providerOptions.outputCompressionQuality === 'number' ? { outputCompressionQuality: providerOptions.outputCompressionQuality } : {}),\n ...(typeof providerOptions.addWatermark === 'boolean' ? { addWatermark: providerOptions.addWatermark } : {}),\n ...(providerOptions.labels ? { labels: providerOptions.labels } : {}),\n ...(typeof providerOptions.imageSize === 'string' ? { imageSize: providerOptions.imageSize } : {}),\n ...(typeof providerOptions.enhancePrompt === 'boolean' ? { enhancePrompt: providerOptions.enhancePrompt } : {}),\n ...(typeof providerOptions.editMode === 'string' ? { editMode: providerOptions.editMode } : {}),\n ...(typeof providerOptions.baseSteps === 'number' ? { baseSteps: providerOptions.baseSteps } : {}),\n },\n };\n\n return {\n prompt,\n referenceImages: referenceImages.length ? referenceImages : undefined,\n body,\n };\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n if (isImagenModel(request.model)) {\n const imagen = this.extractImagenRequest(request);\n return {\n body: imagen.body,\n messagesPath: 'prompt',\n metadata: {\n endpoint: imagen.referenceImages?.length\n ? `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/editImage`\n : `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/generateImages`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n return {\n body: this.buildGenerateContentParams(request),\n messagesPath: 'contents',\n metadata: {\n endpoint: `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/generateContent`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n if (isImagenModel(request.model)) {\n return this.generateImagen(request);\n }\n\n try {\n const client = this.getClient();\n const response = await client.models.generateContent(this.buildGenerateContentParams(request) as any);\n const candidate = response.candidates?.[0];\n const parts = candidate?.content?.parts;\n const images = extractImagesFromParts(parts);\n const usage = transformUsage(normalizeModelId(request.model), response.usageMetadata, images?.length || 0);\n\n return {\n content: response.text || null,\n reasoning: extractReasoningFromParts(parts),\n reasoningDetails: extractReasoningFromParts(parts)\n ? [{ type: 'text', text: extractReasoningFromParts(parts) || undefined, format: 'google-gemini-v1' }]\n : undefined,\n toolCalls: extractToolCalls(parts),\n images,\n finishReason: mapFinishReason(candidate?.finishReason),\n usage,\n metadata: {\n provider: 'google',\n responseId: response.responseId,\n modelVersion: response.modelVersion,\n promptFeedback: response.promptFeedback,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private async generateImagen(request: ProviderRequest): Promise<ProviderResponse> {\n try {\n const client = this.getClient();\n const imagen = this.extractImagenRequest(request);\n const model = normalizeModelId(request.model);\n\n const response = imagen.referenceImages?.length\n ? await client.models.editImage({\n model,\n prompt: imagen.prompt,\n referenceImages: imagen.referenceImages,\n config: imagen.body.config as any,\n })\n : await client.models.generateImages({\n model,\n prompt: imagen.prompt,\n config: imagen.body.config as any,\n });\n\n const images: ProviderGeneratedImage[] = (response.generatedImages || [])\n .filter((image: any) => image.image?.imageBytes)\n .map((image: any, index: number) => ({\n id: `image_${index}`,\n data: image.image?.imageBytes || '',\n mediaType: image.image?.mimeType || 'image/png',\n revisedPrompt: image.enhancedPrompt,\n }));\n\n return {\n content: null,\n images,\n finishReason: 'stop',\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n cost: calculateGoogleUsageCost(model, { promptTokens: 0, completionTokens: 0, cachedTokens: 0 }, images.length),\n provider: 'google',\n },\n metadata: {\n provider: 'google',\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n if (isImagenModel(request.model)) {\n throw new ProviderError('Imagen models do not support streaming in Standard Agents.', 'invalid_request');\n }\n\n const self = this;\n\n try {\n const client = this.getClient();\n const stream = await client.models.generateContentStream(this.buildGenerateContentParams(request) as any);\n\n return {\n async *[Symbol.asyncIterator]() {\n let sawContent = false;\n let sawReasoning = false;\n let finishReason: ProviderFinishReason = 'stop';\n let finalUsage: ProviderUsage = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n provider: 'google',\n };\n let imageIndex = 0;\n\n try {\n for await (const chunk of stream) {\n const candidate = chunk.candidates?.[0];\n const parts = candidate?.content?.parts || [];\n\n for (const part of parts) {\n if (part.text && !part.thought) {\n sawContent = true;\n yield { type: 'content-delta', delta: part.text };\n } else if (part.text && part.thought) {\n sawReasoning = true;\n yield { type: 'reasoning-delta', delta: part.text };\n } else if (part.functionCall?.name) {\n const id = part.functionCall.id || crypto.randomUUID();\n yield { type: 'tool-call-start', id, name: part.functionCall.name };\n yield { type: 'tool-call-done', id, arguments: (part.functionCall.args || {}) as Record<string, unknown> };\n } else if (part.inlineData?.mimeType?.startsWith('image/')) {\n const image: ProviderGeneratedImage = {\n id: `image_${imageIndex}`,\n data: part.inlineData.data || '',\n mediaType: part.inlineData.mimeType || 'image/png',\n };\n yield { type: 'image-done', index: imageIndex, image };\n imageIndex += 1;\n }\n }\n\n if (chunk.usageMetadata) {\n finalUsage = transformUsage(normalizeModelId(request.model), chunk.usageMetadata, imageIndex);\n }\n\n if (candidate?.finishReason) {\n finishReason = mapFinishReason(candidate.finishReason);\n }\n }\n\n if (sawContent) yield { type: 'content-done' };\n if (sawReasoning) yield { type: 'reasoning-done' };\n yield { type: 'finish', finishReason, usage: finalUsage };\n } catch (error) {\n yield { type: 'error', error: self.toProviderError(error).message };\n }\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) return error;\n\n if (error instanceof Error) {\n const candidate = error as Error & { status?: number; statusCode?: number };\n const status = candidate.status || candidate.statusCode;\n if (status === 429) return new ProviderError(error.message, 'rate_limit', status);\n if (status === 401 || status === 403) return new ProviderError(error.message, 'auth_error', status);\n if (status === 400) return new ProviderError(error.message, 'invalid_request', status);\n if (status && status >= 500) return new ProviderError(error.message, 'server_error', status);\n if (error.name === 'AbortError') return new ProviderError(error.message, 'timeout');\n return new ProviderError(error.message, 'unknown', status);\n }\n\n return new ProviderError(String(error), 'unknown');\n }\n}\n","const GOOGLE_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" fill=\"none\"><rect width=\"64\" height=\"64\" rx=\"16\" fill=\"#fff\"/><path d=\"M54 32.73c0-1.58-.14-3.1-.4-4.55H32v8.61h12.33c-.53 2.85-2.14 5.27-4.56 6.9v5.73h7.38C51.47 45.44 54 39.61 54 32.73Z\" fill=\"#4285F4\"/><path d=\"M32 55c6.2 0 11.4-2.05 15.2-5.58l-7.38-5.73c-2.05 1.37-4.67 2.18-7.82 2.18-6 0-11.08-4.05-12.9-9.49h-7.62v5.96A22.98 22.98 0 0 0 32 55Z\" fill=\"#34A853\"/><path d=\"M19.1 36.38A13.8 13.8 0 0 1 18.38 32c0-1.52.26-3 .72-4.38v-5.96h-7.62A22.98 22.98 0 0 0 9 32c0 3.67.88 7.13 2.48 10.34l7.62-5.96Z\" fill=\"#FBBC05\"/><path d=\"M32 18.9c3.37 0 6.4 1.16 8.79 3.45l6.59-6.59C43.39 12.05 38.19 9 32 9A22.98 22.98 0 0 0 11.48 21.66l7.62 5.96C20.92 22.95 26 18.9 32 18.9Z\" fill=\"#EA4335\"/></svg>`;\n\nexport function svgToDataUri(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n}\n\nexport function getGoogleIconDataUri(): string {\n return svgToDataUri(GOOGLE_ICON);\n}\n","import type { ProviderUsage } from '@standardagents/spec';\n\ntype GooglePricingModality = 'text' | 'image' | 'video' | 'audio' | 'document' | 'unspecified';\n\ninterface GoogleModalityTokenCount {\n modality?: string;\n tokenCount?: number;\n}\n\nexport interface GoogleModelPricing {\n inputPerMillion: number;\n longInputPerMillion?: number;\n outputPerMillion?: number;\n longOutputPerMillion?: number;\n cachedInputPerMillion?: number;\n longCachedInputPerMillion?: number;\n outputImagePerImage?: number;\n inputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n outputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n cachedByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n longContextThreshold?: number;\n}\n\nconst MODEL_PRICING: Record<string, GoogleModelPricing> = {\n 'gemini-3-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-3.1-pro-preview': {\n inputPerMillion: 2,\n longInputPerMillion: 4,\n outputPerMillion: 12,\n longOutputPerMillion: 18,\n cachedInputPerMillion: 0.2,\n longCachedInputPerMillion: 0.4,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-pro': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n cachedInputPerMillion: 0.125,\n longCachedInputPerMillion: 0.25,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n cachedInputPerMillion: 0.03,\n },\n 'gemini-2.5-flash-lite': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.01,\n },\n 'gemini-3-flash-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n cachedInputPerMillion: 0.05,\n inputByModalityPerMillion: {\n text: 0.5,\n image: 0.5,\n video: 0.5,\n audio: 1,\n },\n cachedByModalityPerMillion: {\n text: 0.05,\n image: 0.05,\n video: 0.05,\n audio: 0.1,\n },\n },\n 'gemini-3.1-flash-lite-preview': {\n inputPerMillion: 0.25,\n outputPerMillion: 1.5,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.25,\n image: 0.25,\n video: 0.25,\n audio: 0.5,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.05,\n },\n },\n 'deep-research-pro-preview-12-2025': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-2.0-flash': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-001': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-lite': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.0-flash-lite-001': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.5-computer-use-preview-10-2025': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash-preview-tts': {\n inputPerMillion: 0.5,\n outputPerMillion: 10,\n outputByModalityPerMillion: {\n audio: 10,\n },\n },\n 'gemini-2.5-pro-preview-tts': {\n inputPerMillion: 1,\n outputPerMillion: 20,\n outputByModalityPerMillion: {\n audio: 20,\n },\n },\n 'gemini-robotics-er-1.5-preview': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n inputByModalityPerMillion: {\n text: 0.3,\n image: 0.3,\n video: 0.3,\n audio: 1,\n },\n },\n 'gemini-2.5-flash-image': {\n inputPerMillion: 0.3,\n outputImagePerImage: 0.039,\n },\n 'gemini-3.1-flash-image-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n outputImagePerImage: 0.045,\n },\n 'gemini-3-pro-image-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'nano-banana-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'imagen-4.0-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'imagen-4.0-fast-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.02,\n },\n 'imagen-4.0-ultra-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.06,\n },\n 'imagen-3.0-capability-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'gemma-4-31b-it': {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n};\n\nconst MODEL_PRICING_PREFIXES: Array<{ prefix: string; pricing: GoogleModelPricing }> = [\n {\n prefix: 'gemini-3.1-pro-preview',\n pricing: MODEL_PRICING['gemini-3.1-pro-preview'],\n },\n {\n prefix: 'gemini-3-pro-preview',\n pricing: MODEL_PRICING['gemini-3-pro-preview'],\n },\n {\n prefix: 'gemini-3-flash-preview',\n pricing: MODEL_PRICING['gemini-3-flash-preview'],\n },\n {\n prefix: 'gemini-3.1-flash-lite-preview',\n pricing: MODEL_PRICING['gemini-3.1-flash-lite-preview'],\n },\n {\n prefix: 'gemini-2.5-flash-lite-preview-',\n pricing: MODEL_PRICING['gemini-2.5-flash-lite'],\n },\n {\n prefix: 'gemini-flash-latest',\n pricing: MODEL_PRICING['gemini-2.5-flash'],\n },\n {\n prefix: 'gemini-flash-lite-latest',\n pricing: MODEL_PRICING['gemini-2.5-flash-lite'],\n },\n {\n prefix: 'gemini-pro-latest',\n pricing: MODEL_PRICING['gemini-2.5-pro'],\n },\n {\n prefix: 'gemma-4-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n {\n prefix: 'gemma-3-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n {\n prefix: 'gemma-3n-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n];\n\nfunction normalizeGoogleModelId(modelId: string): string {\n return modelId\n .trim()\n .toLowerCase()\n .replace(/^google\\//, '')\n .replace(/^models\\//, '')\n .replace(/^publishers\\/google\\/models\\//, '');\n}\n\nfunction normalizeModality(modality: string | undefined): GooglePricingModality {\n const normalized = (modality || '').trim().toLowerCase();\n\n if (normalized === 'text') return 'text';\n if (normalized === 'image') return 'image';\n if (normalized === 'video') return 'video';\n if (normalized === 'audio') return 'audio';\n if (normalized === 'document') return 'document';\n return 'unspecified';\n}\n\nfunction toModalityCounts(\n details: GoogleModalityTokenCount[] | undefined\n): Partial<Record<GooglePricingModality, number>> {\n const counts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const detail of details || []) {\n const modality = normalizeModality(detail.modality);\n const tokenCount = Math.max(detail.tokenCount ?? 0, 0);\n counts[modality] = (counts[modality] ?? 0) + tokenCount;\n }\n\n return counts;\n}\n\nfunction sumModalityCosts(\n counts: Partial<Record<GooglePricingModality, number>>,\n modalityRates: Partial<Record<GooglePricingModality, number>> | undefined,\n defaultRate: number\n): number {\n let total = 0;\n\n for (const [modality, tokenCount] of Object.entries(counts)) {\n if (!tokenCount) continue;\n const rate = modalityRates?.[modality as GooglePricingModality] ?? defaultRate;\n total += (tokenCount / 1_000_000) * rate;\n }\n\n return total;\n}\n\nexport function getGoogleModelPricing(modelId: string): GoogleModelPricing | undefined {\n const normalizedModelId = normalizeGoogleModelId(modelId);\n const exact = MODEL_PRICING[normalizedModelId];\n if (exact) return exact;\n\n return MODEL_PRICING_PREFIXES.find((entry) => normalizedModelId.startsWith(entry.prefix))?.pricing;\n}\n\nexport function calculateGoogleUsageCost(\n modelId: string,\n usage: Pick<ProviderUsage, 'promptTokens' | 'completionTokens' | 'reasoningTokens' | 'cachedTokens'> & {\n promptTokenDetails?: GoogleModalityTokenCount[];\n completionTokenDetails?: GoogleModalityTokenCount[];\n cachedTokenDetails?: GoogleModalityTokenCount[];\n },\n imageCount = 0\n): number | undefined {\n const pricing = getGoogleModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const useLongContext = pricing.longContextThreshold != null && usage.promptTokens > pricing.longContextThreshold;\n\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext\n ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion ?? 0)\n : (pricing.outputPerMillion ?? 0);\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? 0)\n : (pricing.cachedInputPerMillion ?? 0);\n const billableOutputTokens = usage.completionTokens + (usage.reasoningTokens ?? 0);\n const promptModalityCounts = toModalityCounts(usage.promptTokenDetails);\n const cachedModalityCounts = toModalityCounts(usage.cachedTokenDetails);\n const uncachedPromptModalityCounts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const modality of new Set<GooglePricingModality>([\n ...Object.keys(promptModalityCounts) as GooglePricingModality[],\n ...Object.keys(cachedModalityCounts) as GooglePricingModality[],\n ])) {\n uncachedPromptModalityCounts[modality] = Math.max(\n (promptModalityCounts[modality] ?? 0) - (cachedModalityCounts[modality] ?? 0),\n 0\n );\n }\n\n const completionModalityCounts = toModalityCounts(usage.completionTokenDetails);\n if (usage.reasoningTokens) {\n completionModalityCounts.text = (completionModalityCounts.text ?? 0) + usage.reasoningTokens;\n }\n\n const hasPromptModalityPricing = Object.keys(uncachedPromptModalityCounts).length > 0 && pricing.inputByModalityPerMillion;\n const hasCachedModalityPricing = Object.keys(cachedModalityCounts).length > 0 && pricing.cachedByModalityPerMillion;\n const hasOutputModalityPricing = Object.keys(completionModalityCounts).length > 0 && pricing.outputByModalityPerMillion;\n\n const inputCost = hasPromptModalityPricing\n ? sumModalityCosts(uncachedPromptModalityCounts, pricing.inputByModalityPerMillion, inputRate)\n : (uncachedPromptTokens / 1_000_000) * inputRate;\n const cachedCost = hasCachedModalityPricing\n ? sumModalityCosts(cachedModalityCounts, pricing.cachedByModalityPerMillion, cachedRate)\n : (cachedTokens / 1_000_000) * cachedRate;\n const outputCost = hasOutputModalityPricing\n ? sumModalityCosts(completionModalityCounts, pricing.outputByModalityPerMillion, outputRate)\n : (billableOutputTokens / 1_000_000) * outputRate;\n const imageCost = imageCount * (pricing.outputImagePerImage ?? 0);\n\n return Number((inputCost + cachedCost + outputCost + imageCost).toFixed(12));\n}\n","import { z } from 'zod';\n\nexport const googleProviderOptions = z.object({\n candidateCount: z.number().int().min(1).max(8).optional(),\n responseModalities: z.array(z.enum(['TEXT', 'IMAGE', 'AUDIO'])).optional(),\n mediaResolution: z.string().optional(),\n cachedContent: z.string().optional(),\n enableEnhancedCivicAnswers: z.boolean().optional(),\n labels: z.record(z.string(), z.string()).optional(),\n safetySettings: z.array(z.record(z.string(), z.unknown())).optional(),\n thinkingConfig: z.record(z.string(), z.unknown()).optional(),\n imageConfig: z.record(z.string(), z.unknown()).optional(),\n\n numberOfImages: z.number().int().min(1).max(4).optional(),\n negativePrompt: z.string().optional(),\n aspectRatio: z.string().optional(),\n guidanceScale: z.number().optional(),\n safetyFilterLevel: z.string().optional(),\n personGeneration: z.string().optional(),\n includeSafetyAttributes: z.boolean().optional(),\n includeRaiReason: z.boolean().optional(),\n language: z.string().optional(),\n outputMimeType: z.string().optional(),\n outputCompressionQuality: z.number().int().optional(),\n addWatermark: z.boolean().optional(),\n imageSize: z.string().optional(),\n enhancePrompt: z.boolean().optional(),\n editMode: z.string().optional(),\n baseSteps: z.number().int().optional(),\n}).passthrough();\n\nexport type GoogleProviderOptions = z.infer<typeof googleProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { GoogleProvider } from './GoogleProvider';\nimport { googleProviderOptions } from './providerOptions';\n\n/**\n * Google Gemini / Imagen provider factory for Standard Agents.\n */\nexport const google: ProviderFactoryWithOptions<typeof googleProviderOptions> = Object.assign(\n (config: ProviderFactoryConfig) => new GoogleProvider(config),\n { providerOptions: googleProviderOptions }\n);\n\nexport { googleProviderOptions, type GoogleProviderOptions } from './providerOptions';\nexport { GoogleProvider } from './GoogleProvider';\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/GoogleProvider.ts","../src/icons.ts","../src/pricing.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import {\n GoogleGenAI,\n FunctionCallingConfigMode,\n createPartFromBase64,\n createPartFromFunctionResponse,\n RawReferenceImage,\n} from '@google/genai/web';\nimport type { Model as GoogleModel, Part } from '@google/genai/web';\nimport type {\n InspectedRequest,\n LLMProviderInterface as Provider,\n ModelCapabilities,\n ProviderFactoryConfig,\n ProviderFinishReason,\n ProviderGeneratedImage,\n ProviderMessage,\n ProviderModelInfo,\n ProviderReasoningDetail,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderTool,\n ProviderToolCallPart,\n ProviderUsage,\n} from '@standardagents/spec';\nimport { ProviderError } from '@standardagents/spec';\nimport { getGoogleIconDataUri } from './icons';\nimport { calculateGoogleUsageCost } from './pricing';\n\ninterface GoogleStaticModelEntry {\n id: string;\n name: string;\n description: string;\n capabilities: ModelCapabilities;\n}\n\nconst STATIC_MODELS: GoogleStaticModelEntry[] = [\n {\n id: 'gemma-4-31b-it',\n name: 'Gemma 4 31B IT',\n description: 'Hosted Gemma 4 instruction-tuned model with image input and optional thinking.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 262144,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'gemini-2.5-pro',\n name: 'Gemini 2.5 Pro',\n description: 'State-of-the-art Gemini model for coding and reasoning.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n reasoningLevels: { 0: null, 50: 'medium', 100: 'high' },\n },\n },\n {\n id: 'gemini-2.5-flash',\n name: 'Gemini 2.5 Flash',\n description: 'Fast multimodal Gemini model for general-purpose tasks.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-2.5-flash-lite',\n name: 'Gemini 2.5 Flash-Lite',\n description: 'Low-cost Gemini model for high-volume workloads.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-2.5-flash-image',\n name: 'Gemini 2.5 Flash Image',\n description: 'Gemini image generation model with native image output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-3-pro-image-preview',\n name: 'Gemini 3 Pro Image Preview',\n description: 'High-end Gemini image-preview model with image generation output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-3.1-flash-image-preview',\n name: 'Gemini 3.1 Flash Image Preview',\n description: 'Fast Gemini image-preview model with image output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'imagen-4.0-generate-001',\n name: 'Imagen 4 Generate',\n description: 'Google Imagen model for image generation.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n {\n id: 'imagen-3.0-capability-001',\n name: 'Imagen 3 Capability',\n description: 'Google Imagen model for image editing.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n];\n\nfunction normalizeModelId(modelId: string): string {\n return modelId\n .trim()\n .replace(/^google\\//, '')\n .replace(/^models\\//, '')\n .replace(/^publishers\\/google\\/models\\//, '');\n}\n\nfunction supportsGoogleMultimodalFunctionResponses(modelId: string): boolean {\n return normalizeModelId(modelId).startsWith('gemini-3');\n}\n\nfunction supportsGoogleVisionInput(modelId: string): boolean {\n const normalizedId = normalizeModelId(modelId);\n return normalizedId.startsWith('gemini-')\n || normalizedId.startsWith('gemma-3')\n || normalizedId.startsWith('gemma-4');\n}\n\nfunction isImagenModel(modelId: string): boolean {\n return normalizeModelId(modelId).startsWith('imagen-');\n}\n\nfunction supportsGoogleVision(model: GoogleModel, normalizedId: string): boolean {\n const description = (model.description || '').toLowerCase();\n\n if (isImagenModel(normalizedId)) {\n return true;\n }\n\n if (normalizedId.startsWith('gemini-')) {\n return true;\n }\n\n if (normalizedId.startsWith('gemma-3') || normalizedId.startsWith('gemma-4')) {\n return true;\n }\n\n return ['multimodal', 'image', 'vision', 'video', 'audio'].some((term) => description.includes(term));\n}\n\nfunction supportsGoogleToolCalls(normalizedId: string): boolean {\n return normalizedId.startsWith('gemini-') || normalizedId.startsWith('functiongemma');\n}\n\nfunction inferGoogleReasoningLevels(model: GoogleModel, normalizedId: string): Record<number, string | null> | undefined {\n if (!model.thinking) return undefined;\n\n if (normalizedId.startsWith('gemma-')) {\n return { 0: null, 100: 'high' };\n }\n\n return { 0: null, 50: 'medium', 100: 'high' };\n}\n\nfunction mapDynamicCapabilities(model: GoogleModel): ModelCapabilities {\n const normalizedId = normalizeModelId(model.name || model.displayName || '');\n const supportedActions = new Set(model.supportedActions || []);\n const supportsContentGeneration = supportedActions.has('generateContent') || normalizedId.startsWith('gemini-') || normalizedId.startsWith('gemma-');\n const supportsTools = supportsGoogleToolCalls(normalizedId);\n\n return {\n supportsImages: supportsGoogleVision(model, normalizedId),\n supportsToolCalls: supportsTools,\n supportsStreaming: supportsContentGeneration && !isImagenModel(normalizedId),\n supportsJsonMode: supportsTools,\n maxContextTokens: model.inputTokenLimit,\n maxOutputTokens: model.outputTokenLimit,\n reasoningLevels: inferGoogleReasoningLevels(model, normalizedId),\n };\n}\n\nfunction toProviderModelInfo(model: GoogleModel): ProviderModelInfo {\n const id = normalizeModelId(model.name || model.displayName || '');\n return {\n id,\n name: model.displayName || id,\n description: model.description,\n contextLength: model.inputTokenLimit,\n iconId: getGoogleIconDataUri(),\n slug: id,\n };\n}\n\nfunction mapFinishReason(value: string | undefined): ProviderFinishReason {\n switch (value) {\n case 'MAX_TOKENS':\n return 'length';\n case 'SAFETY':\n case 'IMAGE_SAFETY':\n case 'PROHIBITED_CONTENT':\n case 'IMAGE_PROHIBITED_CONTENT':\n return 'content_filter';\n case 'MALFORMED_FUNCTION_CALL':\n case 'UNEXPECTED_TOOL_CALL':\n return 'error';\n case 'STOP':\n default:\n return 'stop';\n }\n}\n\nfunction toolChoiceToGoogle(choice: ProviderRequest['toolChoice']): { mode: FunctionCallingConfigMode; allowedFunctionNames?: string[] } | undefined {\n if (choice === 'auto') {\n return { mode: FunctionCallingConfigMode.AUTO };\n }\n if (choice === 'none') {\n return { mode: FunctionCallingConfigMode.NONE };\n }\n if (choice === 'required') {\n return { mode: FunctionCallingConfigMode.ANY };\n }\n if (choice && typeof choice === 'object' && 'name' in choice) {\n return {\n mode: FunctionCallingConfigMode.ANY,\n allowedFunctionNames: [choice.name],\n };\n }\n return undefined;\n}\n\nfunction transformTools(tools: ProviderTool[] | undefined): any[] | undefined {\n if (!tools?.length) return undefined;\n\n return [{\n functionDeclarations: tools.map((tool) => ({\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters || {\n type: 'object',\n properties: {},\n required: [],\n },\n })),\n }];\n}\n\nfunction normalizeInlineBytes(\n data: string | undefined,\n mediaType: string | undefined,\n): { data: string; mediaType?: string } {\n const value = data || '';\n const match = value.match(/^data:([^;]+);base64,(.*)$/);\n if (!match) {\n return { data: value, mediaType };\n }\n\n return {\n data: match[2],\n mediaType: match[1] || mediaType,\n };\n}\n\nfunction buildUserParts(message: Extract<ProviderMessage, { role: 'user' }>): Part[] {\n if (typeof message.content === 'string') {\n return [{ text: message.content }];\n }\n\n return message.content.map((part: any) => {\n if (part.type === 'text') {\n return { text: part.text };\n }\n\n if (part.type === 'image') {\n const normalized = normalizeInlineBytes(part.data, part.mediaType || 'image/png');\n return createPartFromBase64(normalized.data, normalized.mediaType || 'image/png');\n }\n\n if (part.type === 'image_url') {\n const url = part.image_url?.url || '';\n if (url.startsWith('data:')) {\n const match = url.match(/^data:([^;]+);base64,(.*)$/);\n if (match) {\n return createPartFromBase64(match[2], match[1]);\n }\n }\n return {\n fileData: {\n mimeType: 'image/*',\n fileUri: url,\n },\n };\n }\n\n return {\n inlineData: {\n mimeType: part.mediaType,\n data: part.data,\n },\n };\n });\n}\n\nfunction buildAssistantParts(message: Extract<ProviderMessage, { role: 'assistant' }>): Part[] {\n const parts: Part[] = [];\n\n if (message.content) {\n parts.push({ text: message.content });\n }\n\n const reasoningParts = buildGoogleReasoningParts(message.reasoning, message.reasoningDetails);\n if (reasoningParts.length) {\n parts.push(...reasoningParts);\n }\n\n if (message.toolCalls?.length) {\n for (const toolCall of message.toolCalls) {\n const thoughtSignature = getGoogleThoughtSignature(\n toolCall.extraContent,\n message.reasoningDetails,\n toolCall.id\n );\n parts.push({\n functionCall: {\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.arguments,\n },\n ...(thoughtSignature ? { thoughtSignature } : {}),\n });\n }\n }\n\n return parts;\n}\n\nfunction buildToolParts(\n message: Extract<ProviderMessage, { role: 'tool' }>,\n modelId: string\n): Part[] {\n const response: Record<string, unknown> = {};\n\n if (typeof message.content === 'string') {\n response.output = message.content;\n } else if ('type' in message.content) {\n if (message.content.type === 'text') response.output = message.content.text;\n else if (message.content.type === 'error') response.error = message.content.error;\n else response.output = message.content;\n } else {\n response.output = message.content;\n }\n\n const imageParts = message.attachments\n ?.filter((attachment: any) => attachment.type === 'image' && attachment.data)\n .map((attachment: any) => {\n const normalized = normalizeInlineBytes(attachment.data, attachment.mediaType);\n return createPartFromBase64(normalized.data, normalized.mediaType || 'image/png');\n }) || [];\n\n if (supportsGoogleMultimodalFunctionResponses(modelId)) {\n return [\n createPartFromFunctionResponse(\n message.toolCallId,\n message.toolName,\n response,\n imageParts.length ? imageParts : undefined\n ),\n ];\n }\n\n const parts: Part[] = [\n createPartFromFunctionResponse(\n message.toolCallId,\n message.toolName,\n response\n ),\n ];\n\n if (supportsGoogleVisionInput(modelId) && imageParts.length) {\n parts.push(...imageParts);\n }\n\n return parts;\n}\n\nfunction buildContents(messages: ProviderMessage[], modelId: string): { systemInstruction?: any; contents: any[] } {\n const contents: any[] = [];\n const systemMessages = messages.filter((message) => message.role === 'system').map((message) => message.content);\n const systemInstruction = systemMessages.length\n ? { role: 'user', parts: [{ text: systemMessages.join('\\n\\n') }] }\n : undefined;\n\n for (const message of messages) {\n if (message.role === 'system') continue;\n if (message.role === 'user') {\n contents.push({ role: 'user', parts: buildUserParts(message) });\n continue;\n }\n if (message.role === 'assistant') {\n contents.push({ role: 'model', parts: buildAssistantParts(message) });\n continue;\n }\n contents.push({ role: 'user', parts: buildToolParts(message, modelId) });\n }\n\n return { systemInstruction, contents };\n}\n\nfunction extractReasoningFromParts(parts: Part[] | undefined): string | null {\n if (!parts?.length) return null;\n const text = parts\n .filter((part: any) => part.thought && typeof part.text === 'string')\n .map((part: any) => part.text)\n .join('');\n return text || null;\n}\n\nfunction extractGoogleReasoningDetails(parts: Part[] | undefined): ProviderReasoningDetail[] | undefined {\n if (!parts?.length) return undefined;\n\n const reasoningDetails: ProviderReasoningDetail[] = [];\n\n for (const part of parts) {\n if (!part.thought) continue;\n\n if (typeof part.text === 'string' && part.text.length > 0) {\n reasoningDetails.push({\n type: 'text',\n text: part.text,\n format: 'google-gemini-v1',\n });\n }\n\n if (typeof part.thoughtSignature === 'string' && part.thoughtSignature.length > 0) {\n reasoningDetails.push({\n type: 'encrypted',\n data: part.thoughtSignature,\n format: 'google-gemini-thought-signature-v1',\n });\n }\n }\n\n return reasoningDetails.length ? reasoningDetails : undefined;\n}\n\nfunction extractImagesFromParts(parts: Part[] | undefined): ProviderGeneratedImage[] | undefined {\n if (!parts?.length) return undefined;\n const images = parts\n .filter((part: any) => part.inlineData?.mimeType?.startsWith('image/'))\n .map((part: any, index: number) => ({\n id: `image_${index}`,\n data: part.inlineData?.data || '',\n mediaType: part.inlineData?.mimeType || 'image/png',\n }));\n return images.length ? images : undefined;\n}\n\nfunction extractToolCalls(parts: Part[] | undefined): ProviderToolCallPart[] | undefined {\n if (!parts?.length) return undefined;\n const toolCalls = parts\n .filter((part: any) => part.functionCall?.name)\n .map((part: any) => ({\n id: part.functionCall?.id || crypto.randomUUID(),\n name: part.functionCall?.name || 'tool',\n arguments: (part.functionCall?.args || {}) as Record<string, unknown>,\n extraContent: getGoogleToolCallExtraContent(part),\n }));\n\n return toolCalls.length ? toolCalls : undefined;\n}\n\nfunction getGoogleThoughtSignature(\n extraContent: unknown,\n reasoningDetails?: ProviderReasoningDetail[],\n toolCallId?: string\n): string | undefined {\n if (extraContent && typeof extraContent === 'object') {\n const google = (extraContent as Record<string, unknown>).google;\n if (google && typeof google === 'object') {\n const thoughtSignature = (google as Record<string, unknown>).thought_signature;\n if (typeof thoughtSignature === 'string' && thoughtSignature.length > 0) {\n return thoughtSignature;\n }\n }\n }\n\n if (!toolCallId || !reasoningDetails?.length) return undefined;\n\n const detail = reasoningDetails.find((candidate) => (\n candidate?.type === 'encrypted' &&\n candidate?.id === toolCallId &&\n typeof candidate?.data === 'string' &&\n candidate.data.length > 0 &&\n (\n candidate.format === 'google-gemini-v1' ||\n candidate.format === 'google-gemini-thought-signature-v1' ||\n !candidate.format\n )\n ));\n\n return detail?.data;\n}\n\nfunction getGoogleToolCallExtraContent(part: Part): Record<string, unknown> | undefined {\n const thoughtSignature = typeof part.thoughtSignature === 'string' && part.thoughtSignature.length > 0\n ? part.thoughtSignature\n : undefined;\n\n if (!thoughtSignature) return undefined;\n\n return {\n google: {\n thought_signature: thoughtSignature,\n },\n };\n}\n\nfunction buildGoogleReasoningParts(\n reasoning: string | null | undefined,\n reasoningDetails: ProviderReasoningDetail[] | undefined\n): Part[] {\n const googleReasoningDetails = reasoningDetails?.filter(\n (detail) =>\n detail?.format === 'google-gemini-v1' ||\n detail?.format === 'google-gemini-thought-signature-v1'\n ) || [];\n\n if (googleReasoningDetails.length === 0) {\n return reasoning ? [{ text: reasoning, thought: true }] : [];\n }\n\n const parts: Part[] = [];\n\n for (const detail of googleReasoningDetails) {\n if (detail.format === 'google-gemini-v1' && typeof detail.text === 'string') {\n parts.push({ text: detail.text, thought: true });\n continue;\n }\n\n if (detail.format === 'google-gemini-thought-signature-v1' && typeof detail.data === 'string') {\n const lastThoughtPart = parts.length > 0 ? parts[parts.length - 1] : undefined;\n if (lastThoughtPart?.thought && !lastThoughtPart.thoughtSignature) {\n lastThoughtPart.thoughtSignature = detail.data;\n } else {\n parts.push({ thought: true, thoughtSignature: detail.data });\n }\n }\n }\n\n if (parts.length === 0 && reasoning) {\n parts.push({ text: reasoning, thought: true });\n }\n\n return parts;\n}\n\nfunction transformUsage(modelId: string, usage: any, imageCount = 0): ProviderUsage {\n const mapped: ProviderUsage = {\n promptTokens: usage?.promptTokenCount || 0,\n completionTokens: usage?.candidatesTokenCount || 0,\n totalTokens: usage?.totalTokenCount || 0,\n reasoningTokens: usage?.thoughtsTokenCount,\n cachedTokens: usage?.cachedContentTokenCount,\n provider: 'google',\n };\n\n mapped.cost = calculateGoogleUsageCost(\n modelId,\n {\n ...mapped,\n promptTokenDetails: usage?.promptTokensDetails,\n completionTokenDetails: usage?.candidatesTokensDetails || usage?.responseTokensDetails,\n cachedTokenDetails: usage?.cacheTokensDetails,\n },\n imageCount\n );\n return mapped;\n}\n\nexport class GoogleProvider implements Provider {\n readonly name = 'google';\n readonly specificationVersion = '1' as const;\n\n private readonly config: ProviderFactoryConfig;\n private client: GoogleGenAI | null = null;\n\n private static readonly cacheTtl = 5 * 60 * 1000;\n private static modelsCache: ProviderModelInfo[] | null = null;\n private static modelsCacheTime = 0;\n private static modelMetadataCache = new Map<string, GoogleModel>();\n\n constructor(config: ProviderFactoryConfig) {\n this.config = config;\n }\n\n private getClient(): GoogleGenAI {\n if (!this.client) {\n this.client = new GoogleGenAI({\n apiKey: this.config.apiKey,\n });\n }\n return this.client;\n }\n\n supportsModel(modelId: string): boolean {\n return modelId.startsWith('gemini-')\n || modelId.startsWith('gemma-')\n || modelId.startsWith('imagen-')\n || modelId.startsWith('models/');\n }\n\n getIcon(_modelId?: string): string {\n return getGoogleIconDataUri();\n }\n\n private getHttpOptions(): Record<string, unknown> | undefined {\n if (!this.config.baseUrl && !this.config.timeout) return undefined;\n\n return {\n ...(this.config.baseUrl ? { baseUrl: this.config.baseUrl } : {}),\n ...(this.config.timeout ? { timeout: this.config.timeout } : {}),\n };\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n const now = Date.now();\n if (GoogleProvider.modelsCache && now - GoogleProvider.modelsCacheTime < GoogleProvider.cacheTtl) {\n return this.filterModels(GoogleProvider.modelsCache, filter);\n }\n\n try {\n const models: ProviderModelInfo[] = [];\n const client = this.getClient();\n const pager = await client.models.list({\n config: {\n httpOptions: this.getHttpOptions() as any,\n },\n } as any);\n\n for await (const model of pager as AsyncIterable<GoogleModel>) {\n const id = normalizeModelId(model.name || '');\n if (!id) continue;\n const supportsGeneration = model.supportedActions?.some((action: string) =>\n ['generateContent', 'generateImages', 'editImage', 'predict'].includes(action)\n );\n if (!supportsGeneration) continue;\n GoogleProvider.modelMetadataCache.set(id, model);\n models.push(toProviderModelInfo(model));\n }\n\n for (const staticModel of STATIC_MODELS) {\n if (!models.some((model) => model.id === staticModel.id)) {\n models.push({\n id: staticModel.id,\n name: staticModel.name,\n description: staticModel.description,\n iconId: this.getIcon(staticModel.id),\n slug: staticModel.id,\n });\n }\n }\n\n GoogleProvider.modelsCache = models.sort((a, b) => a.name.localeCompare(b.name));\n GoogleProvider.modelsCacheTime = now;\n return this.filterModels(GoogleProvider.modelsCache, filter);\n } catch (error) {\n console.error('Failed to list Google models:', error);\n return this.filterModels(\n STATIC_MODELS.map((model) => ({\n id: model.id,\n name: model.name,\n description: model.description,\n iconId: this.getIcon(model.id),\n slug: model.id,\n })),\n filter\n );\n }\n }\n\n private filterModels(models: ProviderModelInfo[], filter?: string): ProviderModelInfo[] {\n if (!filter) return models;\n const query = filter.toLowerCase();\n return models.filter((model) =>\n model.id.toLowerCase().includes(query) ||\n model.name.toLowerCase().includes(query) ||\n (model.description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n private async getModelMetadata(modelId: string): Promise<GoogleModel | null> {\n const normalized = normalizeModelId(modelId);\n const cached = GoogleProvider.modelMetadataCache.get(normalized);\n if (cached) {\n return cached;\n }\n\n try {\n const model = await this.getClient().models.get({\n model: normalized,\n config: {\n httpOptions: this.getHttpOptions() as any,\n },\n } as any);\n GoogleProvider.modelMetadataCache.set(normalized, model);\n return model;\n } catch {\n return null;\n }\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n const normalized = normalizeModelId(modelId);\n const staticModel = STATIC_MODELS.find((model) => model.id === normalized);\n if (staticModel) {\n return { ...staticModel.capabilities };\n }\n\n try {\n const metadata = await this.getModelMetadata(normalized);\n if (metadata) {\n return mapDynamicCapabilities(metadata);\n }\n\n const models = await this.getModels();\n const found = models.find((model) => model.id === normalized);\n if (!found) return null;\n\n return {\n supportsImages: normalized.startsWith('gemini-') || normalized.startsWith('gemma-') || normalized.includes('image'),\n supportsToolCalls: supportsGoogleToolCalls(normalized),\n supportsStreaming: !isImagenModel(normalized),\n supportsJsonMode: supportsGoogleToolCalls(normalized),\n maxContextTokens: found.contextLength,\n };\n } catch {\n return null;\n }\n }\n\n private buildGenerateContentParams(request: ProviderRequest): Record<string, unknown> {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const { systemInstruction, contents } = buildContents(request.messages, request.model);\n\n const config: Record<string, unknown> = {\n ...(this.getHttpOptions() ? { httpOptions: this.getHttpOptions() } : {}),\n ...(systemInstruction ? { systemInstruction } : {}),\n ...(typeof request.temperature === 'number' ? { temperature: request.temperature } : {}),\n ...(typeof request.topP === 'number' ? { topP: request.topP } : {}),\n ...(typeof request.topK === 'number' ? { topK: request.topK } : {}),\n ...(typeof request.maxOutputTokens === 'number' ? { maxOutputTokens: request.maxOutputTokens } : {}),\n ...(request.stopSequences?.length ? { stopSequences: request.stopSequences } : {}),\n ...(request.responseFormat?.type === 'json'\n ? {\n responseMimeType: 'application/json',\n ...(request.responseFormat.schema ? { responseJsonSchema: request.responseFormat.schema } : {}),\n }\n : {}),\n ...(request.tools?.length ? { tools: transformTools(request.tools) } : {}),\n ...(request.tools?.length && toolChoiceToGoogle(request.toolChoice)\n ? { toolConfig: { functionCallingConfig: toolChoiceToGoogle(request.toolChoice) } }\n : {}),\n ...(typeof providerOptions.candidateCount === 'number' ? { candidateCount: providerOptions.candidateCount } : {}),\n ...(Array.isArray(providerOptions.responseModalities) ? { responseModalities: providerOptions.responseModalities } : {}),\n ...(typeof providerOptions.mediaResolution === 'string' ? { mediaResolution: providerOptions.mediaResolution } : {}),\n ...(typeof providerOptions.cachedContent === 'string' ? { cachedContent: providerOptions.cachedContent } : {}),\n ...(typeof providerOptions.enableEnhancedCivicAnswers === 'boolean'\n ? { enableEnhancedCivicAnswers: providerOptions.enableEnhancedCivicAnswers }\n : {}),\n ...(providerOptions.labels ? { labels: providerOptions.labels } : {}),\n ...(providerOptions.safetySettings ? { safetySettings: providerOptions.safetySettings } : {}),\n ...(providerOptions.thinkingConfig ? { thinkingConfig: providerOptions.thinkingConfig } : {}),\n ...(providerOptions.imageConfig ? { imageConfig: providerOptions.imageConfig } : {}),\n ...(typeof request.reasoning?.maxTokens === 'number'\n ? { thinkingConfig: { ...(providerOptions.thinkingConfig as Record<string, unknown> || {}), thinkingBudget: request.reasoning.maxTokens } }\n : {}),\n };\n\n return {\n model: normalizeModelId(request.model),\n contents,\n config,\n };\n }\n\n private extractImagenRequest(request: ProviderRequest): {\n prompt: string;\n referenceImages?: RawReferenceImage[];\n body: Record<string, unknown>;\n } {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const latestUser = [...request.messages].reverse().find((message) => message.role === 'user');\n const prompt = latestUser ? (typeof latestUser.content === 'string'\n ? latestUser.content\n : latestUser.content.filter((part: any) => part.type === 'text').map((part: any) => part.text).join('\\n')) : '';\n\n const referenceImages = latestUser && typeof latestUser.content !== 'string'\n ? latestUser.content\n .filter((part: any) => part.type === 'image')\n .map((part: any, index: number) => {\n const normalized = normalizeInlineBytes(part.data, part.mediaType);\n const image = new RawReferenceImage();\n image.referenceId = index + 1;\n image.referenceImage = {\n imageBytes: normalized.data,\n mimeType: normalized.mediaType,\n };\n return image;\n })\n : [];\n\n const body: Record<string, unknown> = {\n model: normalizeModelId(request.model),\n prompt,\n ...(referenceImages.length ? { referenceImages: '[binary images omitted]' } : {}),\n config: {\n ...(this.getHttpOptions() ? { httpOptions: this.getHttpOptions() } : {}),\n ...(typeof providerOptions.numberOfImages === 'number' ? { numberOfImages: providerOptions.numberOfImages } : {}),\n ...(typeof providerOptions.negativePrompt === 'string' ? { negativePrompt: providerOptions.negativePrompt } : {}),\n ...(typeof providerOptions.aspectRatio === 'string' ? { aspectRatio: providerOptions.aspectRatio } : {}),\n ...(typeof providerOptions.guidanceScale === 'number' ? { guidanceScale: providerOptions.guidanceScale } : {}),\n ...(typeof providerOptions.seed === 'number' ? { seed: providerOptions.seed } : {}),\n ...(typeof providerOptions.safetyFilterLevel === 'string' ? { safetyFilterLevel: providerOptions.safetyFilterLevel } : {}),\n ...(typeof providerOptions.personGeneration === 'string' ? { personGeneration: providerOptions.personGeneration } : {}),\n ...(typeof providerOptions.includeSafetyAttributes === 'boolean' ? { includeSafetyAttributes: providerOptions.includeSafetyAttributes } : {}),\n ...(typeof providerOptions.includeRaiReason === 'boolean' ? { includeRaiReason: providerOptions.includeRaiReason } : {}),\n ...(typeof providerOptions.language === 'string' ? { language: providerOptions.language } : {}),\n ...(typeof providerOptions.outputMimeType === 'string' ? { outputMimeType: providerOptions.outputMimeType } : {}),\n ...(typeof providerOptions.outputCompressionQuality === 'number' ? { outputCompressionQuality: providerOptions.outputCompressionQuality } : {}),\n ...(typeof providerOptions.addWatermark === 'boolean' ? { addWatermark: providerOptions.addWatermark } : {}),\n ...(providerOptions.labels ? { labels: providerOptions.labels } : {}),\n ...(typeof providerOptions.imageSize === 'string' ? { imageSize: providerOptions.imageSize } : {}),\n ...(typeof providerOptions.enhancePrompt === 'boolean' ? { enhancePrompt: providerOptions.enhancePrompt } : {}),\n ...(typeof providerOptions.editMode === 'string' ? { editMode: providerOptions.editMode } : {}),\n ...(typeof providerOptions.baseSteps === 'number' ? { baseSteps: providerOptions.baseSteps } : {}),\n },\n };\n\n return {\n prompt,\n referenceImages: referenceImages.length ? referenceImages : undefined,\n body,\n };\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n if (isImagenModel(request.model)) {\n const imagen = this.extractImagenRequest(request);\n return {\n body: imagen.body,\n messagesPath: 'prompt',\n metadata: {\n endpoint: imagen.referenceImages?.length\n ? `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/editImage`\n : `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/generateImages`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n return {\n body: this.buildGenerateContentParams(request),\n messagesPath: 'contents',\n metadata: {\n endpoint: `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/generateContent`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n if (isImagenModel(request.model)) {\n return this.generateImagen(request);\n }\n\n try {\n const client = this.getClient();\n const response = await client.models.generateContent(this.buildGenerateContentParams(request) as any);\n const candidate = response.candidates?.[0];\n const parts = candidate?.content?.parts;\n const images = extractImagesFromParts(parts);\n const usage = transformUsage(normalizeModelId(request.model), response.usageMetadata, images?.length || 0);\n\n return {\n content: response.text || null,\n reasoning: extractReasoningFromParts(parts),\n reasoningDetails: extractGoogleReasoningDetails(parts),\n toolCalls: extractToolCalls(parts),\n images,\n finishReason: mapFinishReason(candidate?.finishReason),\n usage,\n metadata: {\n provider: 'google',\n responseId: response.responseId,\n modelVersion: response.modelVersion,\n promptFeedback: response.promptFeedback,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private async generateImagen(request: ProviderRequest): Promise<ProviderResponse> {\n try {\n const client = this.getClient();\n const imagen = this.extractImagenRequest(request);\n const model = normalizeModelId(request.model);\n\n const response = imagen.referenceImages?.length\n ? await client.models.editImage({\n model,\n prompt: imagen.prompt,\n referenceImages: imagen.referenceImages,\n config: imagen.body.config as any,\n })\n : await client.models.generateImages({\n model,\n prompt: imagen.prompt,\n config: imagen.body.config as any,\n });\n\n const images: ProviderGeneratedImage[] = (response.generatedImages || [])\n .filter((image: any) => image.image?.imageBytes)\n .map((image: any, index: number) => ({\n id: `image_${index}`,\n data: image.image?.imageBytes || '',\n mediaType: image.image?.mimeType || 'image/png',\n revisedPrompt: image.enhancedPrompt,\n }));\n\n return {\n content: null,\n images,\n finishReason: 'stop',\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n cost: calculateGoogleUsageCost(model, { promptTokens: 0, completionTokens: 0, cachedTokens: 0 }, images.length),\n provider: 'google',\n },\n metadata: {\n provider: 'google',\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n if (isImagenModel(request.model)) {\n throw new ProviderError('Imagen models do not support streaming in Standard Agents.', 'invalid_request');\n }\n\n const self = this;\n\n try {\n const client = this.getClient();\n const stream = await client.models.generateContentStream(this.buildGenerateContentParams(request) as any);\n\n return {\n async *[Symbol.asyncIterator]() {\n let sawContent = false;\n let sawReasoning = false;\n const reasoningDetails: ProviderReasoningDetail[] = [];\n let finishReason: ProviderFinishReason = 'stop';\n let finalUsage: ProviderUsage = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n provider: 'google',\n };\n let imageIndex = 0;\n\n try {\n for await (const chunk of stream) {\n const candidate = chunk.candidates?.[0];\n const parts = candidate?.content?.parts || [];\n const chunkReasoningDetails = extractGoogleReasoningDetails(parts);\n if (chunkReasoningDetails?.length) {\n reasoningDetails.push(...chunkReasoningDetails);\n }\n\n for (const part of parts) {\n if (part.text && !part.thought) {\n sawContent = true;\n yield { type: 'content-delta', delta: part.text };\n } else if (part.text && part.thought) {\n sawReasoning = true;\n yield { type: 'reasoning-delta', delta: part.text };\n } else if (part.functionCall?.name) {\n const id = part.functionCall.id || crypto.randomUUID();\n const extraContent = getGoogleToolCallExtraContent(part);\n yield { type: 'tool-call-start', id, name: part.functionCall.name, extraContent };\n yield {\n type: 'tool-call-done',\n id,\n arguments: (part.functionCall.args || {}) as Record<string, unknown>,\n extraContent,\n };\n } else if (part.inlineData?.mimeType?.startsWith('image/')) {\n const image: ProviderGeneratedImage = {\n id: `image_${imageIndex}`,\n data: part.inlineData.data || '',\n mediaType: part.inlineData.mimeType || 'image/png',\n };\n yield { type: 'image-done', index: imageIndex, image };\n imageIndex += 1;\n }\n }\n\n if (chunk.usageMetadata) {\n finalUsage = transformUsage(normalizeModelId(request.model), chunk.usageMetadata, imageIndex);\n }\n\n if (candidate?.finishReason) {\n finishReason = mapFinishReason(candidate.finishReason);\n }\n }\n\n if (sawContent) yield { type: 'content-done' };\n if (sawReasoning) yield { type: 'reasoning-done' };\n yield {\n type: 'finish',\n finishReason,\n usage: finalUsage,\n reasoningDetails: reasoningDetails.length ? reasoningDetails : undefined,\n };\n } catch (error) {\n yield { type: 'error', error: self.toProviderError(error).message };\n }\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) return error;\n\n if (error instanceof Error) {\n const candidate = error as Error & { status?: number; statusCode?: number };\n const status = candidate.status || candidate.statusCode;\n if (status === 429) return new ProviderError(error.message, 'rate_limit', status);\n if (status === 401 || status === 403) return new ProviderError(error.message, 'auth_error', status);\n if (status === 400) return new ProviderError(error.message, 'invalid_request', status);\n if (status && status >= 500) return new ProviderError(error.message, 'server_error', status);\n if (error.name === 'AbortError') return new ProviderError(error.message, 'timeout');\n return new ProviderError(error.message, 'unknown', status);\n }\n\n return new ProviderError(String(error), 'unknown');\n }\n}\n","const GOOGLE_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" fill=\"none\"><rect width=\"64\" height=\"64\" rx=\"16\" fill=\"#fff\"/><path d=\"M54 32.73c0-1.58-.14-3.1-.4-4.55H32v8.61h12.33c-.53 2.85-2.14 5.27-4.56 6.9v5.73h7.38C51.47 45.44 54 39.61 54 32.73Z\" fill=\"#4285F4\"/><path d=\"M32 55c6.2 0 11.4-2.05 15.2-5.58l-7.38-5.73c-2.05 1.37-4.67 2.18-7.82 2.18-6 0-11.08-4.05-12.9-9.49h-7.62v5.96A22.98 22.98 0 0 0 32 55Z\" fill=\"#34A853\"/><path d=\"M19.1 36.38A13.8 13.8 0 0 1 18.38 32c0-1.52.26-3 .72-4.38v-5.96h-7.62A22.98 22.98 0 0 0 9 32c0 3.67.88 7.13 2.48 10.34l7.62-5.96Z\" fill=\"#FBBC05\"/><path d=\"M32 18.9c3.37 0 6.4 1.16 8.79 3.45l6.59-6.59C43.39 12.05 38.19 9 32 9A22.98 22.98 0 0 0 11.48 21.66l7.62 5.96C20.92 22.95 26 18.9 32 18.9Z\" fill=\"#EA4335\"/></svg>`;\n\nexport function svgToDataUri(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n}\n\nexport function getGoogleIconDataUri(): string {\n return svgToDataUri(GOOGLE_ICON);\n}\n","import type { ProviderUsage } from '@standardagents/spec';\n\ntype GooglePricingModality = 'text' | 'image' | 'video' | 'audio' | 'document' | 'unspecified';\n\ninterface GoogleModalityTokenCount {\n modality?: string;\n tokenCount?: number;\n}\n\nexport interface GoogleModelPricing {\n inputPerMillion: number;\n longInputPerMillion?: number;\n outputPerMillion?: number;\n longOutputPerMillion?: number;\n cachedInputPerMillion?: number;\n longCachedInputPerMillion?: number;\n outputImagePerImage?: number;\n inputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n outputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n cachedByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n longContextThreshold?: number;\n}\n\nconst MODEL_PRICING: Record<string, GoogleModelPricing> = {\n 'gemini-3-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-3.1-pro-preview': {\n inputPerMillion: 2,\n longInputPerMillion: 4,\n outputPerMillion: 12,\n longOutputPerMillion: 18,\n cachedInputPerMillion: 0.2,\n longCachedInputPerMillion: 0.4,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-pro': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n cachedInputPerMillion: 0.125,\n longCachedInputPerMillion: 0.25,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n cachedInputPerMillion: 0.03,\n },\n 'gemini-2.5-flash-lite': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.01,\n },\n 'gemini-3-flash-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n cachedInputPerMillion: 0.05,\n inputByModalityPerMillion: {\n text: 0.5,\n image: 0.5,\n video: 0.5,\n audio: 1,\n },\n cachedByModalityPerMillion: {\n text: 0.05,\n image: 0.05,\n video: 0.05,\n audio: 0.1,\n },\n },\n 'gemini-3.1-flash-lite-preview': {\n inputPerMillion: 0.25,\n outputPerMillion: 1.5,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.25,\n image: 0.25,\n video: 0.25,\n audio: 0.5,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.05,\n },\n },\n 'deep-research-pro-preview-12-2025': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-2.0-flash': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-001': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-lite': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.0-flash-lite-001': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.5-computer-use-preview-10-2025': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash-preview-tts': {\n inputPerMillion: 0.5,\n outputPerMillion: 10,\n outputByModalityPerMillion: {\n audio: 10,\n },\n },\n 'gemini-2.5-pro-preview-tts': {\n inputPerMillion: 1,\n outputPerMillion: 20,\n outputByModalityPerMillion: {\n audio: 20,\n },\n },\n 'gemini-robotics-er-1.5-preview': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n inputByModalityPerMillion: {\n text: 0.3,\n image: 0.3,\n video: 0.3,\n audio: 1,\n },\n },\n 'gemini-2.5-flash-image': {\n inputPerMillion: 0.3,\n outputImagePerImage: 0.039,\n },\n 'gemini-3.1-flash-image-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n outputImagePerImage: 0.045,\n },\n 'gemini-3-pro-image-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'nano-banana-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'imagen-4.0-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'imagen-4.0-fast-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.02,\n },\n 'imagen-4.0-ultra-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.06,\n },\n 'imagen-3.0-capability-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'gemma-4-31b-it': {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n};\n\nconst MODEL_PRICING_PREFIXES: Array<{ prefix: string; pricing: GoogleModelPricing }> = [\n {\n prefix: 'gemini-3.1-pro-preview',\n pricing: MODEL_PRICING['gemini-3.1-pro-preview'],\n },\n {\n prefix: 'gemini-3-pro-preview',\n pricing: MODEL_PRICING['gemini-3-pro-preview'],\n },\n {\n prefix: 'gemini-3-flash-preview',\n pricing: MODEL_PRICING['gemini-3-flash-preview'],\n },\n {\n prefix: 'gemini-3.1-flash-lite-preview',\n pricing: MODEL_PRICING['gemini-3.1-flash-lite-preview'],\n },\n {\n prefix: 'gemini-2.5-flash-lite-preview-',\n pricing: MODEL_PRICING['gemini-2.5-flash-lite'],\n },\n {\n prefix: 'gemini-flash-latest',\n pricing: MODEL_PRICING['gemini-2.5-flash'],\n },\n {\n prefix: 'gemini-flash-lite-latest',\n pricing: MODEL_PRICING['gemini-2.5-flash-lite'],\n },\n {\n prefix: 'gemini-pro-latest',\n pricing: MODEL_PRICING['gemini-2.5-pro'],\n },\n {\n prefix: 'gemma-4-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n {\n prefix: 'gemma-3-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n {\n prefix: 'gemma-3n-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n];\n\nfunction normalizeGoogleModelId(modelId: string): string {\n return modelId\n .trim()\n .toLowerCase()\n .replace(/^google\\//, '')\n .replace(/^models\\//, '')\n .replace(/^publishers\\/google\\/models\\//, '');\n}\n\nfunction normalizeModality(modality: string | undefined): GooglePricingModality {\n const normalized = (modality || '').trim().toLowerCase();\n\n if (normalized === 'text') return 'text';\n if (normalized === 'image') return 'image';\n if (normalized === 'video') return 'video';\n if (normalized === 'audio') return 'audio';\n if (normalized === 'document') return 'document';\n return 'unspecified';\n}\n\nfunction toModalityCounts(\n details: GoogleModalityTokenCount[] | undefined\n): Partial<Record<GooglePricingModality, number>> {\n const counts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const detail of details || []) {\n const modality = normalizeModality(detail.modality);\n const tokenCount = Math.max(detail.tokenCount ?? 0, 0);\n counts[modality] = (counts[modality] ?? 0) + tokenCount;\n }\n\n return counts;\n}\n\nfunction sumModalityCosts(\n counts: Partial<Record<GooglePricingModality, number>>,\n modalityRates: Partial<Record<GooglePricingModality, number>> | undefined,\n defaultRate: number\n): number {\n let total = 0;\n\n for (const [modality, tokenCount] of Object.entries(counts)) {\n if (!tokenCount) continue;\n const rate = modalityRates?.[modality as GooglePricingModality] ?? defaultRate;\n total += (tokenCount / 1_000_000) * rate;\n }\n\n return total;\n}\n\nexport function getGoogleModelPricing(modelId: string): GoogleModelPricing | undefined {\n const normalizedModelId = normalizeGoogleModelId(modelId);\n const exact = MODEL_PRICING[normalizedModelId];\n if (exact) return exact;\n\n return MODEL_PRICING_PREFIXES.find((entry) => normalizedModelId.startsWith(entry.prefix))?.pricing;\n}\n\nexport function calculateGoogleUsageCost(\n modelId: string,\n usage: Pick<ProviderUsage, 'promptTokens' | 'completionTokens' | 'reasoningTokens' | 'cachedTokens'> & {\n promptTokenDetails?: GoogleModalityTokenCount[];\n completionTokenDetails?: GoogleModalityTokenCount[];\n cachedTokenDetails?: GoogleModalityTokenCount[];\n },\n imageCount = 0\n): number | undefined {\n const pricing = getGoogleModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const useLongContext = pricing.longContextThreshold != null && usage.promptTokens > pricing.longContextThreshold;\n\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext\n ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion ?? 0)\n : (pricing.outputPerMillion ?? 0);\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? 0)\n : (pricing.cachedInputPerMillion ?? 0);\n const billableOutputTokens = usage.completionTokens + (usage.reasoningTokens ?? 0);\n const promptModalityCounts = toModalityCounts(usage.promptTokenDetails);\n const cachedModalityCounts = toModalityCounts(usage.cachedTokenDetails);\n const uncachedPromptModalityCounts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const modality of new Set<GooglePricingModality>([\n ...Object.keys(promptModalityCounts) as GooglePricingModality[],\n ...Object.keys(cachedModalityCounts) as GooglePricingModality[],\n ])) {\n uncachedPromptModalityCounts[modality] = Math.max(\n (promptModalityCounts[modality] ?? 0) - (cachedModalityCounts[modality] ?? 0),\n 0\n );\n }\n\n const completionModalityCounts = toModalityCounts(usage.completionTokenDetails);\n if (usage.reasoningTokens) {\n completionModalityCounts.text = (completionModalityCounts.text ?? 0) + usage.reasoningTokens;\n }\n\n const hasPromptModalityPricing = Object.keys(uncachedPromptModalityCounts).length > 0 && pricing.inputByModalityPerMillion;\n const hasCachedModalityPricing = Object.keys(cachedModalityCounts).length > 0 && pricing.cachedByModalityPerMillion;\n const hasOutputModalityPricing = Object.keys(completionModalityCounts).length > 0 && pricing.outputByModalityPerMillion;\n\n const inputCost = hasPromptModalityPricing\n ? sumModalityCosts(uncachedPromptModalityCounts, pricing.inputByModalityPerMillion, inputRate)\n : (uncachedPromptTokens / 1_000_000) * inputRate;\n const cachedCost = hasCachedModalityPricing\n ? sumModalityCosts(cachedModalityCounts, pricing.cachedByModalityPerMillion, cachedRate)\n : (cachedTokens / 1_000_000) * cachedRate;\n const outputCost = hasOutputModalityPricing\n ? sumModalityCosts(completionModalityCounts, pricing.outputByModalityPerMillion, outputRate)\n : (billableOutputTokens / 1_000_000) * outputRate;\n const imageCost = imageCount * (pricing.outputImagePerImage ?? 0);\n\n return Number((inputCost + cachedCost + outputCost + imageCost).toFixed(12));\n}\n","import { z } from 'zod';\n\nexport const googleProviderOptions = z.object({\n candidateCount: z.number().int().min(1).max(8).optional(),\n responseModalities: z.array(z.enum(['TEXT', 'IMAGE', 'AUDIO'])).optional(),\n mediaResolution: z.string().optional(),\n cachedContent: z.string().optional(),\n enableEnhancedCivicAnswers: z.boolean().optional(),\n labels: z.record(z.string(), z.string()).optional(),\n safetySettings: z.array(z.record(z.string(), z.unknown())).optional(),\n thinkingConfig: z.record(z.string(), z.unknown()).optional(),\n imageConfig: z.record(z.string(), z.unknown()).optional(),\n\n numberOfImages: z.number().int().min(1).max(4).optional(),\n negativePrompt: z.string().optional(),\n aspectRatio: z.string().optional(),\n guidanceScale: z.number().optional(),\n safetyFilterLevel: z.string().optional(),\n personGeneration: z.string().optional(),\n includeSafetyAttributes: z.boolean().optional(),\n includeRaiReason: z.boolean().optional(),\n language: z.string().optional(),\n outputMimeType: z.string().optional(),\n outputCompressionQuality: z.number().int().optional(),\n addWatermark: z.boolean().optional(),\n imageSize: z.string().optional(),\n enhancePrompt: z.boolean().optional(),\n editMode: z.string().optional(),\n baseSteps: z.number().int().optional(),\n}).passthrough();\n\nexport type GoogleProviderOptions = z.infer<typeof googleProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { GoogleProvider } from './GoogleProvider';\nimport { googleProviderOptions } from './providerOptions';\n\n/**\n * Google Gemini / Imagen provider factory for Standard Agents.\n */\nexport const google: ProviderFactoryWithOptions<typeof googleProviderOptions> = Object.assign(\n (config: ProviderFactoryConfig) => new GoogleProvider(config),\n { providerOptions: googleProviderOptions }\n);\n\nexport { googleProviderOptions, type GoogleProviderOptions } from './providerOptions';\nexport { GoogleProvider } from './GoogleProvider';\n"],"mappings":"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","names":["google"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@standardagents/google",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "restricted",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"tsup": "^8.3.5",
|
|
32
32
|
"typescript": "^5.9.0",
|
|
33
|
-
"@standardagents/spec": "0.
|
|
33
|
+
"@standardagents/spec": "0.15.0"
|
|
34
34
|
},
|
|
35
35
|
"keywords": [
|
|
36
36
|
"standardagents",
|