import { Result } from '@/request/Result' import { get, post, postStream, del, put, request, download, exportFile, } from '@/request/chat/index' import { type ChatProfile } from '@/api/type/chat' import { type Ref } from 'vue' import type { ResetPasswordRequest } from '@/api/type/user.ts' import useStore from '@/stores' import type { LoginRequest } from '@/api/type/user' const prefix: any = { _value: '/workspace/' } Object.defineProperty(prefix, 'value', { get: function () { const { user } = useStore() return this._value + user.getWorkspaceId() + '/application' }, }) /** * 打开调试对话id * @param application_id 应用id * @param loading 加载器 * @returns */ const open: (loading?: Ref) => Promise> = (loading) => { return get('/open', {}, loading) } /** * 对话 * @param 参数 * chat_id: string * data */ const chat: (chat_id: string, data: any) => Promise = (chat_id, data) => { const prefix = (window.MaxKB?.prefix ? window.MaxKB?.prefix : '/chat') + '/api' return postStream(`${prefix}/chat_message/${chat_id}`, data) } /** * 应用认证信息 */ const chatProfile: (assessToken: string, loading?: Ref) => Promise> = ( assessToken, loading, ) => { return get('/profile', { access_token: assessToken }, loading) } /** * 匿名认证 * @param assessToken * @param loading * @returns */ const anonymousAuthentication: ( assessToken: string, loading?: Ref, ) => Promise> = (assessToken, loading) => { return post('/auth/anonymous', { access_token: assessToken }, {}, loading) } /** * 密码认证 * @param assessToken * @param password * @param loading * @returns */ const passwordAuthentication: ( assessToken: string, password: string, loading?: Ref, ) => Promise> = (assessToken, password, loading) => { return post('auth/password', { access_token: assessToken, password: password }, {}, loading) } /** * 获取应用相关信息 * @param loading * @returns */ const applicationProfile: (loading?: Ref) => Promise> = (loading) => { return get('/application/profile', {}, loading) } /** * 登录 * @param request 登录接口请求表单 * @param loading 接口加载器 * @returns 认证数据 */ const login: ( accessToken: string, request: LoginRequest, loading?: Ref, ) => Promise> = (accessToken: string, request, loading) => { return post('/auth/login/' + accessToken, request, undefined, loading) } const ldapLogin: ( accessToken: string, request: LoginRequest, loading?: Ref, ) => Promise> = (accessToken: string, request, loading) => { return post('/auth/ldap/login/' + accessToken, request, undefined, loading) } /** * 获取验证码 * @param loading 接口加载器 */ const getCaptcha: (loading?: Ref) => Promise> = (loading) => { return get('/captcha', undefined, loading) } /** * 获取二维码类型 */ const getQrType: (loading?: Ref) => Promise> = (loading) => { return get('qr_type', undefined, loading) } const getQrSource: (loading?: Ref) => Promise> = (loading) => { return get('qr_type/source', undefined, loading) } const getDingCallback: (code: string, loading?: Ref) => Promise> = ( code, loading, ) => { return get('dingtalk', { code }, loading) } const getDingOauth2Callback: (code: string, loading?: Ref) => Promise> = ( code, loading, ) => { return get('dingtalk/oauth2', { code }, loading) } const getWecomCallback: (code: string, loading?: Ref) => Promise> = ( code, loading, ) => { return get('wecom', { code }, loading) } const getLarkCallback: (code: string, loading?: Ref) => Promise> = ( code, loading, ) => { return get('lark/oauth2', { code }, loading) } /** * 获取认证设置 */ const getAuthSetting: (auth_type: string, loading?: Ref) => Promise> = ( auth_type, loading, ) => { return get(`/chat_user/${auth_type}/detail`, undefined, loading) } /** * 点赞点踩 * @param chat_id 对话id * @param chat_record_id 对话记录id * @param vote_status 点赞状态 * @param loading 加载器 * @returns */ const vote: ( chat_id: string, chat_record_id: string, vote_status: string, loading?: Ref, ) => Promise> = (chat_id, chat_record_id, vote_status, loading) => { return put( `/vote/chat/${chat_id}/chat_record/${chat_record_id}`, { vote_status, }, undefined, loading, ) } const pageChat: ( current_page: number, page_size: number, loading?: Ref, ) => Promise> = (current_page, page_size, loading) => { return get(`/historical_conversation/${current_page}/${page_size}`, undefined, loading) } const pageChatRecord: ( chat_id: string, current_page: number, page_size: number, loading?: Ref, ) => Promise> = (chat_id, current_page, page_size, loading) => { return get( `/historical_conversation_record/${chat_id}/${current_page}/${page_size}`, undefined, loading, ) } /** * 登出 */ const logout: (loading?: Ref) => Promise> = (loading) => { return post('/auth/logout', undefined, undefined, loading) } /** * 重置密码 */ const resetCurrentPassword: ( request: ResetPasswordRequest, loading?: Ref, ) => Promise> = (request, loading) => { return post('/chat_user/current/reset_password', request, undefined, loading) } /** * 获取当前用户信息 */ const getChatUserProfile: (loading?: Ref) => Promise> = (loading) => { return get('/chat_user/profile', {}, loading) } /** * 获取对话详情 * @param chat_id 对话id * @param chat_record_id 对话记录id * @param loading 加载器 * @returns */ const getChatRecord: ( chat_id: string, chat_record_id: string, loading?: Ref, ) => Promise> = (chat_id, chat_record_id, loading) => { return get(`historical_conversation/${chat_id}/record/${chat_record_id}`, {}, loading) } /** * 文本转语音 */ const textToSpeech: (data: any, loading?: Ref) => Promise> = ( data, loading, ) => { return download(`text_to_speech`, 'post', data, undefined, loading) } /** * 语音转文本 */ const speechToText: (data: any, loading?: Ref) => Promise> = ( data, loading, ) => { return post(`speech_to_text`, data, undefined, loading) } /** * * @param chat_id 对话ID * @param loading * @returns */ const deleteChat: (chat_id: string, loading?: Ref) => Promise> = ( chat_id, loading, ) => { return del(`historical_conversation/${chat_id}`, loading) } /** * * @param chat_id 对话id * @param data 对话简介 * @param loading * @returns */ const modifyChat: (chat_id: string, data: any, loading?: Ref) => Promise> = ( chat_id, data, loading, ) => { return put(`historical_conversation/${chat_id}`, data, undefined, loading) } /** * 上传文件 * @param file 文件 * @param sourceId 资源id * @param resourceType 资源类型 * @returns */ const postUploadFile: ( file: any, sourceId: string, resourceType: | 'KNOWLEDGE' | 'APPLICATION' | 'TOOL' | 'DOCUMENT' | 'CHAT' | 'TEMPORARY_30_MINUTE' | 'TEMPORARY_120_MINUTE' | 'TEMPORARY_1_DAY', loading?: Ref, ) => Promise> = (file, sourceId, sourceType, loading) => { const fd = new FormData() fd.append('file', file) fd.append('source_id', sourceId) fd.append('source_type', sourceType) return post(`/oss/file`, fd, undefined, loading) } export default { open, chat, chatProfile, anonymousAuthentication, applicationProfile, login, getCaptcha, getDingCallback, getQrType, getWecomCallback, getDingOauth2Callback, getLarkCallback, getQrSource, ldapLogin, getAuthSetting, passwordAuthentication, vote, pageChat, pageChatRecord, logout, resetCurrentPassword, getChatUserProfile, getChatRecord, textToSpeech, speechToText, deleteChat, modifyChat, postUploadFile, }