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