42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
from typing import Any
|
|
|
|
from app.services.risk_detector import reinforce_risk
|
|
|
|
|
|
PRIMARY_TOPICS = {
|
|
"亲子关系",
|
|
"婚姻关系",
|
|
"原生家庭",
|
|
"情绪模式",
|
|
"课程学习",
|
|
"个人成长",
|
|
"家族系统",
|
|
"关系内耗",
|
|
"行动力与拖延",
|
|
"其他",
|
|
}
|
|
COURSE_STAGES = {"觉知", "原生", "合一", "生机", "心光", "大本营综合", "不确定"}
|
|
DESENSITIZATION_STATUSES = {"not_needed", "needed", "done", "unknown"}
|
|
REVIEW_STATUSES = {"pending", "reviewing", "approved", "needs_revision", "rejected", "forbidden"}
|
|
|
|
|
|
def normalize_ai_item(item: dict[str, Any]) -> dict[str, Any]:
|
|
item = reinforce_risk(dict(item))
|
|
item["primary_topic"] = item.get("primary_topic") if item.get("primary_topic") in PRIMARY_TOPICS else "其他"
|
|
item["course_stage"] = item.get("course_stage") if item.get("course_stage") in COURSE_STAGES else "不确定"
|
|
item["desensitization_status"] = (
|
|
item.get("desensitization_status")
|
|
if item.get("desensitization_status") in DESENSITIZATION_STATUSES
|
|
else "unknown"
|
|
)
|
|
item["suggested_review_status"] = (
|
|
item.get("suggested_review_status") if item.get("suggested_review_status") in REVIEW_STATUSES else "pending"
|
|
)
|
|
for key in ("problem_tags", "audience_tags", "risk_types"):
|
|
if not isinstance(item.get(key), list):
|
|
item[key] = []
|
|
item["suggested_to_standard_qa"] = bool(item.get("suggested_to_standard_qa"))
|
|
item["need_desensitization"] = bool(item.get("need_desensitization"))
|
|
return item
|
|
|