diff --git a/modules/ai_engine.py b/modules/ai_engine.py index 5529da3..516a5dc 100644 --- a/modules/ai_engine.py +++ b/modules/ai_engine.py @@ -25,8 +25,16 @@ def interroger_gemini_cascade(prompt): raise Exception("Tous les modèles Gemini sont indisponibles actuellement.") def appeler_groq_api(prompt_text): - resp = groq_client.chat.completions.create( - messages=[{"role": "system", "content": "Réponds dans la langue de l'utilisateur. Tu as accès aux recherches web fournies. Utilise uniquement Markdown. Pas de code LaTeX."}, {"role": "user", "content": prompt_text}], - model="mixtral-8x7b-32768" # 🛠️ CORRECTION : Modèle Groq stable avec 32 768 tokens de contexte - ) - return resp.choices[0].message.content, "#f97316", "GROQ", "mixtral-8x7b-32768" \ No newline at end of file + # 🔄 Cascade de secours automatique pour les modèles Groq + modeles_groq_a_tester = ["llama-3.3-70b-versatile", "llama-3.1-8b-instant", "llama3-70b-8192"] + for nom_modele in modeles_groq_a_tester: + try: + resp = groq_client.chat.completions.create( + messages=[{"role": "system", "content": "Réponds dans la langue de l'utilisateur. Tu as accès aux recherches web fournies. Utilise uniquement Markdown. Pas de code LaTeX."}, {"role": "user", "content": prompt_text}], + model=nom_modele + ) + if resp and resp.choices: + return resp.choices[0].message.content, "#f97316", "GROQ", nom_modele + except Exception: + continue + raise Exception("Tous les modèles Groq sont décommissionnés ou indisponibles.") \ No newline at end of file diff --git a/modules/chat_handler.py b/modules/chat_handler.py index 1ffb4ff..65570b3 100644 --- a/modules/chat_handler.py +++ b/modules/chat_handler.py @@ -19,7 +19,6 @@ async def handle_chat_request(request, session): history = load_history() - # Extraction des fichiers file_summary = [] file_names = [] for f in files[:10]: @@ -42,7 +41,6 @@ async def handle_chat_request(request, session): decision = nettoyer_decision_router(router_res.choices[0].message.content) intention, fournisseur = decision.get('intention', 'Analyse'), decision.get('fournisseur', 'gemini').lower() - # 🛡️ PROTECTION HARDCODÉE : Si des fichiers sont présents, forcer Gemini if file_names: fournisseur = "gemini" intention += " (Forcé Gemini via Sécurité)" @@ -58,7 +56,6 @@ async def handle_chat_request(request, session): if web_text: full_prompt += f"\n\n[Contexte web extrait :\n{web_text}\nUtilise ces informations pour répondre précisément.]" - # Routage avec Fallback robuste if fournisseur == "gemini": try: reponse, modele = interroger_gemini_cascade(full_prompt) @@ -70,7 +67,6 @@ async def handle_chat_request(request, session): try: reponse, couleur, fournisseur_nom, modele = appeler_groq_api(full_prompt) except Exception as e: - # 🛡️ FALLBACK GROQ -> GEMINI EN CAS DE DÉPASSEMENT DE CONTEXTE OU ERREUR reponse, modele = interroger_gemini_cascade(full_prompt) couleur, fournisseur_nom = "#3b82f6", "GOOGLE GEMINI" intention += " (Secours suite Erreur Groq)"