Skip to content

Voice or chat not working when running on Apple with docker #9

@HubertReX

Description

@HubertReX

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.

Image

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 OK

the 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions