@ai-group/chat-sdk 3.0.13 → 3.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -511,7 +511,10 @@ function useADKChat({
|
|
|
511
511
|
}) : [];
|
|
512
512
|
if (parts.length === 0)
|
|
513
513
|
return;
|
|
514
|
-
parts.
|
|
514
|
+
const textParts = parts.filter((p) => p.text || p.errorMessage || p.inlineData);
|
|
515
|
+
const fileDataParts = parts.filter((p) => p.fileData);
|
|
516
|
+
const otherParts = parts.filter((p) => !p.text && !p.errorMessage && !p.inlineData && !p.fileData);
|
|
517
|
+
if (textParts.length > 0 || fileDataParts.length > 0) {
|
|
515
518
|
const msg = {
|
|
516
519
|
id: (0, import_uuid.v4)(),
|
|
517
520
|
author: item.author,
|
|
@@ -522,33 +525,49 @@ function useADKChat({
|
|
|
522
525
|
role,
|
|
523
526
|
raw: item
|
|
524
527
|
};
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
528
|
+
for (const part of textParts) {
|
|
529
|
+
if (part.inlineData) {
|
|
530
|
+
msg.inlineData = {
|
|
531
|
+
displayName: part.inlineData.displayName,
|
|
532
|
+
data: part.inlineData.data,
|
|
533
|
+
mimeType: part.inlineData.mimeType
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
if (part.text) {
|
|
537
|
+
msg.text = (msg.text ? msg.text + "\n" : "") + part.text;
|
|
538
|
+
if (typeof part.thought !== "undefined")
|
|
539
|
+
msg.thought = part.thought;
|
|
540
|
+
}
|
|
541
|
+
if (part.errorMessage) {
|
|
542
|
+
msg.text = (msg.text ? msg.text + "\n" : "") + part.errorMessage;
|
|
543
|
+
}
|
|
536
544
|
}
|
|
537
|
-
if (
|
|
538
|
-
msg.
|
|
539
|
-
if (part.fileData) {
|
|
540
|
-
msg.inlineData = {
|
|
545
|
+
if (fileDataParts.length > 0) {
|
|
546
|
+
msg.fileData = fileDataParts.map((part) => ({
|
|
541
547
|
displayName: part.fileData.displayName || "",
|
|
542
|
-
|
|
548
|
+
fileUri: part.fileData.fileUri,
|
|
543
549
|
mimeType: part.fileData.mimeType
|
|
544
|
-
};
|
|
550
|
+
}));
|
|
545
551
|
}
|
|
552
|
+
mapped.push(msg);
|
|
553
|
+
}
|
|
554
|
+
otherParts.forEach((part) => {
|
|
555
|
+
const msg = {
|
|
556
|
+
id: (0, import_uuid.v4)(),
|
|
557
|
+
author: item.author,
|
|
558
|
+
invocationId: item.invocationId,
|
|
559
|
+
eventId: item.id,
|
|
560
|
+
timestamp: item.timestamp,
|
|
561
|
+
isLike: item.isLike,
|
|
562
|
+
role,
|
|
563
|
+
raw: item
|
|
564
|
+
};
|
|
565
|
+
if (part.functionCall)
|
|
566
|
+
msg.functionCall = part.functionCall;
|
|
546
567
|
if (part.executableCode)
|
|
547
568
|
msg.executableCode = part.executableCode;
|
|
548
569
|
if (part.codeExecutionResult)
|
|
549
570
|
msg.codeExecutionResult = part.codeExecutionResult;
|
|
550
|
-
if (part.errorMessage)
|
|
551
|
-
msg.text = part.errorMessage;
|
|
552
571
|
if (part.functionResponse) {
|
|
553
572
|
const functionCallMsg = mapped.find(
|
|
554
573
|
(msg2) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/hooks/useADKChat.ts"],
|
|
4
|
-
"sourcesContent": ["import { useEffect, useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n fetchEventSource,\n EventStreamContentType,\n} from \"@microsoft/fetch-event-source\";\nimport { message } from \"antd\";\nimport { v4 } from \"uuid\";\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from \"@/constants\";\nimport {\n SuccessCode,\n ErrorCode,\n DebugOptions,\n FunctionCall,\n SendContent,\n SessionData,\n AgentRunRequest,\n Event,\n FunctionResponse,\n IMessage,\n Part,\n} from \"@/types\";\nimport {\n fetchAppConfig,\n fetchSessionList,\n fetchSessionDetail,\n closeSession,\n updateSessionTitle,\n addFeedback,\n type ChatConfig,\n} from \"@/services/api\";\nimport { safeJsonParse } from \"@/utils\";\n\nconst combineTextParts = (parts: Part[]) => {\n const result: Part[] = [];\n let combinedTextPart: Part | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const part of parts) {\n if (part.text) {\n // 如果没有 combined 或 combined 思考类型跟当前 part 不同,则创建新的合并引用\n if (!combinedTextPart || combinedTextPart.thought !== part.thought) {\n combinedTextPart = { ...part };\n result.push(combinedTextPart);\n } else {\n combinedTextPart.text += part.text;\n }\n } else {\n combinedTextPart = undefined;\n result.push(part);\n }\n }\n return result;\n};\n\nfunction useADKChat({\n url = window.location.origin,\n token,\n config = {},\n type = \"agentDebug\",\n enabled = true, // ← 新增: 是否启用 Hook\n onError,\n onMessage,\n onSuccess,\n onStream,\n}: DebugOptions) {\n const [loading, setLoading] = useState(false);\n const ctrl = useRef<AbortController | null>(null);\n // 应用配置\n const { appNo, showFirstSession } = config || {};\n const [appInfo, setAppInfo] = useState<ChatConfig | null>(null);\n // 初始化完成\n const [initialized, setInitialized] = useState(false);\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>(() => v4());\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({\n total: 0,\n pageNum: 1,\n pageSize: SESSION_PAGE_SIZE,\n });\n // 开场白\n const [prologue, setPrologue] = useState<string>(\"\");\n // 建议问题\n const [suggestedQuestions, setSuggestedQuestions] = useState<string[]>([]);\n const [messages, setMessages] = useState<IMessage[]>([]);\n const mergedMessages = useMemo(() => {\n const fnResMap: Record<string, FunctionResponse> = {};\n messages.forEach((msg) => {\n if (msg.functionResponse) {\n fnResMap[msg?.functionResponse?.id || \"\"] = msg.functionResponse;\n }\n });\n return messages.map((msg) => {\n if (msg.functionCall) {\n return {\n ...msg,\n functionResponse: fnResMap[msg?.functionCall?.id || \"\"],\n };\n }\n return msg;\n });\n }, [messages]);\n const textMsgRef = useRef<IMessage>(null);\n const eventDataRef = useRef<Map<string, any>>(new Map());\n\n // 插入消息\n const insertMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage?.isLoading) {\n return [...prev.slice(0, -1), msg, lastMessage];\n }\n return [...prev, msg];\n });\n }, []);\n\n // 初始化开场白预设置问题\n const insertSuggestedQuestions = (suggested_questions: string[] = []) => {\n if (!suggested_questions?.length) return;\n // 无消息内容 且 有建议问题时\n if (messages.length === 0 && suggested_questions.length) {\n setSuggestedQuestions(suggested_questions);\n }\n };\n\n // 初始化开场白\n const insertPrologue = (prologue: string) => {\n if (prologue) {\n setPrologue(prologue);\n }\n };\n\n // 更新消息\n const updateMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n return prev.map((m) => {\n if (m.id === msg.id) {\n return msg;\n }\n return m;\n });\n });\n }, []);\n\n // 存储事件\n const storeEvents = useCallback((part: Part | null, event: any) => {\n let title = \"\";\n\n if (part == null && event.actions?.artifactDelta) {\n title += \"eventAction: artifact\";\n } else if (part) {\n if (part.text) {\n title += `text:${part.text}`;\n } else if (part.functionCall) {\n title += `functionCall:${part.functionCall.name}`;\n } else if (part.functionResponse) {\n title += `functionResponse:${part.functionResponse.name}`;\n } else if (part.executableCode) {\n title += `executableCode:${part.executableCode.code?.slice(0, 10)}`;\n } else if (part.codeExecutionResult) {\n title += `codeExecutionResult:${part.codeExecutionResult.outcome}`;\n } else if (part.errorMessage) {\n title += `errorMessage:${part.errorMessage}`;\n }\n }\n\n const updatedEvent = { ...event, title };\n\n const newEventData = new Map(eventDataRef.current);\n newEventData.set(event.id, updatedEvent);\n eventDataRef.current = newEventData;\n }, []);\n\n // 存储消息\n const storeMessage = useCallback(\n (part: Part | null, event: Event, role: \"user\" | \"bot\") => {\n const msg: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n isLike: event.isLike || 0,\n role,\n };\n\n if (part) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n };\n } else if (part.text) {\n msg.text = part.text;\n msg.thought = part.thought;\n\n if (event?.groundingMetadata?.searchEntryPoint?.renderedContent) {\n msg.renderedContent =\n event.groundingMetadata.searchEntryPoint.renderedContent;\n }\n } else if (part.fileData) {\n msg.fileData = [part.fileData];\n } else if (part.functionCall) {\n msg.functionCall = part.functionCall;\n } else if (part.functionResponse) {\n msg.functionResponse = part.functionResponse;\n } else if (part.executableCode) {\n msg.executableCode = part.executableCode;\n } else if (part.codeExecutionResult) {\n msg.codeExecutionResult = part.codeExecutionResult;\n }\n }\n\n if (part && Object.keys(part).length > 0) {\n insertMessage(msg);\n }\n },\n [insertMessage],\n );\n\n // 处理消息部分(关键更新)\n const processPart = useCallback(\n (event: Event, part: Part) => {\n const renderedContent =\n event.groundingMetadata?.searchEntryPoint?.renderedContent;\n if (part.text) {\n const newChunk = part.text;\n\n if (\n !textMsgRef.current ||\n textMsgRef.current.thought !== part.thought\n ) {\n const newMessage: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role: \"bot\",\n text: newChunk,\n isLike: event.isLike || 0,\n thought: part.thought,\n };\n\n if (renderedContent) {\n newMessage.renderedContent = renderedContent;\n }\n\n textMsgRef.current = newMessage;\n // 存储原数据\n storeEvents(part, event);\n // 插入消息\n insertMessage(newMessage);\n } else {\n if (event.partial === false) {\n storeEvents(part, event);\n textMsgRef.current = null;\n return;\n }\n if (renderedContent) {\n textMsgRef.current = {\n ...textMsgRef.current,\n renderedContent,\n };\n }\n textMsgRef.current = {\n ...textMsgRef.current,\n text: (textMsgRef.current.text || \"\") + newChunk,\n };\n updateMessage(textMsgRef.current);\n }\n } else {\n textMsgRef.current = null;\n storeEvents(part, event);\n storeMessage(part, event, \"bot\");\n }\n },\n [storeEvents, storeMessage, insertMessage, updateMessage],\n );\n\n // 处理建议类消息\n const processFollowupPart = useCallback(\n (event: Event) => {\n // 获取建议类消息的文本内容\n const part = event?.content?.parts?.[0] || null;\n const text = part?.text || \"\";\n storeEvents(part, event);\n if (text) {\n setSuggestedQuestions((prev) => [...prev, text]);\n }\n },\n [storeEvents, insertMessage],\n );\n\n // 处理错误消息\n const processErrorMessage = useCallback(\n (chunkJson: any) => {\n storeEvents(null, chunkJson);\n insertMessage({\n id: v4(),\n text: chunkJson.errorMessage,\n role: \"bot\",\n });\n },\n [storeEvents, insertMessage],\n );\n\n // 处理动作和制品\n const processActionArtifact = useCallback(\n (event: any) => {\n if (event.actions && event.actions.artifactDelta) {\n storeEvents(null, event);\n storeMessage(null, event, \"bot\");\n }\n },\n [storeEvents, storeMessage],\n );\n\n // 发送消息请求\n const sendMessageRequest = useCallback(\n (values: AgentRunRequest) => {\n return new Promise<void>((resolve) => {\n if (ctrl.current) {\n ctrl.current.abort();\n }\n setLoading(true);\n ctrl.current = new AbortController();\n const requestUrl = `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`;\n\n fetchEventSource(requestUrl, {\n method: \"POST\",\n signal: ctrl.current.signal,\n body: JSON.stringify(values),\n openWhenHidden: true,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n stream: \"true\",\n Authorization: `Bearer ${token}`,\n },\n async onopen(response) {\n if (\n response.ok &&\n response.headers.get(\"content-type\") === EventStreamContentType\n ) {\n // everything's good\n } else if (\n response.status >= 400 &&\n response.status < 500 &&\n response.status !== 429\n ) {\n resolve();\n } else {\n resolve();\n }\n },\n onmessage: (event) => {\n const rawData = safeJsonParse(event.data, {});\n\n // 处理新的数据格式: { data: {...}, result: {...} }\n let chunkJson: Event = rawData;\n if (rawData.data && rawData.result) {\n // 转换为旧格式\n chunkJson = {\n ...rawData.data,\n content: rawData.data, // data 本身就是 content\n invocationId: rawData.result.invocationId,\n sessionId: rawData.result.sessionId,\n id: rawData.result.invocationId,\n };\n }\n\n if (chunkJson.error) {\n message.warning(chunkJson.error);\n return;\n }\n onStream?.(chunkJson);\n if (chunkJson.content) {\n // 建议类消息单独处理\n if (chunkJson.content.role === \"followup\") {\n processFollowupPart(chunkJson);\n return;\n }\n // eslint-disable-next-line no-restricted-syntax\n for (const part of combineTextParts(chunkJson.content.parts)) {\n processPart(chunkJson, part);\n }\n } else if (chunkJson.errorMessage) {\n processErrorMessage(chunkJson);\n } else if (chunkJson.actions) {\n processActionArtifact(chunkJson);\n }\n },\n onclose: () => {\n setLoading(false);\n if (textMsgRef.current) {\n onMessage?.(textMsgRef.current?.text || \"\", textMsgRef.current);\n }\n textMsgRef.current = null;\n resolve();\n },\n onerror: (error) => {\n setLoading(false);\n resolve();\n console.error(\"EventSource failed:\", error);\n throw error;\n },\n });\n });\n },\n [\n type,\n currentSessionId,\n processActionArtifact,\n processErrorMessage,\n processPart,\n ],\n );\n\n // 发送会话\n const startChat = async ({\n text = \"\",\n files = [],\n functionResponse,\n }: SendContent) => {\n if (loading) return;\n if (!text.trim() && !functionResponse) return;\n // 清空建议问题\n setSuggestedQuestions([]);\n // 发送消息\n setMessages((prev) => {\n let temp = [...prev];\n // 如果 text 存在\n if (text.trim()) {\n temp.push({\n id: v4(),\n role: \"user\",\n text,\n });\n }\n // 如果file 存在\n if (files.length > 0) {\n temp.push({\n id: v4(),\n role: \"user\",\n fileData: files.map((file) => ({\n displayName: file.fileName || file.name,\n mimeType: file.mimeType || file.response?.mimeType,\n fileUri: file.tempUrl || file.response?.fileUrl || file.response?.tempUrl,\n })),\n });\n }\n // 如果 functionResponse 存在\n if (functionResponse) {\n temp.push({\n id: v4(),\n role: \"user\",\n functionResponse,\n });\n }\n return temp;\n });\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: functionResponse ? [{ functionResponse }] : [{ text }],\n },\n files: files.map((file) => ({\n fileName: file.fileName || file.response?.fileName,\n fileId: file.fileId || file.response?.fileId,\n tempUrl: file.tempUrl || file.response?.fileUrl || file.response?.tempUrl,\n type: file.type || file.response?.fileType,\n mimeType: file.mimeType || file.response?.mimeType,\n })),\n });\n // 获取聊天记录\n initAppConversations();\n };\n\n // 重新发送会话\n const reChat = () => {\n if (loading) return;\n if (messages.length === 0) return;\n setMessages((prev) => {\n const newMessages = [...prev];\n // 删除最后一条 AI 消息\n const lastAIIndex = newMessages.findLastIndex(\n (msg) => msg.role === \"bot\",\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n // 清空建议问题\n setSuggestedQuestions([]);\n // 重新发送最后一条用户消息\n const lastUserMessage = newMessages.findLast(\n (msg) => msg.role === \"user\",\n );\n if (lastUserMessage) {\n const { text = \"\", fileData = [] } = lastUserMessage;\n sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: [\n {\n text,\n },\n ],\n },\n files: fileData?.map((file) => ({\n fileName: file.displayName,\n tempUrl: file.fileUri,\n mimeType: file.mimeType,\n })),\n });\n }\n\n return newMessages;\n });\n };\n\n // 确认函数调用\n const confirmFnCall = (fnCall: FunctionCall, confirmed: boolean) => {\n const functionResponse = {\n id: fnCall.id,\n name: fnCall.name,\n response: { confirmed },\n };\n startChat({ functionResponse });\n };\n\n // 使用建议问题\n const suggestChat = (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n setSuggestedQuestions([]);\n startChat({ text });\n };\n\n // 停止会话\n const stopChat = useCallback(() => {\n ctrl.current?.abort();\n setLoading(false);\n textMsgRef.current = null;\n }, [ctrl]);\n\n // 清除/重置会话\n const clearChat = () => {\n const newSessionId = v4();\n setCurrentSessionId(newSessionId);\n // 重置聊天内容\n stopChat();\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n setMessages([]);\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n };\n\n // 格式化会话记录\n const formatMessages = (messages: any[], isReplace = false) => {\n const mapped: IMessage[] = [];\n messages.forEach((item) => {\n if (!item || !item.content || !Array.isArray(item.content.parts)) return;\n\n const role =\n (item.content.role || \"\").toLowerCase() === \"user\" ? \"user\" : \"bot\";\n const parts = Array.isArray(item.content.parts)\n ? item.content.parts.filter((p: any) => {\n if (!p) return false;\n return Boolean(\n p.text ||\n p.inlineData ||\n p.functionCall ||\n p.functionResponse ||\n p.fileData ||\n p.executableCode ||\n p.codeExecutionResult ||\n p.errorMessage,\n );\n })\n : [];\n\n if (parts.length === 0) return;\n parts.forEach((part: any) => {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n raw: item,\n } as IMessage;\n\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n } as any;\n }\n if (part.text) {\n msg.text = part.text;\n if (typeof part.thought !== \"undefined\") msg.thought = part.thought;\n }\n if (part.functionCall) msg.functionCall = part.functionCall;\n if (part.fileData) {\n msg.inlineData = {\n displayName: part.fileData.displayName || \"\",\n data: part.fileData.fileUri,\n mimeType: part.fileData.mimeType,\n } as any;\n }\n if (part.executableCode) msg.executableCode = part.executableCode;\n if (part.codeExecutionResult)\n msg.codeExecutionResult = part.codeExecutionResult;\n if (part.errorMessage) msg.text = part.errorMessage;\n // 补全函数调用结果\n if (part.functionResponse) {\n // 通过 functionCall.id 寻找对应的函数调用消息,在那条消息上添加functionResponse\n const functionCallMsg = mapped.find(\n (msg) => msg.functionCall?.id === part.functionResponse?.id,\n );\n if (functionCallMsg) {\n functionCallMsg.functionResponse = part.functionResponse;\n }\n return;\n }\n mapped.push(msg);\n });\n });\n\n setMessages((prev) => (isReplace ? mapped : [...prev, ...mapped]));\n };\n\n // 设置当前会话详情\n const setCurrentSessionDetail = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n // 新接口直接返回按 event/item 结构的数组,传入 formatMessages 处理\n if (Array.isArray(data) && data.length > 0) {\n formatMessages(data, true);\n } else {\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(v4());\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n setLoading(true);\n\n const {\n data = [],\n pagination,\n result,\n } = await fetchSessionList({\n url,\n appNo,\n token,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || \"新对话\",\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n total: pagination?.total || 0,\n });\n const { sessionId } = data?.[0];\n if (showFirstSession) {\n setCurrentSessionDetail(sessionId);\n } else {\n fetchDetail && setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n fetchDetail &&\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n // 成功回调\n if (!initialized) {\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: \"初始化聊天记录成功\",\n data: {\n sessionId,\n },\n });\n setInitialized(true);\n }\n } else {\n // 无会话记录时,初始化会话详情\n clearChat();\n }\n } else {\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue(\"\");\n setSuggestedQuestions([]);\n }\n } catch {\n //\n } finally {\n setLoading(false);\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(true);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n clearChat();\n }\n } else {\n message.error(\"删除会话失败\");\n }\n };\n\n // 点赞/点踩\n const likeMessage = async (\n invocationId: string,\n isLike: 1 | -1,\n feedbackData?: { feedbackTags?: string; feedbackDescription?: string },\n ) => {\n if (!appNo || !invocationId) return false;\n const { result } = await addFeedback({\n url,\n appNo,\n token,\n requestId: invocationId,\n isLike,\n ...feedbackData,\n });\n if (result?.code === API_SUCCESS_CODE) {\n setMessages((prev) =>\n prev.map((m) =>\n m.invocationId === invocationId ? { ...m, isLike } : m,\n ),\n );\n return true;\n }\n return false;\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations();\n } else {\n message.error(\"更新会话失败\");\n }\n };\n\n // 初始化应用\n const initConfig = async () => {\n try {\n setLoading(true);\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: \"初始化配置成功\",\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || \"获取应用配置失败\",\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: \"获取应用配置失败\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 初始化—获取配置 (仅在启用时)\n useEffect(() => {\n if (enabled && url && appNo) {\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, url, appNo]);\n\n // 初始化-聊天记录\n useEffect(() => {\n if (appInfo) {\n initAppConversations(true);\n }\n }, [appInfo]);\n\n return {\n appInfo,\n startChat,\n reChat,\n stopChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n initialized,\n currentSessionId,\n sessionList,\n sessionPagination,\n prologue,\n suggestions: suggestedQuestions,\n loading,\n messages: mergedMessages,\n insertSuggestedQuestions,\n insertPrologue,\n deleteSession,\n updateSession,\n setSuggestedQuestions,\n setCurrentSessionDetail,\n setMessages,\n storeEvents,\n storeMessage,\n likeMessage,\n };\n}\n\nexport default useADKChat;\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { useEffect, useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n fetchEventSource,\n EventStreamContentType,\n} from \"@microsoft/fetch-event-source\";\nimport { message } from \"antd\";\nimport { v4 } from \"uuid\";\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from \"@/constants\";\nimport {\n SuccessCode,\n ErrorCode,\n DebugOptions,\n FunctionCall,\n SendContent,\n SessionData,\n AgentRunRequest,\n Event,\n FunctionResponse,\n IMessage,\n Part,\n} from \"@/types\";\nimport {\n fetchAppConfig,\n fetchSessionList,\n fetchSessionDetail,\n closeSession,\n updateSessionTitle,\n addFeedback,\n type ChatConfig,\n} from \"@/services/api\";\nimport { safeJsonParse } from \"@/utils\";\n\nconst combineTextParts = (parts: Part[]) => {\n const result: Part[] = [];\n let combinedTextPart: Part | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const part of parts) {\n if (part.text) {\n // 如果没有 combined 或 combined 思考类型跟当前 part 不同,则创建新的合并引用\n if (!combinedTextPart || combinedTextPart.thought !== part.thought) {\n combinedTextPart = { ...part };\n result.push(combinedTextPart);\n } else {\n combinedTextPart.text += part.text;\n }\n } else {\n combinedTextPart = undefined;\n result.push(part);\n }\n }\n return result;\n};\n\nfunction useADKChat({\n url = window.location.origin,\n token,\n config = {},\n type = \"agentDebug\",\n enabled = true, // ← 新增: 是否启用 Hook\n onError,\n onMessage,\n onSuccess,\n onStream,\n}: DebugOptions) {\n const [loading, setLoading] = useState(false);\n const ctrl = useRef<AbortController | null>(null);\n // 应用配置\n const { appNo, showFirstSession } = config || {};\n const [appInfo, setAppInfo] = useState<ChatConfig | null>(null);\n // 初始化完成\n const [initialized, setInitialized] = useState(false);\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>(() => v4());\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({\n total: 0,\n pageNum: 1,\n pageSize: SESSION_PAGE_SIZE,\n });\n // 开场白\n const [prologue, setPrologue] = useState<string>(\"\");\n // 建议问题\n const [suggestedQuestions, setSuggestedQuestions] = useState<string[]>([]);\n const [messages, setMessages] = useState<IMessage[]>([]);\n const mergedMessages = useMemo(() => {\n const fnResMap: Record<string, FunctionResponse> = {};\n messages.forEach((msg) => {\n if (msg.functionResponse) {\n fnResMap[msg?.functionResponse?.id || \"\"] = msg.functionResponse;\n }\n });\n return messages.map((msg) => {\n if (msg.functionCall) {\n return {\n ...msg,\n functionResponse: fnResMap[msg?.functionCall?.id || \"\"],\n };\n }\n return msg;\n });\n }, [messages]);\n const textMsgRef = useRef<IMessage>(null);\n const eventDataRef = useRef<Map<string, any>>(new Map());\n\n // 插入消息\n const insertMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage?.isLoading) {\n return [...prev.slice(0, -1), msg, lastMessage];\n }\n return [...prev, msg];\n });\n }, []);\n\n // 初始化开场白预设置问题\n const insertSuggestedQuestions = (suggested_questions: string[] = []) => {\n if (!suggested_questions?.length) return;\n // 无消息内容 且 有建议问题时\n if (messages.length === 0 && suggested_questions.length) {\n setSuggestedQuestions(suggested_questions);\n }\n };\n\n // 初始化开场白\n const insertPrologue = (prologue: string) => {\n if (prologue) {\n setPrologue(prologue);\n }\n };\n\n // 更新消息\n const updateMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n return prev.map((m) => {\n if (m.id === msg.id) {\n return msg;\n }\n return m;\n });\n });\n }, []);\n\n // 存储事件\n const storeEvents = useCallback((part: Part | null, event: any) => {\n let title = \"\";\n\n if (part == null && event.actions?.artifactDelta) {\n title += \"eventAction: artifact\";\n } else if (part) {\n if (part.text) {\n title += `text:${part.text}`;\n } else if (part.functionCall) {\n title += `functionCall:${part.functionCall.name}`;\n } else if (part.functionResponse) {\n title += `functionResponse:${part.functionResponse.name}`;\n } else if (part.executableCode) {\n title += `executableCode:${part.executableCode.code?.slice(0, 10)}`;\n } else if (part.codeExecutionResult) {\n title += `codeExecutionResult:${part.codeExecutionResult.outcome}`;\n } else if (part.errorMessage) {\n title += `errorMessage:${part.errorMessage}`;\n }\n }\n\n const updatedEvent = { ...event, title };\n\n const newEventData = new Map(eventDataRef.current);\n newEventData.set(event.id, updatedEvent);\n eventDataRef.current = newEventData;\n }, []);\n\n // 存储消息\n const storeMessage = useCallback(\n (part: Part | null, event: Event, role: \"user\" | \"bot\") => {\n const msg: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n isLike: event.isLike || 0,\n role,\n };\n\n if (part) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n };\n } else if (part.text) {\n msg.text = part.text;\n msg.thought = part.thought;\n\n if (event?.groundingMetadata?.searchEntryPoint?.renderedContent) {\n msg.renderedContent =\n event.groundingMetadata.searchEntryPoint.renderedContent;\n }\n } else if (part.fileData) {\n msg.fileData = [part.fileData];\n } else if (part.functionCall) {\n msg.functionCall = part.functionCall;\n } else if (part.functionResponse) {\n msg.functionResponse = part.functionResponse;\n } else if (part.executableCode) {\n msg.executableCode = part.executableCode;\n } else if (part.codeExecutionResult) {\n msg.codeExecutionResult = part.codeExecutionResult;\n }\n }\n\n if (part && Object.keys(part).length > 0) {\n insertMessage(msg);\n }\n },\n [insertMessage],\n );\n\n // 处理消息部分(关键更新)\n const processPart = useCallback(\n (event: Event, part: Part) => {\n const renderedContent =\n event.groundingMetadata?.searchEntryPoint?.renderedContent;\n if (part.text) {\n const newChunk = part.text;\n\n if (\n !textMsgRef.current ||\n textMsgRef.current.thought !== part.thought\n ) {\n const newMessage: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role: \"bot\",\n text: newChunk,\n isLike: event.isLike || 0,\n thought: part.thought,\n };\n\n if (renderedContent) {\n newMessage.renderedContent = renderedContent;\n }\n\n textMsgRef.current = newMessage;\n // 存储原数据\n storeEvents(part, event);\n // 插入消息\n insertMessage(newMessage);\n } else {\n if (event.partial === false) {\n storeEvents(part, event);\n textMsgRef.current = null;\n return;\n }\n if (renderedContent) {\n textMsgRef.current = {\n ...textMsgRef.current,\n renderedContent,\n };\n }\n textMsgRef.current = {\n ...textMsgRef.current,\n text: (textMsgRef.current.text || \"\") + newChunk,\n };\n updateMessage(textMsgRef.current);\n }\n } else {\n textMsgRef.current = null;\n storeEvents(part, event);\n storeMessage(part, event, \"bot\");\n }\n },\n [storeEvents, storeMessage, insertMessage, updateMessage],\n );\n\n // 处理建议类消息\n const processFollowupPart = useCallback(\n (event: Event) => {\n // 获取建议类消息的文本内容\n const part = event?.content?.parts?.[0] || null;\n const text = part?.text || \"\";\n storeEvents(part, event);\n if (text) {\n setSuggestedQuestions((prev) => [...prev, text]);\n }\n },\n [storeEvents, insertMessage],\n );\n\n // 处理错误消息\n const processErrorMessage = useCallback(\n (chunkJson: any) => {\n storeEvents(null, chunkJson);\n insertMessage({\n id: v4(),\n text: chunkJson.errorMessage,\n role: \"bot\",\n });\n },\n [storeEvents, insertMessage],\n );\n\n // 处理动作和制品\n const processActionArtifact = useCallback(\n (event: any) => {\n if (event.actions && event.actions.artifactDelta) {\n storeEvents(null, event);\n storeMessage(null, event, \"bot\");\n }\n },\n [storeEvents, storeMessage],\n );\n\n // 发送消息请求\n const sendMessageRequest = useCallback(\n (values: AgentRunRequest) => {\n return new Promise<void>((resolve) => {\n if (ctrl.current) {\n ctrl.current.abort();\n }\n setLoading(true);\n ctrl.current = new AbortController();\n const requestUrl = `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`;\n\n fetchEventSource(requestUrl, {\n method: \"POST\",\n signal: ctrl.current.signal,\n body: JSON.stringify(values),\n openWhenHidden: true,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n stream: \"true\",\n Authorization: `Bearer ${token}`,\n },\n async onopen(response) {\n if (\n response.ok &&\n response.headers.get(\"content-type\") === EventStreamContentType\n ) {\n // everything's good\n } else if (\n response.status >= 400 &&\n response.status < 500 &&\n response.status !== 429\n ) {\n resolve();\n } else {\n resolve();\n }\n },\n onmessage: (event) => {\n const rawData = safeJsonParse(event.data, {});\n\n // 处理新的数据格式: { data: {...}, result: {...} }\n let chunkJson: Event = rawData;\n if (rawData.data && rawData.result) {\n // 转换为旧格式\n chunkJson = {\n ...rawData.data,\n content: rawData.data, // data 本身就是 content\n invocationId: rawData.result.invocationId,\n sessionId: rawData.result.sessionId,\n id: rawData.result.invocationId,\n };\n }\n\n if (chunkJson.error) {\n message.warning(chunkJson.error);\n return;\n }\n onStream?.(chunkJson);\n if (chunkJson.content) {\n // 建议类消息单独处理\n if (chunkJson.content.role === \"followup\") {\n processFollowupPart(chunkJson);\n return;\n }\n // eslint-disable-next-line no-restricted-syntax\n for (const part of combineTextParts(chunkJson.content.parts)) {\n processPart(chunkJson, part);\n }\n } else if (chunkJson.errorMessage) {\n processErrorMessage(chunkJson);\n } else if (chunkJson.actions) {\n processActionArtifact(chunkJson);\n }\n },\n onclose: () => {\n setLoading(false);\n if (textMsgRef.current) {\n onMessage?.(textMsgRef.current?.text || \"\", textMsgRef.current);\n }\n textMsgRef.current = null;\n resolve();\n },\n onerror: (error) => {\n setLoading(false);\n resolve();\n console.error(\"EventSource failed:\", error);\n throw error;\n },\n });\n });\n },\n [\n type,\n currentSessionId,\n processActionArtifact,\n processErrorMessage,\n processPart,\n ],\n );\n\n // 发送会话\n const startChat = async ({\n text = \"\",\n files = [],\n functionResponse,\n }: SendContent) => {\n if (loading) return;\n if (!text.trim() && !functionResponse) return;\n // 清空建议问题\n setSuggestedQuestions([]);\n // 发送消息\n setMessages((prev) => {\n let temp = [...prev];\n // 如果 text 存在\n if (text.trim()) {\n temp.push({\n id: v4(),\n role: \"user\",\n text,\n });\n }\n // 如果file 存在\n if (files.length > 0) {\n temp.push({\n id: v4(),\n role: \"user\",\n fileData: files.map((file) => ({\n displayName: file.fileName || file.name,\n mimeType: file.mimeType || file.response?.mimeType,\n fileUri: file.tempUrl || file.response?.fileUrl || file.response?.tempUrl,\n })),\n });\n }\n // 如果 functionResponse 存在\n if (functionResponse) {\n temp.push({\n id: v4(),\n role: \"user\",\n functionResponse,\n });\n }\n return temp;\n });\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: functionResponse ? [{ functionResponse }] : [{ text }],\n },\n files: files.map((file) => ({\n fileName: file.fileName || file.response?.fileName,\n fileId: file.fileId || file.response?.fileId,\n tempUrl: file.tempUrl || file.response?.fileUrl || file.response?.tempUrl,\n type: file.type || file.response?.fileType,\n mimeType: file.mimeType || file.response?.mimeType,\n })),\n });\n // 获取聊天记录\n initAppConversations();\n };\n\n // 重新发送会话\n const reChat = () => {\n if (loading) return;\n if (messages.length === 0) return;\n setMessages((prev) => {\n const newMessages = [...prev];\n // 删除最后一条 AI 消息\n const lastAIIndex = newMessages.findLastIndex(\n (msg) => msg.role === \"bot\",\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n // 清空建议问题\n setSuggestedQuestions([]);\n // 重新发送最后一条用户消息\n const lastUserMessage = newMessages.findLast(\n (msg) => msg.role === \"user\",\n );\n if (lastUserMessage) {\n const { text = \"\", fileData = [] } = lastUserMessage;\n sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: [\n {\n text,\n },\n ],\n },\n files: fileData?.map((file) => ({\n fileName: file.displayName,\n tempUrl: file.fileUri,\n mimeType: file.mimeType,\n })),\n });\n }\n\n return newMessages;\n });\n };\n\n // 确认函数调用\n const confirmFnCall = (fnCall: FunctionCall, confirmed: boolean) => {\n const functionResponse = {\n id: fnCall.id,\n name: fnCall.name,\n response: { confirmed },\n };\n startChat({ functionResponse });\n };\n\n // 使用建议问题\n const suggestChat = (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n setSuggestedQuestions([]);\n startChat({ text });\n };\n\n // 停止会话\n const stopChat = useCallback(() => {\n ctrl.current?.abort();\n setLoading(false);\n textMsgRef.current = null;\n }, [ctrl]);\n\n // 清除/重置会话\n const clearChat = () => {\n const newSessionId = v4();\n setCurrentSessionId(newSessionId);\n // 重置聊天内容\n stopChat();\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n setMessages([]);\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n };\n\n // 格式化会话记录\n const formatMessages = (messages: any[], isReplace = false) => {\n const mapped: IMessage[] = [];\n messages.forEach((item) => {\n if (!item || !item.content || !Array.isArray(item.content.parts)) return;\n\n const role =\n (item.content.role || \"\").toLowerCase() === \"user\" ? \"user\" : \"bot\";\n const parts = Array.isArray(item.content.parts)\n ? item.content.parts.filter((p: any) => {\n if (!p) return false;\n return Boolean(\n p.text ||\n p.inlineData ||\n p.functionCall ||\n p.functionResponse ||\n p.fileData ||\n p.executableCode ||\n p.codeExecutionResult ||\n p.errorMessage,\n );\n })\n : [];\n\n if (parts.length === 0) return;\n\n // 将同一条历史消息的 text/fileData parts 合并到一条 IMessage,避免拆分显示\n const textParts = parts.filter((p: any) => p.text || p.errorMessage || p.inlineData);\n const fileDataParts = parts.filter((p: any) => p.fileData);\n const otherParts = parts.filter((p: any) => !p.text && !p.errorMessage && !p.inlineData && !p.fileData);\n\n // 如果有 text/fileData,合并为一条消息\n if (textParts.length > 0 || fileDataParts.length > 0) {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n raw: item,\n } as IMessage;\n\n for (const part of textParts) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n } as any;\n }\n if (part.text) {\n msg.text = (msg.text ? msg.text + \"\\n\" : \"\") + part.text;\n if (typeof part.thought !== \"undefined\") msg.thought = part.thought;\n }\n if (part.errorMessage) {\n msg.text = (msg.text ? msg.text + \"\\n\" : \"\") + part.errorMessage;\n }\n }\n\n if (fileDataParts.length > 0) {\n msg.fileData = fileDataParts.map((part: any) => ({\n displayName: part.fileData.displayName || \"\",\n fileUri: part.fileData.fileUri,\n mimeType: part.fileData.mimeType,\n }));\n }\n\n mapped.push(msg);\n }\n\n // 处理其他类型的 parts(functionCall、executableCode 等)\n otherParts.forEach((part: any) => {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n raw: item,\n } as IMessage;\n\n if (part.functionCall) msg.functionCall = part.functionCall;\n if (part.executableCode) msg.executableCode = part.executableCode;\n if (part.codeExecutionResult)\n msg.codeExecutionResult = part.codeExecutionResult;\n // 补全函数调用结果\n if (part.functionResponse) {\n // 通过 functionCall.id 寻找对应的函数调用消息,在那条消息上添加functionResponse\n const functionCallMsg = mapped.find(\n (msg) => msg.functionCall?.id === part.functionResponse?.id,\n );\n if (functionCallMsg) {\n functionCallMsg.functionResponse = part.functionResponse;\n }\n return;\n }\n mapped.push(msg);\n });\n });\n\n setMessages((prev) => (isReplace ? mapped : [...prev, ...mapped]));\n };\n\n // 设置当前会话详情\n const setCurrentSessionDetail = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n // 新接口直接返回按 event/item 结构的数组,传入 formatMessages 处理\n if (Array.isArray(data) && data.length > 0) {\n formatMessages(data, true);\n } else {\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(v4());\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n setLoading(true);\n\n const {\n data = [],\n pagination,\n result,\n } = await fetchSessionList({\n url,\n appNo,\n token,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || \"新对话\",\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n total: pagination?.total || 0,\n });\n const { sessionId } = data?.[0];\n if (showFirstSession) {\n setCurrentSessionDetail(sessionId);\n } else {\n fetchDetail && setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n fetchDetail &&\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n // 成功回调\n if (!initialized) {\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: \"初始化聊天记录成功\",\n data: {\n sessionId,\n },\n });\n setInitialized(true);\n }\n } else {\n // 无会话记录时,初始化会话详情\n clearChat();\n }\n } else {\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue(\"\");\n setSuggestedQuestions([]);\n }\n } catch {\n //\n } finally {\n setLoading(false);\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(true);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n clearChat();\n }\n } else {\n message.error(\"删除会话失败\");\n }\n };\n\n // 点赞/点踩\n const likeMessage = async (\n invocationId: string,\n isLike: 1 | -1,\n feedbackData?: { feedbackTags?: string; feedbackDescription?: string },\n ) => {\n if (!appNo || !invocationId) return false;\n const { result } = await addFeedback({\n url,\n appNo,\n token,\n requestId: invocationId,\n isLike,\n ...feedbackData,\n });\n if (result?.code === API_SUCCESS_CODE) {\n setMessages((prev) =>\n prev.map((m) =>\n m.invocationId === invocationId ? { ...m, isLike } : m,\n ),\n );\n return true;\n }\n return false;\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations();\n } else {\n message.error(\"更新会话失败\");\n }\n };\n\n // 初始化应用\n const initConfig = async () => {\n try {\n setLoading(true);\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: \"初始化配置成功\",\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || \"获取应用配置失败\",\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: \"获取应用配置失败\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 初始化—获取配置 (仅在启用时)\n useEffect(() => {\n if (enabled && url && appNo) {\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, url, appNo]);\n\n // 初始化-聊天记录\n useEffect(() => {\n if (appInfo) {\n initAppConversations(true);\n }\n }, [appInfo]);\n\n return {\n appInfo,\n startChat,\n reChat,\n stopChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n initialized,\n currentSessionId,\n sessionList,\n sessionPagination,\n prologue,\n suggestions: suggestedQuestions,\n loading,\n messages: mergedMessages,\n insertSuggestedQuestions,\n insertPrologue,\n deleteSession,\n updateSession,\n setSuggestedQuestions,\n setCurrentSessionDetail,\n setMessages,\n storeEvents,\n storeMessage,\n likeMessage,\n };\n}\n\nexport default useADKChat;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["prologue", "messages", "msg"]
|
|
7
7
|
}
|
|
@@ -623,7 +623,20 @@ function useADKChat(_ref) {
|
|
|
623
623
|
return Boolean(p.text || p.inlineData || p.functionCall || p.functionResponse || p.fileData || p.executableCode || p.codeExecutionResult || p.errorMessage);
|
|
624
624
|
}) : [];
|
|
625
625
|
if (parts.length === 0) return;
|
|
626
|
-
|
|
626
|
+
|
|
627
|
+
// 将同一条历史消息的 text/fileData parts 合并到一条 IMessage,避免拆分显示
|
|
628
|
+
var textParts = parts.filter(function (p) {
|
|
629
|
+
return p.text || p.errorMessage || p.inlineData;
|
|
630
|
+
});
|
|
631
|
+
var fileDataParts = parts.filter(function (p) {
|
|
632
|
+
return p.fileData;
|
|
633
|
+
});
|
|
634
|
+
var otherParts = parts.filter(function (p) {
|
|
635
|
+
return !p.text && !p.errorMessage && !p.inlineData && !p.fileData;
|
|
636
|
+
});
|
|
637
|
+
|
|
638
|
+
// 如果有 text/fileData,合并为一条消息
|
|
639
|
+
if (textParts.length > 0 || fileDataParts.length > 0) {
|
|
627
640
|
var msg = {
|
|
628
641
|
id: v4(),
|
|
629
642
|
author: item.author,
|
|
@@ -634,28 +647,58 @@ function useADKChat(_ref) {
|
|
|
634
647
|
role: role,
|
|
635
648
|
raw: item
|
|
636
649
|
};
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
650
|
+
var _iterator3 = _createForOfIteratorHelper(textParts),
|
|
651
|
+
_step3;
|
|
652
|
+
try {
|
|
653
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
654
|
+
var part = _step3.value;
|
|
655
|
+
if (part.inlineData) {
|
|
656
|
+
msg.inlineData = {
|
|
657
|
+
displayName: part.inlineData.displayName,
|
|
658
|
+
data: part.inlineData.data,
|
|
659
|
+
mimeType: part.inlineData.mimeType
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
if (part.text) {
|
|
663
|
+
msg.text = (msg.text ? msg.text + "\n" : "") + part.text;
|
|
664
|
+
if (typeof part.thought !== "undefined") msg.thought = part.thought;
|
|
665
|
+
}
|
|
666
|
+
if (part.errorMessage) {
|
|
667
|
+
msg.text = (msg.text ? msg.text + "\n" : "") + part.errorMessage;
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
} catch (err) {
|
|
671
|
+
_iterator3.e(err);
|
|
672
|
+
} finally {
|
|
673
|
+
_iterator3.f();
|
|
643
674
|
}
|
|
644
|
-
if (
|
|
645
|
-
msg.
|
|
646
|
-
|
|
675
|
+
if (fileDataParts.length > 0) {
|
|
676
|
+
msg.fileData = fileDataParts.map(function (part) {
|
|
677
|
+
return {
|
|
678
|
+
displayName: part.fileData.displayName || "",
|
|
679
|
+
fileUri: part.fileData.fileUri,
|
|
680
|
+
mimeType: part.fileData.mimeType
|
|
681
|
+
};
|
|
682
|
+
});
|
|
647
683
|
}
|
|
684
|
+
mapped.push(msg);
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// 处理其他类型的 parts(functionCall、executableCode 等)
|
|
688
|
+
otherParts.forEach(function (part) {
|
|
689
|
+
var msg = {
|
|
690
|
+
id: v4(),
|
|
691
|
+
author: item.author,
|
|
692
|
+
invocationId: item.invocationId,
|
|
693
|
+
eventId: item.id,
|
|
694
|
+
timestamp: item.timestamp,
|
|
695
|
+
isLike: item.isLike,
|
|
696
|
+
role: role,
|
|
697
|
+
raw: item
|
|
698
|
+
};
|
|
648
699
|
if (part.functionCall) msg.functionCall = part.functionCall;
|
|
649
|
-
if (part.fileData) {
|
|
650
|
-
msg.inlineData = {
|
|
651
|
-
displayName: part.fileData.displayName || "",
|
|
652
|
-
data: part.fileData.fileUri,
|
|
653
|
-
mimeType: part.fileData.mimeType
|
|
654
|
-
};
|
|
655
|
-
}
|
|
656
700
|
if (part.executableCode) msg.executableCode = part.executableCode;
|
|
657
701
|
if (part.codeExecutionResult) msg.codeExecutionResult = part.codeExecutionResult;
|
|
658
|
-
if (part.errorMessage) msg.text = part.errorMessage;
|
|
659
702
|
// 补全函数调用结果
|
|
660
703
|
if (part.functionResponse) {
|
|
661
704
|
// 通过 functionCall.id 寻找对应的函数调用消息,在那条消息上添加functionResponse
|