/** * Provider configurations for @geepers/chat * * Model names match what the API Gateway (api-gateway/app.py) expects. * Sourced from Slate's MODELS constant and verified against the gateway. */ import type { Provider, ProviderConfig } from '../types/index.js'; export const MODELS: Record = { xai: { model: 'grok-4', label: 'xAI Grok 4', }, anthropic: { model: 'claude-sonnet-4-6', label: 'Claude Sonnet 4.6', }, openai: { model: 'gpt-5.4', label: 'OpenAI GPT-5.4', }, cohere: { model: 'command-r-plus-08-2024', label: 'Cohere Command R+', }, mistral: { model: 'mistral-large-latest', label: 'Mistral Large', }, perplexity: { model: 'sonar-pro', label: 'Perplexity Sonar Pro', }, huggingface: { model: 'Qwen/Qwen3.5-9B', label: 'HuggingFace Qwen 3.5', }, gemini: { model: 'gemini-2.5-flash', label: 'Google Gemini 2.5', }, ollama: { model: 'llama3.2:3b', label: 'Ollama (Local)', }, }; /** Array of all valid provider keys, useful for validation and UI rendering */ export const PROVIDER_KEYS: Provider[] = Object.keys(MODELS) as Provider[]; /** * Validate that a string is a known provider key. * Logs a console warning for unknown providers but does not throw. */ export function isKnownProvider(value: string): value is Provider { const known = PROVIDER_KEYS.includes(value as Provider); if (!known) { console.warn(`[@geepers/chat] Unknown provider: "${value}". Known providers: ${PROVIDER_KEYS.join(', ')}`); } return known; } /** * Get the model config for a provider, falling back to xai if unknown. */ export function getProviderConfig(provider: string): ProviderConfig { if (isKnownProvider(provider)) { return MODELS[provider]; } return MODELS.xai; }