File size: 1,675 Bytes
ec70da3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | import { completion, parseSSEStream } from './chat.js';
import { pickToken } from './auth.js';
import { dispatchQueued } from './queue.js';
const MODEL_MAP = {
'deepseek-v4-flash': 'default',
'deepseek-v4-pro': 'expert',
'deepseek-v4-vision': 'vision',
'deepseek-v4-flash[1m]': 'default',
'deepseek-v4-pro[1m]': 'expert',
'deepseek-v4-vision[1m]': 'vision',
};
export async function handleDeepSeekCompletion(req, res) {
const body = req.body;
const modelType = body.model_type || MODEL_MAP[body.model] || 'default';
const prompt = body.prompt || '';
const thinkingEnabled = body.thinking_enabled ?? false;
const searchEnabled = body.search_enabled ?? false;
const parentMessageId = body.parent_message_id ?? null;
const refFileIds = body.ref_file_ids ?? [];
if (!prompt) {
return res.status(400).json({ code: 1, msg: 'prompt is required' });
}
try {
const { body: streamBody, slot } = await completion({ modelType, prompt, thinkingEnabled, searchEnabled, parentMessageId, refFileIds });
res.writeHead(200, {
'Content-Type': 'text/event-stream; charset=utf-8',
'Cache-Control': 'no-cache',
});
const reader = streamBody.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) break;
res.write(value);
}
} finally {
reader.releaseLock();
}
res.end();
} catch (err) {
console.error('DeepSeek completion error:', err.message);
if (!res.headersSent) {
res.status(500).json({ code: 1, msg: err.message });
} else {
res.end();
}
} finally {
slot.release();
dispatchQueued();
}
}
|