SPB Git

Repository Public MIT

models.ts 4.2 KB 72 lines typescript

1import type { LucideIcon } from "lucide-react";2import {3  Wand2, Crown, Gem, Atom, Feather, Rabbit,4  Sun, Earth, Moon, Bot, Brain, Cpu, Zap, Sparkles, Rocket, Bird, Globe,5} from "lucide-react";6import type { ClaudeModel } from "@/hooks/useChatSession";78export type ModelProvider = "anthropic" | "openai" | "google";910export interface ModelOption {11  value: ClaudeModel;12  label: string;13  sub: string;14  icon: LucideIcon;15  provider: ModelProvider;16  /** vitesse relative 1 (lent) → 3 (rapide) */17  speed: 1 | 2 | 3;18  /** intelligence relative 1 → 3 */19  power: 1 | 2 | 3;20  context?: string;21  badge?: string;22  disabled?: boolean;23}2425export const PROVIDER_LABEL: Record<ModelProvider, string> = {26  anthropic: "Anthropic",27  openai: "OpenAI",28  google: "Google",29};3031export const MODEL_OPTIONS: ModelOption[] = [32  { value: "claude-fable-5", label: "Fable 5", sub: "Le plus intelligent", icon: Wand2, provider: "anthropic", speed: 2, power: 3, context: "1M", badge: "Défaut" },33  { value: "claude-opus-4-8", label: "Opus 4.8", sub: "Agentique long horizon", icon: Crown, provider: "anthropic", speed: 1, power: 3, context: "1M" },34  { value: "claude-opus-4-7", label: "Opus 4.7", sub: "Équilibré", icon: Gem, provider: "anthropic", speed: 2, power: 3, context: "1M" },35  { value: "claude-opus-4-6", label: "Opus 4.6", sub: "Rapide et capable", icon: Atom, provider: "anthropic", speed: 2, power: 2, context: "1M" },36  { value: "claude-sonnet-4-6", label: "Sonnet 4.6", sub: "Polyvalent", icon: Feather, provider: "anthropic", speed: 3, power: 2, context: "1M" },37  { value: "claude-haiku-4-5-20251001", label: "Haiku 4.5", sub: "Le plus rapide", icon: Rabbit, provider: "anthropic", speed: 3, power: 1, context: "200K" },3839  { value: "gpt-5.6-sol", label: "GPT-5.6 Sol", sub: "Le plus puissant", icon: Sun, provider: "openai", speed: 1, power: 3 },40  { value: "gpt-5.6-terra", label: "GPT-5.6 Terra", sub: "Équilibré", icon: Earth, provider: "openai", speed: 2, power: 2 },41  { value: "gpt-5.6-luna", label: "GPT-5.6 Luna", sub: "Rapide et économe", icon: Moon, provider: "openai", speed: 3, power: 2 },42  { value: "gpt-5.5", label: "GPT-5.5", sub: "Puissant", icon: Bot, provider: "openai", speed: 2, power: 3 },43  { value: "gpt-5.4", label: "GPT-5.4", sub: "Contexte 1M", icon: Brain, provider: "openai", speed: 2, power: 2, context: "1M" },44  { value: "gpt-5.2", label: "GPT-5.2", sub: "Puissant", icon: Cpu, provider: "openai", speed: 2, power: 2 },45  { value: "gpt-5.1", label: "GPT-5.1", sub: "Équilibré", icon: Zap, provider: "openai", speed: 2, power: 2 },46  { value: "gpt-5", label: "GPT-5", sub: "Classique", icon: Sparkles, provider: "openai", speed: 2, power: 2 },47  { value: "gpt-5-mini", label: "GPT-5 Mini", sub: "Rapide", icon: Rocket, provider: "openai", speed: 3, power: 1 },48  { value: "gpt-5-nano", label: "GPT-5 Nano", sub: "Le plus rapide", icon: Bird, provider: "openai", speed: 3, power: 1 },49  { value: "gpt-4.1", label: "GPT-4.1", sub: "Contexte 1M", icon: Globe, provider: "openai", speed: 2, power: 2, context: "1M" },50  { value: "gpt-4.1-mini", label: "GPT-4.1 Mini", sub: "Économe", icon: Feather, provider: "openai", speed: 3, power: 1 },5152  { value: "gemini-3.5-flash", label: "Gemini 3.5 Flash", sub: "Le plus récent", icon: Sparkles, provider: "google", speed: 3, power: 2 },53  { value: "gemini-3.1-pro-preview", label: "Gemini 3.1 Pro", sub: "Le plus puissant", icon: Gem, provider: "google", speed: 1, power: 3 },54  { value: "gemini-3-flash-preview", label: "Gemini 3 Flash", sub: "Équilibré", icon: Zap, provider: "google", speed: 3, power: 2 },55  { value: "gemini-3.1-flash-lite", label: "Gemini 3.1 Flash Lite", sub: "Le plus rapide", icon: Bird, provider: "google", speed: 3, power: 1 },56];5758export const DEFAULT_MODEL: ClaudeModel = "claude-fable-5";5960export function getModel(value?: string | null): ModelOption {61  return MODEL_OPTIONS.find((m) => m.value === value) ?? MODEL_OPTIONS[0];62}6364export function groupModelsByProvider(): { provider: ModelProvider; label: string; models: ModelOption[] }[] {65  const providers: ModelProvider[] = ["anthropic", "openai", "google"];66  return providers.map((provider) => ({67    provider,68    label: PROVIDER_LABEL[provider],69    models: MODEL_OPTIONS.filter((m) => m.provider === provider),70  }));71}72
Files main
Menu

Theme