# Bloom Ware environment variables # Copy to .env and fill real values locally. Do not commit real secrets. # ===== Application Runtime ===== ENVIRONMENT=development HOST=0.0.0.0 PORT=7860 CORS_ORIGINS=* # ===== Authentication ===== JWT_SECRET_KEY=replace-with-random-secret ACCESS_TOKEN_EXPIRE_MINUTES=30 # ===== Firebase / Firestore ===== FIREBASE_PROJECT_ID=your-firebase-project-id FIREBASE_CREDENTIALS_JSON= FIREBASE_SERVICE_ACCOUNT_JSON_BASE64= FIREBASE_SERVICE_ACCOUNT_PATH= # ===== Google OAuth ===== GOOGLE_CLIENT_ID=your-google-oauth-client-id.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=your-google-oauth-client-secret GOOGLE_REDIRECT_URI=http://localhost:8080/auth/google/callback # ===== Google Cloud 語音(STT/TTS)— 與 Firebase、OAuth 登入「不同專案/不同憑證」===== # # 三種 Google 身分請分開設定,勿混用: # (1) Firebase / Firestore → FIREBASE_PROJECT_ID + FIREBASE_* 服務帳戶 # (2) Google OAuth(網站登入)→ GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET # (3) 語音 GCP(Speech + TTS)→ 專案 ID 字串例:supervisor-project;控制台「專案編號」僅供對照,API 請用專案 ID # # 已啟用 API:Cloud Speech-to-Text、Cloud Text-to-Speech。 # - TTS(REST):使用 GOOGLE_TTS_API_KEY 或 GOOGLE_SPEECH_API_KEY(與 GOOGLE_API_KEY 可同一支) # - STT v2「串流」:官方為 gRPC,必須使用「語音專案」的服務帳戶 OAuth(GOOGLE_SPEECH_*);僅 API Key 無法走現有串流實作 # # 語音專案 STT 必備(擇一):GOOGLE_SPEECH_CREDENTIALS_JSON / GOOGLE_SPEECH_SERVICE_ACCOUNT_JSON_BASE64 / GOOGLE_SPEECH_SERVICE_ACCOUNT_PATH GOOGLE_SPEECH_PROJECT_ID=supervisor-project GOOGLE_SPEECH_CREDENTIALS_JSON= GOOGLE_SPEECH_SERVICE_ACCOUNT_JSON_BASE64= GOOGLE_SPEECH_SERVICE_ACCOUNT_PATH= # 語音專案預設 ID(未單獨設 GOOGLE_SPEECH_PROJECT_ID 時亦會參考);勿只填專案「編號」 GOOGLE_CLOUD_PROJECT_ID=supervisor-project GOOGLE_STT_ACCESS_TOKEN= GOOGLE_API_KEY=your-google-api-key-for-tts-and-rest GOOGLE_SPEECH_API_KEY= GOOGLE_TTS_API_KEY= GOOGLE_STT_LOCATION=global GOOGLE_STT_RECOGNIZER_ID=_ GOOGLE_STT_AUTO_LANGUAGE_CODES=cmn-Hant-TW,en-US,ja-JP GOOGLE_TTS_LANGUAGE_CODE=cmn-TW GOOGLE_TTS_DEFAULT_VOICE=cmn-TW-Wavenet-A # ===== OpenAI Agent ===== OPENAI_API_KEY=your-openai-api-key OPENAI_BASE_URL=https://sub2api.flowatelier.com OPENAI_MODEL=gpt-5.4 OPENAI_TIMEOUT=30 OPENAI_RESPONSES_TIMEOUT=90 OPENAI_USE_RESPONSES=true OPENAI_MODEL_CONTEXT_WINDOW=1000000 OPENAI_MODEL_AUTO_COMPACT_TOKEN_LIMIT=900000 OPENAI_ENABLE_WEB_SEARCH=true OPENAI_ENABLE_REMOTE_MCP=true OPENAI_REMOTE_MCP_SERVERS_JSON=[] OPENAI_ENABLE_SKILLS=true USE_GPT_INTENT=true GPT_INTENT_MODEL=gpt-5.4 # ===== External Data APIs ===== WEATHER_API_KEY=your-weather-api-key TAVILY_API_KEY=your-newsdata-api-key EXCHANGE_API_KEY=your-exchange-api-key OPENROUTESERVICE_API_KEY=your-openrouteservice-api-key TDX_CLIENT_ID=your-tdx-client-id TDX_CLIENT_SECRET=your-tdx-client-secret # ===== Background Jobs ===== ENABLE_BACKGROUND_JOBS=true # ===== Environment Context ===== ENV_CONTEXT_DISTANCE_THRESHOLD=100 ENV_CONTEXT_HEADING_THRESHOLD=25 ENV_CONTEXT_TTL_SECONDS=300