mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-16 12:03:23 +00:00
feat(ai): Add Amazon Bedrock provider (#494)
Adds support for Amazon Bedrock with Claude models including: - Full streaming support via Converse API - Reasoning/thinking support for Claude models - Cross-region inference model ID handling - Multiple AWS credential sources (profile, IAM keys, API keys) - Image support in messages and tool results - Unicode surrogate sanitization Also adds 'Adding a New Provider' documentation to AGENTS.md and README. Co-authored-by: nickchan2 <nickchan2@users.noreply.github.com>
This commit is contained in:
parent
4f216d318f
commit
fd268479a4
31 changed files with 3550 additions and 2593 deletions
|
|
@ -105,6 +105,75 @@ async function loadModelsDevData(): Promise<Model<any>[]> {
|
|||
|
||||
const models: Model<any>[] = [];
|
||||
|
||||
// Process Amazon Bedrock models
|
||||
if (data["amazon-bedrock"]?.models) {
|
||||
for (const [modelId, model] of Object.entries(data["amazon-bedrock"].models)) {
|
||||
const m = model as ModelsDevModel;
|
||||
if (m.tool_call !== true) continue;
|
||||
|
||||
let id = modelId;
|
||||
|
||||
if (id.startsWith("ai21.jamba")) {
|
||||
// These models doesn't support tool use in streaming mode
|
||||
continue;
|
||||
}
|
||||
|
||||
if (id.startsWith("amazon.titan-text-express") ||
|
||||
id.startsWith("mistral.mistral-7b-instruct-v0")) {
|
||||
// These models doesn't support system messages
|
||||
continue;
|
||||
}
|
||||
|
||||
// Some Amazon Bedrock models require cross-region inference profiles to work.
|
||||
// To use cross-region inference, we need to add a region prefix to the models.
|
||||
// See https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html#inference-profiles-support-system
|
||||
// TODO: Remove Claude models once https://github.com/anomalyco/models.dev/pull/607 is merged, and follow-up with other models.
|
||||
|
||||
// Models with global cross-region inference profiles
|
||||
if (id.startsWith("anthropic.claude-haiku-4-5") ||
|
||||
id.startsWith("anthropic.claude-sonnet-4") ||
|
||||
id.startsWith("anthropic.claude-opus-4-5") ||
|
||||
id.startsWith("amazon.nova-2-lite") ||
|
||||
id.startsWith("cohere.embed-v4") ||
|
||||
id.startsWith("twelvelabs.pegasus-1-2")) {
|
||||
id = "global." + id;
|
||||
}
|
||||
|
||||
// Models with US cross-region inference profiles
|
||||
if (id.startsWith("amazon.nova-lite") ||
|
||||
id.startsWith("amazon.nova-micro") ||
|
||||
id.startsWith("amazon.nova-premier") ||
|
||||
id.startsWith("amazon.nova-pro") ||
|
||||
id.startsWith("anthropic.claude-3-7-sonnet") ||
|
||||
id.startsWith("anthropic.claude-opus-4-1") ||
|
||||
id.startsWith("anthropic.claude-opus-4-20250514") ||
|
||||
id.startsWith("deepseek.r1") ||
|
||||
id.startsWith("meta.llama3-2") ||
|
||||
id.startsWith("meta.llama3-3") ||
|
||||
id.startsWith("meta.llama4")) {
|
||||
id = "us." + id;
|
||||
}
|
||||
|
||||
models.push({
|
||||
id,
|
||||
name: m.name || id,
|
||||
api: "bedrock-converse-stream",
|
||||
provider: "amazon-bedrock",
|
||||
baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com",
|
||||
reasoning: m.reasoning === true,
|
||||
input: m.modalities?.input?.includes("image") ? ["text", "image"] : ["text"],
|
||||
cost: {
|
||||
input: m.cost?.input || 0,
|
||||
output: m.cost?.output || 0,
|
||||
cacheRead: m.cost?.cache_read || 0,
|
||||
cacheWrite: m.cost?.cache_write || 0,
|
||||
},
|
||||
contextWindow: m.limit?.context || 4096,
|
||||
maxTokens: m.limit?.output || 4096,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Process Anthropic models
|
||||
if (data.anthropic?.models) {
|
||||
for (const [modelId, model] of Object.entries(data.anthropic.models)) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue