startuppalrag / app /utils /api_validator.py
kashif12123's picture
Upload 78 files
e34506d verified
Raw
History Blame Contribute Delete
3.63 kB
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
}