diff --git a/packages/app/server/src/__tests__/vercel-ai-gateway-provider.test.ts b/packages/app/server/src/__tests__/vercel-ai-gateway-provider.test.ts new file mode 100644 index 000000000..db3d4bc31 --- /dev/null +++ b/packages/app/server/src/__tests__/vercel-ai-gateway-provider.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, it } from 'vitest'; + +import { VercelAIGatewayProvider } from '../providers/VercelAIGatewayProvider'; +import { ProviderType } from '../providers/ProviderType'; +import { getModelPrice } from '../services/AccountingService'; + +describe('VercelAIGatewayProvider', () => { + it('routes Echo-scoped Vercel model IDs to the Vercel AI Gateway API', () => { + const provider = new VercelAIGatewayProvider( + false, + 'vercel-ai-gateway/openai/gpt-5-mini' + ); + + const transformedBody = provider.transformRequestBody({ + model: 'vercel-ai-gateway/openai/gpt-5-mini', + }); + + expect(provider.getType()).toBe(ProviderType.VERCEL_AI_GATEWAY); + expect(provider.getBaseUrl()).toBe('https://ai-gateway.vercel.sh/v1'); + expect(transformedBody.model).toBe('openai/gpt-5-mini'); + }); + + it('exposes Vercel AI Gateway pricing under a non-conflicting Echo model ID', () => { + expect(getModelPrice('vercel-ai-gateway/openai/gpt-5-mini')).toMatchObject({ + provider: 'Vercel', + model: 'vercel-ai-gateway/openai/gpt-5-mini', + }); + }); +}); diff --git a/packages/app/server/src/env.ts b/packages/app/server/src/env.ts index da23dd994..a1eef30f0 100644 --- a/packages/app/server/src/env.ts +++ b/packages/app/server/src/env.ts @@ -45,6 +45,8 @@ export const env = createEnv({ GROQ_API_KEY: z.string().optional(), XAI_API_KEY: z.string().optional(), OPENROUTER_API_KEY: z.string().optional(), + AI_GATEWAY_API_KEY: z.string().optional(), + VERCEL_AI_GATEWAY_API_KEY: z.string().optional(), TAVILY_API_KEY: z.string().optional(), E2B_API_KEY: z.string().optional(), GOOGLE_SERVICE_ACCOUNT_KEY_ENCODED: z.string().optional(), diff --git a/packages/app/server/src/providers/ProviderFactory.ts b/packages/app/server/src/providers/ProviderFactory.ts index 8bc01e719..e323dae30 100644 --- a/packages/app/server/src/providers/ProviderFactory.ts +++ b/packages/app/server/src/providers/ProviderFactory.ts @@ -21,6 +21,7 @@ import { OpenAIImageProvider } from './OpenAIImageProvider'; import { OpenAIResponsesProvider } from './OpenAIResponsesProvider'; import { OpenRouterProvider } from './OpenRouterProvider'; import { ProviderType } from './ProviderType'; +import { VercelAIGatewayProvider } from './VercelAIGatewayProvider'; import { XAIProvider } from './XAIProvider'; import { VertexAIProvider, @@ -50,6 +51,9 @@ const createChatModelToProviderMapping = (): Record => { case 'OpenRouter': mapping[modelConfig.model_id] = ProviderType.OPENROUTER; break; + case 'Vercel': + mapping[modelConfig.model_id] = ProviderType.VERCEL_AI_GATEWAY; + break; case 'Groq': mapping[modelConfig.model_id] = ProviderType.GROQ; break; @@ -180,6 +184,8 @@ export const getProvider = ( return new OpenAIResponsesProvider(stream, model); case ProviderType.OPENROUTER: return new OpenRouterProvider(stream, model); + case ProviderType.VERCEL_AI_GATEWAY: + return new VercelAIGatewayProvider(stream, model); case ProviderType.OPENAI_IMAGES: return new OpenAIImageProvider(stream, model); case ProviderType.GEMINI_VEO: diff --git a/packages/app/server/src/providers/ProviderType.ts b/packages/app/server/src/providers/ProviderType.ts index b2514ac80..9b2e15322 100644 --- a/packages/app/server/src/providers/ProviderType.ts +++ b/packages/app/server/src/providers/ProviderType.ts @@ -8,6 +8,7 @@ export enum ProviderType { VERTEX_AI = 'VERTEX_AI', OPENAI_RESPONSES = 'OPENAI_RESPONSES', OPENROUTER = 'OPENROUTER', + VERCEL_AI_GATEWAY = 'VERCEL_AI_GATEWAY', OPENAI_IMAGES = 'OPENAI_IMAGES', OPENAI_VIDEOS = 'OPENAI_VIDEOS', GROQ = 'GROQ', diff --git a/packages/app/server/src/providers/VercelAIGatewayProvider.ts b/packages/app/server/src/providers/VercelAIGatewayProvider.ts new file mode 100644 index 000000000..5cec96088 --- /dev/null +++ b/packages/app/server/src/providers/VercelAIGatewayProvider.ts @@ -0,0 +1,34 @@ +import { env } from '../env'; +import { GPTProvider } from './GPTProvider'; +import { ProviderType } from './ProviderType'; + +export class VercelAIGatewayProvider extends GPTProvider { + private readonly VERCEL_AI_GATEWAY_BASE_URL = + 'https://ai-gateway.vercel.sh/v1'; + private readonly MODEL_PREFIX = 'vercel-ai-gateway/'; + + override getType(): ProviderType { + return ProviderType.VERCEL_AI_GATEWAY; + } + + override getBaseUrl(): string { + return this.VERCEL_AI_GATEWAY_BASE_URL; + } + + override getApiKey(): string | undefined { + return env.AI_GATEWAY_API_KEY ?? env.VERCEL_AI_GATEWAY_API_KEY; + } + + override transformRequestBody( + reqBody: Record + ): Record { + if ( + typeof reqBody.model === 'string' && + reqBody.model.startsWith(this.MODEL_PREFIX) + ) { + reqBody.model = reqBody.model.slice(this.MODEL_PREFIX.length); + } + + return reqBody; + } +} diff --git a/packages/app/server/src/services/AccountingService.ts b/packages/app/server/src/services/AccountingService.ts index 02e51e14e..b276a1ccd 100644 --- a/packages/app/server/src/services/AccountingService.ts +++ b/packages/app/server/src/services/AccountingService.ts @@ -3,6 +3,7 @@ import { AnthropicModels, GeminiModels, OpenRouterModels, + VercelModels, GroqModels, OpenAIImageModels, SupportedOpenAIResponseToolPricing, @@ -28,6 +29,7 @@ export const ALL_SUPPORTED_MODELS: SupportedModel[] = [ ...AnthropicModels, ...GeminiModels, ...OpenRouterModels, + ...VercelModels, ...GroqModels, ...XAIModels, ]; diff --git a/packages/sdk/ts/package.json b/packages/sdk/ts/package.json index f2a7f1066..43c5439f3 100644 --- a/packages/sdk/ts/package.json +++ b/packages/sdk/ts/package.json @@ -28,8 +28,9 @@ "update-models:anthropic": "tsx scripts/update-anthropic-models.ts", "update-models:gemini": "tsx scripts/update-gemini-models.ts", "update-models:openrouter": "tsx scripts/update-openrouter-models.ts", + "update-models:vercel": "tsx scripts/update-vercel-models.ts", "update-models:groq": "tsx scripts/update-groq-models.ts", - "update-all-models": "pnpm run update-models:openai && pnpm run update-models:anthropic && pnpm run update-models:gemini && pnpm run update-models:openrouter && pnpm run update-models:groq", + "update-all-models": "pnpm run update-models:openai && pnpm run update-models:anthropic && pnpm run update-models:gemini && pnpm run update-models:openrouter && pnpm run update-models:vercel && pnpm run update-models:groq", "prepublishOnly": "pnpm run build" }, "keywords": [ diff --git a/packages/sdk/ts/scripts/update-vercel-models.ts b/packages/sdk/ts/scripts/update-vercel-models.ts new file mode 100644 index 000000000..0e22adb2f --- /dev/null +++ b/packages/sdk/ts/scripts/update-vercel-models.ts @@ -0,0 +1,120 @@ +#!/usr/bin/env node + +import { writeFileSync } from 'fs'; +import { join } from 'path'; +import { SupportedModel } from './update-models'; + +interface VercelModel { + id: string; + type?: string; + pricing?: { + input?: string; + output?: string; + }; +} + +interface VercelModelsResponse { + data: VercelModel[]; +} + +const ECHO_MODEL_PREFIX = 'vercel-ai-gateway/'; + +async function fetchVercelModels(): Promise { + console.log('Fetching models from Vercel AI Gateway...'); + + const response = await fetch('https://ai-gateway.vercel.sh/v1/models'); + + if (!response.ok) { + throw new Error( + `Failed to fetch Vercel AI Gateway models: ${response.status} ${response.statusText}` + ); + } + + const data = (await response.json()) as VercelModelsResponse; + const models: SupportedModel[] = []; + + for (const model of data.data) { + if (model.type !== 'language') { + continue; + } + + const inputCost = Number(model.pricing?.input); + const outputCost = Number(model.pricing?.output); + + if ( + Number.isNaN(inputCost) || + Number.isNaN(outputCost) || + inputCost === 0 || + outputCost === 0 + ) { + console.warn(`Skipping ${model.id} - missing language token pricing`); + continue; + } + + models.push({ + model_id: `${ECHO_MODEL_PREFIX}${model.id}`, + input_cost_per_token: inputCost, + output_cost_per_token: outputCost, + provider: 'Vercel', + }); + } + + return models; +} + +function generateVercelModelFile(models: SupportedModel[]): string { + const sortedModels = models.sort((a, b) => + a.model_id.localeCompare(b.model_id) + ); + + const unionType = sortedModels + .map(model => ` | '${model.model_id}'`) + .join('\n'); + + const modelObjects = sortedModels + .map(model => { + return ` { + model_id: '${model.model_id}', + input_cost_per_token: ${model.input_cost_per_token}, + output_cost_per_token: ${model.output_cost_per_token}, + provider: '${model.provider}', + }`; + }) + .join(',\n'); + + return `import { SupportedModel } from '../types'; + +// Union type of all valid Vercel AI Gateway language model IDs. +export type VercelModel = +${unionType}; + +export const VercelModels: SupportedModel[] = [ +${modelObjects} +]; + +`; +} + +async function updateVercelModels() { + try { + const models = await fetchVercelModels(); + + if (models.length === 0) { + throw new Error('No compatible Vercel AI Gateway language models found'); + } + + const fileContent = generateVercelModelFile(models); + const fullPath = join(process.cwd(), 'src/supported-models/chat/vercel.ts'); + writeFileSync(fullPath, fileContent, 'utf8'); + + console.log(`Updated vercel.ts with ${models.length} models`); + } catch (error) { + console.error('Error updating Vercel AI Gateway models:', error); + process.exit(1); + } +} + +updateVercelModels().catch(error => { + console.error('Unexpected error:', error); + process.exit(1); +}); diff --git a/packages/sdk/ts/src/index.ts b/packages/sdk/ts/src/index.ts index 521a30f93..92bc472ec 100644 --- a/packages/sdk/ts/src/index.ts +++ b/packages/sdk/ts/src/index.ts @@ -45,6 +45,8 @@ export { GeminiModels } from './supported-models/chat/gemini'; export type { GeminiModel } from './supported-models/chat/gemini'; export { OpenRouterModels } from './supported-models/chat/openrouter'; export type { OpenRouterModel } from './supported-models/chat/openrouter'; +export { VercelModels } from './supported-models/chat/vercel'; +export type { VercelModel } from './supported-models/chat/vercel'; export { GroqModels } from './supported-models/chat/groq'; export type { GroqModel } from './supported-models/chat/groq'; export { XAIModels } from './supported-models/chat/xai'; diff --git a/packages/sdk/ts/src/providers/index.ts b/packages/sdk/ts/src/providers/index.ts index 62f54fac8..acc08b820 100644 --- a/packages/sdk/ts/src/providers/index.ts +++ b/packages/sdk/ts/src/providers/index.ts @@ -4,6 +4,7 @@ export * from './groq'; export * from './xai'; export * from './openai'; export * from './openrouter'; +export * from './vercel'; export function echoFetch( originalFetch: typeof fetch, diff --git a/packages/sdk/ts/src/providers/vercel.ts b/packages/sdk/ts/src/providers/vercel.ts new file mode 100644 index 000000000..1ab818f69 --- /dev/null +++ b/packages/sdk/ts/src/providers/vercel.ts @@ -0,0 +1,26 @@ +import { + createOpenAI as createOpenAICompatibleProvider, + OpenAIProvider, +} from '@ai-sdk/openai'; +import { ROUTER_BASE_URL } from 'config'; +import { EchoConfig } from '../types'; +import { validateAppId } from '../utils/validation'; +import { echoFetch } from './index'; + +export function createEchoVercelAIGateway( + { appId, baseRouterUrl = ROUTER_BASE_URL }: EchoConfig, + getTokenFn: (appId: string) => Promise, + onInsufficientFunds?: () => void +): OpenAIProvider { + validateAppId(appId, 'createEchoVercelAIGateway'); + + return createOpenAICompatibleProvider({ + baseURL: baseRouterUrl, + apiKey: 'placeholder_replaced_by_echoFetch', + fetch: echoFetch( + fetch, + async () => await getTokenFn(appId), + onInsufficientFunds + ), + }); +} diff --git a/packages/sdk/ts/src/resources/models.ts b/packages/sdk/ts/src/resources/models.ts index ee4064d98..bd12c7ac0 100644 --- a/packages/sdk/ts/src/resources/models.ts +++ b/packages/sdk/ts/src/resources/models.ts @@ -5,6 +5,7 @@ import { AnthropicModels, GeminiModels, OpenRouterModels, + VercelModels, OpenAIImageModels, SupportedModel, SupportedImageModel, @@ -26,6 +27,7 @@ export class ModelsResource extends BaseResource { ...AnthropicModels, ...GeminiModels, ...OpenRouterModels, + ...VercelModels, ]; return allModels; diff --git a/packages/sdk/ts/src/supported-models/chat/vercel.ts b/packages/sdk/ts/src/supported-models/chat/vercel.ts new file mode 100644 index 000000000..c4769c8b7 --- /dev/null +++ b/packages/sdk/ts/src/supported-models/chat/vercel.ts @@ -0,0 +1,1323 @@ +import { SupportedModel } from '../types'; + +// Union type of all valid Vercel AI Gateway language model IDs. +export type VercelModel = + | 'vercel-ai-gateway/alibaba/qwen-3-14b' + | 'vercel-ai-gateway/alibaba/qwen-3-235b' + | 'vercel-ai-gateway/alibaba/qwen-3-30b' + | 'vercel-ai-gateway/alibaba/qwen-3-32b' + | 'vercel-ai-gateway/alibaba/qwen-3.6-max-preview' + | 'vercel-ai-gateway/alibaba/qwen3-235b-a22b-thinking' + | 'vercel-ai-gateway/alibaba/qwen3-coder' + | 'vercel-ai-gateway/alibaba/qwen3-coder-30b-a3b' + | 'vercel-ai-gateway/alibaba/qwen3-coder-next' + | 'vercel-ai-gateway/alibaba/qwen3-coder-plus' + | 'vercel-ai-gateway/alibaba/qwen3-max' + | 'vercel-ai-gateway/alibaba/qwen3-max-preview' + | 'vercel-ai-gateway/alibaba/qwen3-max-thinking' + | 'vercel-ai-gateway/alibaba/qwen3-next-80b-a3b-instruct' + | 'vercel-ai-gateway/alibaba/qwen3-next-80b-a3b-thinking' + | 'vercel-ai-gateway/alibaba/qwen3-vl-235b-a22b-instruct' + | 'vercel-ai-gateway/alibaba/qwen3-vl-instruct' + | 'vercel-ai-gateway/alibaba/qwen3-vl-thinking' + | 'vercel-ai-gateway/alibaba/qwen3.5-flash' + | 'vercel-ai-gateway/alibaba/qwen3.5-plus' + | 'vercel-ai-gateway/alibaba/qwen3.6-27b' + | 'vercel-ai-gateway/alibaba/qwen3.6-plus' + | 'vercel-ai-gateway/amazon/nova-2-lite' + | 'vercel-ai-gateway/amazon/nova-lite' + | 'vercel-ai-gateway/amazon/nova-micro' + | 'vercel-ai-gateway/amazon/nova-pro' + | 'vercel-ai-gateway/anthropic/claude-3-haiku' + | 'vercel-ai-gateway/anthropic/claude-3.5-haiku' + | 'vercel-ai-gateway/anthropic/claude-haiku-4.5' + | 'vercel-ai-gateway/anthropic/claude-opus-4' + | 'vercel-ai-gateway/anthropic/claude-opus-4.1' + | 'vercel-ai-gateway/anthropic/claude-opus-4.5' + | 'vercel-ai-gateway/anthropic/claude-opus-4.6' + | 'vercel-ai-gateway/anthropic/claude-opus-4.7' + | 'vercel-ai-gateway/anthropic/claude-sonnet-4' + | 'vercel-ai-gateway/anthropic/claude-sonnet-4.5' + | 'vercel-ai-gateway/anthropic/claude-sonnet-4.6' + | 'vercel-ai-gateway/arcee-ai/trinity-large-preview' + | 'vercel-ai-gateway/arcee-ai/trinity-large-thinking' + | 'vercel-ai-gateway/arcee-ai/trinity-mini' + | 'vercel-ai-gateway/bytedance/seed-1.6' + | 'vercel-ai-gateway/bytedance/seed-1.8' + | 'vercel-ai-gateway/cohere/command-a' + | 'vercel-ai-gateway/deepseek/deepseek-r1' + | 'vercel-ai-gateway/deepseek/deepseek-v3' + | 'vercel-ai-gateway/deepseek/deepseek-v3.1' + | 'vercel-ai-gateway/deepseek/deepseek-v3.1-terminus' + | 'vercel-ai-gateway/deepseek/deepseek-v3.2' + | 'vercel-ai-gateway/deepseek/deepseek-v3.2-thinking' + | 'vercel-ai-gateway/deepseek/deepseek-v4-flash' + | 'vercel-ai-gateway/deepseek/deepseek-v4-pro' + | 'vercel-ai-gateway/google/gemini-2.0-flash' + | 'vercel-ai-gateway/google/gemini-2.0-flash-lite' + | 'vercel-ai-gateway/google/gemini-2.5-flash' + | 'vercel-ai-gateway/google/gemini-2.5-flash-image' + | 'vercel-ai-gateway/google/gemini-2.5-flash-lite' + | 'vercel-ai-gateway/google/gemini-2.5-pro' + | 'vercel-ai-gateway/google/gemini-3-flash' + | 'vercel-ai-gateway/google/gemini-3-pro-image' + | 'vercel-ai-gateway/google/gemini-3-pro-preview' + | 'vercel-ai-gateway/google/gemini-3.1-flash-image-preview' + | 'vercel-ai-gateway/google/gemini-3.1-flash-lite' + | 'vercel-ai-gateway/google/gemini-3.1-flash-lite-preview' + | 'vercel-ai-gateway/google/gemini-3.1-pro-preview' + | 'vercel-ai-gateway/google/gemma-4-26b-a4b-it' + | 'vercel-ai-gateway/google/gemma-4-31b-it' + | 'vercel-ai-gateway/inception/mercury-2' + | 'vercel-ai-gateway/inception/mercury-coder-small' + | 'vercel-ai-gateway/interfaze/interfaze-beta' + | 'vercel-ai-gateway/kwaipilot/kat-coder-pro-v1' + | 'vercel-ai-gateway/kwaipilot/kat-coder-pro-v2' + | 'vercel-ai-gateway/meta/llama-3.1-70b' + | 'vercel-ai-gateway/meta/llama-3.1-8b' + | 'vercel-ai-gateway/meta/llama-3.2-11b' + | 'vercel-ai-gateway/meta/llama-3.2-1b' + | 'vercel-ai-gateway/meta/llama-3.2-3b' + | 'vercel-ai-gateway/meta/llama-3.2-90b' + | 'vercel-ai-gateway/meta/llama-3.3-70b' + | 'vercel-ai-gateway/meta/llama-4-maverick' + | 'vercel-ai-gateway/meta/llama-4-scout' + | 'vercel-ai-gateway/minimax/minimax-m2' + | 'vercel-ai-gateway/minimax/minimax-m2.1' + | 'vercel-ai-gateway/minimax/minimax-m2.1-lightning' + | 'vercel-ai-gateway/minimax/minimax-m2.5' + | 'vercel-ai-gateway/minimax/minimax-m2.5-highspeed' + | 'vercel-ai-gateway/minimax/minimax-m2.7' + | 'vercel-ai-gateway/minimax/minimax-m2.7-highspeed' + | 'vercel-ai-gateway/mistral/codestral' + | 'vercel-ai-gateway/mistral/devstral-2' + | 'vercel-ai-gateway/mistral/devstral-small' + | 'vercel-ai-gateway/mistral/devstral-small-2' + | 'vercel-ai-gateway/mistral/magistral-medium' + | 'vercel-ai-gateway/mistral/magistral-small' + | 'vercel-ai-gateway/mistral/ministral-14b' + | 'vercel-ai-gateway/mistral/ministral-3b' + | 'vercel-ai-gateway/mistral/ministral-8b' + | 'vercel-ai-gateway/mistral/mistral-large-3' + | 'vercel-ai-gateway/mistral/mistral-medium' + | 'vercel-ai-gateway/mistral/mistral-nemo' + | 'vercel-ai-gateway/mistral/mistral-small' + | 'vercel-ai-gateway/mistral/pixtral-12b' + | 'vercel-ai-gateway/mistral/pixtral-large' + | 'vercel-ai-gateway/moonshotai/kimi-k2' + | 'vercel-ai-gateway/moonshotai/kimi-k2-thinking' + | 'vercel-ai-gateway/moonshotai/kimi-k2-thinking-turbo' + | 'vercel-ai-gateway/moonshotai/kimi-k2-turbo' + | 'vercel-ai-gateway/moonshotai/kimi-k2.5' + | 'vercel-ai-gateway/moonshotai/kimi-k2.6' + | 'vercel-ai-gateway/morph/morph-v3-fast' + | 'vercel-ai-gateway/morph/morph-v3-large' + | 'vercel-ai-gateway/nvidia/nemotron-3-nano-30b-a3b' + | 'vercel-ai-gateway/nvidia/nemotron-3-super-120b-a12b' + | 'vercel-ai-gateway/nvidia/nemotron-nano-12b-v2-vl' + | 'vercel-ai-gateway/nvidia/nemotron-nano-9b-v2' + | 'vercel-ai-gateway/openai/gpt-3.5-turbo' + | 'vercel-ai-gateway/openai/gpt-3.5-turbo-instruct' + | 'vercel-ai-gateway/openai/gpt-4-turbo' + | 'vercel-ai-gateway/openai/gpt-4.1' + | 'vercel-ai-gateway/openai/gpt-4.1-mini' + | 'vercel-ai-gateway/openai/gpt-4.1-nano' + | 'vercel-ai-gateway/openai/gpt-4o' + | 'vercel-ai-gateway/openai/gpt-4o-mini' + | 'vercel-ai-gateway/openai/gpt-4o-mini-search-preview' + | 'vercel-ai-gateway/openai/gpt-5' + | 'vercel-ai-gateway/openai/gpt-5-chat' + | 'vercel-ai-gateway/openai/gpt-5-codex' + | 'vercel-ai-gateway/openai/gpt-5-mini' + | 'vercel-ai-gateway/openai/gpt-5-nano' + | 'vercel-ai-gateway/openai/gpt-5-pro' + | 'vercel-ai-gateway/openai/gpt-5.1-codex' + | 'vercel-ai-gateway/openai/gpt-5.1-codex-max' + | 'vercel-ai-gateway/openai/gpt-5.1-codex-mini' + | 'vercel-ai-gateway/openai/gpt-5.1-instant' + | 'vercel-ai-gateway/openai/gpt-5.1-thinking' + | 'vercel-ai-gateway/openai/gpt-5.2' + | 'vercel-ai-gateway/openai/gpt-5.2-chat' + | 'vercel-ai-gateway/openai/gpt-5.2-codex' + | 'vercel-ai-gateway/openai/gpt-5.2-pro' + | 'vercel-ai-gateway/openai/gpt-5.3-chat' + | 'vercel-ai-gateway/openai/gpt-5.3-codex' + | 'vercel-ai-gateway/openai/gpt-5.4' + | 'vercel-ai-gateway/openai/gpt-5.4-mini' + | 'vercel-ai-gateway/openai/gpt-5.4-nano' + | 'vercel-ai-gateway/openai/gpt-5.4-pro' + | 'vercel-ai-gateway/openai/gpt-5.5' + | 'vercel-ai-gateway/openai/gpt-5.5-pro' + | 'vercel-ai-gateway/openai/gpt-oss-120b' + | 'vercel-ai-gateway/openai/gpt-oss-20b' + | 'vercel-ai-gateway/openai/gpt-oss-safeguard-20b' + | 'vercel-ai-gateway/openai/o1' + | 'vercel-ai-gateway/openai/o3' + | 'vercel-ai-gateway/openai/o3-deep-research' + | 'vercel-ai-gateway/openai/o3-mini' + | 'vercel-ai-gateway/openai/o3-pro' + | 'vercel-ai-gateway/openai/o4-mini' + | 'vercel-ai-gateway/xai/grok-3' + | 'vercel-ai-gateway/xai/grok-3-fast' + | 'vercel-ai-gateway/xai/grok-3-mini' + | 'vercel-ai-gateway/xai/grok-3-mini-fast' + | 'vercel-ai-gateway/xai/grok-4' + | 'vercel-ai-gateway/xai/grok-4-fast-non-reasoning' + | 'vercel-ai-gateway/xai/grok-4-fast-reasoning' + | 'vercel-ai-gateway/xai/grok-4.1-fast-non-reasoning' + | 'vercel-ai-gateway/xai/grok-4.1-fast-reasoning' + | 'vercel-ai-gateway/xai/grok-4.20-multi-agent' + | 'vercel-ai-gateway/xai/grok-4.20-multi-agent-beta' + | 'vercel-ai-gateway/xai/grok-4.20-non-reasoning' + | 'vercel-ai-gateway/xai/grok-4.20-non-reasoning-beta' + | 'vercel-ai-gateway/xai/grok-4.20-reasoning' + | 'vercel-ai-gateway/xai/grok-4.20-reasoning-beta' + | 'vercel-ai-gateway/xai/grok-4.3' + | 'vercel-ai-gateway/xai/grok-code-fast-1' + | 'vercel-ai-gateway/xiaomi/mimo-v2-flash' + | 'vercel-ai-gateway/xiaomi/mimo-v2-pro' + | 'vercel-ai-gateway/xiaomi/mimo-v2.5' + | 'vercel-ai-gateway/xiaomi/mimo-v2.5-pro' + | 'vercel-ai-gateway/zai/glm-4.5' + | 'vercel-ai-gateway/zai/glm-4.5-air' + | 'vercel-ai-gateway/zai/glm-4.5v' + | 'vercel-ai-gateway/zai/glm-4.6' + | 'vercel-ai-gateway/zai/glm-4.6v' + | 'vercel-ai-gateway/zai/glm-4.7' + | 'vercel-ai-gateway/zai/glm-4.7-flash' + | 'vercel-ai-gateway/zai/glm-4.7-flashx' + | 'vercel-ai-gateway/zai/glm-5' + | 'vercel-ai-gateway/zai/glm-5-turbo' + | 'vercel-ai-gateway/zai/glm-5.1' + | 'vercel-ai-gateway/zai/glm-5v-turbo'; + +export const VercelModels: SupportedModel[] = [ + { + model_id: 'vercel-ai-gateway/alibaba/qwen-3-14b', + input_cost_per_token: 1.2e-7, + output_cost_per_token: 2.4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen-3-235b', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen-3-30b', + input_cost_per_token: 8e-8, + output_cost_per_token: 2.9e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen-3-32b', + input_cost_per_token: 1.6e-7, + output_cost_per_token: 6.4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen-3.6-max-preview', + input_cost_per_token: 0.0000013, + output_cost_per_token: 0.0000078, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-235b-a22b-thinking', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.000004, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-coder', + input_cost_per_token: 0.0000015, + output_cost_per_token: 0.0000075, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-coder-30b-a3b', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 6e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-coder-next', + input_cost_per_token: 5e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-coder-plus', + input_cost_per_token: 0.000001, + output_cost_per_token: 0.000005, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-max', + input_cost_per_token: 0.0000012, + output_cost_per_token: 0.000006, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-max-preview', + input_cost_per_token: 0.0000012, + output_cost_per_token: 0.000006, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-max-thinking', + input_cost_per_token: 0.0000012, + output_cost_per_token: 0.000006, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-next-80b-a3b-instruct', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-next-80b-a3b-thinking', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-vl-235b-a22b-instruct', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.0000016, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-vl-instruct', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.0000016, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3-vl-thinking', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.000004, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3.5-flash', + input_cost_per_token: 1e-7, + output_cost_per_token: 4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3.5-plus', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.0000024, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3.6-27b', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.0000036, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/alibaba/qwen3.6-plus', + input_cost_per_token: 5e-7, + output_cost_per_token: 0.000003, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/amazon/nova-2-lite', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/amazon/nova-lite', + input_cost_per_token: 6e-8, + output_cost_per_token: 2.4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/amazon/nova-micro', + input_cost_per_token: 3.5e-8, + output_cost_per_token: 1.4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/amazon/nova-pro', + input_cost_per_token: 8e-7, + output_cost_per_token: 0.0000032, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-3-haiku', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.00000125, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-3.5-haiku', + input_cost_per_token: 8e-7, + output_cost_per_token: 0.000004, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-haiku-4.5', + input_cost_per_token: 0.000001, + output_cost_per_token: 0.000005, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-opus-4', + input_cost_per_token: 0.000015, + output_cost_per_token: 0.000075, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-opus-4.1', + input_cost_per_token: 0.000015, + output_cost_per_token: 0.000075, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-opus-4.5', + input_cost_per_token: 0.000005, + output_cost_per_token: 0.000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-opus-4.6', + input_cost_per_token: 0.000005, + output_cost_per_token: 0.000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-opus-4.7', + input_cost_per_token: 0.000005, + output_cost_per_token: 0.000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-sonnet-4', + input_cost_per_token: 0.000003, + output_cost_per_token: 0.000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-sonnet-4.5', + input_cost_per_token: 0.000003, + output_cost_per_token: 0.000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/anthropic/claude-sonnet-4.6', + input_cost_per_token: 0.000003, + output_cost_per_token: 0.000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/arcee-ai/trinity-large-preview', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.000001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/arcee-ai/trinity-large-thinking', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 9e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/arcee-ai/trinity-mini', + input_cost_per_token: 4.5e-8, + output_cost_per_token: 1.5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/bytedance/seed-1.6', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.000002, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/bytedance/seed-1.8', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.000002, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/cohere/command-a', + input_cost_per_token: 0.0000025, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/deepseek/deepseek-r1', + input_cost_per_token: 0.00000135, + output_cost_per_token: 0.0000054, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/deepseek/deepseek-v3', + input_cost_per_token: 7.7e-7, + output_cost_per_token: 7.7e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/deepseek/deepseek-v3.1', + input_cost_per_token: 5.6e-7, + output_cost_per_token: 0.00000168, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/deepseek/deepseek-v3.1-terminus', + input_cost_per_token: 2.7e-7, + output_cost_per_token: 0.000001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/deepseek/deepseek-v3.2', + input_cost_per_token: 2.8e-7, + output_cost_per_token: 4.2e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/deepseek/deepseek-v3.2-thinking', + input_cost_per_token: 6.2e-7, + output_cost_per_token: 0.00000185, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/deepseek/deepseek-v4-flash', + input_cost_per_token: 1.4e-7, + output_cost_per_token: 2.8e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/deepseek/deepseek-v4-pro', + input_cost_per_token: 4.35e-7, + output_cost_per_token: 8.7e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-2.0-flash', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 6e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-2.0-flash-lite', + input_cost_per_token: 7.5e-8, + output_cost_per_token: 3e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-2.5-flash', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-2.5-flash-image', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-2.5-flash-lite', + input_cost_per_token: 1e-7, + output_cost_per_token: 4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-2.5-pro', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-3-flash', + input_cost_per_token: 5e-7, + output_cost_per_token: 0.000003, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-3-pro-image', + input_cost_per_token: 0.000002, + output_cost_per_token: 0.000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-3-pro-preview', + input_cost_per_token: 0.000002, + output_cost_per_token: 0.000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-3.1-flash-image-preview', + input_cost_per_token: 5e-7, + output_cost_per_token: 0.000003, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-3.1-flash-lite', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.0000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-3.1-flash-lite-preview', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.0000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemini-3.1-pro-preview', + input_cost_per_token: 0.000002, + output_cost_per_token: 0.000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemma-4-26b-a4b-it', + input_cost_per_token: 1.3e-7, + output_cost_per_token: 4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/google/gemma-4-31b-it', + input_cost_per_token: 1.4e-7, + output_cost_per_token: 4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/inception/mercury-2', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 7.5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/inception/mercury-coder-small', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.000001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/interfaze/interfaze-beta', + input_cost_per_token: 0.0000015, + output_cost_per_token: 0.0000035, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/kwaipilot/kat-coder-pro-v1', + input_cost_per_token: 3e-8, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/kwaipilot/kat-coder-pro-v2', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-3.1-70b', + input_cost_per_token: 7.2e-7, + output_cost_per_token: 7.2e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-3.1-8b', + input_cost_per_token: 2.2e-7, + output_cost_per_token: 2.2e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-3.2-11b', + input_cost_per_token: 1.6e-7, + output_cost_per_token: 1.6e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-3.2-1b', + input_cost_per_token: 1e-7, + output_cost_per_token: 1e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-3.2-3b', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 1.5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-3.2-90b', + input_cost_per_token: 7.2e-7, + output_cost_per_token: 7.2e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-3.3-70b', + input_cost_per_token: 7.2e-7, + output_cost_per_token: 7.2e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-4-maverick', + input_cost_per_token: 2.4e-7, + output_cost_per_token: 9.7e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/meta/llama-4-scout', + input_cost_per_token: 1.7e-7, + output_cost_per_token: 6.6e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/minimax/minimax-m2', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/minimax/minimax-m2.1', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/minimax/minimax-m2.1-lightning', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000024, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/minimax/minimax-m2.5', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/minimax/minimax-m2.5-highspeed', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.0000024, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/minimax/minimax-m2.7', + input_cost_per_token: 3e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/minimax/minimax-m2.7-highspeed', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.0000024, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/codestral', + input_cost_per_token: 3e-7, + output_cost_per_token: 9e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/devstral-2', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.000002, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/devstral-small', + input_cost_per_token: 1e-7, + output_cost_per_token: 3e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/devstral-small-2', + input_cost_per_token: 1e-7, + output_cost_per_token: 3e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/magistral-medium', + input_cost_per_token: 0.000002, + output_cost_per_token: 0.000005, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/magistral-small', + input_cost_per_token: 5e-7, + output_cost_per_token: 0.0000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/ministral-14b', + input_cost_per_token: 2e-7, + output_cost_per_token: 2e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/ministral-3b', + input_cost_per_token: 1e-7, + output_cost_per_token: 1e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/ministral-8b', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 1.5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/mistral-large-3', + input_cost_per_token: 5e-7, + output_cost_per_token: 0.0000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/mistral-medium', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.000002, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/mistral-nemo', + input_cost_per_token: 2e-8, + output_cost_per_token: 4e-8, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/mistral-small', + input_cost_per_token: 1e-7, + output_cost_per_token: 3e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/pixtral-12b', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 1.5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/mistral/pixtral-large', + input_cost_per_token: 0.000002, + output_cost_per_token: 0.000006, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/moonshotai/kimi-k2', + input_cost_per_token: 5.7e-7, + output_cost_per_token: 0.0000023, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/moonshotai/kimi-k2-thinking', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/moonshotai/kimi-k2-thinking-turbo', + input_cost_per_token: 0.00000115, + output_cost_per_token: 0.000008, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/moonshotai/kimi-k2-turbo', + input_cost_per_token: 0.00000115, + output_cost_per_token: 0.000008, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/moonshotai/kimi-k2.5', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.000003, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/moonshotai/kimi-k2.6', + input_cost_per_token: 9.5e-7, + output_cost_per_token: 0.000004, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/morph/morph-v3-fast', + input_cost_per_token: 8e-7, + output_cost_per_token: 0.0000012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/morph/morph-v3-large', + input_cost_per_token: 9e-7, + output_cost_per_token: 0.0000019, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/nvidia/nemotron-3-nano-30b-a3b', + input_cost_per_token: 5e-8, + output_cost_per_token: 2.4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/nvidia/nemotron-3-super-120b-a12b', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 6.5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/nvidia/nemotron-nano-12b-v2-vl', + input_cost_per_token: 2e-7, + output_cost_per_token: 6e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/nvidia/nemotron-nano-9b-v2', + input_cost_per_token: 6e-8, + output_cost_per_token: 2.3e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-3.5-turbo', + input_cost_per_token: 5e-7, + output_cost_per_token: 0.0000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-3.5-turbo-instruct', + input_cost_per_token: 0.0000015, + output_cost_per_token: 0.000002, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-4-turbo', + input_cost_per_token: 0.00001, + output_cost_per_token: 0.00003, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-4.1', + input_cost_per_token: 0.000002, + output_cost_per_token: 0.000008, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-4.1-mini', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.0000016, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-4.1-nano', + input_cost_per_token: 1e-7, + output_cost_per_token: 4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-4o', + input_cost_per_token: 0.0000025, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-4o-mini', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 6e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-4o-mini-search-preview', + input_cost_per_token: 1.5e-7, + output_cost_per_token: 6e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5-chat', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5-codex', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5-mini', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.000002, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5-nano', + input_cost_per_token: 5e-8, + output_cost_per_token: 4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5-pro', + input_cost_per_token: 0.000015, + output_cost_per_token: 0.00012, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.1-codex', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.1-codex-max', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.1-codex-mini', + input_cost_per_token: 2.5e-7, + output_cost_per_token: 0.000002, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.1-instant', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.1-thinking', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.00001, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.2', + input_cost_per_token: 0.00000175, + output_cost_per_token: 0.000014, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.2-chat', + input_cost_per_token: 0.00000175, + output_cost_per_token: 0.000014, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.2-codex', + input_cost_per_token: 0.00000175, + output_cost_per_token: 0.000014, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.2-pro', + input_cost_per_token: 0.000021, + output_cost_per_token: 0.000168, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.3-chat', + input_cost_per_token: 0.00000175, + output_cost_per_token: 0.000014, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.3-codex', + input_cost_per_token: 0.00000175, + output_cost_per_token: 0.000014, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.4', + input_cost_per_token: 0.0000025, + output_cost_per_token: 0.000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.4-mini', + input_cost_per_token: 7.5e-7, + output_cost_per_token: 0.0000045, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.4-nano', + input_cost_per_token: 2e-7, + output_cost_per_token: 0.00000125, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.4-pro', + input_cost_per_token: 0.00003, + output_cost_per_token: 0.00018, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.5', + input_cost_per_token: 0.000005, + output_cost_per_token: 0.00003, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-5.5-pro', + input_cost_per_token: 0.00003, + output_cost_per_token: 0.00018, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-oss-120b', + input_cost_per_token: 3.5e-7, + output_cost_per_token: 7.5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-oss-20b', + input_cost_per_token: 5e-8, + output_cost_per_token: 2e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/gpt-oss-safeguard-20b', + input_cost_per_token: 7.5e-8, + output_cost_per_token: 3e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/o1', + input_cost_per_token: 0.000015, + output_cost_per_token: 0.00006, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/o3', + input_cost_per_token: 0.000002, + output_cost_per_token: 0.000008, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/o3-deep-research', + input_cost_per_token: 0.00001, + output_cost_per_token: 0.00004, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/o3-mini', + input_cost_per_token: 0.0000011, + output_cost_per_token: 0.0000044, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/o3-pro', + input_cost_per_token: 0.00002, + output_cost_per_token: 0.00008, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/openai/o4-mini', + input_cost_per_token: 0.0000011, + output_cost_per_token: 0.0000044, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-3', + input_cost_per_token: 0.000003, + output_cost_per_token: 0.000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-3-fast', + input_cost_per_token: 0.000005, + output_cost_per_token: 0.000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-3-mini', + input_cost_per_token: 3e-7, + output_cost_per_token: 5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-3-mini-fast', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.000004, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4', + input_cost_per_token: 0.000003, + output_cost_per_token: 0.000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4-fast-non-reasoning', + input_cost_per_token: 2e-7, + output_cost_per_token: 5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4-fast-reasoning', + input_cost_per_token: 2e-7, + output_cost_per_token: 5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.1-fast-non-reasoning', + input_cost_per_token: 2e-7, + output_cost_per_token: 5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.1-fast-reasoning', + input_cost_per_token: 2e-7, + output_cost_per_token: 5e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.20-multi-agent', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.20-multi-agent-beta', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.20-non-reasoning', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.20-non-reasoning-beta', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.20-reasoning', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.20-reasoning-beta', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-4.3', + input_cost_per_token: 0.00000125, + output_cost_per_token: 0.0000025, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xai/grok-code-fast-1', + input_cost_per_token: 2e-7, + output_cost_per_token: 0.0000015, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xiaomi/mimo-v2-flash', + input_cost_per_token: 1e-7, + output_cost_per_token: 3e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xiaomi/mimo-v2-pro', + input_cost_per_token: 0.000001, + output_cost_per_token: 0.000003, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xiaomi/mimo-v2.5', + input_cost_per_token: 4e-7, + output_cost_per_token: 0.000002, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/xiaomi/mimo-v2.5-pro', + input_cost_per_token: 0.000001, + output_cost_per_token: 0.000003, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-4.5', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.0000022, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-4.5-air', + input_cost_per_token: 2e-7, + output_cost_per_token: 0.0000011, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-4.5v', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.0000018, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-4.6', + input_cost_per_token: 6e-7, + output_cost_per_token: 0.0000022, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-4.6v', + input_cost_per_token: 3e-7, + output_cost_per_token: 9e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-4.7', + input_cost_per_token: 0.00000225, + output_cost_per_token: 0.00000275, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-4.7-flash', + input_cost_per_token: 7e-8, + output_cost_per_token: 4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-4.7-flashx', + input_cost_per_token: 6e-8, + output_cost_per_token: 4e-7, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-5', + input_cost_per_token: 0.000001, + output_cost_per_token: 0.0000032, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-5-turbo', + input_cost_per_token: 0.0000012, + output_cost_per_token: 0.000004, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-5.1', + input_cost_per_token: 0.0000014, + output_cost_per_token: 0.0000044, + provider: 'Vercel', + }, + { + model_id: 'vercel-ai-gateway/zai/glm-5v-turbo', + input_cost_per_token: 0.0000012, + output_cost_per_token: 0.000004, + provider: 'Vercel', + }, +]; diff --git a/packages/sdk/ts/src/supported-models/index.ts b/packages/sdk/ts/src/supported-models/index.ts index 3f641501d..2a6f2f40a 100644 --- a/packages/sdk/ts/src/supported-models/index.ts +++ b/packages/sdk/ts/src/supported-models/index.ts @@ -4,6 +4,7 @@ export * from './chat/anthropic'; export * from './chat/gemini'; export * from './chat/openai'; export * from './chat/openrouter'; +export * from './chat/vercel'; export * from './image/openai'; export * from './responses/openai'; export * from './video/gemini';