Spaces:
Sleeping
Sleeping
File size: 3,625 Bytes
e34506d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 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
} |