Added a new method to run a skill document pipeline, allowing for enhanced processing of user messages based on specified skill documents. Implemented logic to extract relevant text from user messages and improved error handling during processing. Updated message handling to strip URLs from responses to prevent issues with message delivery. Added tests to validate the new processing functionality and ensure robustness.
74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
"""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
|