@@ -8,6 +8,9 @@ use gpui::{Entity, ScrollHandle, prelude::*};
use language_models::provider::mistral::{CODESTRAL_API_URL, codestral_api_key};
use ui::{ButtonLink, ConfiguredApiCard, WithScrollbar, prelude::*};
+const OLLAMA_API_URL_PLACEHOLDER: &str = "http://localhost:11434";
+const OLLAMA_MODEL_PLACEHOLDER: &str = "qwen2.5-coder:3b-base";
+
use crate::{
SettingField, SettingItem, SettingsFieldMetadata, SettingsPageItem, SettingsWindow, USER,
components::{SettingsInputField, SettingsSectionHeader},
@@ -82,6 +85,7 @@ impl Render for EditPredictionSetupPage {
)
.into_any_element(),
),
+ Some(render_ollama_provider(settings_window.clone(), window, cx).into_any_element()),
];
div()
@@ -236,6 +240,107 @@ fn render_api_key_provider(
})
}
+fn render_ollama_provider(
+ settings_window: Entity<SettingsWindow>,
+ window: &mut Window,
+ cx: &mut Context<EditPredictionSetupPage>,
+) -> impl IntoElement {
+ let ollama_settings = ollama_settings();
+ let additional_fields = settings_window.update(cx, |settings_window, cx| {
+ settings_window
+ .render_sub_page_items_section(ollama_settings.iter().enumerate(), None, window, cx)
+ .into_any_element()
+ });
+
+ v_flex()
+ .id("ollama")
+ .min_w_0()
+ .pt_8()
+ .gap_1p5()
+ .child(
+ SettingsSectionHeader::new("Ollama")
+ .icon(IconName::ZedPredict)
+ .no_padding(true),
+ )
+ .child(
+ Label::new("Configure the local Ollama server and model used for edit predictions.")
+ .size(LabelSize::Small)
+ .color(Color::Muted),
+ )
+ .child(additional_fields)
+}
+
+fn ollama_settings() -> Box<[SettingsPageItem]> {
+ Box::new([
+ SettingsPageItem::SettingItem(SettingItem {
+ title: "API URL",
+ description: "The base URL of your Ollama server.",
+ field: Box::new(SettingField {
+ pick: |settings| {
+ settings
+ .project
+ .all_languages
+ .edit_predictions
+ .as_ref()?
+ .ollama
+ .as_ref()?
+ .api_url
+ .as_ref()
+ },
+ write: |settings, value| {
+ settings
+ .project
+ .all_languages
+ .edit_predictions
+ .get_or_insert_default()
+ .ollama
+ .get_or_insert_default()
+ .api_url = value;
+ },
+ json_path: Some("edit_predictions.ollama.api_url"),
+ }),
+ metadata: Some(Box::new(SettingsFieldMetadata {
+ placeholder: Some(OLLAMA_API_URL_PLACEHOLDER),
+ ..Default::default()
+ })),
+ files: USER,
+ }),
+ SettingsPageItem::SettingItem(SettingItem {
+ title: "Model",
+ description: "The Ollama model to use for edit predictions.",
+ field: Box::new(SettingField {
+ pick: |settings| {
+ settings
+ .project
+ .all_languages
+ .edit_predictions
+ .as_ref()?
+ .ollama
+ .as_ref()?
+ .model
+ .as_ref()
+ },
+ write: |settings, value| {
+ settings
+ .project
+ .all_languages
+ .edit_predictions
+ .get_or_insert_default()
+ .ollama
+ .get_or_insert_default()
+ .model = value;
+ },
+ json_path: Some("edit_predictions.ollama.model"),
+ }),
+ metadata: Some(Box::new(SettingsFieldMetadata {
+ placeholder: Some(OLLAMA_MODEL_PLACEHOLDER),
+ ..Default::default()
+ })),
+ files: USER,
+ }),
+ ])
+}
+
fn codestral_settings() -> Box<[SettingsPageItem]> {
Box::new([
SettingsPageItem::SettingItem(SettingItem {