Spaces:
Running
Running
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
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 |
-
|
| 120 |
-
|
| 121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
|
|
|
|
|
|
|
|
|
| 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=
|
| 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-
|
| 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 |
|