/** * Model Badge Component * * Shared component for displaying AI model badges across the application * * @package ThinkRank * @since 1.0.0 */ /** * Model Badge Component */ const ModelBadge = ({ provider, model }) => { if (!provider || !model) return null; const getModelDisplayName = (provider, model) => { if (provider === 'openai') { switch (model) { case 'gpt-5-nano': return 'GPT‑5‑nano'; case 'gpt-5-mini': return 'GPT‑5‑mini'; case 'gpt-5': return 'GPT‑5'; case 'gpt-4o': return 'GPT‑4o'; default: return model; } } else if (provider === 'claude') { switch (model) { // Claude 4 models (use -0 aliases) case 'claude-sonnet-4-0': return 'Claude 4 Sonnet'; case 'claude-opus-4-0': return 'Claude 4 Opus'; case 'claude-sonnet-4-20250514': return 'Claude 4 Sonnet'; case 'claude-opus-4-20250514': return 'Claude 4 Opus'; // Claude 3.x models (use -latest aliases) case 'claude-3-7-sonnet-latest': return 'Claude 3.7 Sonnet'; case 'claude-3-5-sonnet-latest': return 'Claude 3.5 Sonnet'; case 'claude-3-5-haiku-latest': return 'Claude 3.5 Haiku'; // Support for versioned models from API responses case 'claude-3-7-sonnet-20250219': return 'Claude 3.7 Sonnet'; case 'claude-3-5-sonnet-20241022': return 'Claude 3.5 Sonnet'; case 'claude-3-5-haiku-20241022': return 'Claude 3.5 Haiku'; default: return model; } } else if (provider === 'gemini') { switch (model) { case 'gemini-2.5-flash': return 'Gemini 2.5 Flash'; case 'gemini-2.5-flash-lite': return 'Gemini 2.5 Flash-Lite'; case 'gemini-2.5-pro': return 'Gemini 2.5 Pro'; case 'gemini-2.0-flash': return 'Gemini 2.0 Flash'; case 'gemini-1.5-flash': return 'Gemini 1.5 Flash'; default: return model; } } return model; }; const displayName = getModelDisplayName(provider, model); const badgeClass = `model-badge ${provider}`; return ( {displayName} ); }; export default ModelBadge;