feat(chat): allow knowledge chat before upload
This commit is contained in:
@@ -9,7 +9,11 @@ from apps.documents.services import append_documents_to_batch
|
||||
|
||||
from .forms import ChatForm, ConversationUploadForm
|
||||
from .models import Conversation
|
||||
from .services import execute_conversation_agent, execute_conversation_export
|
||||
from .services import (
|
||||
create_knowledge_conversation,
|
||||
execute_conversation_agent,
|
||||
execute_conversation_export,
|
||||
)
|
||||
|
||||
RISK_LEVEL_DISPLAY = {
|
||||
"high": "高",
|
||||
@@ -48,19 +52,48 @@ def index(request):
|
||||
conversations = Conversation.objects.all()
|
||||
if conversations.exists():
|
||||
return redirect("chat:detail", conversation_id=conversations.first().conversation_id)
|
||||
documents = UploadedDocument.objects.filter(batch__isnull=True)
|
||||
form = ChatForm(request.POST or None, documents=documents)
|
||||
upload_form = ConversationUploadForm()
|
||||
result = None
|
||||
audit_log = None
|
||||
conversation = None
|
||||
if request.method == "POST" and form.is_valid():
|
||||
conversation = create_knowledge_conversation()
|
||||
result, audit_log = execute_conversation_agent(
|
||||
conversation=conversation,
|
||||
message=form.cleaned_data["message"],
|
||||
document_ids=form.cleaned_data["document_ids"],
|
||||
detail_url_builder=lambda log_id: reverse("audit:detail", args=[log_id]),
|
||||
)
|
||||
conversation.refresh_from_db()
|
||||
documents = UploadedDocument.objects.filter(batch__isnull=True)
|
||||
|
||||
display_node_results = _normalize_node_results(conversation.node_results if conversation else [])
|
||||
workspace_summary = _build_workspace_summary(conversation, None, display_node_results) if conversation else _build_empty_workspace_summary()
|
||||
return render(
|
||||
request,
|
||||
"chat/index.html",
|
||||
{
|
||||
"conversation": None,
|
||||
"conversation": conversation,
|
||||
"conversations": [],
|
||||
"conversation_history": [],
|
||||
"form": ChatForm(),
|
||||
"documents": [],
|
||||
"result": None,
|
||||
"audit_log": None,
|
||||
"node_results": [],
|
||||
"batch": None,
|
||||
"form": form,
|
||||
"documents": documents,
|
||||
"document_count": documents.count(),
|
||||
"result": result,
|
||||
"audit_log": audit_log,
|
||||
"node_results": display_node_results,
|
||||
"active_node": None,
|
||||
"workspace_summary": workspace_summary,
|
||||
"conversation_context": _build_conversation_context(conversation, None, workspace_summary) if conversation else {},
|
||||
"prompt_templates": _build_prompt_templates(),
|
||||
"analysis_card": _build_analysis_card(result, conversation) if conversation else {},
|
||||
"upload_form": upload_form,
|
||||
"export_card": _build_export_card(result, conversation) if conversation else {},
|
||||
"risk_card": _build_risk_card(result, conversation) if conversation else {},
|
||||
"notify_card": _build_notify_card(result, conversation) if conversation else {},
|
||||
},
|
||||
)
|
||||
|
||||
@@ -201,6 +234,18 @@ def _build_workspace_summary(
|
||||
}
|
||||
|
||||
|
||||
def _build_empty_workspace_summary() -> dict:
|
||||
return {
|
||||
"highest_risk_level": "-",
|
||||
"export_allowed": "否",
|
||||
"notify_status": "待处理",
|
||||
"export_status": "待处理",
|
||||
"download_url": "",
|
||||
"file_count": 0,
|
||||
"page_count": 0,
|
||||
}
|
||||
|
||||
|
||||
def _build_conversation_context(
|
||||
conversation: Conversation,
|
||||
batch: SubmissionBatch | None,
|
||||
|
||||
Reference in New Issue
Block a user