mirror of
https://github.com/stackblitz/bolt.new
synced 2025-06-26 18:17:50 +00:00
feat: Integrate AWS Bedrock with Claude 3.5 Sonnet, Claude 3 Sonnet, and Claude 3.5 Haiku
This commit is contained in:
parent
d2ba8d3be3
commit
4961d700ad
10
.env.example
10
.env.example
@ -83,6 +83,16 @@ XAI_API_KEY=
|
||||
# You only need this environment variable set if you want to use Perplexity models
|
||||
PERPLEXITY_API_KEY=
|
||||
|
||||
# Get your AWS Bedrock configuration as a JSON string.
|
||||
# The JSON should include the following keys:
|
||||
# - region: The AWS region where Bedrock is available.
|
||||
# - accessKeyId: Your AWS access key ID.
|
||||
# - secretAccessKey: Your AWS secret access key.
|
||||
# - sessionToken (optional): Temporary session token if using an IAM role or temporary credentials.
|
||||
# Example JSON:
|
||||
# {"region": "us-east-1", "accessKeyId": "yourAccessKeyId", "secretAccessKey": "yourSecretAccessKey", "sessionToken": "yourSessionToken"}
|
||||
AWS_BEDROCK_CONFIG=
|
||||
|
||||
# Include this environment variable if you want more logging for debugging locally
|
||||
VITE_LOG_LEVEL=debug
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@ const API_KEY_PROVIDERS = [
|
||||
'Perplexity',
|
||||
'Cohere',
|
||||
'AzureOpenAI',
|
||||
'AmazonBedrock',
|
||||
] as const;
|
||||
|
||||
interface ApiKeys {
|
||||
|
||||
82
app/lib/modules/llm/providers/amazon-bedrock.ts
Normal file
82
app/lib/modules/llm/providers/amazon-bedrock.ts
Normal file
@ -0,0 +1,82 @@
|
||||
import { BaseProvider } from '~/lib/modules/llm/base-provider';
|
||||
import type { ModelInfo } from '~/lib/modules/llm/types';
|
||||
import type { LanguageModelV1 } from 'ai';
|
||||
import type { IProviderSetting } from '~/types/model';
|
||||
import { createAmazonBedrock } from '@ai-sdk/amazon-bedrock';
|
||||
|
||||
interface AWSBedRockConfig {
|
||||
region: string;
|
||||
accessKeyId: string;
|
||||
secretAccessKey: string;
|
||||
sessionToken?: string;
|
||||
}
|
||||
|
||||
export default class AmazonBedrockProvider extends BaseProvider {
|
||||
name = 'AmazonBedrock';
|
||||
getApiKeyLink = 'https://console.aws.amazon.com/iam/home';
|
||||
|
||||
config = {
|
||||
apiTokenKey: 'AWS_BEDROCK_CONFIG',
|
||||
};
|
||||
|
||||
staticModels: ModelInfo[] = [
|
||||
{
|
||||
name: 'anthropic.claude-3-5-sonnet-20240620-v1:0',
|
||||
label: 'Claude 3.5 Sonnet (Bedrock)',
|
||||
provider: 'AmazonBedrock',
|
||||
maxTokenAllowed: 8000,
|
||||
},
|
||||
{
|
||||
name: 'anthropic.claude-3-sonnet-20240229-v1:0',
|
||||
label: 'Claude 3 Sonnet (Bedrock)',
|
||||
provider: 'AmazonBedrock',
|
||||
maxTokenAllowed: 8000,
|
||||
},
|
||||
{
|
||||
name: 'anthropic.claude-3-5-haiku-20241022-v1:0',
|
||||
label: 'Claude 3.5 Haiku (Bedrock)',
|
||||
provider: 'AmazonBedrock',
|
||||
maxTokenAllowed: 8000,
|
||||
},
|
||||
];
|
||||
|
||||
getModelInstance(options: {
|
||||
model: string;
|
||||
serverEnv: any;
|
||||
apiKeys?: Record<string, string>;
|
||||
providerSettings?: Record<string, IProviderSetting>;
|
||||
}): LanguageModelV1 {
|
||||
const { model, serverEnv, apiKeys, providerSettings } = options;
|
||||
|
||||
const { apiKey } = this.getProviderBaseUrlAndKey({
|
||||
apiKeys,
|
||||
providerSettings: providerSettings?.[this.name],
|
||||
serverEnv: serverEnv as any,
|
||||
defaultBaseUrlKey: '',
|
||||
defaultApiTokenKey: 'AWS_BEDROCK_CONFIG',
|
||||
});
|
||||
|
||||
if (!apiKey) {
|
||||
throw new Error(`Missing API key for ${this.name} provider`);
|
||||
}
|
||||
|
||||
const parsedConfig: AWSBedRockConfig = JSON.parse(apiKey);
|
||||
|
||||
const { region, accessKeyId, secretAccessKey } = parsedConfig;
|
||||
|
||||
if (!region || !accessKeyId || !secretAccessKey) {
|
||||
throw new Error(
|
||||
`The provided API configuration is incomplete. Ensure that 'region', 'accessKeyId', and 'secretAccessKey' are included.`,
|
||||
);
|
||||
}
|
||||
|
||||
const bedrock = createAmazonBedrock({
|
||||
region: parsedConfig.region,
|
||||
accessKeyId: parsedConfig.accessKeyId,
|
||||
secretAccessKey: parsedConfig.secretAccessKey,
|
||||
sessionToken: parsedConfig.sessionToken,
|
||||
});
|
||||
|
||||
return bedrock(model);
|
||||
}
|
||||
}
|
||||
@ -14,6 +14,7 @@ import PerplexityProvider from './providers/perplexity';
|
||||
import TogetherProvider from './providers/together';
|
||||
import XAIProvider from './providers/xai';
|
||||
import HyperbolicProvider from './providers/hyperbolic';
|
||||
import AmazonBedrockProvider from './providers/amazon-bedrock';
|
||||
|
||||
export {
|
||||
AnthropicProvider,
|
||||
@ -32,4 +33,5 @@ export {
|
||||
XAIProvider,
|
||||
TogetherProvider,
|
||||
LMStudioProvider,
|
||||
AmazonBedrockProvider,
|
||||
};
|
||||
|
||||
@ -35,6 +35,7 @@
|
||||
"@ai-sdk/google": "^0.0.52",
|
||||
"@ai-sdk/mistral": "^0.0.43",
|
||||
"@ai-sdk/openai": "^0.0.66",
|
||||
"@ai-sdk/amazon-bedrock": "1.0.6",
|
||||
"@codemirror/autocomplete": "^6.18.3",
|
||||
"@codemirror/commands": "^6.7.1",
|
||||
"@codemirror/lang-cpp": "^6.0.2",
|
||||
|
||||
1075
pnpm-lock.yaml
1075
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
1
worker-configuration.d.ts
vendored
1
worker-configuration.d.ts
vendored
@ -16,4 +16,5 @@ interface Env {
|
||||
MISTRAL_API_KEY: string;
|
||||
XAI_API_KEY: string;
|
||||
PERPLEXITY_API_KEY: string;
|
||||
AWS_BEDROCK_CONFIG: string;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user