"""Tests for AIClient forced tool name extraction.""" from src.ai.client import AIClient def test_extract_forced_tool_name_full_name(): tools = [ "humanizer_zh.read_skill_doc", "skills_creator.create_skill", ] message = "please call tool humanizer_zh.read_skill_doc and return first 100 chars" forced = AIClient._extract_forced_tool_name(message, tools) assert forced == "humanizer_zh.read_skill_doc" def test_extract_forced_tool_name_unique_prefix(): tools = [ "humanizer_zh.read_skill_doc", "skills_creator.create_skill", ] message = "please call tool humanizer_zh only" forced = AIClient._extract_forced_tool_name(message, tools) assert forced == "humanizer_zh.read_skill_doc" def test_extract_forced_tool_name_compact_prefix_without_underscore(): tools = [ "humanizer_zh.read_skill_doc", "skills_creator.create_skill", ] message = "调用humanizerzh人性化处理以下文本" forced = AIClient._extract_forced_tool_name(message, tools) assert forced == "humanizer_zh.read_skill_doc" def test_extract_forced_tool_name_ambiguous_prefix_returns_none(): tools = [ "skills_creator.create_skill", "skills_creator.reload_skill", ] message = "please call tool skills_creator" forced = AIClient._extract_forced_tool_name(message, tools) assert forced is None def test_extract_prefix_limit_from_user_message(): assert AIClient._extract_prefix_limit("直接返回前100字") == 100 assert AIClient._extract_prefix_limit("前 256 字") == 256 assert AIClient._extract_prefix_limit("返回全文") is None def test_extract_processing_payload_with_marker(): message = "调用humanizer_zh.read_skill_doc人性化处理以下文本:\n第一段。\n第二段。" payload = AIClient._extract_processing_payload(message) assert payload == "第一段。\n第二段。" def test_extract_processing_payload_with_generic_pattern(): message = "请按技能规则优化如下:\n这是待处理文本。" payload = AIClient._extract_processing_payload(message) assert payload == "这是待处理文本。" def test_extract_processing_payload_returns_none_when_absent(): assert AIClient._extract_processing_payload("请调用工具 humanizer_zh.read_skill_doc") is None