Support slashes in selected model IDs (#59523)

Summary:

- Parse selected model identifiers at the first slash so model IDs may
contain additional slashes.
- Add regression coverage for slash-containing model IDs and invalid
identifiers.

Testing:

- `cargo test -p language_model selected_model_ --lib`

Release Notes:

- Fixed selecting custom language models whose model IDs contain
slashes.
This commit is contained in:
Anant Goel authored and GitHub committed 2026-06-18 01:57:20 +00:00
1 parent 875363a186
commit 29f031d4d9
1 file changed
+23 -2
+23 -2
View File
@@ -71,8 +71,7 @@ impl FromStr for SelectedModel {
/// Parse string identifiers like `provider_id/model_id` into a `SelectedModel`
fn from_str(id: &str) -> Result<SelectedModel, Self::Err> {
let parts: Vec<&str> = id.split('/').collect();
let [provider_id, model_id] = parts.as_slice() else {
let Some((provider_id, model_id)) = id.split_once('/') else {
return Err(format!(
"Invalid model identifier format: `{}`. Expected `provider_id/model_id`",
id
@@ -480,6 +479,28 @@ mod tests {
use super::*;
use crate::fake_provider::FakeLanguageModelProvider;
#[test]
fn selected_model_allows_slashes_in_model_id() {
let selected = SelectedModel::from_str("custom-provider/organization/model-name")
.expect("model identifier should parse");
assert_eq!(
selected.provider,
LanguageModelProviderId("custom-provider".into())
);
assert_eq!(
selected.model,
LanguageModelId("organization/model-name".into())
);
}
#[test]
fn selected_model_rejects_missing_separator_or_empty_parts() {
assert!(SelectedModel::from_str("custom-provider").is_err());
assert!(SelectedModel::from_str("/organization/model-name").is_err());
assert!(SelectedModel::from_str("custom-provider/").is_err());
}
#[gpui::test]
fn test_register_providers(cx: &mut App) {
let registry = cx.new(|_| LanguageModelRegistry::default());