117 lines
4.8 KiB
Python
117 lines
4.8 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"),
|
|
("构建一个座椅舒适的功能模式", "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
|