{"repo": "buildgeekai/mem-dog", "files": {"api/app/provider_registry.py": {"656da062d620feca9d697d661703dd3c90d7ac5c": {"t": 1785674495.7857964, "n": 7595, "h": "1022bd59c0d7ba20", "c": "\"\"\"Static provider catalog for Model Garden.\n\nEach entry describes an AI provider's metadata, authentication requirements,\nAPI endpoints for model discovery, and well-known default models.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom app.models import ProviderInfo\n\nPROVIDER_REGISTRY: dict[str, ProviderInfo] = {\n \"openai\": ProviderInfo(\n engine_type=\"openai\",\n display_name=\"OpenAI\",\n description=\"GPT-4o, GPT-4, GPT-3.5, DALL-E, and embedding models\",\n icon=\"openai\",\n requires_api_key=True,\n default_base_url=\"https://api.openai.com/v1\",\n api_key_placeholder=\"sk-...\",\n litellm_prefix=\"openai/\",\n auth_header=\"Authorization\",\n auth_scheme=\"Bearer\",\n models_endpoint=\"/models\",\n default_models=[\"gpt-4o\", \"gpt-4o-mini\", \"gpt-4-turbo\", \"gpt-3.5-turbo\"],\n default_embedding_models=[\"text-embedding-3-small\", \"text-embedding-3-large\"],\n category=\"cloud\",\n ),\n \"anthropic\": ProviderInfo(\n engine_type=\"anthropic\",\n display_name=\"Anthropic\",\n description=\"Claude 4, Claude 3.5, and Claude 3 model family\",\n icon=\"anthropic\",\n requires_api_key=True,\n default_base_url=\"https://api.anthropic.com\",\n api_key_placeholder=\"sk-ant-...\",\n litellm_prefix=\"anthropic/\",\n auth_header=\"x-api-key\",\n auth_scheme=\"\",\n models_endpoint=\"/v1/models\",\n default_models=[\"claude-sonnet-4-20250514\", \"claude-haiku-4-20250414\", \"claude-3-5-sonnet-20241022\"],\n default_embedding_models=[],\n category=\"cloud\",\n ),\n \"gemini\": ProviderInfo(\n engine_type=\"gemini\",\n display_name=\"Google Gemini\",\n description=\"Gemini Pro, Flash, and embedding models via Google AI Studio\",\n icon=\"gemini\",\n requires_api_key=True,\n default_base_url=\"https://generativelanguage.googleapis.com\",\n api_key_placeholder=\"AIza...\",\n litellm_prefix=\"gemini/\",\n auth_header=\"\",\n auth_scheme=\"\",\n models_endpoint=\"/v1beta/models\",\n default_models=[\"gemini-2.5-flash-preview-05-20\", \"gemini-2.5-pro-preview-05-06\", \"gemini-3.1-pro-preview\"],\n default_embedding_models=[\"text-embedding-004\"],\n category=\"cloud\",\n ),\n \"ollama\": ProviderInfo(\n engine_type=\"ollama\",\n display_name=\"Ollama (Local)\",\n description=\"Run open-source models locally via Ollama\",\n icon=\"ollama\",\n requires_api_key=False,\n default_base_url=\"http://localhost:11434\",\n api_key_placeholder=None,\n litellm_prefix=\"ollama/\",\n auth_header=\"\",\n auth_scheme=\"\",\n models_endpoint=\"/api/tags\",\n default_models=[\"llama3.1\", \"gemma3:12b\", \"mistral\", \"qwen3:8b\"],\n default_embedding_models=[\"nomic-embed-text\", \"mxbai-embed-large\"],\n category=\"local\",\n ),\n \"ollama_cloud\": ProviderInfo(\n engine_type=\"ollama_cloud\",\n display_name=\"Ollama Cloud\",\n description=\"Run open-source models on Ollama's cloud infrastructure\",\n icon=\"ollama_cloud\",\n requires_api_key=True,\n default_base_url=\"https://api.ollama.com\",\n api_key_placeholder=\"ollama-cloud-key...\",\n litellm_prefix=\"ollama/\",\n auth_header=\"Authorization\",\n auth_scheme=\"Bearer\",\n models_endpoint=\"/api/tags\",\n default_models=[\"llama3.1\", \"gemma3:12b\", \"mistral\", \"qwen3:8b\", \"deepseek-r1\"],\n default_embedding_models=[\"nomic-embed-text\", \"mxbai-embed-large\"],\n category=\"cloud\",\n ),\n \"openrouter\": ProviderInfo(\n engine_type=\"openrouter\",\n display_name=\"OpenRouter\",\n description=\"Access 100+ models from multiple providers through one API\",\n icon=\"openrouter\",\n requires_api_key=True,\n default_base_url=\"https://openrouter.ai/api\",\n api_key_placeholder=\"sk-or-...\",\n litellm_prefix=\"openrouter/\",\n auth_header=\"Authorization\",\n auth_scheme=\"Bearer\",\n models_endpoint=\"/v1/models\",\n default_models=[\"openai/gpt-4o\", \"anthropic/claude-sonnet-4\", \"google/gemini-2.5-flash\"],\n default_embedding_models=[],\n category=\"cloud\",\n ),\n \"together\": ProviderInfo(\n engine_type=\"together\",\n display_name=\"Together AI\",\n description=\"Fast inference for open-source models (Llama, Mixtral, etc.)\",\n icon=\"together\",\n requires_api_key=True,\n default_base_url=\"https://api.together.xyz\",\n api_key_placeholder=\"tok-...\",\n litellm_prefix=\"together_ai/\",\n auth_header=\"Authorization\",\n auth_scheme=\"Bearer\",\n models_endpoint=\"/v1/models\",\n default_models=[\"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo\", \"mistralai/Mixtral-8x7B-Instruct-v0.1\"],\n default_embedding_models=[\"togethercomputer/m2-bert-80M-8k-retrieval\"],\n category=\"cloud\",\n ),\n \"huggingface\": ProviderInfo(\n engine_type=\"huggingface\",\n display_name=\"Hugging Face\",\n description=\"Inference API for thousands of open-source models\",\n icon=\"huggingface\",\n requires_api_key=True,\n default_base_url=\"https://api-inference.huggingface.co\",\n api_key_placeholder=\"hf_...\",\n litellm_prefix=\"huggingface/\",\n auth_header=\"Authorization\",\n auth_scheme=\"Bearer\",\n models_endpoint=\"/api/models\",\n default_models=[\"meta-llama/Meta-Llama-3-8B-Instruct\", \"mistralai/Mistral-7B-Instruct-v0.3\"],\n default_embedding_models=[\"sentence-transformers/all-MiniLM-L6-v2\"],\n category=\"cloud\",\n ),\n \"bedrock\": ProviderInfo(\n engine_type=\"bedrock\",\n display_name=\"Amazon Bedrock\",\n description=\"AWS-managed foundation models (Claude, Titan, Llama)\",\n icon=\"bedrock\",\n requires_api_key=True,\n default_base_url=None,\n api_key_placeholder=\"AWS credentials required\",\n litellm_prefix=\"bedrock/\",\n auth_header=\"\",\n auth_scheme=\"\",\n models_endpoint=None,\n default_models=[\"anthropic.claude-3-sonnet-20240229-v1:0\", \"amazon.titan-text-express-v1\"],\n default_embedding_models=[\"amazon.titan-embed-text-v2:0\"],\n category=\"cloud\",\n ),\n \"vllm\": ProviderInfo(\n engine_type=\"vllm\",\n display_name=\"vLLM\",\n description=\"High-throughput self-hosted inference engine\",\n icon=\"vllm\",\n requires_api_key=False,\n default_base_url=\"http://localhost:8000\",\n api_key_placeholder=None,\n litellm_prefix=\"openai/\",\n auth_header=\"Authorization\",\n auth_scheme=\"Bearer\",\n models_endpoint=\"/v1/models\",\n default_models=[],\n default_embedding_models=[],\n category=\"local\",\n ),\n \"litellm\": ProviderInfo(\n engine_type=\"litellm\",\n display_name=\"LiteLLM Gateway\",\n description=\"Unified proxy gateway supporting 100+ LLM providers\",\n icon=\"litellm\",\n requires_api_key=False,\n default_base_url=\"http://localhost:4000\",\n api_key_placeholder=\"sk-...\",\n litellm_prefix=\"\",\n auth_header=\"Authorization\",\n auth_scheme=\"Bearer\",\n models_endpoint=\"/models\",\n default_models=[],\n default_embedding_models=[],\n category=\"gateway\",\n ),\n}\n\n\ndef get_registry() -> dict[str, ProviderInfo]:\n \"\"\"Return the full provider registry.\"\"\"\n return PROVIDER_REGISTRY\n\n\ndef get_provider(engine_type: str) -> ProviderInfo | None:\n \"\"\"Return provider info for a specific engine type.\"\"\"\n return PROVIDER_REGISTRY.get(engine_type)\n"}}}}