Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 114 additions & 0 deletions .github/workflows/genai-helpers-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
name: GenAI-Helpers-Tests

# Tranche 2/45 de #13746 — Tests éclatés 45+ emplacements : famille GenAI
# helpers (test_genai_helpers.py + test_video_helpers.py errants à la racine
# de helpers/, + helpers/tests/ entier) jamais découverte par la CI.
#
# Le défaut mesuré : aucun testpath pytest.ini ne couvre
# `MyIA.AI.Notebooks/GenAI/shared/helpers`, et aucun workflow ne déclenche
# sur ce chemin — les deux fichiers cités par l'issue vivaient hors de
# tout `tests/`, et le sous-répertoire `helpers/tests/` (comfyui_client,
# genai_service, audio_helpers : 132 tests) était invisible aussi.
#
# Bornes mesurées firsthand (worktree fc8da0912e, baseline 2026-09-18) :
# - `pytest --collect-only -q MyIA.AI.Notebooks/GenAI/shared/helpers` =
# **138 tests collected** (dont 137 verts + 1 témoin périmé corrigé
# dans la même PR : `frame_limit` -> `length`, clé réelle de
# EmptyHunyuanLatentVideo dans comfyui_client.py — l'assert n'avait
# jamais tourné, personne n'avait vu le KeyError).
# - Imports top-level : stdlib + numpy + requests. Imports en fonction
# (mesures sur run CI 35374523233) : python-dotenv (load_genai_config),
# pillow (frames_to_video), librosa (plot_waveform) — au pip install.
# moviepy reste importé paresseusement et mocké par les tests.
#
# Acceptance partielle (tranche 2/45, scope strict) :
# 1. Workflow `genai-helpers-tests.yml` créé et déclenché sur push+PR
# ciblant `MyIA.AI.Notebooks/GenAI/shared/**` (cf paths: ci-dessous).
# 2. Compteur de tests collectés >= 138 (floor — mesuré sur main avant
# PR, cf preuve dans body PR).
# 3. pytest.ini gagne le testpath correspondant (découverte locale
# alignée sur la CI).
# 4. Les autres familles SANS trigger path-reactif (#13746 : GradeBookApp,
# 01-PythonForDataScience/tests, QuantConnect/scripts/tests) restent
# HORS de cette PR — une famille par PR (G.4 anti-composite). NB : ces
# trois familles SONT exécutées par scripts-tests.yml (cibles du run
# + collect floors) ; ce qui leur manque est une entree paths: propre
# (pattern #10416 : un push sur leur seul chemin ne declenche rien).
#
# Pièges évités (hérités de gametheory-tests.yml, tranche 1) :
# - Pas de modification de scripts-tests.yml paths: (scope narrow).
# - Single-Python 3.11 d'abord, pas de matrix tant que le vert n'est pas
# confirmé.

on:
push:
branches: [main]
paths:
- 'MyIA.AI.Notebooks/GenAI/shared/**'
- '.github/workflows/genai-helpers-tests.yml'
pull_request:
branches: [main]
types: [opened, synchronize, edited, reopened]
paths:
- 'MyIA.AI.Notebooks/GenAI/shared/**'
- '.github/workflows/genai-helpers-tests.yml'
workflow_dispatch:

permissions:
contents: read

concurrency:
group: genai-helpers-tests-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
genai-helpers-tests:
name: GenAI helpers pytest (138 collected)
runs-on: ubuntu-latest
timeout-minutes: 10
env:
# Floor mesuré firsthand — worktree fc8da0912e, baseline 2026-09-18.
# Quand des tests sont retirés INTENTIONNELLEMENT, ajuster cette valeur
# dans la même PR (le message d'erreur du guard la nomme).
GENAI_HELPERS_TEST_FLOOR: 138

steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: pip

# Deps réelles de la famille : numpy (audio/video), requests
# (genai_service), python-dotenv (load_genai_config), pillow
# (frames_to_video), librosa (plot_waveform), pytest. moviepy est
# importé paresseusement et mocké par les tests — non requis.
- name: Install deps (numpy requests python-dotenv pillow librosa pytest)
run: |
python -m pip install --upgrade pip
pip install numpy requests python-dotenv pillow librosa pytest

- name: Run GenAI helpers tests
run: |
pytest MyIA.AI.Notebooks/GenAI/shared/helpers --tb=short -v

# Collection floor-guard (même sémantique que gametheory-tests.yml /
# ict-tests.yml : détecter pytest vert avec N tests silencieusement
# disparus du chemin de collecte). Ligne canonique pytest :
# `=== N tests collected in T.Ts ===`. Pas de `|| true` : le grep
# doit pouvoir échouer -- c'est le signal.
- name: Collection floor-guard (138)
if: always()
run: |
COLLECTED=$(pytest MyIA.AI.Notebooks/GenAI/shared/helpers --collect-only -q 2>&1 | grep -oE '[0-9]+ tests? collected' | grep -oE '[0-9]+' | head -1)
if [ -z "$COLLECTED" ]; then
echo "::error::Le collect-only n'a renvoyé aucune ligne 'N tests collected' -- la collecte a planté, c'est probablement une panne d'infra (cf #9387)."
exit 1
fi
if [ "$COLLECTED" -lt "$GENAI_HELPERS_TEST_FLOOR" ]; then
echo "::error::Régression de couverture : $COLLECTED tests collectés, plancher=$GENAI_HELPERS_TEST_FLOOR."
echo "::error::Si la baisse est intentionnelle, ajuster GENAI_HELPERS_TEST_FLOOR dans cette PR -- le message d'erreur nomme la valeur."
exit 1
fi
echo "OK : $COLLECTED tests collectés (plancher=$GENAI_HELPERS_TEST_FLOOR)."
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,7 @@ def test_wan_default_frames_is_16(self):
client.generate_text2video_wan("a cat walking")
wf = captured[0]
latent_node = next(n for n in wf.values() if n["class_type"] == "EmptyHunyuanLatentVideo")
assert latent_node["inputs"]["frame_limit"] == 16
assert latent_node["inputs"]["length"] == 16


class TestGenerateBonsai:
Expand Down
1 change: 1 addition & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ testpaths =
scripts/translation/tests
scripts/secrets/tests
MyIA.AI.Notebooks/QuantConnect/scripts/tests
MyIA.AI.Notebooks/GenAI/shared/helpers
GradeBookApp
pythonpath =
MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts
Expand Down
6 changes: 6 additions & 0 deletions scripts/check_testpaths_coverage.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@
".github/workflows/ml-tests.yml": [
"MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts/tests",
],
# genai-helpers-tests.yml : famille GenAI helpers, dir entier (tranche 2
# de #13746) — 138 tests (errants racine helpers/ + helpers/tests/),
# deps numpy/requests/python-dotenv/pillow/librosa au pip install du job.
".github/workflows/genai-helpers-tests.yml": [
"MyIA.AI.Notebooks/GenAI/shared/helpers",
],
".github/workflows/secret-scan.yml": [
"scripts/secrets/tests/test_gitleaks_qwen_rule.py",
"scripts/secrets/tests/test_gitleaks_10143_classes.py",
Expand Down
Loading