llm-info
Version:
Information on LLM models, context window token limit, output token limit, pricing and more
872 lines (866 loc) • 29.8 kB
JavaScript
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// src/model.ts
var ModelEnum = /* @__PURE__ */ ((ModelEnum2) => {
ModelEnum2["gpt-4"] = "gpt-4";
ModelEnum2["gpt-4-turbo"] = "gpt-4-turbo";
ModelEnum2["gpt-4o"] = "gpt-4o";
ModelEnum2["gpt-4o-64k-output-alpha"] = "gpt-4o-64k-output-alpha";
ModelEnum2["gpt-4o-mini"] = "gpt-4o-mini";
ModelEnum2["gpt-4o-2024-08-06"] = "gpt-4o-2024-08-06";
ModelEnum2["gpt-4.1"] = "gpt-4.1";
ModelEnum2["gpt-4.1-mini"] = "gpt-4.1-mini";
ModelEnum2["gpt-4.1-nano"] = "gpt-4.1-nano";
ModelEnum2["gpt-5"] = "gpt-5";
ModelEnum2["gpt-5-mini"] = "gpt-5-mini";
ModelEnum2["gpt-5-nano"] = "gpt-5-nano";
ModelEnum2["o1-preview"] = "o1-preview";
ModelEnum2["o1-mini"] = "o1-mini";
ModelEnum2["o1"] = "o1";
ModelEnum2["o3"] = "o3";
ModelEnum2["o3-mini"] = "o3-mini";
ModelEnum2["o4-mini"] = "o4-mini";
ModelEnum2["claude-3-5-sonnet-20240620"] = "claude-3-5-sonnet-20240620";
ModelEnum2["claude-3-5-sonnet-20241022"] = "claude-3-5-sonnet-20241022";
ModelEnum2["claude-3-5-haiku-20241022"] = "claude-3-5-haiku-20241022";
ModelEnum2["claude-3-7-sonnet-20250219"] = "claude-3-7-sonnet-20250219";
ModelEnum2["claude-opus-4-20250514"] = "claude-opus-4-20250514";
ModelEnum2["claude-opus-4-1-20250805"] = "claude-opus-4-1-20250805";
ModelEnum2["claude-sonnet-4-20250514"] = "claude-sonnet-4-20250514";
ModelEnum2["deepseek-chat"] = "deepseek-chat";
ModelEnum2["deepseek-reasoner"] = "deepseek-reasoner";
ModelEnum2["gemini-2.5-pro-exp-03-25"] = "gemini-2.5-pro-exp-03-25";
ModelEnum2["gemini-2.5-pro-preview-03-25"] = "gemini-2.5-pro-preview-03-25";
ModelEnum2["gemini-2.5-pro-preview-05-06"] = "gemini-2.5-pro-preview-05-06";
ModelEnum2["gemini-2.5-pro-preview-06-05"] = "gemini-2.5-pro-preview-06-05";
ModelEnum2["gemini-2.5-pro"] = "gemini-2.5-pro";
ModelEnum2["gemini-2.5-flash-preview-04-17"] = "gemini-2.5-flash-preview-04-17";
ModelEnum2["gemini-2.5-flash-preview-05-20"] = "gemini-2.5-flash-preview-05-20";
ModelEnum2["gemini-2.5-flash"] = "gemini-2.5-flash";
ModelEnum2["grok-4"] = "grok-4";
ModelEnum2["grok-code-fast-1"] = "grok-code-fast-1";
return ModelEnum2;
})(ModelEnum || {});
var NonModelEnum = /* @__PURE__ */ ((NonModelEnum2) => {
NonModelEnum2["chatgpt"] = "chatgpt";
return NonModelEnum2;
})(NonModelEnum || {});
var AllModels = Object.values(ModelEnum);
var AllModelLikes = [...AllModels, ...Object.values(NonModelEnum)];
// src/provider.ts
var AI_PROVIDERS = {
OPENAI: "openai",
ANTHROPIC: "anthropic",
AZURE_OPENAI: "azure-openai",
DEEPSEEK: "deepseek",
OPENROUTER: "openrouter",
GOOGLE: "google",
GOOGLE_VERTEX_AI: "google-vertex-ai",
FIREWORKS: "fireworks",
XAI: "xai"
};
var AI_PROVIDER_CONFIG = {
[AI_PROVIDERS.OPENAI]: {
name: "OpenAI",
firstParty: true,
thirdParty: false,
nativeSDK: true,
apiKeysPage: "https://platform.openai.com/api-keys"
},
[AI_PROVIDERS.ANTHROPIC]: {
name: "Anthropic",
firstParty: true,
thirdParty: false,
nativeSDK: true,
apiKeysPage: "https://console.anthropic.com/settings/keys"
},
[AI_PROVIDERS.AZURE_OPENAI]: {
name: "Azure OpenAI",
firstParty: false,
baseURL: "https://<your-resource-name>.openai.azure.com/",
website: "https://azure.microsoft.com/en-us/products/ai-services/openai-service",
thirdParty: true,
nativeSDK: false
},
[AI_PROVIDERS.DEEPSEEK]: {
name: "DeepSeek",
firstParty: true,
baseURL: "https://api.deepseek.com",
thirdParty: false,
nativeSDK: false,
apiKeysPage: "https://platform.deepseek.com/api_keys"
},
[AI_PROVIDERS.OPENROUTER]: {
name: "OpenRouter",
firstParty: false,
baseURL: "https://openrouter.ai/api/v1",
website: "https://openrouter.ai",
thirdParty: true,
nativeSDK: false,
apiKeysPage: "https://openrouter.ai/settings/keys"
},
[AI_PROVIDERS.GOOGLE]: {
name: "Google",
firstParty: true,
baseURL: "https://generativelanguage.googleapis.com/v1beta/openai/",
thirdParty: false,
nativeSDK: true,
apiKeysPage: "https://aistudio.google.com/app/apikey"
},
[AI_PROVIDERS.FIREWORKS]: {
name: "Fireworks",
firstParty: false,
baseURL: "https://api.fireworks.ai/inference/v1",
website: "https://fireworks.ai",
thirdParty: true,
nativeSDK: false
},
[AI_PROVIDERS.GOOGLE_VERTEX_AI]: {
name: "Google Vertex AI",
firstParty: true,
thirdParty: false,
nativeSDK: true
},
[AI_PROVIDERS.XAI]: {
name: "xAI",
firstParty: true,
baseURL: "https://api.x.ai/v1",
thirdParty: false,
nativeSDK: false,
apiKeysPage: "https://console.x.ai/"
}
};
var AI_PROVIDER_NAME_MAP = {
[AI_PROVIDERS.OPENAI]: AI_PROVIDER_CONFIG[AI_PROVIDERS.OPENAI].name,
[AI_PROVIDERS.ANTHROPIC]: AI_PROVIDER_CONFIG[AI_PROVIDERS.ANTHROPIC].name,
[AI_PROVIDERS.AZURE_OPENAI]: AI_PROVIDER_CONFIG[AI_PROVIDERS.AZURE_OPENAI].name,
[AI_PROVIDERS.DEEPSEEK]: AI_PROVIDER_CONFIG[AI_PROVIDERS.DEEPSEEK].name,
[AI_PROVIDERS.OPENROUTER]: AI_PROVIDER_CONFIG[AI_PROVIDERS.OPENROUTER].name,
[AI_PROVIDERS.GOOGLE]: AI_PROVIDER_CONFIG[AI_PROVIDERS.GOOGLE].name,
[AI_PROVIDERS.FIREWORKS]: AI_PROVIDER_CONFIG[AI_PROVIDERS.FIREWORKS].name,
[AI_PROVIDERS.GOOGLE_VERTEX_AI]: AI_PROVIDER_CONFIG[AI_PROVIDERS.GOOGLE_VERTEX_AI].name,
[AI_PROVIDERS.XAI]: AI_PROVIDER_CONFIG[AI_PROVIDERS.XAI].name
};
// src/ModelInfoMap.ts
function createModelInfo(id, info) {
return __spreadProps(__spreadValues({}, info), {
id
});
}
var ModelInfoMap = {
["gpt-4" /* gpt-4 */]: {
name: "GPT-4",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 4096,
pricePerMillionInputTokens: 30,
pricePerMillionOutputTokens: 60,
tokenizerId: "Xenova/gpt-4",
legacy: true,
legacyReason: "Superceded by GPT-4o"
},
["gpt-4-turbo" /* gpt-4-turbo */]: {
name: "GPT-4 Turbo",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 4096,
pricePerMillionInputTokens: 10,
pricePerMillionOutputTokens: 30,
tokenizerId: "Xenova/gpt-4",
legacy: true,
legacyReason: "Superceded by GPT-4o"
},
["gpt-4o" /* gpt-4o */]: {
name: "GPT-4o",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 4096,
pricePerMillionInputTokens: 5,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/gpt-4o",
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by GPT-5"
},
["gpt-4o-mini" /* gpt-4o-mini */]: {
name: "GPT-4o mini",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 4096,
pricePerMillionInputTokens: 0.15,
pricePerMillionOutputTokens: 0.6,
tokenizerId: "Xenova/gpt-4o",
small: true,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by GPT-5 mini"
},
["gpt-4o-64k-output-alpha" /* gpt-4o-64k-output-alpha */]: {
name: "GPT-4o Long Output",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 64e3,
pricePerMillionInputTokens: 6,
pricePerMillionOutputTokens: 18,
tokenizerId: "Xenova/gpt-4o",
alpha: true,
legacy: true,
notes: "OpenAI is offering an experimental version of GPT-4o with a maximum of 64K output tokens per request.",
notesUrl: "https://openai.com/gpt-4o-long-output/",
supportsImageInput: true,
legacyReason: "Superceded by GPT-4o"
},
["gpt-4o-2024-08-06" /* gpt-4o-2024-08-06 */]: {
name: "GPT-4o 08-06",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 16384,
pricePerMillionInputTokens: 2.5,
pricePerMillionOutputTokens: 10,
tokenizerId: "Xenova/gpt-4o",
notes: "This model is a version of GPT-4o that was released on August 6, 2024. It has a maximum of 16K output tokens per request.",
legacy: true,
supportsImageInput: true,
legacyReason: "Superceded by GPT-4o"
},
["gpt-4.1" /* gpt-4.1 */]: {
name: "GPT-4.1",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 1047576,
outputTokenLimit: 32768,
pricePerMillionInputTokens: 2,
pricePerMillionOutputTokens: 8,
tokenizerId: "Xenova/gpt-4o",
notes: "GPT-4.1 is a flagship model for complex tasks. It is well suited for problem solving across domains. Knowledge cutoff: Jun 01, 2024.",
recommendedForCoding: true,
recommendedForWriting: true,
supportsImageInput: true,
legacy: false,
// legacyReason: 'Superceded by GPT-5',
openRouterModelId: "openai/gpt-4.1"
},
["gpt-4.1-mini" /* gpt-4.1-mini */]: {
name: "GPT-4.1 mini",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 1047576,
outputTokenLimit: 32768,
pricePerMillionInputTokens: 0.4,
pricePerMillionOutputTokens: 1.6,
tokenizerId: "Xenova/gpt-4o",
notes: "GPT-4.1 mini provides a balance between intelligence, speed, and cost that makes it an attractive model for many use cases.",
small: true,
legacy: true,
legacyReason: "Superceded by GPT-5 mini"
},
["gpt-4.1-nano" /* gpt-4.1-nano */]: {
name: "GPT-4.1 nano",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 1047576,
outputTokenLimit: 32768,
pricePerMillionInputTokens: 0.1,
pricePerMillionOutputTokens: 0.4,
tokenizerId: "Xenova/gpt-4o",
notes: "GPT-4.1 nano is the fastest, most cost-effective GPT-4.1 model.",
small: true,
legacy: true,
legacyReason: "Superceded by GPT-5 nano"
},
["gpt-5" /* gpt-5 */]: {
name: "GPT-5",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 4e5,
outputTokenLimit: 128e3,
pricePerMillionInputTokens: 1.25,
pricePerMillionOutputTokens: 10,
tokenizerId: "Xenova/gpt-4o",
supportsImageInput: true,
recommendedForCoding: true,
recommendedForWriting: true,
reasoning: true,
legacy: false,
openRouterModelId: "openai/gpt-5"
},
["gpt-5-mini" /* gpt-5-mini */]: {
name: "GPT-5 mini",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 4e5,
outputTokenLimit: 128e3,
pricePerMillionInputTokens: 0.25,
pricePerMillionOutputTokens: 2,
tokenizerId: "Xenova/gpt-4o",
supportsImageInput: true,
reasoning: true,
small: true,
legacy: false,
openRouterModelId: "openai/gpt-5-mini"
},
["gpt-5-nano" /* gpt-5-nano */]: {
name: "GPT-5 nano",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 4e5,
outputTokenLimit: 128e3,
pricePerMillionInputTokens: 0.05,
pricePerMillionOutputTokens: 0.4,
tokenizerId: "Xenova/gpt-4o",
supportsImageInput: true,
reasoning: true,
small: true,
legacy: false,
openRouterModelId: "openai/gpt-5-nano"
},
["o1-preview" /* o1-preview */]: {
name: "o1-preview",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 32768,
pricePerMillionInputTokens: 15,
pricePerMillionOutputTokens: 60,
tokenizerId: "Xenova/gpt-4o",
notes: "An early preview of our o1 model, designed to reason about hard problems using broad general knowledge about the world.",
alpha: true,
legacy: true,
legacyReason: "Superceded by o1"
},
["o1-mini" /* o1-mini */]: {
name: "o1-mini",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 1.1,
pricePerMillionOutputTokens: 4.4,
tokenizerId: "Xenova/gpt-4o",
notes: "A faster and cheaper version of o1, particularly adept at coding, math, and science tasks where extensive general knowledge isn't required.",
small: true,
reasoning: true,
legacy: true,
legacyReason: "Superceded by o3-mini"
},
["o1" /* o1 */]: {
name: "o1",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 1e5,
pricePerMillionInputTokens: 15,
pricePerMillionOutputTokens: 60,
tokenizerId: "Xenova/gpt-4o",
notes: "Reasoning model designed to solve hard problems across domains.",
legacy: true,
reasoning: true,
supportsImageInput: true,
legacyReason: "Superceded by o3"
},
["o3" /* o3 */]: {
name: "o3",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 1e5,
pricePerMillionInputTokens: 10,
pricePerMillionOutputTokens: 40,
tokenizerId: "Xenova/gpt-4o",
notes: "o3 is a well-rounded and powerful model across domains.",
reasoning: true,
supportsImageInput: true,
legacy: false
},
["o3-mini" /* o3-mini */]: {
name: "o3-mini",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 1e5,
pricePerMillionInputTokens: 1.1,
pricePerMillionOutputTokens: 4.4,
tokenizerId: "Xenova/gpt-4o",
reasoning: true,
small: true,
legacy: true,
legacyReason: "Superceded by o4-mini"
},
["o4-mini" /* o4-mini */]: {
name: "o4-mini",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 1e5,
pricePerMillionInputTokens: 1.1,
pricePerMillionOutputTokens: 4.4,
tokenizerId: "Xenova/gpt-4o",
notes: "o4-mini is OpenAI's latest small o-series model. It's optimized for fast, effective reasoning with exceptionally efficient performance in coding and visual tasks.",
reasoning: true,
small: true,
legacy: false,
openRouterModelId: "openai/o4-mini"
},
["claude-3-5-sonnet-20240620" /* claude-3-5-sonnet-20240620 */]: {
name: "Claude 3.5 Sonnet (Old)",
provider: AI_PROVIDERS.ANTHROPIC,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 8192,
pricePerMillionInputTokens: 3,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/claude-tokenizer",
notes: "8192 output tokens is in beta.",
notesUrl: "https://docs.anthropic.com/en/docs/about-claude/models",
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by new Claude 3.5 Sonnet"
},
["claude-3-5-sonnet-20241022" /* claude-3-5-sonnet-20241022 */]: {
name: "Claude 3.5 Sonnet",
provider: AI_PROVIDERS.ANTHROPIC,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 8192,
pricePerMillionInputTokens: 3,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/claude-tokenizer",
notes: "New version of Claude 3.5 Sonnet released on October 22, 2024.",
notesUrl: "https://www.anthropic.com/news/3-5-models-and-computer-use",
recommendedForCoding: false,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Claude 3.7 Sonnet and Claude Sonnet 4"
},
["claude-3-5-haiku-20241022" /* claude-3-5-haiku-20241022 */]: {
name: "Claude 3.5 Haiku",
provider: AI_PROVIDERS.ANTHROPIC,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 8192,
pricePerMillionInputTokens: 1,
pricePerMillionOutputTokens: 5,
tokenizerId: "Xenova/claude-tokenizer",
supportsImageInput: true,
legacy: false
},
["claude-3-7-sonnet-20250219" /* claude-3-7-sonnet-20250219 */]: {
name: "Claude 3.7 Sonnet",
provider: AI_PROVIDERS.ANTHROPIC,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 64e3,
pricePerMillionInputTokens: 3,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/claude-tokenizer",
recommendedForCoding: false,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Claude Sonnet 4"
},
["claude-opus-4-20250514" /* claude-opus-4-20250514 */]: {
name: "Claude Opus 4",
provider: AI_PROVIDERS.ANTHROPIC,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 32e3,
pricePerMillionInputTokens: 15,
pricePerMillionOutputTokens: 75,
tokenizerId: "Xenova/claude-tokenizer",
notes: "Most intelligent model for complex tasks",
notesUrl: "https://www.anthropic.com/claude/opus",
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Claude Opus 4.1",
openRouterModelId: "anthropic/claude-opus-4"
},
["claude-opus-4-1-20250805" /* claude-opus-4-1-20250805 */]: {
name: "Claude Opus 4.1",
provider: AI_PROVIDERS.ANTHROPIC,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 32e3,
pricePerMillionInputTokens: 15,
pricePerMillionOutputTokens: 75,
tokenizerId: "Xenova/claude-tokenizer",
notes: "Most intelligent model for complex tasks",
notesUrl: "https://www.anthropic.com/claude/opus",
supportsImageInput: true,
legacy: false,
openRouterModelId: "anthropic/claude-opus-4.1"
},
["claude-sonnet-4-20250514" /* claude-sonnet-4-20250514 */]: {
name: "Claude Sonnet 4",
provider: AI_PROVIDERS.ANTHROPIC,
contextWindowTokenLimit: 2e5,
outputTokenLimit: 64e3,
pricePerMillionInputTokens: 3,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/claude-tokenizer",
notes: "Optimal balance of intelligence, cost, and speed",
notesUrl: "https://www.anthropic.com/claude/sonnet",
supportsImageInput: true,
recommendedForCoding: true,
recommendedForWriting: true,
legacy: false,
openRouterModelId: "anthropic/claude-sonnet-4"
},
["chatgpt" /* chatgpt */]: {
name: "ChatGPT",
provider: AI_PROVIDERS.OPENAI,
contextWindowTokenLimit: 4096,
outputTokenLimit: 4096,
pricePerMillionInputTokens: null,
pricePerMillionOutputTokens: null,
tokenizerId: null,
legacy: false
},
["deepseek-chat" /* deepseek-chat */]: {
name: "DeepSeek-V3.1",
provider: AI_PROVIDERS.DEEPSEEK,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 8e3,
pricePerMillionInputTokens: 0.56,
pricePerMillionOutputTokens: 1.68,
tokenizerId: "Xenova/gpt-4o",
recommendedForCoding: true,
supportsImageInput: false,
legacy: false,
releaseDate: "2025-08-21"
},
["deepseek-reasoner" /* deepseek-reasoner */]: {
name: "DeepSeek-V3.1 (Thinking)",
provider: AI_PROVIDERS.DEEPSEEK,
contextWindowTokenLimit: 128e3,
outputTokenLimit: 8e3,
pricePerMillionInputTokens: 0.56,
pricePerMillionOutputTokens: 1.68,
tokenizerId: "Xenova/gpt-4o",
reasoning: true,
supportsImageInput: false,
legacy: false,
releaseDate: "2025-08-21"
},
["gemini-2.5-pro-exp-03-25" /* gemini-2.5-pro-exp-03-25 */]: {
name: "Gemini 2.5 Pro Experimental",
provider: AI_PROVIDERS.GOOGLE,
contextWindowTokenLimit: 1048576,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 0,
pricePerMillionOutputTokens: 0,
tokenizerId: "Xenova/gpt-4o",
notes: "This is an experimental model that is currently free to test.",
reasoning: true,
recommendedForCoding: false,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Gemini 2.5 Pro Preview"
},
["gemini-2.5-pro-preview-03-25" /* gemini-2.5-pro-preview-03-25 */]: {
name: "Gemini 2.5 Pro Preview (03-25)",
provider: AI_PROVIDERS.GOOGLE,
contextWindowTokenLimit: 1048576,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 2.5,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/gpt-4o",
notes: "The pricing is for prompt with context length > 200k tokens",
notesUrl: "https://ai.google.dev/gemini-api/docs/pricing",
reasoning: true,
recommendedForCoding: false,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Gemini 2.5 Pro Preview (05-06)"
},
["gemini-2.5-pro-preview-05-06" /* gemini-2.5-pro-preview-05-06 */]: {
name: "Gemini 2.5 Pro Preview (05-06)",
provider: AI_PROVIDERS.GOOGLE,
contextWindowTokenLimit: 1048576,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 2.5,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/gpt-4o",
notes: "The pricing is for prompt with context length > 200k tokens",
notesUrl: "https://ai.google.dev/gemini-api/docs/pricing",
reasoning: true,
recommendedForCoding: true,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Gemini 2.5 Pro Preview (06-05)",
openRouterModelId: "google/gemini-2.5-pro-preview"
},
["gemini-2.5-pro-preview-06-05" /* gemini-2.5-pro-preview-06-05 */]: {
name: "Gemini 2.5 Pro Preview (06-05)",
provider: AI_PROVIDERS.GOOGLE,
contextWindowTokenLimit: 1048576,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 2.5,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/gpt-4o",
notes: "The pricing is for prompt with context length > 200k tokens",
notesUrl: "https://ai.google.dev/gemini-api/docs/pricing",
reasoning: true,
recommendedForCoding: true,
recommendedForWriting: false,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Gemini 2.5 Pro",
openRouterModelId: "google/gemini-2.5-pro-preview"
},
["gemini-2.5-pro" /* gemini-2.5-pro */]: {
name: "Gemini 2.5 Pro",
provider: AI_PROVIDERS.GOOGLE,
contextWindowTokenLimit: 1048576,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 2.5,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/gpt-4o",
notes: "The pricing is for prompt with context length > 200k tokens",
notesUrl: "https://ai.google.dev/gemini-api/docs/pricing",
reasoning: true,
recommendedForCoding: true,
recommendedForWriting: true,
supportsImageInput: true,
legacy: false,
openRouterModelId: "google/gemini-2.5-pro"
},
["gemini-2.5-flash-preview-04-17" /* gemini-2.5-flash-preview-04-17 */]: {
name: "Gemini 2.5 Flash Preview",
provider: AI_PROVIDERS.GOOGLE,
contextWindowTokenLimit: 1048576,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 0,
pricePerMillionOutputTokens: 0,
tokenizerId: "Xenova/gpt-4o",
notes: "Google's best model in terms of price-performance, offering well-rounded capabilities",
reasoning: true,
small: true,
recommendedForCoding: false,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Gemini 2.5 Flash Preview (05-20)"
},
["gemini-2.5-flash-preview-05-20" /* gemini-2.5-flash-preview-05-20 */]: {
name: "Gemini 2.5 Flash Preview (05-20)",
provider: AI_PROVIDERS.GOOGLE,
contextWindowTokenLimit: 1048576,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 0,
pricePerMillionOutputTokens: 0,
tokenizerId: "Xenova/gpt-4o",
notes: "Google's best model in terms of price-performance, offering well-rounded capabilities",
reasoning: true,
small: true,
recommendedForCoding: false,
supportsImageInput: true,
legacy: true,
legacyReason: "Superceded by Gemini 2.5 Flash",
openRouterModelId: "google/gemini-2.5-flash-preview-05-20"
},
["gemini-2.5-flash" /* gemini-2.5-flash */]: {
name: "Gemini 2.5 Flash",
provider: AI_PROVIDERS.GOOGLE,
contextWindowTokenLimit: 1048576,
outputTokenLimit: 65536,
pricePerMillionInputTokens: 0.3,
pricePerMillionOutputTokens: 2.5,
tokenizerId: "Xenova/gpt-4o",
notes: "Google's best model in terms of price-performance, offering well-rounded capabilities",
reasoning: true,
small: true,
recommendedForCoding: false,
supportsImageInput: true,
legacy: false,
openRouterModelId: "google/gemini-2.5-flash"
},
["grok-4" /* grok-4 */]: {
name: "Grok 4",
provider: AI_PROVIDERS.XAI,
contextWindowTokenLimit: 256e3,
outputTokenLimit: 32768,
// no info
pricePerMillionInputTokens: 3,
pricePerMillionOutputTokens: 15,
tokenizerId: "Xenova/gpt-4o",
reasoning: true,
supportsImageInput: true,
recommendedForCoding: false,
recommendedForWriting: false,
legacy: false
},
["grok-code-fast-1" /* grok-code-fast-1 */]: {
name: "Grok Code Fast 1",
provider: AI_PROVIDERS.XAI,
contextWindowTokenLimit: 256e3,
outputTokenLimit: 32768,
// no info
pricePerMillionInputTokens: 0.2,
pricePerMillionOutputTokens: 1.5,
tokenizerId: "Xenova/gpt-4o",
reasoning: true,
legacy: false
}
};
function getModelInfoWithId(id) {
return createModelInfo(id, ModelInfoMap[id]);
}
function getAllModelsWithIds() {
return Object.entries(ModelInfoMap).map(
([id, info]) => createModelInfo(id, info)
);
}
// src/getModelsByProvider.ts
function convertOpenRouterModelToModelInfo(model) {
const providerId = model.id.split("/")[0];
const promptPrice = parseFloat(model.pricing.prompt) * 1e6;
const completionPrice = parseFloat(model.pricing.completion) * 1e6;
let tokenizerId = "Xenova/gpt-4";
if (model.name.toLowerCase().includes("claude")) {
tokenizerId = "Xenova/claude-tokenizer";
}
return {
name: model.name,
provider: providerId,
id: model.id,
contextWindowTokenLimit: model.context_length,
outputTokenLimit: null,
pricePerMillionInputTokens: promptPrice,
pricePerMillionOutputTokens: completionPrice,
tokenizerId,
notes: model.description,
legacy: false
};
}
function getOpenRouterModels() {
return __async(this, null, function* () {
const response = yield fetch("https://openrouter.ai/api/v1/models");
if (!response.ok) {
throw new Error(
`Failed to fetch OpenRouter models: ${response.statusText}`
);
}
return response.json();
});
}
function getModelsByProvider(provider) {
return __async(this, null, function* () {
if (provider === AI_PROVIDERS.OPENROUTER) {
try {
const response = yield fetch("https://openrouter.ai/api/v1/models");
if (!response.ok) {
throw new Error(
`Failed to fetch OpenRouter models: ${response.statusText}`
);
}
const data = yield response.json();
return data.data.map(convertOpenRouterModelToModelInfo);
} catch (error) {
console.error("Error fetching OpenRouter models:", error);
return [];
}
}
return getAllModelsWithIds().filter((model) => model.provider === provider);
});
}
function getModelsByApiId(apiModelId) {
return getAllModelsWithIds().filter((model) => model.id === apiModelId);
}
// src/deprecatedModelMapping.ts
var DEPRECATED_MODEL_MAPPINGS = [
{
modelId: "deepseek-chat" /* deepseek-chat */,
deprecatedName: "DeepSeek-V3 (new)",
deprecatedReleaseDate: "2025-03-24",
transitionDate: "2025-08-21",
notes: "Model ID remained the same but refers to a newer version",
deprecatedModelInfo: {
id: "deepseek-chat" /* deepseek-chat */,
name: "DeepSeek-V3 (new)",
provider: AI_PROVIDERS.DEEPSEEK,
contextWindowTokenLimit: 64e3,
outputTokenLimit: 8192,
pricePerMillionInputTokens: 0.27,
pricePerMillionOutputTokens: 1.1,
tokenizerId: null,
legacy: true,
legacyReason: "Replaced by DeepSeek-V3.1 on the same model ID",
deprecated: true,
releaseDate: "2025-03-24"
}
},
{
modelId: "deepseek-reasoner" /* deepseek-reasoner */,
deprecatedName: "DeepSeek-R1",
deprecatedReleaseDate: "2025-05-28",
transitionDate: "2025-08-21",
notes: "Model ID remained the same but refers to a newer version",
deprecatedModelInfo: {
id: "deepseek-reasoner" /* deepseek-reasoner */,
name: "DeepSeek-R1",
provider: AI_PROVIDERS.DEEPSEEK,
contextWindowTokenLimit: 64e3,
outputTokenLimit: 8e3,
pricePerMillionInputTokens: 0.55,
pricePerMillionOutputTokens: 2.19,
tokenizerId: "Xenova/gpt-4o",
reasoning: true,
supportsImageInput: false,
legacy: true,
legacyReason: "Replaced by DeepSeek-V3.1 (Thinking Mode) on the same model ID",
deprecated: true,
releaseDate: "2025-05-28"
}
}
];
function getDeprecatedMappingByModelId(modelId) {
return DEPRECATED_MODEL_MAPPINGS.filter(
(mapping) => mapping.modelId === modelId
);
}
function getAllDeprecatedMappings() {
return [...DEPRECATED_MODEL_MAPPINGS];
}
function getAllDeprecatedModelsInfo() {
return DEPRECATED_MODEL_MAPPINGS.map(
(mapping) => mapping.deprecatedModelInfo
);
}
export {
AI_PROVIDERS,
AI_PROVIDER_CONFIG,
AI_PROVIDER_NAME_MAP,
AllModelLikes,
AllModels,
DEPRECATED_MODEL_MAPPINGS,
ModelEnum,
ModelInfoMap,
NonModelEnum,
convertOpenRouterModelToModelInfo,
getAllDeprecatedMappings,
getAllDeprecatedModelsInfo,
getAllModelsWithIds,
getDeprecatedMappingByModelId,
getModelInfoWithId,
getModelsByApiId,
getModelsByProvider,
getOpenRouterModels
};