mirror of
https://github.com/OpenSquawk/OpenSquawk
synced 2026-08-01 22:26:04 +08:00
Whisper hallucinates short real words ("Test", "Thank you", "Okay") on
near-silent or noisy audio. Unfiltered these reached the backend as a wrong
readback attempt — counting toward the 3x-skip — and triggered paid
LLM-router calls. Drop voice (PTT) transcripts below NUXT_PUBLIC_PTT_MIN_WORDS
(default 2); text input is exempt so deliberate short commands still work.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
68 lines
2.2 KiB
Plaintext
68 lines
2.2 KiB
Plaintext
# Runtime
|
|
NODE_ENV=development
|
|
MONGODB_URI=mongodb://127.0.0.1:27017/opensquawk
|
|
|
|
# Authentication
|
|
# Generate strong, unique random values — e.g. `openssl rand -hex 32`.
|
|
# The server refuses to start in production if these are unset, look like a
|
|
# placeholder, or are shorter than 32 characters.
|
|
JWT_SECRET=CHANGE_ME
|
|
JWT_REFRESH_SECRET=CHANGE_ME
|
|
|
|
# OpenAI
|
|
OPENAI_API_KEY=sk-your-openai-key
|
|
OPENAI_PROJECT=
|
|
OPENAI_BASE_URL=
|
|
# Optional: specify a custom API endpoint, e.g. http://localhost:1234/v1
|
|
LLM_MODEL=gpt-5-nano
|
|
TTS_MODEL=tts-1
|
|
VOICE_ID=alloy
|
|
# Model used by the /api/decision/route LLM router (the Python backend calls
|
|
# this when regex routing misses a pilot transmission).
|
|
ROUTER_LLM_MODEL=gpt-5-mini
|
|
|
|
# Internal service-to-service auth. The Python decision backend calls
|
|
# /api/decision/route with this value in the `x-service-secret` header. Must
|
|
# match SERVICE_SECRET in the Python backend's env. If unset, the LLM router is
|
|
# disabled (the backend falls back to deterministic bad_next routing).
|
|
SERVICE_SECRET=CHANGE_ME
|
|
|
|
# PM radio training
|
|
# Minimum word count for a voice (PTT) transmission to be used; shorter
|
|
# transcripts are treated as STT noise/hallucination and ignored. Set to 1 to
|
|
# disable. See the "STT MINIMUM-WORD GATE" in app/pages/pm.vue.
|
|
NUXT_PUBLIC_PTT_MIN_WORDS=2
|
|
|
|
# ATC audio generation
|
|
ATC_OUT_DIR=./storage/atc
|
|
FLIGHTLAB_TTS_CACHE_DIR=./.cache/flightlab-tts
|
|
USE_SPEACHES=false
|
|
USE_PIPER=false
|
|
PIPER_PORT=5001
|
|
SPEACHES_BASE_URL=
|
|
SPEECH_MODEL_ID=speaches-ai/piper-en_US-ryan-low
|
|
# Optional: external webhook for bridge dome-light telemetry. Leave empty to disable.
|
|
DOME_LIGHT_WEBHOOK_URL=
|
|
|
|
# Notifications
|
|
NOTIFY_RESEND_API_KEY=
|
|
NOTIFY_EMAIL_TO=
|
|
NOTIFY_EMAIL_FROM="OpenSquawk <info@opensquawk.de>"
|
|
NOTIFY_SMTP_HOST=
|
|
NOTIFY_SMTP_PORT=587
|
|
NOTIFY_SMTP_SECURE=false
|
|
NOTIFY_SMTP_USER=
|
|
NOTIFY_SMTP_PASS=
|
|
|
|
# Bootstrap invitations
|
|
BOOTSTRAP_INVITE_DEADLINE=2025-09-01T00:00:00Z
|
|
|
|
# Manual invitation generator
|
|
MANUAL_INVITE_PASSWORD=CHANGE_ME
|
|
|
|
# Cron / scheduled tasks
|
|
# Required for the /api/service/cron/* endpoints (they send emails and mint
|
|
# invite codes). Without it those endpoints return 503. Pass it via the
|
|
# `x-cron-secret` header (preferred) or `?secret=` query param.
|
|
CRON_SECRET=CHANGE_ME
|