|
@@ -25,6 +25,7 @@ URL_OPENAI_API = os.getenv('URL_OPENAI_API', 'http://openwebui:8080/v1')
|
|
|
TEMPERATURE = float(os.getenv('TEMPERATURE', "1.0"))
|
|
TEMPERATURE = float(os.getenv('TEMPERATURE', "1.0"))
|
|
|
BOOT_MESSAGE = os.getenv('BOOT_MESSAGE', "true").lower()
|
|
BOOT_MESSAGE = os.getenv('BOOT_MESSAGE', "true").lower()
|
|
|
LOG_LEVEL = os.getenv('LOG_LEVEL', "INFO").upper()
|
|
LOG_LEVEL = os.getenv('LOG_LEVEL', "INFO").upper()
|
|
|
|
|
+HISTORY_ANALYSIS_IMAGE = os.getenv('HISTORY_ANALYSIS_IMAGE', "false").lower()
|
|
|
|
|
|
|
|
# Initialiser le client OpenAI asynchrone ici
|
|
# Initialiser le client OpenAI asynchrone ici
|
|
|
openai_client = AsyncOpenAI(api_key=OPENAI_API_KEY, base_url=URL_OPENAI_API)
|
|
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
|
|
# Appeler la fonction pour charger l'historique au démarrage
|
|
|
load_conversation_history()
|
|
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."""
|
|
"""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 = {
|
|
message_to_send = {
|
|
|
"role": "user",
|
|
"role": "user",
|
|
|
"content": [
|
|
"content": [
|
|
|
- {"type": "text", "text": prompt},
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ "type": "text",
|
|
|
|
|
+ "text": user_content
|
|
|
|
|
+ },
|
|
|
{
|
|
{
|
|
|
"type": "image_url",
|
|
"type": "image_url",
|
|
|
"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(
|
|
analysis = await openai_client.chat.completions.create(
|
|
|
model=MODEL,
|
|
model=MODEL,
|
|
@@ -261,11 +277,18 @@ async def call_for_image_analysis(image_data, user_name, user_text=None, detail=
|
|
|
temperature=TEMPERATURE
|
|
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}")
|
|
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
|
|
return analysis.choices[0].message.content
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
async def call_openai_api(user_text, user_name, detail='high'):
|
|
async def call_openai_api(user_text, user_name, detail='high'):
|
|
|
# Préparer le contenu pour l'appel API
|
|
# Préparer le contenu pour l'appel API
|