Spaces:
Sleeping
Sleeping
| import logging | |
| import requests | |
| import google.generativeai as genai | |
| from openai import OpenAI | |
| from app.core.config import settings | |
| import os | |
| logger = logging.getLogger(__name__) | |
| def validate_openai_key(): | |
| """Validates the OpenAI API key by making a small test request.""" | |
| if not settings.OPENAI_API_KEY: | |
| logger.warning("OpenAI API key is not set. OpenAI features will use mock data.") | |
| return False | |
| try: | |
| client = OpenAI(api_key=settings.OPENAI_API_KEY) | |
| response = client.models.list() | |
| logger.info(f"OpenAI API key is valid. Available models: {len(response.data)} models") | |
| logger.info(f"Using OpenAI model: {settings.OPENAI_MODEL}") | |
| return True | |
| except Exception as e: | |
| logger.error(f"OpenAI API key validation failed: {str(e)}") | |
| return False | |
| def validate_perplexity_key(): | |
| """Validates the Perplexity API key by making a small test request.""" | |
| perplexity_api_key = os.getenv("PERPLEXITY_API_KEY", "") | |
| if not perplexity_api_key: | |
| logger.warning("Perplexity API key is not set. Perplexity features will use mock data.") | |
| return False | |
| try: | |
| headers = { | |
| "Authorization": f"Bearer {perplexity_api_key}", | |
| "Content-Type": "application/json" | |
| } | |
| # Simple test query to validate API key | |
| data = { | |
| "model": "sonar", | |
| "messages": [{"role": "user", "content": "Hello, can you respond with 'API key is valid'?"}], | |
| "stream": False | |
| } | |
| response = requests.post( | |
| "https://api.perplexity.ai/chat/completions", | |
| headers=headers, | |
| json=data | |
| ) | |
| if response.status_code == 200: | |
| logger.info("Perplexity API key is valid") | |
| return True | |
| else: | |
| logger.error(f"Perplexity API key validation failed. Status code: {response.status_code}, Response: {response.text}") | |
| return False | |
| except Exception as e: | |
| logger.error(f"Perplexity API key validation failed: {str(e)}") | |
| return False | |
| def validate_gemini_key(): | |
| """Validates the Gemini API key by making a small test request.""" | |
| if not settings.GEMINI_API_KEY: | |
| logger.warning("Gemini API key is not set. Gemini features will use mock data.") | |
| return False | |
| try: | |
| genai.configure(api_key=settings.GEMINI_API_KEY) | |
| # List available models to validate key | |
| models = genai.list_models() | |
| model_names = [model.name for model in models] | |
| # Check if the configured model is available | |
| if f"models/{settings.GEMINI_MODEL}" in model_names or any(settings.GEMINI_MODEL in name for name in model_names): | |
| logger.info(f"Gemini API key is valid. Using model: {settings.GEMINI_MODEL}") | |
| return True | |
| else: | |
| available_models = ", ".join(model_names) | |
| logger.warning(f"Gemini API key is valid but the configured model '{settings.GEMINI_MODEL}' may not be available. Available models: {available_models}") | |
| return True | |
| except Exception as e: | |
| logger.error(f"Gemini API key validation failed: {str(e)}") | |
| return False | |
| def validate_all_api_keys(): | |
| """Validates all API keys and returns a dictionary with validation results.""" | |
| openai_valid = validate_openai_key() | |
| perplexity_valid = validate_perplexity_key() | |
| gemini_valid = validate_gemini_key() | |
| return { | |
| "openai": openai_valid, | |
| "perplexity": perplexity_valid, | |
| "gemini": gemini_valid | |
| } |