Update desktop app to android app capabilities.
This commit is contained in:
+17
-26
@@ -1,14 +1,20 @@
|
||||
"""Speech-to-text for the actual query, after the wake word fires.
|
||||
|
||||
Deepgram, same as desk_client/bolt_desk.py.
|
||||
The "guaranteed" fallback for when stt_stream's opportunistic live-feed
|
||||
session didn't produce a transcript (streaming disabled, or the socket
|
||||
never came up). There is no separate one-shot REST endpoint server-side any
|
||||
more — /desk/stt is a websocket relay only — so this connects the exact
|
||||
same way stt_stream.py does and just feeds the whole buffered utterance in
|
||||
one go instead of frame-by-frame as it's captured. That connection is
|
||||
unconditional (not gated by STT_STREAMING, which only controls the
|
||||
opportunistic optimisation), since there is nothing left to fall back to
|
||||
if it fails.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import requests
|
||||
|
||||
from .. import config
|
||||
from .mic import pcm_to_wav_bytes
|
||||
from . import stt_stream
|
||||
|
||||
|
||||
class SttError(Exception):
|
||||
@@ -16,27 +22,12 @@ class SttError(Exception):
|
||||
|
||||
|
||||
def transcribe(pcm) -> str:
|
||||
if not config.DEEPGRAM_API_KEY:
|
||||
raise SttError("DEEPGRAM_API_KEY is not set")
|
||||
if not config.is_configured():
|
||||
raise SttError("BOLT_SERVER_URL / DESK_API_KEY not set")
|
||||
try:
|
||||
response = requests.post(
|
||||
"https://api.deepgram.com/v1/listen",
|
||||
params={"model": config.DEEPGRAM_MODEL, "language": "en", "smart_format": "true"},
|
||||
headers={
|
||||
"Authorization": f"Token {config.DEEPGRAM_API_KEY}",
|
||||
"Content-Type": "audio/wav",
|
||||
},
|
||||
data=pcm_to_wav_bytes(pcm),
|
||||
timeout=30,
|
||||
)
|
||||
response.raise_for_status()
|
||||
socket = stt_stream.connect()
|
||||
except Exception as exc:
|
||||
raise SttError(f"transcription request failed: {exc}") from exc
|
||||
try:
|
||||
return (
|
||||
response.json()
|
||||
.get("results", {}).get("channels", [{}])[0]
|
||||
.get("alternatives", [{}])[0].get("transcript", "")
|
||||
).strip()
|
||||
except Exception as exc:
|
||||
raise SttError(f"couldn't parse transcription response: {exc}") from exc
|
||||
raise SttError(f"couldn't reach the transcription server: {exc}") from exc
|
||||
session = stt_stream.StreamingTranscriber(socket)
|
||||
session.feed(pcm)
|
||||
return session.finish()
|
||||
|
||||
Reference in New Issue
Block a user