Repository navigation
Releases: CHA0S-CORP/general-disarray
Release list
v1.0.3 — Real example knowledge doc
Patch release: ships a real example knowledge-base document so retrieval-augmented answers work out of the box.
Fix
- The bundled knowledge doc was a placeholder whose "this is a sample, replace me" boilerplate dominated RAG retrieval, so questions about its content (e.g. "which day is trash pickup?") surfaced the boilerplate instead of the answer. Replaced with clean, real household reference content (trash/recycling schedule, Wi-Fi, contacts, thermostat, mail). The example doc is now tracked in the repo (user-added documents stay ignored), so a fresh clone has a working, indexable knowledge base.
Testing
- Reindexed and verified live: "trash pickup" now returns Tuesday, and the end-to-end KNOWLEDGE call test passes. With this, the full e2e suite is green apart from the intentionally guarded/environment-gated tests.
See PR #5.
v1.0.2 — Reliable persona load/save
Patch release: makes saved personas actually load (Pig Latin was coming out as generic pirate speech), fixes silently-lost saves, and completes a full end-to-end call sweep.
Fixes
- Saved personas now load reliably. "Use the Pig Latin persona" was quietly falling back to a vague, model-invented description instead of the saved rules — because the set→load safety net bailed whenever the description happened to mention a second profile name (e.g. "…Pig Latin… with a cheerful tone"). It now picks the most specific match, so the real saved profile wins.
- Saving a style no longer silently fails. The model conflates "set" and "save" ("save a style named X, the style is Y" arrives as one
setcall); that was being hijacked and lost. It's now handled as save-and-apply.
Testing
- Full e2e sweep over real SIP calls: all voice-tool and persona tests pass (PERSONA set/save/load, weather, forecast, search, quakes, KP index, GPU, alerts, dice/coin/joke/trivia/story/drink, timer, transfer, hangup, memory remember/recall/forget, virtual numbers).
- E2E REST helpers now send the API auth token so those tests run against a hardened deployment.
Notes
- CONTAINER_CTL / TRIGGER_WORKFLOW e2e tests are guarded (need a throwaway target / receiver) and skip by default.
- Pig Latin output quality remains model-dependent; this release ensures the correct rules are loaded.
See PR #4.
v1.0.1 — Persona/context-bleed fixes + natural measurements
Patch release: fixes for persona/context bleed across calls, more natural spoken measurements, and e2e coverage for every voice tool.
Fixes
- Personas no longer bleed across calls. Caller memory was saving persona/speaking-style choices and one-off questions as durable facts, which then got injected into every future call and mixed together (e.g. a saved "Pig Latin" persona kept reappearing). Memory now records only durable facts about the caller and explicitly excludes persona/style choices and one-off content — including the per-call summary. Existing polluted memory was cleaned.
- "Use the X persona" now loads the saved profile instead of the model improvising its own version, so saved profiles' exact rules are actually used.
- The agent stops forgetting earlier turns in the same call. The in-call context window default is raised (
MAX_CONVERSATION_TURNS10 → 20); a deployment had it set to 1. - Recipes read naturally. Measurement abbreviations are spoken in full — "2 ounces" instead of "2 oz" (which TTS read as "oh zee").
Tests
- E2E coverage for every built-in voice tool (PERSONA, KP_INDEX, STORY, DRINK_RECIPE, CALLBACK, plus guarded CONTAINER_CTL / TRIGGER_WORKFLOW).
- Regression tests for the persona set→load redirect, the memory-exclusion prompt, spoken unit expansion, and the context-window default.
Also
- A ninth seed persona: Pig Latin.
979 unit + component tests pass. See PR #3 for details.
v1.0.0 — First stable release
First stable release of General Disarray — the self-hosted, voice-powered AI phone assistant. This release brings a smarter agentic conversation engine, a large expansion of voice tools, caller-settable agent personas, an n8n integration package, and a round of latency/barge-in reliability fixes found by testing on real calls.
Highlights
Smarter conversations
- LangGraph agentic engine (
LLM_BACKEND=langgraph) — chains multiple tool calls per turn to reason through multi-step requests. - Cross-call caller memory — remembers facts about a caller and recalls them on their next call.
- RAG knowledge base — answers from your own documents via local embeddings.
- Rolling summaries — long calls no longer lose earlier context.
- "Never guess" grounding — live-data questions are answered with a real tool call, never a guess or an empty promise.
Agent personas (new)
- The caller can set the agent's demeanor for a call ("act like a formal butler") and save/recall styles by name across calls, via the
PERSONAvoice tool. - Ships 8 ready-to-use personas: Professional, Friendly, Formal Butler, Calm, Cheerful, Newscaster, Witty, Pirate.
- Tone-only — personas never override grounding, tool, or safety rules.
13 new voice tools
Fun (dice, coin, trivia, story, drink recipe), information (web search, NWS forecast, KP index, earthquakes), memory & automation (remember/forget, trigger workflow), ops (GPU status, Alertmanager, container control), and blind call transfer.
Integrations
- n8n community node package — call, speak, schedule, run tools, and provision virtual numbers from n8n, with a call-lifecycle trigger and an optional per-call caller name (e.g. "Weather Alert").
- alert-bridge example — turn Alertmanager alerts into escalation phone calls.
- DGX Spark / GB10 support — self-contained compose variant and a CUDA-enabled speaches build.
Reliability fixes (from real-call testing)
- STT latency — end-of-utterance and silence timeouts were running up to 5× slow (a 750 ms hangover became ~3.8 s of dead air) because the VAD miscounted variable-length audio reads. Now measured in real time; the agent responds the instant the caller stops talking.
- Barge-in — interruptions were being missed because the detector reset on the natural gaps within speech. It now tolerates inter-syllable gaps and fires reliably (~500 ms) while still ignoring clicks and line noise.
- Web-search read-aloud — no longer reads scraped page snippets verbatim; speaks a clean summary instead.
- Promised-but-not-delivered — a turn that says "let me get that for you" and then goes silent now forces a real tool call.
Testing & CI
Layered test suite (unit / component / e2e); the fast tiers run in GitHub Actions with an error-level ruff gate. 953 unit + component tests pass.
Full details: see PR #2.
v0.2.0 - Its better
Full Changelog: v0.1.0...v0.2.0
v0.1.0 - Its Alive!
🎉 v0.1.0
📞⚡ General Dissarray
🤖 SIP Enabled AI Agent
🤖 ROBO CODED — This release was made with AI and may not be 100% sane. But the code does work! 🎉
Release Date: November 30, 2025
License: AGPL-3.0
Platform: NVIDIA DGX Spark (Grace Blackwell GB10)
🚀 Overview
The first public release of SIP AI Assistant — a voice-powered AI assistant that answers phone calls, understands natural language, and performs actions through an extensible plugin system.
Built for the NVIDIA DGX Spark with 128GB unified memory, this system runs entirely on local infrastructure with no cloud dependencies for voice processing or LLM inference.
✨ Highlights
┌─────────────────────────────────────────────────────────────┐
│ 📞 SIP AI Assistant v0.1.0 │
├─────────────────────────────────────────────────────────────┤
│ ✅ Full SIP/RTP voice call handling │
│ ✅ Real-time STT via Whisper (Speaches) │
│ ✅ Natural TTS via Kokoro (Speaches) │
│ ✅ LLM integration (vLLM, OpenAI, Ollama) │
│ ✅ 10 built-in tools │
│ ✅ Plugin system for custom tools │
│ ✅ REST API for outbound calls │
│ ✅ Scheduled & recurring calls │
│ ✅ Customizable phrases │
│ ✅ Full observability stack │
└─────────────────────────────────────────────────────────────┘
🔧 Built-in Tools
| Tool | Description |
|---|---|
🌤️ WEATHER |
Current weather from Tempest station |
⏲️ SET_TIMER |
Countdown timers with voice alerts |
📞 CALLBACK |
Schedule callbacks to any number |
📴 HANGUP |
End calls gracefully |
📋 STATUS |
Check pending timers/callbacks |
❌ CANCEL |
Cancel scheduled tasks |
🕐 DATETIME |
Current date and time |
🧮 CALC |
Math calculations |
😄 JOKE |
Random jokes (general, tech, dad) |
🦜 SIMON_SAYS |
Echo back verbatim |
🌐 REST API
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check |
/call |
POST | Initiate outbound call |
/call/{id} |
GET | Get call status |
/call/{id} |
DELETE | Hang up call |
/tools |
GET | List available tools |
/tools/{name}/call |
POST | Execute tool via call |
/schedule |
POST | Schedule a call |
/schedule |
GET | List scheduled calls |
/schedule/{id} |
DELETE | Cancel scheduled call |
Scheduled Calls
# One-time call
curl -X POST http://localhost:8080/schedule \
-d '{"extension": "1001", "tool": "WEATHER", "at_time": "07:00"}'
# Recurring daily
curl -X POST http://localhost:8080/schedule \
-d '{"extension": "1001", "tool": "WEATHER", "at_time": "07:00", "recurring": "daily"}'
# Weekdays only
curl -X POST http://localhost:8080/schedule \
-d '{"extension": "1001", "message": "Stand up time!", "at_time": "09:00", "recurring": "weekdays"}'🗣️ Customizable Phrases
Configure the assistant's personality via environment variables or JSON:
Environment Variables:
PHRASES_GREETINGS=["Hello!","Hi there!","Hey!"]
PHRASES_GOODBYES=["Goodbye!","Take care!"]
PHRASES_ACKNOWLEDGMENTS=["Okay.","Got it.","Sure."]
PHRASES_THINKING=["One moment.","Let me check."]
PHRASES_ERRORS=["Sorry, I didn't catch that."]
PHRASES_FOLLOWUPS=["Anything else?"]JSON File (data/phrases.json):
{
"greetings": ["Beep boop! What do you want, human?"],
"goodbyes": ["Bye, meatbag!"],
"errors": ["My audio sensors must be malfunctioning."]
}🔌 Plugin System
Create custom tools with Python:
from tool_plugins import BaseTool, ToolResult, ToolStatus
class MyTool(BaseTool):
name = "MY_TOOL"
description = "Does something cool"
parameters = {
"input": {"type": "string", "required": True}
}
async def execute(self, params):
return ToolResult(
status=ToolStatus.SUCCESS,
message=f"You said: {params['input']}"
)📊 Observability
| Feature | Technology |
|---|---|
| 📈 Metrics | Prometheus |
| 🔍 Tracing | OpenTelemetry / Tempo |
| 📝 Logging | Structured JSON |
| 📊 Dashboards | Grafana |
Key Metrics:
sip_agent_calls_total— Total calls handledsip_agent_call_duration_seconds— Call duration histogramsip_agent_tool_calls_total— Tool invocations by namesip_agent_stt_latency_seconds— Speech-to-text latencysip_agent_tts_latency_seconds— Text-to-speech latencysip_agent_llm_latency_seconds— LLM response latency
🏗️ Architecture
flowchart LR
subgraph Caller
Phone[📱 SIP Phone]
end
subgraph Agent["🤖 SIP AI Agent"]
SIP[SIP Client]
Audio[Audio Pipeline]
Tools[Tool Manager]
API[REST API]
end
subgraph Services
LLM[🧠 LLM Server]
Speaches[🎤 Speaches]
end
Phone <-->|SIP/RTP| SIP
SIP <--> Audio
Audio <--> Speaches
Audio <--> Tools
Tools <--> LLM
API <--> Tools🖥️ System Requirements
Recommended: NVIDIA DGX Spark
┌─────────────────────────────────────────────────────────────┐
│ 🟢 NVIDIA DGX Spark │
├─────────────────────────────────────────────────────────────┤
│ 🧠 Grace Blackwell GB10 Superchip │
│ 💾 128GB Unified Memory │
│ ⚡ 1 PFLOP AI Performance │
└─────────────────────────────────────────────────────────────┘
Minimum Requirements
| Component | Requirement |
|---|---|
| CPU | 8+ cores |
| RAM | 32GB |
| GPU | NVIDIA with 16GB+ VRAM |
| Storage | 50GB SSD |
| Network | Gigabit Ethernet |
Software Dependencies
| Dependency | Version |
|---|---|
| Python | 3.11+ |
| Docker | 24.0+ |
| Docker Compose | 2.20+ |
| Speaches | Latest |
📦 Installation
# Clone repository
git clone https://github.com/your-org/sip-agent.git
cd sip-agent
# Configure
cp sip-agent/.env.example sip-agent/.env
nano sip-agent/.env
# Start
docker compose up -d
# (Optional) Start services with Observability
docker compose -f ./docker-compose.yml -f docker-compose.observability.yml up -d
# Verify
curl http://localhost:8080/health📚 Documentation
Full documentation available at sip-agent.readme.io
| Document | Description |
|---|---|
| Overview | Architecture and features |
| Getting Started | Installation guide |
| Configuration | Environment variables |
| API Reference | REST API endpoints |
| Tools | Built-in tools |
| Plugins | Custom tool development |
| Examples | Integration patterns |
⚠️ Known Limitations
- WebSocket realtime STT mode is experimental (use
STT_MODE=batchfor stability) - Maximum concurrent calls limited by LLM server capacity
- Weather tool requires Tempest station (or customize for other APIs)
- Some TTS voices may struggle with unusual words or names
🔜 Roadmap
| Feature | Status |
|---|---|
| 🎵 Music on hold | Planned |
| 📞 Call transfer | Planned |
| 🗓️ Calendar integration | Planned |
| 🔍 Web search tool | Planned |
| 🏠 Home Assistant native | Planned |
| 📱 SMS notifications | Planned |
| 🌍 Multi-language support | Planned |
🙏 Acknowledgments
- NVIDIA DGX Spark — AI supercomputer platform
- Speaches — Unified STT/TTS server
- PJSIP — SIP stack
- FastAPI — REST API framework
- WeatherFlow Tempest — Weather data
📜 License
SPDX-License-Identifier: AGPL-3.0-or-later
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
📞 Support
| Resource | Link |
|---|---|
| 📖 Docs | sip-agent.readme.io |
| 🐛 Issues | GitHub Issues |
| 💬 Discussions | GitHub Discussions |
SIP AI Assistant v0.1.0
Made with ❤️ and 🤖
Now go make some calls! 📞