@gullabs/google 0.7.0 → 0.8.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 +13 -11
- package/dist/index.cjs +2246 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +334 -9
- package/dist/index.d.ts +334 -9
- package/dist/index.js +2239 -38
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var core = require('@gullabs/core');
|
|
4
|
+
var zod = require('zod');
|
|
4
5
|
|
|
5
6
|
// src/adapter.ts
|
|
6
7
|
function requireApiKey(auth) {
|
|
@@ -24,6 +25,10 @@ async function buildGoogleClient(auth) {
|
|
|
24
25
|
async generateContent(params) {
|
|
25
26
|
const result = await ai.models.generateContent(params);
|
|
26
27
|
return result;
|
|
28
|
+
},
|
|
29
|
+
async countTokens(params) {
|
|
30
|
+
const result = await ai.models.countTokens(params);
|
|
31
|
+
return result;
|
|
27
32
|
}
|
|
28
33
|
}
|
|
29
34
|
};
|
|
@@ -69,6 +74,7 @@ function isGeminiCapacityError(err) {
|
|
|
69
74
|
// src/adapter.ts
|
|
70
75
|
var ALLOWED_GOOGLE_PROVIDER_OPTION_KEYS = /* @__PURE__ */ new Set([
|
|
71
76
|
"cachedContent",
|
|
77
|
+
"flexFallback",
|
|
72
78
|
"httpOptions",
|
|
73
79
|
"safetySettings",
|
|
74
80
|
"tools"
|
|
@@ -199,7 +205,7 @@ function mapGoogleProviderOptions(googleOpts, model, structuredOutputRequested,
|
|
|
199
205
|
throw badGoogleProviderOptions(
|
|
200
206
|
`providerOptions.google contains unsupported keys [${unknownKeys.join(
|
|
201
207
|
", "
|
|
202
|
-
)}] for model "${model}". Allowed keys: cachedContent, httpOptions, safetySettings, tools.`
|
|
208
|
+
)}] for model "${model}". Allowed keys: cachedContent, flexFallback, httpOptions, safetySettings, tools.`
|
|
203
209
|
);
|
|
204
210
|
}
|
|
205
211
|
const mapped = {};
|
|
@@ -211,6 +217,14 @@ function mapGoogleProviderOptions(googleOpts, model, structuredOutputRequested,
|
|
|
211
217
|
}
|
|
212
218
|
mapped.cachedContent = googleOpts["cachedContent"];
|
|
213
219
|
}
|
|
220
|
+
if (googleOpts["flexFallback"] !== void 0) {
|
|
221
|
+
if (typeof googleOpts["flexFallback"] !== "boolean") {
|
|
222
|
+
throw badGoogleProviderOptions(
|
|
223
|
+
`providerOptions.google.flexFallback must be a boolean for model "${model}".`
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
mapped.flexFallback = googleOpts["flexFallback"];
|
|
227
|
+
}
|
|
214
228
|
if (googleOpts["httpOptions"] !== void 0) {
|
|
215
229
|
if (!isPlainRecord(googleOpts["httpOptions"])) {
|
|
216
230
|
throw badGoogleProviderOptions(
|
|
@@ -347,6 +361,38 @@ function mapUsage(meta) {
|
|
|
347
361
|
};
|
|
348
362
|
return usage;
|
|
349
363
|
}
|
|
364
|
+
function mapPart(p) {
|
|
365
|
+
switch (p.kind) {
|
|
366
|
+
case "text":
|
|
367
|
+
return { text: p.text };
|
|
368
|
+
case "inline-media": {
|
|
369
|
+
return {
|
|
370
|
+
inlineData: {
|
|
371
|
+
mimeType: p.mimeType,
|
|
372
|
+
data: p.data
|
|
373
|
+
},
|
|
374
|
+
...p.mediaResolution !== void 0 ? { mediaResolution: { level: mapMediaResolution(p.mediaResolution) } } : {}
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
case "file-uri": {
|
|
378
|
+
return {
|
|
379
|
+
fileData: {
|
|
380
|
+
mimeType: p.mimeType,
|
|
381
|
+
fileUri: p.uri
|
|
382
|
+
},
|
|
383
|
+
...p.mediaResolution !== void 0 ? { mediaResolution: { level: mapMediaResolution(p.mediaResolution) } } : {}
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
default:
|
|
387
|
+
return core.assertNever(p);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
function mapMessagesToGeminiContents(messages) {
|
|
391
|
+
return messages.map((msg) => ({
|
|
392
|
+
role: msg.role === "assistant" ? "model" : "user",
|
|
393
|
+
parts: msg.parts.map(mapPart)
|
|
394
|
+
}));
|
|
395
|
+
}
|
|
350
396
|
function geminiAdapter(opts) {
|
|
351
397
|
return {
|
|
352
398
|
id: "google",
|
|
@@ -359,36 +405,7 @@ function geminiAdapter(opts) {
|
|
|
359
405
|
}
|
|
360
406
|
const warnings = [];
|
|
361
407
|
const model = req.model;
|
|
362
|
-
const
|
|
363
|
-
switch (p.kind) {
|
|
364
|
-
case "text":
|
|
365
|
-
return { text: p.text };
|
|
366
|
-
case "inline-media": {
|
|
367
|
-
return {
|
|
368
|
-
inlineData: {
|
|
369
|
-
mimeType: p.mimeType,
|
|
370
|
-
data: p.data
|
|
371
|
-
},
|
|
372
|
-
...p.mediaResolution !== void 0 ? { mediaResolution: { level: mapMediaResolution(p.mediaResolution) } } : {}
|
|
373
|
-
};
|
|
374
|
-
}
|
|
375
|
-
case "file-uri": {
|
|
376
|
-
return {
|
|
377
|
-
fileData: {
|
|
378
|
-
mimeType: p.mimeType,
|
|
379
|
-
fileUri: p.uri
|
|
380
|
-
},
|
|
381
|
-
...p.mediaResolution !== void 0 ? { mediaResolution: { level: mapMediaResolution(p.mediaResolution) } } : {}
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
default:
|
|
385
|
-
return core.assertNever(p);
|
|
386
|
-
}
|
|
387
|
-
};
|
|
388
|
-
const contents = req.messages.map((msg) => ({
|
|
389
|
-
role: msg.role === "assistant" ? "model" : "user",
|
|
390
|
-
parts: msg.parts.map(mapPart)
|
|
391
|
-
}));
|
|
408
|
+
const contents = mapMessagesToGeminiContents(req.messages);
|
|
392
409
|
const genConfig = req.config;
|
|
393
410
|
const config = {};
|
|
394
411
|
if (req.system !== void 0) {
|
|
@@ -572,7 +589,7 @@ function geminiAdapter(opts) {
|
|
|
572
589
|
cause: classified.cause ?? rawErr,
|
|
573
590
|
...servedServiceTier !== void 0 ? { servedServiceTier } : {}
|
|
574
591
|
});
|
|
575
|
-
if (config.serviceTier === "flex" &&
|
|
592
|
+
if (config.serviceTier === "flex" && googleProviderConfig.flexFallback !== false && isGeminiCapacityError(typed)) {
|
|
576
593
|
config.serviceTier = "standard";
|
|
577
594
|
servedServiceTier = "standard";
|
|
578
595
|
const fallbackTimeout = genConfig.timeoutMs !== void 0 ? genConfig.timeoutMs + TRANSPORT_TIMEOUT_BUFFER_MS : STANDARD_DEFAULT_TIMEOUT_MS;
|
|
@@ -677,9 +694,2006 @@ function geminiAdapter(opts) {
|
|
|
677
694
|
})()
|
|
678
695
|
};
|
|
679
696
|
return result;
|
|
697
|
+
},
|
|
698
|
+
async countTokens(req, ctx) {
|
|
699
|
+
if (req.provider !== "google") {
|
|
700
|
+
throw new core.LlmError(
|
|
701
|
+
`geminiAdapter received a request for provider "${req.provider}", expected "google".`,
|
|
702
|
+
{ kind: "bad_request", retryable: false }
|
|
703
|
+
);
|
|
704
|
+
}
|
|
705
|
+
const contents = mapMessagesToGeminiContents(req.messages);
|
|
706
|
+
const params = {
|
|
707
|
+
model: req.model,
|
|
708
|
+
contents,
|
|
709
|
+
...req.system !== void 0 || ctx.signal !== void 0 ? {
|
|
710
|
+
config: {
|
|
711
|
+
...req.system !== void 0 ? { systemInstruction: { parts: [{ text: req.system }] } } : {},
|
|
712
|
+
...ctx.signal !== void 0 ? { abortSignal: ctx.signal } : {}
|
|
713
|
+
}
|
|
714
|
+
} : {}
|
|
715
|
+
};
|
|
716
|
+
try {
|
|
717
|
+
const buildClient = opts?._clientFactory ?? buildGoogleClient;
|
|
718
|
+
const client = opts?.client !== void 0 ? opts.client : await buildClient(ctx.auth);
|
|
719
|
+
const response = await client.models.countTokens(params);
|
|
720
|
+
if (response.totalTokens === void 0) {
|
|
721
|
+
throw new core.LlmError(
|
|
722
|
+
"Gemini countTokens response is malformed: missing required field: totalTokens",
|
|
723
|
+
{ kind: "server", retryable: true, provider: "google" }
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
const details = response.cachedContentTokenCount !== void 0 ? { cached: response.cachedContentTokenCount } : void 0;
|
|
727
|
+
return {
|
|
728
|
+
totalTokens: response.totalTokens,
|
|
729
|
+
...details !== void 0 ? { details } : {},
|
|
730
|
+
raw: response
|
|
731
|
+
};
|
|
732
|
+
} catch (rawErr) {
|
|
733
|
+
if (rawErr instanceof core.LlmError) throw rawErr;
|
|
734
|
+
const classified = core.classifyError(rawErr);
|
|
735
|
+
throw new core.LlmError(classified.message, {
|
|
736
|
+
kind: classified.kind,
|
|
737
|
+
retryable: classified.retryable,
|
|
738
|
+
...classified.httpStatus !== void 0 ? { httpStatus: classified.httpStatus } : {},
|
|
739
|
+
...classified.retryAfterMs !== void 0 ? { retryAfterMs: classified.retryAfterMs } : {},
|
|
740
|
+
provider: "google",
|
|
741
|
+
cause: classified.cause ?? rawErr
|
|
742
|
+
});
|
|
743
|
+
}
|
|
680
744
|
}
|
|
681
745
|
};
|
|
682
746
|
}
|
|
747
|
+
|
|
748
|
+
// src/pricing.ts
|
|
749
|
+
var pricingVersion = "gemini-2026-06-28";
|
|
750
|
+
var TIER_FACTOR = Object.freeze({
|
|
751
|
+
standard: 1,
|
|
752
|
+
flex: 0.5,
|
|
753
|
+
batch: 0.5
|
|
754
|
+
});
|
|
755
|
+
var GEMINI_PRICING = Object.freeze({
|
|
756
|
+
// ── Gemini 2.5 Pro ── $1.25/$10 (≤200k), $2.50/$15 (>200k); cached $0.125/$0.25
|
|
757
|
+
"gemini-2.5-pro": {
|
|
758
|
+
inputPerM: 125e4,
|
|
759
|
+
cachedPerM: 125e3,
|
|
760
|
+
outputPerM: 1e7,
|
|
761
|
+
gt200k: {
|
|
762
|
+
inputPerM: 25e5,
|
|
763
|
+
cachedPerM: 25e4,
|
|
764
|
+
outputPerM: 15e6
|
|
765
|
+
}
|
|
766
|
+
},
|
|
767
|
+
// ── Gemini 2.5 Flash ── input $0.30 (text), output $2.50, cached $0.03
|
|
768
|
+
"gemini-2.5-flash": {
|
|
769
|
+
inputPerM: 3e5,
|
|
770
|
+
cachedPerM: 3e4,
|
|
771
|
+
outputPerM: 25e5
|
|
772
|
+
},
|
|
773
|
+
// ── Gemini 2.5 Flash-Lite ── input $0.10 (text), output $0.40, cached $0.01
|
|
774
|
+
"gemini-2.5-flash-lite": {
|
|
775
|
+
inputPerM: 1e5,
|
|
776
|
+
cachedPerM: 1e4,
|
|
777
|
+
outputPerM: 4e5
|
|
778
|
+
},
|
|
779
|
+
// ── Gemini 3.5 Flash ── input $1.50, output $9.00, cached $0.15
|
|
780
|
+
"gemini-3.5-flash": {
|
|
781
|
+
inputPerM: 15e5,
|
|
782
|
+
cachedPerM: 15e4,
|
|
783
|
+
outputPerM: 9e6
|
|
784
|
+
},
|
|
785
|
+
// ── Gemini 3.1 Flash-Lite ── input $0.25 (text), output $1.50, cached $0.025
|
|
786
|
+
"gemini-3.1-flash-lite": {
|
|
787
|
+
inputPerM: 25e4,
|
|
788
|
+
cachedPerM: 25e3,
|
|
789
|
+
outputPerM: 15e5
|
|
790
|
+
},
|
|
791
|
+
// ── Gemini 3.1 Pro (preview) ── $2.00/$12 (≤200k), $4.00/$18 (>200k); cached $0.20/$0.40
|
|
792
|
+
"gemini-3.1-pro-preview": {
|
|
793
|
+
inputPerM: 2e6,
|
|
794
|
+
cachedPerM: 2e5,
|
|
795
|
+
outputPerM: 12e6,
|
|
796
|
+
gt200k: {
|
|
797
|
+
inputPerM: 4e6,
|
|
798
|
+
cachedPerM: 4e5,
|
|
799
|
+
outputPerM: 18e6
|
|
800
|
+
}
|
|
801
|
+
},
|
|
802
|
+
// ── Gemini 3 Flash (preview) ── input $0.50, output $3.00, cached $0.05 (90% discount)
|
|
803
|
+
"gemini-3-flash-preview": {
|
|
804
|
+
inputPerM: 5e5,
|
|
805
|
+
cachedPerM: 5e4,
|
|
806
|
+
outputPerM: 3e6
|
|
807
|
+
}
|
|
808
|
+
});
|
|
809
|
+
|
|
810
|
+
// src/cost.ts
|
|
811
|
+
function lookupRates(model) {
|
|
812
|
+
const exact = GEMINI_PRICING[model];
|
|
813
|
+
if (exact !== void 0) return exact;
|
|
814
|
+
let bestKey = "";
|
|
815
|
+
let bestRates;
|
|
816
|
+
for (const key of Object.keys(GEMINI_PRICING)) {
|
|
817
|
+
if (model.startsWith(key) && key.length > bestKey.length) {
|
|
818
|
+
bestKey = key;
|
|
819
|
+
bestRates = GEMINI_PRICING[key];
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
return bestRates;
|
|
823
|
+
}
|
|
824
|
+
function geminiPricingSource() {
|
|
825
|
+
return {
|
|
826
|
+
version: pricingVersion,
|
|
827
|
+
price(model, usage, tier) {
|
|
828
|
+
return core.computeCost(model, usage, tier, lookupRates, TIER_FACTOR, pricingVersion);
|
|
829
|
+
},
|
|
830
|
+
hasModel(model) {
|
|
831
|
+
return lookupRates(model) !== void 0;
|
|
832
|
+
},
|
|
833
|
+
listModels() {
|
|
834
|
+
return Object.keys(GEMINI_PRICING);
|
|
835
|
+
}
|
|
836
|
+
};
|
|
837
|
+
}
|
|
838
|
+
var Gemini25ProConfigSchema = zod.z.union([
|
|
839
|
+
zod.z.strictObject({
|
|
840
|
+
temperature: zod.z.number().min(0).max(2).optional().meta({
|
|
841
|
+
title: "Temperature",
|
|
842
|
+
description: "Sampling temperature for gemini-2.5-pro.",
|
|
843
|
+
examples: [0.7]
|
|
844
|
+
}),
|
|
845
|
+
topP: zod.z.number().min(0).max(1).optional().meta({
|
|
846
|
+
title: "Top P",
|
|
847
|
+
description: "Nucleus sampling probability for gemini-2.5-pro."
|
|
848
|
+
}),
|
|
849
|
+
topK: zod.z.number().int().positive().optional().meta({
|
|
850
|
+
title: "Top K",
|
|
851
|
+
description: "Top-k sampling limit for gemini-2.5-pro."
|
|
852
|
+
}),
|
|
853
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
854
|
+
title: "Max Output Tokens",
|
|
855
|
+
description: "Maximum output token cap for gemini-2.5-pro."
|
|
856
|
+
}),
|
|
857
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
858
|
+
title: "Stop Sequences",
|
|
859
|
+
description: "Up to five stop sequences for gemini-2.5-pro."
|
|
860
|
+
}),
|
|
861
|
+
serviceTier: zod.z.literal("flex").meta({
|
|
862
|
+
title: "Service Tier",
|
|
863
|
+
description: "Explicit flex tier for gemini-2.5-pro."
|
|
864
|
+
}),
|
|
865
|
+
reasoning: zod.z.union([
|
|
866
|
+
zod.z.strictObject({
|
|
867
|
+
effort: zod.z.enum(["low", "medium", "high"]).meta({
|
|
868
|
+
title: "Reasoning Effort",
|
|
869
|
+
description: "Reasoning effort for gemini-2.5-pro. Thinking off is not supported."
|
|
870
|
+
}),
|
|
871
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
872
|
+
title: "Include Thoughts",
|
|
873
|
+
description: "Return provider thought summaries when supported."
|
|
874
|
+
})
|
|
875
|
+
}),
|
|
876
|
+
zod.z.strictObject({
|
|
877
|
+
budgetTokens: zod.z.number().int().min(128).max(32768).meta({
|
|
878
|
+
title: "Reasoning Budget Tokens",
|
|
879
|
+
description: "thinkingBudget token range for gemini-2.5-pro."
|
|
880
|
+
}),
|
|
881
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
882
|
+
title: "Include Thoughts",
|
|
883
|
+
description: "Return provider thought summaries when supported."
|
|
884
|
+
})
|
|
885
|
+
}),
|
|
886
|
+
zod.z.strictObject({
|
|
887
|
+
includeThoughts: zod.z.boolean().meta({
|
|
888
|
+
title: "Include Thoughts",
|
|
889
|
+
description: "Return provider thought summaries when supported."
|
|
890
|
+
})
|
|
891
|
+
})
|
|
892
|
+
]).optional().meta({
|
|
893
|
+
title: "Reasoning",
|
|
894
|
+
description: "Gemini 2.5 Pro thinkingBudget configuration."
|
|
895
|
+
}),
|
|
896
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
897
|
+
title: "Timeout",
|
|
898
|
+
description: "Logical request timeout in milliseconds."
|
|
899
|
+
}),
|
|
900
|
+
providerOptions: zod.z.strictObject({
|
|
901
|
+
google: zod.z.strictObject({
|
|
902
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
903
|
+
title: "Cached Content",
|
|
904
|
+
description: "Google cached content resource name."
|
|
905
|
+
}),
|
|
906
|
+
safetySettings: zod.z.array(
|
|
907
|
+
zod.z.strictObject({
|
|
908
|
+
category: zod.z.string().min(1).meta({
|
|
909
|
+
title: "Safety Category",
|
|
910
|
+
description: "Google safety category identifier."
|
|
911
|
+
}),
|
|
912
|
+
threshold: zod.z.string().min(1).meta({
|
|
913
|
+
title: "Safety Threshold",
|
|
914
|
+
description: "Google safety threshold identifier."
|
|
915
|
+
})
|
|
916
|
+
})
|
|
917
|
+
).optional().meta({
|
|
918
|
+
title: "Safety Settings",
|
|
919
|
+
description: "Allowlisted Google safety settings."
|
|
920
|
+
}),
|
|
921
|
+
tools: zod.z.array(
|
|
922
|
+
zod.z.strictObject({
|
|
923
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
924
|
+
title: "Google Search",
|
|
925
|
+
description: "Google Search grounding tool."
|
|
926
|
+
})
|
|
927
|
+
})
|
|
928
|
+
).min(1).optional().meta({
|
|
929
|
+
title: "Tools",
|
|
930
|
+
description: "Allowlisted Google tools for gemini-2.5-pro."
|
|
931
|
+
}),
|
|
932
|
+
httpOptions: zod.z.strictObject({
|
|
933
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
934
|
+
title: "HTTP Timeout",
|
|
935
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
936
|
+
})
|
|
937
|
+
}).optional().meta({
|
|
938
|
+
title: "HTTP Options",
|
|
939
|
+
description: "Allowlisted Google transport options."
|
|
940
|
+
}),
|
|
941
|
+
flexFallback: zod.z.boolean().optional().meta({
|
|
942
|
+
title: "Flex Fallback",
|
|
943
|
+
description: "Allow provider fallback from flex when flex was explicitly selected."
|
|
944
|
+
})
|
|
945
|
+
}).optional().meta({
|
|
946
|
+
title: "Google Provider Options",
|
|
947
|
+
description: "Allowlisted Google provider options for gemini-2.5-pro."
|
|
948
|
+
})
|
|
949
|
+
}).optional().meta({
|
|
950
|
+
title: "Provider Options",
|
|
951
|
+
description: "Provider-specific options accepted for gemini-2.5-pro."
|
|
952
|
+
})
|
|
953
|
+
}),
|
|
954
|
+
zod.z.strictObject({
|
|
955
|
+
temperature: zod.z.number().min(0).max(2).optional().meta({
|
|
956
|
+
title: "Temperature",
|
|
957
|
+
description: "Sampling temperature for gemini-2.5-pro.",
|
|
958
|
+
examples: [0.7]
|
|
959
|
+
}),
|
|
960
|
+
topP: zod.z.number().min(0).max(1).optional().meta({
|
|
961
|
+
title: "Top P",
|
|
962
|
+
description: "Nucleus sampling probability for gemini-2.5-pro."
|
|
963
|
+
}),
|
|
964
|
+
topK: zod.z.number().int().positive().optional().meta({
|
|
965
|
+
title: "Top K",
|
|
966
|
+
description: "Top-k sampling limit for gemini-2.5-pro."
|
|
967
|
+
}),
|
|
968
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
969
|
+
title: "Max Output Tokens",
|
|
970
|
+
description: "Maximum output token cap for gemini-2.5-pro."
|
|
971
|
+
}),
|
|
972
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
973
|
+
title: "Stop Sequences",
|
|
974
|
+
description: "Up to five stop sequences for gemini-2.5-pro."
|
|
975
|
+
}),
|
|
976
|
+
serviceTier: zod.z.literal("standard").optional().meta({
|
|
977
|
+
title: "Service Tier",
|
|
978
|
+
description: "Standard tier or omitted tier for gemini-2.5-pro."
|
|
979
|
+
}),
|
|
980
|
+
reasoning: zod.z.union([
|
|
981
|
+
zod.z.strictObject({
|
|
982
|
+
effort: zod.z.enum(["low", "medium", "high"]).meta({
|
|
983
|
+
title: "Reasoning Effort",
|
|
984
|
+
description: "Reasoning effort for gemini-2.5-pro. Thinking off is not supported."
|
|
985
|
+
}),
|
|
986
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
987
|
+
title: "Include Thoughts",
|
|
988
|
+
description: "Return provider thought summaries when supported."
|
|
989
|
+
})
|
|
990
|
+
}),
|
|
991
|
+
zod.z.strictObject({
|
|
992
|
+
budgetTokens: zod.z.number().int().min(128).max(32768).meta({
|
|
993
|
+
title: "Reasoning Budget Tokens",
|
|
994
|
+
description: "thinkingBudget token range for gemini-2.5-pro."
|
|
995
|
+
}),
|
|
996
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
997
|
+
title: "Include Thoughts",
|
|
998
|
+
description: "Return provider thought summaries when supported."
|
|
999
|
+
})
|
|
1000
|
+
}),
|
|
1001
|
+
zod.z.strictObject({
|
|
1002
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1003
|
+
title: "Include Thoughts",
|
|
1004
|
+
description: "Return provider thought summaries when supported."
|
|
1005
|
+
})
|
|
1006
|
+
})
|
|
1007
|
+
]).optional().meta({
|
|
1008
|
+
title: "Reasoning",
|
|
1009
|
+
description: "Gemini 2.5 Pro thinkingBudget configuration."
|
|
1010
|
+
}),
|
|
1011
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1012
|
+
title: "Timeout",
|
|
1013
|
+
description: "Logical request timeout in milliseconds."
|
|
1014
|
+
}),
|
|
1015
|
+
providerOptions: zod.z.strictObject({
|
|
1016
|
+
google: zod.z.strictObject({
|
|
1017
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1018
|
+
title: "Cached Content",
|
|
1019
|
+
description: "Google cached content resource name."
|
|
1020
|
+
}),
|
|
1021
|
+
safetySettings: zod.z.array(
|
|
1022
|
+
zod.z.strictObject({
|
|
1023
|
+
category: zod.z.string().min(1).meta({
|
|
1024
|
+
title: "Safety Category",
|
|
1025
|
+
description: "Google safety category identifier."
|
|
1026
|
+
}),
|
|
1027
|
+
threshold: zod.z.string().min(1).meta({
|
|
1028
|
+
title: "Safety Threshold",
|
|
1029
|
+
description: "Google safety threshold identifier."
|
|
1030
|
+
})
|
|
1031
|
+
})
|
|
1032
|
+
).optional().meta({
|
|
1033
|
+
title: "Safety Settings",
|
|
1034
|
+
description: "Allowlisted Google safety settings."
|
|
1035
|
+
}),
|
|
1036
|
+
tools: zod.z.array(
|
|
1037
|
+
zod.z.strictObject({
|
|
1038
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1039
|
+
title: "Google Search",
|
|
1040
|
+
description: "Google Search grounding tool."
|
|
1041
|
+
})
|
|
1042
|
+
})
|
|
1043
|
+
).min(1).optional().meta({
|
|
1044
|
+
title: "Tools",
|
|
1045
|
+
description: "Allowlisted Google tools for gemini-2.5-pro."
|
|
1046
|
+
}),
|
|
1047
|
+
httpOptions: zod.z.strictObject({
|
|
1048
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1049
|
+
title: "HTTP Timeout",
|
|
1050
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1051
|
+
})
|
|
1052
|
+
}).optional().meta({
|
|
1053
|
+
title: "HTTP Options",
|
|
1054
|
+
description: "Allowlisted Google transport options."
|
|
1055
|
+
})
|
|
1056
|
+
}).optional().meta({
|
|
1057
|
+
title: "Google Provider Options",
|
|
1058
|
+
description: "Allowlisted Google provider options for gemini-2.5-pro."
|
|
1059
|
+
})
|
|
1060
|
+
}).optional().meta({
|
|
1061
|
+
title: "Provider Options",
|
|
1062
|
+
description: "Provider-specific options accepted for gemini-2.5-pro."
|
|
1063
|
+
})
|
|
1064
|
+
})
|
|
1065
|
+
]).meta({
|
|
1066
|
+
title: "Gemini25ProConfig",
|
|
1067
|
+
description: "Strict generateContent config for model gemini-2.5-pro. Budget reasoning, tunable sampling, flex/standard tiers, structured output, grounding, priced.",
|
|
1068
|
+
examples: [{ serviceTier: "flex", temperature: 0.7, reasoning: { effort: "high" } }]
|
|
1069
|
+
});
|
|
1070
|
+
var Gemini25FlashConfigSchema = zod.z.union([
|
|
1071
|
+
zod.z.strictObject({
|
|
1072
|
+
temperature: zod.z.number().min(0).max(2).optional().meta({
|
|
1073
|
+
title: "Temperature",
|
|
1074
|
+
description: "Sampling temperature for gemini-2.5-flash.",
|
|
1075
|
+
examples: [0.7]
|
|
1076
|
+
}),
|
|
1077
|
+
topP: zod.z.number().min(0).max(1).optional().meta({
|
|
1078
|
+
title: "Top P",
|
|
1079
|
+
description: "Nucleus sampling probability for gemini-2.5-flash."
|
|
1080
|
+
}),
|
|
1081
|
+
topK: zod.z.number().int().positive().optional().meta({
|
|
1082
|
+
title: "Top K",
|
|
1083
|
+
description: "Top-k sampling limit for gemini-2.5-flash."
|
|
1084
|
+
}),
|
|
1085
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1086
|
+
title: "Max Output Tokens",
|
|
1087
|
+
description: "Maximum output token cap for gemini-2.5-flash."
|
|
1088
|
+
}),
|
|
1089
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1090
|
+
title: "Stop Sequences",
|
|
1091
|
+
description: "Up to five stop sequences for gemini-2.5-flash."
|
|
1092
|
+
}),
|
|
1093
|
+
serviceTier: zod.z.literal("flex").meta({
|
|
1094
|
+
title: "Service Tier",
|
|
1095
|
+
description: "Explicit flex tier for gemini-2.5-flash."
|
|
1096
|
+
}),
|
|
1097
|
+
reasoning: zod.z.union([
|
|
1098
|
+
zod.z.strictObject({
|
|
1099
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
1100
|
+
title: "Reasoning Effort",
|
|
1101
|
+
description: "Reasoning effort for gemini-2.5-flash."
|
|
1102
|
+
}),
|
|
1103
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1104
|
+
title: "Include Thoughts",
|
|
1105
|
+
description: "Return provider thought summaries when supported."
|
|
1106
|
+
})
|
|
1107
|
+
}),
|
|
1108
|
+
zod.z.strictObject({
|
|
1109
|
+
budgetTokens: zod.z.number().int().min(0).max(24576).meta({
|
|
1110
|
+
title: "Reasoning Budget Tokens",
|
|
1111
|
+
description: "thinkingBudget token range for gemini-2.5-flash."
|
|
1112
|
+
}),
|
|
1113
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1114
|
+
title: "Include Thoughts",
|
|
1115
|
+
description: "Return provider thought summaries when supported."
|
|
1116
|
+
})
|
|
1117
|
+
}),
|
|
1118
|
+
zod.z.strictObject({
|
|
1119
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1120
|
+
title: "Include Thoughts",
|
|
1121
|
+
description: "Return provider thought summaries when supported."
|
|
1122
|
+
})
|
|
1123
|
+
})
|
|
1124
|
+
]).optional().meta({
|
|
1125
|
+
title: "Reasoning",
|
|
1126
|
+
description: "Gemini 2.5 Flash thinkingBudget configuration."
|
|
1127
|
+
}),
|
|
1128
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1129
|
+
title: "Timeout",
|
|
1130
|
+
description: "Logical request timeout in milliseconds."
|
|
1131
|
+
}),
|
|
1132
|
+
providerOptions: zod.z.strictObject({
|
|
1133
|
+
google: zod.z.strictObject({
|
|
1134
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1135
|
+
title: "Cached Content",
|
|
1136
|
+
description: "Google cached content resource name."
|
|
1137
|
+
}),
|
|
1138
|
+
safetySettings: zod.z.array(
|
|
1139
|
+
zod.z.strictObject({
|
|
1140
|
+
category: zod.z.string().min(1).meta({
|
|
1141
|
+
title: "Safety Category",
|
|
1142
|
+
description: "Google safety category identifier."
|
|
1143
|
+
}),
|
|
1144
|
+
threshold: zod.z.string().min(1).meta({
|
|
1145
|
+
title: "Safety Threshold",
|
|
1146
|
+
description: "Google safety threshold identifier."
|
|
1147
|
+
})
|
|
1148
|
+
})
|
|
1149
|
+
).optional().meta({
|
|
1150
|
+
title: "Safety Settings",
|
|
1151
|
+
description: "Allowlisted Google safety settings."
|
|
1152
|
+
}),
|
|
1153
|
+
tools: zod.z.array(
|
|
1154
|
+
zod.z.strictObject({
|
|
1155
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1156
|
+
title: "Google Search",
|
|
1157
|
+
description: "Google Search grounding tool."
|
|
1158
|
+
})
|
|
1159
|
+
})
|
|
1160
|
+
).min(1).optional().meta({
|
|
1161
|
+
title: "Tools",
|
|
1162
|
+
description: "Allowlisted Google tools for gemini-2.5-flash."
|
|
1163
|
+
}),
|
|
1164
|
+
httpOptions: zod.z.strictObject({
|
|
1165
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1166
|
+
title: "HTTP Timeout",
|
|
1167
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1168
|
+
})
|
|
1169
|
+
}).optional().meta({
|
|
1170
|
+
title: "HTTP Options",
|
|
1171
|
+
description: "Allowlisted Google transport options."
|
|
1172
|
+
}),
|
|
1173
|
+
flexFallback: zod.z.boolean().optional().meta({
|
|
1174
|
+
title: "Flex Fallback",
|
|
1175
|
+
description: "Allow provider fallback from flex when flex was explicitly selected."
|
|
1176
|
+
})
|
|
1177
|
+
}).optional().meta({
|
|
1178
|
+
title: "Google Provider Options",
|
|
1179
|
+
description: "Allowlisted Google provider options for gemini-2.5-flash."
|
|
1180
|
+
})
|
|
1181
|
+
}).optional().meta({
|
|
1182
|
+
title: "Provider Options",
|
|
1183
|
+
description: "Provider-specific options accepted for gemini-2.5-flash."
|
|
1184
|
+
})
|
|
1185
|
+
}),
|
|
1186
|
+
zod.z.strictObject({
|
|
1187
|
+
temperature: zod.z.number().min(0).max(2).optional().meta({
|
|
1188
|
+
title: "Temperature",
|
|
1189
|
+
description: "Sampling temperature for gemini-2.5-flash.",
|
|
1190
|
+
examples: [0.7]
|
|
1191
|
+
}),
|
|
1192
|
+
topP: zod.z.number().min(0).max(1).optional().meta({
|
|
1193
|
+
title: "Top P",
|
|
1194
|
+
description: "Nucleus sampling probability for gemini-2.5-flash."
|
|
1195
|
+
}),
|
|
1196
|
+
topK: zod.z.number().int().positive().optional().meta({
|
|
1197
|
+
title: "Top K",
|
|
1198
|
+
description: "Top-k sampling limit for gemini-2.5-flash."
|
|
1199
|
+
}),
|
|
1200
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1201
|
+
title: "Max Output Tokens",
|
|
1202
|
+
description: "Maximum output token cap for gemini-2.5-flash."
|
|
1203
|
+
}),
|
|
1204
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1205
|
+
title: "Stop Sequences",
|
|
1206
|
+
description: "Up to five stop sequences for gemini-2.5-flash."
|
|
1207
|
+
}),
|
|
1208
|
+
serviceTier: zod.z.literal("standard").optional().meta({
|
|
1209
|
+
title: "Service Tier",
|
|
1210
|
+
description: "Standard tier or omitted tier for gemini-2.5-flash."
|
|
1211
|
+
}),
|
|
1212
|
+
reasoning: zod.z.union([
|
|
1213
|
+
zod.z.strictObject({
|
|
1214
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
1215
|
+
title: "Reasoning Effort",
|
|
1216
|
+
description: "Reasoning effort for gemini-2.5-flash."
|
|
1217
|
+
}),
|
|
1218
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1219
|
+
title: "Include Thoughts",
|
|
1220
|
+
description: "Return provider thought summaries when supported."
|
|
1221
|
+
})
|
|
1222
|
+
}),
|
|
1223
|
+
zod.z.strictObject({
|
|
1224
|
+
budgetTokens: zod.z.number().int().min(0).max(24576).meta({
|
|
1225
|
+
title: "Reasoning Budget Tokens",
|
|
1226
|
+
description: "thinkingBudget token range for gemini-2.5-flash."
|
|
1227
|
+
}),
|
|
1228
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1229
|
+
title: "Include Thoughts",
|
|
1230
|
+
description: "Return provider thought summaries when supported."
|
|
1231
|
+
})
|
|
1232
|
+
}),
|
|
1233
|
+
zod.z.strictObject({
|
|
1234
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1235
|
+
title: "Include Thoughts",
|
|
1236
|
+
description: "Return provider thought summaries when supported."
|
|
1237
|
+
})
|
|
1238
|
+
})
|
|
1239
|
+
]).optional().meta({
|
|
1240
|
+
title: "Reasoning",
|
|
1241
|
+
description: "Gemini 2.5 Flash thinkingBudget configuration."
|
|
1242
|
+
}),
|
|
1243
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1244
|
+
title: "Timeout",
|
|
1245
|
+
description: "Logical request timeout in milliseconds."
|
|
1246
|
+
}),
|
|
1247
|
+
providerOptions: zod.z.strictObject({
|
|
1248
|
+
google: zod.z.strictObject({
|
|
1249
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1250
|
+
title: "Cached Content",
|
|
1251
|
+
description: "Google cached content resource name."
|
|
1252
|
+
}),
|
|
1253
|
+
safetySettings: zod.z.array(
|
|
1254
|
+
zod.z.strictObject({
|
|
1255
|
+
category: zod.z.string().min(1).meta({
|
|
1256
|
+
title: "Safety Category",
|
|
1257
|
+
description: "Google safety category identifier."
|
|
1258
|
+
}),
|
|
1259
|
+
threshold: zod.z.string().min(1).meta({
|
|
1260
|
+
title: "Safety Threshold",
|
|
1261
|
+
description: "Google safety threshold identifier."
|
|
1262
|
+
})
|
|
1263
|
+
})
|
|
1264
|
+
).optional().meta({
|
|
1265
|
+
title: "Safety Settings",
|
|
1266
|
+
description: "Allowlisted Google safety settings."
|
|
1267
|
+
}),
|
|
1268
|
+
tools: zod.z.array(
|
|
1269
|
+
zod.z.strictObject({
|
|
1270
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1271
|
+
title: "Google Search",
|
|
1272
|
+
description: "Google Search grounding tool."
|
|
1273
|
+
})
|
|
1274
|
+
})
|
|
1275
|
+
).min(1).optional().meta({
|
|
1276
|
+
title: "Tools",
|
|
1277
|
+
description: "Allowlisted Google tools for gemini-2.5-flash."
|
|
1278
|
+
}),
|
|
1279
|
+
httpOptions: zod.z.strictObject({
|
|
1280
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1281
|
+
title: "HTTP Timeout",
|
|
1282
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1283
|
+
})
|
|
1284
|
+
}).optional().meta({
|
|
1285
|
+
title: "HTTP Options",
|
|
1286
|
+
description: "Allowlisted Google transport options."
|
|
1287
|
+
})
|
|
1288
|
+
}).optional().meta({
|
|
1289
|
+
title: "Google Provider Options",
|
|
1290
|
+
description: "Allowlisted Google provider options for gemini-2.5-flash."
|
|
1291
|
+
})
|
|
1292
|
+
}).optional().meta({
|
|
1293
|
+
title: "Provider Options",
|
|
1294
|
+
description: "Provider-specific options accepted for gemini-2.5-flash."
|
|
1295
|
+
})
|
|
1296
|
+
})
|
|
1297
|
+
]).meta({
|
|
1298
|
+
title: "Gemini25FlashConfig",
|
|
1299
|
+
description: "Strict generateContent config for model gemini-2.5-flash. Budget reasoning, tunable sampling, flex/standard tiers, structured output, grounding, priced.",
|
|
1300
|
+
examples: [{ serviceTier: "flex", temperature: 0.7, reasoning: { effort: "none" } }]
|
|
1301
|
+
});
|
|
1302
|
+
var Gemini25FlashLiteConfigSchema = zod.z.union([
|
|
1303
|
+
zod.z.strictObject({
|
|
1304
|
+
temperature: zod.z.number().min(0).max(2).optional().meta({
|
|
1305
|
+
title: "Temperature",
|
|
1306
|
+
description: "Sampling temperature for gemini-2.5-flash-lite.",
|
|
1307
|
+
examples: [0.7]
|
|
1308
|
+
}),
|
|
1309
|
+
topP: zod.z.number().min(0).max(1).optional().meta({
|
|
1310
|
+
title: "Top P",
|
|
1311
|
+
description: "Nucleus sampling probability for gemini-2.5-flash-lite."
|
|
1312
|
+
}),
|
|
1313
|
+
topK: zod.z.number().int().positive().optional().meta({
|
|
1314
|
+
title: "Top K",
|
|
1315
|
+
description: "Top-k sampling limit for gemini-2.5-flash-lite."
|
|
1316
|
+
}),
|
|
1317
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1318
|
+
title: "Max Output Tokens",
|
|
1319
|
+
description: "Maximum output token cap for gemini-2.5-flash-lite."
|
|
1320
|
+
}),
|
|
1321
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1322
|
+
title: "Stop Sequences",
|
|
1323
|
+
description: "Up to five stop sequences for gemini-2.5-flash-lite."
|
|
1324
|
+
}),
|
|
1325
|
+
serviceTier: zod.z.literal("flex").meta({
|
|
1326
|
+
title: "Service Tier",
|
|
1327
|
+
description: "Explicit flex tier for gemini-2.5-flash-lite."
|
|
1328
|
+
}),
|
|
1329
|
+
reasoning: zod.z.union([
|
|
1330
|
+
zod.z.strictObject({
|
|
1331
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
1332
|
+
title: "Reasoning Effort",
|
|
1333
|
+
description: "Reasoning effort for gemini-2.5-flash-lite."
|
|
1334
|
+
}),
|
|
1335
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1336
|
+
title: "Include Thoughts",
|
|
1337
|
+
description: "Return provider thought summaries when supported."
|
|
1338
|
+
})
|
|
1339
|
+
}),
|
|
1340
|
+
zod.z.strictObject({
|
|
1341
|
+
budgetTokens: zod.z.union([zod.z.literal(0), zod.z.number().int().min(512).max(24576)]).meta({
|
|
1342
|
+
title: "Reasoning Budget Tokens",
|
|
1343
|
+
description: "thinkingBudget token range for gemini-2.5-flash-lite. Zero disables thinking; non-zero values must be 512..24576."
|
|
1344
|
+
}),
|
|
1345
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1346
|
+
title: "Include Thoughts",
|
|
1347
|
+
description: "Return provider thought summaries when supported."
|
|
1348
|
+
})
|
|
1349
|
+
}),
|
|
1350
|
+
zod.z.strictObject({
|
|
1351
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1352
|
+
title: "Include Thoughts",
|
|
1353
|
+
description: "Return provider thought summaries when supported."
|
|
1354
|
+
})
|
|
1355
|
+
})
|
|
1356
|
+
]).optional().meta({
|
|
1357
|
+
title: "Reasoning",
|
|
1358
|
+
description: "Gemini 2.5 Flash-Lite thinkingBudget configuration."
|
|
1359
|
+
}),
|
|
1360
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1361
|
+
title: "Timeout",
|
|
1362
|
+
description: "Logical request timeout in milliseconds."
|
|
1363
|
+
}),
|
|
1364
|
+
providerOptions: zod.z.strictObject({
|
|
1365
|
+
google: zod.z.strictObject({
|
|
1366
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1367
|
+
title: "Cached Content",
|
|
1368
|
+
description: "Google cached content resource name."
|
|
1369
|
+
}),
|
|
1370
|
+
safetySettings: zod.z.array(
|
|
1371
|
+
zod.z.strictObject({
|
|
1372
|
+
category: zod.z.string().min(1).meta({
|
|
1373
|
+
title: "Safety Category",
|
|
1374
|
+
description: "Google safety category identifier."
|
|
1375
|
+
}),
|
|
1376
|
+
threshold: zod.z.string().min(1).meta({
|
|
1377
|
+
title: "Safety Threshold",
|
|
1378
|
+
description: "Google safety threshold identifier."
|
|
1379
|
+
})
|
|
1380
|
+
})
|
|
1381
|
+
).optional().meta({
|
|
1382
|
+
title: "Safety Settings",
|
|
1383
|
+
description: "Allowlisted Google safety settings."
|
|
1384
|
+
}),
|
|
1385
|
+
tools: zod.z.array(
|
|
1386
|
+
zod.z.strictObject({
|
|
1387
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1388
|
+
title: "Google Search",
|
|
1389
|
+
description: "Google Search grounding tool."
|
|
1390
|
+
})
|
|
1391
|
+
})
|
|
1392
|
+
).min(1).optional().meta({
|
|
1393
|
+
title: "Tools",
|
|
1394
|
+
description: "Allowlisted Google tools for gemini-2.5-flash-lite."
|
|
1395
|
+
}),
|
|
1396
|
+
httpOptions: zod.z.strictObject({
|
|
1397
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1398
|
+
title: "HTTP Timeout",
|
|
1399
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1400
|
+
})
|
|
1401
|
+
}).optional().meta({
|
|
1402
|
+
title: "HTTP Options",
|
|
1403
|
+
description: "Allowlisted Google transport options."
|
|
1404
|
+
}),
|
|
1405
|
+
flexFallback: zod.z.boolean().optional().meta({
|
|
1406
|
+
title: "Flex Fallback",
|
|
1407
|
+
description: "Allow provider fallback from flex when flex was explicitly selected."
|
|
1408
|
+
})
|
|
1409
|
+
}).optional().meta({
|
|
1410
|
+
title: "Google Provider Options",
|
|
1411
|
+
description: "Allowlisted Google provider options for gemini-2.5-flash-lite."
|
|
1412
|
+
})
|
|
1413
|
+
}).optional().meta({
|
|
1414
|
+
title: "Provider Options",
|
|
1415
|
+
description: "Provider-specific options accepted for gemini-2.5-flash-lite."
|
|
1416
|
+
})
|
|
1417
|
+
}),
|
|
1418
|
+
zod.z.strictObject({
|
|
1419
|
+
temperature: zod.z.number().min(0).max(2).optional().meta({
|
|
1420
|
+
title: "Temperature",
|
|
1421
|
+
description: "Sampling temperature for gemini-2.5-flash-lite.",
|
|
1422
|
+
examples: [0.7]
|
|
1423
|
+
}),
|
|
1424
|
+
topP: zod.z.number().min(0).max(1).optional().meta({
|
|
1425
|
+
title: "Top P",
|
|
1426
|
+
description: "Nucleus sampling probability for gemini-2.5-flash-lite."
|
|
1427
|
+
}),
|
|
1428
|
+
topK: zod.z.number().int().positive().optional().meta({
|
|
1429
|
+
title: "Top K",
|
|
1430
|
+
description: "Top-k sampling limit for gemini-2.5-flash-lite."
|
|
1431
|
+
}),
|
|
1432
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1433
|
+
title: "Max Output Tokens",
|
|
1434
|
+
description: "Maximum output token cap for gemini-2.5-flash-lite."
|
|
1435
|
+
}),
|
|
1436
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1437
|
+
title: "Stop Sequences",
|
|
1438
|
+
description: "Up to five stop sequences for gemini-2.5-flash-lite."
|
|
1439
|
+
}),
|
|
1440
|
+
serviceTier: zod.z.literal("standard").optional().meta({
|
|
1441
|
+
title: "Service Tier",
|
|
1442
|
+
description: "Standard tier or omitted tier for gemini-2.5-flash-lite."
|
|
1443
|
+
}),
|
|
1444
|
+
reasoning: zod.z.union([
|
|
1445
|
+
zod.z.strictObject({
|
|
1446
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
1447
|
+
title: "Reasoning Effort",
|
|
1448
|
+
description: "Reasoning effort for gemini-2.5-flash-lite."
|
|
1449
|
+
}),
|
|
1450
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1451
|
+
title: "Include Thoughts",
|
|
1452
|
+
description: "Return provider thought summaries when supported."
|
|
1453
|
+
})
|
|
1454
|
+
}),
|
|
1455
|
+
zod.z.strictObject({
|
|
1456
|
+
budgetTokens: zod.z.union([zod.z.literal(0), zod.z.number().int().min(512).max(24576)]).meta({
|
|
1457
|
+
title: "Reasoning Budget Tokens",
|
|
1458
|
+
description: "thinkingBudget token range for gemini-2.5-flash-lite. Zero disables thinking; non-zero values must be 512..24576."
|
|
1459
|
+
}),
|
|
1460
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1461
|
+
title: "Include Thoughts",
|
|
1462
|
+
description: "Return provider thought summaries when supported."
|
|
1463
|
+
})
|
|
1464
|
+
}),
|
|
1465
|
+
zod.z.strictObject({
|
|
1466
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1467
|
+
title: "Include Thoughts",
|
|
1468
|
+
description: "Return provider thought summaries when supported."
|
|
1469
|
+
})
|
|
1470
|
+
})
|
|
1471
|
+
]).optional().meta({
|
|
1472
|
+
title: "Reasoning",
|
|
1473
|
+
description: "Gemini 2.5 Flash-Lite thinkingBudget configuration."
|
|
1474
|
+
}),
|
|
1475
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1476
|
+
title: "Timeout",
|
|
1477
|
+
description: "Logical request timeout in milliseconds."
|
|
1478
|
+
}),
|
|
1479
|
+
providerOptions: zod.z.strictObject({
|
|
1480
|
+
google: zod.z.strictObject({
|
|
1481
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1482
|
+
title: "Cached Content",
|
|
1483
|
+
description: "Google cached content resource name."
|
|
1484
|
+
}),
|
|
1485
|
+
safetySettings: zod.z.array(
|
|
1486
|
+
zod.z.strictObject({
|
|
1487
|
+
category: zod.z.string().min(1).meta({
|
|
1488
|
+
title: "Safety Category",
|
|
1489
|
+
description: "Google safety category identifier."
|
|
1490
|
+
}),
|
|
1491
|
+
threshold: zod.z.string().min(1).meta({
|
|
1492
|
+
title: "Safety Threshold",
|
|
1493
|
+
description: "Google safety threshold identifier."
|
|
1494
|
+
})
|
|
1495
|
+
})
|
|
1496
|
+
).optional().meta({
|
|
1497
|
+
title: "Safety Settings",
|
|
1498
|
+
description: "Allowlisted Google safety settings."
|
|
1499
|
+
}),
|
|
1500
|
+
tools: zod.z.array(
|
|
1501
|
+
zod.z.strictObject({
|
|
1502
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1503
|
+
title: "Google Search",
|
|
1504
|
+
description: "Google Search grounding tool."
|
|
1505
|
+
})
|
|
1506
|
+
})
|
|
1507
|
+
).min(1).optional().meta({
|
|
1508
|
+
title: "Tools",
|
|
1509
|
+
description: "Allowlisted Google tools for gemini-2.5-flash-lite."
|
|
1510
|
+
}),
|
|
1511
|
+
httpOptions: zod.z.strictObject({
|
|
1512
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1513
|
+
title: "HTTP Timeout",
|
|
1514
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1515
|
+
})
|
|
1516
|
+
}).optional().meta({
|
|
1517
|
+
title: "HTTP Options",
|
|
1518
|
+
description: "Allowlisted Google transport options."
|
|
1519
|
+
})
|
|
1520
|
+
}).optional().meta({
|
|
1521
|
+
title: "Google Provider Options",
|
|
1522
|
+
description: "Allowlisted Google provider options for gemini-2.5-flash-lite."
|
|
1523
|
+
})
|
|
1524
|
+
}).optional().meta({
|
|
1525
|
+
title: "Provider Options",
|
|
1526
|
+
description: "Provider-specific options accepted for gemini-2.5-flash-lite."
|
|
1527
|
+
})
|
|
1528
|
+
})
|
|
1529
|
+
]).meta({
|
|
1530
|
+
title: "Gemini25FlashLiteConfig",
|
|
1531
|
+
description: "Strict generateContent config for model gemini-2.5-flash-lite. Budget reasoning, tunable sampling, flex/standard tiers, structured output, grounding, priced.",
|
|
1532
|
+
examples: [{ serviceTier: "flex", temperature: 0.7, reasoning: { budgetTokens: 0 } }]
|
|
1533
|
+
});
|
|
1534
|
+
var Gemini35FlashConfigSchema = zod.z.union([
|
|
1535
|
+
zod.z.strictObject({
|
|
1536
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1537
|
+
title: "Max Output Tokens",
|
|
1538
|
+
description: "Maximum output token cap for gemini-3.5-flash."
|
|
1539
|
+
}),
|
|
1540
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1541
|
+
title: "Stop Sequences",
|
|
1542
|
+
description: "Up to five stop sequences for gemini-3.5-flash."
|
|
1543
|
+
}),
|
|
1544
|
+
serviceTier: zod.z.literal("flex").meta({
|
|
1545
|
+
title: "Service Tier",
|
|
1546
|
+
description: "Explicit flex tier for gemini-3.5-flash."
|
|
1547
|
+
}),
|
|
1548
|
+
reasoning: zod.z.union([
|
|
1549
|
+
zod.z.strictObject({
|
|
1550
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
1551
|
+
title: "Reasoning Effort",
|
|
1552
|
+
description: "Reasoning effort for gemini-3.5-flash; none maps to minimal thinking."
|
|
1553
|
+
}),
|
|
1554
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1555
|
+
title: "Include Thoughts",
|
|
1556
|
+
description: "Return provider thought summaries when supported."
|
|
1557
|
+
})
|
|
1558
|
+
}),
|
|
1559
|
+
zod.z.strictObject({
|
|
1560
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1561
|
+
title: "Include Thoughts",
|
|
1562
|
+
description: "Return provider thought summaries when supported."
|
|
1563
|
+
})
|
|
1564
|
+
})
|
|
1565
|
+
]).optional().meta({
|
|
1566
|
+
title: "Reasoning",
|
|
1567
|
+
description: "Gemini 3.5 Flash thinkingLevel configuration."
|
|
1568
|
+
}),
|
|
1569
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1570
|
+
title: "Timeout",
|
|
1571
|
+
description: "Logical request timeout in milliseconds."
|
|
1572
|
+
}),
|
|
1573
|
+
providerOptions: zod.z.strictObject({
|
|
1574
|
+
google: zod.z.strictObject({
|
|
1575
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1576
|
+
title: "Cached Content",
|
|
1577
|
+
description: "Google cached content resource name."
|
|
1578
|
+
}),
|
|
1579
|
+
safetySettings: zod.z.array(
|
|
1580
|
+
zod.z.strictObject({
|
|
1581
|
+
category: zod.z.string().min(1).meta({
|
|
1582
|
+
title: "Safety Category",
|
|
1583
|
+
description: "Google safety category identifier."
|
|
1584
|
+
}),
|
|
1585
|
+
threshold: zod.z.string().min(1).meta({
|
|
1586
|
+
title: "Safety Threshold",
|
|
1587
|
+
description: "Google safety threshold identifier."
|
|
1588
|
+
})
|
|
1589
|
+
})
|
|
1590
|
+
).optional().meta({
|
|
1591
|
+
title: "Safety Settings",
|
|
1592
|
+
description: "Allowlisted Google safety settings."
|
|
1593
|
+
}),
|
|
1594
|
+
tools: zod.z.array(
|
|
1595
|
+
zod.z.strictObject({
|
|
1596
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1597
|
+
title: "Google Search",
|
|
1598
|
+
description: "Google Search grounding tool."
|
|
1599
|
+
})
|
|
1600
|
+
})
|
|
1601
|
+
).min(1).optional().meta({
|
|
1602
|
+
title: "Tools",
|
|
1603
|
+
description: "Allowlisted Google tools for gemini-3.5-flash."
|
|
1604
|
+
}),
|
|
1605
|
+
httpOptions: zod.z.strictObject({
|
|
1606
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1607
|
+
title: "HTTP Timeout",
|
|
1608
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1609
|
+
})
|
|
1610
|
+
}).optional().meta({
|
|
1611
|
+
title: "HTTP Options",
|
|
1612
|
+
description: "Allowlisted Google transport options."
|
|
1613
|
+
}),
|
|
1614
|
+
flexFallback: zod.z.boolean().optional().meta({
|
|
1615
|
+
title: "Flex Fallback",
|
|
1616
|
+
description: "Allow provider fallback from flex when flex was explicitly selected."
|
|
1617
|
+
})
|
|
1618
|
+
}).optional().meta({
|
|
1619
|
+
title: "Google Provider Options",
|
|
1620
|
+
description: "Allowlisted Google provider options for gemini-3.5-flash."
|
|
1621
|
+
})
|
|
1622
|
+
}).optional().meta({
|
|
1623
|
+
title: "Provider Options",
|
|
1624
|
+
description: "Provider-specific options accepted for gemini-3.5-flash."
|
|
1625
|
+
})
|
|
1626
|
+
}),
|
|
1627
|
+
zod.z.strictObject({
|
|
1628
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1629
|
+
title: "Max Output Tokens",
|
|
1630
|
+
description: "Maximum output token cap for gemini-3.5-flash."
|
|
1631
|
+
}),
|
|
1632
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1633
|
+
title: "Stop Sequences",
|
|
1634
|
+
description: "Up to five stop sequences for gemini-3.5-flash."
|
|
1635
|
+
}),
|
|
1636
|
+
serviceTier: zod.z.literal("standard").optional().meta({
|
|
1637
|
+
title: "Service Tier",
|
|
1638
|
+
description: "Standard tier or omitted tier for gemini-3.5-flash."
|
|
1639
|
+
}),
|
|
1640
|
+
reasoning: zod.z.union([
|
|
1641
|
+
zod.z.strictObject({
|
|
1642
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
1643
|
+
title: "Reasoning Effort",
|
|
1644
|
+
description: "Reasoning effort for gemini-3.5-flash; none maps to minimal thinking."
|
|
1645
|
+
}),
|
|
1646
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1647
|
+
title: "Include Thoughts",
|
|
1648
|
+
description: "Return provider thought summaries when supported."
|
|
1649
|
+
})
|
|
1650
|
+
}),
|
|
1651
|
+
zod.z.strictObject({
|
|
1652
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1653
|
+
title: "Include Thoughts",
|
|
1654
|
+
description: "Return provider thought summaries when supported."
|
|
1655
|
+
})
|
|
1656
|
+
})
|
|
1657
|
+
]).optional().meta({
|
|
1658
|
+
title: "Reasoning",
|
|
1659
|
+
description: "Gemini 3.5 Flash thinkingLevel configuration."
|
|
1660
|
+
}),
|
|
1661
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1662
|
+
title: "Timeout",
|
|
1663
|
+
description: "Logical request timeout in milliseconds."
|
|
1664
|
+
}),
|
|
1665
|
+
providerOptions: zod.z.strictObject({
|
|
1666
|
+
google: zod.z.strictObject({
|
|
1667
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1668
|
+
title: "Cached Content",
|
|
1669
|
+
description: "Google cached content resource name."
|
|
1670
|
+
}),
|
|
1671
|
+
safetySettings: zod.z.array(
|
|
1672
|
+
zod.z.strictObject({
|
|
1673
|
+
category: zod.z.string().min(1).meta({
|
|
1674
|
+
title: "Safety Category",
|
|
1675
|
+
description: "Google safety category identifier."
|
|
1676
|
+
}),
|
|
1677
|
+
threshold: zod.z.string().min(1).meta({
|
|
1678
|
+
title: "Safety Threshold",
|
|
1679
|
+
description: "Google safety threshold identifier."
|
|
1680
|
+
})
|
|
1681
|
+
})
|
|
1682
|
+
).optional().meta({
|
|
1683
|
+
title: "Safety Settings",
|
|
1684
|
+
description: "Allowlisted Google safety settings."
|
|
1685
|
+
}),
|
|
1686
|
+
tools: zod.z.array(
|
|
1687
|
+
zod.z.strictObject({
|
|
1688
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1689
|
+
title: "Google Search",
|
|
1690
|
+
description: "Google Search grounding tool."
|
|
1691
|
+
})
|
|
1692
|
+
})
|
|
1693
|
+
).min(1).optional().meta({
|
|
1694
|
+
title: "Tools",
|
|
1695
|
+
description: "Allowlisted Google tools for gemini-3.5-flash."
|
|
1696
|
+
}),
|
|
1697
|
+
httpOptions: zod.z.strictObject({
|
|
1698
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1699
|
+
title: "HTTP Timeout",
|
|
1700
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1701
|
+
})
|
|
1702
|
+
}).optional().meta({
|
|
1703
|
+
title: "HTTP Options",
|
|
1704
|
+
description: "Allowlisted Google transport options."
|
|
1705
|
+
})
|
|
1706
|
+
}).optional().meta({
|
|
1707
|
+
title: "Google Provider Options",
|
|
1708
|
+
description: "Allowlisted Google provider options for gemini-3.5-flash."
|
|
1709
|
+
})
|
|
1710
|
+
}).optional().meta({
|
|
1711
|
+
title: "Provider Options",
|
|
1712
|
+
description: "Provider-specific options accepted for gemini-3.5-flash."
|
|
1713
|
+
})
|
|
1714
|
+
})
|
|
1715
|
+
]).meta({
|
|
1716
|
+
title: "Gemini35FlashConfig",
|
|
1717
|
+
description: "Strict generateContent config for model gemini-3.5-flash. Level reasoning, fixed sampling, flex/standard tiers, structured output, grounding, priced.",
|
|
1718
|
+
examples: [{ serviceTier: "flex", reasoning: { effort: "high" } }]
|
|
1719
|
+
});
|
|
1720
|
+
var Gemini31FlashLiteConfigSchema = zod.z.union([
|
|
1721
|
+
zod.z.strictObject({
|
|
1722
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1723
|
+
title: "Max Output Tokens",
|
|
1724
|
+
description: "Maximum output token cap for gemini-3.1-flash-lite."
|
|
1725
|
+
}),
|
|
1726
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1727
|
+
title: "Stop Sequences",
|
|
1728
|
+
description: "Up to five stop sequences for gemini-3.1-flash-lite."
|
|
1729
|
+
}),
|
|
1730
|
+
serviceTier: zod.z.literal("flex").meta({
|
|
1731
|
+
title: "Service Tier",
|
|
1732
|
+
description: "Explicit flex tier for gemini-3.1-flash-lite."
|
|
1733
|
+
}),
|
|
1734
|
+
reasoning: zod.z.union([
|
|
1735
|
+
zod.z.strictObject({
|
|
1736
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
1737
|
+
title: "Reasoning Effort",
|
|
1738
|
+
description: "Reasoning effort for gemini-3.1-flash-lite; none maps to minimal thinking."
|
|
1739
|
+
}),
|
|
1740
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1741
|
+
title: "Include Thoughts",
|
|
1742
|
+
description: "Return provider thought summaries when supported."
|
|
1743
|
+
})
|
|
1744
|
+
}),
|
|
1745
|
+
zod.z.strictObject({
|
|
1746
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1747
|
+
title: "Include Thoughts",
|
|
1748
|
+
description: "Return provider thought summaries when supported."
|
|
1749
|
+
})
|
|
1750
|
+
})
|
|
1751
|
+
]).optional().meta({
|
|
1752
|
+
title: "Reasoning",
|
|
1753
|
+
description: "Gemini 3.1 Flash-Lite thinkingLevel configuration."
|
|
1754
|
+
}),
|
|
1755
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1756
|
+
title: "Timeout",
|
|
1757
|
+
description: "Logical request timeout in milliseconds."
|
|
1758
|
+
}),
|
|
1759
|
+
providerOptions: zod.z.strictObject({
|
|
1760
|
+
google: zod.z.strictObject({
|
|
1761
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1762
|
+
title: "Cached Content",
|
|
1763
|
+
description: "Google cached content resource name."
|
|
1764
|
+
}),
|
|
1765
|
+
safetySettings: zod.z.array(
|
|
1766
|
+
zod.z.strictObject({
|
|
1767
|
+
category: zod.z.string().min(1).meta({
|
|
1768
|
+
title: "Safety Category",
|
|
1769
|
+
description: "Google safety category identifier."
|
|
1770
|
+
}),
|
|
1771
|
+
threshold: zod.z.string().min(1).meta({
|
|
1772
|
+
title: "Safety Threshold",
|
|
1773
|
+
description: "Google safety threshold identifier."
|
|
1774
|
+
})
|
|
1775
|
+
})
|
|
1776
|
+
).optional().meta({
|
|
1777
|
+
title: "Safety Settings",
|
|
1778
|
+
description: "Allowlisted Google safety settings."
|
|
1779
|
+
}),
|
|
1780
|
+
tools: zod.z.array(
|
|
1781
|
+
zod.z.strictObject({
|
|
1782
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1783
|
+
title: "Google Search",
|
|
1784
|
+
description: "Google Search grounding tool."
|
|
1785
|
+
})
|
|
1786
|
+
})
|
|
1787
|
+
).min(1).optional().meta({
|
|
1788
|
+
title: "Tools",
|
|
1789
|
+
description: "Allowlisted Google tools for gemini-3.1-flash-lite."
|
|
1790
|
+
}),
|
|
1791
|
+
httpOptions: zod.z.strictObject({
|
|
1792
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1793
|
+
title: "HTTP Timeout",
|
|
1794
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1795
|
+
})
|
|
1796
|
+
}).optional().meta({
|
|
1797
|
+
title: "HTTP Options",
|
|
1798
|
+
description: "Allowlisted Google transport options."
|
|
1799
|
+
}),
|
|
1800
|
+
flexFallback: zod.z.boolean().optional().meta({
|
|
1801
|
+
title: "Flex Fallback",
|
|
1802
|
+
description: "Allow provider fallback from flex when flex was explicitly selected."
|
|
1803
|
+
})
|
|
1804
|
+
}).optional().meta({
|
|
1805
|
+
title: "Google Provider Options",
|
|
1806
|
+
description: "Allowlisted Google provider options for gemini-3.1-flash-lite."
|
|
1807
|
+
})
|
|
1808
|
+
}).optional().meta({
|
|
1809
|
+
title: "Provider Options",
|
|
1810
|
+
description: "Provider-specific options accepted for gemini-3.1-flash-lite."
|
|
1811
|
+
})
|
|
1812
|
+
}),
|
|
1813
|
+
zod.z.strictObject({
|
|
1814
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1815
|
+
title: "Max Output Tokens",
|
|
1816
|
+
description: "Maximum output token cap for gemini-3.1-flash-lite."
|
|
1817
|
+
}),
|
|
1818
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1819
|
+
title: "Stop Sequences",
|
|
1820
|
+
description: "Up to five stop sequences for gemini-3.1-flash-lite."
|
|
1821
|
+
}),
|
|
1822
|
+
serviceTier: zod.z.literal("standard").optional().meta({
|
|
1823
|
+
title: "Service Tier",
|
|
1824
|
+
description: "Standard tier or omitted tier for gemini-3.1-flash-lite."
|
|
1825
|
+
}),
|
|
1826
|
+
reasoning: zod.z.union([
|
|
1827
|
+
zod.z.strictObject({
|
|
1828
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
1829
|
+
title: "Reasoning Effort",
|
|
1830
|
+
description: "Reasoning effort for gemini-3.1-flash-lite; none maps to minimal thinking."
|
|
1831
|
+
}),
|
|
1832
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1833
|
+
title: "Include Thoughts",
|
|
1834
|
+
description: "Return provider thought summaries when supported."
|
|
1835
|
+
})
|
|
1836
|
+
}),
|
|
1837
|
+
zod.z.strictObject({
|
|
1838
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1839
|
+
title: "Include Thoughts",
|
|
1840
|
+
description: "Return provider thought summaries when supported."
|
|
1841
|
+
})
|
|
1842
|
+
})
|
|
1843
|
+
]).optional().meta({
|
|
1844
|
+
title: "Reasoning",
|
|
1845
|
+
description: "Gemini 3.1 Flash-Lite thinkingLevel configuration."
|
|
1846
|
+
}),
|
|
1847
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1848
|
+
title: "Timeout",
|
|
1849
|
+
description: "Logical request timeout in milliseconds."
|
|
1850
|
+
}),
|
|
1851
|
+
providerOptions: zod.z.strictObject({
|
|
1852
|
+
google: zod.z.strictObject({
|
|
1853
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1854
|
+
title: "Cached Content",
|
|
1855
|
+
description: "Google cached content resource name."
|
|
1856
|
+
}),
|
|
1857
|
+
safetySettings: zod.z.array(
|
|
1858
|
+
zod.z.strictObject({
|
|
1859
|
+
category: zod.z.string().min(1).meta({
|
|
1860
|
+
title: "Safety Category",
|
|
1861
|
+
description: "Google safety category identifier."
|
|
1862
|
+
}),
|
|
1863
|
+
threshold: zod.z.string().min(1).meta({
|
|
1864
|
+
title: "Safety Threshold",
|
|
1865
|
+
description: "Google safety threshold identifier."
|
|
1866
|
+
})
|
|
1867
|
+
})
|
|
1868
|
+
).optional().meta({
|
|
1869
|
+
title: "Safety Settings",
|
|
1870
|
+
description: "Allowlisted Google safety settings."
|
|
1871
|
+
}),
|
|
1872
|
+
tools: zod.z.array(
|
|
1873
|
+
zod.z.strictObject({
|
|
1874
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1875
|
+
title: "Google Search",
|
|
1876
|
+
description: "Google Search grounding tool."
|
|
1877
|
+
})
|
|
1878
|
+
})
|
|
1879
|
+
).min(1).optional().meta({
|
|
1880
|
+
title: "Tools",
|
|
1881
|
+
description: "Allowlisted Google tools for gemini-3.1-flash-lite."
|
|
1882
|
+
}),
|
|
1883
|
+
httpOptions: zod.z.strictObject({
|
|
1884
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1885
|
+
title: "HTTP Timeout",
|
|
1886
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1887
|
+
})
|
|
1888
|
+
}).optional().meta({
|
|
1889
|
+
title: "HTTP Options",
|
|
1890
|
+
description: "Allowlisted Google transport options."
|
|
1891
|
+
})
|
|
1892
|
+
}).optional().meta({
|
|
1893
|
+
title: "Google Provider Options",
|
|
1894
|
+
description: "Allowlisted Google provider options for gemini-3.1-flash-lite."
|
|
1895
|
+
})
|
|
1896
|
+
}).optional().meta({
|
|
1897
|
+
title: "Provider Options",
|
|
1898
|
+
description: "Provider-specific options accepted for gemini-3.1-flash-lite."
|
|
1899
|
+
})
|
|
1900
|
+
})
|
|
1901
|
+
]).meta({
|
|
1902
|
+
title: "Gemini31FlashLiteConfig",
|
|
1903
|
+
description: "Strict generateContent config for model gemini-3.1-flash-lite. Level reasoning, fixed sampling, flex/standard tiers, structured output, grounding, priced.",
|
|
1904
|
+
examples: [{ serviceTier: "flex", reasoning: { effort: "medium" } }]
|
|
1905
|
+
});
|
|
1906
|
+
var Gemini31ProPreviewConfigSchema = zod.z.union([
|
|
1907
|
+
zod.z.strictObject({
|
|
1908
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
1909
|
+
title: "Max Output Tokens",
|
|
1910
|
+
description: "Maximum output token cap for gemini-3.1-pro-preview."
|
|
1911
|
+
}),
|
|
1912
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
1913
|
+
title: "Stop Sequences",
|
|
1914
|
+
description: "Up to five stop sequences for gemini-3.1-pro-preview."
|
|
1915
|
+
}),
|
|
1916
|
+
serviceTier: zod.z.literal("flex").meta({
|
|
1917
|
+
title: "Service Tier",
|
|
1918
|
+
description: "Explicit flex tier for gemini-3.1-pro-preview."
|
|
1919
|
+
}),
|
|
1920
|
+
reasoning: zod.z.union([
|
|
1921
|
+
zod.z.strictObject({
|
|
1922
|
+
effort: zod.z.enum(["low", "medium", "high"]).meta({
|
|
1923
|
+
title: "Reasoning Effort",
|
|
1924
|
+
description: "Reasoning effort for gemini-3.1-pro-preview. Thinking off is not supported."
|
|
1925
|
+
}),
|
|
1926
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
1927
|
+
title: "Include Thoughts",
|
|
1928
|
+
description: "Return provider thought summaries when supported."
|
|
1929
|
+
})
|
|
1930
|
+
}),
|
|
1931
|
+
zod.z.strictObject({
|
|
1932
|
+
includeThoughts: zod.z.boolean().meta({
|
|
1933
|
+
title: "Include Thoughts",
|
|
1934
|
+
description: "Return provider thought summaries when supported."
|
|
1935
|
+
})
|
|
1936
|
+
})
|
|
1937
|
+
]).optional().meta({
|
|
1938
|
+
title: "Reasoning",
|
|
1939
|
+
description: "Gemini 3.1 Pro Preview thinkingLevel configuration."
|
|
1940
|
+
}),
|
|
1941
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
1942
|
+
title: "Timeout",
|
|
1943
|
+
description: "Logical request timeout in milliseconds."
|
|
1944
|
+
}),
|
|
1945
|
+
providerOptions: zod.z.strictObject({
|
|
1946
|
+
google: zod.z.strictObject({
|
|
1947
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
1948
|
+
title: "Cached Content",
|
|
1949
|
+
description: "Google cached content resource name."
|
|
1950
|
+
}),
|
|
1951
|
+
safetySettings: zod.z.array(
|
|
1952
|
+
zod.z.strictObject({
|
|
1953
|
+
category: zod.z.string().min(1).meta({
|
|
1954
|
+
title: "Safety Category",
|
|
1955
|
+
description: "Google safety category identifier."
|
|
1956
|
+
}),
|
|
1957
|
+
threshold: zod.z.string().min(1).meta({
|
|
1958
|
+
title: "Safety Threshold",
|
|
1959
|
+
description: "Google safety threshold identifier."
|
|
1960
|
+
})
|
|
1961
|
+
})
|
|
1962
|
+
).optional().meta({
|
|
1963
|
+
title: "Safety Settings",
|
|
1964
|
+
description: "Allowlisted Google safety settings."
|
|
1965
|
+
}),
|
|
1966
|
+
tools: zod.z.array(
|
|
1967
|
+
zod.z.strictObject({
|
|
1968
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
1969
|
+
title: "Google Search",
|
|
1970
|
+
description: "Google Search grounding tool."
|
|
1971
|
+
})
|
|
1972
|
+
})
|
|
1973
|
+
).min(1).optional().meta({
|
|
1974
|
+
title: "Tools",
|
|
1975
|
+
description: "Allowlisted Google tools for gemini-3.1-pro-preview."
|
|
1976
|
+
}),
|
|
1977
|
+
httpOptions: zod.z.strictObject({
|
|
1978
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
1979
|
+
title: "HTTP Timeout",
|
|
1980
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
1981
|
+
})
|
|
1982
|
+
}).optional().meta({
|
|
1983
|
+
title: "HTTP Options",
|
|
1984
|
+
description: "Allowlisted Google transport options."
|
|
1985
|
+
}),
|
|
1986
|
+
flexFallback: zod.z.boolean().optional().meta({
|
|
1987
|
+
title: "Flex Fallback",
|
|
1988
|
+
description: "Allow provider fallback from flex when flex was explicitly selected."
|
|
1989
|
+
})
|
|
1990
|
+
}).optional().meta({
|
|
1991
|
+
title: "Google Provider Options",
|
|
1992
|
+
description: "Allowlisted Google provider options for gemini-3.1-pro-preview."
|
|
1993
|
+
})
|
|
1994
|
+
}).optional().meta({
|
|
1995
|
+
title: "Provider Options",
|
|
1996
|
+
description: "Provider-specific options accepted for gemini-3.1-pro-preview."
|
|
1997
|
+
})
|
|
1998
|
+
}),
|
|
1999
|
+
zod.z.strictObject({
|
|
2000
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
2001
|
+
title: "Max Output Tokens",
|
|
2002
|
+
description: "Maximum output token cap for gemini-3.1-pro-preview."
|
|
2003
|
+
}),
|
|
2004
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
2005
|
+
title: "Stop Sequences",
|
|
2006
|
+
description: "Up to five stop sequences for gemini-3.1-pro-preview."
|
|
2007
|
+
}),
|
|
2008
|
+
serviceTier: zod.z.literal("standard").optional().meta({
|
|
2009
|
+
title: "Service Tier",
|
|
2010
|
+
description: "Standard tier or omitted tier for gemini-3.1-pro-preview."
|
|
2011
|
+
}),
|
|
2012
|
+
reasoning: zod.z.union([
|
|
2013
|
+
zod.z.strictObject({
|
|
2014
|
+
effort: zod.z.enum(["low", "medium", "high"]).meta({
|
|
2015
|
+
title: "Reasoning Effort",
|
|
2016
|
+
description: "Reasoning effort for gemini-3.1-pro-preview. Thinking off is not supported."
|
|
2017
|
+
}),
|
|
2018
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
2019
|
+
title: "Include Thoughts",
|
|
2020
|
+
description: "Return provider thought summaries when supported."
|
|
2021
|
+
})
|
|
2022
|
+
}),
|
|
2023
|
+
zod.z.strictObject({
|
|
2024
|
+
includeThoughts: zod.z.boolean().meta({
|
|
2025
|
+
title: "Include Thoughts",
|
|
2026
|
+
description: "Return provider thought summaries when supported."
|
|
2027
|
+
})
|
|
2028
|
+
})
|
|
2029
|
+
]).optional().meta({
|
|
2030
|
+
title: "Reasoning",
|
|
2031
|
+
description: "Gemini 3.1 Pro Preview thinkingLevel configuration."
|
|
2032
|
+
}),
|
|
2033
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
2034
|
+
title: "Timeout",
|
|
2035
|
+
description: "Logical request timeout in milliseconds."
|
|
2036
|
+
}),
|
|
2037
|
+
providerOptions: zod.z.strictObject({
|
|
2038
|
+
google: zod.z.strictObject({
|
|
2039
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
2040
|
+
title: "Cached Content",
|
|
2041
|
+
description: "Google cached content resource name."
|
|
2042
|
+
}),
|
|
2043
|
+
safetySettings: zod.z.array(
|
|
2044
|
+
zod.z.strictObject({
|
|
2045
|
+
category: zod.z.string().min(1).meta({
|
|
2046
|
+
title: "Safety Category",
|
|
2047
|
+
description: "Google safety category identifier."
|
|
2048
|
+
}),
|
|
2049
|
+
threshold: zod.z.string().min(1).meta({
|
|
2050
|
+
title: "Safety Threshold",
|
|
2051
|
+
description: "Google safety threshold identifier."
|
|
2052
|
+
})
|
|
2053
|
+
})
|
|
2054
|
+
).optional().meta({
|
|
2055
|
+
title: "Safety Settings",
|
|
2056
|
+
description: "Allowlisted Google safety settings."
|
|
2057
|
+
}),
|
|
2058
|
+
tools: zod.z.array(
|
|
2059
|
+
zod.z.strictObject({
|
|
2060
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
2061
|
+
title: "Google Search",
|
|
2062
|
+
description: "Google Search grounding tool."
|
|
2063
|
+
})
|
|
2064
|
+
})
|
|
2065
|
+
).min(1).optional().meta({
|
|
2066
|
+
title: "Tools",
|
|
2067
|
+
description: "Allowlisted Google tools for gemini-3.1-pro-preview."
|
|
2068
|
+
}),
|
|
2069
|
+
httpOptions: zod.z.strictObject({
|
|
2070
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
2071
|
+
title: "HTTP Timeout",
|
|
2072
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
2073
|
+
})
|
|
2074
|
+
}).optional().meta({
|
|
2075
|
+
title: "HTTP Options",
|
|
2076
|
+
description: "Allowlisted Google transport options."
|
|
2077
|
+
})
|
|
2078
|
+
}).optional().meta({
|
|
2079
|
+
title: "Google Provider Options",
|
|
2080
|
+
description: "Allowlisted Google provider options for gemini-3.1-pro-preview."
|
|
2081
|
+
})
|
|
2082
|
+
}).optional().meta({
|
|
2083
|
+
title: "Provider Options",
|
|
2084
|
+
description: "Provider-specific options accepted for gemini-3.1-pro-preview."
|
|
2085
|
+
})
|
|
2086
|
+
})
|
|
2087
|
+
]).meta({
|
|
2088
|
+
title: "Gemini31ProPreviewConfig",
|
|
2089
|
+
description: "Strict generateContent config for model gemini-3.1-pro-preview. Level reasoning, fixed sampling, flex/standard tiers, structured output, grounding, priced.",
|
|
2090
|
+
examples: [{ serviceTier: "flex", reasoning: { effort: "high" } }]
|
|
2091
|
+
});
|
|
2092
|
+
var Gemini3FlashPreviewConfigSchema = zod.z.union([
|
|
2093
|
+
zod.z.strictObject({
|
|
2094
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
2095
|
+
title: "Max Output Tokens",
|
|
2096
|
+
description: "Maximum output token cap for gemini-3-flash-preview."
|
|
2097
|
+
}),
|
|
2098
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
2099
|
+
title: "Stop Sequences",
|
|
2100
|
+
description: "Up to five stop sequences for gemini-3-flash-preview."
|
|
2101
|
+
}),
|
|
2102
|
+
serviceTier: zod.z.literal("flex").meta({
|
|
2103
|
+
title: "Service Tier",
|
|
2104
|
+
description: "Explicit flex tier for gemini-3-flash-preview."
|
|
2105
|
+
}),
|
|
2106
|
+
reasoning: zod.z.union([
|
|
2107
|
+
zod.z.strictObject({
|
|
2108
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
2109
|
+
title: "Reasoning Effort",
|
|
2110
|
+
description: "Reasoning effort for gemini-3-flash-preview; none maps to minimal thinking."
|
|
2111
|
+
}),
|
|
2112
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
2113
|
+
title: "Include Thoughts",
|
|
2114
|
+
description: "Return provider thought summaries when supported."
|
|
2115
|
+
})
|
|
2116
|
+
}),
|
|
2117
|
+
zod.z.strictObject({
|
|
2118
|
+
includeThoughts: zod.z.boolean().meta({
|
|
2119
|
+
title: "Include Thoughts",
|
|
2120
|
+
description: "Return provider thought summaries when supported."
|
|
2121
|
+
})
|
|
2122
|
+
})
|
|
2123
|
+
]).optional().meta({
|
|
2124
|
+
title: "Reasoning",
|
|
2125
|
+
description: "Gemini 3 Flash Preview thinkingLevel configuration."
|
|
2126
|
+
}),
|
|
2127
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
2128
|
+
title: "Timeout",
|
|
2129
|
+
description: "Logical request timeout in milliseconds."
|
|
2130
|
+
}),
|
|
2131
|
+
providerOptions: zod.z.strictObject({
|
|
2132
|
+
google: zod.z.strictObject({
|
|
2133
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
2134
|
+
title: "Cached Content",
|
|
2135
|
+
description: "Google cached content resource name."
|
|
2136
|
+
}),
|
|
2137
|
+
safetySettings: zod.z.array(
|
|
2138
|
+
zod.z.strictObject({
|
|
2139
|
+
category: zod.z.string().min(1).meta({
|
|
2140
|
+
title: "Safety Category",
|
|
2141
|
+
description: "Google safety category identifier."
|
|
2142
|
+
}),
|
|
2143
|
+
threshold: zod.z.string().min(1).meta({
|
|
2144
|
+
title: "Safety Threshold",
|
|
2145
|
+
description: "Google safety threshold identifier."
|
|
2146
|
+
})
|
|
2147
|
+
})
|
|
2148
|
+
).optional().meta({
|
|
2149
|
+
title: "Safety Settings",
|
|
2150
|
+
description: "Allowlisted Google safety settings."
|
|
2151
|
+
}),
|
|
2152
|
+
tools: zod.z.array(
|
|
2153
|
+
zod.z.strictObject({
|
|
2154
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
2155
|
+
title: "Google Search",
|
|
2156
|
+
description: "Google Search grounding tool."
|
|
2157
|
+
})
|
|
2158
|
+
})
|
|
2159
|
+
).min(1).optional().meta({
|
|
2160
|
+
title: "Tools",
|
|
2161
|
+
description: "Allowlisted Google tools for gemini-3-flash-preview."
|
|
2162
|
+
}),
|
|
2163
|
+
httpOptions: zod.z.strictObject({
|
|
2164
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
2165
|
+
title: "HTTP Timeout",
|
|
2166
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
2167
|
+
})
|
|
2168
|
+
}).optional().meta({
|
|
2169
|
+
title: "HTTP Options",
|
|
2170
|
+
description: "Allowlisted Google transport options."
|
|
2171
|
+
}),
|
|
2172
|
+
flexFallback: zod.z.boolean().optional().meta({
|
|
2173
|
+
title: "Flex Fallback",
|
|
2174
|
+
description: "Allow provider fallback from flex when flex was explicitly selected."
|
|
2175
|
+
})
|
|
2176
|
+
}).optional().meta({
|
|
2177
|
+
title: "Google Provider Options",
|
|
2178
|
+
description: "Allowlisted Google provider options for gemini-3-flash-preview."
|
|
2179
|
+
})
|
|
2180
|
+
}).optional().meta({
|
|
2181
|
+
title: "Provider Options",
|
|
2182
|
+
description: "Provider-specific options accepted for gemini-3-flash-preview."
|
|
2183
|
+
})
|
|
2184
|
+
}),
|
|
2185
|
+
zod.z.strictObject({
|
|
2186
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
2187
|
+
title: "Max Output Tokens",
|
|
2188
|
+
description: "Maximum output token cap for gemini-3-flash-preview."
|
|
2189
|
+
}),
|
|
2190
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
2191
|
+
title: "Stop Sequences",
|
|
2192
|
+
description: "Up to five stop sequences for gemini-3-flash-preview."
|
|
2193
|
+
}),
|
|
2194
|
+
serviceTier: zod.z.literal("standard").optional().meta({
|
|
2195
|
+
title: "Service Tier",
|
|
2196
|
+
description: "Standard tier or omitted tier for gemini-3-flash-preview."
|
|
2197
|
+
}),
|
|
2198
|
+
reasoning: zod.z.union([
|
|
2199
|
+
zod.z.strictObject({
|
|
2200
|
+
effort: zod.z.enum(["none", "low", "medium", "high"]).meta({
|
|
2201
|
+
title: "Reasoning Effort",
|
|
2202
|
+
description: "Reasoning effort for gemini-3-flash-preview; none maps to minimal thinking."
|
|
2203
|
+
}),
|
|
2204
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
2205
|
+
title: "Include Thoughts",
|
|
2206
|
+
description: "Return provider thought summaries when supported."
|
|
2207
|
+
})
|
|
2208
|
+
}),
|
|
2209
|
+
zod.z.strictObject({
|
|
2210
|
+
includeThoughts: zod.z.boolean().meta({
|
|
2211
|
+
title: "Include Thoughts",
|
|
2212
|
+
description: "Return provider thought summaries when supported."
|
|
2213
|
+
})
|
|
2214
|
+
})
|
|
2215
|
+
]).optional().meta({
|
|
2216
|
+
title: "Reasoning",
|
|
2217
|
+
description: "Gemini 3 Flash Preview thinkingLevel configuration."
|
|
2218
|
+
}),
|
|
2219
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
2220
|
+
title: "Timeout",
|
|
2221
|
+
description: "Logical request timeout in milliseconds."
|
|
2222
|
+
}),
|
|
2223
|
+
providerOptions: zod.z.strictObject({
|
|
2224
|
+
google: zod.z.strictObject({
|
|
2225
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
2226
|
+
title: "Cached Content",
|
|
2227
|
+
description: "Google cached content resource name."
|
|
2228
|
+
}),
|
|
2229
|
+
safetySettings: zod.z.array(
|
|
2230
|
+
zod.z.strictObject({
|
|
2231
|
+
category: zod.z.string().min(1).meta({
|
|
2232
|
+
title: "Safety Category",
|
|
2233
|
+
description: "Google safety category identifier."
|
|
2234
|
+
}),
|
|
2235
|
+
threshold: zod.z.string().min(1).meta({
|
|
2236
|
+
title: "Safety Threshold",
|
|
2237
|
+
description: "Google safety threshold identifier."
|
|
2238
|
+
})
|
|
2239
|
+
})
|
|
2240
|
+
).optional().meta({
|
|
2241
|
+
title: "Safety Settings",
|
|
2242
|
+
description: "Allowlisted Google safety settings."
|
|
2243
|
+
}),
|
|
2244
|
+
tools: zod.z.array(
|
|
2245
|
+
zod.z.strictObject({
|
|
2246
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
2247
|
+
title: "Google Search",
|
|
2248
|
+
description: "Google Search grounding tool."
|
|
2249
|
+
})
|
|
2250
|
+
})
|
|
2251
|
+
).min(1).optional().meta({
|
|
2252
|
+
title: "Tools",
|
|
2253
|
+
description: "Allowlisted Google tools for gemini-3-flash-preview."
|
|
2254
|
+
}),
|
|
2255
|
+
httpOptions: zod.z.strictObject({
|
|
2256
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
2257
|
+
title: "HTTP Timeout",
|
|
2258
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
2259
|
+
})
|
|
2260
|
+
}).optional().meta({
|
|
2261
|
+
title: "HTTP Options",
|
|
2262
|
+
description: "Allowlisted Google transport options."
|
|
2263
|
+
})
|
|
2264
|
+
}).optional().meta({
|
|
2265
|
+
title: "Google Provider Options",
|
|
2266
|
+
description: "Allowlisted Google provider options for gemini-3-flash-preview."
|
|
2267
|
+
})
|
|
2268
|
+
}).optional().meta({
|
|
2269
|
+
title: "Provider Options",
|
|
2270
|
+
description: "Provider-specific options accepted for gemini-3-flash-preview."
|
|
2271
|
+
})
|
|
2272
|
+
})
|
|
2273
|
+
]).meta({
|
|
2274
|
+
title: "Gemini3FlashPreviewConfig",
|
|
2275
|
+
description: "Strict generateContent config for model gemini-3-flash-preview. Level reasoning, fixed sampling, flex/standard tiers, structured output, grounding, priced.",
|
|
2276
|
+
examples: [{ serviceTier: "flex", reasoning: { effort: "medium" } }]
|
|
2277
|
+
});
|
|
2278
|
+
var Gemma431bItConfigSchema = zod.z.strictObject({
|
|
2279
|
+
temperature: zod.z.number().min(0).max(2).optional().meta({
|
|
2280
|
+
title: "Temperature",
|
|
2281
|
+
description: "Sampling temperature for gemma-4-31b-it.",
|
|
2282
|
+
examples: [0.7]
|
|
2283
|
+
}),
|
|
2284
|
+
topP: zod.z.number().min(0).max(1).optional().meta({
|
|
2285
|
+
title: "Top P",
|
|
2286
|
+
description: "Nucleus sampling probability for gemma-4-31b-it."
|
|
2287
|
+
}),
|
|
2288
|
+
topK: zod.z.number().int().positive().optional().meta({
|
|
2289
|
+
title: "Top K",
|
|
2290
|
+
description: "Top-k sampling limit for gemma-4-31b-it."
|
|
2291
|
+
}),
|
|
2292
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
2293
|
+
title: "Max Output Tokens",
|
|
2294
|
+
description: "Maximum output token cap for gemma-4-31b-it."
|
|
2295
|
+
}),
|
|
2296
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
2297
|
+
title: "Stop Sequences",
|
|
2298
|
+
description: "Up to five stop sequences for gemma-4-31b-it."
|
|
2299
|
+
}),
|
|
2300
|
+
reasoning: zod.z.union([
|
|
2301
|
+
zod.z.strictObject({
|
|
2302
|
+
effort: zod.z.enum(["none", "high"]).meta({
|
|
2303
|
+
title: "Reasoning Effort",
|
|
2304
|
+
description: "Reasoning effort for gemma-4-31b-it."
|
|
2305
|
+
}),
|
|
2306
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
2307
|
+
title: "Include Thoughts",
|
|
2308
|
+
description: "Return provider thought summaries when supported."
|
|
2309
|
+
})
|
|
2310
|
+
}),
|
|
2311
|
+
zod.z.strictObject({
|
|
2312
|
+
includeThoughts: zod.z.boolean().meta({
|
|
2313
|
+
title: "Include Thoughts",
|
|
2314
|
+
description: "Return provider thought summaries when supported."
|
|
2315
|
+
})
|
|
2316
|
+
})
|
|
2317
|
+
]).optional().meta({
|
|
2318
|
+
title: "Reasoning",
|
|
2319
|
+
description: "Gemma 4 31B IT thinkingLevel configuration."
|
|
2320
|
+
}),
|
|
2321
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
2322
|
+
title: "Timeout",
|
|
2323
|
+
description: "Logical request timeout in milliseconds."
|
|
2324
|
+
}),
|
|
2325
|
+
providerOptions: zod.z.strictObject({
|
|
2326
|
+
google: zod.z.strictObject({
|
|
2327
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
2328
|
+
title: "Cached Content",
|
|
2329
|
+
description: "Google cached content resource name."
|
|
2330
|
+
}),
|
|
2331
|
+
safetySettings: zod.z.array(
|
|
2332
|
+
zod.z.strictObject({
|
|
2333
|
+
category: zod.z.string().min(1).meta({
|
|
2334
|
+
title: "Safety Category",
|
|
2335
|
+
description: "Google safety category identifier."
|
|
2336
|
+
}),
|
|
2337
|
+
threshold: zod.z.string().min(1).meta({
|
|
2338
|
+
title: "Safety Threshold",
|
|
2339
|
+
description: "Google safety threshold identifier."
|
|
2340
|
+
})
|
|
2341
|
+
})
|
|
2342
|
+
).optional().meta({
|
|
2343
|
+
title: "Safety Settings",
|
|
2344
|
+
description: "Allowlisted Google safety settings."
|
|
2345
|
+
}),
|
|
2346
|
+
tools: zod.z.array(
|
|
2347
|
+
zod.z.strictObject({
|
|
2348
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
2349
|
+
title: "Google Search",
|
|
2350
|
+
description: "Google Search grounding tool."
|
|
2351
|
+
})
|
|
2352
|
+
})
|
|
2353
|
+
).min(1).optional().meta({
|
|
2354
|
+
title: "Tools",
|
|
2355
|
+
description: "Allowlisted Google tools for gemma-4-31b-it."
|
|
2356
|
+
}),
|
|
2357
|
+
httpOptions: zod.z.strictObject({
|
|
2358
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
2359
|
+
title: "HTTP Timeout",
|
|
2360
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
2361
|
+
})
|
|
2362
|
+
}).optional().meta({
|
|
2363
|
+
title: "HTTP Options",
|
|
2364
|
+
description: "Allowlisted Google transport options."
|
|
2365
|
+
})
|
|
2366
|
+
}).optional().meta({
|
|
2367
|
+
title: "Google Provider Options",
|
|
2368
|
+
description: "Allowlisted Google provider options for gemma-4-31b-it."
|
|
2369
|
+
})
|
|
2370
|
+
}).optional().meta({
|
|
2371
|
+
title: "Provider Options",
|
|
2372
|
+
description: "Provider-specific options accepted for gemma-4-31b-it."
|
|
2373
|
+
})
|
|
2374
|
+
}).meta({
|
|
2375
|
+
title: "Gemma431bItConfig",
|
|
2376
|
+
description: "Strict generateContent config for model gemma-4-31b-it. Level reasoning, tunable sampling, no service tier, structured output, grounding, intentionally unpriced.",
|
|
2377
|
+
examples: [{ temperature: 0.7, reasoning: { effort: "high" } }]
|
|
2378
|
+
});
|
|
2379
|
+
var Gemma426bA4bItConfigSchema = zod.z.strictObject({
|
|
2380
|
+
temperature: zod.z.number().min(0).max(2).optional().meta({
|
|
2381
|
+
title: "Temperature",
|
|
2382
|
+
description: "Sampling temperature for gemma-4-26b-a4b-it.",
|
|
2383
|
+
examples: [0.7]
|
|
2384
|
+
}),
|
|
2385
|
+
topP: zod.z.number().min(0).max(1).optional().meta({
|
|
2386
|
+
title: "Top P",
|
|
2387
|
+
description: "Nucleus sampling probability for gemma-4-26b-a4b-it."
|
|
2388
|
+
}),
|
|
2389
|
+
topK: zod.z.number().int().positive().optional().meta({
|
|
2390
|
+
title: "Top K",
|
|
2391
|
+
description: "Top-k sampling limit for gemma-4-26b-a4b-it."
|
|
2392
|
+
}),
|
|
2393
|
+
maxOutputTokens: zod.z.number().int().positive().optional().meta({
|
|
2394
|
+
title: "Max Output Tokens",
|
|
2395
|
+
description: "Maximum output token cap for gemma-4-26b-a4b-it."
|
|
2396
|
+
}),
|
|
2397
|
+
stopSequences: zod.z.array(zod.z.string()).max(5).optional().meta({
|
|
2398
|
+
title: "Stop Sequences",
|
|
2399
|
+
description: "Up to five stop sequences for gemma-4-26b-a4b-it."
|
|
2400
|
+
}),
|
|
2401
|
+
reasoning: zod.z.union([
|
|
2402
|
+
zod.z.strictObject({
|
|
2403
|
+
effort: zod.z.enum(["none", "high"]).meta({
|
|
2404
|
+
title: "Reasoning Effort",
|
|
2405
|
+
description: "Reasoning effort for gemma-4-26b-a4b-it."
|
|
2406
|
+
}),
|
|
2407
|
+
includeThoughts: zod.z.boolean().optional().meta({
|
|
2408
|
+
title: "Include Thoughts",
|
|
2409
|
+
description: "Return provider thought summaries when supported."
|
|
2410
|
+
})
|
|
2411
|
+
}),
|
|
2412
|
+
zod.z.strictObject({
|
|
2413
|
+
includeThoughts: zod.z.boolean().meta({
|
|
2414
|
+
title: "Include Thoughts",
|
|
2415
|
+
description: "Return provider thought summaries when supported."
|
|
2416
|
+
})
|
|
2417
|
+
})
|
|
2418
|
+
]).optional().meta({
|
|
2419
|
+
title: "Reasoning",
|
|
2420
|
+
description: "Gemma 4 26B A4B IT thinkingLevel configuration."
|
|
2421
|
+
}),
|
|
2422
|
+
timeoutMs: zod.z.number().int().positive().optional().meta({
|
|
2423
|
+
title: "Timeout",
|
|
2424
|
+
description: "Logical request timeout in milliseconds."
|
|
2425
|
+
}),
|
|
2426
|
+
providerOptions: zod.z.strictObject({
|
|
2427
|
+
google: zod.z.strictObject({
|
|
2428
|
+
cachedContent: zod.z.string().min(1).optional().meta({
|
|
2429
|
+
title: "Cached Content",
|
|
2430
|
+
description: "Google cached content resource name."
|
|
2431
|
+
}),
|
|
2432
|
+
safetySettings: zod.z.array(
|
|
2433
|
+
zod.z.strictObject({
|
|
2434
|
+
category: zod.z.string().min(1).meta({
|
|
2435
|
+
title: "Safety Category",
|
|
2436
|
+
description: "Google safety category identifier."
|
|
2437
|
+
}),
|
|
2438
|
+
threshold: zod.z.string().min(1).meta({
|
|
2439
|
+
title: "Safety Threshold",
|
|
2440
|
+
description: "Google safety threshold identifier."
|
|
2441
|
+
})
|
|
2442
|
+
})
|
|
2443
|
+
).optional().meta({
|
|
2444
|
+
title: "Safety Settings",
|
|
2445
|
+
description: "Allowlisted Google safety settings."
|
|
2446
|
+
}),
|
|
2447
|
+
tools: zod.z.array(
|
|
2448
|
+
zod.z.strictObject({
|
|
2449
|
+
googleSearch: zod.z.strictObject({}).meta({
|
|
2450
|
+
title: "Google Search",
|
|
2451
|
+
description: "Google Search grounding tool."
|
|
2452
|
+
})
|
|
2453
|
+
})
|
|
2454
|
+
).min(1).optional().meta({
|
|
2455
|
+
title: "Tools",
|
|
2456
|
+
description: "Allowlisted Google tools for gemma-4-26b-a4b-it."
|
|
2457
|
+
}),
|
|
2458
|
+
httpOptions: zod.z.strictObject({
|
|
2459
|
+
timeout: zod.z.number().int().positive().optional().meta({
|
|
2460
|
+
title: "HTTP Timeout",
|
|
2461
|
+
description: "Per-request Google transport timeout in milliseconds."
|
|
2462
|
+
})
|
|
2463
|
+
}).optional().meta({
|
|
2464
|
+
title: "HTTP Options",
|
|
2465
|
+
description: "Allowlisted Google transport options."
|
|
2466
|
+
})
|
|
2467
|
+
}).optional().meta({
|
|
2468
|
+
title: "Google Provider Options",
|
|
2469
|
+
description: "Allowlisted Google provider options for gemma-4-26b-a4b-it."
|
|
2470
|
+
})
|
|
2471
|
+
}).optional().meta({
|
|
2472
|
+
title: "Provider Options",
|
|
2473
|
+
description: "Provider-specific options accepted for gemma-4-26b-a4b-it."
|
|
2474
|
+
})
|
|
2475
|
+
}).meta({
|
|
2476
|
+
title: "Gemma426bA4bItConfig",
|
|
2477
|
+
description: "Strict generateContent config for model gemma-4-26b-a4b-it. Level reasoning, tunable sampling, no service tier, structured output, grounding, intentionally unpriced.",
|
|
2478
|
+
examples: [{ temperature: 0.7, reasoning: { effort: "none" } }]
|
|
2479
|
+
});
|
|
2480
|
+
var GEMINI_25_PRO_REASONING_EFFORTS = [
|
|
2481
|
+
"low",
|
|
2482
|
+
"medium",
|
|
2483
|
+
"high"
|
|
2484
|
+
];
|
|
2485
|
+
var GEMINI_LEVEL_REASONING_EFFORTS = [
|
|
2486
|
+
"none",
|
|
2487
|
+
"low",
|
|
2488
|
+
"medium",
|
|
2489
|
+
"high"
|
|
2490
|
+
];
|
|
2491
|
+
var GEMINI_LEVEL_PRO_PREVIEW_REASONING_EFFORTS = [
|
|
2492
|
+
"low",
|
|
2493
|
+
"medium",
|
|
2494
|
+
"high"
|
|
2495
|
+
];
|
|
2496
|
+
var GEMINI_25_FLASH_REASONING_EFFORTS = [
|
|
2497
|
+
"none",
|
|
2498
|
+
"low",
|
|
2499
|
+
"medium",
|
|
2500
|
+
"high"
|
|
2501
|
+
];
|
|
2502
|
+
var GEMMA_REASONING_EFFORTS = [
|
|
2503
|
+
"none",
|
|
2504
|
+
"high"
|
|
2505
|
+
];
|
|
2506
|
+
var geminiModelDescriptors = [
|
|
2507
|
+
{
|
|
2508
|
+
model: "gemini-2.5-pro",
|
|
2509
|
+
provider: "google",
|
|
2510
|
+
pricingFamily: "gemini-2.5-pro",
|
|
2511
|
+
capabilities: {
|
|
2512
|
+
reasoning: true,
|
|
2513
|
+
structuredOutput: true,
|
|
2514
|
+
nativeStructuredOutput: true,
|
|
2515
|
+
vision: true,
|
|
2516
|
+
reasoningApi: "budget",
|
|
2517
|
+
admittedReasoningEfforts: GEMINI_25_PRO_REASONING_EFFORTS,
|
|
2518
|
+
sampling: "tunable",
|
|
2519
|
+
caching: { explicit: true, minTokens: 2048 },
|
|
2520
|
+
grounding: true,
|
|
2521
|
+
serviceTiers: ["flex", "standard"]
|
|
2522
|
+
},
|
|
2523
|
+
configSchema: Gemini25ProConfigSchema,
|
|
2524
|
+
configJsonSchema: core.toConfigJsonSchema(Gemini25ProConfigSchema),
|
|
2525
|
+
validateConfig: core.zodToStandardSchema(Gemini25ProConfigSchema)
|
|
2526
|
+
},
|
|
2527
|
+
{
|
|
2528
|
+
model: "gemini-2.5-flash",
|
|
2529
|
+
provider: "google",
|
|
2530
|
+
pricingFamily: "gemini-2.5-flash",
|
|
2531
|
+
capabilities: {
|
|
2532
|
+
reasoning: true,
|
|
2533
|
+
structuredOutput: true,
|
|
2534
|
+
nativeStructuredOutput: true,
|
|
2535
|
+
vision: true,
|
|
2536
|
+
reasoningApi: "budget",
|
|
2537
|
+
admittedReasoningEfforts: GEMINI_25_FLASH_REASONING_EFFORTS,
|
|
2538
|
+
sampling: "tunable",
|
|
2539
|
+
caching: { explicit: true, minTokens: 2048 },
|
|
2540
|
+
grounding: true,
|
|
2541
|
+
serviceTiers: ["flex", "standard"]
|
|
2542
|
+
},
|
|
2543
|
+
configSchema: Gemini25FlashConfigSchema,
|
|
2544
|
+
configJsonSchema: core.toConfigJsonSchema(Gemini25FlashConfigSchema),
|
|
2545
|
+
validateConfig: core.zodToStandardSchema(Gemini25FlashConfigSchema)
|
|
2546
|
+
},
|
|
2547
|
+
{
|
|
2548
|
+
model: "gemini-2.5-flash-lite",
|
|
2549
|
+
provider: "google",
|
|
2550
|
+
pricingFamily: "gemini-2.5-flash-lite",
|
|
2551
|
+
capabilities: {
|
|
2552
|
+
reasoning: true,
|
|
2553
|
+
structuredOutput: true,
|
|
2554
|
+
nativeStructuredOutput: true,
|
|
2555
|
+
vision: true,
|
|
2556
|
+
reasoningApi: "budget",
|
|
2557
|
+
admittedReasoningEfforts: GEMINI_25_FLASH_REASONING_EFFORTS,
|
|
2558
|
+
sampling: "tunable",
|
|
2559
|
+
caching: { explicit: true, minTokens: 2048 },
|
|
2560
|
+
grounding: true,
|
|
2561
|
+
serviceTiers: ["flex", "standard"]
|
|
2562
|
+
},
|
|
2563
|
+
configSchema: Gemini25FlashLiteConfigSchema,
|
|
2564
|
+
configJsonSchema: core.toConfigJsonSchema(Gemini25FlashLiteConfigSchema),
|
|
2565
|
+
validateConfig: core.zodToStandardSchema(Gemini25FlashLiteConfigSchema)
|
|
2566
|
+
},
|
|
2567
|
+
{
|
|
2568
|
+
model: "gemini-3.5-flash",
|
|
2569
|
+
provider: "google",
|
|
2570
|
+
pricingFamily: "gemini-3.5-flash",
|
|
2571
|
+
capabilities: {
|
|
2572
|
+
reasoning: true,
|
|
2573
|
+
structuredOutput: true,
|
|
2574
|
+
nativeStructuredOutput: true,
|
|
2575
|
+
vision: true,
|
|
2576
|
+
reasoningApi: "level",
|
|
2577
|
+
admittedReasoningEfforts: GEMINI_LEVEL_REASONING_EFFORTS,
|
|
2578
|
+
sampling: "fixed",
|
|
2579
|
+
caching: { explicit: true, minTokens: 2048 },
|
|
2580
|
+
grounding: true,
|
|
2581
|
+
serviceTiers: ["flex", "standard"]
|
|
2582
|
+
},
|
|
2583
|
+
configSchema: Gemini35FlashConfigSchema,
|
|
2584
|
+
configJsonSchema: core.toConfigJsonSchema(Gemini35FlashConfigSchema),
|
|
2585
|
+
validateConfig: core.zodToStandardSchema(Gemini35FlashConfigSchema)
|
|
2586
|
+
},
|
|
2587
|
+
{
|
|
2588
|
+
model: "gemini-3.1-flash-lite",
|
|
2589
|
+
provider: "google",
|
|
2590
|
+
pricingFamily: "gemini-3.1-flash-lite",
|
|
2591
|
+
capabilities: {
|
|
2592
|
+
reasoning: true,
|
|
2593
|
+
structuredOutput: true,
|
|
2594
|
+
nativeStructuredOutput: true,
|
|
2595
|
+
vision: true,
|
|
2596
|
+
reasoningApi: "level",
|
|
2597
|
+
admittedReasoningEfforts: GEMINI_LEVEL_REASONING_EFFORTS,
|
|
2598
|
+
sampling: "fixed",
|
|
2599
|
+
caching: { explicit: true, minTokens: 2048 },
|
|
2600
|
+
grounding: true,
|
|
2601
|
+
serviceTiers: ["flex", "standard"]
|
|
2602
|
+
},
|
|
2603
|
+
configSchema: Gemini31FlashLiteConfigSchema,
|
|
2604
|
+
configJsonSchema: core.toConfigJsonSchema(Gemini31FlashLiteConfigSchema),
|
|
2605
|
+
validateConfig: core.zodToStandardSchema(Gemini31FlashLiteConfigSchema)
|
|
2606
|
+
},
|
|
2607
|
+
{
|
|
2608
|
+
model: "gemini-3.1-pro-preview",
|
|
2609
|
+
provider: "google",
|
|
2610
|
+
pricingFamily: "gemini-3.1-pro-preview",
|
|
2611
|
+
capabilities: {
|
|
2612
|
+
reasoning: true,
|
|
2613
|
+
structuredOutput: true,
|
|
2614
|
+
nativeStructuredOutput: true,
|
|
2615
|
+
vision: true,
|
|
2616
|
+
reasoningApi: "level",
|
|
2617
|
+
admittedReasoningEfforts: GEMINI_LEVEL_PRO_PREVIEW_REASONING_EFFORTS,
|
|
2618
|
+
sampling: "fixed",
|
|
2619
|
+
caching: { explicit: true, minTokens: 2048 },
|
|
2620
|
+
grounding: true,
|
|
2621
|
+
serviceTiers: ["flex", "standard"]
|
|
2622
|
+
},
|
|
2623
|
+
configSchema: Gemini31ProPreviewConfigSchema,
|
|
2624
|
+
configJsonSchema: core.toConfigJsonSchema(Gemini31ProPreviewConfigSchema),
|
|
2625
|
+
validateConfig: core.zodToStandardSchema(Gemini31ProPreviewConfigSchema)
|
|
2626
|
+
},
|
|
2627
|
+
{
|
|
2628
|
+
model: "gemini-3-flash-preview",
|
|
2629
|
+
provider: "google",
|
|
2630
|
+
pricingFamily: "gemini-3-flash-preview",
|
|
2631
|
+
capabilities: {
|
|
2632
|
+
reasoning: true,
|
|
2633
|
+
structuredOutput: true,
|
|
2634
|
+
nativeStructuredOutput: true,
|
|
2635
|
+
vision: true,
|
|
2636
|
+
reasoningApi: "level",
|
|
2637
|
+
admittedReasoningEfforts: GEMINI_LEVEL_REASONING_EFFORTS,
|
|
2638
|
+
sampling: "fixed",
|
|
2639
|
+
caching: { explicit: true, minTokens: 2048 },
|
|
2640
|
+
grounding: true,
|
|
2641
|
+
serviceTiers: ["flex", "standard"]
|
|
2642
|
+
},
|
|
2643
|
+
configSchema: Gemini3FlashPreviewConfigSchema,
|
|
2644
|
+
configJsonSchema: core.toConfigJsonSchema(Gemini3FlashPreviewConfigSchema),
|
|
2645
|
+
validateConfig: core.zodToStandardSchema(Gemini3FlashPreviewConfigSchema)
|
|
2646
|
+
}
|
|
2647
|
+
];
|
|
2648
|
+
var gemmaModelDescriptors = [
|
|
2649
|
+
{
|
|
2650
|
+
model: "gemma-4-31b-it",
|
|
2651
|
+
provider: "google",
|
|
2652
|
+
capabilities: {
|
|
2653
|
+
reasoning: true,
|
|
2654
|
+
reasoningApi: "level",
|
|
2655
|
+
admittedReasoningEfforts: GEMMA_REASONING_EFFORTS,
|
|
2656
|
+
structuredOutput: true,
|
|
2657
|
+
nativeStructuredOutput: true,
|
|
2658
|
+
grounding: true,
|
|
2659
|
+
vision: true,
|
|
2660
|
+
sampling: "tunable"
|
|
2661
|
+
},
|
|
2662
|
+
configSchema: Gemma431bItConfigSchema,
|
|
2663
|
+
configJsonSchema: core.toConfigJsonSchema(Gemma431bItConfigSchema),
|
|
2664
|
+
validateConfig: core.zodToStandardSchema(Gemma431bItConfigSchema)
|
|
2665
|
+
},
|
|
2666
|
+
{
|
|
2667
|
+
model: "gemma-4-26b-a4b-it",
|
|
2668
|
+
provider: "google",
|
|
2669
|
+
capabilities: {
|
|
2670
|
+
reasoning: true,
|
|
2671
|
+
reasoningApi: "level",
|
|
2672
|
+
admittedReasoningEfforts: GEMMA_REASONING_EFFORTS,
|
|
2673
|
+
structuredOutput: true,
|
|
2674
|
+
nativeStructuredOutput: true,
|
|
2675
|
+
grounding: true,
|
|
2676
|
+
vision: true,
|
|
2677
|
+
sampling: "tunable"
|
|
2678
|
+
},
|
|
2679
|
+
configSchema: Gemma426bA4bItConfigSchema,
|
|
2680
|
+
configJsonSchema: core.toConfigJsonSchema(Gemma426bA4bItConfigSchema),
|
|
2681
|
+
validateConfig: core.zodToStandardSchema(Gemma426bA4bItConfigSchema)
|
|
2682
|
+
}
|
|
2683
|
+
];
|
|
2684
|
+
var defaultGeminiRegistry = core.createModelRegistry([
|
|
2685
|
+
...geminiModelDescriptors,
|
|
2686
|
+
...gemmaModelDescriptors
|
|
2687
|
+
]);
|
|
2688
|
+
|
|
2689
|
+
// src/provider.ts
|
|
2690
|
+
function googleProvider(opts) {
|
|
2691
|
+
return {
|
|
2692
|
+
adapter: geminiAdapter(opts),
|
|
2693
|
+
modelDescriptors: [...geminiModelDescriptors, ...gemmaModelDescriptors],
|
|
2694
|
+
pricingSource: geminiPricingSource()
|
|
2695
|
+
};
|
|
2696
|
+
}
|
|
683
2697
|
var DEFAULT_INTERVAL_MS = 3e3;
|
|
684
2698
|
var DEFAULT_TIMEOUT_MS = 3e5;
|
|
685
2699
|
var realSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -781,8 +2795,9 @@ var GoogleFileStore = class {
|
|
|
781
2795
|
const { name, uri } = uploadResp;
|
|
782
2796
|
if (name === void 0 || name.length === 0 || uri === void 0 || uri.length === 0) {
|
|
783
2797
|
throw new core.LlmError("File upload response missing required fields (name or uri)", {
|
|
784
|
-
kind: "
|
|
785
|
-
retryable: false
|
|
2798
|
+
kind: "server",
|
|
2799
|
+
retryable: false,
|
|
2800
|
+
provider: "google"
|
|
786
2801
|
});
|
|
787
2802
|
}
|
|
788
2803
|
const fallback = { name, uri, mimeType };
|
|
@@ -895,6 +2910,7 @@ var GoogleCacheStore = class {
|
|
|
895
2910
|
onDeleteError;
|
|
896
2911
|
logger;
|
|
897
2912
|
now;
|
|
2913
|
+
preflight;
|
|
898
2914
|
/** Memoised client promise — built at most once per store instance. */
|
|
899
2915
|
clientPromise;
|
|
900
2916
|
/** In-process cache of live handles, keyed by `${model}:${stableKey}`. */
|
|
@@ -921,6 +2937,7 @@ var GoogleCacheStore = class {
|
|
|
921
2937
|
}
|
|
922
2938
|
});
|
|
923
2939
|
this.now = opts.now ?? (() => Date.now());
|
|
2940
|
+
this.preflight = opts.preflight;
|
|
924
2941
|
}
|
|
925
2942
|
getClient() {
|
|
926
2943
|
if (this.clientOverride !== void 0) return Promise.resolve(this.clientOverride);
|
|
@@ -940,6 +2957,19 @@ var GoogleCacheStore = class {
|
|
|
940
2957
|
* `now + ttlSeconds * 1000`.
|
|
941
2958
|
*/
|
|
942
2959
|
async create(input) {
|
|
2960
|
+
if (this.preflight !== void 0) {
|
|
2961
|
+
const counted = await this.preflight.countTokens({
|
|
2962
|
+
model: input.model,
|
|
2963
|
+
...input.contents !== void 0 ? { contents: input.contents } : {},
|
|
2964
|
+
...input.systemInstruction !== void 0 ? { systemInstruction: input.systemInstruction } : {}
|
|
2965
|
+
});
|
|
2966
|
+
if (counted < this.preflight.minTokens) {
|
|
2967
|
+
throw new core.LlmError(
|
|
2968
|
+
`GoogleCacheStore preflight: counted ${counted} token(s), below the configured minimum of ${this.preflight.minTokens} for model "${input.model}".`,
|
|
2969
|
+
{ kind: "bad_request", retryable: false }
|
|
2970
|
+
);
|
|
2971
|
+
}
|
|
2972
|
+
}
|
|
943
2973
|
const client = await this.getClient();
|
|
944
2974
|
const config = { ttl: `${input.ttlSeconds}s` };
|
|
945
2975
|
if (input.contents !== void 0) config.contents = input.contents;
|
|
@@ -954,8 +2984,9 @@ var GoogleCacheStore = class {
|
|
|
954
2984
|
}
|
|
955
2985
|
if (resp.name === void 0 || resp.name.length === 0) {
|
|
956
2986
|
throw new core.LlmError("Cache create response missing required field: name", {
|
|
957
|
-
kind: "
|
|
958
|
-
retryable: false
|
|
2987
|
+
kind: "server",
|
|
2988
|
+
retryable: false,
|
|
2989
|
+
provider: "google"
|
|
959
2990
|
});
|
|
960
2991
|
}
|
|
961
2992
|
const fallbackExpiry = new Date(this.now() + input.ttlSeconds * 1e3);
|
|
@@ -1117,16 +3148,195 @@ function normalizeGroundingCitations(groundingMetadata) {
|
|
|
1117
3148
|
}
|
|
1118
3149
|
return citations;
|
|
1119
3150
|
}
|
|
3151
|
+
function badRequest(message) {
|
|
3152
|
+
return new core.LlmError(message, { kind: "bad_request", retryable: false });
|
|
3153
|
+
}
|
|
3154
|
+
function definedKeys(obj) {
|
|
3155
|
+
return Object.keys(obj).filter(
|
|
3156
|
+
(key) => obj[key] !== void 0
|
|
3157
|
+
);
|
|
3158
|
+
}
|
|
3159
|
+
function mapMediaResolutionLevel(level, location) {
|
|
3160
|
+
switch (level) {
|
|
3161
|
+
case "MEDIA_RESOLUTION_LOW":
|
|
3162
|
+
return "low";
|
|
3163
|
+
case "MEDIA_RESOLUTION_MEDIUM":
|
|
3164
|
+
return "medium";
|
|
3165
|
+
case "MEDIA_RESOLUTION_HIGH":
|
|
3166
|
+
return "high";
|
|
3167
|
+
default:
|
|
3168
|
+
throw badRequest(
|
|
3169
|
+
`${location}: unsupported Part.mediaResolution.level "${level}" \u2014 any-llm only supports MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH.`
|
|
3170
|
+
);
|
|
3171
|
+
}
|
|
3172
|
+
}
|
|
3173
|
+
function convertMediaResolution(mediaResolution, location) {
|
|
3174
|
+
const extraKeys = definedKeys(mediaResolution).filter((key) => key !== "level");
|
|
3175
|
+
if (extraKeys.length > 0) {
|
|
3176
|
+
throw badRequest(
|
|
3177
|
+
`${location}: Part.mediaResolution keys [${extraKeys.join(", ")}] are not representable in any-llm \u2014 only mediaResolution.level is supported.`
|
|
3178
|
+
);
|
|
3179
|
+
}
|
|
3180
|
+
if (mediaResolution.level === void 0) {
|
|
3181
|
+
throw badRequest(
|
|
3182
|
+
`${location}: Part.mediaResolution is present but carries no level \u2014 an explicit-but-empty mediaResolution is ambiguous; set level or omit the field.`
|
|
3183
|
+
);
|
|
3184
|
+
}
|
|
3185
|
+
return mapMediaResolutionLevel(mediaResolution.level, location);
|
|
3186
|
+
}
|
|
3187
|
+
function convertPart(part, location) {
|
|
3188
|
+
const keys = definedKeys(part);
|
|
3189
|
+
const baseKeys = keys.filter(
|
|
3190
|
+
(key) => key === "text" || key === "inlineData" || key === "fileData"
|
|
3191
|
+
);
|
|
3192
|
+
if (baseKeys.length === 0) {
|
|
3193
|
+
if (keys.length === 0) {
|
|
3194
|
+
throw badRequest(
|
|
3195
|
+
`${location}: Part has no recognized fields set (expected exactly one of text, inlineData, fileData).`
|
|
3196
|
+
);
|
|
3197
|
+
}
|
|
3198
|
+
throw badRequest(
|
|
3199
|
+
`${location}: Part keys [${keys.join(", ")}] are not supported by geminiContentToMessages \u2014 only text, inlineData, and fileData parts can be represented in any-llm.`
|
|
3200
|
+
);
|
|
3201
|
+
}
|
|
3202
|
+
if (baseKeys.length > 1) {
|
|
3203
|
+
throw badRequest(
|
|
3204
|
+
`${location}: Part has more than one of text/inlineData/fileData set ([${baseKeys.join(", ")}]) \u2014 geminiContentToMessages requires exactly one.`
|
|
3205
|
+
);
|
|
3206
|
+
}
|
|
3207
|
+
const base = baseKeys[0];
|
|
3208
|
+
const extraKeys = keys.filter(
|
|
3209
|
+
(key) => key !== base && !(base !== "text" && key === "mediaResolution")
|
|
3210
|
+
);
|
|
3211
|
+
if (extraKeys.length > 0) {
|
|
3212
|
+
throw badRequest(
|
|
3213
|
+
`${location}: Part keys [${extraKeys.join(", ")}] cannot be represented in any-llm alongside ${base} \u2014 nothing is silently dropped.`
|
|
3214
|
+
);
|
|
3215
|
+
}
|
|
3216
|
+
if (part.text !== void 0) {
|
|
3217
|
+
return { kind: "text", text: part.text };
|
|
3218
|
+
}
|
|
3219
|
+
if (part.inlineData !== void 0) {
|
|
3220
|
+
const inlineData = part.inlineData;
|
|
3221
|
+
const inlineExtraKeys = definedKeys(inlineData).filter(
|
|
3222
|
+
(key) => key !== "mimeType" && key !== "data"
|
|
3223
|
+
);
|
|
3224
|
+
if (inlineExtraKeys.length > 0) {
|
|
3225
|
+
throw badRequest(
|
|
3226
|
+
`${location}: Part.inlineData keys [${inlineExtraKeys.join(", ")}] are not representable in any-llm.`
|
|
3227
|
+
);
|
|
3228
|
+
}
|
|
3229
|
+
if (inlineData.mimeType === void 0) {
|
|
3230
|
+
throw badRequest(`${location}: Part.inlineData.mimeType is required.`);
|
|
3231
|
+
}
|
|
3232
|
+
if (inlineData.data === void 0) {
|
|
3233
|
+
throw badRequest(`${location}: Part.inlineData.data is required.`);
|
|
3234
|
+
}
|
|
3235
|
+
return {
|
|
3236
|
+
kind: "inline-media",
|
|
3237
|
+
mimeType: inlineData.mimeType,
|
|
3238
|
+
data: inlineData.data,
|
|
3239
|
+
...part.mediaResolution !== void 0 ? { mediaResolution: convertMediaResolution(part.mediaResolution, location) } : {}
|
|
3240
|
+
};
|
|
3241
|
+
}
|
|
3242
|
+
if (part.fileData !== void 0) {
|
|
3243
|
+
const fileData = part.fileData;
|
|
3244
|
+
const fileExtraKeys = definedKeys(fileData).filter(
|
|
3245
|
+
(key) => key !== "fileUri" && key !== "mimeType"
|
|
3246
|
+
);
|
|
3247
|
+
if (fileExtraKeys.length > 0) {
|
|
3248
|
+
throw badRequest(
|
|
3249
|
+
`${location}: Part.fileData keys [${fileExtraKeys.join(", ")}] are not representable in any-llm.`
|
|
3250
|
+
);
|
|
3251
|
+
}
|
|
3252
|
+
if (fileData.fileUri === void 0) {
|
|
3253
|
+
throw badRequest(`${location}: Part.fileData.fileUri is required.`);
|
|
3254
|
+
}
|
|
3255
|
+
if (fileData.mimeType === void 0) {
|
|
3256
|
+
throw badRequest(`${location}: Part.fileData.mimeType is required.`);
|
|
3257
|
+
}
|
|
3258
|
+
return {
|
|
3259
|
+
kind: "file-uri",
|
|
3260
|
+
uri: fileData.fileUri,
|
|
3261
|
+
mimeType: fileData.mimeType,
|
|
3262
|
+
...part.mediaResolution !== void 0 ? { mediaResolution: convertMediaResolution(part.mediaResolution, location) } : {}
|
|
3263
|
+
};
|
|
3264
|
+
}
|
|
3265
|
+
throw badRequest(`${location}: Part has no recognized fields set.`);
|
|
3266
|
+
}
|
|
3267
|
+
function convertRole(role, location) {
|
|
3268
|
+
if (role === "user") return "user";
|
|
3269
|
+
if (role === "model") return "assistant";
|
|
3270
|
+
throw badRequest(
|
|
3271
|
+
`${location}: Content.role "${String(role)}" is not supported \u2014 only "user" and "model" are recognized. any-llm never infers a missing role.`
|
|
3272
|
+
);
|
|
3273
|
+
}
|
|
3274
|
+
function convertSystemInstruction(systemInstruction) {
|
|
3275
|
+
if (typeof systemInstruction === "string") {
|
|
3276
|
+
return systemInstruction;
|
|
3277
|
+
}
|
|
3278
|
+
const envelopeExtraKeys = definedKeys(systemInstruction).filter(
|
|
3279
|
+
(key) => key !== "parts"
|
|
3280
|
+
);
|
|
3281
|
+
if (envelopeExtraKeys.length > 0) {
|
|
3282
|
+
throw badRequest(
|
|
3283
|
+
`systemInstruction: Content keys [${envelopeExtraKeys.join(", ")}] are not supported on a system instruction \u2014 only parts is allowed.`
|
|
3284
|
+
);
|
|
3285
|
+
}
|
|
3286
|
+
const parts = systemInstruction.parts ?? [];
|
|
3287
|
+
const textFragments = [];
|
|
3288
|
+
parts.forEach((part, index) => {
|
|
3289
|
+
const keys = definedKeys(part);
|
|
3290
|
+
if (keys.length !== 1 || keys[0] !== "text" || part.text === void 0) {
|
|
3291
|
+
const offending = keys.filter((key) => key !== "text");
|
|
3292
|
+
const named = offending.length > 0 ? offending : keys;
|
|
3293
|
+
throw badRequest(
|
|
3294
|
+
`systemInstruction.parts[${index}]: only text parts are allowed in a system instruction \u2014 part keys [${named.length > 0 ? named.join(", ") : "none"}] are not supported.`
|
|
3295
|
+
);
|
|
3296
|
+
}
|
|
3297
|
+
textFragments.push(part.text);
|
|
3298
|
+
});
|
|
3299
|
+
return textFragments.join("");
|
|
3300
|
+
}
|
|
3301
|
+
function geminiContentToMessages(input) {
|
|
3302
|
+
const system = input.systemInstruction !== void 0 ? convertSystemInstruction(input.systemInstruction) : void 0;
|
|
3303
|
+
const messages = input.contents.map((content, contentIndex) => {
|
|
3304
|
+
const location = `contents[${contentIndex}]`;
|
|
3305
|
+
const envelopeExtraKeys = definedKeys(content).filter(
|
|
3306
|
+
(key) => key !== "role" && key !== "parts"
|
|
3307
|
+
);
|
|
3308
|
+
if (envelopeExtraKeys.length > 0) {
|
|
3309
|
+
throw badRequest(
|
|
3310
|
+
`${location}: Content keys [${envelopeExtraKeys.join(", ")}] are not supported \u2014 only role and parts are allowed.`
|
|
3311
|
+
);
|
|
3312
|
+
}
|
|
3313
|
+
const role = convertRole(content.role, location);
|
|
3314
|
+
const parts = (content.parts ?? []).map(
|
|
3315
|
+
(part, partIndex) => convertPart(part, `${location}.parts[${partIndex}]`)
|
|
3316
|
+
);
|
|
3317
|
+
return { role, parts };
|
|
3318
|
+
});
|
|
3319
|
+
return { ...system !== void 0 ? { system } : {}, messages };
|
|
3320
|
+
}
|
|
1120
3321
|
|
|
1121
3322
|
exports.FLEX_DEFAULT_TIMEOUT_MS = FLEX_DEFAULT_TIMEOUT_MS;
|
|
3323
|
+
exports.GEMINI_PRICING = GEMINI_PRICING;
|
|
1122
3324
|
exports.GoogleCacheStore = GoogleCacheStore;
|
|
1123
3325
|
exports.GoogleFileStore = GoogleFileStore;
|
|
1124
3326
|
exports.STANDARD_DEFAULT_TIMEOUT_MS = STANDARD_DEFAULT_TIMEOUT_MS;
|
|
3327
|
+
exports.TIER_FACTOR = TIER_FACTOR;
|
|
1125
3328
|
exports.TRANSPORT_TIMEOUT_BUFFER_MS = TRANSPORT_TIMEOUT_BUFFER_MS;
|
|
1126
3329
|
exports.buildGoogleClient = buildGoogleClient;
|
|
3330
|
+
exports.defaultGeminiRegistry = defaultGeminiRegistry;
|
|
1127
3331
|
exports.geminiAdapter = geminiAdapter;
|
|
3332
|
+
exports.geminiContentToMessages = geminiContentToMessages;
|
|
3333
|
+
exports.geminiModelDescriptors = geminiModelDescriptors;
|
|
3334
|
+
exports.geminiPricingSource = geminiPricingSource;
|
|
3335
|
+
exports.gemmaModelDescriptors = gemmaModelDescriptors;
|
|
3336
|
+
exports.googleProvider = googleProvider;
|
|
1128
3337
|
exports.isGeminiCapacityError = isGeminiCapacityError;
|
|
1129
3338
|
exports.normalizeGroundingCitations = normalizeGroundingCitations;
|
|
3339
|
+
exports.pricingVersion = pricingVersion;
|
|
1130
3340
|
exports.requireApiKey = requireApiKey;
|
|
1131
3341
|
//# sourceMappingURL=index.cjs.map
|
|
1132
3342
|
//# sourceMappingURL=index.cjs.map
|