2026-08-04 17:44:47 +08:00

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();
});