refactor(registry): B2 migrate to LiteLLM-style schema — unified models[] with kind field
- 71 registry files: flat `media.*Config.models` → `models[]` with `kind` field - `media` wrapper removed → serviceKinds, *Config fields promoted top-level - `type` field renamed to `kind` (llm/image/tts/stt/embedding/embedding/video/music) - providers/index.js: PROVIDER_MEDIA now built from flat top-level media fields - shared/constants/providers.js: buildProviderEntry reads flat top-level media fields - route /v1/models: modelKind() uses kind||type; removed subConfig merge block - models/info route: removed sub-config fallback lookup (all models in PROVIDER_MODELS) - ttsProviders/index.js: synthesizeViaConfig reads tts models from PROVIDER_MODELS - test-models route, helpers.js, validate route: kind||type compat - Baselines: PROVIDERS 62/62 ✅, Alias 90/90 ✅ Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,144 +1,80 @@
|
||||
import { GOOGLE_OAUTH_CLIENT } from "../shared.js";
|
||||
|
||||
export default {
|
||||
"id": "gemini",
|
||||
"alias": "gemini",
|
||||
id: "gemini",
|
||||
alias: "gemini",
|
||||
display: {
|
||||
"name": "Gemini",
|
||||
"icon": "diamond",
|
||||
"color": "#4285F4",
|
||||
"textIcon": "GE",
|
||||
"website": "https://ai.google.dev",
|
||||
"notice": {
|
||||
"apiKeyUrl": "https://aistudio.google.com/app/apikey"
|
||||
},
|
||||
"mediaPriority": 1
|
||||
name: "Gemini",
|
||||
icon: "diamond",
|
||||
color: "#4285F4",
|
||||
textIcon: "GE",
|
||||
website: "https://ai.google.dev",
|
||||
notice: {
|
||||
apiKeyUrl: "https://aistudio.google.com/app/apikey",
|
||||
},
|
||||
mediaPriority: 1,
|
||||
},
|
||||
category: "freeTier",
|
||||
"transport": {
|
||||
"baseUrl": "https://generativelanguage.googleapis.com/v1beta/models",
|
||||
"format": "gemini",
|
||||
...GOOGLE_OAUTH_CLIENT,
|
||||
auth: {"apiKey":{"header":"x-goog-api-key","scheme":"raw"},"oauth":{"header":"Authorization","scheme":"bearer"}},
|
||||
transport: {
|
||||
baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
|
||||
format: "gemini",
|
||||
clientId: "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",
|
||||
clientSecret: "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",
|
||||
auth: {
|
||||
apiKey: {
|
||||
header: "x-goog-api-key",
|
||||
scheme: "raw",
|
||||
},
|
||||
oauth: {
|
||||
header: "Authorization",
|
||||
scheme: "bearer",
|
||||
},
|
||||
},
|
||||
},
|
||||
media: {
|
||||
serviceKinds: ["llm", "embedding", "image", "imageToText", "webSearch", "tts", "stt"],
|
||||
ttsConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models", authType: "apikey", authHeader: "key", format: "gemini-tts", models: [{ id: "gemini-2.5-flash-preview-tts", name: "Gemini 2.5 Flash TTS" }, { id: "gemini-2.5-pro-preview-tts", name: "Gemini 2.5 Pro TTS" }] },
|
||||
sttConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models", authType: "apikey", authHeader: "key", format: "gemini-stt", models: [{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro (Best)" }, { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash" }, { id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite (Cheapest)" }, { id: "gemini-2.0-flash", name: "Gemini 2.0 Flash" }] },
|
||||
embeddingConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models", authType: "apikey", authHeader: "key", models: [{ id: "text-embedding-004", name: "Text Embedding 004", dimensions: 768 }, { id: "embedding-001", name: "Embedding 001", dimensions: 768 }] },
|
||||
searchViaChat: { defaultModel: "gemini-2.5-flash", endpoint: "https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent", pricingUrl: "https://ai.google.dev/pricing", freeTier: "Free tier: 15 RPM, 1M tokens/day on gemini-2.5-flash via AI Studio." },
|
||||
imageConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models" }
|
||||
},
|
||||
"models": [
|
||||
{
|
||||
"id": "gemini-3.1-pro-preview",
|
||||
"name": "Gemini 3.1 Pro Preview"
|
||||
},
|
||||
{
|
||||
"id": "gemini-3.1-flash-lite-preview",
|
||||
"name": "Gemini 3.1 Flash Lite Preview"
|
||||
},
|
||||
{
|
||||
"id": "gemini-3-flash-preview",
|
||||
"name": "Gemini 3 Flash Preview"
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.5-pro",
|
||||
"name": "Gemini 2.5 Pro"
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.5-flash",
|
||||
"name": "Gemini 2.5 Flash"
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.5-flash-lite",
|
||||
"name": "Gemini 2.5 Flash Lite"
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.0-flash",
|
||||
"name": "Gemini 2.0 Flash"
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.0-flash-lite",
|
||||
"name": "Gemini 2.0 Flash Lite"
|
||||
},
|
||||
{
|
||||
"id": "gemma-4-31b-it",
|
||||
"name": "Gemma 4 31B IT"
|
||||
},
|
||||
{
|
||||
"id": "gemini-embedding-2-preview",
|
||||
"name": "Gemini Embedding 2 Preview",
|
||||
"type": "embedding"
|
||||
},
|
||||
{
|
||||
"id": "gemini-embedding-001",
|
||||
"name": "Gemini Embedding 001",
|
||||
"type": "embedding"
|
||||
},
|
||||
{
|
||||
"id": "text-embedding-005",
|
||||
"name": "Text Embedding 005",
|
||||
"type": "embedding"
|
||||
},
|
||||
{
|
||||
"id": "text-embedding-004",
|
||||
"name": "Text Embedding 004 (Legacy)",
|
||||
"type": "embedding"
|
||||
},
|
||||
{
|
||||
"id": "gemini-3.1-flash-image-preview",
|
||||
"name": "Gemini 3.1 Flash Image (Nano Banana 2)",
|
||||
"type": "image",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"id": "gemini-3-pro-image-preview",
|
||||
"name": "Gemini 3 Pro Image (Nano Banana Pro)",
|
||||
"type": "image",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.5-flash-image",
|
||||
"name": "Gemini 2.5 Flash Image (Nano Banana)",
|
||||
"type": "image",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.5-pro",
|
||||
"name": "Gemini 2.5 Pro (Best)",
|
||||
"type": "stt",
|
||||
"params": [
|
||||
"language",
|
||||
"prompt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.5-flash",
|
||||
"name": "Gemini 2.5 Flash",
|
||||
"type": "stt",
|
||||
"params": [
|
||||
"language",
|
||||
"prompt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.5-flash-lite",
|
||||
"name": "Gemini 2.5 Flash Lite (Cheapest)",
|
||||
"type": "stt",
|
||||
"params": [
|
||||
"language",
|
||||
"prompt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "gemini-2.0-flash",
|
||||
"name": "Gemini 2.0 Flash",
|
||||
"type": "stt",
|
||||
"params": [
|
||||
"language",
|
||||
"prompt"
|
||||
]
|
||||
}
|
||||
models: [
|
||||
{ id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview" },
|
||||
{ id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite Preview" },
|
||||
{ id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview" },
|
||||
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro" },
|
||||
{ id: "gemini-2.5-flash", name: "Gemini 2.5 Flash" },
|
||||
{ id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite" },
|
||||
{ id: "gemini-2.0-flash", name: "Gemini 2.0 Flash" },
|
||||
{ id: "gemini-2.0-flash-lite", name: "Gemini 2.0 Flash Lite" },
|
||||
{ id: "gemma-4-31b-it", name: "Gemma 4 31B IT" },
|
||||
{ id: "gemini-embedding-2-preview", name: "Gemini Embedding 2 Preview", kind: "embedding" },
|
||||
{ id: "gemini-embedding-001", name: "Gemini Embedding 001", kind: "embedding" },
|
||||
{ id: "text-embedding-005", name: "Text Embedding 005", kind: "embedding" },
|
||||
{ id: "text-embedding-004", name: "Text Embedding 004 (Legacy)", kind: "embedding" },
|
||||
{ id: "gemini-3.1-flash-image-preview", name: "Gemini 3.1 Flash Image (Nano Banana 2)", params: [], kind: "image" },
|
||||
{ id: "gemini-3-pro-image-preview", name: "Gemini 3 Pro Image (Nano Banana Pro)", params: [], kind: "image" },
|
||||
{ id: "gemini-2.5-flash-image", name: "Gemini 2.5 Flash Image (Nano Banana)", params: [], kind: "image" },
|
||||
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro (Best)", params: ["language","prompt"], kind: "stt" },
|
||||
{ id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", params: ["language","prompt"], kind: "stt" },
|
||||
{ id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite (Cheapest)", params: ["language","prompt"], kind: "stt" },
|
||||
{ id: "gemini-2.0-flash", name: "Gemini 2.0 Flash", params: ["language","prompt"], kind: "stt" },
|
||||
{ id: "gemini-2.5-flash-preview-tts", name: "Gemini 2.5 Flash TTS", kind: "tts" },
|
||||
{ id: "gemini-2.5-pro-preview-tts", name: "Gemini 2.5 Pro TTS", kind: "tts" },
|
||||
{ id: "embedding-001", name: "Embedding 001", dimensions: 768, kind: "embedding" },
|
||||
],
|
||||
serviceKinds: ["llm","embedding","image","imageToText","webSearch","tts","stt"],
|
||||
ttsConfig: {
|
||||
baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
|
||||
authType: "apikey",
|
||||
authHeader: "key",
|
||||
format: "gemini-tts",
|
||||
},
|
||||
sttConfig: {
|
||||
baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
|
||||
authType: "apikey",
|
||||
authHeader: "key",
|
||||
format: "gemini-stt",
|
||||
},
|
||||
embeddingConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models", authType: "apikey", authHeader: "key" },
|
||||
imageConfig: { baseUrl: "https://generativelanguage.googleapis.com/v1beta/models" },
|
||||
searchViaChat: {
|
||||
defaultModel: "gemini-2.5-flash",
|
||||
endpoint: "https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",
|
||||
pricingUrl: "https://ai.google.dev/pricing",
|
||||
freeTier: "Free tier: 15 RPM, 1M tokens/day on gemini-2.5-flash via AI Studio.",
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user