Add analysis feature
This commit is contained in:
@@ -31,8 +31,9 @@ def _parse_timestamp(value: object) -> datetime:
|
||||
class ConversationRecorder:
|
||||
"""按事件顺序写入一通会话;写库失败不应中断实时通话。"""
|
||||
|
||||
def __init__(self, session_id: str):
|
||||
def __init__(self, session_id: str, analysis_plan: dict | None = None):
|
||||
self.session_id = session_id
|
||||
self._analysis_plan = deepcopy(analysis_plan or {})
|
||||
self._sequence = 0
|
||||
self._trace_sequence = 0
|
||||
self._lock = asyncio.Lock()
|
||||
@@ -49,6 +50,7 @@ class ConversationRecorder:
|
||||
runtime_mode: str,
|
||||
session_id: str | None = None,
|
||||
extra: dict | None = None,
|
||||
analysis_plan: dict | None = None,
|
||||
) -> "ConversationRecorder | None":
|
||||
session_id = session_id or f"conv_{uuid4().hex[:20]}"
|
||||
try:
|
||||
@@ -62,11 +64,17 @@ class ConversationRecorder:
|
||||
runtime_mode=runtime_mode,
|
||||
status="active",
|
||||
message_count=0,
|
||||
analysis_status="none",
|
||||
analysis_data=(
|
||||
{"plan": deepcopy(analysis_plan)}
|
||||
if analysis_plan and analysis_plan.get("enabled")
|
||||
else {}
|
||||
),
|
||||
extra=deepcopy(extra or {}),
|
||||
)
|
||||
)
|
||||
await db.commit()
|
||||
return cls(session_id)
|
||||
return cls(session_id, analysis_plan)
|
||||
except Exception as exc:
|
||||
logger.error(f"创建对话历史会话失败,不影响本次通话: {exc}")
|
||||
return None
|
||||
@@ -289,6 +297,16 @@ class ConversationRecorder:
|
||||
conversation.status = status
|
||||
conversation.ended_at = datetime.now(UTC)
|
||||
conversation.message_count = self._sequence
|
||||
if (
|
||||
status == "completed"
|
||||
and self._sequence > 0
|
||||
and self._analysis_plan.get("enabled")
|
||||
):
|
||||
conversation.analysis_status = "pending"
|
||||
conversation.analysis_error = ""
|
||||
conversation.analysis_data = {
|
||||
"plan": deepcopy(self._analysis_plan)
|
||||
}
|
||||
await db.commit()
|
||||
except Exception as exc:
|
||||
logger.error(f"结束对话历史会话失败: {exc}")
|
||||
|
||||
Reference in New Issue
Block a user