Files
NetMesh/infrastructure/ai/providerStyle.test.ts

58 lines
3.1 KiB
TypeScript
Raw Permalink Normal View History

import assert from "node:assert/strict";
import test from "node:test";
import { PROVIDER_PRESETS, resolveOpenAIApi, resolveProviderStyle } from "./types";
test("resolveProviderStyle prefers an explicit style override", () => {
assert.equal(resolveProviderStyle({ providerId: "custom", style: "anthropic" }), "anthropic");
assert.equal(resolveProviderStyle({ providerId: "openai", style: "google" }), "google");
});
test("resolveProviderStyle falls back to providerId for anthropic", () => {
assert.equal(resolveProviderStyle({ providerId: "anthropic" }), "anthropic");
});
test("resolveProviderStyle falls back to providerId for google", () => {
assert.equal(resolveProviderStyle({ providerId: "google" }), "google");
});
test("resolveProviderStyle treats every other providerId as the OpenAI-compatible family", () => {
for (const providerId of ["openai", "ollama", "openrouter", "qwen", "deepseek", "kimi", "zhipu", "doubao", "mimo", "custom"] as const) {
assert.equal(resolveProviderStyle({ providerId }), "openai", `expected openai for ${providerId}`);
}
});
test("resolveOpenAIApi defaults missing and unknown values to Chat Completions", () => {
assert.equal(resolveOpenAIApi({}), "chat");
assert.equal(resolveOpenAIApi({ openaiApi: "chat" }), "chat");
assert.equal(resolveOpenAIApi({ openaiApi: "responses" }), "responses");
assert.equal(resolveOpenAIApi({ openaiApi: "weird" as "chat" }), "chat");
});
test("domestic provider presets include editable OpenAI-compatible base URLs", () => {
assert.equal(PROVIDER_PRESETS.qwen.defaultBaseURL, "https://dashscope.aliyuncs.com/compatible-mode/v1");
assert.equal(PROVIDER_PRESETS.deepseek.defaultBaseURL, "https://api.deepseek.com/v1");
assert.equal(PROVIDER_PRESETS.kimi.defaultBaseURL, "https://api.moonshot.ai/v1");
assert.equal(PROVIDER_PRESETS.zhipu.defaultBaseURL, "https://open.bigmodel.cn/api/paas/v4");
assert.equal(PROVIDER_PRESETS.doubao.defaultBaseURL, "https://ark.cn-beijing.volces.com/api/v3");
assert.equal(PROVIDER_PRESETS.mimo.defaultBaseURL, "https://api.xiaomimimo.com/v1");
});
test("openrouter keeps dynamic model discovery instead of a static preset list", () => {
assert.equal(PROVIDER_PRESETS.openrouter.defaultBaseURL, "https://openrouter.ai/api/v1");
assert.equal(PROVIDER_PRESETS.openrouter.modelsEndpoint, "/models");
assert.equal(PROVIDER_PRESETS.openrouter.defaultModels, undefined);
});
test("domestic provider presets expose provider-specific model suggestions", () => {
assert.equal(PROVIDER_PRESETS.qwen.defaultModels?.[0], "qwen3.7-plus");
assert.ok(PROVIDER_PRESETS.qwen.defaultModels?.includes("qwen3.7-max"));
assert.equal(PROVIDER_PRESETS.deepseek.defaultModels?.[0], "deepseek-v4-flash");
assert.ok(PROVIDER_PRESETS.kimi.defaultModels?.includes("kimi-k2.6"));
assert.ok(PROVIDER_PRESETS.zhipu.defaultModels?.includes("glm-5.1"));
assert.ok(PROVIDER_PRESETS.doubao.defaultModels?.includes("doubao-seed-2-0-pro-260215"));
assert.ok(!PROVIDER_PRESETS.doubao.defaultModels?.some((model) => model.startsWith("ep-")));
assert.ok(PROVIDER_PRESETS.mimo.defaultModels?.includes("mimo-v2.5-pro"));
assert.equal(PROVIDER_PRESETS.custom.defaultModels, undefined);
});