Files
2026-07-13 13:39:12 +08:00

71 lines
3.1 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { existsSync } from "node:fs";
import { join } from "node:path";
import { REGISTRY, getRegistryEntry } from "../../open-sse/config/providerRegistry.ts";
import { PROVIDERS } from "../../open-sse/config/constants.ts";
import { getModelsByProviderId, isValidModel } from "../../src/shared/constants/models.ts";
import { APIKEY_PROVIDERS } from "../../src/shared/constants/providers.ts";
import { validateBody, createProviderSchema } from "../../src/shared/validation/schemas.ts";
test("qianfan registers Baidu ERNIE as an OpenAI-compatible API key provider", () => {
const registryEntry = getRegistryEntry("qianfan");
assert.ok(registryEntry, "qianfan should be in the provider registry");
assert.equal(registryEntry, REGISTRY.qianfan);
assert.equal(registryEntry.id, "qianfan");
assert.equal(registryEntry.alias, "qianfan");
assert.equal(registryEntry.format, "openai");
assert.equal(registryEntry.executor, "default");
assert.equal(registryEntry.authType, "apikey");
assert.equal(registryEntry.authHeader, "bearer");
assert.equal(registryEntry.baseUrl, "https://qianfan.baidubce.com/v2/chat/completions");
assert.equal(registryEntry.defaultContextLength, 128000);
assert.equal(registryEntry.passthroughModels, undefined);
assert.ok(APIKEY_PROVIDERS.qianfan, "qianfan should be visible in API key providers");
assert.equal(APIKEY_PROVIDERS.qianfan.name, "Baidu Qianfan");
assert.equal(APIKEY_PROVIDERS.qianfan.website, "https://cloud.baidu.com/product/wenxinworkshop");
assert.equal(APIKEY_PROVIDERS.qianfan.passthroughModels, undefined);
assert.equal(PROVIDERS.qianfan.baseUrl, registryEntry.baseUrl);
assert.equal(PROVIDERS.qianfan.format, "openai");
assert.equal("modelsUrl" in PROVIDERS.qianfan, false);
assert.equal("passthroughModels" in PROVIDERS.qianfan, false);
});
test("qianfan exposes ERNIE chat models in the local model catalog", () => {
const models = getModelsByProviderId("qianfan");
const modelIds = models.map((model) => model.id);
assert.ok(modelIds.includes("ernie-5.1"));
assert.ok(modelIds.includes("ernie-5.0-thinking-latest"));
assert.ok(modelIds.includes("ernie-x1.1"));
assert.equal(models.find((model) => model.id === "ernie-x1.1")?.contextLength, 64000);
assert.ok(models.every((model) => typeof model.name === "string" && model.name.length > 0));
});
test("qianfan accepts known model IDs", () => {
assert.equal(isValidModel("qianfan", "ernie-5.1"), true);
assert.equal(isValidModel("qianfan", "future-qianfan-openai-compatible-model"), false);
});
test("qianfan provider creation schema accepts API-key connections", () => {
const validation = validateBody(createProviderSchema, {
provider: "qianfan",
apiKey: "bce-v3/test-key",
name: "Baidu Qianfan",
});
assert.equal(validation.success, true);
if (validation.success) {
assert.equal(validation.data.provider, "qianfan");
assert.equal(validation.data.apiKey, "bce-v3/test-key");
}
});
test("qianfan has a static provider icon asset", () => {
assert.equal(existsSync(join(process.cwd(), "public/providers/qianfan.svg")), true);
});