diff --git a/crates/goose-cli/src/commands/configure.rs b/crates/goose-cli/src/commands/configure.rs index cf26f3acb6ab..8e652e3f4abb 100644 --- a/crates/goose-cli/src/commands/configure.rs +++ b/crates/goose-cli/src/commands/configure.rs @@ -1718,7 +1718,7 @@ fn add_provider() -> anyhow::Result<()> { .interact()?; let api_url: String = cliclack::input("Provider API URL:") - .placeholder("https://api.example.com/v1/messages") + .placeholder("https://api.example.com/v1") .validate(|input: &String| { if !input.starts_with("http://") && !input.starts_with("https://") { Err("URL must start with either http:// or https://") diff --git a/crates/goose/src/providers/openai.rs b/crates/goose/src/providers/openai.rs index f6fe3042bc03..61e6afee25fe 100644 --- a/crates/goose/src/providers/openai.rs +++ b/crates/goose/src/providers/openai.rs @@ -154,7 +154,7 @@ impl OpenAiProvider { format!("{}://{}", url.scheme(), url.host_str().unwrap_or("")) }; let base_path = url.path().trim_start_matches('/').to_string(); - let base_path = if base_path.is_empty() { + let base_path = if base_path.is_empty() || base_path == "v1" || base_path == "v1/" { "v1/chat/completions".to_string() } else { base_path diff --git a/ui/desktop/src/components/settings/providers/modal/subcomponents/forms/CustomProviderForm.tsx b/ui/desktop/src/components/settings/providers/modal/subcomponents/forms/CustomProviderForm.tsx index 28c8b4a13191..e45a503522fa 100644 --- a/ui/desktop/src/components/settings/providers/modal/subcomponents/forms/CustomProviderForm.tsx +++ b/ui/desktop/src/components/settings/providers/modal/subcomponents/forms/CustomProviderForm.tsx @@ -158,7 +158,7 @@ export default function CustomProviderForm({ id="api-url" value={apiUrl} onChange={(e) => setApiUrl(e.target.value)} - placeholder="https://api.example.com/v1/messages" + placeholder="https://api.example.com/v1" aria-invalid={!!validationErrors.apiUrl} aria-describedby={validationErrors.apiUrl ? 'api-url-error' : undefined} className={validationErrors.apiUrl ? 'border-red-500' : ''}