Skip to content

feat: self-service hosted coordinator and contributor registry (Stage 1)#25

Open
ivelin wants to merge 5 commits into
mainfrom
feat/self-service-zk0-mcp
Open

feat: self-service hosted coordinator and contributor registry (Stage 1)#25
ivelin wants to merge 5 commits into
mainfrom
feat/self-service-zk0-mcp

Conversation

@ivelin

@ivelin ivelin commented Jun 30, 2026

Copy link
Copy Markdown
Owner

Summary

Stage 1 self-service network infrastructure for zk0.bot:

  • Hosted coordinator config via ZK0_SERVER_IP (SuperNode fleet API) and ZK0_COORDINATOR_ADDRESS (flwr run control API) in zk0bot.sh
  • Contributor registry (contributor_registry.jsonl) capturing {node_id, dataset_uri, timestamp} from client registration and server fit rounds
  • Self-service docs — README, NODE-OPERATORS, CONTRIBUTING now describe CLI join path; GitHub application gate removed as primary onboarding
  • dataset-uri injection into SuperNode --node-config on zk0bot client start

Key changes

Area Change
zk0bot.sh Binds SuperLink to 0.0.0.0, remote coordinator env vars, quoted --federation-config
src/common/contributor_registry.py Pure registry helpers + client round JSON fallback for dataset attribution
Docs Self-service join funnel; progressive onboarding in CONTRIBUTING
pyproject.toml transformers>=4.50.3 (no upper bound) so Docker CI keeps lerobot-cpu image transformers 5.x

Verify locally

docker build -f docker/Dockerfile.ci -t zk0-ci:latest .
docker run --rm -v $(pwd):/workspace -e CUDA_VISIBLE_DEVICES="" zk0-ci:latest \
  bash -c "cd /workspace && export CI=true && uv pip install -e '.[test]' && pytest tests/unit -x --tb=short --no-cov -n 0"

E2E (2 SuperNodes, 1 round): zk0bot server start → two zk0bot client start <dataset-uri>zk0bot run --rounds 1 --stream

Non-goals (follow-up PRs)

  • MCP server / x402 gate
  • Public hosted coordinator deployment
  • Metrics dashboard

ivelin added 4 commits June 29, 2026 13:37
Add self-service contributor onboarding via ZK0_SERVER_IP and
ZK0_COORDINATOR_ADDRESS in zk0bot, inject dataset-uri into SuperNode
node_config, and persist contributor_registry.jsonl from client and
server fit paths. Update docs to remove GitHub application gate.
Flower fit metrics are numeric-only, so server registry now looks up
dataset_name from per-client round_N.json files. Move client registration
to after save_path is known in client_fn.
zk0's transformers pin downgrades below what the lerobot-cpu base image
requires for Qwen2_5_VL imports, breaking unit test collection.
Remove the <4.52.0 upper bound so uv pip install -e '.[test]' keeps
the Docker image's transformers 5.x and lerobot Qwen2_5_VL imports work
without a post-install override in ci.yml.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant