diff --git a/packages/models/src/models/alibaba.ts b/packages/models/src/models/alibaba.ts index 109c995ed0..572887a255 100644 --- a/packages/models/src/models/alibaba.ts +++ b/packages/models/src/models/alibaba.ts @@ -264,6 +264,7 @@ export const alibabaModels = [ streaming: true, vision: false, tools: true, + stability: "unstable", }, ], jsonOutput: true, diff --git a/packages/models/src/models/deepseek.ts b/packages/models/src/models/deepseek.ts index 4b44cf337a..0e27d7becd 100644 --- a/packages/models/src/models/deepseek.ts +++ b/packages/models/src/models/deepseek.ts @@ -54,6 +54,19 @@ export const deepseekModels = [ vision: false, tools: false, }, + { + providerId: "routeway-discount", + modelName: "deepseek-reasoner", + inputPrice: 0.55 / 1e6, + outputPrice: 2.19 / 1e6, + discount: parseFloat(process.env.ROUTEWAY_PAID_DISCOUNT || "1"), + requestPrice: 0, + contextSize: 64000, + maxOutput: undefined, + streaming: true, + vision: false, + tools: false, + }, ], jsonOutput: false, }, @@ -148,6 +161,20 @@ export const deepseekModels = [ vision: true, tools: true, }, + { + providerId: "routeway-discount", + modelName: "deepseek-chat", + inputPrice: 0.56 / 1e6, + outputPrice: 1.68 / 1e6, + cachedInputPrice: 0.07 / 1e6, + discount: parseFloat(process.env.ROUTEWAY_PAID_DISCOUNT || "1"), + requestPrice: 0, + contextSize: 128000, + maxOutput: undefined, + streaming: true, + vision: true, + tools: true, + }, ], jsonOutput: false, }, diff --git a/packages/models/src/models/google.ts b/packages/models/src/models/google.ts index 61d3bfab6d..ea22be8c45 100644 --- a/packages/models/src/models/google.ts +++ b/packages/models/src/models/google.ts @@ -20,6 +20,19 @@ export const googleModels = [ vision: true, tools: true, }, + { + providerId: "routeway-discount", + modelName: "gemini-2.5-pro", + inputPrice: 1.25 / 1e6, + outputPrice: 10.0 / 1e6, + discount: parseFloat(process.env.ROUTEWAY_PAID_DISCOUNT || "1"), + requestPrice: 0, + contextSize: 1000000, + maxOutput: undefined, + streaming: true, + vision: true, + tools: true, + }, ], }, { @@ -128,6 +141,20 @@ export const googleModels = [ vision: true, tools: true, }, + { + providerId: "routeway-discount", + modelName: "gemini-2.5-flash", + inputPrice: 0.3 / 1e6, + outputPrice: 2.5 / 1e6, + cachedInputPrice: 0.075 / 1e6, + discount: parseFloat(process.env.ROUTEWAY_PAID_DISCOUNT || "1"), + requestPrice: 0, + contextSize: 1000000, + maxOutput: undefined, + streaming: true, + vision: true, + tools: true, + }, ], }, { @@ -150,6 +177,20 @@ export const googleModels = [ vision: true, tools: true, }, + { + providerId: "routeway-discount", + modelName: "gemini-2.5-flash-lite", + inputPrice: 0.1 / 1e6, + outputPrice: 0.4 / 1e6, + cachedInputPrice: 0.025 / 1e6, + discount: parseFloat(process.env.ROUTEWAY_PAID_DISCOUNT || "1"), + requestPrice: 0, + contextSize: 1000000, + maxOutput: undefined, + streaming: true, + vision: true, + tools: true, + }, ], }, { diff --git a/packages/models/src/models/openai.ts b/packages/models/src/models/openai.ts index d34432809f..1a40f5ad73 100644 --- a/packages/models/src/models/openai.ts +++ b/packages/models/src/models/openai.ts @@ -364,6 +364,31 @@ export const openaiModels = [ "tool_choice", ], }, + { + providerId: "routeway-discount", + modelName: "gpt-5", + inputPrice: 1.25 / 1e6, + outputPrice: 10.0 / 1e6, + cachedInputPrice: 0.125 / 1e6, + discount: parseFloat(process.env.ROUTEWAY_PAID_DISCOUNT || "1"), + requestPrice: 0, + contextSize: 400000, + maxOutput: 128000, + reasoning: true, + reasoningOutput: "omit", + streaming: true, + vision: true, + tools: true, + supportedParameters: [ + "temperature", + "top_p", + "frequency_penalty", + "presence_penalty", + "response_format", + "tools", + "tool_choice", + ], + }, ], jsonOutput: true, }, @@ -397,6 +422,31 @@ export const openaiModels = [ "tool_choice", ], }, + { + providerId: "routeway-discount", + modelName: "gpt-5-mini", + inputPrice: 0.25 / 1e6, + outputPrice: 2 / 1e6, + cachedInputPrice: 0.025 / 1e6, + discount: parseFloat(process.env.ROUTEWAY_PAID_DISCOUNT || "1"), + requestPrice: 0, + contextSize: 400000, + maxOutput: 128000, + reasoning: true, + reasoningOutput: "omit", + streaming: true, + vision: true, + tools: true, + supportedParameters: [ + "temperature", + "top_p", + "frequency_penalty", + "presence_penalty", + "response_format", + "tools", + "tool_choice", + ], + }, ], jsonOutput: true, }, @@ -430,6 +480,31 @@ export const openaiModels = [ "tool_choice", ], }, + { + providerId: "routeway-discount", + modelName: "gpt-5-nano", + inputPrice: 0.05 / 1e6, + outputPrice: 0.4 / 1e6, + cachedInputPrice: 0.005 / 1e6, + discount: parseFloat(process.env.ROUTEWAY_PAID_DISCOUNT || "1"), + requestPrice: 0, + contextSize: 400000, + maxOutput: 128000, + reasoning: true, + reasoningOutput: "omit", + streaming: true, + vision: false, + tools: true, + supportedParameters: [ + "temperature", + "top_p", + "frequency_penalty", + "presence_penalty", + "response_format", + "tools", + "tool_choice", + ], + }, ], jsonOutput: true, }, diff --git a/packages/models/src/prepare-request-body.ts b/packages/models/src/prepare-request-body.ts index 2e7b2e0d56..d0808e4d9e 100644 --- a/packages/models/src/prepare-request-body.ts +++ b/packages/models/src/prepare-request-body.ts @@ -218,8 +218,11 @@ export async function prepareRequestBody( }; } if (response_format) { - // Override json_object to json for routeway-discount - if (response_format.type === "json_object") { + // Override json_object to json for routeway-discount only for claude models + if ( + response_format.type === "json_object" && + usedModel.startsWith("claude-") + ) { requestBody.response_format = { ...response_format, type: "json", diff --git a/packages/models/src/testing.ts b/packages/models/src/testing.ts index 33d1e868e7..6d001b85df 100644 --- a/packages/models/src/testing.ts +++ b/packages/models/src/testing.ts @@ -1,6 +1,6 @@ -import { models } from "@/models.js"; +import { models } from "./models.js"; -import type { ProviderModelMapping } from "@/models.js"; +import type { ProviderModelMapping } from "./models.js"; import type { TestOptions } from "vitest"; /** @@ -28,5 +28,8 @@ export function getTestOptions( export function getConcurrentTestOptions(opts?: { completions?: boolean; }): TestOptions { - return { concurrent: true, ...getTestOptions(opts) }; + return { + concurrent: process.env.CONCURRENT_TESTS !== "false", + ...getTestOptions(opts), + }; }