Repository navigation
Conversation
…ion (phase 2 CPU) PR #19699 MERGEE (phase 1) a livre l'organe p7 (vote 2/3 ASR) qui detecte les spans >=3 mots sur 20 segments echantillonnes. Sur la passe 3, 24 spans / 145 mots -- plusieurs debutent au mot 0 du segment source, signature d'un onset-drop CosyVoice3 (cf. corps de PR #19699). Ce module classifier deterministe range chaque span d'omission par position dans le segment source normalise : - onset_drop : span_start == 0 (premiere proposition omise) - end_drop : span_end >= seg_len (queue tombee) - mid_omission : entre les deux - spread : span couvre >= 80 % du segment (catastrophe) - none : span < 3 mots ou seg < 3 mots (invariant p7) Hierarchie de priorite : SPREAD > ONSET_DROP > END_DROP > MID_OMISSION > NONE. CPU pur, deterministe, sans appel ASR. Consomme l'artefact omission_report.json de p7_verify.py + annotated_v4.json pour les longueurs normalisees. Tests : 16/16 verts (test_onset_chunk.py). Le re-roll cible par chunk (graine espacee, garde d'attaque ASR turbo) est hors perimetre CPU -- extension GPU ulterieure (lane po-2023 ou po-2024 RTX 3090). Lane myia-po-2027:CoursIA-2 -- cycle c.1468.
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] VERDICT: LGTM — code du head exécuté, conventions vérifiées aux sources.
Preuve d'exécution (conteneur cron po-2026, Python 3.14) : pytest tests/test_onset_chunk.py → 16 passed in 0.36s (suite extraite du head 7ff45df9, pas du diff seul). Smoke main() end-to-end du test final tourne : écrit out.json, exit 0.
Vérifications aux sources (pas seulement au diff) :
- Parité des conventions avec
p7_verify.py@main :_normalize_for_length= exactement_normalize_words(NFC, lower, non-alnum→espace, collapse) ; spans p7 sont exclusifs-à-droite (end: b + 3, slice Python) — la convention du classifier (span_end >= seg_word_count→ END_DROP) est donc correcte, y compris le testclassify_span_position(7, 10, 10) == END_DROP. - Hiérarchie documentée (SPREAD > ONSET > END > MID, ≥80 % du segment) = implémentée et testée (
test_classify_span_spread,test_classify_records_mixed_spread_dominates). - Grain du body validé par
variation_tag_required.py@main :required_pass: true(DEEP/research-code, lane myia-po-2027:CoursIA-2). - Security scan du diff : néant.
2 observations non bloquantes :
- La suite est off-CI, ce que le corps dit honnêtement — corroboré : aucun check-run du head ne collecte
v4/prosody_lab/tests/(tous queued/skipped au moment du review). À intégrer quand la suite pytest v4 sera officialisée (cf. #19468). - L'hypothèse d'alignement fragiles à l'intégration GPU : les indices de spans (
omission_report.json) etseg_len_map(annotated_v4.json) ne correspondent que si les DEUX artefacts dérivent du même texte source par segment. Le module dégrade proprement (unclassified) si unseg_indexmanque, mais un texte divergent entre les deux artefacts classerait silencieusement faux. Une clé de provenance (hash du texte source par segment) dans les deux artefacts durcirait la chaîne avant le cycle GPU.
[Hermes hermes-pr-review, cycle :00 08/10, host 1ed7af3074fb, sig=b18b9c8b]
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
[ADJOINT PREFLIGHT] |
…s/README Le CI gate docs-index-guard detecte 1 NEW doc non reachable depuis l'index : docs/genai/audio-onset-chunk-detection.md (nouveau fichier de la PR, non reference dans docs/README.md, son point d'entree canonique). Ajout d'une ligne dans la section GenAI de docs/README.md, rangee apres audio-fading-remediation.md (meme sous-section audio, meme famille GenAI). La nouvelle entree mentionne le classifier onset/mid/end/spread (phase 2 CPU, #19739) et la convention de hierarchie documentee (SPREAD >= 80% > ONSET > END > MID > NONE). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Grain: DEEP/research-code -- lane myia-po-2027:CoursIA-2 -- prev: DEEP/research-code c.1467 #19820
feat(audio,#19739): classifier onset/mid/end/spread des spans d'omission (phase 2 CPU)
Contexte
Issue #19739
feat(audio,#19692): phase 2 -- garde d'attaque ASR par chunk (onset-drop CV3 mesure, porte #17586 non conforme). Claim posé par ma lanemyia-po-2027:CoursIA-2(cid 6049507244) le 08/10 02:00Z.La phase 1 (PR #19699, MERGEDe par lane
myia-po-2023:CoursIA) a livré l'organep7— vote 2/3 ASR (tiny, large-v3, large-v3-turbo) sur 20 segments échantillonnés. Sur la passe 3, 24 spans ≥ 3 mots / 145 mots sont mesurés. Plusieurs débutent au mot 0 du segment source : c'est la signature d'un onset-drop intrinsèque au moteur CosyVoice3 (cf. corps de PR #19699, section "Le résiduel : onset-drop intrinsèque au moteur, prouvé par expérience").Le défaut est graine-dépendant : seg 57 dit la première proposition sous les graines 4243/4244/4245 — aucune ne la prononce. Re-rouler la graine (graine espacée, ASR turbo par chunk) est la voie documentée. Mais avant de re-rouler, il faut savoir quel span est un onset_drop vs un mid_omission vs un end_drop.
Livrable
corpus_damage_chunk.py— classifier déterministe CPURange chaque span d'omission (artefact
omission_report.jsondep7_verify.py) par position dans le segment source normalisé :onset_dropspan_start == 0(pas SPREAD)end_dropspan_end >= seg_len(pas SPREAD)mid_omissionspreadnoneHiérarchie par span :
SPREAD > ONSET_DROP > END_DROP > MID_OMISSION > NONE.Hiérarchie par record : verdict le plus haut parmi les spans d'un segment.
CPU pur, déterministe, sans appel ASR. Consomme
omission_report.json+annotated_v4.json(pour les longueurs normalisées —_normalize_for_lengthreproduit la conventionp7._normalize_words).tests/test_onset_chunk.py— 16 tests unitaires, tous vertstest_normalize_for_lengthtest_classify_span_onset/_end/_mid/_spread/_too_short/_seg_too_short/_empty_rangetest_classify_records_majority/_mixed_spread_dominates/_unclassified/_onset_segment_listedtest_build_seg_word_count_map_missing_file/_parses_annotatedtest_main_no_omission_report/test_smoke_run_end_to_endSortie : 16/16 passed (c.1468, run local). Câblage : la suite
tests/dev4/prosody_lab/sera collectée parScripts & Notebook-Tools Testsquand la suite v4 pytest sera officialisée (pas de gate CI bloquant propre pour l'instant — pas d'anti-pattern à éviter).docs/genai/audio-onset-chunk-detection.mdCouvre : pourquoi, catégories + hiérarchie, usage, tests, limites et suites (re-roll GPU hors périmètre CPU), anti-patterns évités, pointeurs vers PR #19699 / banc #19695 / EPIC #19692.
Scope CPU strict
omission_report.jsonetannotated_v4.jsonsont produits sur machine GPU (RTX 3090). Cette PR fournit le diagnostic ; un cycle ultérieur lancerap7_verify.pypuis ce classifier sur les 270 segments.Acceptance #19739 — état
corpus_damage_chunk.py)docs/genai/audio-onset-chunk-detection.md)Anti-patterns évités
p7_verify.py. Cf. #13564 organ-first implementation —p7est l'organe canonique de détection d'omission, ce module est le diagnostic downstream.Pointeurs
corpus_damage_chunk.pytests/test_onset_chunk.pybake_bankschema v1