PORT=3000
# Tùy chọn đổi thư mục dữ liệu PC Server; để trống dùng pc-server/data.
PC_DATA_DIR=

# AI provider: gemini | openai
AI_PROVIDER=gemini

# Gemini native API
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.5-flash
GEMINI_API_BASE=https://generativelanguage.googleapis.com/v1beta

# OpenAI-compatible API: LM Studio / OpenAI-like server
# LM Studio mặc định thường là http://127.0.0.1:1234/v1
OPENAI_COMPAT_BASE_URL=http://127.0.0.1:1234/v1
OPENAI_COMPAT_API_KEY=lm-studio
OPENAI_COMPAT_MODEL=

AI_TEMPERATURE=0.2
AI_MAX_OUTPUT_TOKENS=4096
AI_TIMEOUT_MS=300000

# Nếu kết quả chạm giới hạn token hoặc thiếu mục bắt buộc, thử lại tối đa 1 lần với ngân sách lớn hơn.
AI_RETRY_INCOMPLETE=true
AI_MAX_INCOMPLETE_RETRIES=1
AI_RETRY_MAX_OUTPUT_TOKENS=8192

# Khuyến nghị bật với Qwen thinking model trong LM Studio để tránh chỉ trả reasoning_content
OPENAI_COMPAT_NO_THINK=true

# PDF_FONT_PATH=C:\Windows\Fonts\arial.ttf

# Hệ thống hội nghị / DICENTIS Gateway
# Cấu hình này cũng có thể thay đổi trực tiếp trên Web Control Center.
CONFERENCE_ENABLED=true
CONFERENCE_ASSIGNMENT_MODE=manual
CONFERENCE_GATEWAY_URL=ws://127.0.0.1:17880/ws
CONFERENCE_GATEWAY_TOKEN=4445546dd30c7e2a1720b02206df3c1563e4f98debf2b0935656b88658789286
CONFERENCE_RECONNECT_MS=2000
CONFERENCE_CONNECT_TIMEOUT_MS=8000
CONFERENCE_STALE_MS=30000

# CR service trên cùng máy
CR_SERVICE_URL=http://127.0.0.1:3100
CR_DEFAULT_PROFILE=local_accuracy

# Server-side recorder trên chính máy cài CR.
# Windows: DirectShow. macOS: AVFoundation.
# Có thể để trống để tự tìm trong PATH, thư mục bundled hoặc /opt/homebrew/bin/ffmpeg trên Apple Silicon.
CR_FFMPEG_PATH=
CR_RECORD_SEGMENT_SECONDS=60

# Smart Conference Room 3.0.9 - đăng nhập PC Client qua Room Agent
PC_AUTH_REQUIRED=true
ROOM_AGENT_LOCAL_URL=http://127.0.0.1:3211
ROOM_AGENT_LOCAL_KEY=0d6082a425cdd4c3b88cd2c2899c023e32b3a36048b183e0f0780f52c0b03111
PC_SERVER_LOCAL_KEY=0d6082a425cdd4c3b88cd2c2899c023e32b3a36048b183e0f0780f52c0b03111
CLIENT_SESSION_IDLE_MINUTES=30
CLIENT_SESSION_MAX_HOURS=12

# SCR 3.2.4.3 - ổn định cuộc họp kéo dài
# Partial realtime được gộp, tối đa khoảng 8 lần/giây theo mặc định.
REALTIME_PARTIAL_INTERVAL_MS=120
# Chỉ UPSERT segment/metadata đã thay đổi; checkpoint file tổng hợp theo chu kỳ.
PERSIST_INCREMENTAL_DELAY_MS=80
PERSIST_CHECKPOINT_INTERVAL_MS=4000
# Partial event chỉ lấy mẫu để tránh events.jsonl/SQLite tăng quá nhanh.
PARTIAL_EVENT_SAMPLE_MS=2000
# Backpressure WebSocket: gộp update có thể thay thế và buộc client quá chậm reconnect.
WS_BACKPRESSURE_SOFT_BYTES=2097152
WS_BACKPRESSURE_HARD_BYTES=8388608
WS_BACKPRESSURE_RETRY_MS=80
STT_INBOUND_BATCH_SIZE=16
STT_INBOUND_TIME_BUDGET_MS=6
