Skip to content

Commit 0baa28b

Browse files
committed
refactor: remove deprecated method from ProviderService
Remove deprecated method from the ProviderService trait and all its implementations. The method was marked as deprecated because tool support is now determined by the field in the Agent struct instead of querying the provider. This change includes: - Removing the method from the trait definition in forge_domain - Removing implementations in OpenRouter, Anthropic, Client, and ForgeProviderService - Cleaning up related code (imports, cache field, unused helper methods) Related issue: #123 (placeholder issue number)
1 parent 6e1715c commit 0baa28b

File tree

5 files changed

+6
-105
lines changed

5 files changed

+6
-105
lines changed

crates/forge_app/src/provider.rs

+2-20
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@ use std::sync::Arc;
22

33
use anyhow::{Context, Result};
44
use forge_domain::{
5-
ChatCompletionMessage, Context as ChatContext, Model, ModelId, Parameters, ProviderService,
6-
ResultStream,
5+
ChatCompletionMessage, Context as ChatContext, Model, ModelId, ProviderService, ResultStream,
76
};
87
use forge_open_router::Client;
9-
use moka2::future::Cache;
108

119
use crate::{EnvironmentService, Infrastructure};
1210

1311
pub struct ForgeProviderService {
1412
// The provider service implementation
1513
client: Client,
16-
cache: Cache<ModelId, Parameters>,
1714
}
1815

1916
impl ForgeProviderService {
@@ -24,10 +21,7 @@ impl ForgeProviderService {
2421
.get_environment()
2522
.provider
2623
.clone();
27-
Self {
28-
client: Client::new(provider).unwrap(),
29-
cache: Cache::new(1024),
30-
}
24+
Self { client: Client::new(provider).unwrap() }
3125
}
3226
}
3327

@@ -47,16 +41,4 @@ impl ProviderService for ForgeProviderService {
4741
async fn models(&self) -> Result<Vec<Model>> {
4842
self.client.models().await
4943
}
50-
51-
async fn parameters(&self, model: &ModelId) -> anyhow::Result<Parameters> {
52-
self.cache
53-
.try_get_with_by_ref(model, async {
54-
self.client
55-
.parameters(model)
56-
.await
57-
.with_context(|| format!("Failed to get parameters for model: {}", model))
58-
})
59-
.await
60-
.map_err(|e| anyhow::anyhow!(e))
61-
}
6244
}

crates/forge_domain/src/lib.rs

-11
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,6 @@ pub trait ProviderService: Send + Sync + 'static {
6363
context: Context,
6464
) -> ResultStream<ChatCompletionMessage, anyhow::Error>;
6565
async fn models(&self) -> anyhow::Result<Vec<Model>>;
66-
67-
/// Returns parameters for the specified model
68-
///
69-
/// Deprecated: Tool support is now determined by the `tool_supported` field
70-
/// in the Agent struct instead of querying the provider. This method
71-
/// will be removed in a future version.
72-
#[deprecated(
73-
since = "next",
74-
note = "Use the `tool_supported` field in the Agent struct instead"
75-
)]
76-
async fn parameters(&self, model: &ModelId) -> anyhow::Result<Parameters>;
7766
}
7867

7968
#[async_trait::async_trait]

crates/forge_open_router/src/anthropic/provider.rs

+1-12
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use anyhow::Context as _;
22
use derive_builder::Builder;
3-
use forge_domain::{
4-
ChatCompletionMessage, Context, Model, ModelId, Parameters, ProviderService, ResultStream,
5-
};
3+
use forge_domain::{ChatCompletionMessage, Context, Model, ModelId, ProviderService, ResultStream};
64
use reqwest::header::{HeaderMap, HeaderValue};
75
use reqwest::{Client, Url};
86
use reqwest_eventsource::{Event, RequestBuilderExt};
@@ -116,15 +114,6 @@ impl ProviderService for Anthropic {
116114
let response: ListModelResponse = serde_json::from_str(&text)?;
117115
Ok(response.data.into_iter().map(Into::into).collect())
118116
}
119-
#[deprecated(
120-
since = "next",
121-
note = "Use the `tool_supported` field in the Agent struct instead"
122-
)]
123-
async fn parameters(&self, _model: &ModelId) -> anyhow::Result<Parameters> {
124-
// TODO: anthropic provider doesn't have this API, so for now allowing tool
125-
// calls for all models.
126-
Ok(Parameters { tool_supported: true })
127-
}
128117
}
129118

