import os import logging from openai import AsyncOpenAI from agents import OpenAIChatCompletionsModel from dotenv import load_dotenv # Get logger for this module logger = logging.getLogger(__name__) # Load environment variables load_dotenv(override=True) # API Keys DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY") GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY") GROK_API_KEY = os.getenv("GROK_API_KEY") OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY") # Base URLs DEEPSEEK_BASE_URL = "https://api.deepseek.com/v1" GROK_BASE_URL = "https://api.x.ai/v1" GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/openai/" OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1" # Initialize API clients openrouter_client = AsyncOpenAI(base_url=OPENROUTER_BASE_URL, api_key=OPENROUTER_API_KEY) deepseek_client = AsyncOpenAI(base_url=DEEPSEEK_BASE_URL, api_key=DEEPSEEK_API_KEY) grok_client = AsyncOpenAI(base_url=GROK_BASE_URL, api_key=GROK_API_KEY) gemini_client = AsyncOpenAI(base_url=GEMINI_BASE_URL, api_key=GOOGLE_API_KEY) def get_model(model_name: str): """ Get the appropriate model based on the model name. Args: model_name (str): The name of the model to use Returns: OpenAIChatCompletionsModel or str: The model instance or model name """ if "/" in model_name: return OpenAIChatCompletionsModel(model=model_name, openai_client=openrouter_client) elif "deepseek" in model_name: return OpenAIChatCompletionsModel(model=model_name, openai_client=deepseek_client) elif "grok" in model_name: return OpenAIChatCompletionsModel(model=model_name, openai_client=grok_client) elif "gemini" in model_name: return OpenAIChatCompletionsModel(model=model_name, openai_client=gemini_client) else: return model_name def get_api_clients(): """ Get all API clients for external use if needed. Returns: dict: Dictionary containing all API clients """ return { 'openrouter': openrouter_client, 'deepseek': deepseek_client, 'grok': grok_client, 'gemini': gemini_client } def validate_api_keys(): """ Validate that required API keys are available. Returns: dict: Dictionary with validation results for each API """ validation_results = { 'openrouter': bool(OPENROUTER_API_KEY), 'deepseek': bool(DEEPSEEK_API_KEY), 'grok': bool(GROK_API_KEY), 'gemini': bool(GOOGLE_API_KEY) } missing_keys = [key for key, available in validation_results.items() if not available] if missing_keys: logger.warning(f"Missing API keys for: {', '.join(missing_keys)}") return validation_results