Spaces:
Sleeping
Sleeping
import asyncpg | |
import logging | |
from typing import List, Dict, Any, Union | |
from config.settings import DATABASE_URL | |
logger = logging.getLogger(__name__) | |
async def fetch_models_for_group(resource_group: str) -> List[Dict[str, Any]]: | |
"""Récupérer les détails des modèles depuis la base de données pour un groupe de ressources spécifique. | |
Args: | |
resource_group: Identifiant du groupe de ressources | |
Returns: | |
Liste de dictionnaires contenant les informations des modèles | |
Raises: | |
Exception: Si une erreur se produit lors de la connexion ou de la requête | |
""" | |
conn = None | |
try: | |
# Désactiver le cache des prepared statements pour compatibilité avec pgbouncer | |
conn = await asyncpg.connect(DATABASE_URL, statement_cache_size=0) | |
logger.info(f"Successfully connected to database") | |
# Récupérer les modèles spécifiques à ce groupe | |
query = """ | |
SELECT | |
model_id, | |
display_name, | |
hf_repo_id, | |
hf_subfolder, | |
hf_filename, | |
updated_at | |
FROM models | |
WHERE hf_resource_group = $1 | |
""" | |
rows = await conn.fetch(query, resource_group) | |
logger.info(f"Found {len(rows)} models for group '{resource_group}'") | |
return [dict(row) for row in rows] | |
except Exception as e: | |
logger.error(f"Database error: {e}", exc_info=True) | |
raise | |
finally: | |
if conn and not conn.is_closed(): | |
await conn.close() | |
logger.debug("Database connection closed") | |
async def fetch_model_by_id(model_id: str) -> Union[Dict[str, Any], None]: | |
"""Récupérer les détails d'un modèle spécifique par son ID de base de données. | |
Args: | |
model_id: L'ID du modèle dans la base de données (peut être int ou str selon le schéma). | |
Returns: | |
Un dictionnaire contenant les informations du modèle si trouvé, sinon None. | |
Raises: | |
Exception: Si une erreur se produit lors de la connexion ou de la requête. | |
""" | |
conn = None | |
try: | |
# Désactiver le cache des prepared statements pour compatibilité avec pgbouncer | |
conn = await asyncpg.connect(DATABASE_URL, statement_cache_size=0) | |
logger.debug(f"Successfully connected to database to fetch model ID: {model_id}") | |
# Récupérer le modèle spécifique par son ID | |
query = """ | |
SELECT | |
model_id, | |
display_name, | |
hf_repo_id, | |
hf_subfolder, | |
hf_filename, | |
updated_at | |
FROM models | |
WHERE model_id = $1 | |
""" | |
row = await conn.fetchrow(query, model_id) | |
if row: | |
logger.info(f"Found model with ID '{model_id}': {row['display_name']}") | |
return dict(row) | |
else: | |
logger.warning(f"No model found with ID '{model_id}'") | |
return None | |
except Exception as e: | |
logger.error(f"Database error fetching model ID {model_id}: {e}", exc_info=True) | |
raise | |
finally: | |
if conn and not conn.is_closed(): | |
await conn.close() | |
logger.debug(f"Database connection closed after fetching model ID: {model_id}") | |