dieya_risk_prediction_backend/tests/test_conversation_summary.py

65 lines
2.4 KiB
Python

import json
from datetime import UTC, datetime
from app.models.entities import Conversation, ConversationMessage
from app.services.conversations import ConversationService
def test_summary_request_is_marked_without_becoming_a_new_risk_request() -> None:
text = "上边的内容你能帮我总结一下嘛"
assert ConversationService._is_summary_request(text) is True
semantics = ConversationService._normalize_semantics(
text,
{"intent": "general", "risk_requested": False},
)
assert semantics["summary_requested"] is True
assert semantics["risk_requested"] is False
def test_llm_context_includes_persisted_card_for_follow_up_summary() -> None:
conversation = Conversation(
id=1,
user_id=1,
title="洗发水风险",
created_at=datetime.now(UTC),
updated_at=datetime.now(UTC),
messages=[
ConversationMessage(
id=1,
conversation_id=1,
role="user",
content="评估洗发水瓶子",
created_at=datetime.now(UTC),
),
ConversationMessage(
id=2,
conversation_id=1,
role="assistant",
content="已完成分析。",
structured_data={
"semantic": {"intent": "assessment"},
"riskResult": {"score": 72, "level": "medium"},
"responseCard": {
"type": "solution",
"title": "AI 案例推理生成",
"suggestions": ["完成密封性测试"],
},
},
created_at=datetime.now(UTC),
),
],
)
semantics = {"prompt_key": "product_manager", "summary_requested": True}
messages = ConversationService._llm_messages(conversation, "上边的内容你能帮我总结一下嘛", semantics)
context = "\n".join(item["content"] for item in messages if item["role"] == "system")
assert "responseCard" in context
assert "完成密封性测试" in context
assert "【当前任务:总结已有结果】" in context
assert "不要输出“请补充以下信息”的问题清单" in context
assert "评估洗发水瓶子" in context
assert "已完成分析。" in context
assert json.dumps({"score": 72, "level": "medium"}, ensure_ascii=False, separators=(",", ":")) in context