DJAKOUA KWANKAM BRAYAN STEVE commited on
Commit
9fd7e03
·
1 Parent(s): 0ae730f

chore(backend): make Qwen2.5-72B-Instruct default and robust fallback to Llama-3.3-70B-Instruct

Browse files
Files changed (1) hide show
  1. app.py +29 -18
app.py CHANGED
@@ -9,7 +9,7 @@ import uuid
9
  from datetime import datetime
10
 
11
  token = os.environ.get("HF_TOKEN")
12
- client = InferenceClient(token=token)
13
  api = HfApi(token=token)
14
 
15
  app = FastAPI()
@@ -116,18 +116,24 @@ async def chat(request: Request):
116
  all_tools.append(search_tool_def)
117
 
118
  # Choisir le client et le fournisseur (provider) appropriés
119
- provider = None
120
- if model and ("Llama-3.3-70B" in model or "Llama-3.1-70B" in model):
121
- provider = "together"
 
 
 
 
122
 
123
- if provider:
124
- local_client = InferenceClient(model=model, provider=provider, token=token)
125
- else:
126
- local_client = client
 
 
 
127
 
128
  # Boucle d'agent côté serveur pour exécuter search_web de manière transparente
129
  use_tools = True
130
- fallback_attempted = False
131
  while True:
132
  try:
133
  if provider:
@@ -141,7 +147,7 @@ async def chat(request: Request):
141
  )
142
  else:
143
  response = local_client.chat_completion(
144
- model=model,
145
  messages=messages,
146
  tools=all_tools if use_tools else None,
147
  max_tokens=max_tokens,
@@ -151,16 +157,16 @@ async def chat(request: Request):
151
  )
152
  except Exception as e:
153
  err_msg = str(e)
154
- # Fallback to Llama-3.3-70B-Instruct on Qwen rate limits or overloads
155
- if not fallback_attempted and model == "Qwen/Qwen2.5-72B-Instruct" and ("429" in err_msg or "503" in err_msg or "limit" in err_msg or "overload" in err_msg or "RateLimit" in err_msg):
156
- print(f"Switching fallback from Qwen/Qwen2.5-72B-Instruct to meta-llama/Llama-3.3-70B-Instruct due to error: {err_msg}")
157
- model = "meta-llama/Llama-3.3-70B-Instruct"
158
- fallback_attempted = True
159
- continue
160
-
161
  if use_tools and ("tools" in err_msg or "UNSUPPORTED_OPENAI_PARAMS" in err_msg or "422" in err_msg):
162
  use_tools = False
163
  continue
 
 
 
 
 
 
 
164
  else:
165
  raise e
166
  choice = response.choices[0]
