Bracket : une bibliothèque Python qui évalue l’intégrité d’exécution des agents LLM sur la base de contrats
(github.com/dybala-21)Les agents LLM déclarent parfois « j’ai lu le fichier » ou « j’ai lancé les tests », alors qu’en réalité ils ont sauté ces étapes. Des frameworks d’agents comme LangGraph ou Google ADK exécutent bien les workflows, mais ne vérifient pas si les étapes requises ont réellement été effectuées.
Bracket est une petite bibliothèque Python conçue pour combler cet écart. Elle collecte des preuves pendant l’exécution (lecture de fichiers, modification de fichiers, exécution de commandes, appels LLM, etc.) et les compare à des conditions contractuelles définies à l’avance afin de produire mécaniquement un verdict pass/fail. Ce n’est pas le LLM qui juge, mais des règles définies dans le code.
Résolution de problèmes
- Détecte les cas où un agent prétend avoir modifié un fichier sans même l’avoir lu auparavant (read-before-write)
- Injecte de force dans le pipeline des étapes de vérification comme « confirmer que les tests passent »
- Conserve les logs d’exécution afin de rejuger d’anciennes exécutions en replay lorsque les règles de décision changent
- Unifie la logique de validation lorsqu’on mélange plusieurs frameworks
Profils intégrés
- code_change - read-before-write, fichier modifié, commande de vérification obligatoire
- research - lecture de fichier, récupération web, preuves de grounding
- file_task - fichier modifié, artefact émis
- text_answer - preuves de grounding
Tous les profils incluent les conditions « intent resolved » et « aucune hard failure ».
Utilisateurs cibles et effets
- Développeurs qui doivent mettre en production des pipelines d’agents : transformer des conditions comme « tests pass » en contrats explicites pour éviter les régressions
- Équipes qui comparent et évaluent plusieurs frameworks d’agents : des adaptateurs LangChain/LangGraph/Google ADK permettent de conserver les mêmes critères de décision indépendamment du framework
- Opérateurs de pipelines d’eval/régression : les logs JSON
.bracket/runs/*permettent de rejuger en lot des exécutions passées
Installation et exemple
pip install bracket
from bracket import Harness, ExecutionContract
contract = ExecutionContract.code_change(goal="Fix failing test")
harness = Harness(app_name="my-agent", artifact_dir=".bracket")
run = harness.start_run(contract)
run.record_file_read("app.py", byte_count=1842)
run.record_file_changed("app.py")
run.record_command("pytest tests/", exit_code=0, kind="verification")
result = harness.finish_run_sync(run, final_output="Fixed the bug.")
print(result.verdict.outcome) # VERIFIED / BLOCKED / PARTIAL
Python 3.12+, sans dépendance externe pour le cœur. Les adaptateurs LangChain/LangGraph/Google ADK peuvent être installés en option via les extras.
Ce que Bracket cherche à éviter
- Ce n’est pas un remplaçant de framework d’agents (à utiliser avec LangGraph, etc.)
- Ce n’est pas un système de guardrails (il ne filtre pas les entrées/sorties, il vérifie le processus d’exécution)
- Ce n’est pas un outil d’observability (ce n’est pas un visualiseur de logs, mais un moteur de verdict pass/fail)
- Ce n’est pas une plateforme d’eval (il ne vérifie pas la qualité des réponses, mais l’intégrité d’exécution)
Aucun commentaire pour le moment.