-
Notifications
You must be signed in to change notification settings - Fork 103
Voice or chat not working when running on Apple with docker #9
Description
Hi 👋
This project looks awesome, and I've spent several hours trying to run it on my mac-mini (M4 24 GB). I think I'm close to making it work, but still, I can't get the agent to respond. I see that my voice is detected (not using wake word), tried also writing - same result - no response. I'm following the README-APPLE.md instructions. I'm using code. I've pulled code from this repo ~7h ago - last commit 310043ca6e78a41084b10448e87645b9d012222f. I've got all containers running, with Ollama, mlx-audio running on host. I've event got the tailscale configuration to work so I can access the web on https and the mic is enabled in the browser.
mlx-audi seems to work:
> tail -f /tmp/caal-mlx-audio.log
Fetching 2 files: 100%|██████████| 2/2 [00:00<00:00, 28244.47it/s]
Fetching 4 files: 100%|██████████| 4/4 [00:00<00:00, 44384.17it/s]
INFO: 127.0.0.1:58264 - "POST /v1/models?model_name=mlx-community/whisper-large-v3-turbo HTTP/1.1" 200 OK
Fetching 9 files: 100%|██████████| 9/9 [00:00<00:00, 15307.68it/s]
Fetching 9 files: 100%|██████████| 9/9 [00:00<00:00, 9434.83it/s]
INFO: 127.0.0.1:58270 - "POST /v1/models?model_name=prince-canuma/Kokoro-82M HTTP/1.1" 200 OK
INFO: 127.0.0.1:58290 - "POST /v1/models?model_name=mlx-community/whisper-large-v3-turbo HTTP/1.1" 200 OKthe webhook is responding on health endpoint:
curl -X GET http://localhost:8889/health \
-H "Content-Type: application/json"
{"status":"ok","active_sessions":[]}%but complains on the annonce endpoint:
curl -X POST http://localhost:8889/announce \
-H "Content-Type: application/json" \
-d '{"message": "Package delivered at front door"}'
{"detail":"No active session in room: voice_assistant_room"}%caal- logs:
HTTPS mode: enabling TURN/TLS for mac-mini.kamori-vector.ts.net
2026-01-04T13:33:35.195Z INFO livekit routing/interfaces.go:180 using single-node routing
2026-01-04T13:33:35.198Z INFO livekit service/turn.go:145 Starting TURN server {"turn.relay_range_start": 30000, "turn.relay_range_end": 30100, "turn.portTLS": 5349, "turn.externalTLS": true}
2026-01-04T13:33:35.199Z INFO livekit service/server.go:264 starting LiveKit server {"portHttp": 7880, "nodeID": "ND_vVJbthxwL66H", "nodeIP": "100.107.186.2", "version": "1.9.10", "rtc.portTCP": 7881, "rtc.portICERange": [50000, 50100]}
2026-01-04T13:33:51.160Z INFO livekit.agents service/agentservice.go:298 worker registered {"namespace": "", "jobType": "JT_ROOM", "agentName": "", "workerID": "AW_TKMenpwESCKQ"}
2026-01-04T13:34:04.327Z INFO livekit service/roommanager.go:413 starting RTC session {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "room": "voice_assistant_room", "nodeID": "ND_vVJbthxwL66H", "numParticipants": 0, "participantInit": {"Identity": "voice_assistant_user_3923", "Reconnect": false, "ReconnectReason": "RR_UNKNOWN", "AutoSubscribe": true, "Client": {"sdk": "JS", "version": "2.15.15", "protocol": 16, "os": "Mac OS X", "osVersion": "10.15.7", "deviceModel": "Mac", "browser": "Chrome", "browserVersion": "143.0.0"}, "Grants": {"Identity": "voice_assistant_user_3923", "Kind": "", "KindDetails": [], "Video": {"RoomCreate": false, "RoomList": false, "RoomRecord": false, "RoomAdmin": false, "RoomJoin": true, "Room": "voice_assistant_room", "CanPublish": true, "CanSubscribe": true, "CanPublishData": true, "CanPublishSources": [], "CanUpdateOwnMetadata": "not-set", "IngressAdmin": false, "Hidden": false, "Recorder": false, "Agent": false, "CanSubscribeMetrics": "not-set", "DestinationRoom": ""}, "SIP": {}, "Agent": {}, "Inference": {}, "Observability": {}, "RoomConfig": {"departureTimeout": 1}, "RoomPreset": ""}, "Region": "", "AdaptiveStream": false, "ID": "", "SubscriberAllowPause": "not-set", "DisableICELite": false, "CreateRoom": {"name": "voice_assistant_room", "departureTimeout": 1}, "AddTrackRequests": [], "PublisherOffer": {}, "SyncState": {}, "UseSinglePeerConnection": false}}
2026-01-04T13:34:04.328Z INFO livekit.transport rtc/transport.go:1197 data tracks not enabled {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "transport": "SUBSCRIBER"}
2026-01-04T13:34:04.328Z INFO livekit service/roommanager.go:1003 created TURN password {"username": "YpVZ4cnNtlFVq10ZfKIo4zumqLsZGSNhSjppgKJoCC", "password": "fK8JBYr88ZWuKfrldpDmLQzJcdfEMbEaVetbMp6cfT6F"}
2026-01-04T13:34:04.435Z INFO livekit rtc/room.go:1249 participant active {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "publisherCandidates": ["[local][selected:1][trickle] udp4 host 100.107.186.2:50028 (resolved: 100.107.186.2:50028)", "[local][trickle] tcp4 host 100.107.186.2:7881 (resolved: 100.107.186.2:7881)", "[remote][trickle] udp4 host 192.168.1.75:58178", "[remote][selected:1][trickle] udp4 host 100.78.104...:49383", "[remote][trickle] udp6 host fd7a:115c:a1e0::5201:6818:60610", "[remote][trickle] udp4 host 192.168.1.75:51850", "[remote][trickle] udp4 host 100.78.104...:59934", "[remote][trickle] udp6 host fd7a:115c:a1e0::5201:6818:58982", "[remote][trickle] udp4 srflx 83.29.5...:58178 related 192.168.1.75:58178"], "subscriberCandidates": ["[local][selected:1][trickle] udp4 host 100.107.186.2:50071 (resolved: 100.107.186.2:50071)", "[local][trickle] tcp4 host 100.107.186.2:7881 (resolved: 100.107.186.2:7881)", "[remote][trickle] udp4 host 192.168.1.75:51979", "[remote][selected:1][trickle] udp4 host 100.78.104...:55773", "[remote][trickle] udp6 host fd7a:115c:a1e0::5201:6818:64450", "[remote][trickle] udp4 srflx 83.29.5...:51979 related 192.168.1.75:51979"], "connectionType": "udp", "clientInfo": {"sdk": "JS", "version": "2.15.15", "protocol": 16, "os": "Mac OS X", "osVersion": "10.15.7", "deviceModel": "Mac", "browser": "Chrome", "browserVersion": "143.0.0"}, "connectTime": "108.391668ms"}
2026-01-04T13:34:04.446Z INFO livekit.pub rtc/participant.go:2244 mediaTrack published {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "kind": "audio", "trackID": "TR_AMjJatwp6vnciS", "webrtcTrackID": "581d5cf4-0970-4dad-a54c-5cdd37fe4ced", "rid": "", "ssrc": 445952574, "rtxSsrc": 0, "mime": "audio/red", "trackInfo": {"sid": "TR_AMjJatwp6vnciS", "type": "AUDIO", "source": "MICROPHONE", "mimeType": "audio/red", "mid": "0", "codecs": [{"mimeType": "audio/red", "mid": "0", "cid": "581d5cf4-0970-4dad-a54c-5cdd37fe4ced", "videoLayerMode": "MODE_UNUSED"}], "encryption": "NONE", "stream": "camera", "version": {"unixMicro": 1767533644446400}, "audioFeatures": ["TF_AUTO_GAIN_CONTROL", "TF_ECHO_CANCELLATION", "TF_NOISE_SUPPRESSION"], "backupCodecPolicy": "SIMULCAST"}, "fromSdp": true, "isReceiverAdded": true, "sdpRids": ["", "", ""]}
2026-01-04T13:34:04.529Z INFO livekit.agents service/agentservice.go:407 assigned job to worker {"jobID": "AJ_cAurGAkEUra2", "namespace": "", "agentName": "", "jobType": "JT_ROOM", "room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "workerID": "AW_TKMenpwESCKQ"}
2026-01-04T13:34:04.555Z INFO livekit service/roommanager.go:413 starting RTC session {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "agent-AJ_cAurGAkEUra2", "pID": "PA_ApqyKp5yiCUL", "remote": false, "room": "voice_assistant_room", "nodeID": "ND_vVJbthxwL66H", "numParticipants": 1, "participantInit": {"Identity": "agent-AJ_cAurGAkEUra2", "Reconnect": false, "ReconnectReason": "RR_UNKNOWN", "AutoSubscribe": true, "Client": {"sdk": "PYTHON", "version": "1.0.19", "protocol": 16}, "Grants": {"Identity": "agent-AJ_cAurGAkEUra2", "Kind": "agent", "KindDetails": [], "Video": {"RoomCreate": false, "RoomList": false, "RoomRecord": false, "RoomAdmin": false, "RoomJoin": true, "Room": "voice_assistant_room", "CanPublish": true, "CanSubscribe": true, "CanPublishData": true, "CanPublishSources": [], "CanUpdateOwnMetadata": true, "IngressAdmin": false, "Hidden": false, "Recorder": false, "Agent": true, "CanSubscribeMetrics": false, "DestinationRoom": ""}, "SIP": {}, "Agent": {}, "Inference": {}, "Observability": {}, "RoomConfig": {}, "RoomPreset": ""}, "Region": "", "AdaptiveStream": false, "ID": "", "SubscriberAllowPause": "not-set", "DisableICELite": false, "CreateRoom": {"name": "voice_assistant_room"}, "AddTrackRequests": [], "PublisherOffer": {}, "SyncState": {}, "UseSinglePeerConnection": false}}
��
04T13:34:04.556Z INFO livekit.transport rtc/transport.go:1197 data tracks not enabled {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "agent-AJ_cAurGAkEUra2", "pID": "PA_ApqyKp5yiCUL", "remote": false, "transport": "SUBSCRIBER"}
2026-01-04T13:34:04.556Z INFO livekit service/roommanager.go:1003 created TURN password {"username": "MV1QplXNwtUeiDugeVQQxndNVXYzMkaClGTTBVSQFE", "password": "9h0RrfottDvMa5p0JB6BnWEKo5gcnPnuVKr8QJh0x8b"}
2026-01-04T13:34:04.722Z INFO livekit rtc/room.go:1249 participant active {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "agent-AJ_cAurGAkEUra2", "pID": "PA_ApqyKp5yiCUL", "remote": false, "subscriberCandidates": ["[local][selected:1][trickle] udp4 host 100.107.186.2:50085 (resolved: 100.107.186.2:50085)", "[local][trickle] tcp4 host 100.107.186.2:7881 (resolved: 100.107.186.2:7881)", "[remote][selected:1][trickle] udp4 host 192.168.144.4:36114"], "connectionType": "udp", "clientInfo": {"sdk": "PYTHON", "version": "1.0.19", "protocol": 16}, "connectTime": "166.02971ms"}
2026-01-04T13:40:36.384Z INFO livekit rtc/participant.go:1366 participant closing {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "sendLeave": true, "reason": "CLIENT_REQUEST_LEAVE", "isExpectedToResume": false}
2026-01-04T13:40:36.384Z WARN livekit.transport rtc/transport.go:919 error reading data channel {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "transport": "PUBLISHER", "label": "_lossy", "error": "dtls timeout: read/write timeout: context deadline exceeded"}
2026-01-04T13:40:36.384Z WARN livekit.transport rtc/transport.go:919 error reading data channel {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "transport": "PUBLISHER", "label": "_reliable", "error": "dtls timeout: read/write timeout: context deadline exceeded"}
2026-01-04T13:40:36.384Z WARN livekit.transport rtc/transport.go:1276 error reading data channel {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "transport": "SUBSCRIBER", "label": "_reliable", "error": "dtls timeout: read/write timeout: context deadline exceeded"}
2026-01-04T13:40:36.384Z WARN livekit.transport rtc/transport.go:1276 error reading data channel {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "voice_assistant_user_3923", "pID": "PA_gMjTYm6w8eZX", "remote": false, "transport": "SUBSCRIBER", "label": "_lossy", "error": "dtls timeout: read/write timeout: context deadline exceeded"}
2026-01-04T13:40:37.202Z INFO livekit.room rtc/room.go:807 closing room {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9"}
2026-01-04T13:40:37.202Z INFO livekit rtc/participant.go:1366 participant closing {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "agent-AJ_cAurGAkEUra2", "pID": "PA_ApqyKp5yiCUL", "remote": false, "sendLeave": true, "reason": "ROOM_CLOSED", "isExpectedToResume": false}
2026-01-04T13:40:37.202Z INFO livekit.agents agent/worker.go:530 job ended {"workerID": "AW_TKMenpwESCKQ", "agentName": "", "jobType": "JT_ROOM", "jobID": "AJ_cAurGAkEUra2", "status": "JS_FAILED", "error": "agent worker left the room"}
2026-01-04T13:40:37.203Z WARN livekit.transport rtc/transport.go:1276 error reading data channel {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "agent-AJ_cAurGAkEUra2", "pID": "PA_ApqyKp5yiCUL", "remote": false, "transport": "SUBSCRIBER", "label": "_reliable", "error": "dtls timeout: read/write timeout: context deadline exceeded"}
2026-01-04T13:40:37.203Z WARN livekit.transport rtc/transport.go:1276 error reading data channel {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "participant": "agent-AJ_cAurGAkEUra2", "pID": "PA_ApqyKp5yiCUL", "remote": false, "transport": "SUBSCRIBER", "label": "_lossy", "error": "dtls timeout: read/write timeout: context deadline exceeded"}
2026-01-04T13:40:37.203Z INFO livekit service/roommanager.go:187 deleting room state {"room": "voice_assistant_room"}
2026-01-04T13:40:37.203Z INFO livekit.room service/roommanager.go:664 room closed {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9"}
2026-01-04T13:40:37.203Z INFO livekit.room rtc/room.go:791 closing idle room {"room": "voice_assistant_room", "roomID": "RM_GhdCo264nka9", "reason": "departure timeout"}
I think the problem is somewhere in the voice_agent.py - it's not initializing mcp servers properly (I use only the default ones). I've increased the logging level to debug, added several log messages, but still no clue why it's not getting past the load_mcp_config() call.
Here are the caal-agent logs:
nnxruntime cpuid_info warning: Unknown CPU vendor. cpuinfo_vendor value: 0
Preloading models...
Loading STT: mlx-community/whisper-large-v3-turbo
Starting new HTTP connection (1): host.docker.internal:8001
http://host.docker.internal:8001 "POST /v1/models?model_name=mlx-community/whisper-large-v3-turbo HTTP/1.1" 200 94
✓ STT ready
Loading LLM: ministral-3:8b (num_ctx=8192)
Starting new HTTP connection (1): host.docker.internal:11434
http://host.docker.internal:11434 "POST /api/generate HTTP/1.1" 200 None
✓ LLM ready
starting worker
preloading plugins
INFO starting worker | name=livekit.agents version=1.3.3 rtc-version=1.0.19 timestamp=2026-01-04T13:33:48.301667+00:00
INFO preloading plugins | name=livekit.agents packages=["livekit.plugins.silero","livekit.plugins.openai","av"] timestamp=2026-01-04T13:33:48.302089+00:00
onnxruntime cpuid_info warning: Unknown CPU vendor. cpuinfo_vendor value: 0
initializing process
INFO initializing process | name=livekit.agents pid=53 timestamp=2026-01-04T13:33:49.655008+00:00
initializing process
INFO initializing process | name=livekit.agents pid=55 timestamp=2026-01-04T13:33:49.656460+00:00
INFO initializing process | name=livekit.agents pid=57 timestamp=2026-01-04T13:33:49.658347+00:00
initializing process
initializing process
INFO initializing process | name=livekit.agents pid=59 timestamp=2026-01-04T13:33:49.660095+00:00
Using selector: EpollSelector
Using selector: EpollSelector
Using selector: EpollSelector
Using selector: EpollSelector
process initialized
INFO process initialized | name=livekit.agents pid=53 elapsed_time=1.5 timestamp=2026-01-04T13:33:51.154807+00:00
process initialized
INFO process initialized | name=livekit.agents pid=55 elapsed_time=1.5 timestamp=2026-01-04T13:33:51.154956+00:00
process initialized
INFO process initialized | name=livekit.agents pid=57 elapsed_time=1.5 timestamp=2026-01-04T13:33:51.155012+00:00
process initialized
INFO process initialized | name=livekit.agents pid=59 elapsed_time=1.5 timestamp=2026-01-04T13:33:51.155197+00:00
registered worker
INFO registered worker | name=livekit.agents agent_name= id=AW_TKMenpwESCKQ url=ws://livekit:7880 region= protocol=16 timestamp=2026-01-04T13:33:51.160787+00:00
received job request
INFO received job request | name=livekit.agents job_id=AJ_cAurGAkEUra2 dispatch_id=AD_JNXxcHP7JeGF room=voice_assistant_room room_id=RM_GhdCo264nka9 agent_name= resuming=false enable_recording=false timestamp=2026-01-04T13:34:04.528849+00:00
Joining room: voice_assistant_room
Joining room: voice_assistant_room
DEBUG Joining room: voice_assistant_room | name=voice-agent pid=53 job_id=AJ_cAurGAkEUra2 room_id=RM_GhdCo264nka9 timestamp=2026-01-04T13:34:04.545973+00:00
initializing process
INFO initializing process | name=livekit.agents pid=123 timestamp=2026-01-04T13:34:04.588681+00:00
Starting webhook server on port 8889
joined room
Loaded MCP server config: n8n (http://host.docker.internal:5678/mcp-server/http)
Loaded settings from /app/settings.json
INFO process initialized | name=livekit.agents pid=123 elapsed_time=1.2 timestamp=2026-01-04T13:34:05.785324+00:00
process initialized
Using selector: EpollSelector
INFO process exiting | name=livekit.agents reason= pid=53 job_id=AJ_cAurGAkEUra2 room_id=RM_GhdCo264nka9 timestamp=2026-01-04T13:40:37.203099+00:00
process exiting
received job request
INFO received job request | name=livekit.agents job_id=AJ_hJtDY23pLN6K dispatch_id=AD_AQ3LNa6tawqf room=voice_assistant_room room_id=RM_jD8RTiCizhkA agent_name= resuming=false enable_recording=false timestamp=2026-01-04T13:47:39.997224+00:00
Joining room: voice_assistant_room
Joining room: voice_assistant_room
DEBUG Joining room: voice_assistant_room | name=voice-agent pid=55 job_id=AJ_hJtDY23pLN6K room_id=RM_jD8RTiCizhkA timestamp=2026-01-04T13:47:40.006184+00:00
initializing process
INFO initializing process | name=livekit.agents pid=158 timestamp=2026-01-04T13:47:40.059652+00:00
Starting webhook server on port 8889
joined room
Loaded MCP server config: n8n (http://host.docker.internal:5678/mcp-server/http)
Loaded settings from /app/settings.json
INFO process initialized | name=livekit.agents pid=158 elapsed_time=1.08 timestamp=2026-01-04T13:47:41.136321+00:00
process initialized
Using selector: EpollSelector
ignoring text stream with topic 'lk.chat', no callback attached
process exiting
INFO process exiting | name=livekit.agents reason= pid=55 job_id=AJ_hJtDY23pLN6K room_id=RM_jD8RTiCizhkA timestamp=2026-01-04T13:48:05.206072+00:00
received job request
INFO received job request | name=livekit.agents job_id=AJ_AK8r4uQdAUSA dispatch_id=AD_bbkMrauxWVUG room=voice_assistant_room room_id=RM_HcKBeDTkmhaX agent_name= resuming=false enable_recording=false timestamp=2026-01-04T13:50:24.335292+00:00
Joining room: voice_assistant_room
Joining room: voice_assistant_room
DEBUG Joining room: voice_assistant_room | name=voice-agent pid=57 job_id=AJ_AK8r4uQdAUSA room_id=RM_HcKBeDTkmhaX timestamp=2026-01-04T13:50:24.344464+00:00
initializing process
INFO initializing process | name=livekit.agents pid=193 timestamp=2026-01-04T13:50:24.418002+00:00
Starting webhook server on port 8889
joined room
Loaded MCP server config: n8n (http://host.docker.internal:5678/mcp-server/http)
Loaded settings from /app/settings.json
INFO process initialized | name=livekit.agents pid=193 elapsed_time=1.09 timestamp=2026-01-04T13:50:25.508291+00:00
process initialized
Using selector: EpollSelector
Announce failed: no session in room voice_assistant_room