UNPKG

@ant-design/x-sdk

Version:

placeholder for @ant-design/x-sdk

70 lines (69 loc) 2.3 kB
import AbstractChatProvider from "./AbstractChatProvider"; /** * DeepSeek Chat Provider * @template ChatMessage 消息类型 * @template Input 请求参数类型 * @template Output 响应数据类型 */ export default class DeepSeekChatProvider extends AbstractChatProvider { transformParams(requestParams, options) { return { ...(options?.params || {}), ...requestParams, messages: this.getMessages() }; } transformLocalMessage(requestParams) { return requestParams?.messages || []; } transformMessage(info) { const { originMessage, chunk, chunks, responseHeaders } = info; let currentContent = ''; let currentThink = ''; let role = 'assistant'; try { let message; if (responseHeaders.get('content-type')?.includes('text/event-stream')) { if (chunk && chunk.data?.trim() !== '[DONE]') { message = JSON.parse(chunk.data); } } else { message = chunk || chunks[0]; } if (message) { message?.choices?.forEach(choice => { if (choice?.delta) { currentThink = choice.delta.reasoning_content || ''; currentContent += choice.delta.content || ''; role = choice.delta.role; } else if (choice?.message) { currentThink = choice.message.reasoning_content || ''; currentContent += choice.message.content || ''; role = choice.message.role; } }); } } catch (error) { console.error('transformMessage error', error); } let content = ''; let originMessageContent = typeof originMessage?.content === 'string' ? originMessage?.content : originMessage?.content.text || ''; if (!originMessageContent && currentThink) { content = `<think>${currentThink}`; } else if (originMessageContent.includes('<think>') && !originMessageContent.includes('</think>') && currentContent) { originMessageContent = originMessageContent.replace('<think>', '<think status="done">'); content = `${originMessageContent}</think>${currentContent}`; } else { content = `${originMessageContent || ''}${currentThink}${currentContent}`; } return { content, role: role || 'assistant' }; } }