diff --git a/crates/codestral/src/codestral.rs b/crates/codestral/src/codestral.rs index a266212355795c2284fa30b054338608cb45fa9c..fe6b6678c99181facc4269df187c32c5a72ab565 100644 --- a/crates/codestral/src/codestral.rs +++ b/crates/codestral/src/codestral.rs @@ -79,6 +79,7 @@ impl CodestralCompletionProvider { suffix: String, model: String, max_tokens: Option, + api_url: String, ) -> Result { let start_time = Instant::now(); @@ -111,7 +112,7 @@ impl CodestralCompletionProvider { let http_request = http_client::Request::builder() .method(http_client::Method::POST) - .uri(format!("{}/v1/fim/completions", CODESTRAL_API_URL)) + .uri(format!("{}/v1/fim/completions", api_url)) .header("Content-Type", "application/json") .header("Authorization", format!("Bearer {}", api_key)) .body(http_client::AsyncBody::from(request_body))?; @@ -211,6 +212,12 @@ impl EditPredictionProvider for CodestralCompletionProvider { .clone() .unwrap_or_else(|| "codestral-latest".to_string()); let max_tokens = settings.edit_predictions.codestral.max_tokens; + let api_url = settings + .edit_predictions + .codestral + .api_url + .clone() + .unwrap_or_else(|| CODESTRAL_API_URL.to_string()); self.pending_request = Some(cx.spawn(async move |this, cx| { if debounce { @@ -242,6 +249,7 @@ impl EditPredictionProvider for CodestralCompletionProvider { suffix, model, max_tokens, + api_url, ) .await { diff --git a/crates/language/src/language_settings.rs b/crates/language/src/language_settings.rs index b6c65ede0596fe96ba1a750bcbcbcb971a3be617..b485065689832995cdb100ae47a4f1f197ad1a70 100644 --- a/crates/language/src/language_settings.rs +++ b/crates/language/src/language_settings.rs @@ -420,6 +420,8 @@ pub struct CodestralSettings { pub model: Option, /// Maximum tokens to generate. pub max_tokens: Option, + /// Custom API URL to use for Codestral. + pub api_url: Option, } impl AllLanguageSettings { @@ -636,6 +638,7 @@ impl settings::Settings for AllLanguageSettings { let codestral_settings = CodestralSettings { model: codestral.model, max_tokens: codestral.max_tokens, + api_url: codestral.api_url, }; let enabled_in_text_threads = edit_predictions.enabled_in_text_threads.unwrap(); diff --git a/crates/settings/src/settings_content/language.rs b/crates/settings/src/settings_content/language.rs index a5dbd682d2ca4943e6230789acad96c5d7e2a742..5c74662f0204fd8ef15099c8e8e2e5629963d703 100644 --- a/crates/settings/src/settings_content/language.rs +++ b/crates/settings/src/settings_content/language.rs @@ -142,6 +142,11 @@ pub struct CodestralSettingsContent { /// Default: 150 #[serde(default)] pub max_tokens: Option, + /// Api URL to use for completions. + /// + /// Default: "https://codestral.mistral.ai" + #[serde(default)] + pub api_url: Option, } /// The mode in which edit predictions should be displayed.