A modular, local AI assistant system designed for performance and flexibility.
- ✅ Modular Architecture: Backend (Node.js) and Voice Server (Python) separated for stability.
- ✅ Local LLM Support: Works seamlessly with Ollama, llama.cpp, and other local inference servers.
- ✅ Real-time Audio: Low-latency Text-to-Speech (TTS) using EdgeTTS with sentence-level streaming.
- ✅ Synchronized Animation: Canvas-based bubble interface that reacts to AI state and speech.
- ✅ Unrestricted File Access: AI can read/write files anywhere in the project (Sandbox removed).
- ✅ Conversation Memory: Persistent JSON-based memory storage.
- ✅ No Frontend Frameworks: Pure HTML/CSS/JS for maximum performance and easy modification.
arch-eleven/
├── backend/ # Main Node.js Server
│ ├── server.js # Express + WebSocket Server
│ ├── config/ # JSON Configurations
│ ├── state/ # State Machine (Idle/Thinking/Speaking)
│ ├── router/ # Intent Router
│ ├── llm/ # LLM Abstraction Layer
│ ├── voice/ # TTS Inteface
│ └── tools/ # File & Code Tools
│
├── voice/ # Python Voice Server
│ └── server.py # TTS Engine (EdgeTTS)
│
├── frontend/ # User Interface
│ ├── ui.js # WebSocket Client & Audio Queue
│ └── bubble.js # Canvas Animation
│
└── data/ # Persistent Storage
-
Install Backend Dependencies:
cd backend npm install -
Install Voice Server Dependencies:
cd .. pip install -r requirements.txt -
Configure LLM: Update
backend/config/models.jsonto point to your local LLM endpoint (default is Ollama athttp://localhost:11434).
You need to run two separate terminals:
Terminal 1: Voice Server
python voice/server.py
# Runs on http://localhost:8000Terminal 2: Backend & UI
cd backend
npm start
# Runs on http://localhost:3113Open your browser to http://localhost:3113.
Edit backend/config/voices.json to change:
- Voice Persona: Select different EdgeTTS voices (e.g.,
en-US-AriaNeural,en-GB-SoniaNeural). - Speed/Pitch: Adjust audio characteristics.
Common high-quality voices:
en-US-AriaNeural(Default, Female)en-US-GuyNeural(Male)en-GB-SoniaNeural(British Female)en-AU-NatashaNeural(Australian Female)
- Check EdgeTTS: If logs show
403 Forbidden, update the library:pip install -U edge-tts
- Browser Autoplay: Click anywhere on the page to ensure the browser allows audio playback.
- Single Instance: Ensure you don't have multiple backend processes running on port 3113.
- Ensure Ollama/llama.cpp is running.
- Verify the endpoint URL in
backend/config/models.json. - Check if the model name in config matches your installed model (e.g.,
phi3:mini).
MIT License. Free to use and modify.