feat: add basic support for aws bedrock to desktop app (#1271)

This commit is contained in:
Quentin Machu
2025-03-18 11:51:48 -04:00
committed by GitHub
parent ca8b38470b
commit 188dd5bce9
8 changed files with 28 additions and 11 deletions
+1 -1
View File
@@ -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() {
+10 -4
View File
@@ -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;
@@ -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);
@@ -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"))],
)
}
+1 -1
View File
@@ -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)?)),