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