NU-KIOSK-API / backend /providers /__init__.py
Monish BV
update context and anthropic model
53def98
"""HTTP LLM providers for the CS Kiosk."""
from __future__ import annotations
from typing import Any, Dict, Type
from .base import (
BaseLLM,
ChatMessage,
LLMResponse,
MessageRole,
ProviderConfig,
ToolCall,
)
from .echo import EchoProvider
from .gpt import OpenAIChat
from .claude import ClaudeProvider
from .gemini import GeminiGenerative
_PROVIDER_REGISTRY: Dict[str, Dict[str, Any]] = {
"claude": {
"id": "claude",
"name": "Anthropic Claude",
"cls": ClaudeProvider,
"default_model": "claude-haiku-4-5",
"supports_tools": True,
},
"gpt": {
"id": "gpt",
"name": "OpenAI GPT",
"cls": OpenAIChat,
"default_model": "gpt-4.1-mini",
"supports_tools": True,
},
"gemini": {
"id": "gemini",
"name": "Google Gemini",
"cls": GeminiGenerative,
"default_model": "gemini-2.0-flash",
"supports_tools": True,
},
"echo": {
"id": "echo",
"name": "Echo (development)",
"cls": EchoProvider,
"default_model": "echo",
"supports_tools": True,
},
}
_PROVIDER_ALIASES: Dict[str, str] = {
"anthropic": "claude",
"claude": "claude",
"openai": "gpt",
"gpt": "gpt",
"google": "gemini",
"gemini": "gemini",
"echo": "echo",
"mock": "echo",
}
def normalize_provider_name(name: str) -> str:
"""Return the canonical provider id for a user-supplied name."""
return _PROVIDER_ALIASES.get(name.lower(), name.lower())
def available_providers() -> Dict[str, Dict[str, Any]]:
"""Metadata describing the providers registered with the backend."""
providers: Dict[str, Dict[str, Any]] = {}
for key, meta in _PROVIDER_REGISTRY.items():
exported = {k: v for k, v in meta.items() if k != "cls"}
providers[key] = exported
return providers
def get_provider(name: str, config: ProviderConfig) -> BaseLLM:
"""Instantiate a provider client by name."""
canonical = normalize_provider_name(name)
entry = _PROVIDER_REGISTRY.get(canonical)
if not entry:
raise ValueError(f"Unsupported provider '{name}'.")
provider_cls: Type[BaseLLM] = entry["cls"]
return provider_cls(config)
__all__ = [
"BaseLLM",
"ChatMessage",
"LLMResponse",
"MessageRole",
"ProviderConfig",
"ToolCall",
"EchoProvider",
"OpenAIChat",
"ClaudeProvider",
"GeminiGenerative",
"available_providers",
"get_provider",
"normalize_provider_name",
]