We strongly prefer a project-local virtual environment to avoid dependency hell (especially on macOS with Homebrew Python).
# One-time setup
make install
# Activate (optional — most `make` targets work without it)
source .venv/bin/activateAfter make install you should have a working thelab-chat command.
# Basic text chat (uses Grok by default via .env)
make chat
# Or directly
thelab-chat chat --user derek --thread morning-standupThe voice path requires a running Riva server (and optionally a local Nemotron).
Quick local test (mocked audio path coming soon):
# Point at services running on your host (from inside Docker or natively)
HOST_IP=host.docker.internal thelab-chat voice --user derekFor full local voice development without Docker, you will need:
- A local Riva installation or the Riva Docker container
- A local LLM (Ollama, vLLM, or NVIDIA NIM) exposing an OpenAI-compatible endpoint
Set these environment variables:
LLM_PROVIDER=openai_compatible
LLM_BASE_URL=http://localhost:8000/v1
RIVA_URI=localhost:50051See .env.example for the current list. Key ones:
LLM_PROVIDER—xai(Grok),anthropic, oropenai_compatibleLLM_BASE_URL— only needed foropenai_compatible(e.g. your Nemotron NIM)RIVA_URI— address of the Riva gRPC serverSUPERMEMORY_API_KEY— requiredXAI_API_KEY/ANTHROPIC_API_KEY
See the root docker-compose.yml and the profiles it supports:
# Full stack (agent + Riva + Nemotron)
docker compose up
# Just the agent (talking to host services)
docker compose up agentSee the deployment workflow in specs/001-voice-dgx-spark-agent/plan.md and specs/003-deployment-infrastructure/spec.md.
Typical flow:
- Develop on Mac
docker compose build- Push image to your private registry
- On the DGX:
docker compose pull && docker compose up
- Create the tool(s) in
src/thelab_langchain/agent/tools/ - Use the factory pattern (
create_xxx_tools(user_id)) so they are user-scoped. - Wire them in
agent/graph.py(either via proactive injection or by binding to the LLM). - Update the voice orchestrator if the new tools need special handling from the audio layer.
See the existing Supermemory tools as the reference implementation.
make install— create venv + installmake chat/make run— text chatmake lintmake clean— remove venv and caches
Add new targets to the Makefile as the project grows.