feat(file-summary): 接入文件汇总工作流触发
This commit is contained in:
@@ -3,8 +3,11 @@ from __future__ import annotations
|
||||
import json
|
||||
|
||||
from django.db.models import Q, QuerySet
|
||||
from django.conf import settings
|
||||
from django.utils import timezone
|
||||
|
||||
from .file_summary.workflow import create_file_summary_batch, start_file_summary_workflow
|
||||
from .file_summary.workflow_trigger import evaluate_file_summary_trigger
|
||||
from .llm import LLMConfigurationError, LLMRequestError, generate_reply, stream_reply
|
||||
from .models import Conversation, Message
|
||||
|
||||
@@ -88,6 +91,7 @@ def stream_message(conversation: Conversation, content: str):
|
||||
|
||||
user_message = append_user_message(conversation, content)
|
||||
assistant_parts: list[str] = []
|
||||
trigger = evaluate_file_summary_trigger(conversation, content)
|
||||
|
||||
yield sse_event(
|
||||
"meta",
|
||||
@@ -99,6 +103,51 @@ def stream_message(conversation: Conversation, content: str):
|
||||
},
|
||||
)
|
||||
|
||||
if trigger.reason == "missing_attachment":
|
||||
reply_content = "请先在当前对话右侧上传需要汇总的文件或压缩包,然后再发送自动汇总指令。"
|
||||
assistant_message = append_assistant_message(conversation, reply_content)
|
||||
yield sse_event("chunk", {"delta": reply_content})
|
||||
yield sse_event(
|
||||
"done",
|
||||
{
|
||||
"assistant_message_id": assistant_message.pk,
|
||||
"conversation_id": conversation.pk,
|
||||
"title": conversation.title,
|
||||
},
|
||||
)
|
||||
return
|
||||
|
||||
if trigger.should_start:
|
||||
batch = create_file_summary_batch(
|
||||
conversation=conversation,
|
||||
user=conversation.user,
|
||||
trigger_message=user_message,
|
||||
)
|
||||
start_file_summary_workflow(
|
||||
batch,
|
||||
async_run=getattr(settings, "FILE_SUMMARY_ASYNC", True),
|
||||
)
|
||||
reply_content = f"已启动文件目录与页数自动汇总工作流,批次号:{batch.batch_no}。"
|
||||
assistant_message = append_assistant_message(conversation, reply_content)
|
||||
yield sse_event(
|
||||
"workflow_started",
|
||||
{
|
||||
"workflow_type": "file_summary",
|
||||
"batch_id": batch.pk,
|
||||
"batch_no": batch.batch_no,
|
||||
},
|
||||
)
|
||||
yield sse_event("chunk", {"delta": reply_content})
|
||||
yield sse_event(
|
||||
"done",
|
||||
{
|
||||
"assistant_message_id": assistant_message.pk,
|
||||
"conversation_id": conversation.pk,
|
||||
"title": conversation.title,
|
||||
},
|
||||
)
|
||||
return
|
||||
|
||||
try:
|
||||
for chunk in stream_reply(conversation, content):
|
||||
assistant_parts.append(chunk)
|
||||
|
||||
Reference in New Issue
Block a user