新增: AI Chat多项增强(审批去重/编辑重发/导出/实体引用/会话置顶搜索)+任务推进链df-nodes落地
This commit is contained in:
@@ -10,7 +10,7 @@ use tracing::warn;
|
||||
|
||||
use df_ai::provider::{CompletionRequest, LlmProvider};
|
||||
|
||||
use super::{AiChatEvent, ToolCallDraft};
|
||||
use super::{AiChatEvent, ErrorType, ToolCallDraft};
|
||||
|
||||
/// 从 anyhow 错误中尽力提取 HTTP 状态码/错误分类,供诊断拼接。
|
||||
///
|
||||
@@ -159,6 +159,8 @@ pub(crate) async fn stream_llm(
|
||||
Err(_elapsed) => {
|
||||
let _ = app_handle.emit("ai-chat-event", AiChatEvent::AiError {
|
||||
error: "流式响应超时(120 秒无数据,连接可能已断开)".to_string(),
|
||||
// 120s 无 chunk = idle timeout,归 Timeout
|
||||
error_type: Some(ErrorType::Timeout),
|
||||
conversation_id: Some(conv_id.to_string()),
|
||||
});
|
||||
return None;
|
||||
@@ -200,6 +202,9 @@ pub(crate) async fn stream_llm(
|
||||
"stream-error",
|
||||
err_msg,
|
||||
),
|
||||
// provider SSE error 事件体可为 401/overloaded 等多种,
|
||||
// 从文本分类不可靠,归 Unknown(前端可据 error 文本二次判断)
|
||||
error_type: Some(ErrorType::Unknown),
|
||||
conversation_id: Some(conv_id.to_string()),
|
||||
});
|
||||
return None;
|
||||
@@ -226,6 +231,10 @@ pub(crate) async fn stream_llm(
|
||||
&status_or_class,
|
||||
&raw,
|
||||
),
|
||||
// 流已建立后 next() 返 Err = SSE 传输断/解析错,归 Network
|
||||
// (extract_error_diag 已抠 status_or_class,但混合源难统一归 auth/timeout,
|
||||
// 主流为传输断,前端可据 error 文本二次判断 HTTP 4xx 等)
|
||||
error_type: Some(ErrorType::Network),
|
||||
conversation_id: Some(conv_id.to_string()),
|
||||
});
|
||||
return None;
|
||||
@@ -265,6 +274,8 @@ pub(crate) async fn stream_llm(
|
||||
if !finished_received {
|
||||
let _ = app_handle.emit("ai-chat-event", AiChatEvent::AiError {
|
||||
error: "流式响应意外中断(未收到完成信号,已丢弃残缺响应)".to_string(),
|
||||
// 流尽但未收到 finished = 连接异常中断,归 Network
|
||||
error_type: Some(ErrorType::Network),
|
||||
conversation_id: Some(conv_id.to_string()),
|
||||
});
|
||||
return None;
|
||||
@@ -290,6 +301,11 @@ pub(crate) async fn stream_llm(
|
||||
&status_or_class,
|
||||
&raw,
|
||||
),
|
||||
// 建连失败混合源:401(auth)/404(provider_config)/connect(network)/timeout/unknown,
|
||||
// extract_error_diag 已抠 status_or_class 供前端 error 文本展示,但运行时文本分类
|
||||
// 归一 error_type 不可靠(同 raw 跨多类型),按任务约定难精确分类的旧点填 None,
|
||||
// 前端可据 error 文本中的 "HTTP 401" 等自行二次判断。
|
||||
error_type: None,
|
||||
conversation_id: Some(conv_id.to_string()),
|
||||
});
|
||||
None
|
||||
|
||||
Reference in New Issue
Block a user