Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions crates/goose-server/src/routes/providers_and_keys.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,11 @@
"description": "Connect to Azure OpenAI Service",
"models": ["gpt-4o", "gpt-4o-mini"],
"required_keys": ["AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_DEPLOYMENT_NAME"]
},
"aws_bedrock": {
"name": "AWS Bedrock",
"description": "Connect to LLMs via AWS Bedrock",
"models": ["us.anthropic.claude-3-7-sonnet-20250219-v1:0"],
"required_keys": ["AWS_PROFILE"]
}
}
6 changes: 3 additions & 3 deletions crates/goose/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,9 @@ rand = "0.8.5"
utoipa = "4.1"

# For Bedrock provider
aws-config = { version = "1.1.7", features = ["behavior-version-latest"] }
aws-smithy-types = "1.2.12"
aws-sdk-bedrockruntime = "1.72.0"
aws-config = { version = "1.5.16", features = ["behavior-version-latest"] }
aws-smithy-types = "1.2.13"
aws-sdk-bedrockruntime = "1.74.0"

# For GCP Vertex AI provider auth
jsonwebtoken = "9.3.1"
Expand Down
2 changes: 1 addition & 1 deletion crates/goose/src/config/base.rs
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ impl Config {
}

// Load current secrets from the keyring
fn load_secrets(&self) -> Result<HashMap<String, Value>, ConfigError> {
pub fn load_secrets(&self) -> Result<HashMap<String, Value>, ConfigError> {
let entry = Entry::new(&self.keyring_service, KEYRING_USERNAME)?;

match entry.get_password() {
Expand Down
14 changes: 10 additions & 4 deletions crates/goose/src/providers/bedrock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use aws_sdk_bedrockruntime::operation::converse::ConverseError;
use aws_sdk_bedrockruntime::{types as bedrock, Client};
use mcp_core::Tool;

use super::base::{Provider, ProviderMetadata, ProviderUsage};
use super::base::{ConfigKey, Provider, ProviderMetadata, ProviderUsage};
use super::errors::ProviderError;
use crate::message::Message;
use crate::model::ModelConfig;
Expand Down Expand Up @@ -33,6 +33,12 @@ pub struct BedrockProvider {

impl BedrockProvider {
pub fn from_env(model: ModelConfig) -> Result<Self> {
let config = crate::config::Config::global();
for (key, value) in config.load_secrets()?.iter() {
if key.starts_with("AWS_") && value.is_string() {
std::env::set_var(key, value.as_str().unwrap());
}
}
let sdk_config = futures::executor::block_on(aws_config::load_from_env());
let client = Client::new(&sdk_config);

Expand All @@ -51,13 +57,13 @@ impl Default for BedrockProvider {
impl Provider for BedrockProvider {
fn metadata() -> ProviderMetadata {
ProviderMetadata::new(
"bedrock",
"aws_bedrock",
"Amazon Bedrock",
"Run models through Amazon Bedrock. You may have to set AWS_ACCESS_KEY_ID, AWS_ACCESS_KEY, and AWS_REGION as env vars before configuring.",
"Run models through Amazon Bedrock. You may have to set 'AWS_' environment variables to configure authentication.",
BEDROCK_DEFAULT_MODEL,
BEDROCK_KNOWN_MODELS.iter().map(|s| s.to_string()).collect(),
BEDROCK_DOC_LINK,
vec![],
vec![ConfigKey::new("AWS_PROFILE", true, false, Some("us-west-2"))],
)
}

Expand Down
2 changes: 1 addition & 1 deletion crates/goose/src/providers/factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ pub fn create(name: &str, model: ModelConfig) -> Result<Box<dyn Provider + Send
"openai" => Ok(Box::new(OpenAiProvider::from_env(model)?)),
"anthropic" => Ok(Box::new(AnthropicProvider::from_env(model)?)),
"azure_openai" => Ok(Box::new(AzureProvider::from_env(model)?)),
"bedrock" => Ok(Box::new(BedrockProvider::from_env(model)?)),
"aws_bedrock" => Ok(Box::new(BedrockProvider::from_env(model)?)),
"databricks" => Ok(Box::new(DatabricksProvider::from_env(model)?)),
"groq" => Ok(Box::new(GroqProvider::from_env(model)?)),
"ollama" => Ok(Box::new(OllamaProvider::from_env(model)?)),
Expand Down
2 changes: 1 addition & 1 deletion crates/goose/tests/truncate_agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ impl ProviderType {
],
ProviderType::OpenAi => &["OPENAI_API_KEY"],
ProviderType::Anthropic => &["ANTHROPIC_API_KEY"],
ProviderType::Bedrock => &["AWS_PROFILE", "AWS_REGION"],
ProviderType::Bedrock => &["AWS_PROFILE"],
ProviderType::Databricks => &["DATABRICKS_HOST"],
ProviderType::Google => &["GOOGLE_API_KEY"],
ProviderType::Groq => &["GROQ_API_KEY"],
Expand Down
2 changes: 1 addition & 1 deletion documentation/docs/getting-started/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Goose relies heavily on tool calling capabilities and currently works best with

| Provider | Description | Parameters |
|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Amazon Bedrock](https://aws.amazon.com/bedrock/) | Offers a variety of foundation models, including Claude, Jurassic-2, and others. **Environment variables must be set in advance, not configured through `goose configure`** | `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION` |
| [Amazon Bedrock](https://aws.amazon.com/bedrock/) | Offers a variety of foundation models, including Claude, Jurassic-2, and others. **AWS environment variables must be set in advance, not configured through `goose configure`** | `AWS_PROFILE`, or `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`, ... |
| [Anthropic](https://www.anthropic.com/) | Offers Claude, an advanced AI model for natural language tasks. | `ANTHROPIC_API_KEY` |
| [Azure OpenAI](https://learn.microsoft.com/en-us/azure/ai-services/openai/) | Access Azure-hosted OpenAI models, including GPT-4 and GPT-3.5. | `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_DEPLOYMENT_NAME` |
| [Databricks](https://www.databricks.com/) | Unified data analytics and AI platform for building and deploying models. | `DATABRICKS_HOST`, `DATABRICKS_TOKEN` |
Expand Down
5 changes: 5 additions & 0 deletions ui/desktop/src/components/settings/models/hardcoded_stuff.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export const default_models = {
ollama: 'qwen2.5',
azure_openai: 'gpt-4o',
gcp_vertex_ai: 'gemini-2.0-flash-001',
aws_bedrock: 'us.anthropic.claude-3-7-sonnet-20250219-v1:0',
};

export function getDefaultModel(key: string): string | undefined {
Expand All @@ -64,6 +65,7 @@ export const required_keys = {
OpenRouter: ['OPENROUTER_API_KEY'],
'Azure OpenAI': ['AZURE_OPENAI_API_KEY', 'AZURE_OPENAI_ENDPOINT', 'AZURE_OPENAI_DEPLOYMENT_NAME'],
'GCP Vertex AI': ['GCP_PROJECT_ID', 'GCP_LOCATION'],
'AWS Bedrock': ['AWS_PROFILE'],
};

export const default_key_value = {
Expand All @@ -83,6 +85,7 @@ export const supported_providers = [
'OpenRouter',
'Azure OpenAI',
'GCP Vertex AI',
'AWS Bedrock',
];

export const model_docs_link = [
Expand All @@ -97,6 +100,7 @@ export const model_docs_link = [
{ name: 'OpenRouter', href: 'https://openrouter.ai/models' },
{ name: 'Ollama', href: 'https://ollama.com/library' },
{ name: 'GCP Vertex AI', href: 'https://cloud.google.com/vertex-ai' },
{ name: 'AWS Bedrock', href: 'https://console.aws.amazon.com/bedrock/home#/model-catalog' },
];

export const provider_aliases = [
Expand All @@ -109,4 +113,5 @@ export const provider_aliases = [
{ provider: 'Google', alias: 'google' },
{ provider: 'Azure OpenAI', alias: 'azure_openai' },
{ provider: 'GCP Vertex AI', alias: 'gcp_vertex_ai' },
{ provider: 'AWS Bedrock', alias: 'aws_bedrock' },
];
Loading