1ef9020c40
Back-прокси STT для press-to-talk (канон PRODUCT-AI, голос и тап — два канала одного движка действий): - handler_ai_transcribe + logic_ai_transcribe (паттерн logic_geo): адаптеры провайдеров xai и openai-совместимый; env STT_PROVIDER, STT_URL, STT_API_KEY, STT_MODEL, STT_TIMEOUT_MS, STT_PROXY_URL - multipart read_file_part в handler_upload_utils (лимит 10 MB) - ETS rate-limit: 10 req/min на пользователя + глобальный троттлинг апстрима; без ключа — 503 unavailable, ошибки апстрима — 502/503 - аудио и транскрипт не персистятся (приват-инвариант канона) - отдельный httpc-профиль: STT_PROXY_URL применяется только к STT (эгресс stt-egress для гео-блокированных провайдеров) - trails в eventhub_trails.erl, маршрут в eventhub_app.erl, docker/.env.example дополнен STT_* Проверка: eunit модуля 8/8; полный прогон eunit зелёный (1211 тестов), compile без новых warning'ов. Refs EventHub/EventHubBack#79 Refs EventHub/EventHubFront#76
62 lines
3.7 KiB
Bash
62 lines
3.7 KiB
Bash
# 小泻芯锌懈褉褍泄褌械 胁 .env (褎邪泄谢 .env 胁 .gitignore). 袛谢褟 谢芯泻邪谢褜薪芯泄 褉邪蟹褉邪斜芯褌泻懈: EVENTHUB_ENV=dev
|
|
|
|
# 袪械卸懈屑: dev | stage | prod (stage/prod 鈥� 芯斜褟蟹邪褌械谢褜薪褘械 褋懈谢褜薪褘械 褋械泻褉械褌褘)
|
|
EVENTHUB_ENV=dev
|
|
|
|
RELEASE_COOKIE=胁邪褕-芯褔械薪褜-写谢懈薪薪褘泄-褋械泻褉械褌薪褘泄-泻褍泻懈-屑懈薪懈屑褍屑-32-褋懈屑胁芯谢邪
|
|
GRAFANA_ADMIN_PASSWORD=褋谢芯卸薪褘泄-褍薪懈泻邪谢褜薪褘泄-锌邪褉芯谢褜
|
|
|
|
# JWT (屑懈薪懈屑褍屑 32 褋懈屑胁芯谢邪, 薪械 懈蟹 denylist 鈥� 褋屑. infra_secrets)
|
|
JWT_SECRET=蟹邪屑械薪懈褌械-薪邪-褋谢褍褔邪泄薪褍褞-褋褌褉芯泻褍-屑懈薪懈屑褍屑-32-褋懈屑胁芯谢邪-写谢褟-user-jwt
|
|
ADMIN_JWT_SECRET=蟹邪屑械薪懈褌械-薪邪-写褉褍谐褍褞-褋谢褍褔邪泄薪褍褞-褋褌褉芯泻褍-屑懈薪懈屑褍屑-32-褋懈屑胁芯谢邪
|
|
|
|
# Seed 邪写屑懈薪芯胁 (芯斜褟蟹邪褌械谢褜薪褘 胁 stage/prod 锌褉懈 锌褍褋褌芯泄 褌邪斜谢懈褑械 admin; 胁 dev 鈥� 芯锌褑懈芯薪邪谢褜薪芯)
|
|
ADMIN_SUPER_EMAIL=superadmin@eventhub.local
|
|
ADMIN_SUPER_PASSWORD=蟹邪屑械薪懈褌械-褋懈谢褜薪褘泄-锌邪褉芯谢褜-褋褍锌械褉邪写屑懈薪邪
|
|
ADMIN_EMAIL=admin@eventhub.local
|
|
ADMIN_PASSWORD=蟹邪屑械薪懈褌械-褋懈谢褜薪褘泄-锌邪褉芯谢褜-邪写屑懈薪邪
|
|
ADMIN_MODER_EMAIL=moderator@eventhub.local
|
|
ADMIN_MODER_PASSWORD=蟹邪屑械薪懈褌械-褋懈谢褜薪褘泄-锌邪褉芯谢褜-屑芯写械褉邪褌芯褉邪
|
|
ADMIN_SUPPORT_EMAIL=support@eventhub.local
|
|
ADMIN_SUPPORT_PASSWORD=蟹邪屑械薪懈褌械-褋懈谢褜薪褘泄-锌邪褉芯谢褜-锌芯写写械褉卸泻懈
|
|
|
|
# Email: EMAIL_TRANSPORT=auto|smtp|http_api|log (auto: API key 鈫� http_api, else SMTP_HOST 鈫� smtp, else log)
|
|
EMAIL_TRANSPORT=auto
|
|
# HTTP API (HTTPS 鈥� when outbound SMTP ports blocked). Canon: Resend (Brevo optional).
|
|
EMAIL_API_KEY=
|
|
EMAIL_API_PROVIDER=resend
|
|
# EMAIL_API_URL=https://api.resend.com/emails
|
|
# Web Push (VAPID). Generate: npx web-push generate-vapid-keys
|
|
VAPID_PUBLIC_KEY=
|
|
VAPID_PRIVATE_KEY=
|
|
VAPID_SUBJECT=mailto:admin@calentiq.com
|
|
# SMTP (锌褍褋褌芯 SMTP_HOST + 薪械褌 API key = 褌芯谢褜泻芯 谢芯谐; 锌邪褉芯谢褜 薪械 泻芯屑屑懈褌懈褌褜)
|
|
SMTP_HOST=
|
|
SMTP_PORT=587
|
|
SMTP_USER=
|
|
SMTP_PASS=
|
|
SMTP_FROM=noreply@calentiq.com
|
|
SMTP_TLS=if_available
|
|
PUBLIC_APP_URL=https://stage.calentiq.com
|
|
# 袨泻薪芯 薪邪锌芯屑懈薪邪薪懈泄 芯 booking (褔邪褋褘 写芯 褋褌邪褉褌邪; Back#70)
|
|
REMINDER_LEAD_HOURS=24
|
|
# Uploads (avatar/cover) 鈥� 泻邪褌邪谢芯谐 薪邪 volume /app/data (Back#71)
|
|
UPLOAD_DIR=/app/data/uploads
|
|
UPLOAD_MAX_BYTES=2097152
|
|
# OpenCage (DevOps#16). 象耱铋 觌� = /v1/geo -> 503 (degrade). Free: 2500/耋蜿�, 1 rps.
|
|
OPENCAGE_API_KEY=
|
|
OPENCAGE_TIMEOUT_MS=3000
|
|
# STT-прокси голосового центра (Back#79, Front#76). Без STT_API_KEY
|
|
# /v1/ai/transcribe отвечает 503 unavailable, клиент деградирует в палитру.
|
|
# Провайдеры: xai (POST {STT_URL}, Bearer) | openai (OpenAI-совместимый).
|
|
STT_PROVIDER=xai
|
|
STT_URL=https://api.x.ai/v1/stt
|
|
STT_API_KEY=
|
|
# Опционально: модель для openai-провайдера и таймаут апстрима.
|
|
STT_MODEL=
|
|
STT_TIMEOUT_MS=15000
|
|
# Опционально: HTTP-эгресс (сервис stt-egress в стеке, vless-образ);
|
|
# гео-блокированные STT-провайдеры вызываются через него.
|
|
STT_PROXY_URL=
|
|
|