@ant-design/x-sdk
Version:
placeholder for @ant-design/x-sdk
70 lines (69 loc) • 2.3 kB
JavaScript
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'
};
}
}