Files
voice-assistant/docs/archify/voice-assistant.architecture.json

283 lines
4.9 KiB
JSON

{
"schema_version": 1,
"diagram_type": "architecture",
"meta": {
"title": "Jervis Voice Assistant \u2014 System Map",
"quality_profile": "showcase"
},
"components": [
{
"id": "esp32",
"type": "frontend",
"label": "ESP32-S3",
"sublabel": "wake word \u00b7 mic \u00b7 LED",
"pos": [
40,
300
],
"size": [
126,
62
]
},
{
"id": "mqtt",
"type": "messagebus",
"label": "MQTT",
"sublabel": "mosquitto :1883",
"pos": [
240,
300
],
"size": [
124,
60
]
},
{
"id": "whisper",
"type": "backend",
"label": "Whisper STT",
"sublabel": "faster-whisper",
"pos": [
440,
300
],
"size": [
126,
60
]
},
{
"id": "agent",
"type": "backend",
"label": "Jervis Agent",
"sublabel": "FastAPI :8501",
"pos": [
645,
300
],
"size": [
130,
62
]
},
{
"id": "ha",
"type": "external",
"label": "Home Assistant",
"sublabel": ".30 :8123",
"pos": [
645,
95
],
"size": [
142,
62
]
},
{
"id": "omniroute",
"type": "cloud",
"label": "OmniRoute",
"sublabel": "LLM gateway :20129",
"pos": [
890,
95
],
"size": [
136,
62
]
},
{
"id": "mopidy",
"type": "external",
"label": "Mopidy \u00b7 Spotify",
"sublabel": "music :6600",
"pos": [
890,
300
],
"size": [
140,
60
]
},
{
"id": "apprise",
"type": "external",
"label": "Apprise",
"sublabel": "notifications .35",
"pos": [
890,
505
],
"size": [
126,
60
]
},
{
"id": "piper",
"type": "backend",
"label": "Piper TTS",
"sublabel": ":10200",
"pos": [
890,
610
],
"size": [
118,
60
]
},
{
"id": "snapcast",
"type": "messagebus",
"label": "Snapcast",
"sublabel": "multi-room :1780",
"pos": [
645,
560
],
"size": [
130,
62
]
},
{
"id": "speakers",
"type": "external",
"label": "House Speakers",
"sublabel": "whole home",
"pos": [
1100,
610
],
"size": [
124,
60
]
}
],
"boundaries": [
{
"kind": "region",
"label": "On-device",
"wraps": [
"esp32"
]
},
{
"kind": "region",
"label": "Home lab (.13 \u00b7 .30 \u00b7 .35)",
"wraps": [
"mqtt",
"whisper",
"agent",
"ha",
"omniroute",
"mopidy",
"apprise",
"piper",
"snapcast",
"speakers"
]
}
],
"connections": [
{
"id": "esp32-mqtt",
"from": "esp32",
"to": "mqtt",
"label": "audio stream",
"variant": "emphasis"
},
{
"id": "mqtt-whisper",
"from": "mqtt",
"to": "whisper",
"label": "speech frames",
"variant": "dashed"
},
{
"id": "whisper-agent",
"from": "whisper",
"to": "agent",
"label": "transcript"
},
{
"id": "agent-ha",
"from": "agent",
"to": "ha",
"label": "control \u00b7 todo \u00b7 timers",
"fromSide": "top",
"toSide": "bottom",
"labelDx": -55
},
{
"id": "agent-omni",
"from": "agent",
"to": "omniroute",
"label": "intent / Q&A",
"fromSide": "top",
"toSide": "bottom"
},
{
"id": "agent-mopidy",
"from": "agent",
"to": "mopidy",
"label": "play \u00b7 pause \u00b7 volume",
"variant": "dashed"
},
{
"id": "agent-apprise",
"from": "agent",
"to": "apprise",
"label": "family messages",
"variant": "dashed",
"fromSide": "bottom",
"toSide": "top"
},
{
"id": "agent-snap",
"from": "agent",
"to": "snapcast",
"label": "reply text",
"fromSide": "bottom",
"toSide": "top",
"labelDy": 40,
"labelDx": -55
},
{
"id": "snap-piper",
"from": "snapcast",
"to": "piper",
"label": "synthesize speech",
"variant": "dashed",
"labelAt": [
920,
684
]
},
{
"id": "piper-snap",
"from": "piper",
"to": "snapcast",
"label": "speech wav",
"labelDy": -25
},
{
"id": "snap-speakers",
"from": "snapcast",
"to": "speakers",
"label": "audio out",
"variant": "emphasis",
"labelAt": [
1020,
693
]
}
]
}