Skip to content

Commit 0aca19e

Browse files
neiiiCopilot
andauthored
Groq configure fix (#5833)
Signed-off-by: neiii <[email protected]> Co-authored-by: Copilot <[email protected]>
1 parent 3a378b2 commit 0aca19e

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

crates/goose/src/providers/factory.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,4 +372,39 @@ mod tests {
372372
_guard.set("GOOSE_CONTEXT_LIMIT", "64000");
373373
let _result = create_lead_worker_from_env("openai", &default_model, "gpt-4o");
374374
}
375+
376+
#[tokio::test]
377+
async fn test_openai_compatible_providers_config_keys() {
378+
let providers_list = providers().await;
379+
let cases = vec![
380+
("openai", "OPENAI_API_KEY"),
381+
("groq", "GROQ_API_KEY"),
382+
("mistral", "MISTRAL_API_KEY"),
383+
("custom_deepseek", "DEEPSEEK_API_KEY"),
384+
];
385+
for (name, expected_key) in cases {
386+
if let Some((meta, _)) = providers_list.iter().find(|(m, _)| m.name == name) {
387+
assert!(
388+
!meta.config_keys.is_empty(),
389+
"{name} provider should have config keys"
390+
);
391+
assert_eq!(
392+
meta.config_keys[0].name, expected_key,
393+
"First config key for {name} should be {expected_key}, got {}",
394+
meta.config_keys[0].name
395+
);
396+
assert!(
397+
meta.config_keys[0].required,
398+
"{expected_key} should be required"
399+
);
400+
assert!(
401+
meta.config_keys[0].secret,
402+
"{expected_key} should be secret"
403+
);
404+
} else {
405+
// Provider not registered; skip test for this provider
406+
continue;
407+
}
408+
}
409+
}
375410
}

crates/goose/src/providers/provider_registry.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,24 @@ impl ProviderRegistry {
9696
})
9797
.collect();
9898

99+
let mut config_keys = base_metadata.config_keys.clone();
100+
101+
if let Some(api_key_index) = config_keys
102+
.iter()
103+
.position(|key| key.required && key.secret)
104+
{
105+
config_keys[api_key_index] =
106+
super::base::ConfigKey::new(&config.api_key_env, true, true, None);
107+
}
108+
99109
let custom_metadata = ProviderMetadata {
100110
name: config.name.clone(),
101111
display_name: config.display_name.clone(),
102112
description,
103113
default_model,
104114
known_models,
105115
model_doc_link: base_metadata.model_doc_link,
106-
config_keys: base_metadata.config_keys,
116+
config_keys,
107117
};
108118

109119
self.entries.insert(

0 commit comments

Comments
 (0)