| from dataclasses import dataclass | |
| # Constants extracted from ProviderDiscoveryService | |
| DEFAULT_OLLAMA_URL = "http://host.docker.internal:11434" | |
| _CACHE_TTL_SECONDS = 300 | |
| CHAT_MODEL_PATTERNS = ["llama", "qwen", "mistral", "codellama", "phi", "gemma", "vicuna", "orca"] | |
| EMBEDDING_MODEL_PATTERNS = ["embed", "embedding"] | |
| VISION_MODEL_PATTERNS = ["vision", "llava", "moondream"] | |
| MODEL_CONTEXT_WINDOWS = { | |
| "llama3": 8192, | |
| "qwen": 32768, | |
| "mistral": 8192, | |
| "codellama": 16384, | |
| "phi": 4096, | |
| "gemma": 8192, | |
| } | |
| EMBEDDING_DIMENSIONS = { | |
| "nomic-embed": 768, | |
| "mxbai-embed": 1024, | |
| "all-minilm": 384, | |
| } | |
| class ModelSpec: | |
| name: str | |
| provider: str | |
| context_window: int | |
| supports_tools: bool = False | |
| supports_vision: bool = False | |
| supports_embeddings: bool = False | |
| embedding_dimensions: int | None = None | |
| pricing_input: float | None = None | |
| pricing_output: float | None = None | |
| description: str = "" | |
| aliases: list[str] | None = None | |
| def __post_init__(self): | |
| if self.aliases is None: | |
| self.aliases = [] | |
| class ProviderStatus: | |
| provider: str | |
| is_available: bool | |
| response_time_ms: float | None = None | |
| error_message: str | None = None | |
| models_available: int = 0 | |
| base_url: str | None = None | |
| last_checked: float | None = None | |