From 0401ca9dbcd7017cfa52eb1a4c8a1e2e415c0892 Mon Sep 17 00:00:00 2001 From: flobo3 Date: Thu, 16 Apr 2026 13:44:10 +0300 Subject: [PATCH] fix: pass apiBase from config to GroqTranscriptionProvider --- nanobot/channels/base.py | 6 +++++- nanobot/channels/manager.py | 11 +++++++++++ nanobot/providers/transcription.py | 4 ++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/nanobot/channels/base.py b/nanobot/channels/base.py index 35aac3e42..5b5922430 100644 --- a/nanobot/channels/base.py +++ b/nanobot/channels/base.py @@ -24,6 +24,7 @@ class BaseChannel(ABC): display_name: str = "Base" transcription_provider: str = "groq" transcription_api_key: str = "" + transcription_api_base: str = "" def __init__(self, config: Any, bus: MessageBus): """ @@ -47,7 +48,10 @@ class BaseChannel(ABC): provider = OpenAITranscriptionProvider(api_key=self.transcription_api_key) else: from nanobot.providers.transcription import GroqTranscriptionProvider - provider = GroqTranscriptionProvider(api_key=self.transcription_api_key) + provider = GroqTranscriptionProvider( + api_key=self.transcription_api_key, + api_base=self.transcription_api_base or None, + ) return await provider.transcribe(file_path) except Exception as e: logger.warning("{}: audio transcription failed: {}", self.name, e) diff --git a/nanobot/channels/manager.py b/nanobot/channels/manager.py index 634e04fe7..0e4821701 100644 --- a/nanobot/channels/manager.py +++ b/nanobot/channels/manager.py @@ -41,6 +41,7 @@ class ChannelManager: transcription_provider = self.config.channels.transcription_provider transcription_key = self._resolve_transcription_key(transcription_provider) + transcription_base = self._resolve_transcription_base(transcription_provider) for name, cls in discover_all().items(): section = getattr(self.config.channels, name, None) @@ -57,6 +58,7 @@ class ChannelManager: channel = cls(section, self.bus) channel.transcription_provider = transcription_provider channel.transcription_api_key = transcription_key + channel.transcription_api_base = transcription_base self.channels[name] = channel logger.info("{} channel enabled", cls.display_name) except Exception as e: @@ -73,6 +75,15 @@ class ChannelManager: except AttributeError: return "" + def _resolve_transcription_base(self, provider: str) -> str: + """Pick the API base URL for the configured transcription provider.""" + try: + if provider == "openai": + return self.config.providers.openai.api_base or "" + return self.config.providers.groq.api_base or "" + except AttributeError: + return "" + def _validate_allow_from(self) -> None: for name, ch in self.channels.items(): cfg = ch.config diff --git a/nanobot/providers/transcription.py b/nanobot/providers/transcription.py index aca9693ee..8968c92ff 100644 --- a/nanobot/providers/transcription.py +++ b/nanobot/providers/transcription.py @@ -44,9 +44,9 @@ class GroqTranscriptionProvider: Groq offers extremely fast transcription with a generous free tier. """ - def __init__(self, api_key: str | None = None): + def __init__(self, api_key: str | None = None, api_base: str | None = None): self.api_key = api_key or os.environ.get("GROQ_API_KEY") - self.api_url = "https://api.groq.com/openai/v1/audio/transcriptions" + self.api_url = api_base or os.environ.get("GROQ_BASE_URL") or "https://api.groq.com/openai/v1/audio/transcriptions" async def transcribe(self, file_path: str | Path) -> str: """