freellmapi / client /src /components /models-tabs.tsx
Nryn215's picture
Deploy: Enable and enforce pure ELO-based Intelligence routing strategy
ed57015
Raw
History Blame Contribute Delete
1.78 kB
import { NavLink } from 'react-router-dom'
import { useI18n } from '@/i18n'
// Segmented Chat | Embeddings | Fusion switcher shared by the Models pages.
// Industry-standard layout: one "Models" section, modality as a tab — chat
// routing (cross-model fallback), embeddings routing (same-model,
// cross-provider fallback), and fusion (multi-model synthesis) are different
// machines behind one roof.
export function ModelsTabs() {
const { t } = useI18n()
const tab = (isActive: boolean) =>
`inline-flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-lg transition-colors ${
isActive ? 'bg-foreground text-background font-medium' : 'text-muted-foreground hover:text-foreground hover:bg-muted'
}`
return (
<div className="inline-flex gap-1 rounded-xl border p-1">
<NavLink to="/models/chat" className={({ isActive }) => tab(isActive)}>{t('models.chatModelsTab')}</NavLink>
<NavLink to="/models/embeddings" className={({ isActive }) => tab(isActive)}>{t('models.embeddingsTab')}</NavLink>
<NavLink to="/models/image" className={({ isActive }) => tab(isActive)}>{t('models.imageTab')}</NavLink>
<NavLink to="/models/audio" className={({ isActive }) => tab(isActive)}>{t('models.audioTab')}</NavLink>
<NavLink to="/models/fusion" className={({ isActive }) => tab(isActive)}>
{({ isActive }) => (
<>
{t('models.fusionTab')}
<span className={`rounded px-1 py-0.5 text-[9px] font-semibold uppercase leading-none tracking-wide ${
isActive ? 'bg-background/20 text-background' : 'bg-emerald-500/15 text-emerald-600 dark:text-emerald-400'
}`}>
{t('models.newBadge')}
</span>
</>
)}
</NavLink>
</div>
)
}