UNPKG

@just-every/ensemble

Version:

LLM provider abstraction layer with unified streaming interface

100 lines 4.52 kB
import { OpenAIChat } from './openai_chat.js'; export class DeepSeekProvider extends OpenAIChat { constructor() { super('deepseek', process.env.DEEPSEEK_API_KEY, 'https://api.deepseek.com/v1'); } prepareParameters(requestParams) { if (requestParams.model === 'deepseek-reasoner') { requestParams.max_tokens = 8000; delete requestParams.response_format; delete requestParams.logprobs; delete requestParams.top_logprobs; if ('tool_choice' in requestParams) { delete requestParams.tool_choice; } let messages = [...requestParams.messages]; messages = messages.map(originalMessage => { let message = { ...originalMessage }; if (message.role === 'assistant' && message.tool_calls) { const calls = message.tool_calls .map(toolCall => { if (toolCall.type === 'function') { const args = typeof toolCall.function.arguments === 'string' ? toolCall.function.arguments : JSON.stringify(toolCall.function.arguments); return `Called function '${toolCall.function.name}' with arguments: ${args}`; } return `(Unsupported tool call type: ${toolCall.type})`; }) .join('\n'); message = { role: 'assistant', content: `[Previous Action] ${calls}`, }; } else if (message.role === 'tool') { const contentString = typeof message.content === 'string' ? message.content : JSON.stringify(message.content); const toolCallIdInfo = message.tool_call_id ? ` for call ID ${message.tool_call_id}` : ''; message = { role: 'user', content: `[Tool Result${toolCallIdInfo}] ${contentString}`, }; } if (typeof message.content !== 'string') { message.content = JSON.stringify(message.content); } return message; }); if (messages.length === 0 || messages[messages.length - 1].role !== 'user') { const aiName = process.env.AI_NAME || 'Magi'; messages.push({ role: 'user', content: `${aiName} thoughts: Let me think through this step by step...`, }); } const systemContents = []; let finalMessages = []; messages.forEach(msg => { if (msg.role === 'system') { if (msg.content && typeof msg.content === 'string') { systemContents.push(msg.content); } else if (msg.content) { try { systemContents.push(JSON.stringify(msg.content)); } catch (e) { console.error(`(${this.provider}) Failed to stringify system message content:`, e); } } } else { finalMessages.push(msg); } }); finalMessages = finalMessages.reduce((acc, currentMessage) => { const lastMessage = acc.length > 0 ? acc[acc.length - 1] : null; if (lastMessage && lastMessage.role === currentMessage.role) { lastMessage.content = `${lastMessage.content ?? ''}\n\n${currentMessage.content ?? ''}`; } else { acc.push({ ...currentMessage }); } return acc; }, []); if (systemContents.length > 0) { finalMessages.unshift({ role: 'system', content: systemContents.join('\n\n'), }); } requestParams.messages = finalMessages; } else { return super.prepareParameters(requestParams); } return requestParams; } } export const deepSeekProvider = new DeepSeekProvider(); //# sourceMappingURL=deepseek.js.map