mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-05-17 10:29:11 +08:00
feat: add AWS Bedrock OpenCode provider preset with @ai-sdk/amazon-bedrock
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,7 @@ export const opencodeNpmPackages = [
|
||||
{ value: "@ai-sdk/openai", label: "OpenAI" },
|
||||
{ value: "@ai-sdk/openai-compatible", label: "OpenAI Compatible" },
|
||||
{ value: "@ai-sdk/anthropic", label: "Anthropic" },
|
||||
{ value: "@ai-sdk/amazon-bedrock", label: "Amazon Bedrock" },
|
||||
{ value: "@ai-sdk/google", label: "Google (Gemini)" },
|
||||
] as const;
|
||||
|
||||
@@ -315,6 +316,50 @@ export const OPENCODE_PRESET_MODEL_VARIANTS: Record<
|
||||
},
|
||||
},
|
||||
],
|
||||
"@ai-sdk/amazon-bedrock": [
|
||||
{
|
||||
id: "global.anthropic.claude-opus-4-6-v1",
|
||||
name: "Claude Opus 4.6",
|
||||
contextLimit: 1000000,
|
||||
outputLimit: 128000,
|
||||
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
|
||||
},
|
||||
{
|
||||
id: "global.anthropic.claude-sonnet-4-5-20250929-v1:0",
|
||||
name: "Claude Sonnet 4.5",
|
||||
contextLimit: 200000,
|
||||
outputLimit: 64000,
|
||||
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
|
||||
},
|
||||
{
|
||||
id: "global.anthropic.claude-haiku-4-5-20251001-v1:0",
|
||||
name: "Claude Haiku 4.5",
|
||||
contextLimit: 200000,
|
||||
outputLimit: 64000,
|
||||
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
|
||||
},
|
||||
{
|
||||
id: "us.amazon.nova-pro-v1:0",
|
||||
name: "Amazon Nova Pro",
|
||||
contextLimit: 300000,
|
||||
outputLimit: 5000,
|
||||
modalities: { input: ["text", "image"], output: ["text"] },
|
||||
},
|
||||
{
|
||||
id: "us.meta.llama4-maverick-17b-instruct-v1:0",
|
||||
name: "Meta Llama 4 Maverick",
|
||||
contextLimit: 131072,
|
||||
outputLimit: 131072,
|
||||
modalities: { input: ["text"], output: ["text"] },
|
||||
},
|
||||
{
|
||||
id: "us.deepseek.r1-v1:0",
|
||||
name: "DeepSeek R1",
|
||||
contextLimit: 131072,
|
||||
outputLimit: 131072,
|
||||
modalities: { input: ["text"], output: ["text"] },
|
||||
},
|
||||
],
|
||||
"@ai-sdk/anthropic": [
|
||||
{
|
||||
id: "claude-sonnet-4-5-20250929",
|
||||
@@ -1089,6 +1134,54 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: "AWS Bedrock",
|
||||
websiteUrl: "https://aws.amazon.com/bedrock/",
|
||||
settingsConfig: {
|
||||
npm: "@ai-sdk/amazon-bedrock",
|
||||
name: "AWS Bedrock",
|
||||
options: {
|
||||
region: "${region}",
|
||||
accessKeyId: "${accessKeyId}",
|
||||
secretAccessKey: "${secretAccessKey}",
|
||||
},
|
||||
models: {
|
||||
"global.anthropic.claude-opus-4-6-v1": { name: "Claude Opus 4.6" },
|
||||
"global.anthropic.claude-sonnet-4-5-20250929-v1:0": {
|
||||
name: "Claude Sonnet 4.5",
|
||||
},
|
||||
"global.anthropic.claude-haiku-4-5-20251001-v1:0": {
|
||||
name: "Claude Haiku 4.5",
|
||||
},
|
||||
"us.amazon.nova-pro-v1:0": { name: "Amazon Nova Pro" },
|
||||
"us.meta.llama4-maverick-17b-instruct-v1:0": {
|
||||
name: "Meta Llama 4 Maverick",
|
||||
},
|
||||
"us.deepseek.r1-v1:0": { name: "DeepSeek R1" },
|
||||
},
|
||||
},
|
||||
category: "cloud_provider",
|
||||
icon: "aws",
|
||||
iconColor: "#FF9900",
|
||||
templateValues: {
|
||||
region: {
|
||||
label: "AWS Region",
|
||||
placeholder: "us-west-2",
|
||||
defaultValue: "us-west-2",
|
||||
editorValue: "us-west-2",
|
||||
},
|
||||
accessKeyId: {
|
||||
label: "Access Key ID",
|
||||
placeholder: "AKIA...",
|
||||
editorValue: "",
|
||||
},
|
||||
secretAccessKey: {
|
||||
label: "Secret Access Key",
|
||||
placeholder: "your-secret-key",
|
||||
editorValue: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "OpenAI Compatible",
|
||||
websiteUrl: "",
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
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-6"),
|
||||
);
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user