from __future__ import annotations from pathlib import Path import pytest from cognitive_agent.application.mode_profile_intent import parse_mode_profile_create from cognitive_agent.application.scene_templates import SceneTemplateRegistry ROOT = Path(__file__).resolve().parents[2] @pytest.mark.parametrize( ("message", "expected"), ( ("帮我构建一个适合看书的功能模式", ("看书模式", "")), ("构建一个适合放松的功能模式", ("放松模式", "")), ("构建一个座椅舒适的功能模式", ("座椅舒适模式", "")), ("构建一个让人坐着放松的功能模式", ("坐着放松模式", "")), ("请帮我创建适合阅读的模式吧", ("阅读模式", "")), ("我想生成一个用来读书的模式并预览", ("读书模式", "")), ("请生成用于放松的模式,先看看", ("放松模式", "")), ("新建一个看书时用的功能模式", ("看书模式", "")), ("创建一个能让我放松的功能模式", ("放松模式", "")), ("创建一个能让我们放松的功能模式", ("放松模式", "")), ("构建一个让乘客们放松的功能模式", ("放松模式", "")), ("新建一个让大家看书的功能模式", ("看书模式", "")), ("帮我构建一个适合看电影的功能模式", ("看电影模式", "")), ("构建一个适合睡觉的功能模式", ("睡觉模式", "")), ("构建一个适合唱歌的功能模式", ("唱歌模式", "")), ("构建一个适合家用的功能模式", ("家用模式", "")), ("构建一个适合能源管理的功能模式", ("能源管理模式", "")), ( "构建一个适合看书的功能模式,空调温度调整到25度", ("看书模式", "空调温度调整到25度"), ), ), ) def test_purpose_wrappers_become_concise_mode_names( message: str, expected: tuple[str, str], ) -> None: assert parse_mode_profile_create(message) == expected @pytest.mark.parametrize( ("message", "expected_name"), ( ("构建一个名为适合看书的功能模式", "适合看书的功能模式"), ("构建一个叫做用于放松的功能模式", "用于放松的功能模式"), ("构建一个命名为适合看书的功能模式", "适合看书的功能模式"), ("构建一个名叫用于放松的功能模式", "用于放松的功能模式"), ("构建一个“适合看书的功能模式”", "适合看书的功能模式"), ("创建一个叫醒模式", "叫醒模式"), ("创建一个备用的功能模式", "备用的功能模式"), ("创建一个家用的模式", "家用的模式"), ), ) def test_explicit_names_are_never_rewritten( message: str, expected_name: str, ) -> None: assert parse_mode_profile_create(message) == (expected_name, "") @pytest.mark.parametrize( ("message", "template_id"), ( ("帮我构建一个适合看书的功能模式", "reading"), ("请创建一个用于阅读的功能模式", "reading"), ("构建一个适合放松的功能模式", "relaxation"), ("构建一个座椅舒适的功能模式", "seat-comfort"), ("构建一个让人坐着放松的功能模式", "relaxation"), ("我想创建一套用来舒缓的模式", "relaxation"), ("帮我构建一个适合看电影的功能模式", "cinema"), ), ) def test_concise_purpose_names_resolve_only_through_exact_template_aliases( message: str, template_id: str, ) -> None: parsed = parse_mode_profile_create(message) assert parsed is not None template = SceneTemplateRegistry( ROOT / "config" / "scene_templates" ).resolve_exact_name(parsed[0]) assert template is not None assert template.id == template_id def test_unknown_purpose_gets_a_better_name_but_no_false_template_match() -> None: parsed = parse_mode_profile_create("构建一个适合游戏的功能模式") assert parsed == ("游戏模式", "") registry = SceneTemplateRegistry(ROOT / "config" / "scene_templates") assert registry.resolve_exact_name(parsed[0]) is None @pytest.mark.parametrize( "message", ("创建一个功能模式", "创建一个自定义功能模式", "新建一个默认功能模式"), ) def test_generic_function_mode_names_remain_rejected(message: str) -> None: assert parse_mode_profile_create(message) is None @pytest.mark.parametrize( "message", ( "构建一个适合看书的功能模式,空调温度调整到25度但不要执行", "构建一个适合放松的功能模式,但别执行", "创建一个阅读模式,算了", "创建一个放松模式,撤销操作", ), ) def test_cancelled_or_negated_purpose_creation_is_rejected(message: str) -> None: assert parse_mode_profile_create(message) is None