Spaces:
Runtime error
Runtime error
| # Fonction pour lire et encoder une image en base64 | |
| import base64 | |
| import os | |
| from pathlib import Path | |
| import yt_dlp | |
| from dotenv import load_dotenv | |
| from smolagents import tool, ToolCallingAgent, LiteLLMModel | |
| import google.generativeai as genai | |
| from ressources_getter import DOWNLOAD_FOLDER, delete_tmp_files, create_download_folder_if_not_exist | |
| import mimetypes | |
| load_dotenv() | |
| def download_video_youtube(url : str)-> str | None: | |
| """ | |
| Télécharge une vidéo YouTube dans un dossier local. | |
| Args: | |
| url (str): URL de la vidéo YouTube | |
| Returns: | |
| file_path (str): Chemin du fichier téléchargé ou None en cas d'erreur | |
| """ | |
| try: | |
| # Créer le dossier de téléchargement s'il n'existe pas | |
| create_download_folder_if_not_exist() | |
| file_path = f'{DOWNLOAD_FOLDER}/tmp_video.mp4' | |
| # Configuration pour yt-dlp | |
| ydl_opts = { | |
| 'outtmpl': file_path, # Format du nom de fichier | |
| 'format': 'best[height<=720]', # Qualité maximale 720p (ajustable) | |
| 'noplaylist': True, # Télécharger seulement la vidéo, pas la playlist | |
| } | |
| # Télécharger la vidéo | |
| with yt_dlp.YoutubeDL(ydl_opts) as ydl: | |
| print(f"Téléchargement de: {url}") | |
| ydl.download([url]) | |
| print("Téléchargement terminé avec succès!") | |
| return file_path | |
| except Exception as e: | |
| print(f"Erreur lors du téléchargement: {str(e)}") | |
| return None | |
| def analyze_media_content(media_path: str, user_prompt: str) -> str: | |
| """ | |
| Analyse le contenu du média en utilisant Gemini 2.5 Flash via le SDK Google Generative AI. | |
| (Ce n'est pas LiteLLM qui fait l'appel multimodal ici, mais le SDK direct pour gérer les parties vidéo). | |
| Args: | |
| media_path (str): Chemin du fichier local à analyser. | |
| user_prompt (str): Requête de l'utilisateur pour guider l'analyse. | |
| Returns: | |
| str: Résultat de l'analyse du fichier. | |
| """ | |
| try: | |
| with open(media_path, "rb") as file: | |
| file_bytes = file.read() | |
| encoded_video = base64.b64encode(file_bytes).decode('utf-8') | |
| # Déterminer le type MIME du fichier | |
| mime_type, encoding = mimetypes.guess_type(media_path) | |
| file_part = { | |
| "inline_data": { | |
| "mime_type": mime_type, | |
| "data": encoded_video | |
| } | |
| } | |
| genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) # Assure que l'API Key est configurée | |
| model = genai.GenerativeModel('gemini-2.5-flash') # Utilise le modèle directement via le SDK | |
| response = model.generate_content([user_prompt, file_part]) | |
| return response.text | |
| except Exception as e: | |
| return f"Erreur lors de l'analyse de la vidéo : {e}" | |
| def create_multimedia_agent(): | |
| """ | |
| Crée un agent multimédia capable de télécharger et d'analyser des vidéos YouTube. | |
| Il peut également analyser des fichiers multimédias locaux (vidéos, images, musique). | |
| Returns: | |
| BasicAgent: Instance de l'agent multimédia. | |
| """ | |
| gemini_flash_vlm_model = LiteLLMModel(model_id="gemini/gemini-2.5-flash", api_key=os.getenv("GOOGLE_API_KEY")) | |
| system_prompt = """Tu es un expert en analyse de vidéo,image et fichier son. Ton rôle est d'analyser les fichiers fournies en utilisant les outils à ta disposition. | |
| Lorsque tu reçois un lien d'une vidéo youtube, utilise la fonction 'download_video_youtube' pour télécharger la vidéo. | |
| Si tu as un fichier video,image ou son local, utilise la fonction 'analyze_media_content' pour analyser le contenu. | |
| Utilise tes outils pour répondre aux questions de l'utilisateur concernant le contenu du fichier. | |
| Fait bien attention à supprimer les fichiers temporaires téléchargées après analyse pour économiser de l'espace disque avec l'outil delete_tmp_files. | |
| Fournis un réponse concise et sans points ou virgules. | |
| """ | |
| # Crée l'agent en lui passant l'instance de LiteLLMModel | |
| video_agent = ToolCallingAgent( | |
| name="multimedia_analysis_agent", | |
| model=gemini_flash_vlm_model, # Passe l'instance LiteLLMModel ici | |
| tools=[analyze_media_content, download_video_youtube,delete_tmp_files], # Liste des outils que l'agent peut utiliser | |
| description=system_prompt, | |
| ) | |
| return video_agent | |