diff --git a/packages/core/src/sync/index.ts b/packages/core/src/sync/index.ts index 3b8c8fce97..a14686c327 100644 --- a/packages/core/src/sync/index.ts +++ b/packages/core/src/sync/index.ts @@ -13,6 +13,7 @@ import { crossmodel } from "./providers/crossmodel.js"; import { deepinfra } from "./providers/deepinfra.js"; import { digitalocean } from "./providers/digitalocean.js"; import { empiriolabs } from "./providers/empiriolabs.js"; +import { eurouter } from "./providers/eurouter.js"; import { google } from "./providers/google.js"; import { huggingface } from "./providers/huggingface.js"; import { kilo } from "./providers/kilo.js"; @@ -102,6 +103,7 @@ export const providers: { deepinfra: SyncProvider; digitalocean: SyncProvider; empiriolabs: SyncProvider; + eurouter: SyncProvider; google: SyncProvider; kilo: SyncProvider; huggingface: SyncProvider; @@ -124,6 +126,7 @@ export const providers: { deepinfra, digitalocean, empiriolabs, + eurouter, google, kilo, huggingface, @@ -139,7 +142,7 @@ export const providers: { }; export const groups = { - aggregators: ["crossmodel", "empiriolabs", "huggingface", "kilo", "llmgateway", "openrouter", "vercel"], + aggregators: ["crossmodel", "empiriolabs", "eurouter", "huggingface", "kilo", "llmgateway", "openrouter", "vercel"], cloudflare: ["cloudflare-workers-ai"], direct: ["ambient", "anthropic", "baseten", "chutes", "deepinfra", "digitalocean", "google", "openai", "ovhcloud", "pioneer", "venice", "wandb", "xai"], } as const; diff --git a/packages/core/src/sync/providers/eurouter.ts b/packages/core/src/sync/providers/eurouter.ts new file mode 100644 index 0000000000..67948799cc --- /dev/null +++ b/packages/core/src/sync/providers/eurouter.ts @@ -0,0 +1,314 @@ +import { readFileSync, readdirSync } from "node:fs"; +import path from "node:path"; +import { z } from "zod"; + +import { describeModel } from "../../describe.js"; +import { inferKimiFamily, ModelFamilyValues } from "../../family.js"; +import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js"; +import { factorBaseModel, resolveCanonicalBaseModel } from "./openrouter.js"; + +const API_ENDPOINT = "https://api.eurouter.ai/api/v1/models"; +const MODELS_DIR = path.join(import.meta.dirname, "..", "..", "..", "..", "..", "models"); +const baseModelReasoningByID = new Map(); + +const ReasoningEffort = z.enum(["none", "minimal", "low", "medium", "high", "xhigh", "max", "default"]); + +export const EUrouterModel = z.object({ + id: z.string(), + canonical_slug: z.string().nullable().optional(), + name: z.string(), + created: z.number().nullable(), + description: z.string().optional(), + hugging_face_id: z.string().nullable().optional(), + knowledge_cutoff: z.string().nullable().optional(), + release_date: z.string().nullable().optional(), + last_updated: z.string().nullable().optional(), + context_length: z.number().nullable(), + architecture: z.object({ + input_modalities: z.array(z.string()), + output_modalities: z.array(z.string()), + }).passthrough(), + pricing: z.object({ + prompt: z.string(), + completion: z.string(), + internal_reasoning: z.string().optional(), + input_cache_read: z.string().optional(), + input_cache_write: z.string().optional(), + currency: z.string(), + }).passthrough().nullable().optional(), + top_provider: z.object({ + context_length: z.number().nullable(), + max_completion_tokens: z.number().nullable(), + }).passthrough(), + supported_parameters: z.array(z.string()), + reasoning: z.object({ + mandatory: z.boolean(), + supported_efforts: z.array(ReasoningEffort), + supports_max_tokens: z.boolean(), + }).passthrough().optional(), + author: z.string().optional(), +}).passthrough(); + +export const EUrouterResponse = z.object({ + data: z.array(EUrouterModel), +}).passthrough(); + +export type EUrouterModel = z.infer; + +export const eurouter = { + id: "eurouter", + name: "EUrouter", + modelsDir: "providers/eurouter/models", + sourceID(model) { + return model.id; + }, + skippedNotice(ids) { + if (ids.length === 0) return []; + if (ids.length === 1) { + return [ + `1 EUrouter model was not created because it lacks an authoritative release date and canonical metadata: ${ids[0]}`, + ]; + } + return [`${ids.length} EUrouter models were not created because they lack an authoritative release date and canonical metadata: ${ids.join(", ")}`]; + }, + async fetchModels() { + const headers = process.env.EUROUTER_API_KEY + ? { Authorization: `Bearer ${process.env.EUROUTER_API_KEY}` } + : undefined; + const response = await fetch(API_ENDPOINT, { headers }); + if (!response.ok) { + throw new Error(`EUrouter request failed: ${response.status} ${response.statusText}`); + } + return response.json(); + }, + parseModels(raw) { + return EUrouterResponse.parse(raw).data; + }, + translateModel(model, context) { + const existing = context.existing(model.id); + const canonical = resolveModelBase(model, existing); + if (canonical === undefined && model.release_date == null && existing?.release_date === undefined) { + return undefined; + } + return { + id: model.id, + model: buildEUrouterModel(model, existing), + }; + }, +} satisfies SyncProvider; + +function price(value: string | undefined) { + if (value === undefined) return undefined; + const number = Number(value); + return Number.isFinite(number) && number >= 0 + ? Math.round(number * 1_000_000_000_000) / 1_000_000 + : undefined; +} + +type Modality = "text" | "audio" | "image" | "video" | "pdf"; + +function modalities(values: string[], fallback: Modality[]): Modality[] { + const allowed = new Set(["text", "audio", "image", "video", "pdf"]); + const result = values + .map((value) => value.toLowerCase()) + .map((value) => value === "file" ? "pdf" : value) + .filter((value): value is Modality => allowed.has(value as Modality)); + return [...new Set(result.length > 0 ? result : fallback)]; +} + +function inferFamily(model: EUrouterModel, name: string) { + const kimiFamily = inferKimiFamily(model.id, name); + if (kimiFamily !== undefined) return kimiFamily; + + const target = `${model.id} ${name}`.toLowerCase(); + return [...ModelFamilyValues] + .sort((a, b) => b.length - a.length) + .find((family) => { + const value = family.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + if (family === "o") { + return new RegExp(`(^|[^a-z0-9])${value}(?=\\d|$|[^a-z0-9])`).test(target); + } + return new RegExp(`(^|[^a-z0-9])${value}(?=$|[^a-z0-9])`).test(target); + }); +} + +function reasoningOptions( + reasoning: EUrouterModel["reasoning"], +): SyncedFullModel["reasoning_options"] { + if (reasoning === undefined) return undefined; + + const options: NonNullable = []; + const efforts = reasoning.mandatory + ? reasoning.supported_efforts.filter((value) => value !== "none") + : reasoning.supported_efforts; + + if (efforts.length > 0) options.push({ type: "effort", values: efforts }); + if (reasoning.supports_max_tokens) options.push({ type: "budget_tokens" }); + return options.length > 0 ? options : undefined; +} + +function reasoningCapability(model: EUrouterModel, params: Set) { + const hasReasoningParameter = params.has("reasoning") + || params.has("include_reasoning") + || params.has("reasoning_effort"); + const hasReasoningControls = model.reasoning?.mandatory === true + || (model.reasoning?.supported_efforts.length ?? 0) > 0 + || model.reasoning?.supports_max_tokens === true; + return hasReasoningControls || hasReasoningParameter ? true : undefined; +} + +export function resolveEUrouterBaseModel(canonicalSlug: string | null | undefined) { + if (canonicalSlug === undefined || canonicalSlug === null) return undefined; + + const [author, ...modelParts] = canonicalSlug.split("/"); + if (author === undefined || modelParts.length === 0) return undefined; + const aliases: Record = { + mistral: "mistralai", + moonshot: "moonshotai", + zhipu: "zai", + }; + const resolved = resolveCanonicalBaseModel(`${aliases[author] ?? author}/${modelParts.join("/")}`); + if (resolved !== undefined) return resolved; + + const metadataPath = path.join(MODELS_DIR, `${canonicalSlug}.toml`); + try { + return readdirSync(path.dirname(metadataPath)).includes(path.basename(metadataPath)) + ? canonicalSlug + : undefined; + } catch { + return undefined; + } +} + +function baseModelReasoning(modelID: string | undefined) { + if (modelID === undefined) return undefined; + if (baseModelReasoningByID.has(modelID)) return baseModelReasoningByID.get(modelID); + + let reasoning: boolean | undefined; + try { + const metadata = Bun.TOML.parse( + readFileSync(path.join(MODELS_DIR, `${modelID}.toml`), "utf8"), + ) as Record; + reasoning = typeof metadata.reasoning === "boolean" ? metadata.reasoning : undefined; + } catch { + reasoning = undefined; + } + baseModelReasoningByID.set(modelID, reasoning); + return reasoning; +} + +function resolveModelBase(model: EUrouterModel, existing: ExistingModel | undefined) { + const routeCanonical = model.author === undefined ? undefined : `${model.author}/${model.id}`; + return existing?.base_model + ?? resolveEUrouterBaseModel(model.canonical_slug) + ?? resolveEUrouterBaseModel(routeCanonical); +} + +export function buildEUrouterModel( + model: EUrouterModel, + existing: ExistingModel | undefined, +): SyncedModel { + const params = new Set(model.supported_parameters); + const name = model.name; + const input = modalities(model.architecture.input_modalities, ["text"]); + const output = modalities(model.architecture.output_modalities, ["text"]); + const prompt = price(model.pricing?.prompt); + const completion = price(model.pricing?.completion); + const advertisedReasoning = model.reasoning; + const reasoning = reasoningCapability(model, params); + const apiReasoningOptions = reasoningOptions(advertisedReasoning); + const reasoning_options = existing?.reasoning_options?.length + ? existing.reasoning_options + : apiReasoningOptions ?? existing?.reasoning_options ?? (reasoning === true ? [] : undefined); + const context = model.context_length ?? model.top_provider.context_length ?? existing?.limit?.context ?? 0; + const family = inferFamily(model, name); + const familyValue = existing?.family === "o" && family !== "o" + ? family + : (existing?.family ?? family); + const attachment = input.some((value) => value !== "text"); + const toolCall = params.has("tools") || params.has("tool_choice"); + const structuredOutput = params.has("response_format") || params.has("structured_outputs"); + const knowledge = model.knowledge_cutoff?.slice(0, 10) ?? existing?.knowledge; + const openWeights = Boolean(model.hugging_face_id); + const canonical = resolveModelBase(model, existing); + const releaseDate = model.release_date ?? existing?.release_date; + const effectiveReasoning = reasoning ?? existing?.reasoning ?? baseModelReasoning(canonical); + const cost = model.pricing?.currency === "USD" && prompt !== undefined && completion !== undefined + ? { + input: prompt, + output: completion, + reasoning: effectiveReasoning === true + ? price(model.pricing?.internal_reasoning) + : undefined, + cache_read: price(model.pricing?.input_cache_read), + cache_write: price(model.pricing?.input_cache_write), + tiers: existing?.cost?.tiers, + } + : existing?.cost; + const limit = { + context, + input: existing?.limit?.input, + output: model.top_provider.max_completion_tokens ?? existing?.limit?.output ?? context, + }; + const description = existing?.description + ?? model.description?.replaceAll(/\s+/g, " ").trim() + ?? describeModel({ + id: model.id, + name, + family: familyValue, + reasoning: effectiveReasoning, + tool_call: toolCall, + structured_output: structuredOutput, + open_weights: openWeights, + limit, + modalities: { input, output }, + }); + + if (canonical !== undefined) { + return factorBaseModel( + canonical, + { + description, + attachment, + reasoning, + reasoning_options, + temperature: params.has("temperature"), + tool_call: toolCall, + structured_output: structuredOutput, + status: existing?.status, + interleaved: existing?.interleaved, + limit, + modalities: { input, output }, + cost, + }, + limit, + existing?.base_model === canonical ? existing.base_model_omit : undefined, + ); + } + + if (releaseDate === undefined) { + throw new Error(`EUrouter model has no authoritative release date: ${model.id}`); + } + const lastUpdated = model.last_updated ?? existing?.last_updated ?? releaseDate; + const fullReasoningOptions = reasoning_options === undefined ? {} : { reasoning_options }; + return { + name, + description, + family: familyValue, + release_date: releaseDate, + last_updated: lastUpdated, + attachment, + reasoning: effectiveReasoning ?? false, + ...fullReasoningOptions, + temperature: params.has("temperature"), + tool_call: toolCall, + structured_output: structuredOutput, + knowledge, + open_weights: openWeights, + status: existing?.status, + interleaved: existing?.interleaved, + cost, + limit, + modalities: { input, output }, + } satisfies SyncedFullModel; +} diff --git a/packages/core/test/sync.test.ts b/packages/core/test/sync.test.ts index d9287ebca8..fc401c9982 100644 --- a/packages/core/test/sync.test.ts +++ b/packages/core/test/sync.test.ts @@ -25,6 +25,12 @@ import { resolveEmpiriolabsBaseModel, type EmpiriolabsModel, } from "../src/sync/providers/empiriolabs.js"; +import { + buildEUrouterModel, + eurouter, + resolveEUrouterBaseModel, + type EUrouterModel, +} from "../src/sync/providers/eurouter.js"; import { buildOpenRouterModel, openrouter, @@ -892,6 +898,202 @@ test("defaults new reasoning models to empty reasoning options", () => { }); }); +test("parses the public EUrouter catalog response", () => { + expect(eurouter.parseModels({ object: "list", data: [eurouterModel()] })).toHaveLength(1); +}); + +test("syncs EUrouter pricing, capabilities, modalities, and reasoning controls", () => { + const model = buildEUrouterModel(eurouterModel(), undefined); + + expect(model).toMatchObject({ + base_model: "anthropic/claude-sonnet-5", + reasoning_options: [ + { type: "effort", values: ["low", "medium", "high"] }, + { type: "budget_tokens" }, + ], + temperature: true, + structured_output: true, + cost: { + input: 2, + output: 10, + reasoning: 3, + cache_read: 0.2, + cache_write: 2.5, + }, + }); +}); + +test("maps EUrouter author aliases to canonical metadata", () => { + expect(resolveEUrouterBaseModel("zhipu/glm-5.2")).toBe("zhipuai/glm-5.2"); + expect(resolveEUrouterBaseModel("moonshot/kimi-k2.6")).toBe("moonshotai/kimi-k2.6"); + expect(resolveEUrouterBaseModel("minimax/minimax-m2")).toBe("minimax/MiniMax-M2"); +}); + +test("uses EUrouter lifecycle dates instead of the catalog insertion timestamp", () => { + const model = buildEUrouterModel(eurouterModel({ + id: "example-model", + canonical_slug: "example/example-model", + created: 1_799_712_000, + release_date: "2025-02-03", + last_updated: "2025-04-05", + }), undefined); + + expect(model).toMatchObject({ + release_date: "2025-02-03", + last_updated: "2025-04-05", + }); +}); + +test("falls back to the EUrouter route ID when a canonical snapshot has no metadata", () => { + const model = buildEUrouterModel(eurouterModel({ + id: "gpt-5.1", + canonical_slug: "openai/gpt-5.1-20251113", + author: "openai", + name: "GPT-5.1", + }), undefined); + + expect(model).toMatchObject({ base_model: "openai/gpt-5.1" }); +}); + +test("inherits canonical reasoning when EUrouter does not advertise reasoning metadata", () => { + const model = buildEUrouterModel(eurouterModel({ + reasoning: undefined, + supported_parameters: ["tools", "response_format"], + }), undefined); + + expect(model).toMatchObject({ + base_model: "anthropic/claude-sonnet-5", + cost: { reasoning: 3 }, + }); + expect("reasoning" in model).toBe(false); +}); + +test("inherits canonical reasoning when EUrouter reports no verified controls", () => { + const model = buildEUrouterModel(eurouterModel({ + reasoning: { + mandatory: false, + supported_efforts: [], + supports_max_tokens: false, + }, + supported_parameters: ["tools", "response_format"], + }), undefined); + + expect(model).toMatchObject({ + base_model: "anthropic/claude-sonnet-5", + cost: { reasoning: 3 }, + }); + expect("reasoning" in model).toBe(false); +}); + +test("omits non-USD EUrouter pricing instead of mislabeling it as USD", () => { + const model = buildEUrouterModel(eurouterModel({ + pricing: { + prompt: "0.000002", + completion: "0.00001", + currency: "EUR", + }, + }), undefined); + + expect("cost" in model).toBe(false); +}); + +test("skips new standalone EUrouter models without an authoritative release date", () => { + const translated = eurouter.translateModel(eurouterModel({ + id: "example-model", + canonical_slug: null, + author: undefined, + release_date: null, + last_updated: null, + }), { + existing: () => undefined, + authored: () => undefined, + }); + + expect(translated).toBeUndefined(); +}); + +test("reports EUrouter models skipped for incomplete metadata", () => { + expect(eurouter.skippedNotice?.(["example-model"])).toEqual([ + "1 EUrouter model was not created because it lacks an authoritative release date and canonical metadata: example-model", + ]); +}); + +test("allows factored EUrouter models to inherit a missing release date", () => { + const model = buildEUrouterModel(eurouterModel({ + release_date: null, + last_updated: null, + }), undefined); + + expect(model).toMatchObject({ base_model: "anthropic/claude-sonnet-5" }); +}); + +test("omits reasoning options when EUrouter explicitly reports no reasoning", () => { + const model = buildEUrouterModel(eurouterModel({ + id: "example-model", + canonical_slug: null, + author: undefined, + reasoning: { + mandatory: false, + supported_efforts: [], + supports_max_tokens: false, + }, + supported_parameters: ["temperature"], + }), undefined); + + expect(model).toMatchObject({ reasoning: false }); + expect("reasoning_options" in model).toBe(false); +}); + +test("preserves authored EUrouter metadata when the API is not authoritative", () => { + const model = buildEUrouterModel(eurouterModel({ + id: "example-model", + canonical_slug: null, + knowledge_cutoff: null, + release_date: null, + last_updated: null, + reasoning: { + mandatory: false, + supported_efforts: [], + supports_max_tokens: false, + }, + supported_parameters: ["tools", "response_format"], + }), { + name: "Curated name", + description: "Curated description", + family: "gpt", + release_date: "2025-01-01", + last_updated: "2025-01-02", + attachment: true, + reasoning: true, + reasoning_options: [{ type: "toggle" }], + tool_call: true, + interleaved: true, + knowledge: "2024-06", + open_weights: false, + status: "beta", + cost: { + input: 1, + output: 2, + tiers: [{ tier: { type: "context", size: 200_000 }, input: 2, output: 4 }], + }, + limit: { context: 1_000_000, input: 900_000, output: 128_000 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] }, + }); + + expect(model).toMatchObject({ + description: "Curated description", + release_date: "2025-01-01", + last_updated: "2025-01-02", + knowledge: "2024-06", + status: "beta", + interleaved: true, + reasoning: true, + reasoning_options: [{ type: "toggle" }], + limit: { input: 900_000 }, + cost: { tiers: [{ tier: { type: "context", size: 200_000 }, input: 2, output: 4 }] }, + }); +}); + test("syncs OpenRouter reasoning efforts from model metadata", () => { const model = buildOpenRouterModel(openRouterModel({ reasoning: { @@ -1322,3 +1524,41 @@ function openRouterModel(overrides: Partial = {}): OpenRouterMo ...overrides, }; } + +function eurouterModel(overrides: Partial = {}): EUrouterModel { + return { + id: "claude-sonnet-5", + canonical_slug: "anthropic/claude-sonnet-5", + name: "Claude Sonnet 5", + created: 1_782_777_600, + description: "Balanced Claude model for coding and agentic workflows", + hugging_face_id: null, + knowledge_cutoff: "2026-01-31", + release_date: "2026-06-30", + last_updated: "2026-06-30", + context_length: 1_000_000, + architecture: { + input_modalities: ["text", "image", "file"], + output_modalities: ["text"], + }, + pricing: { + prompt: "0.000002", + completion: "0.00001", + internal_reasoning: "0.000003", + input_cache_read: "0.0000002", + input_cache_write: "0.0000025", + currency: "USD", + }, + top_provider: { + context_length: 1_000_000, + max_completion_tokens: 128_000, + }, + supported_parameters: ["temperature", "reasoning_effort", "response_format", "tools"], + reasoning: { + mandatory: false, + supported_efforts: ["low", "medium", "high"], + supports_max_tokens: true, + }, + ...overrides, + }; +} diff --git a/providers/eurouter/logo.svg b/providers/eurouter/logo.svg new file mode 100644 index 0000000000..c5d48e7ee1 --- /dev/null +++ b/providers/eurouter/logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/providers/eurouter/models/all-minilm-l6-v2.toml b/providers/eurouter/models/all-minilm-l6-v2.toml new file mode 100644 index 0000000000..3a09039b85 --- /dev/null +++ b/providers/eurouter/models/all-minilm-l6-v2.toml @@ -0,0 +1,18 @@ +name = "All MiniLM L6 v2" +description = "all-MiniLM-L6-v2 is a compact sentence-transformers embedding model for fast English sentence and paragraph retrieval." +release_date = "2021-08-30" +last_updated = "2021-08-30" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = true + +[limit] +context = 256 +output = 256 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/apertus-70b.toml b/providers/eurouter/models/apertus-70b.toml new file mode 100644 index 0000000000..0ac3d6dd84 --- /dev/null +++ b/providers/eurouter/models/apertus-70b.toml @@ -0,0 +1,18 @@ +name = "Apertus 70B Instruct" +description = "Apertus 70B is a fully open multilingual model from the Swiss AI Initiative (ETH Zurich, EPFL, CSCS)." +release_date = "2025-09-02" +last_updated = "2025-09-02" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 65_536 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/bge-large-en-v1.5.toml b/providers/eurouter/models/bge-large-en-v1.5.toml new file mode 100644 index 0000000000..7d69e63359 --- /dev/null +++ b/providers/eurouter/models/bge-large-en-v1.5.toml @@ -0,0 +1,25 @@ +name = "BGE Large EN v1.5" +description = "BGE Large EN v1.5 is an English embedding model with 1024-dimensional vectors, optimized for semantic search and retrieval with long-context inputs." +family = "bge" +release_date = "2024-01-28" +last_updated = "2024-01-28" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.015 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/bge-m3.toml b/providers/eurouter/models/bge-m3.toml new file mode 100644 index 0000000000..333d6d0468 --- /dev/null +++ b/providers/eurouter/models/bge-m3.toml @@ -0,0 +1,19 @@ +name = "BGE M3" +description = "BGE M3 is BAAI's multilingual embedding model for dense, sparse, and multi-vector retrieval with long-context inputs." +family = "bge" +release_date = "2024-01-27" +last_updated = "2024-01-27" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = true + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/bge-multilingual-gemma2.toml b/providers/eurouter/models/bge-multilingual-gemma2.toml new file mode 100644 index 0000000000..a802bbb7e0 --- /dev/null +++ b/providers/eurouter/models/bge-multilingual-gemma2.toml @@ -0,0 +1,19 @@ +name = "BGE Multilingual Gemma2" +description = "BGE Multilingual Gemma2 is a BAAI multilingual embedding model based on Gemma2 for dense retrieval and semantic search." +family = "bge" +release_date = "2024-06-29" +last_updated = "2024-06-29" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = true + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/claude-haiku-4.5.toml b/providers/eurouter/models/claude-haiku-4.5.toml new file mode 100644 index 0000000000..2462bebf62 --- /dev/null +++ b/providers/eurouter/models/claude-haiku-4.5.toml @@ -0,0 +1,17 @@ +base_model = "anthropic/claude-haiku-4-5" +description = "Claude Haiku 4.5 is Anthropic's fastest model, optimized for speed and cost-efficiency while maintaining strong performance." +structured_output = false +reasoning_options = [] + +[cost] +input = 1 +output = 5 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +output = 8_192 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/claude-opus-4-5-20251101.toml b/providers/eurouter/models/claude-opus-4-5-20251101.toml new file mode 100644 index 0000000000..c52f9feaf1 --- /dev/null +++ b/providers/eurouter/models/claude-opus-4-5-20251101.toml @@ -0,0 +1,17 @@ +base_model = "anthropic/claude-opus-4-5-20251101" +description = "Claude Opus 4.5 is Anthropic's most capable model for complex tasks requiring deep analysis, nuanced understanding, and sophisticated reasoning." +structured_output = false +reasoning_options = [] + +[cost] +input = 5 +output = 25 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +output = 8_192 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/claude-opus-4-6.toml b/providers/eurouter/models/claude-opus-4-6.toml new file mode 100644 index 0000000000..44093980d9 --- /dev/null +++ b/providers/eurouter/models/claude-opus-4-6.toml @@ -0,0 +1,20 @@ +base_model = "anthropic/claude-opus-4-6" +description = "Claude Opus 4.6 is Anthropic's most capable model for complex coding, enterprise agents, and professional reasoning with a 1M context window." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 5 +output = 25 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/claude-opus-4-7.toml b/providers/eurouter/models/claude-opus-4-7.toml new file mode 100644 index 0000000000..0c70b104cc --- /dev/null +++ b/providers/eurouter/models/claude-opus-4-7.toml @@ -0,0 +1,17 @@ +base_model = "anthropic/claude-opus-4-7" +description = "Claude Opus 4.7 is Anthropic's frontier model for complex coding, reasoning, and agentic workflows." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 5 +output = 25 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/claude-sonnet-4-5.toml b/providers/eurouter/models/claude-sonnet-4-5.toml new file mode 100644 index 0000000000..9c3ad75773 --- /dev/null +++ b/providers/eurouter/models/claude-sonnet-4-5.toml @@ -0,0 +1,17 @@ +base_model = "anthropic/claude-sonnet-4-5" +description = "Claude Sonnet 4.5 is Anthropic's most advanced model, offering exceptional performance on complex reasoning tasks with a 200K context window." +structured_output = false +reasoning_options = [] + +[cost] +input = 3 +output = 15 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +output = 8_192 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/claude-sonnet-4-6.toml b/providers/eurouter/models/claude-sonnet-4-6.toml new file mode 100644 index 0000000000..6443ba4efb --- /dev/null +++ b/providers/eurouter/models/claude-sonnet-4-6.toml @@ -0,0 +1,20 @@ +base_model = "anthropic/claude-sonnet-4-6" +description = "Claude Sonnet 4.6 is Anthropic's balanced performance model for coding, reasoning, and agentic workflows with a 1M context window." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "max"] + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 3 +output = 15 +reasoning = 0 +cache_read = 0.3 +cache_write = 3.75 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/claude-sonnet-5.toml b/providers/eurouter/models/claude-sonnet-5.toml new file mode 100644 index 0000000000..92bfd671e4 --- /dev/null +++ b/providers/eurouter/models/claude-sonnet-5.toml @@ -0,0 +1,17 @@ +base_model = "anthropic/claude-sonnet-5" +description = "Claude Sonnet 5 is Anthropic's near-frontier balanced model with a 1M-token context window and always-on adaptive thinking, delivering strong coding, reasoning, and agentic performance." +structured_output = true + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high", "xhigh", "max"] + +[cost] +input = 2 +output = 10 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/code-llama-13b-instruct.toml b/providers/eurouter/models/code-llama-13b-instruct.toml new file mode 100644 index 0000000000..afdafe9f50 --- /dev/null +++ b/providers/eurouter/models/code-llama-13b-instruct.toml @@ -0,0 +1,25 @@ +name = "Code Llama 13B Instruct" +description = "Code Llama 13B Instruct is a code-focused model from Meta fine-tuned for instruction following. It supports 16K context and is optimized for code generation, completion, and debugging." +family = "llama" +release_date = "2024-01-29" +last_updated = "2024-01-29" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = true +open_weights = true + +[cost] +input = 0.5 +output = 0.5 +cache_read = 0 +cache_write = 0 + +[limit] +context = 16_384 +output = 16_384 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/codestral-embed.toml b/providers/eurouter/models/codestral-embed.toml new file mode 100644 index 0000000000..c92e1d8f71 --- /dev/null +++ b/providers/eurouter/models/codestral-embed.toml @@ -0,0 +1,25 @@ +name = "Codestral Embed" +description = "Codestral Embed is Mistral AI's code embedding model for semantic code search and retrieval." +family = "codestral-embed" +release_date = "2025-05-01" +last_updated = "2025-05-01" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.15 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/codestral.toml b/providers/eurouter/models/codestral.toml new file mode 100644 index 0000000000..1f4d07a923 --- /dev/null +++ b/providers/eurouter/models/codestral.toml @@ -0,0 +1,25 @@ +name = "Codestral" +description = "Codestral is Mistral AI's code model for code completion, code generation, and instruction-following coding tasks." +family = "codestral" +release_date = "2025-08-01" +last_updated = "2025-08-01" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0 +output = 0.9 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/cohere-embed-english-v3.toml b/providers/eurouter/models/cohere-embed-english-v3.toml new file mode 100644 index 0000000000..3c2668f503 --- /dev/null +++ b/providers/eurouter/models/cohere-embed-english-v3.toml @@ -0,0 +1,25 @@ +name = "Cohere Embed English v3" +description = "Cohere Embed English v3 is an English text embedding model available through Amazon Bedrock." +family = "cohere-embed" +release_date = "2023-11-02" +last_updated = "2023-11-02" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.1 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 512 +output = 512 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/cohere-embed-multilingual-v3.toml b/providers/eurouter/models/cohere-embed-multilingual-v3.toml new file mode 100644 index 0000000000..963a173b8c --- /dev/null +++ b/providers/eurouter/models/cohere-embed-multilingual-v3.toml @@ -0,0 +1,25 @@ +name = "Cohere Embed Multilingual v3" +description = "Cohere Embed Multilingual v3 is a multilingual text embedding model available through Amazon Bedrock." +family = "cohere-embed" +release_date = "2023-11-02" +last_updated = "2023-11-02" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.1 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 512 +output = 512 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/cohere-embed-v4.toml b/providers/eurouter/models/cohere-embed-v4.toml new file mode 100644 index 0000000000..aa76c79c41 --- /dev/null +++ b/providers/eurouter/models/cohere-embed-v4.toml @@ -0,0 +1,25 @@ +name = "Cohere Embed v4" +description = "Cohere Embed v4 is a state-of-the-art embedding model supporting 100+ languages with best-in-class retrieval performance." +family = "cohere-embed" +release_date = "2025-10-02" +last_updated = "2025-10-02" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.1 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 512 +output = 512 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/cosmos3-super-reasoner.toml b/providers/eurouter/models/cosmos3-super-reasoner.toml new file mode 100644 index 0000000000..8eb0fe2b08 --- /dev/null +++ b/providers/eurouter/models/cosmos3-super-reasoner.toml @@ -0,0 +1,26 @@ +name = "Cosmos3 Super Reasoner" +description = "NVIDIA Cosmos3 Super Reasoner is a reasoning model for advanced chat, coding, and tool-assisted workloads." +release_date = "2026-05-31" +last_updated = "2026-05-31" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 0.1 +output = 0.3 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/deepseek-chat-v3.1.toml b/providers/eurouter/models/deepseek-chat-v3.1.toml new file mode 100644 index 0000000000..2b8212efce --- /dev/null +++ b/providers/eurouter/models/deepseek-chat-v3.1.toml @@ -0,0 +1,25 @@ +name = "DeepSeek Chat V3.1" +description = "DeepSeek Chat V3.1 is an upgraded DeepSeek V3 model with long-context chat, function calling, and optional reasoning support." +family = "deepseek" +release_date = "2025-08-21" +last_updated = "2025-08-21" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.2 +output = 0.8 +cache_read = 0 +cache_write = 0 + +[limit] +context = 164_000 +output = 163_840 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/deepseek-r1.toml b/providers/eurouter/models/deepseek-r1.toml new file mode 100644 index 0000000000..033f7024ee --- /dev/null +++ b/providers/eurouter/models/deepseek-r1.toml @@ -0,0 +1,15 @@ +base_model = "deepseek/deepseek-r1" +description = "DeepSeek R1 is DeepSeek's reasoning model for complex problem solving, math, code, and multi-step analysis." +structured_output = false +reasoning_options = [] + +[cost] +input = 0.66 +output = 2.6 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 164_000 +output = 8_192 diff --git a/providers/eurouter/models/deepseek-v3.1.toml b/providers/eurouter/models/deepseek-v3.1.toml new file mode 100644 index 0000000000..f5b4ebb361 --- /dev/null +++ b/providers/eurouter/models/deepseek-v3.1.toml @@ -0,0 +1,25 @@ +name = "DeepSeek V3.1" +description = "DeepSeek V3.1 is a mixture-of-experts chat model with strong coding and instruction-following capabilities." +family = "deepseek" +release_date = "2025-08-21" +last_updated = "2025-08-21" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.58 +output = 1.68 +cache_read = 0 +cache_write = 0 + +[limit] +context = 128_000 +output = 8_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/deepseek-v3.2.toml b/providers/eurouter/models/deepseek-v3.2.toml new file mode 100644 index 0000000000..56bc453578 --- /dev/null +++ b/providers/eurouter/models/deepseek-v3.2.toml @@ -0,0 +1,25 @@ +name = "DeepSeek V3.2" +description = "DeepSeek V3.2 is a mixture-of-experts model with improved reasoning, coding, and instruction-following capabilities." +family = "deepseek" +release_date = "2025-12-01" +last_updated = "2025-12-01" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.3 +output = 0.5 +cache_read = 0 +cache_write = 0 + +[limit] +context = 163_840 +output = 163_840 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/deepseek-v4-flash.toml b/providers/eurouter/models/deepseek-v4-flash.toml new file mode 100644 index 0000000000..c683310d0f --- /dev/null +++ b/providers/eurouter/models/deepseek-v4-flash.toml @@ -0,0 +1,16 @@ +base_model = "deepseek/deepseek-v4-flash" +description = "DeepSeek V4 Flash is a DeepSeek V4-series text model with a 1M-token context window, function calling, and optional reasoning support." + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[cost] +input = 0.15 +output = 0.3 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 1_048_576 diff --git a/providers/eurouter/models/deepseek-v4-pro.toml b/providers/eurouter/models/deepseek-v4-pro.toml new file mode 100644 index 0000000000..ba7aa612d4 --- /dev/null +++ b/providers/eurouter/models/deepseek-v4-pro.toml @@ -0,0 +1,16 @@ +base_model = "deepseek/deepseek-v4-pro" +description = "DeepSeek V4 Pro is a DeepSeek V4-series text model with a 1M-token context window, function calling, and optional reasoning support." + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[cost] +input = 1.75 +output = 3.5 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 1_048_576 diff --git a/providers/eurouter/models/devstral-2-123b-instruct-2512.toml b/providers/eurouter/models/devstral-2-123b-instruct-2512.toml new file mode 100644 index 0000000000..4903a94857 --- /dev/null +++ b/providers/eurouter/models/devstral-2-123b-instruct-2512.toml @@ -0,0 +1,19 @@ +name = "Devstral 2 123B Instruct" +description = "Devstral 2 123B Instruct is Mistral's long-context code model for agentic software engineering and multi-file reasoning tasks." +family = "devstral" +release_date = "2026-01-01" +last_updated = "2026-01-01" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 200_000 +output = 16_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/devstral-2.toml b/providers/eurouter/models/devstral-2.toml new file mode 100644 index 0000000000..b4aa6b129e --- /dev/null +++ b/providers/eurouter/models/devstral-2.toml @@ -0,0 +1,25 @@ +name = "Devstral 2" +description = "Devstral 2 is Mistral AI's frontier code agent model for tool-using software engineering tasks." +family = "devstral" +release_date = "2025-12-09" +last_updated = "2025-12-09" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.4 +output = 2 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/devstral-small-2.toml b/providers/eurouter/models/devstral-small-2.toml new file mode 100644 index 0000000000..53e52eea5e --- /dev/null +++ b/providers/eurouter/models/devstral-small-2.toml @@ -0,0 +1,25 @@ +name = "Devstral Small 2" +description = "Devstral Small 2 is Mistral AI's compact code agent model for tool-using software engineering tasks." +family = "devstral" +release_date = "2025-12-09" +last_updated = "2025-12-09" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/gemma-2-2b-it.toml b/providers/eurouter/models/gemma-2-2b-it.toml new file mode 100644 index 0000000000..cedd7b62b6 --- /dev/null +++ b/providers/eurouter/models/gemma-2-2b-it.toml @@ -0,0 +1,25 @@ +name = "Gemma 2 2B IT" +description = "Gemma 2 2B IT is Google's compact instruction-tuned model from the Gemma 2 family for efficient chat and assistant workloads." +family = "gemma" +release_date = "2024-06-27" +last_updated = "2024-06-27" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.02 +output = 0.06 +cache_read = 0 +cache_write = 0 + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/gemma-3-27b-it.toml b/providers/eurouter/models/gemma-3-27b-it.toml new file mode 100644 index 0000000000..ea54bb97c8 --- /dev/null +++ b/providers/eurouter/models/gemma-3-27b-it.toml @@ -0,0 +1,25 @@ +name = "Gemma 3 27B IT" +description = "Gemma 3 27B IT is Google's multimodal instruction-tuned model with text and image input support." +family = "gemma" +release_date = "2025-03-12" +last_updated = "2025-03-12" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0 +cache_write = 0 + +[limit] +context = 110_000 +output = 110_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/gemma-4.toml b/providers/eurouter/models/gemma-4.toml new file mode 100644 index 0000000000..115a0c362c --- /dev/null +++ b/providers/eurouter/models/gemma-4.toml @@ -0,0 +1,19 @@ +name = "Gemma 4" +description = "Gemma 4 is Google DeepMind's open model family built from Gemini 3 research and technology for high intelligence-per-parameter. The 31B variant offers long-context multimodal reasoning, function-calling support, multilingual understanding, and efficient deployment on personal hardware." +family = "gemma" +release_date = "2026-04-02" +last_updated = "2026-04-02" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 256_000 +output = 256_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/glm-4.7-flash.toml b/providers/eurouter/models/glm-4.7-flash.toml new file mode 100644 index 0000000000..e413774e56 --- /dev/null +++ b/providers/eurouter/models/glm-4.7-flash.toml @@ -0,0 +1,16 @@ +base_model = "zhipuai/glm-4.7-flash" +description = "GLM 4.7 Flash is Z.AI's faster GLM 4.7 variant available through Amazon Bedrock." +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.08 +output = 0.48 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 202_752 +output = 202_752 diff --git a/providers/eurouter/models/glm-4.7.toml b/providers/eurouter/models/glm-4.7.toml new file mode 100644 index 0000000000..36d8d0e7e3 --- /dev/null +++ b/providers/eurouter/models/glm-4.7.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-4.7" +description = "GLM-4.7 is Z AI's model for high-throughput chat, coding, and function-calling workloads." +structured_output = true +reasoning_options = [] + +[cost] +input = 0.6 +output = 2.2 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 202_752 +output = 200_000 diff --git a/providers/eurouter/models/glm-5-turbo.toml b/providers/eurouter/models/glm-5-turbo.toml new file mode 100644 index 0000000000..fc135e038f --- /dev/null +++ b/providers/eurouter/models/glm-5-turbo.toml @@ -0,0 +1,13 @@ +base_model = "zhipuai/glm-5-turbo" +description = "GLM-5-Turbo is Z AI's speed-optimized, API-only GLM-5-series variant for fast, low-latency agentic workloads, with tool calling and toggleable reasoning." +reasoning_options = [] + +[cost] +input = 1.2 +output = 4 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 202_752 diff --git a/providers/eurouter/models/glm-5.1.toml b/providers/eurouter/models/glm-5.1.toml new file mode 100644 index 0000000000..47e633d3de --- /dev/null +++ b/providers/eurouter/models/glm-5.1.toml @@ -0,0 +1,14 @@ +base_model = "zhipuai/glm-5.1" +description = "GLM-5.1 is Z AI's flagship model for long-horizon agentic engineering and advanced coding workflows." +reasoning_options = [] + +[cost] +input = 1.4 +output = 4.4 +reasoning = 0 +cache_read = 0.26 +cache_write = 0 + +[limit] +context = 202_752 +output = 202_752 diff --git a/providers/eurouter/models/glm-5.2.toml b/providers/eurouter/models/glm-5.2.toml new file mode 100644 index 0000000000..e0bcdf4f1e --- /dev/null +++ b/providers/eurouter/models/glm-5.2.toml @@ -0,0 +1,16 @@ +base_model = "zhipuai/glm-5.2" +description = "GLM-5.2 is Z AI's long-context model for reasoning, coding, tool use, and multilingual chat." + +[[reasoning_options]] +type = "effort" +values = ["high", "max"] + +[cost] +input = 1.5 +output = 4.5 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 1_048_576 diff --git a/providers/eurouter/models/glm-5.toml b/providers/eurouter/models/glm-5.toml new file mode 100644 index 0000000000..2cdcf81eab --- /dev/null +++ b/providers/eurouter/models/glm-5.toml @@ -0,0 +1,15 @@ +base_model = "zhipuai/glm-5" +description = "GLM-5 is Z AI's flagship language model for coding, reasoning, tool use, and multilingual chat." +structured_output = true +reasoning_options = [] + +[cost] +input = 1 +output = 3.2 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 202_752 +output = 202_752 diff --git a/providers/eurouter/models/glm-5v-turbo.toml b/providers/eurouter/models/glm-5v-turbo.toml new file mode 100644 index 0000000000..ad61481335 --- /dev/null +++ b/providers/eurouter/models/glm-5v-turbo.toml @@ -0,0 +1,17 @@ +base_model = "zhipuai/glm-5v-turbo" +description = "GLM-5V-Turbo is Z AI's API-only multimodal GLM-5-series vision model that accepts text and image input and produces text, optimized for fast agentic and vision-coding workflows with tool calling and toggleable reasoning." +structured_output = true +reasoning_options = [] + +[cost] +input = 1.2 +output = 4 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 202_752 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/gpt-4.1-mini.toml b/providers/eurouter/models/gpt-4.1-mini.toml new file mode 100644 index 0000000000..d6bb7b48f4 --- /dev/null +++ b/providers/eurouter/models/gpt-4.1-mini.toml @@ -0,0 +1,11 @@ +base_model = "openai/gpt-4.1-mini" +description = "GPT-4.1 Mini is OpenAI's smaller multimodal GPT-4.1 model for cost-efficient long-context, tool, and structured-output workloads." + +[cost] +input = 0.44 +output = 1.76 +cache_read = 0.11 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/gpt-4.1-nano.toml b/providers/eurouter/models/gpt-4.1-nano.toml new file mode 100644 index 0000000000..c27603f6f3 --- /dev/null +++ b/providers/eurouter/models/gpt-4.1-nano.toml @@ -0,0 +1,8 @@ +base_model = "openai/gpt-4.1-nano" +description = "GPT-4.1 Nano is OpenAI's lowest-latency GPT-4.1 model for high-volume multimodal, long-context, and tool-assisted tasks." + +[cost] +input = 0.11 +output = 0.44 +cache_read = 0.028 +cache_write = 0 diff --git a/providers/eurouter/models/gpt-4.1.toml b/providers/eurouter/models/gpt-4.1.toml new file mode 100644 index 0000000000..a00dc3dfea --- /dev/null +++ b/providers/eurouter/models/gpt-4.1.toml @@ -0,0 +1,11 @@ +base_model = "openai/gpt-4.1" +description = "GPT-4.1 is OpenAI's multimodal general-purpose model for instruction following, coding, long-context work, function calling, and structured outputs." + +[cost] +input = 2.2 +output = 8.8 +cache_read = 0.55 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/gpt-4o-mini.toml b/providers/eurouter/models/gpt-4o-mini.toml new file mode 100644 index 0000000000..c2ccdafd72 --- /dev/null +++ b/providers/eurouter/models/gpt-4o-mini.toml @@ -0,0 +1,11 @@ +base_model = "openai/gpt-4o-mini" +description = "GPT-4o Mini is OpenAI's compact multimodal model for low-cost chat, vision, tool use, and structured-output workloads." + +[cost] +input = 0.165 +output = 0.66 +cache_read = 0.083 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/gpt-4o.toml b/providers/eurouter/models/gpt-4o.toml new file mode 100644 index 0000000000..e808e5249c --- /dev/null +++ b/providers/eurouter/models/gpt-4o.toml @@ -0,0 +1,11 @@ +base_model = "openai/gpt-4o" +description = "GPT-4o is OpenAI's multimodal model for text and image input, text output, tool use, and general-purpose chat workloads." + +[cost] +input = 2.75 +output = 11 +cache_read = 1.375 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/gpt-5-mini.toml b/providers/eurouter/models/gpt-5-mini.toml new file mode 100644 index 0000000000..668cb5bbc5 --- /dev/null +++ b/providers/eurouter/models/gpt-5-mini.toml @@ -0,0 +1,13 @@ +base_model = "openai/gpt-5-mini" +description = "GPT-5 Mini is OpenAI's smaller GPT-5 reasoning model for cost-efficient multimodal, tool, and long-context workloads." + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0.275 +output = 2.2 +reasoning = 0 +cache_read = 0.0275 +cache_write = 0 diff --git a/providers/eurouter/models/gpt-5-nano.toml b/providers/eurouter/models/gpt-5-nano.toml new file mode 100644 index 0000000000..fedae28357 --- /dev/null +++ b/providers/eurouter/models/gpt-5-nano.toml @@ -0,0 +1,13 @@ +base_model = "openai/gpt-5-nano" +description = "GPT-5 Nano is OpenAI's smallest GPT-5 reasoning model for high-volume multimodal and tool-assisted workloads." + +[[reasoning_options]] +type = "effort" +values = ["minimal", "low", "medium", "high"] + +[cost] +input = 0.055 +output = 0.44 +reasoning = 0 +cache_read = 0.0055 +cache_write = 0 diff --git a/providers/eurouter/models/gpt-5.4.toml b/providers/eurouter/models/gpt-5.4.toml new file mode 100644 index 0000000000..db3e0f1cd4 --- /dev/null +++ b/providers/eurouter/models/gpt-5.4.toml @@ -0,0 +1,16 @@ +base_model = "openai/gpt-5.4" +description = "GPT-5.4 is OpenAI's frontier reasoning model for complex professional work, long-context analysis, coding, and agentic automation." + +[[reasoning_options]] +type = "effort" +values = ["none", "low", "medium", "high", "xhigh"] + +[cost] +input = 2.75 +output = 16.5 +reasoning = 0 +cache_read = 0.275 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/gpt-oss-120b.toml b/providers/eurouter/models/gpt-oss-120b.toml new file mode 100644 index 0000000000..79a8059415 --- /dev/null +++ b/providers/eurouter/models/gpt-oss-120b.toml @@ -0,0 +1,13 @@ +base_model = "openai/gpt-oss-120b" +description = "GPT-OSS 120B is OpenAI's open-weight reasoning model for agentic, coding, and general chat workloads." +reasoning_options = [] + +[cost] +input = 0.04 +output = 0.2 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_000 diff --git a/providers/eurouter/models/gpt-oss-20b.toml b/providers/eurouter/models/gpt-oss-20b.toml new file mode 100644 index 0000000000..90791f5588 --- /dev/null +++ b/providers/eurouter/models/gpt-oss-20b.toml @@ -0,0 +1,6 @@ +base_model = "openai/gpt-oss-20b" +description = "GPT-OSS 20B is OpenAI's smaller open-weight reasoning model for efficient chat, coding, and agentic workloads." +reasoning_options = [] + +[limit] +output = 131_072 diff --git a/providers/eurouter/models/green-embedding.toml b/providers/eurouter/models/green-embedding.toml new file mode 100644 index 0000000000..8fa8a8a569 --- /dev/null +++ b/providers/eurouter/models/green-embedding.toml @@ -0,0 +1,18 @@ +name = "Green Embedding" +description = "High-quality text embeddings for semantic search, similarity matching, and vector database operations. EU-hosted." +release_date = "2025-06-01" +last_updated = "2025-06-01" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 32_000 +output = 32_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/green-l-raw.toml b/providers/eurouter/models/green-l-raw.toml new file mode 100644 index 0000000000..619d4f2f01 --- /dev/null +++ b/providers/eurouter/models/green-l-raw.toml @@ -0,0 +1,18 @@ +name = "GreenL Raw" +description = "Large generative model with custom system prompt support. Provides more control over model behavior and responses. EU-hosted." +release_date = "2025-06-01" +last_updated = "2025-06-01" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[limit] +context = 128_000 +output = 128_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/green-l.toml b/providers/eurouter/models/green-l.toml new file mode 100644 index 0000000000..205104a475 --- /dev/null +++ b/providers/eurouter/models/green-l.toml @@ -0,0 +1,18 @@ +name = "GreenL" +description = "Large generative model optimized for sustainability. Best for general conversations, content creation, and text analysis. Based on Mistral architecture, hosted entirely in the EU." +release_date = "2025-01-01" +last_updated = "2025-01-01" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[limit] +context = 128_000 +output = 128_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/green-r-raw.toml b/providers/eurouter/models/green-r-raw.toml new file mode 100644 index 0000000000..94634d3826 --- /dev/null +++ b/providers/eurouter/models/green-r-raw.toml @@ -0,0 +1,19 @@ +name = "GreenR Raw" +description = "Reasoning model with custom system prompt support. Combines advanced reasoning capabilities with customizable behavior. EU-hosted." +release_date = "2025-08-01" +last_updated = "2025-08-01" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[limit] +context = 128_000 +output = 128_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/green-r.toml b/providers/eurouter/models/green-r.toml new file mode 100644 index 0000000000..ca9cc549cb --- /dev/null +++ b/providers/eurouter/models/green-r.toml @@ -0,0 +1,19 @@ +name = "GreenR" +description = "Reasoning model specialized in logical reasoning and problem-solving. Ideal for complex analytical tasks and mathematical problems. Based on GPT-OSS 120B, EU-hosted." +release_date = "2025-08-01" +last_updated = "2025-08-01" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[limit] +context = 128_000 +output = 128_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/hermes-4-405b.toml b/providers/eurouter/models/hermes-4-405b.toml new file mode 100644 index 0000000000..588323239f --- /dev/null +++ b/providers/eurouter/models/hermes-4-405b.toml @@ -0,0 +1,25 @@ +name = "Hermes 4 405B" +description = "NousResearch Hermes 4 405B is an open-weight language model for instruction following, chat, tool use, and reasoning-oriented workflows." +family = "hermes" +release_date = "2025-08-26" +last_updated = "2025-08-26" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 1 +output = 3 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/hermes-4-70b.toml b/providers/eurouter/models/hermes-4-70b.toml new file mode 100644 index 0000000000..b02722f985 --- /dev/null +++ b/providers/eurouter/models/hermes-4-70b.toml @@ -0,0 +1,25 @@ +name = "Hermes 4 70B" +description = "NousResearch Hermes 4 70B is an open-weight language model for instruction following, chat, tool use, and reasoning-oriented workflows." +family = "hermes" +release_date = "2025-08-26" +last_updated = "2025-08-26" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.13 +output = 0.4 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/holo2-30b-a3b.toml b/providers/eurouter/models/holo2-30b-a3b.toml new file mode 100644 index 0000000000..a2bc46b7ba --- /dev/null +++ b/providers/eurouter/models/holo2-30b-a3b.toml @@ -0,0 +1,18 @@ +name = "Holo2 30B A3B" +description = "Holo2 30B A3B is H Company's multimodal MoE model optimized for GUI understanding, navigation, and visual reasoning." +release_date = "2025-06-15" +last_updated = "2025-06-15" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 22_000 +output = 32_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/inf-retriever-v1.toml b/providers/eurouter/models/inf-retriever-v1.toml new file mode 100644 index 0000000000..24e1784a08 --- /dev/null +++ b/providers/eurouter/models/inf-retriever-v1.toml @@ -0,0 +1,18 @@ +name = "INF Retriever v1" +description = "INF Retriever v1 is INF Tech's LLM-based dense retrieval embedding model, optimized for English and Chinese retrieval." +release_date = "2024-12-23" +last_updated = "2024-12-23" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = true + +[limit] +context = 32_768 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/intellect-3.toml b/providers/eurouter/models/intellect-3.toml new file mode 100644 index 0000000000..c0a973998c --- /dev/null +++ b/providers/eurouter/models/intellect-3.toml @@ -0,0 +1,25 @@ +name = "INTELLECT-3" +description = "Prime Intellect INTELLECT-3 is an open model for reasoning, code, tool-use, and context-augmented chat workloads." +family = "intellect" +release_date = "2025-11-26" +last_updated = "2025-11-26" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.2 +output = 1.1 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/kimi-k2.5.toml b/providers/eurouter/models/kimi-k2.5.toml new file mode 100644 index 0000000000..fb4a40fc9c --- /dev/null +++ b/providers/eurouter/models/kimi-k2.5.toml @@ -0,0 +1,15 @@ +base_model = "moonshotai/kimi-k2.5" +description = "Kimi K2.5 is Moonshot AI's long-context multimodal model for coding, tool use, and general chat." +attachment = true +temperature = true +reasoning_options = [] + +[cost] +input = 0.5 +output = 2.8 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/kimi-k2.6.toml b/providers/eurouter/models/kimi-k2.6.toml new file mode 100644 index 0000000000..6061d2c2c8 --- /dev/null +++ b/providers/eurouter/models/kimi-k2.6.toml @@ -0,0 +1,14 @@ +base_model = "moonshotai/kimi-k2.6" +description = "Kimi K2.6 is Moonshot AI's open-weight reasoning model for long-horizon coding, agentic execution, and multimodal reasoning." +reasoning_options = [] + +[cost] +input = 0.8 +output = 3.5 +reasoning = 0 +cache_read = 0.2 +cache_write = 0 + +[limit] +context = 256_000 +output = 256_000 diff --git a/providers/eurouter/models/kimi-k2.7-code.toml b/providers/eurouter/models/kimi-k2.7-code.toml new file mode 100644 index 0000000000..0af8d0d0be --- /dev/null +++ b/providers/eurouter/models/kimi-k2.7-code.toml @@ -0,0 +1,19 @@ +base_model = "moonshotai/kimi-k2.7-code" +description = "Kimi K2.7 Code is Moonshot AI's open-weight Mixture-of-Experts coding model for long-horizon agentic engineering." +attachment = false +temperature = true +reasoning_options = [] + +[cost] +input = 0.75 +output = 3.5 +reasoning = 0 +cache_read = 0.2 +cache_write = 0 + +[limit] +context = 256_000 +output = 256_000 + +[modalities] +input = ["text"] diff --git a/providers/eurouter/models/llama-3.1-405b-instruct.toml b/providers/eurouter/models/llama-3.1-405b-instruct.toml new file mode 100644 index 0000000000..a21c76d875 --- /dev/null +++ b/providers/eurouter/models/llama-3.1-405b-instruct.toml @@ -0,0 +1,25 @@ +name = "Llama 3.1 405B Instruct" +description = "Llama 3.1 405B Instruct is Meta's flagship 405B parameter model with a 128K context window. It delivers strong multilingual reasoning, instruction following, and tool-use capabilities at frontier scale." +family = "llama" +release_date = "2024-07-23" +last_updated = "2024-07-23" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 1.93 +output = 1.93 +cache_read = 0 +cache_write = 0 + +[limit] +context = 128_000 +output = 128_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/llama-3.1-8b-instruct.toml b/providers/eurouter/models/llama-3.1-8b-instruct.toml new file mode 100644 index 0000000000..5ad26f2e4c --- /dev/null +++ b/providers/eurouter/models/llama-3.1-8b-instruct.toml @@ -0,0 +1,25 @@ +name = "Llama 3.1 8B Instruct" +description = "Meta Llama 3.1 8B Instruct is a compact multilingual instruction-tuned model for chat, tool use, and efficient assistant workloads." +family = "llama" +release_date = "2024-07-23" +last_updated = "2024-07-23" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.02 +output = 0.06 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/llama-3.1-nemotron-ultra-253b.toml b/providers/eurouter/models/llama-3.1-nemotron-ultra-253b.toml new file mode 100644 index 0000000000..4f20195ce3 --- /dev/null +++ b/providers/eurouter/models/llama-3.1-nemotron-ultra-253b.toml @@ -0,0 +1,15 @@ +base_model = "nvidia/llama-3.1-nemotron-ultra-253b" +description = "NVIDIA Llama 3.1 Nemotron Ultra 253B is a reasoning-oriented model based on Llama 3.1 for chat, coding, and tool-use workloads." +structured_output = true +reasoning_options = [] + +[cost] +input = 0.6 +output = 1.8 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 diff --git a/providers/eurouter/models/llama-3.3-70b-instruct.toml b/providers/eurouter/models/llama-3.3-70b-instruct.toml new file mode 100644 index 0000000000..55e442c4d5 --- /dev/null +++ b/providers/eurouter/models/llama-3.3-70b-instruct.toml @@ -0,0 +1,14 @@ +base_model = "meta/llama-3.3-70b-instruct" +description = "Llama 3.3 70B Instruct is Meta's multilingual instruction-tuned model for chat, reasoning, and tool-use workloads." +attachment = false +structured_output = true + +[cost] +input = 0.12 +output = 0.38 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 diff --git a/providers/eurouter/models/magistral-medium.toml b/providers/eurouter/models/magistral-medium.toml new file mode 100644 index 0000000000..02498b22cd --- /dev/null +++ b/providers/eurouter/models/magistral-medium.toml @@ -0,0 +1,27 @@ +name = "Magistral Medium 1.2" +description = "Magistral Medium 1.2 is Mistral AI's premier reasoning model for domain-specific, transparent, and multilingual reasoning." +family = "magistral-medium" +release_date = "2025-09-01" +last_updated = "2025-09-01" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 2 +output = 5 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 40_000 +output = 40_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/magistral-small.toml b/providers/eurouter/models/magistral-small.toml new file mode 100644 index 0000000000..0338e15d9f --- /dev/null +++ b/providers/eurouter/models/magistral-small.toml @@ -0,0 +1,27 @@ +name = "Magistral Small 1.2" +description = "Magistral Small 1.2 is Mistral AI's small reasoning model for transparent and multilingual reasoning." +family = "magistral-small" +release_date = "2025-03-17" +last_updated = "2025-03-17" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = false +reasoning_options = [] + +[cost] +input = 0.5 +output = 1.5 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 40_000 +output = 40_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/minimax-m2.1.toml b/providers/eurouter/models/minimax-m2.1.toml new file mode 100644 index 0000000000..715a1c08a0 --- /dev/null +++ b/providers/eurouter/models/minimax-m2.1.toml @@ -0,0 +1,20 @@ +base_model = "minimax/MiniMax-M2.1" +description = "MiniMax M2.1 is a long-context Mixture-of-Experts model from MiniMax for chat, coding, reasoning, and multimodal tasks." +attachment = true +tool_call = false +structured_output = false +reasoning_options = [] + +[cost] +input = 0.36 +output = 1.44 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 196_608 +output = 196_608 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/minimax-m2.5.toml b/providers/eurouter/models/minimax-m2.5.toml new file mode 100644 index 0000000000..f8fde9c0d1 --- /dev/null +++ b/providers/eurouter/models/minimax-m2.5.toml @@ -0,0 +1,8 @@ +base_model = "minimax/MiniMax-M2.5" +description = "MiniMax M2.5 is a MiniMax model for agentic coding, tool use, reasoning, and high-throughput chat workloads." +structured_output = true +reasoning_options = [] + +[limit] +context = 196_608 +output = 196_608 diff --git a/providers/eurouter/models/minimax-m2.7.toml b/providers/eurouter/models/minimax-m2.7.toml new file mode 100644 index 0000000000..f1ecf1f11b --- /dev/null +++ b/providers/eurouter/models/minimax-m2.7.toml @@ -0,0 +1,8 @@ +base_model = "minimax/MiniMax-M2.7" +description = "MiniMax M2.7 is MiniMax's 229B parameter reasoning model for agentic coding, software engineering, tool use, professional productivity workflows, and native multi-agent orchestration." +structured_output = true +reasoning_options = [] + +[limit] +context = 192_000 +output = 192_000 diff --git a/providers/eurouter/models/minimax-m3.toml b/providers/eurouter/models/minimax-m3.toml new file mode 100644 index 0000000000..ebf748bc1b --- /dev/null +++ b/providers/eurouter/models/minimax-m3.toml @@ -0,0 +1,19 @@ +base_model = "minimax/MiniMax-M3" +description = "MiniMax M3 is a long-context model for chat, coding, reasoning, and agentic workflows." +attachment = false +structured_output = true +reasoning_options = [] + +[cost] +input = 0.4 +output = 2 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 1_048_576 +output = 131_072 + +[modalities] +input = ["text"] diff --git a/providers/eurouter/models/ministral-3-14b.toml b/providers/eurouter/models/ministral-3-14b.toml new file mode 100644 index 0000000000..cbe462585a --- /dev/null +++ b/providers/eurouter/models/ministral-3-14b.toml @@ -0,0 +1,25 @@ +name = "Ministral 3 14B" +description = "Ministral 3 14B is an open Mistral AI model for efficient text and vision workloads." +family = "ministral" +release_date = "2025-12-01" +last_updated = "2025-12-01" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.2 +output = 0.2 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/ministral-3-3b.toml b/providers/eurouter/models/ministral-3-3b.toml new file mode 100644 index 0000000000..8b0cb4489f --- /dev/null +++ b/providers/eurouter/models/ministral-3-3b.toml @@ -0,0 +1,25 @@ +name = "Ministral 3 3B" +description = "Ministral 3 3B is an open Mistral AI model for efficient text and vision workloads." +family = "ministral" +release_date = "2025-12-01" +last_updated = "2025-12-01" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.1 +output = 0.1 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/ministral-3-8b.toml b/providers/eurouter/models/ministral-3-8b.toml new file mode 100644 index 0000000000..6bbb31900b --- /dev/null +++ b/providers/eurouter/models/ministral-3-8b.toml @@ -0,0 +1,25 @@ +name = "Ministral 3 8B" +description = "Ministral 3 8B is an open Mistral AI model for efficient text and vision workloads." +family = "ministral" +release_date = "2025-12-01" +last_updated = "2025-12-01" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.15 +output = 0.15 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-7b-instruct-v0.3.toml b/providers/eurouter/models/mistral-7b-instruct-v0.3.toml new file mode 100644 index 0000000000..d7e6e1cc82 --- /dev/null +++ b/providers/eurouter/models/mistral-7b-instruct-v0.3.toml @@ -0,0 +1,19 @@ +name = "Mistral 7B Instruct v0.3" +description = "Mistral 7B Instruct v0.3 is Mistral AI's 7B instruction-following model for multilingual text generation, coding, extraction, and summarization tasks." +family = "mistral" +release_date = "2024-05-22" +last_updated = "2024-05-22" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 32_768 +output = 32_768 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-7b-instruct.toml b/providers/eurouter/models/mistral-7b-instruct.toml new file mode 100644 index 0000000000..10975c92ad --- /dev/null +++ b/providers/eurouter/models/mistral-7b-instruct.toml @@ -0,0 +1,25 @@ +name = "Mistral 7B Instruct" +description = "Mistral 7B Instruct is Mistral AI's 7B-parameter instruction-tuned model." +family = "mistral" +release_date = "2023-09-28" +last_updated = "2023-09-28" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.16 +output = 0.22 +cache_read = 0 +cache_write = 0 + +[limit] +context = 32_000 +output = 4_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-embed.toml b/providers/eurouter/models/mistral-embed.toml new file mode 100644 index 0000000000..181f99083e --- /dev/null +++ b/providers/eurouter/models/mistral-embed.toml @@ -0,0 +1,25 @@ +name = "Mistral Embed" +description = "Mistral Embed is Mistral AI's text embedding model for semantic search, retrieval, clustering, and classification." +family = "mistral-embed" +release_date = "2023-12-11" +last_updated = "2023-12-11" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.1 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-large-2402.toml b/providers/eurouter/models/mistral-large-2402.toml new file mode 100644 index 0000000000..5ac68924b8 --- /dev/null +++ b/providers/eurouter/models/mistral-large-2402.toml @@ -0,0 +1,25 @@ +name = "Mistral Large 2402" +description = "Mistral Large 2402 is Mistral AI's high-capability text model available through Amazon Bedrock." +family = "mistral-large" +release_date = "2024-02-26" +last_updated = "2024-02-26" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 4.3 +output = 13 +cache_read = 0 +cache_write = 0 + +[limit] +context = 32_000 +output = 32_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-large-3.toml b/providers/eurouter/models/mistral-large-3.toml new file mode 100644 index 0000000000..ea44066bd1 --- /dev/null +++ b/providers/eurouter/models/mistral-large-3.toml @@ -0,0 +1,25 @@ +name = "Mistral Large 3" +description = "Mistral Large 3 is Mistral AI's 675B-parameter model for coding, reasoning, multilingual tasks, and vision-enabled chat." +family = "mistral-large" +release_date = "2025-12-02" +last_updated = "2025-12-02" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.5 +output = 1.5 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-medium-3.1.toml b/providers/eurouter/models/mistral-medium-3.1.toml new file mode 100644 index 0000000000..4b0bd0b347 --- /dev/null +++ b/providers/eurouter/models/mistral-medium-3.1.toml @@ -0,0 +1,25 @@ +name = "Mistral Medium 3.1" +description = "Mistral Medium 3.1 is Mistral AI's frontier-class multimodal model released in August 2025." +family = "mistral-medium" +release_date = "2025-08-01" +last_updated = "2025-08-01" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.4 +output = 2 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-nemo-12b.toml b/providers/eurouter/models/mistral-nemo-12b.toml new file mode 100644 index 0000000000..d412b5be50 --- /dev/null +++ b/providers/eurouter/models/mistral-nemo-12b.toml @@ -0,0 +1,19 @@ +name = "Mistral Nemo 12B" +description = "Mistral Nemo 12B is Mistral AI's open multilingual model built with NVIDIA for efficient long-context text generation." +family = "mistral-nemo" +release_date = "2024-07-17" +last_updated = "2024-07-17" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 120_832 +output = 120_832 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-small-24b.toml b/providers/eurouter/models/mistral-small-24b.toml new file mode 100644 index 0000000000..89c9af833d --- /dev/null +++ b/providers/eurouter/models/mistral-small-24b.toml @@ -0,0 +1,25 @@ +name = "Mistral Small 24B Instruct" +description = "Mistral Small 24B Instruct is a 24B parameter model with 128K context and multimodal (text + image) inputs, optimized for instruction following and long-document understanding." +family = "mistral-small" +release_date = "2025-06-25" +last_updated = "2025-06-25" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.11 +output = 0.33 +cache_read = 0 +cache_write = 0 + +[limit] +context = 128_000 +output = 128_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-small-3.2-24b.toml b/providers/eurouter/models/mistral-small-3.2-24b.toml new file mode 100644 index 0000000000..d7b124b953 --- /dev/null +++ b/providers/eurouter/models/mistral-small-3.2-24b.toml @@ -0,0 +1,19 @@ +name = "Mistral Small 3.2 24B" +description = "Mistral Small 3.2 is a 24B open model with image understanding, function calling, and long-context support." +family = "mistral-small" +release_date = "2025-06-01" +last_updated = "2025-06-01" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 131_072 +output = 131_072 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/mistral-small-4.toml b/providers/eurouter/models/mistral-small-4.toml new file mode 100644 index 0000000000..04a45268d6 --- /dev/null +++ b/providers/eurouter/models/mistral-small-4.toml @@ -0,0 +1,27 @@ +name = "Mistral Small 4" +description = "Mistral Small 4 is Mistral AI's open hybrid MoE model unifying instruct, reasoning, coding, and multimodal workloads." +family = "mistral-small" +release_date = "2026-03-16" +last_updated = "2026-03-16" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true +reasoning_options = [] + +[cost] +input = 0.15 +output = 0.6 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/mixtral-8x7b-instruct.toml b/providers/eurouter/models/mixtral-8x7b-instruct.toml new file mode 100644 index 0000000000..061121be4c --- /dev/null +++ b/providers/eurouter/models/mixtral-8x7b-instruct.toml @@ -0,0 +1,25 @@ +name = "Mixtral 8x7B Instruct" +description = "Mixtral 8x7B Instruct is Mistral AI's sparse mixture-of-experts instruction model." +family = "mixtral" +release_date = "2023-12-11" +last_updated = "2023-12-11" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.49 +output = 0.76 +cache_read = 0 +cache_write = 0 + +[limit] +context = 32_000 +output = 32_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/multilingual-e5-large-instruct.toml b/providers/eurouter/models/multilingual-e5-large-instruct.toml new file mode 100644 index 0000000000..b5cd48dbee --- /dev/null +++ b/providers/eurouter/models/multilingual-e5-large-instruct.toml @@ -0,0 +1,18 @@ +name = "Multilingual E5 Large Instruct" +description = "Multilingual E5 Large Instruct is an instruction-tuned multilingual embedding model for retrieval across ~100 languages." +release_date = "2024-02-08" +last_updated = "2024-02-08" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = true + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/nemotron-3-nano-30b-a3b.toml b/providers/eurouter/models/nemotron-3-nano-30b-a3b.toml new file mode 100644 index 0000000000..560550b7f2 --- /dev/null +++ b/providers/eurouter/models/nemotron-3-nano-30b-a3b.toml @@ -0,0 +1,11 @@ +base_model = "nvidia/nemotron-3-nano-30b-a3b" +description = "NVIDIA Nemotron 3 Nano 30B A3B is an efficient MoE model for chat, reasoning, coding, and tool use." +structured_output = true +reasoning_options = [] + +[cost] +input = 0.06 +output = 0.24 +reasoning = 0 +cache_read = 0 +cache_write = 0 diff --git a/providers/eurouter/models/nemotron-3-nano-omni.toml b/providers/eurouter/models/nemotron-3-nano-omni.toml new file mode 100644 index 0000000000..23ae04fb4a --- /dev/null +++ b/providers/eurouter/models/nemotron-3-nano-omni.toml @@ -0,0 +1,25 @@ +name = "Nemotron 3 Nano Omni" +description = "NVIDIA Nemotron 3 Nano Omni is an efficient omni-modal reasoning model for agentic AI, coding, tool use, and long-context workflows." +family = "nemotron" +release_date = "2026-04-24" +last_updated = "2026-04-24" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[cost] +input = 0.06 +output = 0.24 +cache_read = 0 +cache_write = 0 + +[limit] +context = 65_536 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/nemotron-3-super-120b-a12b.toml b/providers/eurouter/models/nemotron-3-super-120b-a12b.toml new file mode 100644 index 0000000000..07850e288b --- /dev/null +++ b/providers/eurouter/models/nemotron-3-super-120b-a12b.toml @@ -0,0 +1,11 @@ +base_model = "nvidia/nemotron-3-super-120b-a12b" +description = "NVIDIA Nemotron 3 Super 120B A12B is a Mixture-of-Experts model for chat, coding, reasoning, and tool-use workloads." +structured_output = true +reasoning_options = [] + +[cost] +input = 0.3 +output = 0.9 +reasoning = 0 +cache_read = 0 +cache_write = 0 diff --git a/providers/eurouter/models/nova-2-lite.toml b/providers/eurouter/models/nova-2-lite.toml new file mode 100644 index 0000000000..cf2a9fc6bd --- /dev/null +++ b/providers/eurouter/models/nova-2-lite.toml @@ -0,0 +1,25 @@ +name = "Amazon Nova 2 Lite" +description = "Amazon Nova 2 Lite is a cost-efficient multimodal model for simple automation, document processing, and customer support across text, images, and video." +family = "nova" +release_date = "2025-12-02" +last_updated = "2025-12-02" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[cost] +input = 0.39 +output = 3.27 +cache_read = 0.0975 +cache_write = 0 + +[limit] +context = 1_000_000 +output = 64_000 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/eurouter/models/nova-lite.toml b/providers/eurouter/models/nova-lite.toml new file mode 100644 index 0000000000..530496b84b --- /dev/null +++ b/providers/eurouter/models/nova-lite.toml @@ -0,0 +1,25 @@ +name = "Amazon Nova Lite" +description = "Amazon Nova Lite is a multimodal model supporting text, images, and video with low-latency responses." +family = "nova-lite" +release_date = "2024-12-03" +last_updated = "2024-12-03" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[cost] +input = 0.06 +output = 0.24 +cache_read = 0 +cache_write = 0 + +[limit] +context = 300_000 +output = 300_000 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/eurouter/models/nova-micro.toml b/providers/eurouter/models/nova-micro.toml new file mode 100644 index 0000000000..3b9296f167 --- /dev/null +++ b/providers/eurouter/models/nova-micro.toml @@ -0,0 +1,25 @@ +name = "Amazon Nova Micro" +description = "Amazon Nova Micro is the fastest and most cost-effective Nova model, optimized for simple text tasks." +family = "nova-micro" +release_date = "2024-12-03" +last_updated = "2024-12-03" +attachment = false +reasoning = false +temperature = true +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.035 +output = 0.14 +cache_read = 0 +cache_write = 0 + +[limit] +context = 128_000 +output = 128_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/nova-pro.toml b/providers/eurouter/models/nova-pro.toml new file mode 100644 index 0000000000..8b1128fa7e --- /dev/null +++ b/providers/eurouter/models/nova-pro.toml @@ -0,0 +1,25 @@ +name = "Amazon Nova Pro" +description = "Amazon Nova Pro is a highly capable multimodal model balancing performance and cost for complex tasks." +family = "nova-pro" +release_date = "2024-12-03" +last_updated = "2024-12-03" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[cost] +input = 0.8 +output = 3.2 +cache_read = 0 +cache_write = 0 + +[limit] +context = 300_000 +output = 300_000 + +[modalities] +input = ["text", "image", "video"] +output = ["text"] diff --git a/providers/eurouter/models/o3-mini.toml b/providers/eurouter/models/o3-mini.toml new file mode 100644 index 0000000000..91d11160b4 --- /dev/null +++ b/providers/eurouter/models/o3-mini.toml @@ -0,0 +1,13 @@ +base_model = "openai/o3-mini" +description = "o3-mini is OpenAI's compact text-only reasoning model optimized for cost-efficient coding, math, science, and structured-output tasks." + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 1.21 +output = 4.84 +reasoning = 0 +cache_read = 0.605 +cache_write = 0 diff --git a/providers/eurouter/models/o4-mini.toml b/providers/eurouter/models/o4-mini.toml new file mode 100644 index 0000000000..8ac965b7da --- /dev/null +++ b/providers/eurouter/models/o4-mini.toml @@ -0,0 +1,13 @@ +base_model = "openai/o4-mini" +description = "o4-mini is OpenAI's compact reasoning model for math, coding, visual tasks, structured outputs, and tool use." + +[[reasoning_options]] +type = "effort" +values = ["low", "medium", "high"] + +[cost] +input = 1.21 +output = 4.84 +reasoning = 0 +cache_read = 0.303 +cache_write = 0 diff --git a/providers/eurouter/models/paraphrase-multilingual-mpnet-base-v2.toml b/providers/eurouter/models/paraphrase-multilingual-mpnet-base-v2.toml new file mode 100644 index 0000000000..31c7d2a2f9 --- /dev/null +++ b/providers/eurouter/models/paraphrase-multilingual-mpnet-base-v2.toml @@ -0,0 +1,24 @@ +name = "Paraphrase Multilingual MPNet v2" +description = "Paraphrase Multilingual MPNet v2 is a sentence-transformer embedding model producing 768-dimensional vectors for multilingual semantic search and similarity." +release_date = "2021-07-23" +last_updated = "2021-07-23" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.01 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 128 +output = 128 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/pixtral-12b.toml b/providers/eurouter/models/pixtral-12b.toml new file mode 100644 index 0000000000..aad085afbd --- /dev/null +++ b/providers/eurouter/models/pixtral-12b.toml @@ -0,0 +1,6 @@ +base_model = "mistral/pixtral-12b" +description = "Pixtral 12B is Mistral's multimodal model for image understanding, visual question answering, and document analysis." +structured_output = true + +[limit] +output = 4_000 diff --git a/providers/eurouter/models/pixtral-large-2502.toml b/providers/eurouter/models/pixtral-large-2502.toml new file mode 100644 index 0000000000..ead700f300 --- /dev/null +++ b/providers/eurouter/models/pixtral-large-2502.toml @@ -0,0 +1,25 @@ +name = "Pixtral Large 25.02" +description = "Pixtral Large is Mistral's flagship multimodal model with exceptional vision and text understanding capabilities." +family = "pixtral" +release_date = "2025-02-01" +last_updated = "2025-02-01" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = false +open_weights = false + +[cost] +input = 2 +output = 6 +cache_read = 0 +cache_write = 0 + +[limit] +context = 128_000 +output = 128_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/qwen-2.5-vl-72b-instruct.toml b/providers/eurouter/models/qwen-2.5-vl-72b-instruct.toml new file mode 100644 index 0000000000..fc9db5beb7 --- /dev/null +++ b/providers/eurouter/models/qwen-2.5-vl-72b-instruct.toml @@ -0,0 +1,25 @@ +name = "Qwen 2.5 VL 72B Instruct" +description = "Qwen 2.5 VL 72B Instruct is Alibaba's vision-language model for image understanding, OCR, document analysis, and multimodal instruction following." +family = "qwen" +release_date = "2025-01-27" +last_updated = "2025-01-27" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.25 +output = 0.75 +cache_read = 0 +cache_write = 0 + +[limit] +context = 32_000 +output = 32_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3-235b-a22b-instruct.toml b/providers/eurouter/models/qwen3-235b-a22b-instruct.toml new file mode 100644 index 0000000000..a383507c5b --- /dev/null +++ b/providers/eurouter/models/qwen3-235b-a22b-instruct.toml @@ -0,0 +1,24 @@ +name = "Qwen3 235B A22B Instruct" +description = "Qwen3 235B A22B Instruct is Alibaba's Mixture-of-Experts model for multilingual chat, reasoning, coding, and tool use." +release_date = "2025-07-21" +last_updated = "2025-07-21" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.072 +output = 0.464 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_000 +output = 262_144 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3-30b-a3b-instruct.toml b/providers/eurouter/models/qwen3-30b-a3b-instruct.toml new file mode 100644 index 0000000000..40ba9268f8 --- /dev/null +++ b/providers/eurouter/models/qwen3-30b-a3b-instruct.toml @@ -0,0 +1,24 @@ +name = "Qwen3 30B A3B Instruct" +description = "Qwen3 30B A3B Instruct is an Alibaba/Qwen compact MoE instruction model for chat, code, tool use, and context-augmented generation." +release_date = "2025-07-01" +last_updated = "2025-07-01" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3-32b.toml b/providers/eurouter/models/qwen3-32b.toml new file mode 100644 index 0000000000..d0c96f5c4a --- /dev/null +++ b/providers/eurouter/models/qwen3-32b.toml @@ -0,0 +1,10 @@ +base_model = "alibaba/qwen3-32b" +description = "Qwen3 32B is Alibaba's dense multilingual model with tool calling and optional reasoning mode for math, code, and general instruction-following tasks." +structured_output = true + +[[reasoning_options]] +type = "budget_tokens" + +[limit] +context = 32_768 +output = 32_768 diff --git a/providers/eurouter/models/qwen3-coder-30b-a3b.toml b/providers/eurouter/models/qwen3-coder-30b-a3b.toml new file mode 100644 index 0000000000..2704c53317 --- /dev/null +++ b/providers/eurouter/models/qwen3-coder-30b-a3b.toml @@ -0,0 +1,18 @@ +name = "Qwen3 Coder 30B A3B" +description = "Qwen3 Coder 30B A3B is Alibaba's Mixture-of-Experts coding model for software engineering and agentic code tasks." +release_date = "2025-07-01" +last_updated = "2025-07-01" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3-coder-480b-a35b-instruct.toml b/providers/eurouter/models/qwen3-coder-480b-a35b-instruct.toml new file mode 100644 index 0000000000..2645fbcc8c --- /dev/null +++ b/providers/eurouter/models/qwen3-coder-480b-a35b-instruct.toml @@ -0,0 +1,13 @@ +base_model = "alibaba/qwen3-coder-480b-a35b-instruct" +description = "Massive code-specialist model optimized for repo-scale coding, long-context understanding, and precise tool calls." +tool_call = false +structured_output = false + +[cost] +input = 0.45 +output = 1.8 +cache_read = 0 +cache_write = 0 + +[limit] +output = 262_144 diff --git a/providers/eurouter/models/qwen3-coder-next-80b.toml b/providers/eurouter/models/qwen3-coder-next-80b.toml new file mode 100644 index 0000000000..33b80597d8 --- /dev/null +++ b/providers/eurouter/models/qwen3-coder-next-80b.toml @@ -0,0 +1,26 @@ +name = "Qwen3 Coder Next 80B" +description = "Qwen3-Coder-Next is Alibaba's open-weight 80B total, 3B active MoE coding model for coding agents, long-horizon tool use, and local development workflows." +release_date = "2026-02-03" +last_updated = "2026-02-03" +attachment = false +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true +reasoning_options = [] + +[cost] +input = 0.17 +output = 0.89 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 262_144 +output = 65_536 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3-coder-next.toml b/providers/eurouter/models/qwen3-coder-next.toml new file mode 100644 index 0000000000..9a96a121c6 --- /dev/null +++ b/providers/eurouter/models/qwen3-coder-next.toml @@ -0,0 +1,18 @@ +name = "Qwen3 Coder Next" +description = "Qwen3 Coder Next is Alibaba's Qwen3 coding model for software engineering and agentic code tasks." +release_date = "2026-02-03" +last_updated = "2026-02-03" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = false + +[limit] +context = 256_000 +output = 256_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3-embedding-8b.toml b/providers/eurouter/models/qwen3-embedding-8b.toml new file mode 100644 index 0000000000..b343496ae9 --- /dev/null +++ b/providers/eurouter/models/qwen3-embedding-8b.toml @@ -0,0 +1,18 @@ +name = "Qwen3 Embedding 8B" +description = "Qwen3 Embedding 8B is Alibaba's embedding model for multilingual semantic search, retrieval, and representation learning." +release_date = "2025-06-05" +last_updated = "2025-06-05" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = true + +[limit] +context = 40_960 +output = 40_960 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3-next-80b-a3b-thinking.toml b/providers/eurouter/models/qwen3-next-80b-a3b-thinking.toml new file mode 100644 index 0000000000..1f0b59cb18 --- /dev/null +++ b/providers/eurouter/models/qwen3-next-80b-a3b-thinking.toml @@ -0,0 +1,17 @@ +base_model = "alibaba/qwen3-next-80b-a3b-thinking" +description = "Qwen3 Next 80B A3B Thinking is an Alibaba/Qwen thinking model for reasoning, code, context-augmented generation, and tool use." +structured_output = true + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.15 +output = 1.2 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 128_000 +output = 128_000 diff --git a/providers/eurouter/models/qwen3-vl-235b-a22b-instruct.toml b/providers/eurouter/models/qwen3-vl-235b-a22b-instruct.toml new file mode 100644 index 0000000000..53080a7d88 --- /dev/null +++ b/providers/eurouter/models/qwen3-vl-235b-a22b-instruct.toml @@ -0,0 +1,24 @@ +name = "Qwen3 VL 235B A22B Instruct" +description = "Qwen3 VL 235B A22B Instruct is Alibaba's vision-language Mixture-of-Experts model for multimodal understanding and chat." +release_date = "2025-09-23" +last_updated = "2025-09-23" +attachment = true +reasoning = false +temperature = true +tool_call = false +structured_output = false +open_weights = true + +[cost] +input = 0.21 +output = 1.9 +cache_read = 0 +cache_write = 0 + +[limit] +context = 131_000 +output = 131_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3-vl-235b-a22b-thinking.toml b/providers/eurouter/models/qwen3-vl-235b-a22b-thinking.toml new file mode 100644 index 0000000000..d5a83c814a --- /dev/null +++ b/providers/eurouter/models/qwen3-vl-235b-a22b-thinking.toml @@ -0,0 +1,19 @@ +name = "Qwen3 VL 235B A22B Thinking" +description = "Qwen3 VL 235B A22B Thinking is Alibaba's reasoning vision-language Mixture-of-Experts model for complex multimodal analysis." +release_date = "2025-09-23" +last_updated = "2025-09-23" +attachment = true +reasoning = true +temperature = true +tool_call = true +structured_output = true +open_weights = true +reasoning_options = [] + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/qwen3.5-122b-a10b.toml b/providers/eurouter/models/qwen3.5-122b-a10b.toml new file mode 100644 index 0000000000..241097a60a --- /dev/null +++ b/providers/eurouter/models/qwen3.5-122b-a10b.toml @@ -0,0 +1,18 @@ +base_model = "alibaba/qwen3.5-122b-a10b" +description = "Qwen3.5 122B A10B is Alibaba's natively multimodal Mixture-of-Experts model for reasoning, coding, multilingual chat, vision-language understanding, and tool use." + +[[reasoning_options]] +type = "budget_tokens" + +[cost] +input = 0.5 +output = 3.5 +reasoning = 0 +cache_read = 0 +cache_write = 0 + +[limit] +output = 262_144 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/qwen3.5-397b-a17b.toml b/providers/eurouter/models/qwen3.5-397b-a17b.toml new file mode 100644 index 0000000000..5c3896a218 --- /dev/null +++ b/providers/eurouter/models/qwen3.5-397b-a17b.toml @@ -0,0 +1,10 @@ +base_model = "alibaba/qwen3.5-397b-a17b" +description = "Qwen3.5 397B A17B is an Alibaba/Qwen MoE model for long-context reasoning, coding, agentic tasks, tool use, and multimodal understanding." +reasoning_options = [] + +[limit] +context = 250_000 +output = 16_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/qwen3.5-9b.toml b/providers/eurouter/models/qwen3.5-9b.toml new file mode 100644 index 0000000000..8a9041470d --- /dev/null +++ b/providers/eurouter/models/qwen3.5-9b.toml @@ -0,0 +1,7 @@ +base_model = "alibaba/qwen3.5-9b" +description = "Qwen3.5 9B is Alibaba's compact Qwen3.5 model for efficient long-context chat, reasoning, and tool use." +reasoning_options = [] + +[limit] +context = 262_000 +output = 262_000 diff --git a/providers/eurouter/models/qwen3.6-27b.toml b/providers/eurouter/models/qwen3.6-27b.toml new file mode 100644 index 0000000000..889a947c0b --- /dev/null +++ b/providers/eurouter/models/qwen3.6-27b.toml @@ -0,0 +1,10 @@ +base_model = "alibaba/qwen3.6-27b" +description = "Qwen3.6 27B is Alibaba's multimodal Qwen3.6 model for vision, chat, reasoning, and tool use." +reasoning_options = [] + +[limit] +context = 262_000 +output = 262_000 + +[modalities] +input = ["text", "image"] diff --git a/providers/eurouter/models/qwen3.6-35b.toml b/providers/eurouter/models/qwen3.6-35b.toml new file mode 100644 index 0000000000..ae4073db84 --- /dev/null +++ b/providers/eurouter/models/qwen3.6-35b.toml @@ -0,0 +1,19 @@ +name = "Qwen3.6 35B" +description = "Qwen3.6 35B is Alibaba's Qwen3.6-series model for multilingual chat, reasoning, and tool use." +family = "qwen3.6" +release_date = "2026-04-16" +last_updated = "2026-04-16" +attachment = false +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[limit] +context = 262_144 +output = 262_144 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/text-embedding-3-large.toml b/providers/eurouter/models/text-embedding-3-large.toml new file mode 100644 index 0000000000..176aae7263 --- /dev/null +++ b/providers/eurouter/models/text-embedding-3-large.toml @@ -0,0 +1,19 @@ +name = "Text Embedding 3 Large" +description = "text-embedding-3-large is OpenAI's most capable text embedding model with up to 3,072 output dimensions." +family = "text-embedding" +release_date = "2024-01-25" +last_updated = "2024-01-25" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/text-embedding-3-small.toml b/providers/eurouter/models/text-embedding-3-small.toml new file mode 100644 index 0000000000..50e1310720 --- /dev/null +++ b/providers/eurouter/models/text-embedding-3-small.toml @@ -0,0 +1,19 @@ +name = "Text Embedding 3 Small" +description = "text-embedding-3-small is OpenAI's efficient text embedding model with 1,536 output dimensions." +family = "text-embedding" +release_date = "2024-01-25" +last_updated = "2024-01-25" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/text-embedding-ada-002.toml b/providers/eurouter/models/text-embedding-ada-002.toml new file mode 100644 index 0000000000..33447ee913 --- /dev/null +++ b/providers/eurouter/models/text-embedding-ada-002.toml @@ -0,0 +1,19 @@ +name = "Text Embedding Ada 002" +description = "text-embedding-ada-002 is OpenAI's older general-purpose text embedding model with 1,536 output dimensions." +family = "text-embedding" +release_date = "2022-12-15" +last_updated = "2022-12-15" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 8_192 +output = 8_192 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/titan-embed-text-v1.toml b/providers/eurouter/models/titan-embed-text-v1.toml new file mode 100644 index 0000000000..b40354e9f0 --- /dev/null +++ b/providers/eurouter/models/titan-embed-text-v1.toml @@ -0,0 +1,25 @@ +name = "Amazon Titan Embeddings G1 - Text" +description = "Amazon Titan Embeddings G1 - Text is a text embedding model available through Amazon Bedrock." +family = "titan-embed" +release_date = "2023-09-28" +last_updated = "2023-09-28" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[cost] +input = 0.2 +output = 0 +cache_read = 0 +cache_write = 0 + +[limit] +context = 8_000 +output = 8_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/titan-embed-text-v2.toml b/providers/eurouter/models/titan-embed-text-v2.toml new file mode 100644 index 0000000000..00b6589a90 --- /dev/null +++ b/providers/eurouter/models/titan-embed-text-v2.toml @@ -0,0 +1,19 @@ +name = "Amazon Titan Embeddings v2" +description = "Amazon Titan Embeddings v2 offers configurable embedding dimensions (256-1024) and improved multilingual support." +family = "titan-embed" +release_date = "2024-04-30" +last_updated = "2024-04-30" +attachment = false +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 8_000 +output = 8_000 + +[modalities] +input = ["text"] +output = ["text"] diff --git a/providers/eurouter/models/titan-multimodal-embed.toml b/providers/eurouter/models/titan-multimodal-embed.toml new file mode 100644 index 0000000000..7656335233 --- /dev/null +++ b/providers/eurouter/models/titan-multimodal-embed.toml @@ -0,0 +1,19 @@ +name = "Amazon Titan Multimodal Embeddings" +description = "Amazon Titan Multimodal Embeddings generates embeddings for both text and images for cross-modal search." +family = "titan" +release_date = "2023-11-29" +last_updated = "2023-11-29" +attachment = true +reasoning = false +temperature = false +tool_call = false +structured_output = false +open_weights = false + +[limit] +context = 8_000 +output = 8_000 + +[modalities] +input = ["text", "image"] +output = ["text"] diff --git a/providers/eurouter/models/voxtral-small-24b.toml b/providers/eurouter/models/voxtral-small-24b.toml new file mode 100644 index 0000000000..d04cb4af57 --- /dev/null +++ b/providers/eurouter/models/voxtral-small-24b.toml @@ -0,0 +1,25 @@ +name = "Voxtral Small 24B" +description = "Voxtral Small 24B is Mistral AI's open audio-capable chat model for speech understanding and text generation." +family = "voxtral" +release_date = "2025-07-25" +last_updated = "2025-07-25" +attachment = true +reasoning = false +temperature = true +tool_call = true +structured_output = true +open_weights = true + +[cost] +input = 0.1 +output = 0.3 +cache_read = 0 +cache_write = 0 + +[limit] +context = 32_000 +output = 32_000 + +[modalities] +input = ["text", "audio"] +output = ["text"] diff --git a/providers/eurouter/provider.toml b/providers/eurouter/provider.toml new file mode 100644 index 0000000000..ea4bdeb7a4 --- /dev/null +++ b/providers/eurouter/provider.toml @@ -0,0 +1,5 @@ +name = "EUrouter" +env = ["EUROUTER_API_KEY"] +npm = "@ai-sdk/openai-compatible" +api = "https://api.eurouter.ai/api/v1" +doc = "https://www.eurouter.ai/docs/api/models" diff --git a/sync.md b/sync.md index 1f538b3640..402f408f22 100644 --- a/sync.md +++ b/sync.md @@ -139,6 +139,18 @@ Kilo Gateway is implemented in `packages/core/src/sync/providers/kilo.ts`. - Canonical Kilo model IDs should emit `base_model` references to model metadata when a matching `models/` entry exists. - `reasoning_options` is derived from `opencode.variants` when present. +## EUrouter Notes + +- EUrouter is implemented in `packages/core/src/sync/providers/eurouter.ts`. +- Source endpoint: `https://api.eurouter.ai/api/v1/models`. +- `EUROUTER_API_KEY` is optional. The catalog is public; authenticated requests expose the same catalog and support local accounts with scoped visibility if that changes later. +- Model IDs map directly to TOML paths under `providers/eurouter/models`. +- USD API prices are per-token strings and are converted to per-1M-token catalog prices. Non-USD prices are omitted because models.dev cost fields are USD-only; existing curated USD costs are preserved. +- Canonical slugs and model authors are resolved against provider-agnostic metadata, including EUrouter-to-models.dev namespace aliases. +- Modalities and capabilities come from the catalog architecture, supported parameters, and reasoning metadata. An empty reasoning-control object is treated as unknown, so canonical or authored reasoning truth is inherited rather than overwritten with `false`. +- New standalone models without an API-provided release date are reported but not created. The API's `created` timestamp is a catalog insertion time, not a model release date. +- Existing descriptions, lifecycle dates, knowledge cutoffs, status, interleaving, input limits, pricing tiers, and base-model factoring are preserved when the API is not authoritative for them. + ## Cloudflare Workers AI Notes Cloudflare Workers AI is implemented in `packages/core/src/sync/providers/cloudflare-workers-ai.ts`.