Repository navigation
refactor(agents): sorties structurées pour le scoreur de sévérité - #3
Merged
Merged
Conversation
Le prompt imposait le format par la prose (« Return ONLY the JSON object ») et le code retirait d'éventuelles balises Markdown à la regex avant json.loads. Le format est maintenant garanti par l'API (output_config.format, schéma JSON avec les valeurs autorisées de chaque dimension) : la consigne et la regex deviennent inutiles et sont retirées. Un arrêt autre que end_turn (max_tokens, refusal) lève désormais une erreur explicite ; score() bascule alors sur le calcul par règles, comme pour toute autre erreur de l'API. claude-sonnet-4-6 figure dans la liste des modèles compatibles avec les sorties structurées (documentation Anthropic, consultée le 28.09.2026). Co-Authored-By: Claude Opus 5.5 <[email protected]>
BazanJeremy
added a commit
that referenced
this pull request
Sep 28, 2026
…ompliance Tagger (#4) Même changement que pour le Severity Scorer (#3) : le format JSON est garanti par l'API (output_config.format) au lieu de « Return ONLY the JSON object », et le retrait des balises Markdown à la regex disparaît. Un arrêt autre que end_turn lève une erreur explicite ; les deux agents basculent alors sur leurs règles, comme pour toute erreur de l'API. - Report Enricher : environment était un dictionnaire libre, forme que les sorties structurées refusent. Il arrive en liste de paires (key, value), reconstruite en dictionnaire. - Compliance Tagger : un schéma par secteur, valeurs fermées imposées (classe IEC 62304, niveau DORA) ; psd2_article accepte null via anyOf. EnrichmentResult et ComplianceResult ne changent pas. Co-authored-by: Claude Opus 5.5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Le scoreur de sévérité (
severity_scorer.py) obtenait son JSON par la prose du prompt, puis nettoyait la réponse à la regex. Cette PR confie le format à l'API.Avant / après
output_config.format: schéma JSON strict, valeurs autorisées imposées pour les quatre dimensionsre.subdes balises Markdown avantjson.loadsmax_tokens,refusal)RuntimeErrorexplicite ;score()bascule sur le calcul par règles, comme avant pour toute erreur de l'APILe reste du prompt (la liste des champs et leur sens) ne change pas : c'est du contexte, pas une consigne de format.
Compatibilité du modèle
claude-sonnet-4-6figure dans la liste des modèles compatibles avec les sorties structurées de la documentation Anthropic, consultée le 28.09.2026. Le modèle ne change pas.Hors périmètre
Les deux autres agents qui forcent le JSON par le prompt restent tels quels :
report_enricher.py: son champenvironmentest un dictionnaire libre, forme que les sorties structurées n'acceptent pas (additionalPropertiesdoit valoirfalse) ;compliance_tagger.py:psd2_articlepeut être nul, cas que la documentation ne mentionne pas.Vérifié
python -m pytest→ 144 passedruff check src/ tests/(0.15.20, la version épinglée en CI) → aucune erreur ;ruff format --checksur le fichier modifié → OKfull / always / single / new→ 8,1,critical), un arrêtmax_tokenslève l'erreur attendue.Non vérifié : un vrai appel à l'API, faute de clé sur la machine.