Compare commits

...

2 Commits

Author SHA1 Message Date
Christian Gick
9bd7f27a84 fix: Use LITELLM_MASTER_KEY for memory service
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 17:25:16 +02:00
Christian Gick
4012950197 fix: Use scribe_v2_realtime model for ElevenLabs STT (streaming mode)
scribe_v1 (REST) sets streaming=False, incompatible with livekit-agents 1.4 AgentSession.
scribe_v2_realtime uses WebSocket streaming (confirmed working with Starter plan).
Removes separate _stt_session aiohttp client.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 17:24:16 +02:00
2 changed files with 3 additions and 4 deletions

View File

@@ -49,7 +49,7 @@ services:
environment: environment:
DATABASE_URL: postgresql://memory:${MEMORY_DB_PASSWORD:-memory}@memory-db:5432/memories DATABASE_URL: postgresql://memory:${MEMORY_DB_PASSWORD:-memory}@memory-db:5432/memories
LITELLM_BASE_URL: ${LITELLM_BASE_URL} LITELLM_BASE_URL: ${LITELLM_BASE_URL}
LITELLM_API_KEY: ${LITELLM_API_KEY:-not-needed} LITELLM_API_KEY: ${LITELLM_MASTER_KEY}
EMBED_MODEL: ${EMBED_MODEL:-text-embedding-3-small} EMBED_MODEL: ${EMBED_MODEL:-text-embedding-3-small}
depends_on: depends_on:
memory-db: memory-db:

View File

@@ -231,7 +231,7 @@ class VoiceSession:
self.session = None self.session = None
self._task = None self._task = None
self._http_session = None self._http_session = None
self._stt_session = None self._stt_session = None # kept for cleanup compat
self._caller_key: bytes | None = None self._caller_key: bytes | None = None
self._caller_identity: str | None = None self._caller_identity: str | None = None
self._caller_all_keys: dict = {} # {index: bytes} — all caller keys by index self._caller_all_keys: dict = {} # {index: bytes} — all caller keys by index
@@ -555,10 +555,9 @@ class VoiceSession:
# Voice pipeline — George (British male, multilingual DE/EN) # Voice pipeline — George (British male, multilingual DE/EN)
self._http_session = aiohttp.ClientSession() self._http_session = aiohttp.ClientSession()
self._stt_session = aiohttp.ClientSession() # separate session avoids WS/HTTP conflicts
voice_id = os.environ.get("ELEVENLABS_VOICE_ID", DEFAULT_VOICE_ID) voice_id = os.environ.get("ELEVENLABS_VOICE_ID", DEFAULT_VOICE_ID)
self.session = AgentSession( self.session = AgentSession(
stt=elevenlabs.STT(api_key=ELEVENLABS_KEY, http_session=self._stt_session), stt=elevenlabs.STT(api_key=ELEVENLABS_KEY, model_id="scribe_v2_realtime"),
llm=lk_openai.LLM(base_url=LITELLM_URL, api_key=LITELLM_KEY, model=self.model), llm=lk_openai.LLM(base_url=LITELLM_URL, api_key=LITELLM_KEY, model=self.model),
tts=elevenlabs.TTS(voice_id=voice_id, model="eleven_multilingual_v2", tts=elevenlabs.TTS(voice_id=voice_id, model="eleven_multilingual_v2",
api_key=ELEVENLABS_KEY, http_session=self._http_session), api_key=ELEVENLABS_KEY, http_session=self._http_session),