mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-06-16 13:34:04 +08:00
0877b9e35d
Bump the default Opus route/model from claude-opus-4-7 to claude-opus-4-8 across provider presets (claude, claudeDesktop, hermes, openclaw, opencode, universal), i18n locales (zh/en/ja/zh-TW), pricing seed data, and the user-manual docs. - Add claude-opus-4-8 pricing row ($5/$25/$0.50/$6.25); keep the 4-7 row for historical usage stats (seeded via INSERT OR IGNORE). - Claude Desktop proxy: accept bidirectional opus 4-7 <-> 4-8 route alias during rollout so previously saved routes keep resolving. - thinking_optimizer: route opus-4-8 through adaptive thinking and normalize dotted model ids (also fixes dotted 4-6/4-7 falling back to legacy). - usage_stats: normalize Bedrock/Vertex/aggregator opus-4-8 ids to base pricing. Also merge role:"system" messages into the Gemini systemInstruction in the Anthropic->Gemini transform.
96 lines
3.5 KiB
TypeScript
96 lines
3.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
opencodeProviderPresets,
|
|
opencodeNpmPackages,
|
|
OPENCODE_PRESET_MODEL_VARIANTS,
|
|
} from "@/config/opencodeProviderPresets";
|
|
|
|
describe("AWS Bedrock OpenCode Provider Presets", () => {
|
|
it("should include @ai-sdk/amazon-bedrock in npm packages", () => {
|
|
const bedrockPkg = opencodeNpmPackages.find(
|
|
(p) => p.value === "@ai-sdk/amazon-bedrock",
|
|
);
|
|
expect(bedrockPkg).toBeDefined();
|
|
expect(bedrockPkg!.label).toBe("Amazon Bedrock");
|
|
});
|
|
|
|
it("should include Bedrock model variants", () => {
|
|
const variants = OPENCODE_PRESET_MODEL_VARIANTS["@ai-sdk/amazon-bedrock"];
|
|
expect(variants).toBeDefined();
|
|
expect(variants.length).toBeGreaterThan(0);
|
|
|
|
const opusModel = variants.find((v) =>
|
|
v.id.includes("anthropic.claude-opus-4-8"),
|
|
);
|
|
expect(opusModel).toBeDefined();
|
|
});
|
|
|
|
const bedrockPreset = opencodeProviderPresets.find(
|
|
(p) => p.name === "AWS Bedrock",
|
|
);
|
|
|
|
it("should include AWS Bedrock preset", () => {
|
|
expect(bedrockPreset).toBeDefined();
|
|
});
|
|
|
|
it("Bedrock preset should use @ai-sdk/amazon-bedrock npm package", () => {
|
|
expect(bedrockPreset!.settingsConfig.npm).toBe("@ai-sdk/amazon-bedrock");
|
|
});
|
|
|
|
it("Bedrock preset should have region in options", () => {
|
|
expect(bedrockPreset!.settingsConfig.options).toHaveProperty("region");
|
|
});
|
|
|
|
it("Bedrock preset should have cloud_provider category", () => {
|
|
expect(bedrockPreset!.category).toBe("cloud_provider");
|
|
});
|
|
|
|
it("Bedrock preset should have template values for AWS credentials", () => {
|
|
expect(bedrockPreset!.templateValues).toBeDefined();
|
|
expect(bedrockPreset!.templateValues!.region).toBeDefined();
|
|
expect(bedrockPreset!.templateValues!.region.editorValue).toBe("us-west-2");
|
|
expect(bedrockPreset!.templateValues!.accessKeyId).toBeDefined();
|
|
expect(bedrockPreset!.templateValues!.secretAccessKey).toBeDefined();
|
|
});
|
|
|
|
it("Bedrock preset should include Claude models", () => {
|
|
const models = bedrockPreset!.settingsConfig.models;
|
|
expect(models).toBeDefined();
|
|
const modelIds = Object.keys(models!);
|
|
expect(modelIds.some((id) => id.includes("anthropic.claude"))).toBe(true);
|
|
});
|
|
|
|
it("Kimi For Coding preset should use Anthropic with the coding endpoint", () => {
|
|
const kimiForCodingPreset = opencodeProviderPresets.find(
|
|
(p) => p.name === "Kimi For Coding",
|
|
);
|
|
|
|
expect(kimiForCodingPreset).toBeDefined();
|
|
expect(kimiForCodingPreset!.settingsConfig.npm).toBe("@ai-sdk/anthropic");
|
|
expect(kimiForCodingPreset!.settingsConfig.options?.baseURL).toBe(
|
|
"https://api.kimi.com/coding/v1",
|
|
);
|
|
expect(kimiForCodingPreset!.templateValues?.baseURL.defaultValue).toBe(
|
|
"https://api.kimi.com/coding/v1",
|
|
);
|
|
});
|
|
|
|
it("Xiaomi MiMo presets should include official OpenCode model metadata", () => {
|
|
const presets = ["Xiaomi MiMo", "Xiaomi MiMo Token Plan (China)"].map(
|
|
(name) => opencodeProviderPresets.find((preset) => preset.name === name),
|
|
);
|
|
|
|
for (const preset of presets) {
|
|
expect(preset).toBeDefined();
|
|
expect(preset!.settingsConfig.models["mimo-v2.5-pro"]).toMatchObject({
|
|
limit: { context: 1048576, output: 131072 },
|
|
modalities: { input: ["text"], output: ["text"] },
|
|
});
|
|
expect(preset!.settingsConfig.models["mimo-v2.5"]).toMatchObject({
|
|
limit: { context: 1048576, output: 131072 },
|
|
modalities: { input: ["text", "image"], output: ["text"] },
|
|
});
|
|
}
|
|
});
|
|
});
|