From fd6313acd9a598554bf1775f1d06457a6495547e Mon Sep 17 00:00:00 2001 From: curo1305 Date: Tue, 19 May 2026 00:56:37 +0200 Subject: [PATCH] feat(tui): auto-correct base URL if required path suffix is missing Providers that need /v1 (lmstudio, llamacpp, qwen) now declare a url_suffix field. The AI settings save action appends it automatically and notifies the user if they entered a URL without it. Co-Authored-By: Claude Sonnet 4.6 --- src/pyra/config/tui.py | 9 +++++++++ src/pyra/setup/providers.py | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/src/pyra/config/tui.py b/src/pyra/config/tui.py index 34d99a1..df784f4 100644 --- a/src/pyra/config/tui.py +++ b/src/pyra/config/tui.py @@ -171,6 +171,15 @@ class _AITab(VerticalScroll): base_url = self.query_one("#ai-base-url", Input).value.strip() or None api_key = self.query_one("#ai-key", Input).value.strip() + if base_url and provider.url_suffix and not base_url.rstrip("/").endswith(provider.url_suffix): + base_url = base_url.rstrip("/") + provider.url_suffix + self.query_one("#ai-base-url", Input).value = base_url + self.app.notify( + f"Base URL must end with '{provider.url_suffix}' for {provider.display_name} — corrected automatically.", + severity="warning", + timeout=6, + ) + cfg = load_config() cfg.ai.provider_id = provider_id cfg.ai.model = model diff --git a/src/pyra/setup/providers.py b/src/pyra/setup/providers.py index 6e97cfd..664e234 100644 --- a/src/pyra/setup/providers.py +++ b/src/pyra/setup/providers.py @@ -9,6 +9,7 @@ class Provider: default_model: str litellm_prefix: str base_url: str | None = None + url_suffix: str | None = None # required path suffix for custom base URLs (e.g. "/v1") key_env_var: str | None = None connectivity_check: str | None = None group: str = "Cloud" @@ -23,6 +24,7 @@ PROVIDERS: list[Provider] = [ default_model="local-model", litellm_prefix="openai/", base_url="http://localhost:1234/v1", + url_suffix="/v1", connectivity_check="http://localhost:1234/v1/models", group="Local", ), @@ -43,6 +45,7 @@ PROVIDERS: list[Provider] = [ default_model="local-model", litellm_prefix="openai/", base_url="http://localhost:8080/v1", + url_suffix="/v1", connectivity_check="http://localhost:8080/v1/models", group="Local", ), @@ -90,6 +93,7 @@ PROVIDERS: list[Provider] = [ default_model="openai/qwen-plus", litellm_prefix="openai/", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", + url_suffix="/v1", key_env_var="DASHSCOPE_API_KEY", group="Cloud", ),