# models.py # ------------------------------------------------------------------ # Central registry of all AI models AnyCoder can route to. # ------------------------------------------------------------------ from __future__ import annotations from dataclasses import dataclass from typing import List, Optional @dataclass(slots=True, frozen=True) class ModelInfo: """ Metadata for a single model entry. Attributes ---------- name : Human‑readable label shown in the UI. id : Fully‑qualified model path, e.g. "openai/gpt‑4". description : Short capability blurb. default_provider: Which provider to send inference requests to if the caller does **not** override it. Supported values: "auto" | "groq" | "openai" | "gemini" | "fireworks". The special value "auto" lets HF Inference decide. """ name: str id: str description: str default_provider: str = "auto" # ------------------------------------------------------------------ # Editable list of models exposed to both back‑end & front‑end # ------------------------------------------------------------------ AVAILABLE_MODELS: List[ModelInfo] = [ # High‑capacity HF models ModelInfo( name="Qwen/Qwen3‑32B", id="Qwen/Qwen3-32B", description="Qwen3‑32B model for high‑capacity code and text generation", ), ModelInfo( name="Qwen3‑235B‑A22B", id="Qwen/Qwen3-235B-A22B", description="Qwen3‑235B‑A22B model for code generation and general tasks", ), # Moonshot (Groq hardware by default) ModelInfo( name="Moonshot Kimi‑K2", id="moonshotai/Kimi-K2-Instruct", description="Moonshot AI Kimi‑K2‑Instruct (code, chat)", default_provider="groq", ), # DeepSeek ModelInfo( name="DeepSeek V3", id="deepseek-ai/DeepSeek-V3-0324", description="DeepSeek V3 model for code generation", ), ModelInfo( name="DeepSeek R1", id="deepseek-ai/DeepSeek-R1-0528", description="DeepSeek R1 model for code generation", ), # Multimodal Chinese / English models ModelInfo( name="ERNIE‑4.5‑VL", id="baidu/ERNIE-4.5-VL-424B-A47B-Base-PT", description="ERNIE‑4.5‑VL multimodal model (image + text)", ), ModelInfo( name="GLM‑4.1V‑9B‑Thinking", id="THUDM/GLM-4.1V-9B-Thinking", description="GLM‑4.1V‑9B multimodal reasoning model", ), # Lightweight general‑purpose models ModelInfo( name="SmolLM3‑3B", id="HuggingFaceTB/SmolLM3-3B", description="SmolLM3‑3B fast, low‑latency model", ), ModelInfo( name="MiniMax M1", id="MiniMaxAI/MiniMax-M1-80k", description="MiniMax M1 80k‑context general model", ), # External providers via HF Inference Providers ModelInfo( name="OpenAI GPT‑4", id="openai/gpt-4", description="OpenAI GPT‑4 accessed through HF Inference Providers", default_provider="openai", ), ModelInfo( name="Gemini Pro", id="gemini/pro", description="Google Gemini Pro via HF Inference Providers", default_provider="gemini", ), ModelInfo( name="Fireworks V1", id="fireworks-ai/fireworks-v1", description="Fireworks AI flagship model", default_provider="fireworks", ), ] # ------------------------------------------------------------------ # Helper look‑ups # ------------------------------------------------------------------ def find_model(identifier: str) -> Optional[ModelInfo]: """ Retrieve a `ModelInfo` either by `.id` or by case‑insensitive `.name`. Parameters ---------- identifier : str - `"openai/gpt-4"` – exact id - `"OpenAI GPT-4"` – human label Returns ------- Optional[ModelInfo] """ key = identifier.lower() for m in AVAILABLE_MODELS: if m.id == identifier or m.name.lower() == key: return m return None