Files
Cognitive_Agent/tests/unit/test_scene_template_semantic_aliases.py
T

113 lines
4.5 KiB
Python

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"),
("我想创建一套用来舒缓的模式", "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