58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import { Kernel } from "../../../kernel";
|
|
import { ExtensionId, Hook } from "../../catalog";
|
|
import { createModelsExtension, type ModelService } from "../models";
|
|
import { createDeepSeekExtension } from ".";
|
|
|
|
test("reads DeepSeek settings from extension config", async (t) => {
|
|
const environment = {
|
|
DEEPSEEK_API_KEY: process.env.DEEPSEEK_API_KEY,
|
|
DEEPSEEK_BASE_URL: process.env.DEEPSEEK_BASE_URL,
|
|
DEEPSEEK_MODEL: process.env.DEEPSEEK_MODEL,
|
|
};
|
|
delete process.env.DEEPSEEK_API_KEY;
|
|
delete process.env.DEEPSEEK_BASE_URL;
|
|
delete process.env.DEEPSEEK_MODEL;
|
|
t.after(() => {
|
|
for (const [name, value] of Object.entries(environment)) {
|
|
if (value === undefined) delete process.env[name];
|
|
else process.env[name] = value;
|
|
}
|
|
});
|
|
|
|
let requestUrl = "";
|
|
let requestInit: RequestInit | undefined;
|
|
const request = async (url: string, init: RequestInit) => {
|
|
requestUrl = url;
|
|
requestInit = init;
|
|
return new Response("data: [DONE]\n\n");
|
|
};
|
|
const kernel = new Kernel({
|
|
extensionConfigs: {
|
|
[ExtensionId.DeepSeek]: {
|
|
apiKey: "config-key",
|
|
baseUrl: "https://example.test/v1/",
|
|
model: "config-model",
|
|
request,
|
|
},
|
|
},
|
|
}).use(createModelsExtension, createDeepSeekExtension);
|
|
await kernel.start();
|
|
|
|
for await (const _ of kernel
|
|
.get<ModelService>(Hook.Models)
|
|
.chat([{ role: "user", content: "你好" }])) {
|
|
// The test response contains no text chunks.
|
|
}
|
|
|
|
assert.equal(requestUrl, "https://example.test/v1/chat/completions");
|
|
assert.equal(
|
|
(requestInit?.headers as Record<string, string>).authorization,
|
|
"Bearer config-key",
|
|
);
|
|
assert.equal(JSON.parse(String(requestInit?.body)).model, "config-model");
|
|
await kernel.stop();
|
|
});
|