Skip to content

Commit 59a0554

Browse files
committed
Fix clippy warnings and formatting
- Remove needless borrows in ProviderConfigBuilder::new calls - Fix trailing whitespace in venice.rs - All code now passes cargo clippy -- -D warnings
1 parent 26d0a84 commit 59a0554

21 files changed

Lines changed: 455 additions & 375 deletions

crates/goose-server/src/commands/agent.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ use etcetera::{choose_app_strategy, AppStrategy};
77
use goose::agents::Agent;
88
use goose::config::APP_STRATEGY;
99
use goose::scheduler_factory::SchedulerFactory;
10-
use tower_http::cors::{Any, CorsLayer};
1110
use tower_http::compression::CompressionLayer;
11+
use tower_http::cors::{Any, CorsLayer};
1212
use tracing::info;
1313

1414
use goose::providers::pricing::initialize_pricing_cache;
@@ -50,11 +50,9 @@ pub async fn run() -> Result<()> {
5050
.allow_origin(Any)
5151
.allow_methods(Any)
5252
.allow_headers(Any);
53-
53+
5454
// Add compression middleware for gzip and brotli
55-
let compression = CompressionLayer::new()
56-
.gzip(true)
57-
.br(true);
55+
let compression = CompressionLayer::new().gzip(true).br(true);
5856

5957
let app = crate::routes::configure(app_state)
6058
.layer(cors)

crates/goose-server/src/routes/config_management.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,8 +389,15 @@ pub async fn get_pricing(
389389
});
390390
}
391391
// Check if the model has embedded pricing data from provider metadata
392-
else if let Some(metadata) = get_providers().iter().find(|p| p.name == model_req.provider) {
393-
if let Some(model_info) = metadata.known_models.iter().find(|m| m.name == model_req.model) {
392+
else if let Some(metadata) = get_providers()
393+
.iter()
394+
.find(|p| p.name == model_req.provider)
395+
{
396+
if let Some(model_info) = metadata
397+
.known_models
398+
.iter()
399+
.find(|m| m.name == model_req.model)
400+
{
394401
if let (Some(input_cost), Some(output_cost)) =
395402
(model_info.input_token_cost, model_info.output_token_cost)
396403
{

crates/goose/benches/connection_pooling.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
use criterion::{black_box, criterion_group, criterion_main, Criterion, BenchmarkId};
2-
use goose::providers::provider_common::{get_shared_client, create_provider_client};
3-
use tokio::runtime::Runtime;
4-
use std::sync::Arc;
1+
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
2+
use goose::providers::provider_common::{create_provider_client, get_shared_client};
53
use reqwest::Client;
4+
use std::sync::Arc;
5+
use tokio::runtime::Runtime;
66

77
fn create_new_clients(c: &mut Criterion) {
88
let rt = Runtime::new().unwrap();
9-
9+
1010
c.bench_function("create_new_client", |b| {
1111
b.iter(|| {
1212
rt.block_on(async {
@@ -18,7 +18,7 @@ fn create_new_clients(c: &mut Criterion) {
1818

1919
fn reuse_shared_client(c: &mut Criterion) {
2020
let rt = Runtime::new().unwrap();
21-
21+
2222
c.bench_function("get_shared_client", |b| {
2323
b.iter(|| {
2424
rt.block_on(async {
@@ -30,7 +30,7 @@ fn reuse_shared_client(c: &mut Criterion) {
3030

3131
fn concurrent_requests_new_clients(c: &mut Criterion) {
3232
let rt = Runtime::new().unwrap();
33-
33+
3434
let mut group = c.benchmark_group("concurrent_requests_new");
3535
for num_requests in [10, 50, 100].iter() {
3636
group.bench_with_input(
@@ -48,7 +48,7 @@ fn concurrent_requests_new_clients(c: &mut Criterion) {
4848
})
4949
})
5050
.collect();
51-
51+
5252
for task in tasks {
5353
task.await.unwrap();
5454
}
@@ -62,7 +62,7 @@ fn concurrent_requests_new_clients(c: &mut Criterion) {
6262

6363
fn concurrent_requests_shared_client(c: &mut Criterion) {
6464
let rt = Runtime::new().unwrap();
65-
65+
6666
let mut group = c.benchmark_group("concurrent_requests_shared");
6767
for num_requests in [10, 50, 100].iter() {
6868
group.bench_with_input(
@@ -80,7 +80,7 @@ fn concurrent_requests_shared_client(c: &mut Criterion) {
8080
})
8181
})
8282
.collect();
83-
83+
8484
for task in tasks {
8585
task.await.unwrap();
8686
}
@@ -99,4 +99,4 @@ criterion_group!(
9999
concurrent_requests_new_clients,
100100
concurrent_requests_shared_client
101101
);
102-
criterion_main!(benches);
102+
criterion_main!(benches);

crates/goose/src/providers/anthropic.rs

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ use std::sync::Arc;
88
use super::base::{ConfigKey, ModelInfo, Provider, ProviderMetadata, ProviderUsage};
99
use super::errors::ProviderError;
1010
use super::formats::anthropic::{create_request, get_usage, response_to_message};
11-
use super::provider_common::{AuthType, HeaderBuilder, ProviderConfigBuilder, get_shared_client, build_endpoint_url, retry_with_backoff, RetryConfig};
11+
use super::provider_common::{
12+
build_endpoint_url, get_shared_client, retry_with_backoff, AuthType, HeaderBuilder,
13+
ProviderConfigBuilder, RetryConfig,
14+
};
1215
use super::utils::{emit_debug_trace, get_model};
1316
use crate::message::Message;
1417
use crate::model::ModelConfig;
@@ -51,14 +54,14 @@ impl Default for AnthropicProvider {
5154
impl AnthropicProvider {
5255
pub fn from_env(model: ModelConfig) -> Result<Self> {
5356
let config = crate::config::Config::global();
54-
let config_builder = ProviderConfigBuilder::new(&config, "ANTHROPIC");
55-
57+
let config_builder = ProviderConfigBuilder::new(config, "ANTHROPIC");
58+
5659
let api_key = config_builder.get_api_key()?;
5760
let host = config_builder.get_host("https://api.anthropic.com");
58-
61+
5962
// Use shared client for better connection pooling
6063
let client = get_shared_client();
61-
64+
6265
// Configure retry settings
6366
let retry_config = RetryConfig {
6467
max_retries: 3,
@@ -78,7 +81,7 @@ impl AnthropicProvider {
7881

7982
async fn post(&self, headers: HeaderMap, payload: Value) -> Result<Value, ProviderError> {
8083
let url = build_endpoint_url(&self.host, "v1/messages")?;
81-
84+
8285
retry_with_backoff(&self.retry_config, || async {
8386
let response = self
8487
.client
@@ -181,20 +184,32 @@ impl Provider for AnthropicProvider {
181184
let payload = create_request(&self.model, system, messages, tools)?;
182185

183186
// Build headers using the new HeaderBuilder
184-
let mut header_builder = HeaderBuilder::new(self.api_key.clone(), AuthType::Custom("x-api-key".to_string()));
185-
header_builder = header_builder.add_custom_header("anthropic-version".to_string(), ANTHROPIC_API_VERSION.to_string());
187+
let mut header_builder = HeaderBuilder::new(
188+
self.api_key.clone(),
189+
AuthType::Custom("x-api-key".to_string()),
190+
);
191+
header_builder = header_builder.add_custom_header(
192+
"anthropic-version".to_string(),
193+
ANTHROPIC_API_VERSION.to_string(),
194+
);
186195

187196
let is_thinking_enabled = std::env::var("CLAUDE_THINKING_ENABLED").is_ok();
188197
if self.model.model_name.starts_with("claude-3-7-sonnet-") {
189198
if is_thinking_enabled {
190199
// https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#extended-output-capabilities-beta
191-
header_builder = header_builder.add_custom_header("anthropic-beta".to_string(), "output-128k-2025-02-19".to_string());
200+
header_builder = header_builder.add_custom_header(
201+
"anthropic-beta".to_string(),
202+
"output-128k-2025-02-19".to_string(),
203+
);
192204
} else {
193205
// https://docs.anthropic.com/en/docs/build-with-claude/tool-use/token-efficient-tool-use
194-
header_builder = header_builder.add_custom_header("anthropic-beta".to_string(), "token-efficient-tools-2025-02-19".to_string());
206+
header_builder = header_builder.add_custom_header(
207+
"anthropic-beta".to_string(),
208+
"token-efficient-tools-2025-02-19".to_string(),
209+
);
195210
}
196211
}
197-
212+
198213
let headers = header_builder.build();
199214

200215
// Make request

crates/goose/src/providers/azure.rs

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ use super::azureauth::AzureAuth;
99
use super::base::{ConfigKey, Provider, ProviderMetadata, ProviderUsage, Usage};
1010
use super::errors::ProviderError;
1111
use super::formats::openai::{create_request, get_usage, response_to_message};
12-
use super::provider_common::{AuthType, HeaderBuilder, ProviderConfigBuilder, get_shared_client, retry_with_backoff_and_custom_delay, RetryConfig};
12+
use super::provider_common::{
13+
get_shared_client, retry_with_backoff_and_custom_delay, AuthType, HeaderBuilder,
14+
ProviderConfigBuilder, RetryConfig,
15+
};
1316
use super::utils::{emit_debug_trace, get_model, handle_response_openai_compat, ImageFormat};
1417
use crate::message::Message;
1518
use crate::model::ModelConfig;
@@ -63,13 +66,16 @@ impl Default for AzureProvider {
6366
impl AzureProvider {
6467
pub fn from_env(model: ModelConfig) -> Result<Self> {
6568
let config = crate::config::Config::global();
66-
let config_builder = ProviderConfigBuilder::new(&config, "AZURE_OPENAI");
67-
68-
let endpoint = config_builder.get_param("ENDPOINT", None)
69+
let config_builder = ProviderConfigBuilder::new(config, "AZURE_OPENAI");
70+
71+
let endpoint = config_builder
72+
.get_param("ENDPOINT", None)
6973
.ok_or_else(|| anyhow::anyhow!("AZURE_OPENAI_ENDPOINT is required"))?;
70-
let deployment_name = config_builder.get_param("DEPLOYMENT_NAME", None)
74+
let deployment_name = config_builder
75+
.get_param("DEPLOYMENT_NAME", None)
7176
.ok_or_else(|| anyhow::anyhow!("AZURE_OPENAI_DEPLOYMENT_NAME is required"))?;
72-
let api_version = config_builder.get_param("API_VERSION", Some(AZURE_DEFAULT_API_VERSION))
77+
let api_version = config_builder
78+
.get_param("API_VERSION", Some(AZURE_DEFAULT_API_VERSION))
7379
.unwrap_or_else(|| AZURE_DEFAULT_API_VERSION.to_string());
7480

7581
// Try to get API key first, if not found use Azure credential chain
@@ -78,7 +84,7 @@ impl AzureProvider {
7884

7985
// Use shared client for better connection pooling
8086
let client = get_shared_client();
81-
87+
8288
// Configure retry settings with Azure's specific requirements
8389
let retry_config = RetryConfig {
8490
max_retries: DEFAULT_MAX_RETRIES as u32,
@@ -126,22 +132,27 @@ impl AzureProvider {
126132
// Get a fresh auth token for each attempt
127133
let auth_token = self.auth.get_token().await.map_err(|e| {
128134
tracing::error!("Authentication error: {:?}", e);
129-
ProviderError::RequestFailed(format!("Failed to get authentication token: {}", e))
135+
ProviderError::RequestFailed(format!(
136+
"Failed to get authentication token: {}",
137+
e
138+
))
130139
})?;
131140

132141
// Build headers using HeaderBuilder
133142
let header_builder = match self.auth.credential_type() {
134-
super::azureauth::AzureCredentials::ApiKey(_) => {
135-
HeaderBuilder::new(auth_token.token_value.clone(), AuthType::Custom("api-key".to_string()))
136-
}
143+
super::azureauth::AzureCredentials::ApiKey(_) => HeaderBuilder::new(
144+
auth_token.token_value.clone(),
145+
AuthType::Custom("api-key".to_string()),
146+
),
137147
super::azureauth::AzureCredentials::DefaultCredential => {
138148
HeaderBuilder::new(auth_token.token_value.clone(), AuthType::Bearer)
139149
}
140150
};
141151

142152
let headers = header_builder.build();
143-
144-
let response = self.client
153+
154+
let response = self
155+
.client
145156
.post(base_url.clone())
146157
.headers(headers)
147158
.json(&payload)
@@ -167,8 +178,9 @@ impl AzureProvider {
167178
}
168179
_ => None,
169180
}
170-
}
171-
).await
181+
},
182+
)
183+
.await
172184
}
173185
}
174186

crates/goose/src/providers/bedrock.rs

Lines changed: 38 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ impl BedrockProvider {
6666
.provide_credentials(),
6767
)?;
6868
let client = Client::new(&sdk_config);
69-
69+
7070
// Configure retry settings for Bedrock's specific requirements
7171
let retry_config = RetryConfig {
7272
max_retries: 10,
@@ -75,7 +75,11 @@ impl BedrockProvider {
7575
backoff_multiplier: 1.5, // Slower backoff for Bedrock
7676
};
7777

78-
Ok(Self { client, model, retry_config })
78+
Ok(Self {
79+
client,
80+
model,
81+
retry_config,
82+
})
7983
}
8084
}
8185

@@ -135,7 +139,7 @@ impl Provider for BedrockProvider {
135139
// Use retry logic for resilience
136140
retry_with_backoff(&self.retry_config, || async {
137141
let result = request.clone().send().await;
138-
142+
139143
match result {
140144
Ok(response) => {
141145
// Successful response, process it and return
@@ -170,47 +174,38 @@ impl Provider for BedrockProvider {
170174
)),
171175
}
172176
}
173-
Err(err) => {
174-
match err.into_service_error() {
175-
ConverseError::ThrottlingException(throttle_err) => {
176-
tracing::warn!("Bedrock throttling error: {:?}", throttle_err);
177-
Err(ProviderError::RateLimitExceeded(format!(
178-
"Failed to call Bedrock: {:?}",
179-
throttle_err
180-
)))
181-
}
182-
ConverseError::AccessDeniedException(err) => {
183-
Err(ProviderError::Authentication(format!(
184-
"Failed to call Bedrock: {:?}",
185-
err
186-
)))
187-
}
188-
ConverseError::ValidationException(err)
189-
if err
190-
.message()
191-
.unwrap_or_default()
192-
.contains("Input is too long for requested model.") =>
193-
{
194-
Err(ProviderError::ContextLengthExceeded(format!(
195-
"Failed to call Bedrock: {:?}",
196-
err
197-
)))
198-
}
199-
ConverseError::ModelErrorException(err) => {
200-
Err(ProviderError::ExecutionError(format!(
201-
"Failed to call Bedrock: {:?}",
202-
err
203-
)))
204-
}
205-
err => {
206-
Err(ProviderError::ServerError(format!(
207-
"Failed to call Bedrock: {:?}",
208-
err
209-
)))
210-
}
177+
Err(err) => match err.into_service_error() {
178+
ConverseError::ThrottlingException(throttle_err) => {
179+
tracing::warn!("Bedrock throttling error: {:?}", throttle_err);
180+
Err(ProviderError::RateLimitExceeded(format!(
181+
"Failed to call Bedrock: {:?}",
182+
throttle_err
183+
)))
211184
}
212-
}
185+
ConverseError::AccessDeniedException(err) => Err(
186+
ProviderError::Authentication(format!("Failed to call Bedrock: {:?}", err)),
187+
),
188+
ConverseError::ValidationException(err)
189+
if err
190+
.message()
191+
.unwrap_or_default()
192+
.contains("Input is too long for requested model.") =>
193+
{
194+
Err(ProviderError::ContextLengthExceeded(format!(
195+
"Failed to call Bedrock: {:?}",
196+
err
197+
)))
198+
}
199+
ConverseError::ModelErrorException(err) => Err(ProviderError::ExecutionError(
200+
format!("Failed to call Bedrock: {:?}", err),
201+
)),
202+
err => Err(ProviderError::ServerError(format!(
203+
"Failed to call Bedrock: {:?}",
204+
err
205+
))),
206+
},
213207
}
214-
}).await
208+
})
209+
.await
215210
}
216211
}

0 commit comments

Comments
 (0)