👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code <noreply@letta.com>
45 lines
1.7 KiB
Markdown
45 lines
1.7 KiB
Markdown
# inferon
|
|
|
|
Voice interface daemon for [Letta Code](https://letta.com) agents. Lives in your system tray; click to talk, click to send — your speech is transcribed, sent to an agent, and the reply is spoken back.
|
|
|
|
**name**: **infer**ence + in**fer**nal + **infer**on (a particle), with symbolic inference planned for later.
|
|
|
|
## Pipeline
|
|
|
|
```
|
|
tray click → pw-record (16kHz mono WAV)
|
|
→ whisper.cpp server (spawned & owned by inferon, :50153)
|
|
→ letta CLI (agent conversation, multi-turn)
|
|
→ MeloTTS (melo_server.py subprocess, British English voice)
|
|
→ pw-play
|
|
```
|
|
|
|
All backends are subprocesses owned by inferon: they die when it dies (tray quit, SIGINT, SIGTERM — signal handlers included).
|
|
|
|
## Requirements
|
|
|
|
- Zig 0.16
|
|
- Qt 6 (qt6-base) + GCC toolchain
|
|
- PipeWire (`pw-record`, `pw-play`)
|
|
- [whisper.cpp](https://github.com/ggml-org/whisper.cpp) built with `whisper-server` (defaults expect `~/Projects/whisper.cpp`, large-v3-turbo q5_0)
|
|
- `letta` CLI on PATH, logged in
|
|
- Python 3.11 (via [uv](https://docs.astral.sh/uv/)) for MeloTTS
|
|
|
|
## Setup
|
|
|
|
```bash
|
|
./setup.sh # clones MeloTTS, builds venv, downloads checkpoint
|
|
zig build
|
|
zig-out/bin/inferon
|
|
```
|
|
|
|
Paths (whisper binary/model, MeloTTS root, agent ID) are constants at the top of `src/whisper.zig`, `src/melo.zig`, `scripts/melo_server.py`, and `src/main.zig`.
|
|
|
|
## Usage
|
|
|
|
- **Left-click**: start / stop recording. After you stop, the pipeline runs: transcribe → agent → spoken reply → idle.
|
|
- **Right-click → End conversation / Quit**: menu.
|
|
- Tray dot color = state: grey idle · red recording · orange transcribing · blue thinking · green speaking · magenta backend error.
|
|
|
|
Temp audio lives in `/tmp/inferon/` and is cleaned up as it's consumed (logs stay).
|