TalentLensAI / config.py
Johnny
feat: Add OpenAI client configuration
8def571
# === Imports ===
import os
import time
import requests
import socket
from dotenv import load_dotenv
from supabase import create_client
from sentence_transformers import SentenceTransformer
from openai import OpenAI
# === Load Environment Variables ===
load_dotenv()
# === OpenAI Configuration ===
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
if not OPENAI_API_KEY:
raise ValueError("OPENAI_API_KEY is not set in the environment variables.")
openai_client = OpenAI(api_key=OPENAI_API_KEY)
# === Supabase Configuration ===
SUPABASE_URL = "https://lmpazoxzucnlqqxjoihi.supabase.co"
SUPABASE_KEY = os.getenv("SUPABASE_API_KEY")
if not SUPABASE_KEY:
raise ValueError("SUPABASE_KEY is not set in the environment variables.")
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
# === Embedding Model for Scoring ===
embedding_model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# === Hugging Face API Configuration ===
HF_API_TOKEN = os.getenv("HF_API_TOKEN")
if not HF_API_TOKEN:
raise ValueError("Missing Hugging Face API key. Check your .env file.")
# Headers for API requests
HF_HEADERS = {"Authorization": f"Bearer {HF_API_TOKEN}"}
# === Hugging Face Model Endpoints ===
HF_ENDPOINTS = {
"bart-large-cnn-ovt": {
"url": "https://hedemwou4oqkk65c.us-east-1.aws.endpoints.huggingface.cloud",
"task": "summarization",
"model_id": "facebook/bart-large-cnn"
},
"vzwjawyxvu030jsw": { # Updated endpoint name to match URL
"url": "https://vzwjawyxvu030jsw.us-east-1.aws.endpoints.huggingface.cloud",
"task": "text-generation",
"model_id": "google/gemma-7b"
}
}
def check_endpoint_status(endpoint_name: str) -> dict:
"""
Check the status of a private Hugging Face endpoint using DNS resolution
"""
if endpoint_name not in HF_ENDPOINTS:
return {
"status": "error",
"error": f"Unknown endpoint: {endpoint_name}"
}
try:
endpoint_info = HF_ENDPOINTS[endpoint_name]
hostname = endpoint_info['url'].replace('https://', '').split('/')[0]
# Try DNS resolution
try:
socket.gethostbyname(hostname)
# If DNS resolves, endpoint exists but may be stopped
return {
"status": "stopped",
"scaled": True,
"pending": 0,
"error": None
}
except socket.gaierror:
# If DNS fails, endpoint doesn't exist
return {
"status": "error",
"error": "Endpoint not found"
}
except Exception as e:
return {
"status": "error",
"error": str(e)
}
def toggle_endpoint(endpoint_name: str, action: str) -> dict:
"""
Start or stop a private Hugging Face endpoint
"""
try:
# For private endpoints, use the Endpoints API
api_base = "https://api.endpoints.huggingface.cloud"
action_url = f"{api_base}/v2/endpoint/{endpoint_name}/{action}"
response = requests.post(
action_url,
headers=HF_HEADERS,
timeout=10
)
if response.status_code in [200, 202]:
return {
"success": True,
"message": f"Successfully {action}ed endpoint"
}
else:
return {
"error": f"Failed to {action} endpoint: {response.text}"
}
except Exception as e:
return {
"error": f"Failed to {action} endpoint: {str(e)}"
}
# === Query Helper ===
def query(payload: dict, endpoint_name: str) -> dict:
"""
Send a query to a Hugging Face endpoint
"""
if endpoint_name not in HF_ENDPOINTS:
return {
"error": f"Unknown endpoint: {endpoint_name}"
}
endpoint_info = HF_ENDPOINTS[endpoint_name]
url = endpoint_info['url']
try:
response = requests.post(
url,
headers=HF_HEADERS,
json=payload,
timeout=30
)
if response.status_code == 200:
return response.json()
else:
return {
"error": f"Query failed with status {response.status_code}: {response.text}"
}
except Exception as e:
return {
"error": str(e)
}