GLChat Backend
GLChat Backend provides various environment variables so you can customize and configure various aspects of the application.
# ======================================================================================================================
# GLChat Backend Environment Variables
# This file serves as a template for the .env file.
# Copy this file to .env and fill in the values for your environment.
#
# References:
# - GLChat Environment Variables Management Strategy https://docs.google.com/document/d/1vBbtHO6gvsGD30yvrjJyPqfAKAhPQhaVcnICJtk74t4/edit?tab=t.0
# ======================================================================================================================
# ----------------------------------------------------------------------------------------------------------------------
# Shared Infrastructure
# This section refers to external resources independent of application code—such as databases, storage,
# and APIs—that are either currently utilized by multiple services or represent standard components capable of
# future shared access.
# ----------------------------------------------------------------------------------------------------------------------
# Primary Database [REQUIRED] (used by: Backend, DPO)
# Format: postgresql://user:password@host:port/dbname
GLCHAT_DB_URL="postgresql://postgres:mysecretpassword@127.0.0.1:5432/glchat"
POSTGRES_PASSWORD=mysecretpassword
## [OPTIONAL] adds the option search_path to the database URL
GLCHAT_DB_SCHEMA=
# Object Storage Config [REQUIRED] (used by: Backend, DPO, AIP Backend, AIP Runner)
OBJECT_STORAGE_TYPE=minio
OBJECT_STORAGE_USER=user
OBJECT_STORAGE_PASSWORD=password
OBJECT_STORAGE_URL="127.0.0.1:9000"
OBJECT_STORAGE_PRESIGNED_BASE_URL=
OBJECT_STORAGE_BUCKET=object-storage-bucket-name
OBJECT_STORAGE_SECURE_ENABLED=false
OBJECT_STORAGE_CERT_CHECK_ENABLED=false
OBJECT_STORAGE_CA_CERTS_PATH=
# Redis [REQUIRED] (used by: Backend, DPO)
REDIS_PASSWORD=password
REDIS_HOST="127.0.0.1"
REDIS_PORT=6379
REDIS_TLS_ENABLED=false
REDIS_DB=0
REDIS_SSL_CERT_REQS=none # none | optional | required
REDIS_SSL_CA_CERTS_PATH=
REDIS_SSL_CERTFILE_PATH=
REDIS_SSL_KEYFILE_PATH=
# Celery [OPTIONAL] will use Redis if not set
#CELERY_BROKER_URL=
#CELERY_RESULT_BACKEND=
# Vector Database Config (used by: Backend)
# [OPTIONAL] defaults to elasticsearch (used by: Backend, AIP Runner)
VECTOR_DB_TYPE=elasticsearch # elasticsearch | chroma | opensearch | none
## Elastic Config [REQUIRED-IF: VECTOR_DB_TYPE=elasticsearch]
ELASTICSEARCH_URL="http://elastic:changeme@127.0.0.1:9200"
ELASTICSEARCH_VERIFY_CERTS_ENABLED=false
ELASTICSEARCH_CA_CERTS_PATH=
ELASTICSEARCH_CLIENT_CERT_PATH=
ELASTICSEARCH_CLIENT_KEY_PATH=
## Chroma Config [REQUIRED-IF: VECTOR_DB_TYPE=chroma]
CHROMA_URL="http://127.0.0.1:8005"
CHROMA_PORT=8005
CHROMA_AUTH_TOKEN=chroma-auth-token
## OpenSearch Config [REQUIRED-IF: VECTOR_DB_TYPE=opensearch]
OPENSEARCH_URL="https://localhost:9222"
OPENSEARCH_USERNAME="admin"
OPENSEARCH_PASSWORD="myStrongPassword123@456"
OPENSEARCH_SERVICE=local # local | aoss | es
OPENSEARCH_ENGINE=faiss
OPENSEARCH_TIMEOUT=600
OPENSEARCH_USE_SSL_ENABLED=false
OPENSEARCH_VERIFY_CERTS_ENABLED=false
OPENSEARCH_CA_CERTS_PATH=
OPENSEARCH_CLIENT_CERT_PATH=
OPENSEARCH_CLIENT_KEY_PATH=
OPENSEARCH_KEY_PASSWORD=
OPENSEARCH_REGION_NAME=
# Encryption [REQUIRED]
ENCRYPTION_PASSWORD=mysecretkey12345
ENCRYPTION_SALT=1af4d2e5a3b5c2e1f5d4b2a3c4d5e6ff # Old encryption for migration
ENCRYPTION_KEY=1af4d2e5a3b5c2e1f5d4b2a3c4d5e6ff # Must be 32 bytes
ENCRYPTION_KEY_ID=k1
# Stack Auth [REQUIRED] (used by: Backend, Frontend)
STACK_AUTH_BASE_URL=http://localhost:8102 # must match with UI: NEXT_PUBLIC_STACK_AUTH_BASE_URL
STACK_AUTH_PROJECT_ID=11111111-1111-4337-9999-111111111111 # must match with UI: NEXT_PUBLIC_STACK_AUTH_PROJECT_ID
STACK_AUTH_PUBLISHABLE_CLIENT_KEY=pck_1234567890 # must match with UI: NEXT_PUBLIC_STACK_AUTH_CLIENT_KEY
STACK_AUTH_SERVER_KEY=sk_1234567890 # must match with UI: STACK_AUTH_SERVER_KEY
STACK_AUTH_DEFAULT_TEAM_NAME="Team Name"
STACK_AUTH_ADMIN_EMAIL=admin@domain.com
STACK_AUTH_ADMIN_PASSWORD=admin@123
## Internal Keys
STACK_AUTH_INTERNAL_SECRET_SERVER_KEY=ski_1234567890
STACK_AUTH_INTERNAL_PUBLISHABLE_CLIENT_KEY=pcki_1234567890
STACK_AUTH_INTERNAL_SUPER_SECRET_ADMIN_KEY=saki_1234567890
STACK_AUTH_SUPER_SECRET_ADMIN_KEY=sak_1234567890
## Configuration
STACK_AUTH_DEFAULT_PERMISSION_ID=_end_user
STACK_AUTH_HTTP_CLIENT_TIMEOUT_SECONDS=30
STACK_AUTH_TRUSTED_DOMAINS="https://domain.com" # Set with the URI that will be redirected to after auth
## Stack Auth Database
STACK_AUTH_DB_URL="postgresql://postgres:mysecretpassword@127.0.0.1:5432/stackframe"
STACK_AUTH_DB_SCHEMA=
## Migration & Sync
STACK_AUTH_MIGRATION_DEFAULT_EMAIL_DOMAIN="domain"
STACK_AUTH_MIGRATE_USERS_ENABLED=true
STACK_AUTH_SYNC_CONFIGURATION_ENABLED=true
## OAuth Providers
STACK_AUTH_DEFAULT_OAUTH_PROVIDERS=google
STACK_AUTH_CONFIGURE_OAUTH_PROVIDERS_ENABLED=true # Will replace the oauth provider in dashboard with the configuration from Backend
## [OPTIONAL] Providers substituting STACK_AUTH_*_CLIENT_ID and STACK_AUTH_*_CLIENT_SECRET
#STACK_AUTH_GOOGLE_CLIENT_ID=1234
#STACK_AUTH_GOOGLE_CLIENT_SECRET=54211
# Model Providers (LLMs) [RECOMMENDED] (used by: Backend, DPO, AIP Backend, AIP Runner - usage depends on each service)
ANTHROPIC_API_KEY=your-anthropic-api-key
DEEPSEEK_API_KEY=your-deepseek-api-key
GOOGLE_GENERATIVE_AI_API_KEY=your-google-api-key
OPENAI_API_KEY=your-openai-api-key
TEI_API_KEY=tei-api-key
TGI_API_KEY=tgi-api-key
VLLM_API_KEY=vllm-api-key
VOYAGE_API_KEY=voyage-api-key
CUSTOM_API_KEY=custom-api-key
## Groq
GROQ_API_KEY=gsk_your_groq_api_key
GROQ_BASE_URL="https://api.groq.com/openai/v1"
## DeepInfra
DEEPINFRA_API_KEY=your-deepinfra-api-key
DEEPINFRA_BASE_URL="https://api.deepinfra.com/v1/openai"
## Together
TOGETHER_API_KEY=tgp_v1_your_together_api_key
TOGETHER_BASE_URL="https://api.together.xyz/v1"
## Azure OpenAI
AZURE_OPENAI_API_KEY="your-azure-openai-api-key"
AZURE_OPENAI_API_ENDPOINT="your-azure-openai-api-endpoint"
AZURE_OPENAI_DEPLOYMENT_NAME_GPT_4O="your-azure-openai-deployment-name-for-4o"
AZURE_OPENAI_DEPLOYMENT_NAME_GPT_4O_MINI="your-azure-openai-deployment-name-for-4o-mini"
AZURE_OPENAI_DEPLOYMENT_NAME_GPT_4_1_NANO="your-azure-openai-deployment-name-for-gpt-4.1-nano"
AZURE_OPENAI_DEPLOYMENT_NAME_TEXT_EMBEDDING_3_SMALL="your-azure-openai-deployment-name-for-text-embedding-3-small"
AZURE_OPENAI_API_VERSION="your-azure-openai-api-version"
## Bedrock
BEDROCK_ACCESS_KEY_ID=your-bedrock-access-key-id
BEDROCK_SECRET_ACCESS_KEY=your-bedrock-secret-access-key
## SLM Router
SLM_ROUTER_BASE_URL="https://url.xyz/v1"
SLM_ROUTER_API_KEY=your-slm-router-api-key
## Google Vertex AI, defaults to vertexai_credentials.json
GOOGLE_VERTEX_AI_CREDENTIAL_PATH=path-to-google-vertex-ai-credential.json
# Frontend URL [RECOMMENDED] [REQUIRED-IF: TASK_SCHEDULER_ENABLED=true] (used by: Backend, Frontend)
FRONTEND_URL="http://localhost:3000"
# DocProc/DPO URL [OPTIONAL] (used by: Backend, Frontend) for chatbot with DocProc enabled
DPO_URL="http://127.0.0.1:8001"
# Smart Search API [REQUIRED-IF: BACKEND_FEATURE_SMART_SEARCH_ENABLED=true] (used by: Backend)
SMART_SEARCH_API_URL="https://ss-domain.com"
SMART_SEARCH_API_USER=gloria
SMART_SEARCH_API_SECRET=your-smartsearch-api-secret
# NER API Config [REQUIRED-IF: FEATURE_ANONYMIZE_ENABLED=true] (used by: Backend, DPO, Frontend)
NER_API_URL="https://ner-domain.com"
NER_API_KEY="change-with-a-real-ner-api-key"
# AIP [OPTIONAL] (used by: Backend, AIP Runner) required only when using AIP agents
AIP_BASE_URL=
AIP_API_KEY=
# GL Messaging API [OPTIONAL] (used by: Backend)
GL_MESSAGING_API_URL="https://domain.com"
GL_MESSAGING_API_KEY=
# Mem0 Service [OPTIONAL] (used by: Backend, AIP Runner)
MEM0_API_KEY=m0-
## Self-hosted Mem0 [OPTIONAL]
#MEM0_HOST=
# GraphRAG Neo4j Config [OPTIONAL] (used by: Backend, DPO) for graph RAG pipeline
NEO4J_URL=
NEO4J_USERNAME=
NEO4J_PASSWORD=
# Parallel AI Deep Research [OPTIONAL] (used by: Backend)
PARALLEL_AI_BASE_URL="https://api.parallel.ai"
PARALLEL_AI_API_KEY=dummy
PARALLEL_AI_PROCESSOR=ultra8x # lite | base | core | pro | ultra | ultra2x | ultra4x | ultra8x
#PARALLEL_AI_VERSION=events-sse-2025-07-24
# Environment [OPTIONAL] (used by: Backend, DPO)
ENVIRONMENT=development
# Sentry [OPTIONAL] (used by: Backend, AIP Backend, Frontend) disabled if SENTRY_DSN is empty
SENTRY_DSN=
## [REQUIRED-IF: SENTRY_DSN or OTEL_LANGFUSE_EXPORTER_OTLP_ENDPOINT is not empty]
BACKEND_SENTRY_PROJECT=sentry-project-name
BUILD_NUMBER=build-number
VERSION_NUMBER=version-number
# Langfuse Telemetry [OPTIONAL] (used by: Backend) disabled if OTEL_LANGFUSE_EXPORTER_OTLP_ENDPOINT is empty
# Independent of SENTRY_DSN
OTEL_LANGFUSE_EXPORTER_OTLP_ENDPOINT=
OTEL_LANGFUSE_EXPORTER_OTLP_HEADERS_AUTHORIZATION=
# A2A Agents [OPTIONAL] (used by: Backend)
A2A_EMAIL_AGENT_URL="http://127.0.0.1:5001"
A2A_DEEP_RESEARCH_AGENT_URL="http://127.0.0.1:5003"
# Search
## [OPTIONAL] (used by: Backend, AIP Runner) for pipeline with serper web retriever
SERPER_API_KEY=serper-api-key
# LLM Labs [OPTIONAL] (used by: Backend) Config for Knowledge Bases that are uploaded via LLM Labs
LLM_LABS_BASE_URL="https://llm-domain.com"
LLM_LABS_GET_FILE_PATH="/api/path"
KNOWLEDGE_BASE_LLM_LABS_BASE_URL="https://kb-domain.com"
## [OPTIONAL] Config for External Knowledge Bases integration
LLM_LABS_EXTENSIONS_WHITELIST=pdf,txt,urls,doc,docx,md,csv,xlsx,pptx,html,mp4,png,jpg,jpeg,gif,webp
LLM_LABS_GRAPHQL_URL=https://domain.com/graphql
LLM_LABS_TOKEN_URL=https://domain.com/api/oauth/token
LLM_LABS_UPLOAD_URL=https://upload.domain.com/api
# Bosa Connector [OPTIONAL] (used by: Backend, AIP Backend, AIP Runner) set if need to use BOSA API
BOSA_API_BASE_URL=
BOSA_API_KEY=
# Retrieval Source SQL DB Feature [OPTIONAL]
FEATURE_RETRIEVAL_SOURCE_SQL_DB_ENABLED=false
# [REQUIRED-IF: FEATURE_RETRIEVAL_SOURCE_SQL_DB_ENABLED=true] (used by: Backend, DPO)
RETRIEVAL_SOURCE_SQL_DB_URL="postgresql://postgres:mysecretpassword@127.0.0.1:5432/glchat_retrieval_source"
# OTP Delivery Services [OPTIONAL] (used by: Backend)
## SMS OTP Delivery Services
VONAGE_API_KEY=
VONAGE_API_SECRET=
SMS_FROM_NUMBER=
## Whatsapp OTP Delivery Services
QISCUS_APP_ID=
QISCUS_SECRET_KEY=
QISCUS_WHATSAPP_CHANNEL_ID=
QISCUS_BASE_URL="https://omnichannel.qiscus.com"
## Email OTP [OPTIONAL]
EMAIL_OTP_SUBJECT="GLChat Verification Code: {code}"
#GMAIL_SENDER_MAIL_ADDRESS=
# LLM Base URL [OPTIONAL] (used by: Backend, DPO) only used in WPS, set in `config.env`
#LLM_BASE_URL=""
# =============================================================================
# Backend Service-Specific
# This section refers to configuration specific to the backend service itself.
# =============================================================================
# Backend URL [RECOMMENDED] (used by: Backend, DPO, Frontend) the url to access the backend service
# If using mobile login or knowledge base external integration
BACKEND_URL=http://localhost:8000
# HTTP Client Timeout [OPTIONAL] only used by GLMessagingClient for now
BACKEND_DEFAULT_HTTP_CLIENT_TIMEOUT_SECONDS=30 # 30 seconds default
# Development Mode [OPTIONAL]
BACKEND_DEVELOPMENT_MODE=true
# Internal Auth & Session [REQUIRED]
BACKEND_SESSION_SECRET_KEY="$$ample$$ecret"
BACKEND_JWT_SECRET_KEY=abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234
## [OPTIONAL]
BACKEND_JWT_ACCESS_TOKEN_EXPIRE_MINUTES=60
BACKEND_AUTO_CREATE_USER_ENABLED=true
BACKEND_LINK_USER_PROVIDER_ENABLED=true
# Feature Flags [OPTIONAL] set to true to enable the feature
BACKEND_FEATURE_AUTH_ENABLED=true
BACKEND_FEATURE_ADMIN_ENABLED=true
BACKEND_FEATURE_AUTOCOMPLETE_ENABLED=true
BACKEND_FEATURE_SHARED_CONVERSATION_ENABLED=true
BACKEND_FEATURE_DEFAULT_AGENT_ENABLED=true
BACKEND_FEATURE_VALIDATE_EMAIL_DOMAIN_ENABLED=true
# BVT Flags [OPTIONAL]
BACKEND_TERMINATE_ON_PIPELINE_ERROR_ENABLED=false
# Shared Feature Toggles (used by multiple services) [OPTIONAL] - Default: false
FEATURE_ANONYMIZE_ENABLED=false
# Backend Pipeline Feature Toggles [OPTIONAL] - Default: false
BACKEND_FEATURE_SMART_SEARCH_ENABLED=false
BACKEND_FEATURE_COMPREHENSIVE_DEEP_RESEARCH_ENABLED=false
BACKEND_FEATURE_ESSENTIALS_DEEP_RESEARCH_ENABLED=false
BACKEND_FEATURE_GEMINI_LIVE_ENABLED=false
BACKEND_FEATURE_MEMORY_ENABLED=false
# SQLAlchemy Query Logging [OPTIONAL]
BACKEND_SQLALCHEMY_LOG_ENABLED=true
BACKEND_SQLALCHEMY_LOG_LEVEL=INFO
BACKEND_SQLALCHEMY_QUERY_THRESHOLD_MS=200
# Application Log [OPTIONAL]
BACKEND_LOG_LEVEL=INFO
LOG_FORMAT=default
BACKEND_DEBUG_STATE_ENABLED=false
# Caching Configuration [OPTIONAL]
BACKEND_CACHE_INDEX_NAME=gllm-cache
BACKEND_CACHE_EMBEDDING_MODEL=openai/text-embedding-3-small
BACKEND_CACHE_SIMILARITY_THRESHOLD=0.99
BACKEND_CACHE_FUZZY_DISTANCE_THRESHOLD=2
BACKEND_CACHE_MESSAGE_PAIR_LIMIT=3
BACKEND_CACHE_EVICTION_INTERVAL_SECONDS=7200
BACKEND_CACHE_TTL_SECONDS=14400
# Rate Limiting [OPTIONAL]
BACKEND_RATE_LIMIT_REQUESTS_DEFAULT=5
BACKEND_RATE_LIMIT_TIME_DEFAULT_SECONDS=60
## Specific endpoints
BACKEND_RATE_LIMIT_REQUESTS_MESSAGE=60
BACKEND_RATE_LIMIT_REQUESTS_ENCRYPTION_JOB_STATUS=60
BACKEND_RATE_LIMIT_REQUESTS_ENCRYPTION_JOB=2
BACKEND_RATE_LIMIT_REQUESTS_LOGIN=10
BACKEND_RATE_LIMIT_REQUESTS_SHARE_CONVERSATION=10
BACKEND_RATE_LIMIT_REQUESTS_FEEDBACK=30
BACKEND_RATE_LIMIT_REQUESTS_PERSONALIZATION=30
BACKEND_RATE_LIMIT_REQUESTS_MIND_MAP=10
BACKEND_RATE_LIMIT_REQUESTS_CHATBOT=60
## Admin endpoints
BACKEND_RATE_LIMIT_REQUESTS_ADMIN_CHATBOT=5
BACKEND_RATE_LIMIT_REQUESTS_ADMIN_CHATBOT_LIST=60
BACKEND_RATE_LIMIT_REQUESTS_ADMIN_ORGANIZATION=120
BACKEND_RATE_LIMIT_REQUESTS_ADMIN_PRESET=5
BACKEND_RATE_LIMIT_REQUESTS_ADMIN_PROVIDER=5
BACKEND_RATE_LIMIT_REQUESTS_ADMIN_MODEL=5
BACKEND_RATE_LIMIT_REQUESTS_ADMIN_KNOWLEDGE_BASE=5
## Auth endpoints
BACKEND_RATE_LIMIT_REQUESTS_AUTH_CURRENT_USER=30
BACKEND_RATE_LIMIT_REQUESTS_AUTH_POST_AUTH_LOGIN=20
BACKEND_RATE_LIMIT_REQUESTS_VERIFICATION=5
## Mobile authentication
BACKEND_RATE_LIMIT_REQUESTS_MOBILE_LOGIN=10
BACKEND_RATE_LIMIT_REQUESTS_MOBILE_EXCHANGE=20
## Sharepoint
BACKEND_RATE_LIMIT_REQUESTS_SHAREPOINT_NOTIFICATION_WEBHOOK=60
# Webhook Expiration Days
BACKEND_WEBHOOK_EXPIRATION_DAYS=14
# Sync Drive Timeout Seconds
BACKEND_SYNC_DRIVE_TIMEOUT_SECONDS=900 # 15 minutes
# Mobile Auth related envs
BACKEND_ALLOWED_REDIRECT_URI_SCHEMES=http,https
BACKEND_STATE_EXPIRY_SECONDS=600 # 10 minutes default
BACKEND_OAUTH_TOKEN_EXCHANGE_TTL_SECONDS=60 # 1 minute default
# Scheduler Global Config [OPTIONAL]
BACKEND_SCHEDULER_ENABLED=true
BACKEND_SCHEDULER_TIMEZONE="Asia/Jakarta"
BACKEND_SCHEDULER_MAX_INSTANCES=1
BACKEND_SCHEDULER_EXECUTOR_MAX_WORKERS=5
BACKEND_SCHEDULER_MISFIRE_GRACE_TIME_SECONDS=60
## Distributed locking configuration
BACKEND_SCHEDULER_LOCK_TTL_SECONDS=300 # 5 minutes default
# Sync Scheduler [OPTIONAL] when false, no sync jobs will run including agent sync jobs
BACKEND_SYNC_SCHEDULER_ENABLED=true
# Task Scheduler [OPTIONAL]
BACKEND_TASK_SCHEDULER_ENABLED=false
BACKEND_TASK_SCHEDULER_COALESCE_ENABLED=false
BACKEND_TASK_SCHEDULER_MISFIRE_GRACE_TIME_SECONDS=none # set 'none' for None
BACKEND_TASK_TIMEOUT_SECONDS=300
# Agent Sync Job [OPTIONAL]
BACKEND_AGENT_SYNC_ENABLED=false
BACKEND_AGENT_SYNC_INTERVAL_SECONDS=30 # defaults to 10 seconds
BACKEND_AGENT_SYNC_JOB_TYPE=cron # interval | cron
#BACKEND_AGENT_SYNC_CRON_EXPRESSION="*/10 * 8-19 * * *" # refer to BACKEND_SCHEDULER_TIMEZONE for the timezone
# FAQ Scheduler [OPTIONAL]
BACKEND_FAQ_SCHEDULER_ENABLED=false # defaults to true
BACKEND_FAQ_SCHEDULER_COALESCE_ENABLED=false
BACKEND_FAQ_SCHEDULER_MISFIRE_GRACE_TIME_SECONDS=60
BACKEND_FAQ_SCHEDULER_INTERVAL_MINUTES=30
BACKEND_FAQ_SCHEDULER_START_HOUR=23 #11 PM
BACKEND_FAQ_SCHEDULER_END_HOUR=4 #4 AM
BACKEND_DEFAULT_MODEL_FAQ=gpt-5-mini
# FAQ Answer Generation [OPTIONAL]
BACKEND_FAQ_ANSWER_GENERATION_ENABLED=false # defaults to true
BACKEND_FAQ_ANSWER_BATCH_SIZE=10
BACKEND_FAQ_ANSWER_GENERATION_INTERVAL_MINUTES=10
BACKEND_FAQ_ANSWER_MAX_RETRIES=3
# Admin Config Feature Toggles [OPTIONAL]
# If enabled, loads config from DB instead of sheets
BACKEND_ADMIN_CONFIG_KNOWLEDGE_BASES_ENABLED=true # knowledge_base sheet
BACKEND_ADMIN_CONFIG_MODELS_ENABLED=true # model sheet
BACKEND_ADMIN_CONFIG_CHATBOTS_ENABLED=true # chatbot, catalog, preset-xxx, preset-dpo-xxx sheet
BACKEND_ADMIN_CONFIG_USER_CHATBOTS_ENABLED=true # user_chatbot sheet
BACKEND_ADMIN_CONFIG_VECTOR_STORES_ENABLED=true # vector_store sheet
# Database Pool Configuration [OPTIONAL]
BACKEND_DB_POOL_SIZE=50
BACKEND_DB_MAX_OVERFLOW=10 # Allow some overflow for peak loads
BACKEND_DB_POOL_TIMEOUT_SECONDS=30 # 30 second timeout for getting connections
BACKEND_DB_POOL_RECYCLE_SECONDS=3600 # Recycle connections after 1 hour
BACKEND_DB_POOL_PRE_PING_ENABLED=true # Validate connections before use
# Custom Services Configuration [OPTIONAL]
## Use absolute path for custom services folder, defaults to custom_services
BACKEND_CUSTOM_SERVICE_FOLDER=/glchat-be/glchat_be/resources/custom_services
## Specify which custom user service class to use when multiple implementations exist
## Example: CUSTOM_USER_SERVICE_CLASS=ProductionUserService
BACKEND_CUSTOM_USER_SERVICE_CLASS=
## Custom Tenant Service Configuration [OPTIONAL]
## Specify which custom tenant service class to use when multiple implementations exist
## Example: CUSTOM_TENANT_SERVICE_CLASS=ProductionTenantService
BACKEND_CUSTOM_TENANT_SERVICE_CLASS=
## Custom Text Analyzer Configuration [OPTIONAL]
## Specify which custom text analyzer class to use when multiple implementations exist
## Example: CUSTOM_TENANT_SERVICE_CLASS=CustomTextAnalyzer
BACKEND_CUSTOM_TEXT_ANALYZER_CLASS=
## Custom Rate Limit Service Configuration [OPTIONAL]
## Specify which custom rate limit service class to use when multiple implementations exist
## Example: CUSTOM_RATE_LIMIT_SERVICE_CLASS=ProductionRateLimitService
BACKEND_CUSTOM_RATE_LIMIT_SERVICE_CLASS=
## Custom Post Login HandlerConfiguration [OPTIONAL]
## Specify which custom post login handler class to use when multiple implementations exist
## Example: CUSTOM_POST_LOGIN_HANDLER_CLASS=CustomPostLoginHandler
BACKEND_CUSTOM_POST_LOGIN_HANDLER_CLASS=
# BVT Flags [OPTIONAL]
BACKEND_TERMINATE_ON_PIPELINE_ERROR_ENABLED=false
# Deep Research Pipeline Handler [OPTIONAL]
# Controls deep research routing:
# Unset: uses default "deep-research-rag" pipeline
# Empty string "": bypasses pipeline, uses agent
# Any value: uses specified pipeline
BACKEND_ESSENTIALS_DEEP_RESEARCH_PIPELINE_HANDLER=deep-research-rag
# Gemini Live Pipeline Handler [OPTIONAL]
BACKEND_GEMINI_LIVE_PIPELINE_HANDLER=gemini-live
# Gemini Live [OPTIONAL]
# https://ai.google.dev/gemini-api/docs/speech-generation#voices
#BACKEND_GEMINI_LIVE_VOICE_NAME=Kore # Zephyr, Kore. Note: not all voices are supported.
# https://ai.google.dev/gemini-api/docs/live-guide#supported-languages
#BACKEND_GEMINI_LIVE_LANGUAGE_CODE=id-ID
#BACKEND_GEMINI_LIVE_TOOL_CALL_TIMEOUT=1800
#BACKEND_GEMINI_LIVE_RECEIVE_TIMEOUT=5
# Organization Branding [OPTIONAL]
#BACKEND_LOGO_ICON_EXTENSIONS_WHITELIST=".jpg,.jpeg,.png,.svg,.ico,.gif,.webp"
#BACKEND_DEFAULT_LIGHT_LOGO_URL="/images/glchat-beta-light.svg"
#BACKEND_DEFAULT_DARK_LOGO_URL="/images/glchat-beta-dark.svg"
#BACKEND_DEFAULT_LIGHT_ICON_URL="/favicon.ico"
#BACKEND_DEFAULT_DARK_ICON_URL="/favicon.ico"
#BACKEND_DEFAULT_USER_DOMAINS="gdplabs.id"
#BACKEND_MAX_LOGO_FILE_SIZE_BYTES=5242880 # 5 MB default
#BACKEND_MAX_ICON_FILE_SIZE_BYTES=1048576 # 1 MB default
# Internal API Keys [OPTIONAL] defaults to random uuid
BACKEND_SDK_SERVICE_API_KEY=your-sdk-service-api-key
BACKEND_WHATSAPP_SERVICE_API_KEY=your-whatsapp-service-api-key
BACKEND_PUBLIC_SERVICE_API_KEY=your-public-service-api-key
BACKEND_MOBILE_PUBLIC_API_KEY=your-mobile-public-api-key
# Seed ENV Config [OPTIONAL] if unset uses the default list
BACKEND_ENV_VARS_SEEDED="ANTHROPIC_API_KEY,AZURE_OPENAI_API_KEY,AZURE_OPENAI_API_VERSION,AZURE_OPENAI_API_ENDPOINT,DEEPSEEK_API_KEY,GOOGLE_VERTEX_AI_CREDENTIAL_PATH,GROQ_API_KEY,OPENAI_API_KEY,TOGETHER_API_KEY,DEEPINFRA_API_KEY,CUSTOM_API_KEY,TGI_API_KEY,TEI_API_KEY,VLLM_API_KEY,BEDROCK_ACCESS_KEY_ID,BEDROCK_SECRET_ACCESS_KEY"
# LLM & AI Configuration [OPTIONAL]
BACKEND_CONVERSATION_TOPIC_MODEL="openai/gpt-4o-mini"
BACKEND_SEMANTIC_ROUTER_SAMPLE_PATH="glchat_be/resources/llm-router-samples"
#BACKEND_SEMANTIC_ROUTER_MODEL=text-embedding-3-small
BACKEND_MAX_GENERATE_TITLE_CONTEXT_LENGTH=200000 # Title generation
# Guest mode configuration [OPTIONAL]
BACKEND_GUEST_MODE_CHATBOT_IDS=chatbot_id1,chatbot_id2
# LM Invoker [OPTIONAL]
#BACKEND_LM_INVOKER_TIMEOUT_SECONDS=300 # 5 minutes default
#BACKEND_LM_INVOKER_MAX_RETRIES=2
# Google Sheet [STALE] [OPTIONAL] used by knowledge downloader to download knowledge from Google Sheet
BACKEND_CONFIG_SHEET_ID=1PURVu35B3mrCI1-Qlp12iY47pqLZlYeE8STz1laTlBs
# Google Service Account Credentials [OPTIONAL] Shared with DPO Service
#SERVICE_ACCOUNT_PRIVATE_KEY=
#SERVICE_ACCOUNT_CLIENT_EMAIL=
# Google OAuth [OPTIONAL]
# To disable/bypass Google OAuth: leave the lines below commented out.
# To enable Google OAuth: uncomment each line and replace placeholders with real credentials.
#BACKEND_GOOGLE_OAUTH_CLIENT_ID="your-google-oauth-client-id"
#BACKEND_GOOGLE_OAUTH_CLIENT_SECRET="your-google-oauth-client-secret"
#BACKEND_GOOGLE_OAUTH_REDIRECT_URI="your-google-oauth-redirect-uri"
#BACKEND_GOOGLE_OAUTH_TOKEN_DOCS="your-google-oauth-token-docs"
#BACKEND_GOOGLE_OAUTH_TOKEN_DRIVE="your-google-oauth-token-drive"
#BACKEND_GOOGLE_OAUTH_TOKEN_SHEETS="your-google-oauth-token-sheets"
#BACKEND_GOOGLE_OAUTH_TOKEN_GMAIL="your-google-oauth-token-gmail"
#BACKEND_GOOGLE_OAUTH_TOKEN="your-google-oauth-token-fallback"
# SQLite [OPTIONAL] for Investment Analysis Agent demo
BACKEND_SQLITE_GDRIVE_FILE_ID=
BACKEND_SQLITE_DB_PATH="data/database.sqlite"
# =============================================================================
# Other Configurations
# This section refers to other configurations: migrations, testing.
# =============================================================================
# URLs For Agent Integration Test [STALE] [TESTING]
BACKEND_TEST_REQUEST_URL_AGENT="http://localhost:8000/agents"
BACKEND_TEST_REQUEST_URL_CHAT="http://localhost:8000/chat"
BACKEND_TEST_REQUEST_URL_CONVERSATION="http://localhost:8000/conversations"
# Migrations [MIGRATION]
## post init remove pipelines data
## comma separated list of pipeline names to be removed when initializing database
#BACKEND_POST_INIT_REMOVE_PIPELINES=
#BACKEND_POST_INIT_REMOVE_DPO_PIPELINES=
## post init remove providers data
## comma separated list of provider names to be removed when initializing database
## Only providers not used by any models will be removed
#BACKEND_POST_INIT_REMOVE_PROVIDERS=anthropic,azure-openai,deepseek,groq,together-ai,deepinfra,custom,routable,tgi,tei,vllm
# Stress Test Mode Related Configs [OPTIONAL] [TESTING]
BACKEND_STRESS_TEST_MODE=false
BACKEND_SENTRY_IMPORTANT_SAMPLING_RATE=1.0
Last updated