Add automatic prefill for Deepseek - works the same way as with Claude
This commit is contained in:
+27
-7
@@ -1,4 +1,4 @@
|
||||
import { Router } from "express";
|
||||
import { Request, Router } from "express";
|
||||
import { createPreprocessorMiddleware } from "./middleware/request";
|
||||
import { ipLimiter } from "./rate-limit";
|
||||
import { createQueuedProxyMiddleware } from "./middleware/request/proxy-middleware-factory";
|
||||
@@ -22,20 +22,40 @@ const deepseekResponseHandler: ProxyResHandlerWithBody = async (
|
||||
|
||||
const deepseekProxy = createQueuedProxyMiddleware({
|
||||
mutations: [addKey, finalizeBody],
|
||||
target: "https://api.deepseek.com",
|
||||
target: "https://api.deepseek.com/beta",
|
||||
blockingResponseHandler: deepseekResponseHandler,
|
||||
});
|
||||
|
||||
const deepseekRouter = Router();
|
||||
|
||||
// combines all the assistant messages at the end of the context and adds the
|
||||
// beta 'prefix' option, makes prefills work the same way they work for Claude
|
||||
function enablePrefill(req: Request) {
|
||||
// If you want to disable
|
||||
if (process.env.NO_DEEPSEEK_PREFILL) return
|
||||
|
||||
const msgs = req.body.messages;
|
||||
if (msgs.at(-1)?.role !== 'assistant') return;
|
||||
|
||||
let i = msgs.length - 1;
|
||||
let content = '';
|
||||
|
||||
while (i >= 0 && msgs[i].role === 'assistant') {
|
||||
// maybe we should also add a newline between messages? no for now.
|
||||
content = msgs[i--].content + content;
|
||||
}
|
||||
|
||||
msgs.splice(i + 1, msgs.length, { role: 'assistant', content, prefix: true });
|
||||
}
|
||||
|
||||
|
||||
deepseekRouter.post(
|
||||
"/v1/chat/completions",
|
||||
ipLimiter,
|
||||
createPreprocessorMiddleware({
|
||||
inApi: "openai",
|
||||
outApi: "openai",
|
||||
service: "deepseek"
|
||||
}),
|
||||
createPreprocessorMiddleware(
|
||||
{ inApi: "openai", outApi: "openai", service: "deepseek" },
|
||||
{ afterTransform: [ enablePrefill ] }
|
||||
),
|
||||
deepseekProxy
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user