diff --git a/packages/core/script/generate-venice.ts b/packages/core/script/generate-venice.ts index caad0fb91..9a1a6d04d 100644 --- a/packages/core/script/generate-venice.ts +++ b/packages/core/script/generate-venice.ts @@ -9,6 +9,42 @@ import { ModelFamilyValues } from "../src/family.js"; const API_ENDPOINT = "https://api.venice.ai/api/v1/models?type=text"; // Zod schemas for API response validation +const ReasoningEffort = z.enum(["none", "minimal", "low", "medium", "high", "xhigh", "max"]); +type ReasoningOption = { + type: "effort"; + values: Array>; +}; + +const effort = (...values: ReasoningOption["values"]): ReasoningOption[] => [{ type: "effort", values }]; + +// Venice documents these model-specific values even where /models is stale or incomplete. +// Source: https://docs.venice.ai/guides/features/reasoning-models +export const REASONING_OVERRIDES: Record = { + "claude-opus-4-5": effort("low", "medium", "high"), + "claude-opus-4-6": effort("low", "medium", "high", "max"), + "claude-opus-4-6-fast": effort("low", "medium", "high", "max"), + "claude-sonnet-4-5": effort("low", "medium", "high"), + "claude-sonnet-4-6": effort("low", "medium", "high"), + "gemini-3-flash-preview": effort("minimal", "low", "medium", "high"), + "kimi-k2-5": effort("low", "medium", "high"), + "openai-gpt-52": effort("none", "low", "medium", "high", "xhigh"), + "openai-gpt-52-codex": effort("low", "medium", "high", "xhigh"), + "openai-gpt-53-codex": effort("low", "medium", "high", "xhigh"), + "qwen3-5-35b-a3b": effort("low", "medium", "high"), + "zai-org-glm-5-1": [], + + // Provisional until funded Venice probes can confirm that its proxy preserves + // OpenAI's current controls. Sources: + // https://developers.openai.com/api/docs/models/gpt-5.4 + // https://developers.openai.com/api/docs/models/gpt-5.4-pro + // https://developers.openai.com/api/docs/guides/reasoning + "openai-gpt-54": effort("none", "low", "medium", "high", "xhigh"), + "openai-gpt-54-mini": effort("none", "low", "medium", "high", "xhigh"), + "openai-gpt-54-pro": effort("medium", "high", "xhigh"), + "openai-gpt-55": effort("none", "low", "medium", "high", "xhigh"), + "openai-gpt-55-pro": effort("medium", "high", "xhigh"), +}; + const Capabilities = z .object({ optimizedForCode: z.boolean().optional(), @@ -17,6 +53,9 @@ const Capabilities = z supportsFunctionCalling: z.boolean().optional(), supportsLogProbs: z.boolean().optional(), supportsReasoning: z.boolean().optional(), + supportsReasoningEffort: z.boolean().optional(), + reasoningEffortOptions: z.array(ReasoningEffort).optional(), + defaultReasoningEffort: ReasoningEffort.optional(), supportsResponseSchema: z.boolean().optional(), supportsVideoInput: z.boolean().optional(), supportsVision: z.boolean().optional(), @@ -142,6 +181,7 @@ interface ExistingModel { family?: string; attachment?: boolean; reasoning?: boolean; + reasoning_options?: ReasoningOption[]; tool_call?: boolean; structured_output?: boolean; temperature?: boolean; @@ -235,6 +275,7 @@ interface MergedModel { family?: string; attachment: boolean; reasoning: boolean; + reasoning_options?: ReasoningOption[]; tool_call: boolean; structured_output?: boolean; temperature: boolean; @@ -267,9 +308,10 @@ interface MergedModel { }; } -function mergeModel( +export function mergeModel( apiModel: z.infer, existing: ExistingModel | null, + reportDiscrepancy: (message: string) => void = console.warn, ): MergedModel { const spec = apiModel.model_spec; const caps = spec.capabilities; @@ -309,6 +351,31 @@ function mergeModel( }, }; + const override = REASONING_OVERRIDES[apiModel.id]; + const catalogOptions = caps.supportsReasoningEffort === true && caps.reasoningEffortOptions !== undefined + ? effort(...caps.reasoningEffortOptions) + : undefined; + const curatedOptions = existing?.reasoning_options; + const selectedOptions = override ?? curatedOptions ?? (existing === null ? catalogOptions : undefined); + + if (selectedOptions !== undefined) { + merged.reasoning_options = selectedOptions; + } + + const catalogClaim = catalogOptions ?? (caps.supportsReasoningEffort === false ? [] : undefined); + if (override !== undefined && JSON.stringify(override) !== JSON.stringify(curatedOptions) && curatedOptions !== undefined) { + reportDiscrepancy(`${apiModel.id}: documented override replaces curated reasoning_options`); + } + if ( + selectedOptions !== undefined && + catalogClaim !== undefined && + JSON.stringify(selectedOptions) !== JSON.stringify(catalogClaim) + ) { + reportDiscrepancy( + `${apiModel.id}: preserving ${override !== undefined ? "documented override" : "curated reasoning_options"} despite catalog ${caps.supportsReasoningEffort === false ? "supportsReasoningEffort=false" : "option mismatch"}`, + ); + } + // structured_output only if true if (caps.supportsResponseSchema === true) { merged.structured_output = true; @@ -352,7 +419,7 @@ function mergeModel( return merged; } -function formatToml(model: MergedModel): string { +export function formatToml(model: MergedModel): string { const lines: string[] = []; // Basic fields @@ -362,6 +429,9 @@ function formatToml(model: MergedModel): string { } lines.push(`attachment = ${model.attachment}`); lines.push(`reasoning = ${model.reasoning}`); + if (model.reasoning_options?.length === 0) { + lines.push("reasoning_options = []"); + } lines.push(`tool_call = ${model.tool_call}`); if (model.structured_output !== undefined) { lines.push(`structured_output = ${model.structured_output}`); @@ -377,6 +447,13 @@ function formatToml(model: MergedModel): string { lines.push(`status = "${model.status}"`); } + for (const option of model.reasoning_options ?? []) { + lines.push(""); + lines.push("[[reasoning_options]]"); + lines.push(`type = "${option.type}"`); + lines.push(`values = [${option.values.map((value) => `"${value}"`).join(", ")}]`); + } + // Interleaved section (if present) if (model.interleaved !== undefined) { lines.push(""); @@ -437,7 +514,7 @@ interface Changes { newValue: string; } -function detectChanges( +export function detectChanges( existing: ExistingModel | null, merged: MergedModel, ): Changes[] { @@ -459,7 +536,7 @@ function detectChanges( const formatValue = (val: unknown): string => { if (typeof val === "number") return formatNumber(val); - if (Array.isArray(val)) return `[${val.join(", ")}]`; + if (Array.isArray(val)) return JSON.stringify(val); if (val === undefined) return "(none)"; return String(val); }; @@ -468,6 +545,7 @@ function detectChanges( compare("family", existing.family, merged.family); compare("attachment", existing.attachment, merged.attachment); compare("reasoning", existing.reasoning, merged.reasoning); + compare("reasoning_options", existing.reasoning_options, merged.reasoning_options); compare("tool_call", existing.tool_call, merged.tool_call); compare("structured_output", existing.structured_output, merged.structured_output); compare("open_weights", existing.open_weights, merged.open_weights); @@ -650,4 +728,6 @@ async function main() { } } -await main(); +if (import.meta.main) { + await main(); +} diff --git a/packages/core/test/venice-generator.test.ts b/packages/core/test/venice-generator.test.ts new file mode 100644 index 000000000..b35560140 --- /dev/null +++ b/packages/core/test/venice-generator.test.ts @@ -0,0 +1,121 @@ +import { expect, test } from "bun:test"; + +import { + detectChanges, + formatToml, + mergeModel, + REASONING_OVERRIDES, +} from "../script/generate-venice.js"; + +type Effort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max"; +const options = (...values: Effort[]) => [{ type: "effort" as const, values }]; + +function model(id: string, capabilities: Record) { + return { + created: 1_700_000_000, + id, + model_spec: { + availableContextTokens: 128_000, + maxCompletionTokens: 32_000, + capabilities: { supportsReasoning: true, ...capabilities }, + name: "Test Model", + }, + object: "model", + owned_by: "venice.ai", + type: "text", + }; +} + +test("curated options survive false and stale Venice catalog metadata", () => { + const claude = options("low", "medium", "high", "max"); + const codex = options("low", "medium", "high", "xhigh"); + const discrepancies: string[] = []; + + expect(mergeModel(model("claude-opus-4-7", { + supportsReasoningEffort: false, + }), { reasoning_options: claude }, discrepancies.push.bind(discrepancies)).reasoning_options).toEqual(claude); + expect(mergeModel(model("openai-gpt-56-codex", { + supportsReasoningEffort: true, + reasoningEffortOptions: ["none", "low"], + }), { reasoning_options: codex }, discrepancies.push.bind(discrepancies)).reasoning_options).toEqual(codex); + expect(discrepancies).toHaveLength(2); +}); + +test("documented override beats stale curated and catalog options", () => { + const discrepancies: string[] = []; + const merged = mergeModel(model("openai-gpt-52", { + supportsReasoningEffort: true, + reasoningEffortOptions: ["minimal", "low", "high"], + }), { reasoning_options: options("low", "high") }, discrepancies.push.bind(discrepancies)); + + expect(merged.reasoning_options).toEqual(options("none", "low", "medium", "high", "xhigh")); + expect(discrepancies).toHaveLength(2); +}); + +test("catalog fills only an uncurated new model", () => { + const merged = mergeModel(model("new-reasoner", { + supportsReasoningEffort: true, + reasoningEffortOptions: ["low", "high"], + }), null); + + expect(merged.reasoning_options).toEqual(options("low", "high")); +}); + +test("catalog does not fill an unresolved existing model", () => { + const existing = { reasoning: true }; + const merged = mergeModel(model("existing-unresolved-reasoner", { + supportsReasoningEffort: true, + reasoningEffortOptions: ["low", "high"], + }), existing); + + expect(merged.reasoning_options).toBeUndefined(); + expect(detectChanges(existing, merged).find((change) => change.field === "reasoning_options")).toBeUndefined(); +}); + +test("catalog false without curated evidence leaves options undefined", () => { + const merged = mergeModel(model("unknown-fixed-reasoner", { + supportsReasoningEffort: false, + }), null); + + expect(merged.reasoning_options).toBeUndefined(); + expect(formatToml(merged)).not.toContain("reasoning_options"); +}); + +test("explicit curated empty options remain stable", () => { + const existing = { reasoning_options: [] }; + const merged = mergeModel(model("curated-fixed-reasoner", { + supportsReasoningEffort: false, + }), existing); + + expect(merged.reasoning_options).toEqual([]); + expect(detectChanges({ ...existing, reasoning: true }, merged).find((change) => change.field === "reasoning_options")).toBeUndefined(); + expect(formatToml(merged)).toContain("reasoning = true\nreasoning_options = []"); +}); + +test("formatter emits nonempty options using model TOML convention", () => { + const merged = mergeModel(model("new-reasoner", { + supportsReasoningEffort: true, + reasoningEffortOptions: ["none", "high"], + }), null); + + expect(formatToml(merged)).toContain( + '[[reasoning_options]]\ntype = "effort"\nvalues = ["none", "high"]', + ); +}); + +test("official correction fixtures remain exact", () => { + const expected = { + "claude-opus-4-6": options("low", "medium", "high", "max"), + "openai-gpt-52": options("none", "low", "medium", "high", "xhigh"), + "openai-gpt-52-codex": options("low", "medium", "high", "xhigh"), + "openai-gpt-54-pro": options("medium", "high", "xhigh"), + "gemini-3-flash-preview": options("minimal", "low", "medium", "high"), + "kimi-k2-5": options("low", "medium", "high"), + "qwen3-5-35b-a3b": options("low", "medium", "high"), + "zai-org-glm-5-1": [], + }; + + for (const [id, reasoningOptions] of Object.entries(expected)) { + expect(REASONING_OVERRIDES[id]).toEqual(reasoningOptions); + } +}); diff --git a/providers/venice/models/aion-labs-aion-2-0.toml b/providers/venice/models/aion-labs-aion-2-0.toml index 80558110e..d45edfc74 100644 --- a/providers/venice/models/aion-labs-aion-2-0.toml +++ b/providers/venice/models/aion-labs-aion-2-0.toml @@ -2,6 +2,7 @@ name = "Aion 2.0" family = "o" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = false temperature = true release_date = "2026-03-24" diff --git a/providers/venice/models/arcee-trinity-large-thinking.toml b/providers/venice/models/arcee-trinity-large-thinking.toml index 90ef4296e..56edce975 100644 --- a/providers/venice/models/arcee-trinity-large-thinking.toml +++ b/providers/venice/models/arcee-trinity-large-thinking.toml @@ -2,6 +2,7 @@ name = "Trinity Large Thinking" family = "trinity" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/claude-opus-4-5.toml b/providers/venice/models/claude-opus-4-5.toml index 03ad5fd06..4287e7d13 100644 --- a/providers/venice/models/claude-opus-4-5.toml +++ b/providers/venice/models/claude-opus-4-5.toml @@ -2,6 +2,7 @@ name = "Claude Opus 4.5" family = "claude-opus" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/claude-opus-4-6-fast.toml b/providers/venice/models/claude-opus-4-6-fast.toml index 54e9e68e7..0c06d4333 100644 --- a/providers/venice/models/claude-opus-4-6-fast.toml +++ b/providers/venice/models/claude-opus-4-6-fast.toml @@ -2,6 +2,7 @@ name = "Claude Opus 4.6 Fast" family = "claude-opus" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "max"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/claude-opus-4-6.toml b/providers/venice/models/claude-opus-4-6.toml index d9c44413e..632d503f2 100644 --- a/providers/venice/models/claude-opus-4-6.toml +++ b/providers/venice/models/claude-opus-4-6.toml @@ -2,6 +2,7 @@ name = "Claude Opus 4.6" family = "claude-opus" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "max"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/claude-sonnet-4-5.toml b/providers/venice/models/claude-sonnet-4-5.toml index df26bf44d..eea038ce7 100644 --- a/providers/venice/models/claude-sonnet-4-5.toml +++ b/providers/venice/models/claude-sonnet-4-5.toml @@ -2,6 +2,7 @@ name = "Claude Sonnet 4.5" family = "claude-sonnet" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/claude-sonnet-4-6.toml b/providers/venice/models/claude-sonnet-4-6.toml index 6aa843933..9590e74de 100644 --- a/providers/venice/models/claude-sonnet-4-6.toml +++ b/providers/venice/models/claude-sonnet-4-6.toml @@ -2,6 +2,7 @@ name = "Claude Sonnet 4.6" family = "claude-sonnet" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/deepseek-v3.2.toml b/providers/venice/models/deepseek-v3.2.toml index b3c5882fc..1caa91d61 100644 --- a/providers/venice/models/deepseek-v3.2.toml +++ b/providers/venice/models/deepseek-v3.2.toml @@ -2,6 +2,7 @@ name = "DeepSeek V3.2" family = "deepseek" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/gemini-3-1-pro-preview.toml b/providers/venice/models/gemini-3-1-pro-preview.toml index cfced90ef..f734d4a70 100644 --- a/providers/venice/models/gemini-3-1-pro-preview.toml +++ b/providers/venice/models/gemini-3-1-pro-preview.toml @@ -2,6 +2,7 @@ name = "Gemini 3.1 Pro Preview" family = "gemini-pro" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/gemini-3-5-flash.toml b/providers/venice/models/gemini-3-5-flash.toml index 17e0ce36f..f1173bad3 100644 --- a/providers/venice/models/gemini-3-5-flash.toml +++ b/providers/venice/models/gemini-3-5-flash.toml @@ -2,6 +2,7 @@ name = "Gemini 3.5 Flash" family = "gemini-flash" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/gemini-3-flash-preview.toml b/providers/venice/models/gemini-3-flash-preview.toml index b471548c0..05c0c1e32 100644 --- a/providers/venice/models/gemini-3-flash-preview.toml +++ b/providers/venice/models/gemini-3-flash-preview.toml @@ -2,6 +2,7 @@ name = "Gemini 3 Flash Preview" family = "gemini-flash" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["minimal", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/google-gemma-4-26b-a4b-it.toml b/providers/venice/models/google-gemma-4-26b-a4b-it.toml index 5499d911f..77c93e63a 100644 --- a/providers/venice/models/google-gemma-4-26b-a4b-it.toml +++ b/providers/venice/models/google-gemma-4-26b-a4b-it.toml @@ -2,6 +2,7 @@ name = "Google Gemma 4 26B A4B Instruct" family = "gemma" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/google-gemma-4-31b-it.toml b/providers/venice/models/google-gemma-4-31b-it.toml index 014456bf2..18b7f4caa 100644 --- a/providers/venice/models/google-gemma-4-31b-it.toml +++ b/providers/venice/models/google-gemma-4-31b-it.toml @@ -2,6 +2,7 @@ name = "Google Gemma 4 31B Instruct" family = "gemma" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/kimi-k2-5.toml b/providers/venice/models/kimi-k2-5.toml index 57fdf7b50..538cda95f 100644 --- a/providers/venice/models/kimi-k2-5.toml +++ b/providers/venice/models/kimi-k2-5.toml @@ -2,6 +2,7 @@ name = "Kimi K2.5" family = "kimi" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/kimi-k2-6.toml b/providers/venice/models/kimi-k2-6.toml index 55a1edcbe..a69ea4177 100644 --- a/providers/venice/models/kimi-k2-6.toml +++ b/providers/venice/models/kimi-k2-6.toml @@ -2,6 +2,7 @@ name = "Kimi K2.6" family = "kimi" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/mercury-2.toml b/providers/venice/models/mercury-2.toml index bbbcd0a73..80e614527 100644 --- a/providers/venice/models/mercury-2.toml +++ b/providers/venice/models/mercury-2.toml @@ -2,6 +2,7 @@ name = "Mercury 2" family = "mercury" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/minimax-m25.toml b/providers/venice/models/minimax-m25.toml index 1301119c2..62d875766 100644 --- a/providers/venice/models/minimax-m25.toml +++ b/providers/venice/models/minimax-m25.toml @@ -2,6 +2,7 @@ name = "MiniMax M2.5" family = "minimax" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true temperature = true release_date = "2026-02-12" diff --git a/providers/venice/models/minimax-m27.toml b/providers/venice/models/minimax-m27.toml index 15e1acd9e..a0ed5b4db 100644 --- a/providers/venice/models/minimax-m27.toml +++ b/providers/venice/models/minimax-m27.toml @@ -2,6 +2,7 @@ name = "MiniMax M2.7" family = "minimax" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true temperature = true release_date = "2026-03-18" diff --git a/providers/venice/models/mistral-small-2603.toml b/providers/venice/models/mistral-small-2603.toml index 1f9f5b05a..72c76210e 100644 --- a/providers/venice/models/mistral-small-2603.toml +++ b/providers/venice/models/mistral-small-2603.toml @@ -2,6 +2,7 @@ name = "Mistral Small 4" family = "mistral-small" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/nvidia-nemotron-3-ultra-550b-a55b.toml b/providers/venice/models/nvidia-nemotron-3-ultra-550b-a55b.toml index fbe82fb5e..c63de2e1d 100644 --- a/providers/venice/models/nvidia-nemotron-3-ultra-550b-a55b.toml +++ b/providers/venice/models/nvidia-nemotron-3-ultra-550b-a55b.toml @@ -2,6 +2,7 @@ name = "NVIDIA Nemotron 3 Ultra" family = "nemotron" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/nvidia-nemotron-cascade-2-30b-a3b.toml b/providers/venice/models/nvidia-nemotron-cascade-2-30b-a3b.toml index 0d1bd2e27..7844b6f90 100644 --- a/providers/venice/models/nvidia-nemotron-cascade-2-30b-a3b.toml +++ b/providers/venice/models/nvidia-nemotron-cascade-2-30b-a3b.toml @@ -3,6 +3,7 @@ base_model = "nvidia/nemotron-cascade-2-30b-a3b" family = "nemotron" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/olafangensan-glm-4.7-flash-heretic.toml b/providers/venice/models/olafangensan-glm-4.7-flash-heretic.toml index d85fa92da..c0f2f2b3c 100644 --- a/providers/venice/models/olafangensan-glm-4.7-flash-heretic.toml +++ b/providers/venice/models/olafangensan-glm-4.7-flash-heretic.toml @@ -2,6 +2,7 @@ name = "GLM 4.7 Flash Heretic" family = "glm-flash" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-52-codex.toml b/providers/venice/models/openai-gpt-52-codex.toml index 937fd40f2..f67655195 100644 --- a/providers/venice/models/openai-gpt-52-codex.toml +++ b/providers/venice/models/openai-gpt-52-codex.toml @@ -2,6 +2,7 @@ name = "GPT-5.2 Codex" family = "gpt-codex" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-52.toml b/providers/venice/models/openai-gpt-52.toml index e7ec31cae..09228e69b 100644 --- a/providers/venice/models/openai-gpt-52.toml +++ b/providers/venice/models/openai-gpt-52.toml @@ -2,6 +2,7 @@ name = "GPT-5.2" family = "gpt" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-53-codex.toml b/providers/venice/models/openai-gpt-53-codex.toml index c14132f5c..755ef9ad0 100644 --- a/providers/venice/models/openai-gpt-53-codex.toml +++ b/providers/venice/models/openai-gpt-53-codex.toml @@ -2,6 +2,7 @@ name = "GPT-5.3 Codex" family = "gpt-codex" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high", "xhigh"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-54-mini.toml b/providers/venice/models/openai-gpt-54-mini.toml index c1d4f7727..6cc34de7c 100644 --- a/providers/venice/models/openai-gpt-54-mini.toml +++ b/providers/venice/models/openai-gpt-54-mini.toml @@ -2,6 +2,7 @@ name = "GPT-5.4 Mini" family = "gpt-mini" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-54-pro.toml b/providers/venice/models/openai-gpt-54-pro.toml index ff376fe0b..9b1c0c179 100644 --- a/providers/venice/models/openai-gpt-54-pro.toml +++ b/providers/venice/models/openai-gpt-54-pro.toml @@ -2,6 +2,7 @@ name = "GPT-5.4 Pro" family = "gpt-pro" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-54.toml b/providers/venice/models/openai-gpt-54.toml index 4904d1264..8bcd66cbe 100644 --- a/providers/venice/models/openai-gpt-54.toml +++ b/providers/venice/models/openai-gpt-54.toml @@ -2,6 +2,7 @@ name = "GPT-5.4" family = "gpt" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-55-pro.toml b/providers/venice/models/openai-gpt-55-pro.toml index a02dbc409..a8a766b40 100644 --- a/providers/venice/models/openai-gpt-55-pro.toml +++ b/providers/venice/models/openai-gpt-55-pro.toml @@ -2,6 +2,7 @@ name = "GPT-5.5 Pro" family = "gpt-pro" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["medium", "high", "xhigh"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-55.toml b/providers/venice/models/openai-gpt-55.toml index a262f8e98..59555aa95 100644 --- a/providers/venice/models/openai-gpt-55.toml +++ b/providers/venice/models/openai-gpt-55.toml @@ -2,6 +2,7 @@ name = "GPT-5.5" family = "gpt" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "xhigh"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/openai-gpt-oss-120b.toml b/providers/venice/models/openai-gpt-oss-120b.toml index 7c1508138..86272746f 100644 --- a/providers/venice/models/openai-gpt-oss-120b.toml +++ b/providers/venice/models/openai-gpt-oss-120b.toml @@ -2,6 +2,7 @@ name = "OpenAI GPT OSS 120B" family = "gpt-oss" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true temperature = true knowledge = "2025-07" diff --git a/providers/venice/models/qwen3-235b-a22b-thinking-2507.toml b/providers/venice/models/qwen3-235b-a22b-thinking-2507.toml index 3444c2e9d..6899c0a4a 100644 --- a/providers/venice/models/qwen3-235b-a22b-thinking-2507.toml +++ b/providers/venice/models/qwen3-235b-a22b-thinking-2507.toml @@ -2,6 +2,7 @@ name = "Qwen 3 235B A22B Thinking 2507" family = "qwen" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/qwen3-5-35b-a3b.toml b/providers/venice/models/qwen3-5-35b-a3b.toml index 0bc8a8911..8098010f6 100644 --- a/providers/venice/models/qwen3-5-35b-a3b.toml +++ b/providers/venice/models/qwen3-5-35b-a3b.toml @@ -2,6 +2,7 @@ name = "Qwen 3.5 35B A3B" family = "qwen" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/qwen3-5-397b-a17b.toml b/providers/venice/models/qwen3-5-397b-a17b.toml index 3e190b952..3a776ccb5 100644 --- a/providers/venice/models/qwen3-5-397b-a17b.toml +++ b/providers/venice/models/qwen3-5-397b-a17b.toml @@ -2,6 +2,7 @@ name = "Qwen 3.5 397B" family = "qwen" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/qwen3-5-9b.toml b/providers/venice/models/qwen3-5-9b.toml index 8e6f1be3f..c42c6590f 100644 --- a/providers/venice/models/qwen3-5-9b.toml +++ b/providers/venice/models/qwen3-5-9b.toml @@ -2,6 +2,7 @@ name = "Qwen 3.5 9B" family = "qwen" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/qwen3-6-27b.toml b/providers/venice/models/qwen3-6-27b.toml index d75a8156f..4e4885d26 100644 --- a/providers/venice/models/qwen3-6-27b.toml +++ b/providers/venice/models/qwen3-6-27b.toml @@ -2,6 +2,7 @@ name = "Qwen 3.6 27B" family = "qwen" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/z-ai-glm-5-turbo.toml b/providers/venice/models/z-ai-glm-5-turbo.toml index 453c551e5..5b283bc4a 100644 --- a/providers/venice/models/z-ai-glm-5-turbo.toml +++ b/providers/venice/models/z-ai-glm-5-turbo.toml @@ -2,6 +2,7 @@ name = "GLM 5 Turbo" family = "glm" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/z-ai-glm-5v-turbo.toml b/providers/venice/models/z-ai-glm-5v-turbo.toml index 39bc6881d..a4bbc6da5 100644 --- a/providers/venice/models/z-ai-glm-5v-turbo.toml +++ b/providers/venice/models/z-ai-glm-5v-turbo.toml @@ -2,6 +2,7 @@ name = "GLM 5V Turbo" family = "glmv" attachment = true reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/zai-org-glm-4.6.toml b/providers/venice/models/zai-org-glm-4.6.toml index 39cb2ae13..3ced9af6b 100644 --- a/providers/venice/models/zai-org-glm-4.6.toml +++ b/providers/venice/models/zai-org-glm-4.6.toml @@ -2,6 +2,7 @@ name = "GLM 4.6" family = "glm" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/zai-org-glm-4.7-flash.toml b/providers/venice/models/zai-org-glm-4.7-flash.toml index f0604c94d..94b7e105e 100644 --- a/providers/venice/models/zai-org-glm-4.7-flash.toml +++ b/providers/venice/models/zai-org-glm-4.7-flash.toml @@ -2,6 +2,7 @@ name = "GLM 4.7 Flash" family = "glm-flash" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/zai-org-glm-4.7.toml b/providers/venice/models/zai-org-glm-4.7.toml index 7d64ce34f..e41aae6d8 100644 --- a/providers/venice/models/zai-org-glm-4.7.toml +++ b/providers/venice/models/zai-org-glm-4.7.toml @@ -2,6 +2,7 @@ name = "GLM 4.7" family = "glm" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/zai-org-glm-5-1.toml b/providers/venice/models/zai-org-glm-5-1.toml index 4bf14c7fd..78ed6364c 100644 --- a/providers/venice/models/zai-org-glm-5-1.toml +++ b/providers/venice/models/zai-org-glm-5-1.toml @@ -2,6 +2,7 @@ name = "GLM 5.1" family = "glm" attachment = false reasoning = true +reasoning_options = [] tool_call = true structured_output = true temperature = true diff --git a/providers/venice/models/zai-org-glm-5.toml b/providers/venice/models/zai-org-glm-5.toml index fb88cf199..b375d1a03 100644 --- a/providers/venice/models/zai-org-glm-5.toml +++ b/providers/venice/models/zai-org-glm-5.toml @@ -2,6 +2,7 @@ name = "GLM 5" family = "glm" attachment = false reasoning = true +reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high"] }] tool_call = true structured_output = true temperature = true