@just-every/ensemble
Version:
LLM provider abstraction layer with unified streaming interface
100 lines • 4.52 kB
JavaScript
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