andy-stack_vaultkeeper-ai/Enums/ApiProvider.ts
Andrew Beal cc45949eba Update OpenAI model identifiers from GPT-5.5/5.4 to GPT-5.6 series
Replace GPT-5.5-pro, GPT-5.5, GPT-5.4-mini, and GPT-5.4-nano with the new GPT-5.6 Sol, Terra, and Luna model variants across enum definitions, display copy, settings UI, tests, and default model configurations.
2026-07-10 23:06:16 +01:00

141 lines
No EOL
4.7 KiB
TypeScript

import { Exception } from "Helpers/Exception";
export function fromModel(model: string): AIProvider {
if (!isValidProviderModel(model)) {
Exception.throw(`Invalid model: ${model}`);
}
if (isClaudeModel(model)) {
return AIProvider.Claude;
} else if (isGeminiModel(model)) {
return AIProvider.Gemini;
} else if (isOpenAIModel(model)) {
return AIProvider.OpenAI;
} else if (isMistralModel(model)) {
return AIProvider.Mistral;
} else {
Exception.throw("Invalid model selection");
}
}
export function isvalidProvider(value: string): value is AIProvider {
return Object.values(AIProvider).includes(value as AIProvider);
}
export function isValidProviderModel(model: string): model is AIProviderModel {
return Object.values(AIProviderModel).includes(model as AIProviderModel);
}
function isClaudeModel(model: string): boolean {
return isValidProviderModel(model) && model.startsWith("claude-");
}
function isGeminiModel(model: string): boolean {
return isValidProviderModel(model) && model.startsWith("gemini-");
}
function isOpenAIModel(model: string): boolean {
return isValidProviderModel(model) && model.startsWith("gpt-");
}
function isMistralModel(model: string): boolean {
return isValidProviderModel(model) && model.startsWith("mistral-");
}
export function modelMatchesProvider(model: AIProviderModel, provider: AIProvider): boolean {
switch (provider) {
case AIProvider.Claude:
return isClaudeModel(model);
case AIProvider.Gemini:
return isGeminiModel(model);
case AIProvider.OpenAI:
return isOpenAIModel(model);
case AIProvider.Mistral:
return isMistralModel(model);
case AIProvider.Local:
return true; // Local models are freely typed
}
}
export enum AIProvider {
Claude = "Claude",
Gemini = "Gemini",
OpenAI = "OpenAI",
Mistral = "Mistral",
Local = "Local"
}
export enum AIProviderModel {
// Claude models
ClaudeFable_5 = "claude-fable-5",
ClaudeSonnet_5 = "claude-sonnet-5",
ClaudeOpus_4_8 = "claude-opus-4-8",
ClaudeHaiku_4_5 = "claude-haiku-4-5-20251001",
// Gemini models
GeminiFlash_3_1_Lite = "gemini-3.1-flash-lite",
GeminiFlash_3_Flash = "gemini-3-flash-preview",
GeminiFlash_3_5_Flash = "gemini-3.5-flash",
GeminiPro_3_1_Preview = "gemini-3.1-pro-preview",
// OpenAI models
GPT_5_6_Sol = "gpt-5.6-sol",
GPT_5_6_Terra = "gpt-5.6-terra",
GPT_5_6_Luna = "gpt-5.6-luna",
// Mistral models
MistralMedium = "mistral-medium-3-5",
MistralSmall = "mistral-small-2603",
// Conversation naming models (aliases to existing models)
ClaudeNamer = ClaudeHaiku_4_5,
GeminiNamer = GeminiFlash_3_1_Lite,
OpenAINamer = GPT_5_6_Luna,
MistralNamer = MistralSmall,
// Local models are freely typed so no default is given
None = "none"
}
export enum AIProviderURL {
Claude = "https://api.anthropic.com/v1/messages",
Gemini = "https://generativelanguage.googleapis.com/v1beta/models",
OpenAI = "https://api.openai.com/v1/responses",
Mistral = "https://api.mistral.ai/v1/chat/completions"
}
export enum AIFileServiceURL {
Claude = "https://api.anthropic.com/v1/files",
Gemini = "https://generativelanguage.googleapis.com/v1beta",
GeminiUpload = "https://generativelanguage.googleapis.com/upload/v1beta",
OpenAI = "https://api.openai.com/v1/files",
Mistral = "https://api.mistral.ai/v1/files",
}
export enum MistralAgentEndpoint {
Url = "https://api.mistral.ai/v1/agents",
ConversationsUrl = "https://api.mistral.ai/v1/conversations"
}
export const DEFAULT_QUICK_MODEL_BY_PROVIDER: Record<AIProvider, AIProviderModel> = {
[AIProvider.Claude]: AIProviderModel.ClaudeHaiku_4_5,
[AIProvider.Gemini]: AIProviderModel.GeminiFlash_3_1_Lite,
[AIProvider.OpenAI]: AIProviderModel.GPT_5_6_Luna,
[AIProvider.Mistral]: AIProviderModel.MistralSmall,
[AIProvider.Local]: AIProviderModel.None
}
export const DEFAULT_MODEL_BY_PROVIDER: Record<AIProvider, AIProviderModel> = {
[AIProvider.Claude]: AIProviderModel.ClaudeSonnet_5,
[AIProvider.Gemini]: AIProviderModel.GeminiFlash_3_5_Flash,
[AIProvider.OpenAI]: AIProviderModel.GPT_5_6_Terra,
[AIProvider.Mistral]: AIProviderModel.MistralMedium,
[AIProvider.Local]: AIProviderModel.None
}
export const DEFAULT_PLANNING_MODEL_BY_PROVIDER: Record<AIProvider, AIProviderModel> = {
[AIProvider.Claude]: AIProviderModel.ClaudeOpus_4_8,
[AIProvider.Gemini]: AIProviderModel.GeminiFlash_3_5_Flash,
[AIProvider.OpenAI]: AIProviderModel.GPT_5_6_Sol,
[AIProvider.Mistral]: AIProviderModel.MistralMedium,
[AIProvider.Local]: AIProviderModel.None
}