Spaces:
Build error
Build error
| #!/usr/bin/env python | |
| """ | |
| Script de test pour l'agent de parsing de leaderboard. | |
| Ce script permet de tester l'agent en standalone en lui donnant une URL. | |
| Usage: | |
| python test_agent.py <url> | |
| Exemple: | |
| python test_agent.py https://lmarena-ai-chatbot-arena-leaderboard.hf.space | |
| """ | |
| import json | |
| import os | |
| import sys | |
| import argparse | |
| import datetime | |
| from dotenv import load_dotenv | |
| # Assurez-vous que le répertoire parent est dans le chemin d'importation | |
| script_dir = os.path.dirname(os.path.abspath(__file__)) | |
| root_dir = os.path.dirname(script_dir) | |
| sys.path.insert(0, root_dir) | |
| from src.agent import get_default_model, process_leaderboard | |
| from src.browser import initialize_driver, close_driver, take_initial_screenshot | |
| def main(): | |
| """ | |
| Fonction principale qui teste l'agent sur une URL spécifiée. | |
| """ | |
| # Charger les variables d'environnement | |
| load_dotenv() | |
| # Parse command line arguments | |
| parser = argparse.ArgumentParser(description="Test de l'agent de parsing de leaderboard") | |
| parser.add_argument("url", help="URL du leaderboard à parser") | |
| parser.add_argument("--save", help="Chemin où sauvegarder le résultat JSON (optionnel)") | |
| parser.add_argument("--uid", help="UID à utiliser pour la capture d'écran (optionnel)") | |
| parser.add_argument("--wait", type=int, default=10, help="Temps d'attente initial en secondes (défaut: 10)") | |
| args = parser.parse_args() | |
| # Assurez-vous que nous sommes dans le bon répertoire | |
| os.chdir(root_dir) | |
| # Vérifier que la clé API est disponible | |
| if not os.getenv("OPENAI_API_KEY"): | |
| print("ERREUR: La variable d'environnement OPENAI_API_KEY n'est pas définie.") | |
| print("Veuillez créer un fichier .env à la racine du projet avec votre clé API.") | |
| print("Exemple: OPENAI_API_KEY=votre-clé-api") | |
| sys.exit(1) | |
| # Créer le répertoire d'images si nécessaire | |
| if args.uid: | |
| images_dir = os.path.join("data", "images") | |
| os.makedirs(images_dir, exist_ok=True) | |
| # Obtenir le modèle par défaut | |
| model = get_default_model() | |
| print(f"Test de l'agent sur l'URL: {args.url}") | |
| if args.uid: | |
| print(f"UID utilisé pour la capture d'écran: {args.uid}") | |
| print(f"Temps d'attente initial: {args.wait} secondes") | |
| # Initialiser le navigateur et prendre une capture d'écran initiale avec le temps d'attente personnalisé | |
| initialize_driver() | |
| if args.uid: | |
| # Remplacer la fonction take_initial_screenshot par une version personnalisée avec le temps d'attente spécifié | |
| import time | |
| from helium import go_to | |
| from io import BytesIO | |
| from PIL import Image | |
| # Naviguer vers l'URL | |
| go_to(args.url) | |
| # Attendre que la page se charge | |
| print(f"Attente de {args.wait} secondes pour le chargement complet de la page...") | |
| time.sleep(args.wait) | |
| # Prendre la capture d'écran | |
| from src.browser import driver | |
| png_bytes = driver.get_screenshot_as_png() | |
| image = Image.open(BytesIO(png_bytes)) | |
| # Sauvegarder la capture d'écran | |
| images_dir = os.path.join("data", "images") | |
| os.makedirs(images_dir, exist_ok=True) | |
| screenshot_path = os.path.join(images_dir, f"{args.uid}.png") | |
| image.save(screenshot_path) | |
| print(f"Capture d'écran initiale sauvegardée dans: {screenshot_path}") | |
| # Fermer le navigateur pour le réinitialiser | |
| close_driver() | |
| # Traiter le leaderboard | |
| result = process_leaderboard(args.url, model, 0, args.uid) | |
| # Ajouter des métadonnées | |
| result["url"] = args.url | |
| if args.uid: | |
| result["uid"] = args.uid | |
| result["screenshot"] = f"images/{args.uid}.png" if os.path.exists(os.path.join("data", "images", f"{args.uid}.png")) else None | |
| # Afficher le résultat en JSON | |
| json_result = json.dumps(result, indent=2) | |
| print("\nRésultat JSON:") | |
| print(json_result) | |
| # Sauvegarder le résultat si demandé | |
| if args.save: | |
| with open(args.save, "w") as f: | |
| f.write(json_result) | |
| print(f"\nRésultat sauvegardé dans: {args.save}") | |
| if __name__ == "__main__": | |
| main() |