fix:优化聊天流信息的展示和检索,优化chat_prompt无效的问题,优化部分群定义问题
This commit is contained in:
89
pytests/common_test/test_chat_config_utils.py
Normal file
89
pytests/common_test/test_chat_config_utils.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
from src.chat.message_receive.chat_manager import chat_manager
|
||||
from src.common.utils.utils_config import ChatConfigUtils, ExpressionConfigUtils
|
||||
from src.common.utils.utils_session import SessionUtils
|
||||
from src.config.config import global_config
|
||||
|
||||
|
||||
def test_get_chat_prompt_for_chat_merges_multiple_matching_prompts(monkeypatch):
|
||||
session_id = SessionUtils.calculate_session_id("qq", group_id="1036092828")
|
||||
monkeypatch.setattr(
|
||||
global_config.chat,
|
||||
"chat_prompts",
|
||||
[
|
||||
{"platform": "qq", "item_id": "1036092828", "rule_type": "group", "prompt": "你也是群管理员,可以适当进行管理"},
|
||||
{"platform": "qq", "item_id": "1036092828", "rule_type": "group", "prompt": "这个群是技术实验群,请你专心讨论技术"},
|
||||
{"platform": "qq", "item_id": "other", "rule_type": "group", "prompt": "不应该生效"},
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(chat_manager, "get_session_by_session_id", lambda _session_id: None)
|
||||
|
||||
result = ChatConfigUtils.get_chat_prompt_for_chat(session_id, True)
|
||||
|
||||
assert result == "你也是群管理员,可以适当进行管理\n这个群是技术实验群,请你专心讨论技术"
|
||||
|
||||
|
||||
def test_get_chat_prompt_for_chat_matches_routed_session_by_chat_stream(monkeypatch):
|
||||
session_id = SessionUtils.calculate_session_id("qq", group_id="1036092828", account_id="bot-a")
|
||||
monkeypatch.setattr(
|
||||
global_config.chat,
|
||||
"chat_prompts",
|
||||
[
|
||||
{"platform": "qq", "item_id": "1036092828", "rule_type": "group", "prompt": "路由会话也应该生效"},
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
chat_manager,
|
||||
"get_session_by_session_id",
|
||||
lambda _session_id: SimpleNamespace(platform="qq", group_id="1036092828", user_id=None),
|
||||
)
|
||||
|
||||
result = ChatConfigUtils.get_chat_prompt_for_chat(session_id, True)
|
||||
|
||||
assert result == "路由会话也应该生效"
|
||||
|
||||
|
||||
def test_expression_learning_list_matches_routed_session_by_chat_stream(monkeypatch):
|
||||
session_id = SessionUtils.calculate_session_id("qq", group_id="1036092828", account_id="bot-a")
|
||||
monkeypatch.setattr(
|
||||
global_config.expression,
|
||||
"learning_list",
|
||||
[
|
||||
{
|
||||
"platform": "qq",
|
||||
"item_id": "1036092828",
|
||||
"rule_type": "group",
|
||||
"use_expression": False,
|
||||
"enable_learning": False,
|
||||
"enable_jargon_learning": True,
|
||||
}
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
chat_manager,
|
||||
"get_session_by_session_id",
|
||||
lambda _session_id: SimpleNamespace(platform="qq", group_id="1036092828", user_id=None),
|
||||
)
|
||||
|
||||
assert ExpressionConfigUtils.get_expression_config_for_chat(session_id) == (False, False, True)
|
||||
|
||||
|
||||
def test_talk_value_rules_match_routed_session_by_chat_stream(monkeypatch):
|
||||
session_id = SessionUtils.calculate_session_id("qq", group_id="1036092828", account_id="bot-a")
|
||||
monkeypatch.setattr(global_config.chat, "talk_value", 0.1)
|
||||
monkeypatch.setattr(global_config.chat, "enable_talk_value_rules", True)
|
||||
monkeypatch.setattr(
|
||||
global_config.chat,
|
||||
"talk_value_rules",
|
||||
[
|
||||
{"platform": "qq", "item_id": "1036092828", "rule_type": "group", "time": "00:00-23:59", "value": 0.7}
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
chat_manager,
|
||||
"get_session_by_session_id",
|
||||
lambda _session_id: SimpleNamespace(platform="qq", group_id="1036092828", user_id=None),
|
||||
)
|
||||
|
||||
assert ChatConfigUtils.get_talk_value(session_id, True) == 0.7
|
||||
@@ -39,6 +39,50 @@ def test_resolve_expression_group_scope_returns_related_sessions(monkeypatch: py
|
||||
assert has_global_share is False
|
||||
|
||||
|
||||
def test_resolve_expression_group_scope_matches_routed_sessions(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
current_session_id = SessionUtils.calculate_session_id("qq", group_id="10001", account_id="bot-a")
|
||||
related_session_id = SessionUtils.calculate_session_id("qq", group_id="10002", account_id="bot-a")
|
||||
|
||||
monkeypatch.setattr(
|
||||
selector_module,
|
||||
"global_config",
|
||||
SimpleNamespace(
|
||||
expression=SimpleNamespace(
|
||||
expression_groups=[
|
||||
SimpleNamespace(
|
||||
expression_groups=[
|
||||
_build_target("qq", "10001"),
|
||||
_build_target("qq", "10002"),
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
selector_module.ChatConfigUtils,
|
||||
"_get_chat_stream",
|
||||
lambda session_id: SimpleNamespace(platform="qq", group_id="10001", user_id=None)
|
||||
if session_id == current_session_id
|
||||
else None,
|
||||
)
|
||||
target_session_ids = {
|
||||
"10001": current_session_id,
|
||||
"10002": related_session_id,
|
||||
}
|
||||
monkeypatch.setattr(
|
||||
selector_module.ChatConfigUtils,
|
||||
"get_target_session_ids",
|
||||
lambda target_item: {target_session_ids[target_item.item_id]},
|
||||
)
|
||||
|
||||
selector = MaisakaExpressionSelector()
|
||||
related_session_ids, has_global_share = selector._resolve_expression_group_scope(current_session_id)
|
||||
|
||||
assert related_session_ids == {current_session_id, related_session_id}
|
||||
assert has_global_share is False
|
||||
|
||||
|
||||
def test_resolve_expression_group_scope_uses_star_as_global_share(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
current_session_id = SessionUtils.calculate_session_id("qq", group_id="10001")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user