tests/cases_hors_regles.py
Rama main · réplica de lectura del repositorio original.
"""Jeu « hors regles » : 50 formulations inedites, 5 serveurs, tenues a l'ecart.
Aucune de ces phrases ne doit apparaitre dans les regles (`lyra/rules/`) ni
dans les paraphrases indexees (`triggers_map`) : elles mesurent ce que le
modele generalise, pas ce que le banc a memorise. Un script de controle
(`scripts/controle_hors_regles.py`) verifie les deux proprietes.
Format identique a TESTS_LLM : (categorie, description, requete, outil attendu,
args obligatoires, args optionnels). Les args restent minimaux : on mesure
d'abord le choix de l'outil.
"""
TESTS_HORS_REGLES = [
# ---------------- TV (pylips-mcp) ----------------
("TV/power", "en route", "la tele, mets-la en route", "tv.power_on", {}, {}),
("TV/screen", "ecran off son actif", "la tele, image noire mais garde le son", "tv.screen_off", {}, {}),
("TV/screen", "ecran on", "rends-moi l'image sur la tele", "tv.screen_on", {}, {}),
("TV/state", "etat", "la tele, elle tourne la ?", "tv.get_state", {}, {}),
("TV/apps", "liste", "qu'est-ce qu'il y a comme applis sur la tele", "tv.list_apps", {}, {}),
("TV/apps", "ouvrir appli", "je veux regarder disney plus", "tv.launch_app", {}, {}),
("TV/volume", "niveau", "le son de la tele a vingt", "tv.volume_set", {}, {}),
("TV/volume", "moins fort", "un peu moins fort la tele", "tv.volume_down", {}, {}),
("TV/key", "touche", "appuie sur ok sur la telecommande de la tele", "tv.send_key", {}, {}),
("TV/ambilight", "mode musique", "les leds derriere la tele, en mode qui suit la musique", "tv.ambilight_mode", {}, {}),
# ---------------- CATT (catt-mcp) ----------------
("CATT/youtube", "envoie sur chromecast", "regarde-moi ca sur le chromecast https://youtu.be/dQw4w9WgXcQ", "catt.cast_youtube", {"url": "https://youtu.be/dQw4w9WgXcQ"}, {}),
("CATT/url", "lien quelconque", "balance ce lien sur la tele https://example.org/film.mp4", "catt.cast_url", {"url": "https://example.org/film.mp4"}, {}),
("CATT/pause", "pause", "fige la lecture du chromecast", "catt.cast_pause", {}, {}),
("CATT/resume", "reprise", "c'est bon, remets la video sur le chromecast", "catt.cast_resume", {}, {}),
("CATT/seek", "reculer", "recule de dix secondes sur le chromecast", "catt.cast_seek", {}, {}),
("CATT/status", "ou en est", "ou en est la lecture sur le chromecast", "catt.cast_status", {}, {}),
("CATT/info", "quoi en cours", "qu'est-ce qui passe sur le chromecast en ce moment", "catt.cast_info", {}, {}),
("CATT/scan", "scan", "y a quoi comme chromecast chez moi", "catt.cast_scan", {}, {}),
("CATT/stop", "couper lecture", "le chromecast, coupe la lecture", "catt.cast_stop", {}, {}),
("CATT/volume", "niveau", "le chromecast a trente pour cent", "catt.cast_volume", {}, {}),
# ---------------- HUE (hue-mcp) ----------------
("HUE/alert", "reperer", "fais clignoter la lampe du salon pour que je la repere", "hue.alert_light", {}, {}),
("HUE/list", "inventaire", "quelles lumieres j'ai a la maison", "hue.get_all_lights", {}, {}),
("HUE/temperature", "teinte chaude", "mets une teinte chaude dans le salon", "hue.set_color_temperature", {}, {}),
("HUE/scene", "scene", "ambiance cinema dans le salon", "hue.activate_scene_by_name", {}, {}),
("HUE/brightness", "tamiser", "tamise la chambre de moitie", "hue.set_group_brightness", {}, {}),
("HUE/color", "violet", "la lampe du bureau en mauve, juste celle-la", "hue.set_color_rgb", {}, {}),
("HUE/off", "tout eteindre piece", "plus rien dans la chambre, tout en noir", "hue.turn_off_group", {}, {}),
("HUE/beat", "synchro musique", "lance la synchro des lumieres sur la musique", "hue.hue_beat_start", {}, {}),
("HUE/beat", "arret synchro", "stoppe la synchro lumiere", "hue.hue_beat_stop", {}, {}),
("HUE/beat", "etat synchro", "la synchro lumiere tourne encore ?", "hue.hue_beat_status", {}, {}),
# ---------------- DENON (denon-mcp) ----------------
("DENON/power", "en route", "mets l'ampli en route", "denon.power_on", {}, {}),
("DENON/power", "veille", "l'ampli en veille", "denon.power_off", {}, {}),
("DENON/mute", "couper son", "coupe le son de l'ampli", "denon.mute_on", {}, {}),
("DENON/mute", "remettre son", "remets le son sur l'ampli", "denon.mute_off", {}, {}),
("DENON/mute", "bascule", "bascule le mute de l'ampli", "denon.mute_toggle", {}, {}),
("DENON/input", "console", "l'ampli sur l'entree de la console", "denon.set_input", {}, {}),
("DENON/input", "tele", "bascule l'entree de l'ampli vers la tele", "denon.set_input", {}, {}),
("DENON/volume", "un cran", "l'ampli, un cran plus fort", "denon.volume_up", {}, {}),
("DENON/volume", "niveau", "regle l'ampli a 40", "denon.volume_set", {}, {}),
("DENON/status", "etat", "l'ampli est allume ?", "denon.get_status", {}, {}),
# ---------------- FEDORA (fedora-agents) ----------------
("FEDORA/vm_start", "en route", "mets en route la machine preprod-01", "fedora.vm_start", {"vm_name": "preprod-01"}, {}),
("FEDORA/vm_stop", "couper", "coupe sandbox-02", "fedora.vm_stop", {"vm_name": "sandbox-02"}, {}),
("FEDORA/vm_status", "ip", "c'est quoi l'ip de preprod-01", "fedora.vm_status", {"vm_name": "preprod-01"}, {}),
("FEDORA/vm_clone", "copie nommee", "je veux un double de preprod-01, nomme preprod-02", "fedora.vm_clone", {"source_vm": "preprod-01"}, {}),
("FEDORA/vm_exec", "commande", "regarde l'espace disque dans sandbox-02 avec df -h", "fedora.vm_exec", {"vm_name": "sandbox-02"}, {}),
("FEDORA/vm_copy", "envoyer fichier", "depose le fichier rapport.txt sur preprod-01", "fedora.vm_copy", {}, {}),
("FEDORA/vm_snapshot", "point de restauration", "fais-moi un point de restauration de preprod-01", "fedora.vm_snapshot", {"vm_name": "preprod-01"}, {}),
("FEDORA/vm_export", "archive", "fais-moi un tar de preprod-01 pour l'emporter", "fedora.vm_export", {"vm_name": "preprod-01"}, {}),
("FEDORA/backup_status", "etat", "ou en sont les sauvegardes", "fedora.backup_status", {}, {}),
("FEDORA/backup_verify", "integrite", "les sauvegardes sont saines ?", "fedora.backup_verify", {}, {}),
("FEDORA/backup_clean", "menage", "allege le stock de sauvegardes, garde que les recentes", "fedora.backup_clean", {}, {}),
]