引入二级大纲功能,新增父子节点关系及子节点排序,同时调整API与UI以支持嵌套大纲管理
This commit is contained in:
@@ -33,6 +33,22 @@ export async function clearMessages(novelId?: number): Promise<void> {
|
||||
await http.delete('/chat/messages', { params })
|
||||
}
|
||||
|
||||
export interface CompressResult {
|
||||
compressed: boolean
|
||||
reason?: string
|
||||
error?: string
|
||||
removed_count?: number
|
||||
kept_count?: number
|
||||
summary_length?: number
|
||||
}
|
||||
|
||||
export async function compressContext(novelId?: number): Promise<CompressResult> {
|
||||
const params: Record<string, unknown> = {}
|
||||
if (novelId !== undefined) params.novel_id = novelId
|
||||
const { data } = await http.post<CompressResult>('/chat/compress', null, { params })
|
||||
return data
|
||||
}
|
||||
|
||||
// ── 流式聊天 ──
|
||||
|
||||
export interface TokenUsage {
|
||||
@@ -59,6 +75,7 @@ export interface StreamChatOptions {
|
||||
novelId?: number
|
||||
pageContext?: string
|
||||
toolsEnabled?: boolean
|
||||
autoApproveTools?: boolean
|
||||
// 工具审批续传
|
||||
pendingToolCalls?: PendingToolCallData[]
|
||||
assistantText?: string
|
||||
@@ -67,15 +84,16 @@ export interface StreamChatOptions {
|
||||
onError: (error: string) => void
|
||||
onDone: (usage?: TokenUsage, pending?: boolean) => void
|
||||
onToolCallsPending?: (calls: PendingToolCallData[], assistantText: string) => void
|
||||
onToolCallsAuto?: (calls: PendingToolCallData[]) => void
|
||||
onToolResult?: (info: ToolResultInfo) => void
|
||||
signal?: AbortSignal
|
||||
}
|
||||
|
||||
export async function streamChat(options: StreamChatOptions): Promise<void> {
|
||||
const {
|
||||
messages, novelId, pageContext, toolsEnabled,
|
||||
messages, novelId, pageContext, toolsEnabled, autoApproveTools,
|
||||
pendingToolCalls, assistantText,
|
||||
onChunk, onError, onDone, onToolCallsPending, onToolResult,
|
||||
onChunk, onError, onDone, onToolCallsPending, onToolCallsAuto, onToolResult,
|
||||
signal,
|
||||
} = options
|
||||
|
||||
@@ -84,6 +102,7 @@ export async function streamChat(options: StreamChatOptions): Promise<void> {
|
||||
novel_id: novelId ?? null,
|
||||
page_context: pageContext ?? null,
|
||||
tools_enabled: toolsEnabled ?? true,
|
||||
auto_approve_tools: autoApproveTools ?? false,
|
||||
pending_tool_calls: pendingToolCalls ?? null,
|
||||
assistant_text: assistantText ?? null,
|
||||
})
|
||||
@@ -133,6 +152,9 @@ export async function streamChat(options: StreamChatOptions): Promise<void> {
|
||||
if (event.tool_calls_pending && onToolCallsPending) {
|
||||
onToolCallsPending(event.tool_calls_pending, event.assistant_text ?? '')
|
||||
}
|
||||
if (event.tool_calls_auto && onToolCallsAuto) {
|
||||
onToolCallsAuto(event.tool_calls_auto)
|
||||
}
|
||||
if (event.tool_result && onToolResult) {
|
||||
onToolResult(event.tool_result)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user