Agent-evaluations / config.py
WilliamRabuel's picture
Update config.py
4f012e5 verified
import os
from typing import Dict, Any, Optional
class AgentConfig:
"""Configuration centralisée pour l'agent"""
# Modèles HuggingFace
ORCHESTRATOR_MODEL = "moonshotai/Kimi-K2-Instruct"
CODE_AGENT_MODEL = "moonshotai/Kimi-K2-Instruct"
VISION_MODEL = "Qwen/Qwen2.5-VL-72B-Instruct"
REASONING_MODEL = "deepseek-ai/DeepSeek-R1-0528"
# Configuration des timeouts (en secondes)
DEFAULT_TIMEOUT = 120
VISION_TIMEOUT = 180
REASONING_TIMEOUT = 180
WEB_REQUEST_TIMEOUT = 30
# Paramètres des modèles
DEFAULT_MAX_TOKENS = 4096
VISION_MAX_TOKENS = 2048
REASONING_MAX_TOKENS = 8192
# Températures des modèles
ORCHESTRATOR_TEMPERATURE = 0.1
CODE_TEMPERATURE = 0.0
VISION_TEMPERATURE = 0.1
REASONING_TEMPERATURE = 0.2
# Limites de sécurité
MAX_SEARCH_RESULTS = 15
MAX_SCRAPED_CONTENT_LENGTH = 10000
MAX_FILE_SIZE_MB = 50
MAX_CONVERSATION_HISTORY = 50
# Configuration des outils web
SEARCH_REGION = "fr-fr"
MAX_LINKS_PER_PAGE = 50
# Headers pour les requêtes web
DEFAULT_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'fr-FR,fr;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
}
# Configuration Selenium
SELENIUM_OPTIONS = [
"--headless",
"--no-sandbox",
"--disable-dev-shm-usage",
"--disable-gpu",
"--window-size=1920,1080",
"--disable-blink-features=AutomationControlled",
"--disable-extensions",
"--disable-plugins",
]
@classmethod
def get_hf_token(cls) -> Optional[str]:
"""Récupère le token HuggingFace depuis les variables d'environnement"""
return os.getenv("HF_TOKEN") or os.getenv("HUGGINGFACE_TOKEN")
@classmethod
def get_model_config(cls, model_type: str) -> Dict[str, Any]:
"""Retourne la configuration pour un type de modèle donné"""
configs = {
"orchestrator": {
"model": cls.ORCHESTRATOR_MODEL,
"max_tokens": cls.DEFAULT_MAX_TOKENS,
"temperature": cls.ORCHESTRATOR_TEMPERATURE,
"timeout": cls.DEFAULT_TIMEOUT
},
"code_agent": {
"model": cls.CODE_AGENT_MODEL,
"max_tokens": cls.DEFAULT_MAX_TOKENS,
"temperature": cls.CODE_TEMPERATURE,
"timeout": cls.DEFAULT_TIMEOUT
},
"vision": {
"model": cls.VISION_MODEL,
"max_tokens": cls.VISION_MAX_TOKENS,
"temperature": cls.VISION_TEMPERATURE,
"timeout": cls.VISION_TIMEOUT
},
"reasoning": {
"model": cls.REASONING_MODEL,
"max_tokens": cls.REASONING_MAX_TOKENS,
"temperature": cls.REASONING_TEMPERATURE,
"timeout": cls.REASONING_TIMEOUT
}
}
return configs.get(model_type, configs["orchestrator"])
@classmethod
def validate_environment(cls) -> Dict[str, Any]:
"""Valide l'environnement et retourne un rapport"""
report = {
"status": "ok",
"warnings": [],
"errors": [],
"environment": {}
}
# Vérifie le token HF
hf_token = cls.get_hf_token()
if not hf_token:
report["errors"].append("Token HuggingFace manquant (HF_TOKEN ou HUGGINGFACE_TOKEN)")
report["status"] = "error"
else:
report["environment"]["hf_token"] = "✅ Présent"
# Vérifie les variables d'environnement optionnelles
space_id = os.getenv("SPACE_ID")
space_host = os.getenv("SPACE_HOST")
if space_id:
report["environment"]["space_id"] = space_id
else:
report["warnings"].append("SPACE_ID non défini (mode local?)")
if space_host:
report["environment"]["space_host"] = space_host
else:
report["warnings"].append("SPACE_HOST non défini (mode local?)")
# Vérifie les imports critiques
try:
import smolagents
report["environment"]["smolagents"] = f"✅ v{smolagents.__version__}"
except ImportError:
report["errors"].append("smolagents non installé")
report["status"] = "error"
try:
import requests
report["environment"]["requests"] = "✅ Disponible"
except ImportError:
report["errors"].append("requests non installé")
report["status"] = "error"
# Avertissements si status n'est que warnings
if report["warnings"] and report["status"] == "ok":
report["status"] = "warning"
return report
@classmethod
def get_debug_info(cls) -> Dict[str, Any]:
"""Retourne les informations de debug"""
return {
"models": {
"orchestrator": cls.ORCHESTRATOR_MODEL,
"code_agent": cls.CODE_AGENT_MODEL,
"vision": cls.VISION_MODEL,
"reasoning": cls.REASONING_MODEL
},
"timeouts": {
"default": cls.DEFAULT_TIMEOUT,
"vision": cls.VISION_TIMEOUT,
"reasoning": cls.REASONING_TIMEOUT,
"web_request": cls.WEB_REQUEST_TIMEOUT
},
"limits": {
"max_search_results": cls.MAX_SEARCH_RESULTS,
"max_scraped_content": cls.MAX_SCRAPED_CONTENT_LENGTH,
"max_file_size_mb": cls.MAX_FILE_SIZE_MB,
"max_conversation_history": cls.MAX_CONVERSATION_HISTORY
},
"environment_validation": cls.validate_environment()
}