fix: pass apiBase from config to GroqTranscriptionProvider

This commit is contained in:
flobo3 2026-04-16 13:44:10 +03:00 committed by Xubin Ren
parent cc5a666d5d
commit 0401ca9dbc
3 changed files with 18 additions and 3 deletions

View File

@ -24,6 +24,7 @@ class BaseChannel(ABC):
display_name: str = "Base" display_name: str = "Base"
transcription_provider: str = "groq" transcription_provider: str = "groq"
transcription_api_key: str = "" transcription_api_key: str = ""
transcription_api_base: str = ""
def __init__(self, config: Any, bus: MessageBus): def __init__(self, config: Any, bus: MessageBus):
""" """
@ -47,7 +48,10 @@ class BaseChannel(ABC):
provider = OpenAITranscriptionProvider(api_key=self.transcription_api_key) provider = OpenAITranscriptionProvider(api_key=self.transcription_api_key)
else: else:
from nanobot.providers.transcription import GroqTranscriptionProvider 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) return await provider.transcribe(file_path)
except Exception as e: except Exception as e:
logger.warning("{}: audio transcription failed: {}", self.name, e) logger.warning("{}: audio transcription failed: {}", self.name, e)

View File

@ -41,6 +41,7 @@ class ChannelManager:
transcription_provider = self.config.channels.transcription_provider transcription_provider = self.config.channels.transcription_provider
transcription_key = self._resolve_transcription_key(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(): for name, cls in discover_all().items():
section = getattr(self.config.channels, name, None) section = getattr(self.config.channels, name, None)
@ -57,6 +58,7 @@ class ChannelManager:
channel = cls(section, self.bus) channel = cls(section, self.bus)
channel.transcription_provider = transcription_provider channel.transcription_provider = transcription_provider
channel.transcription_api_key = transcription_key channel.transcription_api_key = transcription_key
channel.transcription_api_base = transcription_base
self.channels[name] = channel self.channels[name] = channel
logger.info("{} channel enabled", cls.display_name) logger.info("{} channel enabled", cls.display_name)
except Exception as e: except Exception as e:
@ -73,6 +75,15 @@ class ChannelManager:
except AttributeError: except AttributeError:
return "" 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: def _validate_allow_from(self) -> None:
for name, ch in self.channels.items(): for name, ch in self.channels.items():
cfg = ch.config cfg = ch.config

View File

@ -44,9 +44,9 @@ class GroqTranscriptionProvider:
Groq offers extremely fast transcription with a generous free tier. 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_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: async def transcribe(self, file_path: str | Path) -> str:
""" """