Spaces:
Running
Running
Update agent.py
Browse files
agent.py
CHANGED
|
@@ -208,68 +208,68 @@ class BasicAgent:
|
|
| 208 |
self.agent = None
|
| 209 |
|
| 210 |
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
|
|
|
|
|
|
| 217 |
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
|
|
|
| 221 |
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 245 |
)
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
|
| 254 |
-
elif url_from_meta.startswith("http://googleusercontent.com/youtube.com/"):
|
| 255 |
-
print("📹 C'est une URL YouTube, récupération de la transcription...")
|
| 256 |
-
transcript_result = get_youtube_transcript(url_from_meta)
|
| 257 |
-
if "error" in transcript_result:
|
| 258 |
-
context_from_url = f"Error getting transcript: {transcript_result['error']}"
|
| 259 |
-
else:
|
| 260 |
-
context_from_url = f"Here is the transcript of the video:\n{transcript_result['transcript']}"
|
| 261 |
-
|
| 262 |
-
# On construit le prompt augmenté pour l'agent
|
| 263 |
-
if context_from_url:
|
| 264 |
-
augmented_prompt = (
|
| 265 |
-
f"CONTEXTUAL INFORMATION:\n---\n{context_from_url}\n---\n"
|
| 266 |
-
f"Based on the context above, please answer the following question:\n{question}"
|
| 267 |
-
)
|
| 268 |
-
print(f"✨ Prompt augmenté pour l'agent.")
|
| 269 |
-
|
| 270 |
-
try:
|
| 271 |
-
return self.agent.run(augmented_prompt)
|
| 272 |
-
except Exception as e:
|
| 273 |
-
import traceback
|
| 274 |
-
print(f"❌ Erreur irrécupérable lors du traitement par MonAgent: {e}\n{traceback.format_exc()}")
|
| 275 |
-
return f"Une erreur irrécupérable s'est produite: {e}"
|
|
|
|
| 208 |
self.agent = None
|
| 209 |
|
| 210 |
|
| 211 |
+
def __call__(self, question: str, metadata: dict = None) -> str:
|
| 212 |
+
"""
|
| 213 |
+
Le point d'entrée de l'agent. Gère la pré-analyse en utilisant les métadonnées fournies.
|
| 214 |
+
"""
|
| 215 |
+
if self.agent is None:
|
| 216 |
+
return "Erreur: L'agent n'a pas pu être initialisé."
|
| 217 |
+
|
| 218 |
+
print(f"\n{'='*40}\n🤖 NOUVELLE QUESTION: {question}\n{'='*40}")
|
| 219 |
|
| 220 |
+
augmented_prompt = question
|
| 221 |
+
|
| 222 |
+
if metadata:
|
| 223 |
+
url_from_meta = metadata.get("url") or metadata.get("video_url") or metadata.get("image_url")
|
| 224 |
|
| 225 |
+
if url_from_meta:
|
| 226 |
+
print(f"🔗 URL trouvée dans les métadonnées : {url_from_meta}")
|
| 227 |
+
context_from_url = ""
|
| 228 |
+
|
| 229 |
+
# On vérifie si l'URL est une image
|
| 230 |
+
image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']
|
| 231 |
+
is_image = any(url_from_meta.lower().endswith(ext) for ext in image_extensions)
|
| 232 |
+
|
| 233 |
+
# logique images
|
| 234 |
+
if is_image:
|
| 235 |
+
print("🖼️ C'est une URL d'image, analyse avec le modèle de vision...")
|
| 236 |
+
try:
|
| 237 |
+
vision_model = ModelManager().get_vision_model()
|
| 238 |
+
# On demande au modèle de vision de décrire l'image en détail
|
| 239 |
+
# pour aider l'agent principal à répondre à la question.
|
| 240 |
+
vision_response = vision_model.generate(
|
| 241 |
+
[{"role": "user", "content": [
|
| 242 |
+
{"type": "text", "text": f"Describe this image in detail. This description will be used to answer the following question: '{question}'"},
|
| 243 |
+
{"type": "image_url", "image_url": {"url": url_from_meta}}
|
| 244 |
+
]}]
|
| 245 |
+
)
|
| 246 |
+
context_from_url = f"Here is a detailed description of the image provided:\n{vision_response.content}"
|
| 247 |
+
print("✅ Description de l'image obtenue.")
|
| 248 |
+
except Exception as e:
|
| 249 |
+
error_msg = f"Erreur lors de l'analyse de l'image : {e}"
|
| 250 |
+
print(f"❌ {error_msg}")
|
| 251 |
+
context_from_url = error_msg
|
| 252 |
+
|
| 253 |
+
# logique vidéos
|
| 254 |
+
elif url_from_meta.startswith("http://googleusercontent.com/youtube.com/"):
|
| 255 |
+
print("📹 C'est une URL YouTube, récupération de la transcription...")
|
| 256 |
+
transcript_result = get_youtube_transcript(url_from_meta)
|
| 257 |
+
if "error" in transcript_result:
|
| 258 |
+
context_from_url = f"Error getting transcript: {transcript_result['error']}"
|
| 259 |
+
else:
|
| 260 |
+
context_from_url = f"Here is the transcript of the video:\n{transcript_result['transcript']}"
|
| 261 |
+
|
| 262 |
+
# On construit le prompt augmenté pour l'agent
|
| 263 |
+
if context_from_url:
|
| 264 |
+
augmented_prompt = (
|
| 265 |
+
f"CONTEXTUAL INFORMATION:\n---\n{context_from_url}\n---\n"
|
| 266 |
+
f"Based on the context above, please answer the following question:\n{question}"
|
| 267 |
)
|
| 268 |
+
print(f"✨ Prompt augmenté pour l'agent.")
|
| 269 |
+
|
| 270 |
+
try:
|
| 271 |
+
return self.agent.run(augmented_prompt)
|
| 272 |
+
except Exception as e:
|
| 273 |
+
import traceback
|
| 274 |
+
print(f"❌ Erreur irrécupérable lors du traitement par MonAgent: {e}\n{traceback.format_exc()}")
|
| 275 |
+
return f"Une erreur irrécupérable s'est produite: {e}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|