mirror of
https://github.com/moltbot/moltbot.git
synced 2026-03-07 22:44:16 +00:00
refactor(tests): dedupe model compat assertions
This commit is contained in:
@@ -45,6 +45,22 @@ function createRegistry(models: Record<string, Model<Api>>): ModelRegistry {
|
||||
} as ModelRegistry;
|
||||
}
|
||||
|
||||
function expectSupportsDeveloperRoleForcedOff(overrides?: Partial<Model<Api>>): void {
|
||||
const model = { ...baseModel(), ...overrides };
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model as Model<Api>);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
}
|
||||
|
||||
function expectResolvedForwardCompat(
|
||||
model: Model<Api> | undefined,
|
||||
expected: { provider: string; id: string },
|
||||
): void {
|
||||
expect(model?.id).toBe(expected.id);
|
||||
expect(model?.name).toBe(expected.id);
|
||||
expect(model?.provider).toBe(expected.provider);
|
||||
}
|
||||
|
||||
describe("normalizeModelCompat — Anthropic baseUrl", () => {
|
||||
const anthropicBase = (): Model<Api> =>
|
||||
({
|
||||
@@ -106,54 +122,35 @@ describe("normalizeModelCompat — Anthropic baseUrl", () => {
|
||||
|
||||
describe("normalizeModelCompat", () => {
|
||||
it("forces supportsDeveloperRole off for z.ai models", () => {
|
||||
const model = baseModel();
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
expectSupportsDeveloperRoleForcedOff();
|
||||
});
|
||||
|
||||
it("forces supportsDeveloperRole off for moonshot models", () => {
|
||||
const model = {
|
||||
...baseModel(),
|
||||
expectSupportsDeveloperRoleForcedOff({
|
||||
provider: "moonshot",
|
||||
baseUrl: "https://api.moonshot.ai/v1",
|
||||
};
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("forces supportsDeveloperRole off for custom moonshot-compatible endpoints", () => {
|
||||
const model = {
|
||||
...baseModel(),
|
||||
expectSupportsDeveloperRoleForcedOff({
|
||||
provider: "custom-kimi",
|
||||
baseUrl: "https://api.moonshot.cn/v1",
|
||||
};
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("forces supportsDeveloperRole off for DashScope provider ids", () => {
|
||||
const model = {
|
||||
...baseModel(),
|
||||
expectSupportsDeveloperRoleForcedOff({
|
||||
provider: "dashscope",
|
||||
baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||
};
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("forces supportsDeveloperRole off for DashScope-compatible endpoints", () => {
|
||||
const model = {
|
||||
...baseModel(),
|
||||
expectSupportsDeveloperRoleForcedOff({
|
||||
provider: "custom-qwen",
|
||||
baseUrl: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
|
||||
};
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("leaves native api.openai.com model untouched", () => {
|
||||
@@ -168,35 +165,23 @@ describe("normalizeModelCompat", () => {
|
||||
});
|
||||
|
||||
it("forces supportsDeveloperRole off for Azure OpenAI (Chat Completions, not Responses API)", () => {
|
||||
const model = {
|
||||
...baseModel(),
|
||||
expectSupportsDeveloperRoleForcedOff({
|
||||
provider: "azure-openai",
|
||||
baseUrl: "https://my-deployment.openai.azure.com/openai",
|
||||
};
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
});
|
||||
});
|
||||
it("forces supportsDeveloperRole off for generic custom openai-completions provider", () => {
|
||||
const model = {
|
||||
...baseModel(),
|
||||
expectSupportsDeveloperRoleForcedOff({
|
||||
provider: "custom-cpa",
|
||||
baseUrl: "https://cpa.example.com/v1",
|
||||
};
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("forces supportsDeveloperRole off for Qwen proxy via openai-completions", () => {
|
||||
const model = {
|
||||
...baseModel(),
|
||||
expectSupportsDeveloperRoleForcedOff({
|
||||
provider: "qwen-proxy",
|
||||
baseUrl: "https://qwen-api.example.org/compatible-mode/v1",
|
||||
};
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("leaves openai-completions model with empty baseUrl untouched", () => {
|
||||
@@ -211,14 +196,10 @@ describe("normalizeModelCompat", () => {
|
||||
});
|
||||
|
||||
it("forces supportsDeveloperRole off for malformed baseUrl values", () => {
|
||||
const model = {
|
||||
...baseModel(),
|
||||
expectSupportsDeveloperRoleForcedOff({
|
||||
provider: "custom-cpa",
|
||||
baseUrl: "://api.openai.com malformed",
|
||||
};
|
||||
delete (model as { compat?: unknown }).compat;
|
||||
const normalized = normalizeModelCompat(model);
|
||||
expect(supportsDeveloperRole(normalized)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
it("overrides explicit supportsDeveloperRole true on non-native endpoints", () => {
|
||||
@@ -271,9 +252,7 @@ describe("resolveForwardCompatModel", () => {
|
||||
"anthropic/claude-opus-4-5": createTemplateModel("anthropic", "claude-opus-4-5"),
|
||||
});
|
||||
const model = resolveForwardCompatModel("anthropic", "claude-opus-4-6", registry);
|
||||
expect(model?.id).toBe("claude-opus-4-6");
|
||||
expect(model?.name).toBe("claude-opus-4-6");
|
||||
expect(model?.provider).toBe("anthropic");
|
||||
expectResolvedForwardCompat(model, { provider: "anthropic", id: "claude-opus-4-6" });
|
||||
});
|
||||
|
||||
it("resolves anthropic sonnet 4.6 dot variant with suffix", () => {
|
||||
@@ -284,9 +263,7 @@ describe("resolveForwardCompatModel", () => {
|
||||
),
|
||||
});
|
||||
const model = resolveForwardCompatModel("anthropic", "claude-sonnet-4.6-20260219", registry);
|
||||
expect(model?.id).toBe("claude-sonnet-4.6-20260219");
|
||||
expect(model?.name).toBe("claude-sonnet-4.6-20260219");
|
||||
expect(model?.provider).toBe("anthropic");
|
||||
expectResolvedForwardCompat(model, { provider: "anthropic", id: "claude-sonnet-4.6-20260219" });
|
||||
});
|
||||
|
||||
it("does not resolve anthropic 4.6 fallback for other providers", () => {
|
||||
|
||||
Reference in New Issue
Block a user