# specify the ASR、LLM and TTS server to use # options: test, openai, gemini, tencent, volcengine, whisper, whisper-http, vosk, llm8850whisper, faster-whisper, hailowhisper, picovoice, aws ASR_SERVER=test # options: test, openai, gemini, grok, anthropic, minimax, kimi, qwen, volcengine, ollama, llm8850, whisplay-im, image-tool-direct, perplexity, openrouter, aws LLM_SERVER=test # options: test, openai, gemini, tencent, volcengine, piper, piper-http, espeak-ng, llm8850melotts, supertonic, picovoice, aws TTS_SERVER=test ## Wake word # enable wake word detection. This feature depends on the openwakeword, you need to install the openwakeword 0.6.0 or above and set up the wake word models correctly for it to work. # WAKE_WORD_ENABLED=true # if you have setup virtual environment for the wake word python script, you can specify the python binary path here, otherwise it will use "python3" by default # WAKE_WORD_PYTHON_PATH=/home/pi/.pyenv/versions/python311/bin/python # Wake word names (comma-separated) or custom model paths (comma-separated) # WAKE_WORDS=hey_jarvis # WAKE_WORD_MODEL_PATHS=/path/to/custom.tflite # Detection threshold and cooldown (seconds) # WAKE_WORD_THRESHOLD=0.5 # WAKE_WORD_COOLDOWN_SEC=1.5 # Auto listening limits (seconds) # WAKE_WORD_IDLE_TIMEOUT_SEC=60 # WAKE_WORD_RECORD_MAX_SEC=60 # End conversation keywords (comma-separated, case-insensitive) # WAKE_WORD_END_KEYWORDS=byebye,goodbye,stop # specify the image generation server to use, the generated images will be saved in the data/images folder # options: openai, gemini, volcengine, llm8850lcm, aws IMAGE_GENERATION_SERVER=openai # specify the vision model for image understanding tasks # options: openai, gemini, volcengine, ollama, aws # VISION_SERVER=ollama ## Pi Camera # if you want to enable the Pi Camera for image capture (double click the button in idle status to enter) uncomment the following line: # ENABLE_CAMERA=true # if your chat model supports image input and you want to use the captured image in chat, uncomment the following line. # USE_CAPTURED_IMAGE_IN_CHAT=true ## RAG Settings # Enable RAG (Retrieval-Augmented Generation) by setting the following variable to true # ENABLE_RAG=true # specify the embedding server and vector database server to use for RAG, default embedding server is ollama # options for EMBEDDING_SERVER: ollama, aws # EMBEDDING_SERVER=ollama # specify the vector database server to use for RAG, default vector database server is qdrant # options for VECTOR_DB_SERVER: qdrant, aws # VECTOR_DB_SERVER=qdrant # knowledge score threshold for RAG, default is 0.65, score range is 0.0 - 1.0, under this threshold will be considered as no relevant knowledge found # RAG_KNOWLEDGE_SCORE_THRESHOLD=0.65 ### WARNING: enabling knowledge summary will significantly increase the time and cost of knowledge base creation, please use it with caution. # enable knowledge summary generation when creating knowledge base, default is false. If it is enabled, each knowledge chunk will be summarized using LLM_SERVER before being stored in the vector database. # supported LLM servers for knowledge summary: ollama, openai, gemini, grok, anthropic, minimax, kimi, qwen, volcengine, aws # ENABLE_KNOWLEDGE_SUMMARY=false # specify the prompt prefix for knowledge summary generation # RAG_KNOWLEDGE_SUMMARY_PROMPT_PREFIX="Please provide a concise summary for the following text in **30 words** or less:" ## RAG Providers & Storage # Ollama embedding server settings for RAG. If embedding endpoint is not set, it will use OLLAMA_ENDPOINT by default. # OLLAMA_EMBEDDING_ENDPOINT=http://localhost:11434 # specify the embedding model for ollama embedding server, default is nomic-embed-text # OLLAMA_EMBEDDING_MODEL=nomic-embed-text # if you are using Qdrant as the vector database server for RAG, please set the following environment variables, the default host is http://localhost:6333 # QDRANT_HOST=http://localhost:6333 ## Conversation & Runtime # specify the chat history reset time in seconds, default is 5 minutes (300 seconds) # CHAT_HISTORY_RESET_TIME=300 # if you want to clean the data folder on each start, set the following environment variable to true # CLEAN_DATA_FOLDER_ON_START=true # enable or disable thinking of LLM # if you are using ollama as LLM server, please confirm that the model supports thinking before enabling this option # otherwise the ollama will return a 400 error ENABLE_THINKING=true ## Tencent Cloud ASR and TTS # if you are using tencent cloud as ASR or TTS server, please set the following environment variables TENCENT_SECRET_ID=YourSecretId TENCENT_SECRET_KEY=YourSecretKey # endpoint is optional, default is asr.tencentcloudapi.com for ASR and tts.tencentcloudapi.com for TTS # TENCENT_ASR_ENDPOINT=asr.tencentcloudapi.com # TENCENT_TTS_ENDPOINT=tts.tencentcloudapi.com ## ByteDance VolcEngine ASR and TTS # if you are using volcengine as ASR or TTS server, please set the following environment variables VOLCENGINE_APP_ID=volcengine_app_id VOLCENGINE_ACCESS_TOKEN=volcengine_access_token # You can choose different voice types and LLM models, please refer to the official documentation for more details: # https://www.volcengine.com/docs/6561/1257544 # VOLCENGINE_VOICE_TYPE=zh_female_wanwanxiaohe_moon_bigtts ## ByteDance Doubao LLM # if you are using volcengine as LLM server, please set the following environment variables VOLCENGINE_DOUBAO_ACCESS_TOKEN=volcengine_doubao_access_token # the default model is doubao-1-5-lite-16k-250115, you can also choose other models # VOLCENGINE_DOUBAO_LLM_MODEL=doubao-1-5-lite-32k-250115 # for image generation, the default model is doubao-seedream-3-0-t2i-250415, you can also choose other models. If you need image input support, please choose 'doubao-seededit-3-0-i2i-250628' # VOLCENGINE_DOUBAO_IMAGE_MODEL=doubao-seedream-3-0-t2i-250415 # for vision tasks, the default model is doubao-seed-1-6-flash-250828, you can also choose other models # VOLCENGINE_DOUBAO_VISION_MODEL=doubao-seed-1-6-flash-250828 ## Google Gemini # if you are using google gemini as ASR / LLM / TTS / IMAGE_GENERATION server, please set the following environment variables # Google Cloud has 300$ free credit for new users, you can use it to try the gemini api # get your API key from https://console.cloud.google.com/apis/credentials, and make sure to enable the Generative Language API for your project # also ensure the API key has the permission to access the Generative Language API GEMINI_API_KEY=your_api_key # the default model is gemini-2.5-flash (for ASR and LLM), you can also choose other models # GEMINI_MODEL=gemini-2.5-flash # for TTS, the default voice is "gemini-2.5-pro-preview-tts", you can also choose other voices, please refer to: https://ai.google.dev/gemini-api/docs/speech-generation # GEMINI_TTS_MODEL=gemini-2.5-flash-preview-tts # the default speaker is "Callirrhoe", you can also choose other speakers, please refer to:https://ai.google.dev/gemini-api/docs/speech-generation#voices # GEMINI_TTS_SPEAKER=Callirrhoe # the default language code is "en-US", you can also choose other language codes, please refer to https://ai.google.dev/gemini-api/docs/speech-generation#languages # GEMINI_TTS_LANGUAGE_CODE=en-US # for vision tasks, the default model is "gemini-2.5-flash", you can also choose other models, please refer to: https://ai.google.dev/gemini-api/docs/vision. # GEMINI_VISION_MODEL=gemini-2.5-flash ## Gemini Image Generation # for image generation, the default model is "gemini-2.5-flash-image", you can also choose other models, please refer to: https://ai.google.dev/gemini-api/docs/image-generation GEMINI_IMAGE_MODEL=gemini-2.5-flash-image ## OpenAI # if you are using openai as ASR、TTS or LLM server, please set the following environment variables OPENAI_API_KEY=openai_api_key # the default model is gpt-4o, you can also choose other models # OPENAI_LLM_MODEL=gpt-4o # if you are using other openai compatible api server, please set the following environment variables # OPENAI_API_BASE_URL=https://api.openai.com/v2 # enable or disable tool calling for OpenAI-compatible servers, default is true. If the model does not support tools, please set it to false to avoid 400 error. # OPENAI_ENABLE_TOOLS=true # for llm8850 with axl-llm serving as OpenAI-compatible LLM server, use image file path for image input instead of base64 string to save memory, please uncomment the following line: # OPENAI_USE_IMAGE_PATH=true # enable or disable streaming response for OpenAI chat completion, default is true # OPENAI_USE_STREAM=true # max number of messages (excluding the first system prompt) to keep in chat history, 0 means no limit. useful for local models that cannot handle long conversation history. # OPENAI_MAX_MESSAGES_LENGTH=0 # if you are using openai as image generation server, please specify the generation model below. The default model is "dall-e-3". if you want to use "gpt-image-1", your organization need to be verified by openai first. # Document link: https://platform.openai.com/docs/guides/image-generation # if you need image input support, please choose models other than "dall-e-3" / "dall-e-2", such as "gpt-image-1", please refer to https://platform.openai.com/docs/guides/images-vision OPENAI_IMAGE_MODEL=dall-e-3 # if you are using openai as VISION_SERVER, specify the vision model for openai image understanding tasks, if not set, the default model will be the same as OPENAI_LLM_MODEL model # OPENAI_VISION_MODEL=gpt-4o # if you are using an OpenAI-compatible endpoint that supports different speech recognition models, you can specify it here. Defaults to whisper-1. # OPENAI_ASR_MODEL="whisper-1" ## OpenAI TTS # see: https://developers.openai.com/api/reference/resources/audio/subresources/speech/methods/create # specify the voice model for OpenAI TTS, options: tts-1, tts-1-hd, gpt-4o-mini-tts, or gpt-4o-mini-tts-2025-12-15 OPENAI_VOICE_MODEL=tts-1 # specify the voice type for OpenAI TTS, options: alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse, marin, cedar # Voice availability depends on the model. The tts-1 and tts-1-hd models support a smaller set: alloy, ash, coral, echo, fable, onyx, nova, sage, and shimmer. OPENAI_VOICE_TYPE=nova ## AWS (Amazon Web Services) # if you are using aws as ASR、TTS or LLM server, please set the following environment variables AWS_REGION=us-east-1 AWS_ACCESS_KEY_ID=your_aws_access_key AWS_SECRET_ACCESS_KEY=your_aws_secret_key # configurations for AWS Rekognition # AWS_FACES_COLLECTION_ID=your_collection_id # if set, enables the detectFaces tool using SearchUsersByImage # configurations for AWS Bedrock # AWS_BEDROCK_MODEL=us.anthropic.claude-sonnet-4-5-20250929-v1:0 # AWS_BEDROCK_VISION_MODEL=us.anthropic.claude-sonnet-4-5-20250929-v1:0 # AWS_BEDROCK_IMAGE_MODEL=amazon.titan-image-generator-v2:0 # AWS_BEDROCK_EMBEDDING_MODEL=amazon.titan-embed-text-v2:0 # configurations for AWS S3 Vector DB # AWS_S3_VECTOR_BUCKET=your_s3_bucket_name # configurations for AWS Polly # AWS_POLLY_VOICE=Joanna # default voice # AWS_POLLY_ENGINE=neural # generative, long-form, neural, standard # AWS_POLLY_LANGUAGE_CODE=en-US # configurations for AWS Transcribe # AWS_TRANSCRIBE_LANGUAGE=en-US # default ## Grok # if you are using grok as LLM server, please set the following environment variables GROK_API_KEY=your_grok_api_key # the default model is grok-4-latest # GROK_LLM_MODEL=grok-4-latest ## Anthropic # if you are using anthropic as LLM server (LLM_SERVER=anthropic), please set the following environment variables # Get your API key from https://console.anthropic.com/ ANTHROPIC_API_KEY=your_anthropic_api_key # the default model is claude-opus-4-5, you can also choose other models such as claude-sonnet-4-5, claude-haiku-3-5 # ANTHROPIC_LLM_MODEL=claude-opus-4-5 # the maximum number of output tokens, default is 8096 # ANTHROPIC_MAX_TOKENS=8096 # enable or disable tool/function calling, default is true # ANTHROPIC_ENABLE_TOOLS=true ## MiniMax # if you are using MiniMax as LLM server (LLM_SERVER=minimax), please set the following environment variables # Get your API key from https://platform.minimaxi.com/ MINIMAX_API_KEY=your_minimax_api_key # the default model is MiniMax-Text-01, you can also choose other models such as abab6.5s-chat # MINIMAX_LLM_MODEL=MiniMax-Text-01 # override the API endpoint if needed, default is https://api.minimax.chat/v1/chat/completions # MINIMAX_API_URL=https://api.minimax.chat/v1/chat/completions ## Kimi (Moonshot AI) # if you are using Kimi as LLM server (LLM_SERVER=kimi), please set the following environment variables # Get your API key from https://platform.moonshot.cn/ KIMI_API_KEY=your_kimi_api_key # the default model is moonshot-v1-8k, you can also choose moonshot-v1-32k, moonshot-v1-128k # KIMI_LLM_MODEL=moonshot-v1-8k # override the API endpoint if needed, default is https://api.moonshot.cn/v1/chat/completions # KIMI_API_URL=https://api.moonshot.cn/v1/chat/completions ## Alibaba Cloud Qwen # if you are using Qwen as LLM server (LLM_SERVER=qwen), please set the following environment variables # Get your API key from https://dashscope.console.aliyun.com/ QWEN_API_KEY=your_qwen_api_key # the default model is qwen-plus, you can also choose qwen-turbo, qwen-max, qwen-long, etc. # QWEN_LLM_MODEL=qwen-plus # override the API endpoint if needed, default is the DashScope OpenAI-compatible endpoint # QWEN_API_URL=https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions ## Ollama # if you are using ollama as LLM server, please set the following environment variables OLLAMA_ENDPOINT=http://localhost:11434 # the default model is deepseek-r1:1.5b, you can also choose other models, please refer to: https://ollama.com/library # OLLAMA_MODEL=deepseek-r1:1.5b # if you want to enable tools for ollama, uncomment the following line (make sure the model supports tools, otherwise it will return a 400 error): # OLLAMA_ENABLE_TOOLS=true # Maximum number of consecutive Ollama tool-calling rounds before forcing a final answer without tools. OLLAMA_MAX_TOOL_ROUNDS=4 # specify the maximum number of tokens to predict for ollama, default is unlimited # OLLAMA_PREDICT_NUM=128 # if the ollama server is running on the same device, you can choose to serve ollama automatically when starting the chatbot, uncomment the following line: # SERVE_OLLAMA=true # if you are using ollama as VISION_SERVER, specify the vision model for ollama image understanding tasks, default is qwen3-vl:2b # please refer to https://ollama.com/library for more details # OLLAMA_VISION_MODEL=qwen3-vl:2b ## Proxy Settings # proxy settings for all cloud api request, uncomment the following lines if you need to use a proxy to access the internet # usually you only need to set HTTPS_PROXY # HTTPS_PROXY=https://your_https_proxy # HTTP_PROXY=http://your_http_proxy # ALL_PROXY=socks5://your_socks_proxy # Keep local services off the proxy by default. This prevents local ASR/TTS, # Ollama, and daemon calls from being routed through HTTP_PROXY/HTTPS_PROXY. NO_PROXY=localhost,127.0.0.1,::1,0.0.0.0,/tmp/whisplay-daemon.sock ## VPN Status Icon # Select one VPN provider for the status bar icon. # options: auto, none, wireguard, tailscale # Leave VPN_PROVIDER unset, or set it to `auto`, to detect Tailscale first and then WireGuard. # Set VPN_PROVIDER=none to hide the VPN icon entirely. # VPN_PROVIDER=auto # When VPN_PROVIDER=wireguard, the status bar shows the VPN icon when the interface below is up. # Default interface is wg0. Change this if your WireGuard interface has a different name. # WIREGUARD_INTERFACE=wg0 # When VPN_PROVIDER=tailscale, detection uses `tailscale status --json` and the same VPN icon is shown when connected. # Set TAILSCALE_COMMAND if `tailscale` is not on PATH for the chatbot service. # TAILSCALE_COMMAND=/usr/bin/tailscale ## AI Behavior # you can set a custom system prompt for LLM, please uncomment the following line and set your own prompt # The app always appends a default speech-friendly instruction that discourages Markdown formats unsuitable for text-to-speech. # SYSTEM_PROMPT="You are a happy girl and also a helpful assistant. Answer the question quickly in less than 5 sentences, also with a sense of humor." ## Whisplay IM bridge (use OpenClaw as IM backend) # WHISPLAY_IM_BRIDGE_HOST=127.0.0.1 # WHISPLAY_IM_BRIDGE_PORT=18888 # WHISPLAY_IM_INBOX_PATH=/whisplay-im/inbox # WHISPLAY_IM_POLL_PATH=/whisplay-im/poll # WHISPLAY_IM_SEND_PATH=/whisplay-im/send # WHISPLAY_IM_TOKEN=define_by_yourself_and_configure_in_openclaw # WHISPLAY_IM_TIMEOUT_MS=30000 ## Piper TTS # if you are using piper as TTS server, please set the following environment variables # Piper is an open-source TTS engine that can run locally on your device # You can download Piper binaries for RPi from: https://github.com/OHF-Voice/piper1-gpl/blob/387ca06bfd0e7557c6d0d54ce34d36e7bb28389a/docs/CLI.md # Voice models can be found at: https://rhasspy.github.io/piper-samples/ PIPER_BINARY_PATH=/path/to/piper-binary PIPER_MODEL_PATH=/path/to/piper/voice/model.onnx ## espeak-ng TTS # if you are using espeak-ng as TTS server, please set the following environment variables # install espeak-ng: https://github.com/espeak-ng/espeak-ng # ESPEAK_NG_BINARY_PATH=espeak-ng # ESPEAK_NG_VOICE=en # ESPEAK_NG_SPEED=175 # ESPEAK_NG_PITCH=50 # ESPEAK_NG_AMPLITUDE=100 ## Piper HTTP TTS # if you are using piper-http as TTS server, the server will be hosted at localhost:8805 by default # installation command: `python3 -m pip install piper-tts[http] --break-system-packages` # PIPER_HTTP_HOST=localhost # PIPER_HTTP_PORT=8805 # specify the voice model to use, you should download it beforehand, use this command to download a model: `python3 -m piper.download_voices en_US-amy-medium` PIPER_HTTP_MODEL=/home/pi/piper/en_US-amy-medium # specify the speech speed, default is 1. The larger the value, the slower the speech. PIPER_HTTP_LENGTH_SCALE=1 ## Vosk ASR # if you are using vosk as ASR server, please set the following environment variables # Vosk is an open-source ASR engine that can run locally on your device # You can download Vosk binaries and models from: https://alphacephei.com/vosk/models # unzip the model to a folder and set the path below VOSK_MODEL_PATH=/path/to/vosk/model ## Whisper ASR & Whisper HTTP Server # Whisper is an open-source ASR engine that can run locally on your device, whisper-http is a lightweight HTTP server wrapper for whisper # https://github.com/openai/whisper # the default model size is tiny, you can also choose other model sizes: tiny, base, small, medium, large. The tiny model will take ~1GB of VRAM # the downloaded models will be stored in ~/.cache/whisper by default, if you want to use http server in offline mode, you can also specify a local model checkpoint path here to ensure the model is loaded from local disk directly. WHISPER_MODEL_SIZE_OR_PATH=/home/pi/.cache/whisper/tiny.pt # ***Decreptated*** variable, please use WHISPER_MODEL_SIZE_OR_PATH instead # WHISPER_MODEL_SIZE=tiny # the default language is English, if you leave it empty, whisper will try to detect the language automatically, but it will take more time. WHISPER_LANGUAGE=English # the default port for whisper-http server is host at localhost:8804, you can change it if you are running remote whisper server # WHISPER_PORT=8804 # WHISPER_HOST=localhost # the default request type is filePath, you can also choose "base64" to send audio data in base64 format, it should be set to "base64" if you are using remote whisper server # WHISPER_REQUEST_TYPE=filePath ## Faster Whisper ASR # By default, faster-whisper ASR server will be hosted at localhost:8803, change the following environment variables if you are running the server at somewhere else. # FASTER_WHISPER_REQUEST_TYPE should be set to "base64" if you are using remote faster-whisper server. FASTER_WHISPER_PORT=8803 FASTER_WHISPER_HOST=localhost # FASTER_WHISPER_REQUEST_TYPE=filePath # the default model size is tiny, you can also choose other model sizes: tiny, base, small, medium, large. (It will validate the model from huggingface if you just provide a size name) # or you can specify a local model directory path if you want it fully offline. # The path should contain the model files like: model.bin, config.json, etc. FASTER_WHISPER_MODEL_SIZE_OR_PATH=/path/to/your/faster-whisper-model-directory # the default language is English, if you leave it empty, faster-whisper will try to detect the language automatically, but it will take more time. # FASTER_WHISPER_LANGUAGE=en ## Supertonic TTS # Supertonic is an ultra-fast, lightweight, on-device TTS engine powered by ONNX Runtime # GitHub: https://github.com/supertone-inc/supertonic # Features: 167x faster than real-time, 66M parameters, multilingual support (en, ko, es, pt, fr) # Download models first: # git clone https://huggingface.co/Supertone/supertonic-2 assets # The assets folder should contain: # - assets/onnx/ (model files: dp.onnx, text_enc.onnx, vector_est.onnx, vocoder.onnx, config.json, unicode_lookup.json) # - assets/voice_styles/ (voice style files: M1.json - M5.json, F1.json - F5.json) # # Directory where Supertonic assets are stored (default: ./assets) # SUPERTONIC_ASSETS_DIR=./assets # Voice style to use: M1-M5 (male voices), F1-F5 (female voices), default is M1 # SUPERTONIC_VOICE_STYLE=M1 # Language code: en (English), ko (Korean), es (Spanish), pt (Portuguese), fr (French), default is en # SUPERTONIC_LANGUAGE=en # Number of denoising steps (higher = better quality but slower), default is 5 # SUPERTONIC_TOTAL_STEP=5 # Speech speed multiplier (higher = faster speech), default is 1.05 # SUPERTONIC_SPEED=1.05 # Silence duration between text chunks in seconds, default is 0.3 # SUPERTONIC_SILENCE_DURATION=0.3 ## Raspberry Pi AI Hat+ 2 (Hailo-10H) # if you are using Raspberry Pi AI Hat+ 2 as ASR or Vision server, you can specify the following environment variables # For more details about setting up these services, please refer to: # README-aihat2.md (or the project wiki) # # ASR — Hailo Whisper (NPU-accelerated Whisper running on Hailo-10H) # the default host/port is localhost:8807 # HAILO_WHISPER_HOST=localhost # HAILO_WHISPER_PORT=8807 # the default language is "en"; leave empty for auto-detect (slower) # HAILO_WHISPER_LANGUAGE=en # set to "filePath" only if the service runs on the same machine # HAILO_WHISPER_REQUEST_TYPE=base64 # # Vision — Hailo VLM (OpenAI-compatible vision API on Hailo-10H) # when VISION_SERVER=openai and OPENAI_API_BASE_URL points to this service, # the chatbot will use the Hailo VLM for image understanding # the default host/port is localhost:8808 # HAILO_VLM_HOST=localhost # HAILO_VLM_PORT=8808 ## LLM8850 # if you are using LLM8850 as ASR / LLM / TTS server, you can specify the following environment variables # for more details about these services, please refer to: # https://github.com/PiSugar/whisper.axcl # https://github.com/PiSugar/melotts.axcl # https://docs.m5stack.com/en/guide/ai_accelerator/llm-8850/m5_llm_8850_qwen3_1.7b LLM8850_LLM_HOST=http://localhost:8000 LLM8850_LLM_TEMPERATURE=0.7 LLM8850_WHISPER_HOST=http://localhost:8801 LLM8850_MELOTTS_HOST=http://localhost:8802 # for LLM8850 LCM image generation server (used when IMAGE_GENERATION_SERVER=llm8850lcm) LLM8850LCM_HOST=127.0.0.1 LLM8850LCM_PORT=8806 ## Web Search # Enable web search/page fetch tools. Defaults to true; set false to disable. # When enabled, LLM can use fetch_webpage and web_search. # WEB_SEARCH_ENABLED=true # Web/page tools use the global proxy settings: HTTPS_PROXY, HTTP_PROXY, or ALL_PROXY. # Timeout for each web/page tool HTTP request in milliseconds (default: 30000). # WEB_TOOL_TIMEOUT_MS=30000 # Legacy API-backed webSearch provider: tavily, serp, bing, google (default: tavily). # This legacy camelCase webSearch tool is only added when a provider key is configured # or WEB_SEARCH_LEGACY_ENABLED=true. # WEB_SEARCH_LEGACY_ENABLED=false # WEB_SEARCH_PROVIDER=tavily # Maximum number of search results to return (default: 5) # WEB_SEARCH_MAX_RESULTS=5 # Maximum readable webpage text characters returned by fetch_webpage (default: 6000) # WEB_PAGE_TEXT_MAX_CHARS=6000 # Maximum links returned by fetch_webpage (default: 30) # WEB_PAGE_LINK_MAX_RESULTS=30 # Include image search capability (default: false) # WEB_SEARCH_INCLUDE_IMAGES=false ## Tavily Search API # Recommended - optimized for AI applications) # Get your API key from https://tavily.com/ TAVILY_API_KEY=your_tavily_api_key ## SerpAPI (Google Search via SerpAPI) # Get your API key from https://serpapi.com/ SERP_API_KEY=your_serpapi_key ## Bing Search API # Get your API key from https://www.microsoft.com/en-us/bing/apis/bing-web-search-api BING_SEARCH_API_KEY=your_bing_api_key ## Google Custom Search API # Get your API key from https://developers.google.com/custom-search/v1/overview GOOGLE_SEARCH_API_KEY=your_google_api_key # Google Custom Search Engine ID (CX) # Get your CX from https://programmablesearchengine.google.com/ GOOGLE_SEARCH_CX=your_google_cx ## OpenRouter # if you are using OpenRouter as LLM server (LLM_SERVER=openrouter), please set the following environment variables # OpenRouter provides access to hundreds of AI models through a single API # Documentation: https://openrouter.ai/docs OPENROUTER_API_KEY=your_openrouter_api_key # The default model is openai/gpt-4o. Browse models at https://openrouter.ai/models # OPENROUTER_LLM_MODEL=openai/gpt-4o # Enable or disable tool/function calling, default is true. Set to false if the chosen model does not support tools. # OPENROUTER_ENABLE_TOOLS=true # Enable or disable streaming response, default is true # OPENROUTER_USE_STREAM=true # Max number of messages (excluding the first system prompt) to keep in chat history, 0 means no limit. # OPENROUTER_MAX_MESSAGES_LENGTH=0 ## Perplexity # if you are using Perplexity as LLM server, please set the following environment variables # Documentation: https://docs.perplexity.ai PERPLEXITY_API_KEY=your_perplexity_api_key # The default model is sonar. For web-search reasoning, try sonar-reasoning or sonar-pro. # PERPLEXITY_LLM_MODEL=sonar # Enable tool/function calling. Only supported on select models (e.g. sonar-pro). Default is false. # PERPLEXITY_ENABLE_TOOLS=false ## Picovoice (Leopard ASR + Orca TTS) # if you are using Picovoice as ASR (ASR_SERVER=picovoice) or TTS (TTS_SERVER=picovoice), please set the following variables # Get your free AccessKey at https://console.picovoice.ai/ PICOVOICE_ACCESS_KEY=your_picovoice_access_key # Optional: path to a custom Leopard model file (.pv). Leave unset to use the default en model. # PICOVOICE_LEOPARD_MODEL_PATH=/path/to/leopard_params.pv # Optional: path to a custom Orca model file (.pv). Leave unset to use the default en female model. # PICOVOICE_ORCA_MODEL_PATH=/path/to/orca_params.pv ## Default Emoji # The default emoji shown on the display (e.g. during listening). Must be a valid emoji, otherwise falls back to 😐. # DEFAULT_EMOJI=😐 ## Custom Font # Custom font for displaying text on screen # CUSTOM_FONT_PATH=/path/to/your/font.ttf ## Initial Volume Percent # Initial speaker volume when the chatbot starts, using the percentage shown in alsamixer. # Set INITIAL_VOLUME_PERCENT to 0-100. Leave it unset or set it to auto to use the default 80%. # INITIAL_VOLUME_PERCENT=auto # Deprecated: INITIAL_VOLUME_LEVEL is ignored. Use INITIAL_VOLUME_PERCENT instead. # INITIAL_VOLUME_LEVEL=114 ## Audio Playback # ALSA devices for recording/playback. Leave unset to auto-detect the Whisplay sound card. # Use "default" to route through the system ALSA default device/plug chain. # ALSA_INPUT_DEVICE=default # ALSA_OUTPUT_DEVICE=default ## Local Music Tool (LLM function calling) # Comma-separated local folders for music search. Absolute paths are recommended. # Example: MUSIC_LIBRARY_DIRS=/home/pi/Music,/mnt/usb/music # MUSIC_LIBRARY_DIRS= # Supported file extensions for local music search. # MUSIC_FILE_EXTENSIONS=mp3,wav,flac,m4a,aac,ogg # Fuzzy-match score threshold (0.0-1.0). Higher value means stricter matching. # MUSIC_FUZZY_MIN_SCORE=0.35 # Rescan interval for music library index in seconds. # MUSIC_RESCAN_SECONDS=60 ## Harness Command Tool (LLM function calling) # Enable a restricted command-line tool for local/edge models. Disabled by default. # Legacy HARDNESS_* variables are still accepted for compatibility; HARNESS_* takes precedence. # HARNESS_COMMAND_TOOL_ENABLED=false # Allow potentially dangerous shell commands. Keep this false unless you fully trust the model and deployment environment. # HARNESS_COMMAND_ALLOW_DANGEROUS=false # Maximum accepted command length in characters. # HARNESS_COMMAND_MAX_CHARS=3000 # Foreground wait in milliseconds. Commands still running after this return a job_id and continue in the background. # HARNESS_COMMAND_FOREGROUND_TIMEOUT_MS=10000 # Maximum number of command jobs running at the same time. # HARNESS_COMMAND_MAX_CONCURRENT=2 # Minimum interval in seconds between background command status snapshots. checkCommand waits until this window instead of returning early. # HARNESS_COMMAND_CHECK_AFTER_SECONDS=15 # Spill full command output to a temp file after this many characters. # HARNESS_COMMAND_SPILL_CHARS=4000 # Return at most this many tail characters to the model. # HARNESS_COMMAND_RETURN_CHARS=1200 # Directory for spilled command output files. # HARNESS_COMMAND_TEMP_DIR=/tmp/whisplay-harness # Enable skill discovery tools alongside runCommand. Uses ./skills by default. # HARNESS_SKILL_TOOL_ENABLED=true # Optional comma- or colon-separated skill roots. Each skill is a directory containing SKILL.md. # HARNESS_SKILL_DIRS=./skills # Return at most this many characters from a SKILL.md file. # HARNESS_SKILL_RETURN_CHARS=8000 ## Context Auto Compaction # Automatically compact conversation history when the active model's context window is close to full. Enabled by default. # CONTEXT_AUTO_COMPACT_ENABLED=true ## Web Display Settings # This is an optional web-based display stimulating the Whisplay HAT screen, LED and button. It's disabled by default. # WHISPLAY_WEB_ENABLED=true # WHISPLAY_WEB_PORT=17880 # WHISPLAY_WEB_HOST=0.0.0.0 ## Web Audio Settings (requires WHISPLAY_WEB_ENABLED=true) # When enabled, the browser microphone is used for recording instead of the device ALSA input, # and TTS audio is played back through the browser speaker instead of the ALSA output. # This is useful when running on a desktop or accessing the web display remotely. # Note: for ASR servers that require WAV/MP3 (e.g. vosk, local whisper), ffmpeg must be # available on the host to convert the browser's webm/opus recording automatically. # Most cloud ASR servers (openai, gemini, volcengine, etc.) accept webm directly. # WEB_AUDIO_ENABLED=true ## Web Camera Settings (requires WHISPLAY_WEB_ENABLED=true) # When enabled, the browser's camera is used for photo capture instead of the Pi camera module. # This is useful when running on a desktop/laptop or accessing the web display remotely. # WEB_CAMERA_ENABLED=true ## Local Memory # Lightweight local JSON memory. When enabled, the chatbot saves each conversation # session with a short title and summary, injects brief user preference/context # memory at the start of new conversations, and searches prior sessions when the # user refers to something discussed before. # MEMORY_ENABLED=true # Auto-save completed user/assistant exchanges (default: true when enabled) # MEMORY_AUTO_SAVE=true # Storage directory (default: data/memory) # MEMORY_DIR=./data/memory # Optional fixed user profile/preferences injected with local memories # MEMORY_PROFILE_TEXT= # Start a new memory session after this many idle seconds (default: CHAT_HISTORY_RESET_TIME or 300) # MEMORY_SESSION_IDLE_SECONDS=300 # Maximum stored sessions # MEMORY_MAX_SESSIONS=200 # Maximum exchanges retained per session # MEMORY_MAX_SESSION_EXCHANGES=20 # Maximum history search results injected or returned by searchLocalMemory # MEMORY_MAX_SEARCH_RESULTS=4 # Maximum short preference/context memories injected at conversation start # MEMORY_WAKEUP_MAX_ITEMS=5 # Prompt prefix used when summarizing a saved conversation for future recall # MEMORY_SUMMARY_PROMPT_PREFIX=Summarize the following user-assistant conversation into a concise memory for future recall. Preserve user preferences, facts, decisions, open tasks, and important context. Do not quote the transcript verbatim. Keep it under 80 words: ## MemPalace (Long-term AI Memory) # Optional external MemPalace integration. Local Memory above is lightweight and built in; # MemPalace remains available for users who want the external ChromaDB-backed memory palace. # Install: pip install mempalace # Init: mempalace init ~/path/to/project # Mine: mempalace mine ~/chats/ --mode convos # Docs: https://github.com/MemPalace/mempalace # MEMPALACE_ENABLED=true # Path to the palace data directory (default: ~/.mempalace/palace) # MEMPALACE_PALACE_PATH=~/.mempalace/palace # Python binary that has mempalace installed (default: python3) # MEMPALACE_PYTHON_PATH=python3 # Maximum search results returned per query (default: 5) # MEMPALACE_MAX_RESULTS=5 # Default wing for search/store when none is specified # MEMPALACE_DEFAULT_WING= # Auto-save every conversation exchange to long-term memory (default: true when enabled) # Set to false to only use manual mempalaceStore tool calls # MEMPALACE_AUTO_SAVE=true