Spaces:
Sleeping
Sleeping
Mise en forme
Browse files- quick_deploy_agent.py +40 -0
quick_deploy_agent.py
CHANGED
|
@@ -384,3 +384,43 @@ class Resolve(Tool):
|
|
| 384 |
final = ranked[0]; alts = ranked[1:1+max(0,int(topn))]
|
| 385 |
exp = f"Choix {final['code']} (score {final['score_final']:.2f}) – votes={final['votes']} – raisons: {', '.join(sorted(set(final['evidences'])))}"
|
| 386 |
return {"final": final, "alternatives": alts, "explanation": exp}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 384 |
final = ranked[0]; alts = ranked[1:1+max(0,int(topn))]
|
| 385 |
exp = f"Choix {final['code']} (score {final['score_final']:.2f}) – votes={final['votes']} – raisons: {', '.join(sorted(set(final['evidences'])))}"
|
| 386 |
return {"final": final, "alternatives": alts, "explanation": exp}
|
| 387 |
+
|
| 388 |
+
|
| 389 |
+
|
| 390 |
+
def build_agent(model_id: str | None = None) -> CodeAgent:
|
| 391 |
+
model_id = model_id or "Qwen/Qwen2.5-Coder-7B-Instruct" # léger pour tester
|
| 392 |
+
agent = CodeAgent(
|
| 393 |
+
tools=[ValidateEANTool(), OFFByEAN(), RegexCOICOP(), OFFtoCOICOP(), SemSim(), Resolve()],
|
| 394 |
+
model=InferenceClientModel(model_id=model_id),
|
| 395 |
+
add_base_tools=False,
|
| 396 |
+
max_steps=6,
|
| 397 |
+
verbosity_level=2,
|
| 398 |
+
)
|
| 399 |
+
return agent
|
| 400 |
+
|
| 401 |
+
def parse_result(res):
|
| 402 |
+
if isinstance(res, dict): return res
|
| 403 |
+
try: return ast.literal_eval(res)
|
| 404 |
+
except Exception: return {"raw": res}
|
| 405 |
+
|
| 406 |
+
if __name__ == "__main__":
|
| 407 |
+
# Remplace par les vraies données si possible - uniquement du test
|
| 408 |
+
ean = "3256221112345" # EAN fictif (peut ne pas exister sur OFF)
|
| 409 |
+
label = "Camembert au lait cru AOP 250g - ALDI"
|
| 410 |
+
|
| 411 |
+
agent = build_agent()
|
| 412 |
+
task = f"""
|
| 413 |
+
Classe ce produit en COICOP:
|
| 414 |
+
EAN: {ean}
|
| 415 |
+
Libellé: {label}
|
| 416 |
+
Pipeline:
|
| 417 |
+
1) validate_ean(ean)
|
| 418 |
+
2) openfoodfacts_product_by_ean(ean) # si OFF ne trouve pas, on s'appuie sur regex + embeddings
|
| 419 |
+
3) map_off_to_coicop(product_name, categories_tags, ingredients_text)
|
| 420 |
+
4) coicop_regex_rules(text=libellé)
|
| 421 |
+
5) coicop_semantic_similarity(text=libellé, topk=5)
|
| 422 |
+
6) resolve_coicop_candidates([...], topn=3)
|
| 423 |
+
Attend un JSON final.
|
| 424 |
+
"""
|
| 425 |
+
out = agent.run(task)
|
| 426 |
+
print(parse_result(out))
|