[backend][B] STT в РФ-контуре для пилота: SaluteSpeech + запрет зарубежного STT вне демо #121

Open
opened 2026-10-31 11:10:18 +03:00 by Eleboba · 0 comments
Owner

Описание

Часть эпика «Демо к гранту ВШЭ и пилоту „Династия“». STT через OpenRouter допустим только на синтетике (ADR-014). Для пилота с реальными пациентами голос должен обрабатываться в РФ-контуре (152-ФЗ, ст. 12 и ст. 18 ч. 5). Это же стоит в бюджете стипендии: «LLM API и распознавание речи — 30 тыс.».

Образец — vobot: agent/stt/salute_stt.py (SaluteSpeech, gRPC и protobuf-стабы в agent/stt/salute/) и agent/stt/yandex_stt.py. Для дневника потоковое распознавание не нужно, достаточно синхронного или асинхронного распознавания файла (REST SaluteSpeech).

Желаемый результат

  • SaluteSTT реализует тот же протокол SpeechToText (app/llm/stt.py), выбирается через STT_PROVIDER=salute.
  • Креды SALUTE_SPEECH_CREDENTIALS и scope хранятся в .env. OAuth-токен кешируется по образцу GigaChat в app/llm/giga.py.
  • Для пилотного окружения STT_PROVIDER=openrouter запрещён при DEMO_CLOCK=false / прод-флаге: приложение не стартует с понятной ошибкой.

Подзадачи

  • SaluteSTT (REST, WAV 16 кГц)
  • конфиг и .env.example
  • guard «зарубежный STT вне демо запрещён»
  • тесты с моком транспорта

Анализ

Ограничения и риски

Нужен договор и ключ SaluteSpeech (Сбер) до 01.02.2027. Ключ выдаёт человек, не агент.

Как проверить

STT_PROVIDER=salute → запись в web → расшифровка. make lint test.

Лог

2026-10-31

Код готов — PR #127, ADR-016. SaluteSpeech через синхронный REST (без gRPC), токен кешируется, TLS с SALUTE_SPEECH_CA. Guard: openrouter при DEMO_CLOCK=false не даёт стартовать; auto вне демо без кредов выключает голос.
Осталось (нужен человек): договор и ключ SaluteSpeech → SALUTE_SPEECH_CREDENTIALS в .env, сертификат Минцифры → SALUTE_SPEECH_CA; затем живая проверка «запись в web → расшифровка» и закрытие задачи.

## Описание Часть эпика «Демо к гранту ВШЭ и пилоту „Династия“». STT через OpenRouter допустим только на синтетике (ADR-014). Для пилота с реальными пациентами голос должен обрабатываться в РФ-контуре (152-ФЗ, ст. 12 и ст. 18 ч. 5). Это же стоит в бюджете стипендии: «LLM API и распознавание речи — 30 тыс.». Образец — vobot: `agent/stt/salute_stt.py` (SaluteSpeech, gRPC и protobuf-стабы в `agent/stt/salute/`) и `agent/stt/yandex_stt.py`. Для дневника потоковое распознавание не нужно, достаточно синхронного или асинхронного распознавания файла (REST SaluteSpeech). ## Желаемый результат - `SaluteSTT` реализует тот же протокол `SpeechToText` (`app/llm/stt.py`), выбирается через `STT_PROVIDER=salute`. - Креды `SALUTE_SPEECH_CREDENTIALS` и scope хранятся в `.env`. OAuth-токен кешируется по образцу GigaChat в `app/llm/giga.py`. - Для пилотного окружения `STT_PROVIDER=openrouter` запрещён при `DEMO_CLOCK=false` / прод-флаге: приложение не стартует с понятной ошибкой. ## Подзадачи - [x] `SaluteSTT` (REST, WAV 16 кГц) - [x] конфиг и `.env.example` - [x] guard «зарубежный STT вне демо запрещён» - [x] тесты с моком транспорта ## Анализ ### Ограничения и риски Нужен договор и ключ SaluteSpeech (Сбер) до 01.02.2027. Ключ выдаёт человек, не агент. ## Как проверить `STT_PROVIDER=salute` → запись в web → расшифровка. `make lint test`. ## Лог ### 2026-10-31 Код готов — PR #127, ADR-016. SaluteSpeech через синхронный REST (без gRPC), токен кешируется, TLS с `SALUTE_SPEECH_CA`. Guard: `openrouter` при `DEMO_CLOCK=false` не даёт стартовать; `auto` вне демо без кредов выключает голос. **Осталось (нужен человек):** договор и ключ SaluteSpeech → `SALUTE_SPEECH_CREDENTIALS` в `.env`, сертификат Минцифры → `SALUTE_SPEECH_CA`; затем живая проверка «запись в web → расшифровка» и закрытие задачи.
Eleboba added this to the Грант ВШЭ · пилот «Династия» milestone 2026-10-31 11:10:18 +03:00
Eleboba added the lane/Bsafetysize/1featurestage/veteransP1backend labels 2026-10-31 11:10:18 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: MedITron/PTSRaiAgent#121