130119
#[cfg(test)]

crates/forge_open_router/src/builder.rs

+1-9
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
use anyhow::{Context as _, Result};
44
use forge_domain::{
5-
ChatCompletionMessage, Context, Model, ModelId, Parameters, Provider, ProviderService,
6-
ResultStream,
5+
ChatCompletionMessage, Context, Model, ModelId, Provider, ProviderService, ResultStream,
76
};
87

98
use crate::anthropic::Anthropic;
@@ -59,11 +58,4 @@ impl ProviderService for Client {
5958
Client::Anthropic(provider) => provider.models().await,
6059
}
6160
}
62-
63-
async fn parameters(&self, model: &ModelId) -> anyhow::Result<Parameters> {
64-
match self {
65-
Client::OpenAICompat(provider) => provider.parameters(model).await,
66-
Client::Anthropic(provider) => provider.parameters(model).await,
67-
}
68-
}
6961
}

crates/forge_open_router/src/open_router/api.rs

+2-53
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use anyhow::{Context as _, Result};
22
use derive_builder::Builder;
33
use forge_domain::{
4-
self, ChatCompletionMessage, Context as ChatContext, Model, ModelId, Parameters, Provider,
5-
ProviderService, ResultStream,
4+
self, ChatCompletionMessage, Context as ChatContext, Model, ModelId, Provider, ProviderService,
5+
ResultStream,
66
};
77
use reqwest::header::{HeaderMap, HeaderValue, AUTHORIZATION};
88
use reqwest::{Client, Url};
@@ -11,7 +11,6 @@ use tokio_stream::StreamExt;
1111
use tracing::debug;
1212

1313
use super::model::{ListModelResponse, OpenRouterModel};
14-
use super::parameters::ParameterResponse;
1514
use super::request::OpenRouterRequest;
1615
use super::response::OpenRouterResponse;
1716
use crate::open_router::transformers::{ProviderPipeline, Transformer};
@@ -56,23 +55,6 @@ impl OpenRouter {
5655
headers.insert("X-Title", HeaderValue::from_static("code-forge"));
5756
headers
5857
}
59-
60-
// Fetches parameters from the API and returns the raw text response
61-
async fn fetch_parameters(&self, path: &str) -> Result<String> {
62-
let url = self.url(path)?;
63-
let text = self
64-
.client
65-
.get(url)
66-
.headers(self.headers())
67-
.send()
68-
.await?
69-
.error_for_status()
70-
.with_context(|| "Failed to complete parameter request")?
71-
.text()
72-
.await?;
73-
74-
Ok(text)
75-
}
7658
}
7759

7860
#[async_trait::async_trait]
@@ -164,39 +146,6 @@ impl ProviderService for OpenRouter {
164146
Ok(data.data.into_iter().map(Into::into).collect())
165147
}
166148
}
167-
168-
#[deprecated(
169-
since = "next",
170-
note = "Use the `tool_supported` field in the Agent struct instead"
171-
)]
172-
async fn parameters(&self, model: &ModelId) -> Result<Parameters> {
173-
if self.provider.is_open_router() | self.provider.is_antinomy() {
174-
// For Eg: https://openrouter.ai/api/v1/parameters/google/gemini-pro-1.5-exp
175-
let path = if self.provider.is_open_router() {
176-
format!("parameters/{}", model)
177-
} else {
178-
format!("model/{}/parameters", model)
179-
};
180-
181-
let text = self.fetch_parameters(&path).await?;
182-
183-
let response: ParameterResponse = serde_json::from_str(&text)
184-
.with_context(|| "Failed to parse parameter response".to_string())?;
185-
186-
Ok(Parameters {
187-
tool_supported: response
188-
.data
189-
.supported_parameters
190-
.iter()
191-
.flat_map(|parameter| parameter.iter())
192-
.any(|parameter| parameter == "tools"),
193-
})
194-
} else if self.provider.is_open_ai() {
195-
return Ok(Parameters { tool_supported: true });
196-
} else {
197-
return Ok(Parameters { tool_supported: false });
198-
}
199-
}
200149
}
201150

202151
impl From<OpenRouterModel> for Model {

0 commit comments

Comments
 (0)