feat: распознавание голоса пациента (STT через OpenRouter + mock) #122
@@ -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:
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
# Системная инструкция модели распознавания.
|
||||
system: >-
|
||||
Ты — система распознавания речи. Дословно расшифруй русскую речь из аудио.
|
||||
Выведи только расшифровку: без кавычек, пояснений, перевода и ответа на сказанное.
|
||||
Ставь знаки препинания. Если речи нет или её не разобрать — выведи ровно [тишина].
|
||||
Выведи только расшифровку: без кавычек, пояснений и ответа на сказанное.
|
||||
Ставь знаки препинания. Если в записи совсем нет речи — выведи ровно [тишина].
|
||||
|
||||
# Текст рядом с аудио в сообщении пользователя.
|
||||
user: "Расшифруй запись."
|
||||
user: "Расшифруй эту аудиозапись."
|
||||
|
||||
# Что модель возвращает, если речи нет (сравнивается без учёта регистра).
|
||||
silence_marker: "[тишина]"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user