Rebuild & Deploy / rebuild (push) Successful in 59s
- Stream downloads as they grow: raw best-audio (no mp3 transcode) served chunked from the stream endpoint mid-download, then with native Range once complete. Songs play within seconds of hitting Play. - Fix searched songs never starting: reconcileMedia now wires the stream URL when a track that was preparing gains one; audio_url is stable for the whole lifecycle so the player never reloads mid-playback. - Progress bars now parse yt-dlp stderr (stdout never carried [download]). - Prefer downloaded songs: /media/api/search merges ready library matches ahead of YouTube results; search_music/play_song tooling and the agent prompt tell Hope to always pick in_library=true. - Mute button turns solid red while the mic is muted.
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 /home/shane/dev/voice
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 |
media server API + player UI + media MCP | library/player state flow, Range proxy, static mp3 Range, live YT Music search (-m slow), gated full download (HOPE_RUN_YTDLP_DOWNLOAD=1) |
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.