inference-api-g1 / db /models.py
alexfremont's picture
Disable prepared statement cache for pgbouncer compatibility
db280f4
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}")