language_models: Sort Ollama models by name (#31620)
Hello, This is my first contribution so apologies if I'm not following the proper process (I haven't seen anything special in https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md). Also, I have tested my changes manually, but I could not figure out an easy we to instantiate a `LanguageModelSelector` in the unit tests, so I didn't write a test. If you can provide some guidance I'd be happy to write a test. --- If the user configured the models with custom names via `display_name`, we want the ollama models to be sorted based on the name that is actually displayed. ~~The original issue is only about ollama but this change will also affect the other providers.~~ Closes #30854 Release Notes: - Ollama: Changed models to be sorted by name.
This commit is contained in:
parent
9c2b90fb8f
commit
c0397727e0
1 changed files with 6 additions and 4 deletions
|
@ -19,7 +19,7 @@ use serde::{Deserialize, Serialize};
|
||||||
use settings::{Settings, SettingsStore};
|
use settings::{Settings, SettingsStore};
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use std::sync::atomic::{AtomicU64, Ordering};
|
use std::sync::atomic::{AtomicU64, Ordering};
|
||||||
use std::{collections::BTreeMap, sync::Arc};
|
use std::{collections::HashMap, sync::Arc};
|
||||||
use ui::{ButtonLike, Indicator, List, prelude::*};
|
use ui::{ButtonLike, Indicator, List, prelude::*};
|
||||||
use util::ResultExt;
|
use util::ResultExt;
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ impl LanguageModelProvider for OllamaLanguageModelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn provided_models(&self, cx: &App) -> Vec<Arc<dyn LanguageModel>> {
|
fn provided_models(&self, cx: &App) -> Vec<Arc<dyn LanguageModel>> {
|
||||||
let mut models: BTreeMap<String, ollama::Model> = BTreeMap::default();
|
let mut models: HashMap<String, ollama::Model> = HashMap::new();
|
||||||
|
|
||||||
// Add models from the Ollama API
|
// Add models from the Ollama API
|
||||||
for model in self.state.read(cx).available_models.iter() {
|
for model in self.state.read(cx).available_models.iter() {
|
||||||
|
@ -228,7 +228,7 @@ impl LanguageModelProvider for OllamaLanguageModelProvider {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
models
|
let mut models = models
|
||||||
.into_values()
|
.into_values()
|
||||||
.map(|model| {
|
.map(|model| {
|
||||||
Arc::new(OllamaLanguageModel {
|
Arc::new(OllamaLanguageModel {
|
||||||
|
@ -238,7 +238,9 @@ impl LanguageModelProvider for OllamaLanguageModelProvider {
|
||||||
request_limiter: RateLimiter::new(4),
|
request_limiter: RateLimiter::new(4),
|
||||||
}) as Arc<dyn LanguageModel>
|
}) as Arc<dyn LanguageModel>
|
||||||
})
|
})
|
||||||
.collect()
|
.collect::<Vec<_>>();
|
||||||
|
models.sort_by_key(|model| model.name());
|
||||||
|
models
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_model(&self, model: Arc<dyn LanguageModel>, cx: &App) {
|
fn load_model(&self, model: Arc<dyn LanguageModel>, cx: &App) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue