cloud_llm_client: Add Baseten language model provider (#62950)

Release Notes:

- N/A
This commit is contained in:
Tom Houlé authored and GitHub committed 2026-08-20 17:53:44 +00:00
1 parent 4af4524d2e
commit ffe204c209
3 files changed
+23 -10

No files matched your search

@@ -91,6 +91,7 @@ impl FromStr for UsageLimit {
#[strum(serialize_all = "snake_case")]
pub enum LanguageModelProvider {
Anthropic,
Baseten,
OpenAi,
Google,
XAi,
@@ -5,6 +5,10 @@ pub const ANTHROPIC_PROVIDER_ID: LanguageModelProviderId =
pub const ANTHROPIC_PROVIDER_NAME: LanguageModelProviderName =
LanguageModelProviderName::new("Anthropic");
pub const BASETEN_PROVIDER_ID: LanguageModelProviderId = LanguageModelProviderId::new("baseten");
pub const BASETEN_PROVIDER_NAME: LanguageModelProviderName =
LanguageModelProviderName::new("Baseten");
pub const OPEN_AI_PROVIDER_ID: LanguageModelProviderId = LanguageModelProviderId::new("openai");
pub const OPEN_AI_PROVIDER_NAME: LanguageModelProviderName =
LanguageModelProviderName::new("OpenAI");
@@ -25,6 +29,8 @@ pub fn provider_name_for_id(provider_id: &LanguageModelProviderId) -> LanguageMo
OPEN_AI_PROVIDER_NAME
} else if provider_id == &ANTHROPIC_PROVIDER_ID {
ANTHROPIC_PROVIDER_NAME
} else if provider_id == &BASETEN_PROVIDER_ID {
BASETEN_PROVIDER_NAME
} else if provider_id == &GOOGLE_PROVIDER_ID {
GOOGLE_PROVIDER_NAME
} else if provider_id == &X_AI_PROVIDER_ID {
@@ -19,12 +19,12 @@ use http_client::{
AsyncBody, HttpClient, HttpClientWithUrl, HttpRequestExt, Method, Response, StatusCode,
};
use language_model::{
ANTHROPIC_PROVIDER_ID, ANTHROPIC_PROVIDER_NAME, CompactionResult, DisabledReason,
GOOGLE_PROVIDER_ID, GOOGLE_PROVIDER_NAME, LanguageModel, LanguageModelCompletionError,
LanguageModelCompletionEvent, LanguageModelEffortLevel, LanguageModelId, LanguageModelName,
LanguageModelProviderId, LanguageModelProviderName, LanguageModelRequest,
LanguageModelToolChoice, LanguageModelToolSchemaFormat, OPEN_AI_PROVIDER_ID,
OPEN_AI_PROVIDER_NAME, RateLimiter, X_AI_PROVIDER_ID, X_AI_PROVIDER_NAME,
ANTHROPIC_PROVIDER_ID, ANTHROPIC_PROVIDER_NAME, BASETEN_PROVIDER_ID, BASETEN_PROVIDER_NAME,
CompactionResult, DisabledReason, GOOGLE_PROVIDER_ID, GOOGLE_PROVIDER_NAME, LanguageModel,
LanguageModelCompletionError, LanguageModelCompletionEvent, LanguageModelEffortLevel,
LanguageModelId, LanguageModelName, LanguageModelProviderId, LanguageModelProviderName,
LanguageModelRequest, LanguageModelToolChoice, LanguageModelToolSchemaFormat,
OPEN_AI_PROVIDER_ID, OPEN_AI_PROVIDER_NAME, RateLimiter, X_AI_PROVIDER_ID, X_AI_PROVIDER_NAME,
ZED_CLOUD_PROVIDER_ID, ZED_CLOUD_PROVIDER_NAME,
};
@@ -504,6 +504,7 @@ impl<TP: CloudLlmTokenProvider + 'static> LanguageModel for CloudLanguageModel<T
use cloud_llm_client::LanguageModelProvider::*;
match self.model.provider {
Anthropic => ANTHROPIC_PROVIDER_ID,
Baseten => BASETEN_PROVIDER_ID,
OpenAi => OPEN_AI_PROVIDER_ID,
Google => GOOGLE_PROVIDER_ID,
XAi => X_AI_PROVIDER_ID,
@@ -514,6 +515,7 @@ impl<TP: CloudLlmTokenProvider + 'static> LanguageModel for CloudLanguageModel<T
use cloud_llm_client::LanguageModelProvider::*;
match self.model.provider {
Anthropic => ANTHROPIC_PROVIDER_NAME,
Baseten => BASETEN_PROVIDER_NAME,
OpenAi => OPEN_AI_PROVIDER_NAME,
Google => GOOGLE_PROVIDER_NAME,
XAi => X_AI_PROVIDER_NAME,
@@ -613,7 +615,8 @@ impl<TP: CloudLlmTokenProvider + 'static> LanguageModel for CloudLanguageModel<T
// Unreachable while the `supports_explicit_compaction` guard
// above holds, but a provider mismatch should degrade to the
// same unsupported error rather than panic.
cloud_llm_client::LanguageModelProvider::Google
cloud_llm_client::LanguageModelProvider::Baseten
| cloud_llm_client::LanguageModelProvider::Google
| cloud_llm_client::LanguageModelProvider::XAi => async {
Err(LanguageModelCompletionError::Other(anyhow::anyhow!(
"this cloud model does not support explicit compaction"
@@ -649,7 +652,7 @@ impl<TP: CloudLlmTokenProvider + 'static> LanguageModel for CloudLanguageModel<T
fn supports_split_token_display(&self) -> bool {
use cloud_llm_client::LanguageModelProvider::*;
matches!(self.model.provider, OpenAi | XAi)
matches!(self.model.provider, Baseten | OpenAi | XAi)
}
fn telemetry_id(&self) -> String {
@@ -659,6 +662,7 @@ impl<TP: CloudLlmTokenProvider + 'static> LanguageModel for CloudLanguageModel<T
fn tool_input_format(&self) -> LanguageModelToolSchemaFormat {
match self.model.provider {
cloud_llm_client::LanguageModelProvider::Anthropic
| cloud_llm_client::LanguageModelProvider::Baseten
| cloud_llm_client::LanguageModelProvider::OpenAi => {
LanguageModelToolSchemaFormat::JsonSchema
}
@@ -848,7 +852,8 @@ impl<TP: CloudLlmTokenProvider + 'static> LanguageModel for CloudLanguageModel<T
});
async move { Ok(future.await?.boxed()) }.boxed()
}
cloud_llm_client::LanguageModelProvider::XAi => {
provider @ (cloud_llm_client::LanguageModelProvider::Baseten
| cloud_llm_client::LanguageModelProvider::XAi) => {
let http_client = self.http_client.clone();
let token_provider = self.token_provider.clone();
let request = match into_open_ai(
@@ -877,7 +882,7 @@ impl<TP: CloudLlmTokenProvider + 'static> LanguageModel for CloudLanguageModel<T
CompletionBody {
thread_id,
prompt_id,
provider: cloud_llm_client::LanguageModelProvider::XAi,
provider,
model: request.model.clone(),
provider_request: serde_json::to_value(&request).map_err(|error| {
LanguageModelCompletionError::SerializeRequest {
@@ -1161,6 +1166,7 @@ pub fn provider_name(
) -> LanguageModelProviderName {
match provider {
cloud_llm_client::LanguageModelProvider::Anthropic => ANTHROPIC_PROVIDER_NAME,
cloud_llm_client::LanguageModelProvider::Baseten => BASETEN_PROVIDER_NAME,
cloud_llm_client::LanguageModelProvider::OpenAi => OPEN_AI_PROVIDER_NAME,
cloud_llm_client::LanguageModelProvider::Google => GOOGLE_PROVIDER_NAME,
cloud_llm_client::LanguageModelProvider::XAi => X_AI_PROVIDER_NAME,