ソースを参照

[2.8.1] Finalisation analyse d'image

Penta 3 週間 前
コミット
e94b785776
1 ファイル変更38 行追加15 行削除
  1. 38 15
      chatbot.py

+ 38 - 15
chatbot.py

@@ -25,6 +25,7 @@ URL_OPENAI_API = os.getenv('URL_OPENAI_API', 'http://openwebui:8080/v1')
 TEMPERATURE = float(os.getenv('TEMPERATURE', "1.0"))
 BOOT_MESSAGE = os.getenv('BOOT_MESSAGE', "true").lower()
 LOG_LEVEL = os.getenv('LOG_LEVEL', "INFO").upper()
+HISTORY_ANALYSIS_IMAGE = os.getenv('HISTORY_ANALYSIS_IMAGE', "false").lower()
 
 # Initialiser le client OpenAI asynchrone ici
 openai_client = AsyncOpenAI(api_key=OPENAI_API_KEY, base_url=URL_OPENAI_API)
@@ -227,32 +228,47 @@ client_discord = MyDiscordClient(intents=intents)
 # Appeler la fonction pour charger l'historique au démarrage
 load_conversation_history()
 
-async def call_for_image_analysis(image_data, user_name, user_text=None, detail='high'):
+async def call_for_image_analysis(image_data, user_name, user_text=None):
     """Appelle l'API pour analyser une image."""
-    prompt = PERSONALITY_PROMPT
-    if user_text:
-        user_content = f"{user_name} a envoyé une image avec le messsage : \"{user_text}\"."
-    else:
-        user_content = f"{user_name} a envoyé une image:"
-    
-    prompt += user_content
+
+    user_content = (
+        f"{user_name} a envoyé une image avec le messsage : {transform_emote(user_text, False)}."
+        if user_text
+        else f"{user_name} a envoyé une image."
+    )
+
+    message_history = {
+        "role": "user",
+        "content": [{ "type": "text", "text": user_content }]
+    }
+
+    prompt = {
+        "role": "system",
+        "content": PERSONALITY_PROMPT
+    }
     
     message_to_send = {
         "role": "user",
         "content": [
-            {"type": "text", "text": prompt},
+            {
+                "type": "text",
+                "text": user_content
+            },
             {
                 "type": "image_url",
                 "image_url": {
-                    "url": f"data:image/jpeg;base64,{image_data}",
-                    "detail": detail
+                    "url": f"data:image/jpeg;base64,{image_data}"
                 }
             }
         ]
     }
 
-    user_message = {"role": "user", "content": user_content}
-    messages = [user_message] + [message_to_send] + conversation_history
+    if HISTORY_ANALYSIS_IMAGE != "false":
+        messages = [prompt] + conversation_history + [message_to_send]
+    else:
+        messages = [prompt] + [message_to_send]
+
+    await add_to_conversation_history(message_history)
 
     analysis = await openai_client.chat.completions.create(
         model=MODEL,
@@ -261,11 +277,18 @@ async def call_for_image_analysis(image_data, user_name, user_text=None, detail=
         temperature=TEMPERATURE
     )
 
-    if analysis:
+    if not analysis or not getattr(analysis, "choices", None):
+        raise RuntimeError("Réponse API invalide ou vide")
+    else:
         logger.info(f"Analyse de l'image par l'API : {analysis.choices[0].message.content}")
 
+    await add_to_conversation_history({
+        "role": "assistant",
+        "content": analysis.choices[0].message.content
+    })
+
     return analysis.choices[0].message.content
-    
+
 
 async def call_openai_api(user_text, user_name, detail='high'):
     # Préparer le contenu pour l'appel API