@llumiverse/common
Version:
Public types, enums and options used by Llumiverse API.
97 lines (92 loc) • 3.99 kB
text/typescript
/**
* Returns the max output tokens for a given model (provider-agnostic).
* When a model's limits vary by provider, returns a conservative value
* that works across all providers.
*/
export function getMaxOutputTokens(model: string): number {
// Claude models
if (model.includes('claude')) {
if (model.includes('opus-4-7')) return 128_000;
if (model.includes('opus-4-6')) return 128_000;
if (model.includes('opus-4-5')) return 64_000;
if (model.includes('opus-')) return 32_768; // Opus 4.0, 4.1
if (model.includes('-4-')) return 64_000; // Sonnet 4.x, Haiku 4.5
if (model.includes('-3-7')) return 64_000; // 128K with beta header, default 64K
if (model.includes('-3-5')) return 8_192;
return 4_096; // Claude 3 older
}
// Gemini models
if (model.includes('gemini')) {
if (model.includes('-1.0-')) return 2_048;
if (model.includes('flash-image') || model.includes('pro-image')) return 32_768;
return 65_535; // Gemini 1.5, 2.0, 2.5, 3 — API upper bound is exclusive
}
// OpenAI o-series
if (model.includes('o1-mini')) return 65_536;
if (model.includes('o1')) return 100_000;
if (model.includes('o3') || model.includes('o4')) return 100_000;
// GPT models
if (model.includes('gpt-5')) return 128_000;
if (model.includes('gpt-4o')) return 16_384;
if (model.includes('gpt-4')) return 8_192;
if (model.includes('gpt-3.5')) return 4_096;
// Amazon Nova
if (model.includes('nova')) return 10_000;
// Mistral
if (model.includes('mistral')) return 8_192;
// DeepSeek
if (model.includes('deepseek')) return 128_000;
// Llama
if (model.includes('llama')) return 8_192;
// Cohere
if (model.includes('command-a')) return 8_000;
if (model.includes('command')) return 4_096;
return 8_192; // conservative default
}
/**
* Returns the max input tokens for a given model (context window minus max output).
*/
export function getMaxInputTokens(model: string): number {
return getContextWindowSize(model) - getMaxOutputTokens(model);
}
/**
* Returns the context window size (input + output) for a given model.
*/
export function getContextWindowSize(model: string): number {
// Claude models
if (model.includes('claude')) {
// All Claude models use 200K (1M requires beta header, handled separately later)
return 200_000;
}
// Gemini models
if (model.includes('gemini')) {
if (model.includes('-1.0-')) return 32_000;
return 1_000_000; // Gemini 1.5, 2.0, 2.5, 3 all support 1M
}
// OpenAI o-series (check before gpt-4 to avoid false matches)
if (model.includes('o1') || model.includes('o3') || model.includes('o4')) return 200_000;
// GPT models — check specific variants before generic gpt-4
if (model.includes('gpt-5')) return 400_000;
if (model.includes('gpt-4.1') || model.includes('gpt-4-1')) return 1_000_000;
if (model.includes('gpt-4-turbo') || model.includes('gpt-4o')) return 128_000;
if (model.includes('gpt-4')) return 8_000;
if (model.includes('gpt-3.5')) return 16_000;
// Grok
if (model.includes('grok-4.1') || model.includes('grok-4-1')) return 256_000;
if (model.includes('grok')) return 131_072;
// Amazon Nova
if (model.includes('nova')) return 300_000;
// Mistral
if (model.includes('mistral-large')) return 128_000;
if (model.includes('mistral')) return 32_000;
// DeepSeek
if (model.includes('deepseek')) return 128_000;
// Llama
if (model.includes('llama-4') || model.includes('llama4')) return 1_000_000;
if (model.includes('llama-3.1') || model.includes('llama-3.2') || model.includes('llama-3.3')) return 128_000;
if (model.includes('llama')) return 8_000;
// Cohere
if (model.includes('command-a')) return 256_000;
if (model.includes('command')) return 128_000;
return 128_000; // conservative default
}