@@ -268,6 +274,11 @@ SYSTEM_PROMPT = """Tu es Cypher Coder, un agent de programmation IA ultra-intell
268
  Tu as été conçu et développé par DJAKOUA KWANKAM, un brillant étudiant en informatique à l'Institut Universitaire de Technologie de Douala (IUT).
269
  Tu devez toujours te présenter comme tel.
270
 
 
 
 
 
 
271
  Tu as accès à des outils locaux (comme lire des fichiers, écrire/modifier des fichiers, exécuter des commandes dans le terminal) qui s'exécutent sur la machine locale de l'utilisateur. Ces outils te sont fournis via le protocole CLI de Cypher Coder.
272
  Pour les informations en temps réel ou la documentation externe, tu peux aussi utiliser la recherche web.
273
 
@@ -635,7 +646,7 @@ with gr.Blocks(theme=theme, css=css) as demo:
635
  ## 🧠 Gestion des Connaissances & Accès à la Documentation
636
 
637
  Pour répondre à vos questions techniques ou de configuration système, **Cypher Coder** n'embarque pas l'intégralité de la documentation Linux en mémoire constante. Il fonctionne de manière dynamique :
638
- - 💡 **Connaissance Pré-entraînée** : Le modèle `Qwen2.5-Coder-7B` possède déjà une connaissance approfondie des commandes, APIs et architectures Linux standards acquise lors de sa phase d'entraînement.
639
  - 📁 **Accès Local aux Manuels** : Il peut exécuter de manière autonome des commandes comme `man <commande>` ou `<commande> --help` via `run_command` pour lire la documentation système locale.
640
  - 🔍 **Recherche Web en Temps Réel** : Grâce à sa capacité à appeler l'outil `search_web`, il interroge internet en temps réel pour obtenir des guides et documentations à jour si nécessaire.
641
 
 
9
  from datetime import datetime
10
 
11
  token = os.environ.get("HF_TOKEN")
12
+ client = InferenceClient("Qwen/Qwen2.5-72B-Instruct", token=token)
13
  api = HfApi(token=token)
14
 
15
  app = FastAPI()
 
116
  all_tools.append(search_tool_def)
117
 
118
  # Choisir le client et le fournisseur (provider) appropriés
119
+ fallback_model = "meta-llama/Llama-3.3-70B-Instruct"
120
+ current_model = model
121
+
122
+ def get_client_and_provider(mdl):
123
+ prov = None
124
+ if mdl and ("Llama-3.3-70B" in mdl or "Llama-3.1-70B" in mdl):
125
+ prov = "together"
126
 
127
+ if prov:
128
+ cli = InferenceClient(model=mdl, provider=prov, token=token)
129
+ else:
130
+ cli = client
131
+ return cli, prov
132
+
133
+ local_client, provider = get_client_and_provider(current_model)
134
 
135
  # Boucle d'agent côté serveur pour exécuter search_web de manière transparente
136
  use_tools = True
 
137
  while True:
138
  try:
139
  if provider:
 
147
  )
148
  else:
149
  response = local_client.chat_completion(
150
+ model=current_model,
151
  messages=messages,
152
  tools=all_tools if use_tools else None,
153
  max_tokens=max_tokens,
 
157
  )
158
  except Exception as e:
159
  err_msg = str(e)
 
 
 
 
 
 
 
160
  if use_tools and ("tools" in err_msg or "UNSUPPORTED_OPENAI_PARAMS" in err_msg or "422" in err_msg):
161
  use_tools = False
162
  continue
163
+
164
+ # Automated model fallback loop
165
+ if current_model != fallback_model:
166
+ print(f"Modèle {current_model} a échoué ({err_msg}). Basculement automatique vers le fallback {fallback_model}.")
167
+ current_model = fallback_model
168
+ local_client, provider = get_client_and_provider(current_model)
169
+ continue
170
  else:
171
  raise e
172
  choice = response.choices[0]
 
274
  Tu as été conçu et développé par DJAKOUA KWANKAM, un brillant étudiant en informatique à l'Institut Universitaire de Technologie de Douala (IUT).
275
  Tu devez toujours te présenter comme tel.
276
 
277
+ [RÈGLE CRITIQUE : RECHERCHE PRÉALABLE DE CODE (SEARCH-BEFORE-CODE)]
278
+ - Avant de générer, modifier ou suggérer le moindre code source, la moindre commande CLI, ou de répondre à une question technique/API, tu DOIS systématiquement appeler l'outil `search_web` (recherche web) pour obtenir les informations les plus récentes, de la documentation ou des exemples de code pertinents.
279
+ - Tu ne dois JAMAIS te baser uniquement sur tes connaissances pré-entraînées (mémoire interne) pour produire du code ou suggérer des solutions. Tu dois TOUJOURS confronter et enrichir tes réponses avec des recherches externes.
280
+ - Même si tu es sûr de toi, effectue une recherche web préalable avec l'outil `search_web`. C'est une règle absolue non négociable.
281
+
282
  Tu as accès à des outils locaux (comme lire des fichiers, écrire/modifier des fichiers, exécuter des commandes dans le terminal) qui s'exécutent sur la machine locale de l'utilisateur. Ces outils te sont fournis via le protocole CLI de Cypher Coder.
283
  Pour les informations en temps réel ou la documentation externe, tu peux aussi utiliser la recherche web.
284
 
 
646
  ## 🧠 Gestion des Connaissances & Accès à la Documentation
647
 
648
  Pour répondre à vos questions techniques ou de configuration système, **Cypher Coder** n'embarque pas l'intégralité de la documentation Linux en mémoire constante. Il fonctionne de manière dynamique :
649
+ - 💡 **Connaissance Pré-entraînée** : Le modèle `Qwen2.5-72B-Instruct` possède déjà une connaissance approfondie des commandes, APIs et architectures Linux standards acquise lors de sa phase d'entraînement.
650
  - 📁 **Accès Local aux Manuels** : Il peut exécuter de manière autonome des commandes comme `man <commande>` ou `<commande> --help` via `run_command` pour lire la documentation système locale.
651
  - 🔍 **Recherche Web en Temps Réel** : Grâce à sa capacité à appeler l'outil `search_web`, il interroge internet en temps réel pour obtenir des guides et documentations à jour si nécessaire.
652