From d7006088253b776b434fac0e206cfb7738f2691d Mon Sep 17 00:00:00 2001 From: Lacky1234union Date: Sat, 31 Oct 2026 11:29:40 +0300 Subject: [PATCH] =?UTF-8?q?fix(llm):=20STT=20prompt=20that=20keeps=20uncle?= =?UTF-8?q?ar=20speech;=20reasoning=20off=20(~60=20s=20=E2=86=92=20~3=20s)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Live check on synthetic speech (espeak) via OpenRouter gemini-2.5-flash: 3–5 s per clip, silence → no speech. Refs #116 Co-Authored-By: Claude Opus 5.5 --- app/llm/stt.py | 2 ++ config/texts/stt.yaml | 6 +++--- tests/test_llm_stt.py | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/llm/stt.py b/app/llm/stt.py index e933030..ea0a17e 100644 --- a/app/llm/stt.py +++ b/app/llm/stt.py @@ -108,6 +108,8 @@ class OpenRouterSTT: "messages": [{"role": "system", "content": texts.system}, {"role": "user", "content": content}], "temperature": 0, "max_tokens": 800, + # Transcription needs no thinking: with reasoning on, gemini-2.5-flash takes ~60 s instead of ~3 s. + "reasoning": {"enabled": False}, } data = await self._post(body) try: diff --git a/config/texts/stt.yaml b/config/texts/stt.yaml index e187374..31a90a5 100644 --- a/config/texts/stt.yaml +++ b/config/texts/stt.yaml @@ -4,11 +4,11 @@ # Системная инструкция модели распознавания. system: >- Ты — система распознавания речи. Дословно расшифруй русскую речь из аудио. - Выведи только расшифровку: без кавычек, пояснений, перевода и ответа на сказанное. - Ставь знаки препинания. Если речи нет или её не разобрать — выведи ровно [тишина]. + Выведи только расшифровку: без кавычек, пояснений и ответа на сказанное. + Ставь знаки препинания. Если в записи совсем нет речи — выведи ровно [тишина]. # Текст рядом с аудио в сообщении пользователя. -user: "Расшифруй запись." +user: "Расшифруй эту аудиозапись." # Что модель возвращает, если речи нет (сравнивается без учёта регистра). silence_marker: "[тишина]" diff --git a/tests/test_llm_stt.py b/tests/test_llm_stt.py index 8f978d1..fc28054 100644 --- a/tests/test_llm_stt.py +++ b/tests/test_llm_stt.py @@ -66,6 +66,7 @@ async def test_openrouter_sends_audio_and_returns_transcript() -> None: assert await stt.transcribe(audio) == "Сегодня плохо спал." body = sent[0] assert body["model"] == "google/gemini-2.5-flash" and body["temperature"] == 0 + assert body["reasoning"] == {"enabled": False} part = body["messages"][1]["content"][1] assert part["type"] == "input_audio" and part["input_audio"]["format"] == "wav" assert base64.b64decode(part["input_audio"]["data"]) == audio