|
|
@@ -22,13 +22,15 @@ CONVERSATION_HISTORY_FILE = os.getenv('CONVERSATION_HISTORY_FILE', 'conversation
|
|
|
CONVERSATION_HISTORY_SIZE = int(os.getenv('CONVERSATION_HISTORY_SIZE', '100'))
|
|
|
BOT_NAME = os.getenv('BOT_NAME', 'ChatBot')
|
|
|
MODEL = os.getenv('MODEL', 'llama:3.2')
|
|
|
-URL_OPENAI_API = os.getenv('URL_OPENAI_API', 'http://localai.localai.svc.cluster.local:8080/v1')
|
|
|
+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()
|
|
|
|
|
|
# Initialiser le client OpenAI asynchrone ici
|
|
|
openai_client = AsyncOpenAI(api_key=OPENAI_API_KEY, base_url=URL_OPENAI_API)
|
|
|
|
|
|
-BOT_VERSION = "2.8.0-beta"
|
|
|
+BOT_VERSION = "2.8.1-beta"
|
|
|
|
|
|
# Vérifier que les tokens et le prompt de personnalité sont récupérés
|
|
|
if DISCORD_TOKEN is None or OPENAI_API_KEY is None or DISCORD_CHANNEL_ID is None:
|
|
|
@@ -43,7 +45,7 @@ with open(PERSONALITY_PROMPT_FILE, 'r', encoding='utf-8') as f:
|
|
|
|
|
|
# Log configuration
|
|
|
log_format = '%(asctime)-13s : %(name)-15s : %(levelname)-8s : %(message)s'
|
|
|
-logging.basicConfig(handlers=[logging.FileHandler("./chatbot.log", 'a', 'utf-8')], format=log_format, level="INFO")
|
|
|
+logging.basicConfig(handlers=[logging.FileHandler("./chatbot.log", 'a', 'utf-8')], format=log_format, level=LOG_LEVEL)
|
|
|
|
|
|
console = logging.StreamHandler()
|
|
|
console.setLevel(logging.DEBUG)
|
|
|
@@ -261,6 +263,7 @@ async def call_for_image_analysis(image_data, user_name, user_text=None, detail=
|
|
|
|
|
|
if analysis:
|
|
|
logger.info(f"Analyse de l'image par l'API : {analysis.choices[0].message.content}")
|
|
|
+
|
|
|
return analysis.choices[0].message.content
|
|
|
|
|
|
|
|
|
@@ -281,19 +284,17 @@ async def call_openai_api(user_text, user_name, detail='high'):
|
|
|
try:
|
|
|
response = await openai_client.chat.completions.create(
|
|
|
model=MODEL,
|
|
|
+ stream=False,
|
|
|
messages=messages,
|
|
|
temperature=TEMPERATURE
|
|
|
)
|
|
|
|
|
|
- if response:
|
|
|
- reply = response.choices[0].message.content
|
|
|
-
|
|
|
await add_to_conversation_history(message_to_send)
|
|
|
|
|
|
# Ajouter la réponse de l'IA directement à l'historique
|
|
|
await add_to_conversation_history({
|
|
|
"role": "assistant",
|
|
|
- "content": reply
|
|
|
+ "content": response.choices[0].message.content
|
|
|
})
|
|
|
|
|
|
return response
|
|
|
@@ -313,18 +314,19 @@ async def on_ready():
|
|
|
# Envoyer un message de version dans le canal Discord
|
|
|
channel = client_discord.get_channel(discord_channel_id)
|
|
|
if channel:
|
|
|
- try:
|
|
|
- embed = discord.Embed(
|
|
|
- title=f"Bot Démarré",
|
|
|
- description=f"🎉 {BOT_NAME} est en ligne ! Version {BOT_VERSION}\nUtilisation du modèle: **{MODEL}**",
|
|
|
- color=0x2222aa # Bleu
|
|
|
- )
|
|
|
- await channel.send(embed=embed)
|
|
|
- logger.info(f"Message de connexion envoyé dans le canal ID {discord_channel_id}")
|
|
|
- except discord.Forbidden:
|
|
|
- logger.error(f"Permissions insuffisantes pour envoyer des messages dans le canal ID {discord_channel_id}.")
|
|
|
- except discord.HTTPException as e:
|
|
|
- logger.error(f"Erreur lors de l'envoi du message de connexion : {e}")
|
|
|
+ if BOOT_MESSAGE != "false":
|
|
|
+ try:
|
|
|
+ embed = discord.Embed(
|
|
|
+ title=f"Bot Démarré",
|
|
|
+ description=f"🎉 {BOT_NAME} est en ligne ! Version {BOT_VERSION}\nUtilisation du modèle: **{MODEL}**",
|
|
|
+ color=0x2222aa # Bleu
|
|
|
+ )
|
|
|
+ await channel.send(embed=embed)
|
|
|
+ logger.info(f"Message de connexion envoyé dans le canal ID {discord_channel_id}")
|
|
|
+ except discord.Forbidden:
|
|
|
+ logger.error(f"Permissions insuffisantes pour envoyer des messages dans le canal ID {discord_channel_id}.")
|
|
|
+ except discord.HTTPException as e:
|
|
|
+ logger.error(f"Erreur lors de l'envoi du message de connexion : {e}")
|
|
|
else:
|
|
|
logger.error(f"Canal avec ID {discord_channel_id} non trouvé.")
|
|
|
|