|
|
|
from dataclasses import dataclass |
|
from typing import List, Optional |
|
|
|
@dataclass |
|
class ModelInfo: |
|
""" |
|
Represents metadata for an inference model. |
|
|
|
Attributes: |
|
name: Human-readable name of the model. |
|
id: Unique model identifier (HF/externally routed). |
|
description: Short description of the model's capabilities. |
|
default_provider: Preferred inference provider ("auto", "groq", "openai", "gemini", "fireworks"). |
|
""" |
|
name: str |
|
id: str |
|
description: str |
|
default_provider: str = "auto" |
|
|
|
|
|
|
|
AVAILABLE_MODELS: List[ModelInfo] = [ |
|
ModelInfo( |
|
name="Moonshot Kimi-K2", |
|
id="moonshotai/Kimi-K2-Instruct", |
|
description="Moonshot AI Kimi-K2-Instruct model for code generation and general tasks", |
|
default_provider="groq" |
|
), |
|
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", |
|
), |
|
ModelInfo( |
|
name="ERNIE-4.5-VL", |
|
id="baidu/ERNIE-4.5-VL-424B-A47B-Base-PT", |
|
description="ERNIE-4.5-VL model for multimodal code generation with image support", |
|
), |
|
ModelInfo( |
|
name="MiniMax M1", |
|
id="MiniMaxAI/MiniMax-M1-80k", |
|
description="MiniMax M1 model for code generation and general tasks", |
|
), |
|
ModelInfo( |
|
name="Qwen3-235B-A22B", |
|
id="Qwen/Qwen3-235B-A22B", |
|
description="Qwen3-235B-A22B model for code generation and general tasks", |
|
), |
|
ModelInfo( |
|
name="SmolLM3-3B", |
|
id="HuggingFaceTB/SmolLM3-3B", |
|
description="SmolLM3-3B model for code generation and general tasks", |
|
), |
|
ModelInfo( |
|
name="GLM-4.1V-9B-Thinking", |
|
id="THUDM/GLM-4.1V-9B-Thinking", |
|
description="GLM-4.1V-9B-Thinking model for multimodal code generation with image support", |
|
), |
|
ModelInfo( |
|
name="OpenAI GPT-4", |
|
id="openai/gpt-4", |
|
description="OpenAI GPT-4 model via Inference Providers", |
|
default_provider="openai" |
|
), |
|
ModelInfo( |
|
name="Gemini Pro", |
|
id="gemini/pro", |
|
description="Google Gemini Pro model via Inference Providers", |
|
default_provider="gemini" |
|
), |
|
ModelInfo( |
|
name="Fireworks AI", |
|
id="fireworks-ai/fireworks-v1", |
|
description="Fireworks AI model via Inference Providers", |
|
default_provider="fireworks" |
|
), |
|
ModelInfo( |
|
name="Qwen3-32B", |
|
id="Qwen/Qwen3-32B", |
|
description="Qwen3-32B model for high-capacity code and text generation", |
|
), |
|
] |
|
|
|
|
|
def find_model(identifier: str) -> Optional[ModelInfo]: |
|
""" |
|
Lookup a model by its human name or identifier. |
|
|
|
Args: |
|
identifier: ModelInfo.name (case-insensitive) or ModelInfo.id |
|
Returns: |
|
The matching ModelInfo or None if not found. |
|
""" |
|
key = identifier.lower() |
|
for m in AVAILABLE_MODELS: |
|
if m.id == identifier or m.name.lower() == key: |
|
return m |
|
return None |