{"version":3,"file":"useChat.mjs","sources":["../../src/chat/useChat.ts"],"sourcesContent":["// useChat.js\nimport { ref } from 'vue';\nimport { MetaData, TdChatItemProps } from './type';\nimport { formatDateByRule, getUrl, getMofaUrl } from './util';\nimport { sseRequest, fetchSSE } from './sseRequest';\nimport { sseRequest as sseRequestHunyuan, fetchSSE as fetchSSEHunyuan } from './sseRequest-hunyuan';\n\n// @ts-ignore\nexport function useChat(props, emit) {\n  const welcome = props.welcome || [];\n  const apiKey = props.apiKey || '';\n  const assistantMeta: MetaData = props?.assistantMeta || {};\n  const userMeta: MetaData = props?.userMeta || {};\n  const chatList = ref<TdChatItemProps[]>([]);\n  const loading = ref(false);\n  const fetchCancel = ref(null);\n  const isStreamLoad = ref(false);\n  const controller = new AbortController();\n  const { signal } = controller;\n\n  // 获取真实用户和AI信息\n  if (welcome.length > 0) {\n    welcome.forEach((item: string) => {\n      chatList.value.unshift({\n        avatar: assistantMeta?.avatar,\n        name: assistantMeta?.name,\n        datetime: formatDateByRule(new Date(), 'yyyy/MM/dd hh:mm:ss'),\n        content: item,\n        role: 'system',\n      });\n    });\n  }\n  // 监听abort事件\n  signal.addEventListener('abort', () => {\n    try {\n      onAbort && onAbort();\n    } catch {}\n  });\n\n  const clearConfirm = function (context: { e: MouseEvent }) {\n    chatList.value = [];\n    emit('clear', context);\n  };\n\n  const onStop = function () {\n    if (controller && isStreamLoad.value) {\n      // controller.abort(); //自己内部abort不生效\n      fetchCancel.value.abort();\n      // addEventListener('abort'）不生效，提前改变状态变量\n      loading.value = false;\n      isStreamLoad.value = false;\n    }\n  };\n\n  // 区分不同组件的调用方法去请求接口\n  const innerFetchSSE = async function (url: string, params: Object, sseRequest: Function) {\n    const lastItem = chatList.value[0];\n    sseRequest(\n      {\n        url,\n        data: params,\n        success(result: any) {\n          loading.value = false;\n          const { type, data } = result;\n          if (type === 'error') {\n            Object.assign(lastItem, {\n              role: 'error',\n              content: data.response,\n            });\n          } else if (type === 'delta') {\n            lastItem.content += data?.delta.content;\n            // 显示更多\n          } else {\n            // 兼容只有一条数据展示兜底文案\n            if (data?.response) {\n              lastItem.content = data?.response;\n            }\n          }\n        },\n        cancel(cancel: Function) {\n          fetchCancel.value = cancel;\n        },\n        abort() {\n          // 停止请求\n          isStreamLoad.value = false;\n          loading.value = false;\n        },\n        complete(isOk: Boolean, msg: string) {\n          // 兼容500错误 fail和complete逻辑混在一起待优化\n          if (!isOk || !lastItem.content) {\n            lastItem.role = 'error';\n            lastItem.content = msg;\n          }\n          isStreamLoad.value = false;\n          loading.value = false;\n        },\n      },\n      apiKey,\n    );\n  };\n  const operation = (type: string, options: { e: MouseEvent; index: number }) => {\n    const index = options.index;\n    const item = chatList.value[index];\n    if (type === 'replay') {\n      // 重新生成\n      const userQuery = chatList.value[index + 1].content;\n      sendRequest('hunyuan', userQuery as string, props.model || props.mofaId);\n    }\n    emit('operation', type, {\n      ...options,\n      item,\n    });\n  };\n  // model占位表示 hunyuan 模型参数或者mofa的id\n  const getParams = (type: string, inputValue: string, modelOrMofaId?: string) => {\n    const paramsMap = {\n      hunyuan: {\n        reqData: {\n          messages: [\n            {\n              role: 'user',\n              content: inputValue,\n            },\n          ],\n          model: modelOrMofaId || props.model,\n          stream: true,\n        },\n        url: getUrl(props.model),\n        sseRequest: sseRequestHunyuan,\n        fetchSSE: fetchSSEHunyuan, // 提供给chatRequest使用\n      },\n      mofa: {\n        reqData: {\n          query: inputValue,\n          history: [] as any[],\n          mofa_id: modelOrMofaId || props.mofaId,\n          contextFlag: 1,\n        },\n        url: getMofaUrl(),\n        sseRequest,\n        fetchSSE, // 提供给chatRequest使用\n      },\n    };\n    return paramsMap[type];\n  };\n  const setChatList = (inputValue: string) => {\n    // 支持函数传入和属性获取\n    if (loading.value) {\n      return;\n    }\n    if (!inputValue) return;\n    if (props.showUserMsg) {\n      chatList.value.unshift({\n        avatar: userMeta?.avatar,\n        name: userMeta?.name,\n        datetime: new Date().toDateString(),\n        content: inputValue,\n        role: 'user',\n      });\n    }\n    // 空消息占位\n    chatList.value.unshift({\n      avatar: assistantMeta?.avatar,\n      name: assistantMeta?.name,\n      datetime: new Date().toDateString(),\n      content: '',\n      role: 'assistant',\n    });\n  };\n\n  // 监听到abort不生效提到cancel里处理-待优化废弃\n  const onAbort = () => {\n    // 停止请求\n    isStreamLoad.value = false;\n    loading.value = false;\n  };\n  const sendRequest = async function (type: string, inputValue: string, modelOrMofaId?: string) {\n    // 支持函数传入和属性获取\n    setChatList(inputValue);\n    loading.value = true;\n    // 标记流式接口数据加载完成\n    isStreamLoad.value = true;\n    const lastItem = chatList.value[0];\n    const { reqData, url, sseRequest, fetchSSE } = getParams(type, inputValue, modelOrMofaId);\n    // 外部自定义请求\n    if (props.chatRequest) {\n      await fetchSSE(\n        () =>\n          props.chatRequest({\n            messages: [\n              {\n                role: 'user',\n                content: inputValue,\n              },\n            ],\n            cancel(cancel: Function) {\n              fetchCancel.value = cancel;\n            },\n            // signal, 想内置abort，未生效待排查 todo\n          }),\n        {\n          success(result: any) {\n            loading.value = false;\n            const { type, data } = result;\n            if (type === 'error') {\n              Object.assign(lastItem, {\n                role: 'error',\n                content: data.response,\n              });\n            } else if (type === 'delta') {\n              lastItem.content += data?.delta.content;\n              // 显示更多\n            } else {\n              // 兼容只有一条数据展示兜底文案\n              if (data?.response) {\n                lastItem.content = data?.response;\n              }\n            }\n          },\n          complete(isOk: Boolean, msg: string) {\n            // 兼容500错误 fail和complete逻辑混在一起待优化\n            if (!isOk || !lastItem.content) {\n              lastItem.role = 'error';\n              lastItem.content = msg;\n            }\n            isStreamLoad.value = false;\n            loading.value = false;\n          },\n        },\n      );\n      return;\n    }\n    if (!url) return;\n    // 内置流式接口请求\n    innerFetchSSE(url, reqData, sseRequest);\n  };\n  return {\n    chatList,\n    loading,\n    isStreamLoad,\n    onStop,\n    setChatList,\n    operation,\n    clearConfirm,\n    sendRequest,\n  };\n}\n"],"names":["useChat","props","emit","welcome","apiKey","assistantMeta","userMeta","chatList","ref","loading","fetchCancel","isStreamLoad","controller","AbortController","signal","length","forEach","item","value","unshift","avatar","name","datetime","formatDateByRule","Date","content","role","addEventListener","onAbort","_unused","clearConfirm","context","onStop","abort","innerFetchSSE","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","params","sseRequest","lastItem","wrap","_callee$","_context","prev","next","data","success","result","type","Object","assign","response","delta","cancel","complete","isOk","msg","stop","_x","_x2","_x3","apply","arguments","operation","options","index","userQuery","sendRequest","model","mofaId","_objectSpread","getParams","inputValue","modelOrMofaId","paramsMap","hunyuan","reqData","messages","stream","getUrl","sseRequestHunyuan","fetchSSE","fetchSSEHunyuan","mofa","query","history","mofa_id","contextFlag","getMofaUrl","setChatList","showUserMsg","toDateString","_ref2","_callee2","_getParams","sseRequest2","fetchSSE2","_callee2$","_context2","chatRequest","abrupt","_x4","_x5","_x6"],"mappings":"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"}