Rebuild & Deploy / rebuild (push) Successful in 2m7s
Move the media server, downloader, library volume, and browser player to the standalone hope-media-music product. Keep Hope's music tools as a thin HTTP client of the LAN service on port 8094. Use a stable voice-room player scope instead of ephemeral LiveKit room names. The agent now owns the conversation handshake: fresh reported playback mutes its input, joining pauses music, and the last participant leaving resumes only music it paused. Peer failures remain non-fatal. Also move the voice deploy workflow onto the active Unraid Gitea runner and remove yt-dlp/ffmpeg/media health and volume dependencies from the image.
Hope test suite
End-to-end tests that drive the actual running container — no mocks. They run on the host and hit the live web UI, token endpoint, LLM API, MCP tool servers, and agent process.
Prerequisites
- The container is up:
docker compose up -d(and healthy) - Host deps installed:
pip install -r tests/requirements.txt(oruv pip install -r tests/requirements.txt) - The LLM at
LLM_BASE_URL(defaulthttp://192.168.86.2:3005/api, OpenWebUI) is reachable - Internet access for the weather tool tests (wttr.in)
Run
cd ~/dev/hope-voice-api
python -m pytest tests/ -v # everything
python -m pytest tests/ -v -m "not slow" # skip LLM/network-heavy tests
What each file covers
| File | Target | Notes |
|---|---|---|
test_web_ui.py |
nginx HTTPS UI (:9178) + token endpoint (:8091) | static assets, /token (direct + via nginx), /livekit/ proxy |
test_llm_api.py |
LLM API directly | completion, tool calling, enable_thinking=false latency, streaming |
test_mcp_tools.py |
MCP servers via docker exec |
weather/time, authenticated remote memory save/recall/delete, and local skills — probes are cleaned up |
test_media.py |
external Hope Music boundary + media MCP client | LAN service health, stable room scope, split regression guards, local-container MCP probes |
test_agent_integration.py |
running container | agent process alive, worker registered with LiveKit, all 4 supervised processes up, container health, LiveKit HTTP API |
test_compaction.py |
HopeLLM._compact_context in-container |
compaction triggers >24 items, system prompt preserved, short context untouched |
Notes
- LLM and MCP tests are marked
@pytest.mark.slow(1–30s each). - The token endpoint is POST
/token→{"token": "<JWT>"}. - Process checks use
/proc/*/cmdlinebecause the container image has nops, and the supervisorctl unix socket is not exposed in this build.