sync google models
This commit is contained in:
@@ -5,6 +5,7 @@ import { mkdir, readdir, rm } from "node:fs/promises";
|
||||
import { z } from "zod";
|
||||
|
||||
import { AuthoredModel, AuthoredModelShape } from "../src/schema.js";
|
||||
import { google } from "./sync/google.js";
|
||||
import { openrouter } from "./sync/openrouter.js";
|
||||
|
||||
const ExistingModel = AuthoredModelShape.partial()
|
||||
@@ -46,11 +47,13 @@ export interface SyncResult {
|
||||
}
|
||||
|
||||
export const providers = {
|
||||
google,
|
||||
openrouter,
|
||||
};
|
||||
|
||||
export const groups = {
|
||||
aggregators: ["openrouter"],
|
||||
direct: ["google"],
|
||||
} as const;
|
||||
|
||||
type ProviderID = keyof typeof providers;
|
||||
|
||||
@@ -0,0 +1,139 @@
|
||||
import { z } from "zod";
|
||||
|
||||
import type { ExistingModel, SyncProvider } from "../sync-models.js";
|
||||
|
||||
const API_ENDPOINT = "https://generativelanguage.googleapis.com/v1beta/models";
|
||||
|
||||
const GoogleModel = z.object({
|
||||
name: z.string(),
|
||||
baseModelId: z.string().optional(),
|
||||
version: z.string().optional(),
|
||||
displayName: z.string().optional(),
|
||||
description: z.string().optional(),
|
||||
inputTokenLimit: z.number().int().nonnegative(),
|
||||
outputTokenLimit: z.number().int().nonnegative(),
|
||||
supportedGenerationMethods: z.array(z.string()).optional(),
|
||||
temperature: z.number().optional(),
|
||||
topP: z.number().optional(),
|
||||
topK: z.number().optional(),
|
||||
maxTemperature: z.number().optional(),
|
||||
thinking: z.boolean().optional(),
|
||||
}).passthrough();
|
||||
|
||||
const GoogleResponse = z.object({
|
||||
models: z.array(GoogleModel).optional(),
|
||||
nextPageToken: z.string().optional(),
|
||||
}).passthrough();
|
||||
|
||||
type GoogleModel = z.infer<typeof GoogleModel>;
|
||||
|
||||
export const google = {
|
||||
id: "google",
|
||||
name: "Google",
|
||||
modelsDir: "providers/google/models",
|
||||
async fetchModels() {
|
||||
const key = process.env.GOOGLE_API_KEY
|
||||
?? process.env.GEMINI_API_KEY
|
||||
?? process.env.GOOGLE_GENERATIVE_AI_API_KEY;
|
||||
if (key === undefined) {
|
||||
throw new Error("Google sync requires GOOGLE_API_KEY, GEMINI_API_KEY, or GOOGLE_GENERATIVE_AI_API_KEY");
|
||||
}
|
||||
|
||||
const models: GoogleModel[] = [];
|
||||
let pageToken: string | undefined;
|
||||
|
||||
do {
|
||||
const url = new URL(API_ENDPOINT);
|
||||
url.searchParams.set("key", key);
|
||||
url.searchParams.set("pageSize", "1000");
|
||||
if (pageToken !== undefined) url.searchParams.set("pageToken", pageToken);
|
||||
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Google models request failed: ${response.status} ${response.statusText}`);
|
||||
}
|
||||
|
||||
const page = GoogleResponse.parse(await response.json());
|
||||
models.push(...page.models ?? []);
|
||||
pageToken = page.nextPageToken;
|
||||
} while (pageToken !== undefined);
|
||||
|
||||
return { models };
|
||||
},
|
||||
parseModels(raw) {
|
||||
return GoogleResponse.parse(raw).models ?? [];
|
||||
},
|
||||
translateModel(model, context) {
|
||||
const id = model.name.replace(/^models\//, "");
|
||||
return {
|
||||
id,
|
||||
model: buildModel(id, model, context.existing(id)),
|
||||
};
|
||||
},
|
||||
} satisfies SyncProvider<GoogleModel>;
|
||||
|
||||
function buildModel(id: string, model: GoogleModel, existing: ExistingModel | undefined) {
|
||||
const methods = new Set(model.supportedGenerationMethods ?? []);
|
||||
const modalities = inferModalities(id, methods, existing);
|
||||
const today = new Date().toISOString().slice(0, 10);
|
||||
|
||||
return {
|
||||
name: model.displayName ?? existing?.name ?? id,
|
||||
family: existing?.family ?? inferFamily(id),
|
||||
release_date: existing?.release_date ?? today,
|
||||
last_updated: existing?.last_updated ?? today,
|
||||
attachment: modalities.input.some((value) => value !== "text"),
|
||||
reasoning: model.thinking ?? existing?.reasoning ?? false,
|
||||
temperature: model.temperature !== undefined || model.maxTemperature !== undefined
|
||||
? true
|
||||
: (existing?.temperature ?? false),
|
||||
tool_call: existing?.tool_call ?? false,
|
||||
structured_output: existing?.structured_output,
|
||||
knowledge: existing?.knowledge,
|
||||
open_weights: id.startsWith("gemma-") || (existing?.open_weights ?? false),
|
||||
status: existing?.status,
|
||||
interleaved: existing?.interleaved,
|
||||
cost: existing?.cost,
|
||||
limit: {
|
||||
context: model.inputTokenLimit,
|
||||
input: existing?.limit?.input,
|
||||
output: model.outputTokenLimit,
|
||||
},
|
||||
modalities,
|
||||
};
|
||||
}
|
||||
|
||||
function inferFamily(id: string) {
|
||||
if (id.startsWith("gemini-embedding")) return "gemini-embedding";
|
||||
if (id.includes("flash-lite")) return "gemini-flash-lite";
|
||||
if (id.includes("flash")) return "gemini-flash";
|
||||
if (id.includes("pro")) return "gemini-pro";
|
||||
if (id.startsWith("gemini-")) return "gemini";
|
||||
if (id.startsWith("gemma-")) return "gemma";
|
||||
if (id.startsWith("imagen-")) return "imagen";
|
||||
if (id.startsWith("veo-")) return "veo";
|
||||
if (id.startsWith("lyria-")) return "lyria";
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function inferModalities(id: string, methods: Set<string>, existing: ExistingModel | undefined) {
|
||||
if (id.startsWith("imagen-")) {
|
||||
return { input: ["text"], output: ["image"] } as const;
|
||||
}
|
||||
if (id.startsWith("veo-")) {
|
||||
return { input: ["text", "image"], output: ["video"] } as const;
|
||||
}
|
||||
if (id.startsWith("lyria-")) {
|
||||
return { input: ["text"], output: ["audio"] } as const;
|
||||
}
|
||||
if (id.includes("tts")) {
|
||||
return { input: ["text"], output: ["audio"] } as const;
|
||||
}
|
||||
if (id.includes("native-audio") || id.includes("live")) {
|
||||
return existing?.modalities ?? { input: ["text", "image", "audio", "video"], output: ["text", "audio"] };
|
||||
}
|
||||
if (methods.has("embedContent") || methods.has("asyncBatchEmbedContent")) {
|
||||
return existing?.modalities ?? { input: ["text"], output: ["text"] };
|
||||
}
|
||||
return existing?.modalities ?? { input: ["text"], output: ["text"] };
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemini-2.5-flash-lite-preview-09-2025"
|
||||
omit = ["structured_output"]
|
||||
@@ -1,2 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemini-2.5-flash-preview-04-17"
|
||||
@@ -1,3 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemini-2.5-flash-preview-05-20"
|
||||
omit = ["structured_output"]
|
||||
@@ -1,3 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemini-2.5-pro-preview-05-06"
|
||||
omit = ["structured_output"]
|
||||
@@ -1,3 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemini-2.5-pro-preview-06-05"
|
||||
omit = ["structured_output"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "ajax-vertex"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "ajax"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "Model that performs Attributed Question Answering."
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 7_168
|
||||
output = 1_024
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "Deep Research Max Preview (Apr-21-2026)"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "Deep Research Preview (Apr-21-2026)"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Deep Research Pro Preview (Dec-12-2025)"
|
||||
family = "gemini-pro"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "fiercefalcon"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "fiercefalcon-inline-citation"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "fiercefalcon"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -1,23 +0,0 @@
|
||||
name = "Gemini 1.5 Flash-8B"
|
||||
family = "gemini-flash"
|
||||
release_date = "2024-10-03"
|
||||
last_updated = "2024-10-03"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-04"
|
||||
tool_call = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.0375
|
||||
output = 0.15
|
||||
cache_read = 0.01
|
||||
|
||||
[limit]
|
||||
context = 1_000_000
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video"]
|
||||
output = ["text"]
|
||||
@@ -1,23 +0,0 @@
|
||||
name = "Gemini 1.5 Flash"
|
||||
family = "gemini-flash"
|
||||
release_date = "2024-05-14"
|
||||
last_updated = "2024-05-14"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-04"
|
||||
tool_call = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.075
|
||||
output = 0.30
|
||||
cache_read = 0.01875
|
||||
|
||||
[limit]
|
||||
context = 1_000_000
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video"]
|
||||
output = ["text"]
|
||||
@@ -1,23 +0,0 @@
|
||||
name = "Gemini 1.5 Pro"
|
||||
family = "gemini-pro"
|
||||
release_date = "2024-02-15"
|
||||
last_updated = "2024-02-15"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-04"
|
||||
tool_call = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 1.25
|
||||
output = 5.00
|
||||
cache_read = 0.3125
|
||||
|
||||
[limit]
|
||||
context = 1_000_000
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 2.0 Flash 001"
|
||||
family = "gemini-flash"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 2.0 Flash-Lite 001"
|
||||
family = "gemini-flash-lite"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -1,18 +1,18 @@
|
||||
name = "Gemini 2.0 Flash Lite"
|
||||
name = "Gemini 2.0 Flash-Lite"
|
||||
family = "gemini-flash-lite"
|
||||
release_date = "2024-12-11"
|
||||
last_updated = "2024-12-11"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-06"
|
||||
tool_call = true
|
||||
structured_output = true
|
||||
knowledge = "2024-06"
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.075
|
||||
output = 0.30
|
||||
output = 0.3
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 2.5 Computer Use Preview 10-2025"
|
||||
family = "gemini"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -1,23 +0,0 @@
|
||||
name = "Gemini 2.5 Flash Image (Preview)"
|
||||
family = "gemini-flash"
|
||||
release_date = "2025-08-26"
|
||||
last_updated = "2025-08-26"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-06"
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.30
|
||||
output = 30
|
||||
cache_read = 0.075
|
||||
|
||||
[limit]
|
||||
context = 32_768
|
||||
output = 32_768
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["text", "image"]
|
||||
@@ -1,16 +1,16 @@
|
||||
name = "Gemini 2.5 Flash Image"
|
||||
name = "Nano Banana"
|
||||
family = "gemini-flash"
|
||||
release_date = "2025-08-26"
|
||||
last_updated = "2025-08-26"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-06"
|
||||
tool_call = false
|
||||
knowledge = "2025-06"
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.30
|
||||
input = 0.3
|
||||
output = 30
|
||||
cache_read = 0.075
|
||||
|
||||
@@ -20,4 +20,4 @@ output = 32_768
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["text", "image"]
|
||||
output = ["text", "image"]
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
name = "Gemini 2.5 Flash Lite Preview 06-17"
|
||||
family = "gemini-flash-lite"
|
||||
release_date = "2025-06-17"
|
||||
last_updated = "2025-06-17"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.10
|
||||
output = 0.40
|
||||
cache_read = 0.025
|
||||
input_audio = 0.30
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video", "pdf"]
|
||||
output = ["text"]
|
||||
@@ -1,24 +0,0 @@
|
||||
name = "Gemini 2.5 Flash Lite Preview 09-25"
|
||||
family = "gemini-flash-lite"
|
||||
release_date = "2025-09-25"
|
||||
last_updated = "2025-09-25"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
structured_output = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.10
|
||||
output = 0.40
|
||||
cache_read = 0.025
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video", "pdf"]
|
||||
output = ["text"]
|
||||
@@ -1,20 +1,20 @@
|
||||
name = "Gemini 2.5 Flash Lite"
|
||||
name = "Gemini 2.5 Flash-Lite"
|
||||
family = "gemini-flash-lite"
|
||||
release_date = "2025-06-17"
|
||||
last_updated = "2025-06-17"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
structured_output = true
|
||||
knowledge = "2025-01"
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.10
|
||||
output = 0.40
|
||||
input = 0.1
|
||||
output = 0.4
|
||||
cache_read = 0.01
|
||||
input_audio = 0.30
|
||||
input_audio = 0.3
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 2.5 Flash Native Audio Latest"
|
||||
family = "gemini-flash"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video"]
|
||||
output = ["text", "audio"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 2.5 Flash Native Audio Preview 09-2025"
|
||||
family = "gemini-flash"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video"]
|
||||
output = ["text", "audio"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 2.5 Flash Native Audio Preview 12-2025"
|
||||
family = "gemini-flash"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video"]
|
||||
output = ["text", "audio"]
|
||||
@@ -1,23 +0,0 @@
|
||||
name = "Gemini 2.5 Flash Preview 04-17"
|
||||
family = "gemini-flash"
|
||||
release_date = "2025-04-17"
|
||||
last_updated = "2025-04-17"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.15
|
||||
output = 0.60
|
||||
cache_read = 0.0375
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video", "pdf"]
|
||||
output = ["text"]
|
||||
@@ -1,24 +0,0 @@
|
||||
name = "Gemini 2.5 Flash Preview 05-20"
|
||||
family = "gemini-flash"
|
||||
release_date = "2025-05-20"
|
||||
last_updated = "2025-05-20"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
structured_output = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.15
|
||||
output = 0.60
|
||||
cache_read = 0.0375
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video", "pdf"]
|
||||
output = ["text"]
|
||||
@@ -1,25 +0,0 @@
|
||||
name = "Gemini 2.5 Flash Preview 09-25"
|
||||
family = "gemini-flash"
|
||||
release_date = "2025-09-25"
|
||||
last_updated = "2025-09-25"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
structured_output = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.30
|
||||
output = 2.50
|
||||
cache_read = 0.075
|
||||
input_audio = 1.00
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video", "pdf"]
|
||||
output = ["text"]
|
||||
@@ -4,19 +4,19 @@ release_date = "2025-05-01"
|
||||
last_updated = "2025-05-01"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
knowledge = "2025-01"
|
||||
temperature = true
|
||||
tool_call = false
|
||||
knowledge = "2025-01"
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.50
|
||||
output = 10.00
|
||||
input = 0.5
|
||||
output = 10
|
||||
|
||||
[limit]
|
||||
context = 8_000
|
||||
output = 16_000
|
||||
context = 8_192
|
||||
output = 16_384
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["audio"]
|
||||
output = ["audio"]
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
name = "Gemini 2.5 Pro Preview 05-06"
|
||||
family = "gemini-pro"
|
||||
release_date = "2025-05-06"
|
||||
last_updated = "2025-05-06"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
structured_output = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 1.25
|
||||
output = 10.00
|
||||
cache_read = 0.31
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video", "pdf"]
|
||||
output = ["text"]
|
||||
@@ -1,24 +0,0 @@
|
||||
name = "Gemini 2.5 Pro Preview 06-05"
|
||||
family = "gemini-pro"
|
||||
release_date = "2025-06-05"
|
||||
last_updated = "2025-06-05"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
structured_output = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 1.25
|
||||
output = 10.00
|
||||
cache_read = 0.31
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video", "pdf"]
|
||||
output = ["text"]
|
||||
@@ -4,19 +4,19 @@ release_date = "2025-05-01"
|
||||
last_updated = "2025-05-01"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
knowledge = "2025-01"
|
||||
temperature = true
|
||||
tool_call = false
|
||||
knowledge = "2025-01"
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 1.00
|
||||
output = 20.00
|
||||
input = 1
|
||||
output = 20
|
||||
|
||||
[limit]
|
||||
context = 8_000
|
||||
output = 16_000
|
||||
context = 8_192
|
||||
output = 16_384
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["audio"]
|
||||
output = ["audio"]
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Nano Banana Pro"
|
||||
family = "gemini-pro"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 32_768
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -11,19 +11,19 @@ knowledge = "2025-01"
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 2.00
|
||||
output = 12.00
|
||||
cache_read = 0.20
|
||||
input = 2
|
||||
output = 12
|
||||
cache_read = 0.2
|
||||
|
||||
[[cost.tiers]]
|
||||
tier = { size = 200_000 }
|
||||
input = 4.00
|
||||
output = 18.00
|
||||
cache_read = 0.40
|
||||
input = 4
|
||||
output = 18
|
||||
cache_read = 0.4
|
||||
|
||||
[limit]
|
||||
context = 1000000
|
||||
output = 64000
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "video", "audio", "pdf"]
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
name = "Gemini 3.1 Flash Image (Preview)"
|
||||
name = "Nano Banana 2"
|
||||
family = "gemini-flash"
|
||||
release_date = "2026-02-26"
|
||||
last_updated = "2026-02-26"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = false
|
||||
knowledge = "2025-01"
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.50
|
||||
output = 60.00
|
||||
input = 0.5
|
||||
output = 60
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 32_768
|
||||
context = 65_536
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "pdf"]
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 3.1 Flash Live Preview"
|
||||
family = "gemini-flash"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video"]
|
||||
output = ["text", "audio"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 3.1 Flash TTS EAP"
|
||||
family = "gemini-flash"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 8_192
|
||||
output = 16_384
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["audio"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini 3.1 Flash TTS Preview"
|
||||
family = "gemini-flash"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 8_192
|
||||
output = 16_384
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["audio"]
|
||||
@@ -5,17 +5,17 @@ last_updated = "2025-05-20"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
knowledge = "2025-05"
|
||||
tool_call = false
|
||||
knowledge = "2025-05"
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.15
|
||||
output = 0.00
|
||||
output = 0
|
||||
|
||||
[limit]
|
||||
context = 2_048
|
||||
output = 3_072
|
||||
output = 1
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini Embedding 2 Preview"
|
||||
family = "gemini-embedding"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 8_192
|
||||
output = 1
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini Embedding 2"
|
||||
family = "gemini-embedding"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 8_192
|
||||
output = 1
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -1,24 +0,0 @@
|
||||
name = "Gemini Live 2.5 Flash Preview Native Audio"
|
||||
family = "gemini-flash"
|
||||
release_date = "2025-06-17"
|
||||
last_updated = "2025-09-18"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = false
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.50
|
||||
output = 2.00
|
||||
input_audio = 3.00
|
||||
output_audio = 12.00
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text", "audio", "video"]
|
||||
output = ["text", "audio"]
|
||||
@@ -1,24 +0,0 @@
|
||||
name = "Gemini Live 2.5 Flash"
|
||||
family = "gemini-flash"
|
||||
release_date = "2025-09-01"
|
||||
last_updated = "2025-09-01"
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
knowledge = "2025-01"
|
||||
tool_call = true
|
||||
open_weights = false
|
||||
|
||||
[cost]
|
||||
input = 0.50
|
||||
output = 2.00
|
||||
input_audio = 3.00
|
||||
output_audio = 12.00
|
||||
|
||||
[limit]
|
||||
context = 128_000
|
||||
output = 8_000
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image", "audio", "video"]
|
||||
output = ["text", "audio"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini Pro Latest"
|
||||
family = "gemini-pro"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini Robotics-ER 1.5 Preview"
|
||||
family = "gemini"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Gemini Robotics-ER 1.6 Preview"
|
||||
family = "gemini"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -1,23 +0,0 @@
|
||||
name = "Gemma 3 12B"
|
||||
family = "gemma"
|
||||
release_date = "2025-03-13"
|
||||
last_updated = "2025-03-13"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-10"
|
||||
tool_call = false
|
||||
structured_output = true
|
||||
open_weights = true
|
||||
|
||||
[cost]
|
||||
input = 0
|
||||
output = 0
|
||||
|
||||
[limit]
|
||||
context = 32_768
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["text"]
|
||||
@@ -1,23 +0,0 @@
|
||||
name = "Gemma 3 27B"
|
||||
family = "gemma"
|
||||
release_date = "2025-03-12"
|
||||
last_updated = "2025-03-12"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-10"
|
||||
tool_call = true
|
||||
structured_output = true
|
||||
open_weights = true
|
||||
|
||||
[cost]
|
||||
input = 0
|
||||
output = 0
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["text"]
|
||||
@@ -1,22 +0,0 @@
|
||||
name = "Gemma 3 4B"
|
||||
family = "gemma"
|
||||
release_date = "2025-03-13"
|
||||
last_updated = "2025-03-13"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-10"
|
||||
tool_call = false
|
||||
open_weights = true
|
||||
|
||||
[cost]
|
||||
input = 0
|
||||
output = 0
|
||||
|
||||
[limit]
|
||||
context = 32_768
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["text"]
|
||||
@@ -1,22 +0,0 @@
|
||||
name = "Gemma 3n 2B"
|
||||
family = "gemma"
|
||||
release_date = "2025-07-09"
|
||||
last_updated = "2025-07-09"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-10"
|
||||
tool_call = false
|
||||
open_weights = true
|
||||
|
||||
[cost]
|
||||
input = 0
|
||||
output = 0
|
||||
|
||||
[limit]
|
||||
context = 8_192
|
||||
output = 2_000
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -1,22 +0,0 @@
|
||||
name = "Gemma 3n 4B"
|
||||
family = "gemma"
|
||||
release_date = "2025-05-20"
|
||||
last_updated = "2025-05-20"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = true
|
||||
knowledge = "2024-10"
|
||||
tool_call = false
|
||||
open_weights = true
|
||||
|
||||
[cost]
|
||||
input = 0
|
||||
output = 0
|
||||
|
||||
[limit]
|
||||
context = 8_192
|
||||
output = 2_000
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -1,8 +1,8 @@
|
||||
name = "Gemma 4 26B"
|
||||
name = "Gemma 4 26B A4B IT"
|
||||
family = "gemma"
|
||||
release_date = "2026-04-02"
|
||||
last_updated = "2026-04-02"
|
||||
attachment = false
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = true
|
||||
@@ -10,8 +10,8 @@ structured_output = true
|
||||
open_weights = true
|
||||
|
||||
[limit]
|
||||
context = 256000
|
||||
output = 8192
|
||||
context = 262_144
|
||||
output = 32_768
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
name = "Gemma 4 31B"
|
||||
name = "Gemma 4 31B IT"
|
||||
family = "gemma"
|
||||
release_date = "2026-04-02"
|
||||
last_updated = "2026-04-02"
|
||||
attachment = false
|
||||
attachment = true
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = true
|
||||
@@ -10,8 +10,8 @@ structured_output = true
|
||||
open_weights = true
|
||||
|
||||
[limit]
|
||||
context = 256000
|
||||
output = 8192
|
||||
context = 262_144
|
||||
output = 32_768
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Imagen 4 Fast"
|
||||
family = "imagen"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["image"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Imagen 4"
|
||||
family = "imagen"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["image"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Imagen 4 Ultra"
|
||||
family = "imagen"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["image"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Lyria 3 Clip Preview"
|
||||
family = "lyria"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["audio"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Lyria 3 Pro Preview"
|
||||
family = "gemini-pro"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 1_048_576
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["audio"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Nano Banana Pro"
|
||||
family = "gemini-pro"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = true
|
||||
temperature = true
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 32_768
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Veo 2"
|
||||
family = "veo"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["video"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Veo 3 fast"
|
||||
family = "veo"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["video"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Veo 3"
|
||||
family = "veo"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["video"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Veo 3.1 fast"
|
||||
family = "veo"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["video"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Veo 3.1"
|
||||
family = "veo"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["video"]
|
||||
@@ -0,0 +1,17 @@
|
||||
name = "Veo 3.1 lite"
|
||||
family = "veo"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = true
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 480
|
||||
output = 8_192
|
||||
|
||||
[modalities]
|
||||
input = ["text", "image"]
|
||||
output = ["video"]
|
||||
@@ -0,0 +1,16 @@
|
||||
name = "Waverunner Agent"
|
||||
release_date = "2026-05-19"
|
||||
last_updated = "2026-05-19"
|
||||
attachment = false
|
||||
reasoning = false
|
||||
temperature = false
|
||||
tool_call = false
|
||||
open_weights = false
|
||||
|
||||
[limit]
|
||||
context = 131_072
|
||||
output = 65_536
|
||||
|
||||
[modalities]
|
||||
input = ["text"]
|
||||
output = ["text"]
|
||||
@@ -1,4 +1,4 @@
|
||||
name = "Google"
|
||||
env = ["GOOGLE_GENERATIVE_AI_API_KEY", "GEMINI_API_KEY"]
|
||||
env = ["GOOGLE_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY", "GEMINI_API_KEY"]
|
||||
npm = "@ai-sdk/google"
|
||||
doc = "https://ai.google.dev/gemini-api/docs/models"
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemini-2.5-flash-lite-preview-09-2025"
|
||||
@@ -1,2 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemma-3-12b-it"
|
||||
@@ -1,2 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemma-3-4b-it"
|
||||
@@ -1,2 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemma-3n-e2b-it"
|
||||
@@ -1,2 +0,0 @@
|
||||
[extends]
|
||||
from = "google/gemma-3n-e4b-it"
|
||||
@@ -4,12 +4,14 @@ TODO: delete
|
||||
|
||||
Model syncs are centralized in `packages/core/script/sync-models.ts`. The runner owns file IO, TOML formatting, validation, reporting, dry runs, and deletion behavior. Individual provider sync modules only fetch source data, parse it, and translate each source model into the catalog schema.
|
||||
|
||||
The current grouped sync target is `aggregators`, which runs OpenRouter only.
|
||||
The grouped sync targets are `aggregators`, which runs OpenRouter, and `direct`, which runs direct provider APIs like Google.
|
||||
|
||||
## Commands
|
||||
|
||||
- `bun models:sync aggregators` syncs every provider in the `aggregators` group.
|
||||
- `bun models:sync openrouter` syncs only OpenRouter.
|
||||
- `bun models:sync direct` syncs every provider in the `direct` group.
|
||||
- `bun models:sync google` syncs only Google.
|
||||
- `bun models:sync aggregators --dry-run` prints changes without writing model files.
|
||||
- `bun models:sync aggregators --new-only` creates new model files but skips updates and removals.
|
||||
- `bun validate` validates the generated catalog after a sync.
|
||||
@@ -108,6 +110,16 @@ OpenRouter is implemented in `packages/core/script/sync/openrouter.ts`.
|
||||
- `structured_output` comes from `supported_parameters.includes("structured_outputs")` only.
|
||||
- Existing `status`, `interleaved`, `knowledge`, `limit.input`, and `cost.tiers` may be preserved when OpenRouter is not authoritative enough for those fields.
|
||||
|
||||
## Google Notes
|
||||
|
||||
Google is implemented in `packages/core/script/sync/google.ts`.
|
||||
|
||||
- Source endpoint: `https://generativelanguage.googleapis.com/v1beta/models`.
|
||||
- Required auth: `GOOGLE_API_KEY`, `GEMINI_API_KEY`, or `GOOGLE_GENERATIVE_AI_API_KEY`.
|
||||
- Model IDs are derived from the `models/{model}` resource names.
|
||||
- The API is authoritative for the model list, display names, token limits, supported methods, temperature metadata, and the `thinking` flag when present.
|
||||
- Existing pricing, knowledge cutoff, release date, modalities, tool calling, structured output, status, and interleaved metadata may be preserved when the Google API is not authoritative enough for those fields.
|
||||
|
||||
## Vercel Status
|
||||
|
||||
Vercel is intentionally not wired into `bun models:sync` right now. Keep using the existing `vercel:generate` script until Vercel sync behavior is redesigned and reviewed separately.
|
||||
|
||||
Reference in New Issue
Block a user