lobes-cli 0.90.2__tar.gz → 0.91.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/CHANGELOG.md +28 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/CLAUDE.md +3 -1
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/PKG-INFO +1 -1
- lobes_cli-0.91.0/docs/hebrew-realtime.md +325 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin/base.toml +6 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin/orin.toml +6 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin/spark.toml +6 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin/thor.toml +6 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.whisper-stt +9 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/docker-compose.audio-he.yml +35 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/env.audio-he.example +77 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/env.example +5 -0
- lobes_cli-0.91.0/lobes/templates/fleet/listen_server_whisper.py +1503 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/pyproject.toml +1 -1
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/overlays/audio-he-defaults.env +10 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-associate__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-associate__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-associate__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-associate__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-cortex__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-cortex__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-cortex__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-cortex__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-decider__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-decider__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-decider__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-decider__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-embed__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-embed__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-embed__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-embed__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-lobe__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-lobe__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-lobe__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-lobe__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-small__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-small__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-small__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/orin-small__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/spark-innereye__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/spark-innereye__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/spark-innereye__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/spark-innereye__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/spark-lobe__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/spark-lobe__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/spark-lobe__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/spark-lobe__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-lobe__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-lobe__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-lobe__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-lobe__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-muse__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-muse__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-muse__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-muse__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-worker__base.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-worker__orin.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-worker__spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/thor-worker__thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/spark.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/thor.env +2 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_audio_he_stt_compose.py +63 -0
- lobes_cli-0.91.0/tests/test_listen_server_whisper.py +1337 -0
- lobes_cli-0.91.0/tests/test_pooling_gear_fingerprint.py +58 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_whisper_stt_dockerfile.py +23 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/uv.lock +1 -1
- lobes_cli-0.90.2/docs/hebrew-realtime.md +0 -161
- lobes_cli-0.90.2/lobes/templates/fleet/listen_server_whisper.py +0 -724
- lobes_cli-0.90.2/tests/test_listen_server_whisper.py +0 -544
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.agex/data/pr/323/await.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.agex/data/pr/events.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/ask-colleague/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/ask-colleague/prompts/review.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/ask-colleague/prompts/write.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/challenge/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/cicd/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/communicate/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/deviate/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/lobes-deploy/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/lobes-deploy/scripts/lobes-compose.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/model-runner/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/model-runner/scripts/model-runner.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/recall/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/recall/scripts/recall.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/remember/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/remember/scripts/remember.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/run-tests/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/scope/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/summarize-delivery/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/think/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/think/scripts/think.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/validate-delivery/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/version-bump/SKILL.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.claude/skills.local.yaml.example +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/current +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/current_plan +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/capacity-relative-pool-routing.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/cortex-replica-pool-199.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/deployment-lock-per-box.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/dspark-speculation-on-the-spark-cortex.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/flash-next-worker-on-thor.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/hand-lobe-lfm2-5-1-2b.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/hebrew-realtime.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/innereye-lobes-hosts-comfyui.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/lane-safety-and-quality-304-307-308-309.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/lightning-on-orin.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/mesh-boot-window-and-capabilities-advert.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/mesh-brain-join.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/mesh-pool-load-sharing.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/nemotron-lightning-worker.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/orin-associate-at-1m.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/orin-decision-models.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/orin-embedding-specialist.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/qwen3-8-gguf-llamacpp.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/realtime-voice-to-voice-astro-test-site-151.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/reranker-calibration-227.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/thor-cortex-speculation.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/thor-worker-arm-qwen3-6-35b-a3b-recipes.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/unsloth-qat-senses-first-class-orin-variation.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/deliveries/vllm-0-31-0-fleet.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/capacity-relative-pool-routing.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/chatterbox-on-thor-sm-110.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/compose-chain-unification-init-repair-doctor-stale.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/cortex-replica-pool-199.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/deployment-lock-per-box.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/dspark-speculation-on-the-spark-cortex.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/flash-next-on-vllm.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/flash-next-worker-on-thor.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/hand-lobe-lfm2-5-1-2b.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/hebrew-realtime.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/innereye-lobes-hosts-comfyui.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lane-safety-and-quality-304-307-308-309.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lightning-on-orin.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lightning-on-thor.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/mesh-boot-window-and-capabilities-advert.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/mesh-brain-join.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/mesh-pool-load-sharing.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/nemotron-lightning-worker.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/orin-associate-at-1m.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/orin-decision-models.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/orin-embedding-specialist.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/peer-only-replica-pools.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/proxy-lobes-pairwise-auth.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/public-lobes-and-hebrew-site.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/quick-wins-finish-the-rename.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/qwen3-8-27b-gguf-on-the-spark.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/qwen3-8-cortex-upgrade.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/qwen3-8-flash-next-gguf-candidate.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/qwen3-8-flash-next-on-thor.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/qwen3-8-gguf-llamacpp.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/realtime-voice-to-voice-astro-test-site-151.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/realtime-ws-server-vad-149.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/reranker-calibration-227.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/stt-readiness-truth-155.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/targeted-ops-and-honest-streams.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/thor-cortex-speculation.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/thor-worker-arm-qwen3-6-35b-a3b-recipes.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/thor-worker-lobe-qwen3-6-35b-a3b.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/unsloth-qat-senses-first-class-orin-variation.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/frames/vllm-0-31-0-fleet.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/capacity-relative-pool-routing.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/compose-chain-unification-init-repair-doctor-stale.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/cortex-replica-pool-199.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/deployment-lock-per-box.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/dspark-speculation-on-the-spark-cortex.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/every-lobe-in-the-mesh-can-see-the-spark-reaches-t.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/flash-next-worker-on-thor.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/hand-lobe-lfm2-5-1-2b.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/hebrew-realtime.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/innereye-lobes-hosts-comfyui.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lane-safety-and-quality-304-307-308-309.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lightning-on-orin.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-capabilities-tells-you-where-a-lobe-is-serve.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/mesh-boot-window-and-capabilities-advert.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/mesh-brain-join.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/mesh-pool-load-sharing.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/nemotron-lightning-worker.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/orin-associate-at-1m.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/orin-decision-models.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/orin-embedding-specialist.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/peer-only-replica-pools.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/proxy-lobes-pairwise-auth.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/quick-wins-finish-the-rename.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/qwen3-8-cortex-upgrade.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/qwen3-8-flash-next-gguf-candidate.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/qwen3-8-gguf-llamacpp.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/realtime-voice-to-voice-astro-test-site-151.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/realtime-ws-server-vad-149.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/reranker-calibration-227.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/stt-readiness-truth-155.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/thor-cortex-speculation.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/thor-worker-arm-qwen3-6-35b-a3b-recipes.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/thor-worker-lobe-qwen3-6-35b-a3b.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/unsloth-qat-senses-first-class-orin-variation.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.devague/plans/vllm-0-31-0-fleet.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.eidetic/memory/colleague__public.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.eidetic/memory/default__public.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.eidetic/memory/lobes__public.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.flake8 +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.github/workflows/publish.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.github/workflows/tests.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.gitignore +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/.markdownlint-cli2.yaml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/AGENTS.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/LICENSE +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/QWEN.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/culture.yaml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/VARIATION.template.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/Dockerfile.decider-vllm +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/Dockerfile.embed-st +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/Dockerfile.gateway +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/VARIATION.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/deployment.lock.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.embed.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.gpu.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.override.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.shape.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/docker-compose.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/mg-logwrap.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/qwen3_reranker.jinja +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-orin__orin-embed/qwen3_thinking_tool_parser.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/Dockerfile.gateway +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/Dockerfile.vllm-gemma4 +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/VARIATION.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/deployment.lock.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/docker-compose.override.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/docker-compose.shape.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/docker-compose.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/mg-logwrap.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/qwen3_reranker.jinja +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/deployments/jetson-agx-thor__thor-worker/qwen3_thinking_tool_parser.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/chatterbox-tts.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/colleague-stack.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/comfyui-innereye.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/contracts/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/contracts/lane-safety-runtime.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/contracts/machine-cli-window.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/contracts/realtime-tool-calling.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/decider.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-10-hand-lobe-lfm2-5-1-2b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-20-nemotron-lightning-worker.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-23-qwen3-8-gguf-llamacpp-deviation-ledger.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-25-cortex-replica-pool-199.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-25-lightning-on-orin.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-25-thor-cortex-speculation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-29-deployment-lock-per-box.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-30-peer-only-replica-pools.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-08-31-quick-wins-finish-the-rename.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-09-10-thor-worker-arm-qwen3-6-35b-a3b-recipes.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-09-11-mesh-brain-join.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-09-12-mesh-boot-window-and-capabilities-advert.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-09-13-orin-associate-at-1m.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-09-16-innereye-lobes-hosts-comfyui.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-09-18-hebrew-realtime.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-10-06-mesh-pool-load-sharing.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-10-07-orin-embedding-specialist.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-10-14-orin-decision-models.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-10-17-lane-safety-and-quality-304-307-308-309.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deliveries/2026-10-17-vllm-0-31-0-fleet.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deployment-lock.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/deployment-shapes.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/dspark-speculation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/durable-logs.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/embeddinggemma-2.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-14-accept-referral-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-14-accept-spark-lobe-gb10.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-14-accept-thor-lobe-live-referral-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-14-accept-thor-lobe-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-14-strict-tools-spark-lobe-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-16-proxy-lobes-live-spark-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-17-accept-muse-tool-calling-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-20-accept-embed-deep-gb10.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-21-accept-realtime-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-21-accept-voice-loop-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-22-accept-realtime-voice-to-voice-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-25-accept-by-proxy-spark-f8a9.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-31-accept-multimodal-cortex-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-31-accept-worker-proxy-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-07-31-accept-worker-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-04-accept-senses-unsloth-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-10-hand-lobe-budget-derivation.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-10-partial-hand-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-10-partial-hand-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-19-accept-qwen38-1m-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-19-baseline-qwen3.6-cortex-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-19-spike-qwen3.8-official-nightly-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-accept-cortex-local-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-accept-cortex-repoint-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-accept-cortex-repoint-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-accept-dual-cortex-mesh.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-accept-hand-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-accept-worker-hand-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-baseline-worker-qwen35b-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-hand-thor-blocked-reattributed.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-spike-lightning-thor-no-go.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-20-spike-nightly-sm110-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-21-measure-reasoning-effort-cortex-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-23-spike-qwen38-gguf-llamacpp-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-24-spike-dspark-cortex-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-25-accept-cortex-replica-pool-spark-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-25-accept-spark-lobe-dspark-render.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-25-baseline-cortex-single-owner.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-25-measure-associate-budget-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-25-orin-board-state-lightning-spikes.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-25-spike-lightning-llamacpp-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-25-spike-lightning-vllm-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-25-spike-thor-cortex-speculation.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-26-accept-orin-associate.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-26-associate-gateway-auth-front.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-28-accept-capacity-relative-pool-thor-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-30-accept-peer-only-pool-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-30-accept-reranker-template-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-30-baseline-orin-cortex-pinned.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-08-30-baseline-reranker-untemplated-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-10-accept-nvidia-35b-a3b-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-10-accept-thor-worker-flip.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-10-baseline-thor-cortex-pre-244.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-10-spike-nvidia-35b-a3b-preboot-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-10-sweep-mtp-depth-nvidia-35b-a3b-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-10-thor-backup-and-rollback-dryrun-244.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-10-thor-pressure-floor-244.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-11-accept-thor-reranker-template-senses-unproxy.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-11-accept-worker-proxy-spark-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-12-accept-mesh-boot-window-fleet.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-12-accept-mesh-brain-join-fleet.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-12-baseline-mesh-cutover.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-13-accept-orin-associate-1m.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-13-measure-associate-budget-orin-1m.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-13-spike-lightning-thor-v029.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-16-accept-innereye-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-16-baseline-comfyui-venv-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-16-innereye-render-via-thor.png +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-16-t2-comfyui-container-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-19-accept-multimodal-gemma26b-native-context-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-23-spike-flash-next-worker-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-hebrew-realtime-audio-hardware-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-hebrew-realtime-first-loop-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-hebrew-realtime-spike-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-hebrew-realtime-streaming-bluetts-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-hebrew-realtime-vad-ab-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-hebrew-stt-spike-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-hebrew-tts-ab-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-09-hebrew-voice-lane-senses12b-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-06-accept-mesh-member-lanes.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-accept-innereye-replace-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-accept-orin-embed.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-h2h/run1.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-h2h/run1.table.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-h2h/run2-nomic.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-h2h/run2-nomic.table.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-h2h/run3-qwen3vl.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-h2h/run3-qwen3vl.table.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-h2h-code-retrieval-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-rollback-orin-embed-to-orin-associate.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-spike-embeddinggemma2-sidecar-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-07-spike-orin-embed-vllm-8b.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-14-ab-clef-vllm-vs-sidecar-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-14-accept-clef-bf16-interim-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-14-accept-decider-2b-spark2.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-14-accept-orin-decider.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-14-build-clef-sets.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-14-spike-clef-nf4-transformers-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-14-verify-clef-quants.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-accept-lane-safety-hardware.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-accept-vllm-031-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-accept-vllm-031-spark-cortex.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-accept-vllm-031-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-baseline-and-scaffold-orin.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-baseline-and-scaffold-thor.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-baseline-nightly-spark2.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-dryrun-r1-rollout-spark-copy.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-17-verify-cpucap-running-vllm-spark.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-18-accept-vllm-031-spark-cortex.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-18-accept-vllm-031-spark2.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/2026-10-18-sweep-vllm-031-fleet.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/README-dspark-arms.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/README-realtime-acceptance.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-a16-dspark-262k.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-a16-none-262k.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-dspark-262k.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-dspark-768k.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-mtp-n2-262k.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-mtp-n2-768k.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-mtp-n2.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-none-262k.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/evidence/arm-none-768k.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/experiments/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/experiments/qwen3.8-flash-next-gguf-llamacpp-vllm.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/experiments/qwen3.8-flash-next-nvfp4-thor-reference.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/gateway-fleet.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/gemma-4-12b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/gemma-4-12b-qat-w4a16.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/gemma-4-31b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/gemma4-mtp-draft.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/image-ledger.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/lfm2.5-1.2b-hand.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/machine-profiles.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/measuring-lane-performance.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/mistral-small-3.2-24b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/model-switch-playbook.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/nemotron-3-embed-8b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/nemotron-3.5-lightning-30b-a3b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/nomic-embed-code.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/nvidia-qwen3.6-35b-a3b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/openai-api.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/operating-a-deployment.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/orin-associate-deployment.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/orin-embed-deployment.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/orin-profiles.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/parakeet-stt.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-17-compose-chain-unification-init-repair-doctor-stale.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-21-realtime-ws-server-vad-149.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-24-stt-readiness-truth-155.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-25-lobes-capabilities-tells-you-where-a-lobe-is-serve.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-31-every-lobe-in-the-mesh-can-see-the-spark-reaches-t.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-07-31-thor-worker-lobe-qwen3-6-35b-a3b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-10-hand-lobe-lfm2-5-1-2b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-19-qwen3-8-cortex-upgrade.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-20-nemotron-lightning-worker.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-25-cortex-replica-pool-199.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-25-lightning-on-orin.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-25-thor-cortex-speculation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-27-capacity-relative-pool-routing.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-29-deployment-lock-per-box.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-30-peer-only-replica-pools.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-30-reranker-calibration-227.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-08-31-quick-wins-finish-the-rename.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-10-thor-worker-arm-qwen3-6-35b-a3b-recipes-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-10-thor-worker-arm-qwen3-6-35b-a3b-recipes.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-11-mesh-brain-join-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-11-mesh-brain-join.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-12-mesh-boot-window-and-capabilities-advert-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-12-mesh-boot-window-and-capabilities-advert.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-13-orin-associate-at-1m-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-13-orin-associate-at-1m.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-16-innereye-lobes-hosts-comfyui-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-16-innereye-lobes-hosts-comfyui.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-18-hebrew-realtime-HANDOFF.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-18-hebrew-realtime-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-18-hebrew-realtime.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-09-23-flash-next-worker-on-thor.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-06-mesh-pool-load-sharing-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-06-mesh-pool-load-sharing.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-07-orin-embedding-specialist-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-07-orin-embedding-specialist.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-14-orin-decision-models-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-14-orin-decision-models.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-17-lane-safety-HANDOFF.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-17-lane-safety-and-quality-304-307-308-309-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-17-lane-safety-and-quality-304-307-308-309.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-17-vllm-0-31-0-fleet-split.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-17-vllm-0-31-0-fleet.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/2026-10-18-vllm-031-HANDOFF.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/colour_check.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/colour_spark.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/eg2_controls.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/fleet_sweep.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/grammar_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/mesh_roles.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/shape_bench.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/strict-payload.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/strict_controls.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/strict_replay.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/xgr_post_think_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/plans/vllm-031-probes/xgr_stop_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3-14b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3-32b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3-embedding-0.6b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3-embedding-4b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3-reranker-0.6b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3-vl-embedding-8b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3-vl-reranker-8b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3.5-4b-minor.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3.6-27b-nvfp4-multimodal.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3.6-27b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3.6-27b-text-nvfp4-mtp.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3.6-35b-a3b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3.8-27b-gguf-llamacpp.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen3.8-27b-nvfp4.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/qwen38-rollout-notes.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/realtime-pipeline.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/runbooks/lane-safety-r1-rollout.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/secret-rotation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/skill-sources.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-17-compose-chain-unification-init-repair-doctor-stale.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-21-realtime-voice-to-voice-astro-test-site-151.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-21-realtime-ws-server-vad-149.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-24-stt-readiness-truth-155.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-25-lobes-capabilities-tells-you-where-a-lobe-is-serve.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-31-every-lobe-in-the-mesh-can-see-the-spark-reaches-t.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-07-31-thor-worker-lobe-qwen3-6-35b-a3b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-04-unsloth-qat-senses-first-class-orin-variation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-09-hand-lobe-lfm2-5-1-2b.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-19-qwen3-8-cortex-upgrade.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-20-nemotron-lightning-worker.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-22-qwen3-8-gguf-llamacpp.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-24-dspark-speculation-on-the-spark-cortex.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-25-cortex-replica-pool-199.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-25-lightning-on-orin.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-25-thor-cortex-speculation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-27-capacity-relative-pool-routing.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-27-flash-next-on-vllm.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-27-qwen3-8-flash-next-gguf-candidate.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-29-deployment-lock-per-box.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-30-peer-only-replica-pools.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-30-reranker-calibration-227.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-08-31-quick-wins-finish-the-rename.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-09-10-thor-worker-arm-qwen3-6-35b-a3b-recipes.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-09-11-mesh-brain-join.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-09-12-mesh-boot-window-and-capabilities-advert.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-09-13-orin-associate-at-1m.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-09-16-innereye-lobes-hosts-comfyui.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-09-18-hebrew-realtime.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-09-23-flash-next-worker-on-thor.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-10-06-mesh-pool-load-sharing.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-10-07-orin-embedding-specialist.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-10-14-orin-decision-models.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-10-17-lane-safety-and-quality-304-307-308-309.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/specs/2026-10-17-vllm-0-31-0-fleet.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/superpowers/plans/2026-05-22-scaffold-cli-sibling.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/superpowers/specs/2026-05-22-scaffold-cli-sibling-design.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/tensorrt-llm-investigation.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/thor-worker-flip-rollout-notes.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/tuning-profiles.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/validate-tiers.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/vllm-nightly-migration.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/docs/worker-lightning-rollout-notes.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/examples/minor-evals/smoke.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/__main__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/_metrics.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/assess.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/bench/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/bench/cat_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/bench/cat_score.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/bench/compare.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/bench/report.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/catalog.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/_doctor_lane_safety.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/_doctor_plugin.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/_role_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/assess.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/benchmark.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/calibrate.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/capabilities.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/cli.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/doctor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/eval.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/explain.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/fleet.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/governor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/init.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/learn.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/logs.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/measure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/mesh.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/overview.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/route.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/run.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/serve.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/status.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/stop.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/switch.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/tunnel.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/up.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/watcher.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_commands/whoami.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_errors.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_live.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_output.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_role_swap.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/cli/_runtime_ops.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/decider_sidecar/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/decider_sidecar/clef_vllm.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/decider_sidecar/server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/embed_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/embed_sidecar/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/embed_sidecar/server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/explain/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/explain/catalog.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/__main__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_authlog.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_config.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_mesh_config.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_mesh_roster.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_mesh_routes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_mesh_routing.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_mesh_wire.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_pressure_policy.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_readiness.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_realtime.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_replicas.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_routing.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_selection.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/_tier_request.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/gateway/server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/lane_keys.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/_registry.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/_strategy.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/_traits.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/blackwell.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/generic.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/orin.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/spark.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/machines/thor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/minor/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/minor/_client.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/minor/governance.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/gateway-only.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/machine-as-brain.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/orin-associate.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/orin-cortex.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/orin-decider.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/orin-embed.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/orin-lobe.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/orin-small.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/spark-innereye.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/spark-lobe.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/thor-lobe.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/thor-muse.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/builtin_shapes/thor-worker.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/loader.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/render.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/schema.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/shape_render.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/profiles/shapes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/__main__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_conversation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_floor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_pcm.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_readiness.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_segmenter.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_sentences.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_session.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_settings.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_speculation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_timings.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_tts_text.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_turn.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_vocalize.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/_wire.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/app.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/audio_facade.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/bluetts_server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/chatterbox_multilingual_server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/chatterbox_server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/protocol.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/realtime/tts_client.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/roles.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/roles_measure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_buildability.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_compose.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_detect.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_env.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_governor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_health.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_lock.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_machine.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_parser.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_pressure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_tunnel.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/runtime/_window.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/cf-tunnel.env.example +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/docker-compose.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/env.example +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.bluetts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.chatterbox +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.chatterbox-ml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.comfyui +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.decider +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.decider-vllm +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.embed-st +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.gateway +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.parakeet +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.realtime +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/Dockerfile.vllm-gemma4 +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/_readiness.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/docker-compose.audio.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/docker-compose.embed.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/docker-compose.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/env.audio.example +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/listen_server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/fleet/qwen3_reranker.jinja +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/lobes-watcher.service.in +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/templates/mg-logwrap.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/variation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/variation_catalog.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/vllm_plugins/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/vllm_plugins/qwen3_thinking_tool_parser.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/watcher/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/watcher/_install.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/lobes/watcher/_run.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/packaging/model-gear/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/packaging/model-gear/pyproject.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/accept-by-proxy.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/accept-shape.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/audio-smoke.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_eval/compare.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_eval/run_nf4_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_eval/run_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_quant/quantize.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_sets/build_sets.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_sets/calibration.manifest.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_sets/incidents.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_sets/probe.manifest.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/clef_sets/routing.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/concurrency-probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/embed_h2h/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/embed_h2h/build_corpus.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/embed_h2h/build_queries.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/embed_h2h/corpus.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/embed_h2h/h2h.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/embed_h2h/prompts.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/embed_h2h/queries.jsonl +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/gen-api-key.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/live-check.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/prefill-depth-curve.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/probe_reranker_calibration.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/realtime-he-accept.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/realtime-smoke.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/realtime-voice-loop.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/scan_deployment_secrets.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/spec-arms.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/spike-preflight.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/stream-measure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/scripts/validate-tiers.sh +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/.env.example +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/.gitignore +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/.nvmrc +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/astro.config.mjs +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/package-lock.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/package.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/proxy/gateway-proxy.mjs +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/public/favicon.svg +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/public/worklets/pcm-capture-processor.js +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/components/ConnectionPanel.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/components/ConversationView.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/components/EventStream.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/components/Footer.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/components/Header.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/components/MicIsland.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/components/SignalMesh.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/layouts/Layout.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/pages/dev-connection.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/pages/dev-events.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/pages/dev-mic.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/pages/index.astro +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/audio-graph.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/audio-playback.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/audio-playback.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/audio-test-doubles.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/connection-panel.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/conversation-view.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/demo-tools.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/dev-mic-harness.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/event-fixtures.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/event-icons.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/event-log.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/event-log.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/mic-capture.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/mic-capture.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/mic-island.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/mic-island.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/no-mic-mute.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/pcm-wire.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/pcm-wire.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/realtime-connection.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/scripts/realtime-events.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/src/styles/global.css +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/test/connection-panel.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/test/conversation-view.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/test/demo-tools.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/test/gateway-proxy.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/test/realtime-connection.test.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/tsconfig.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/site/vitest.config.ts +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/sonar-project.properties +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/conftest.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card/Dockerfile.gateway +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card/VARIATION.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card/deployment.lock.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card/docker-compose.override.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card/docker-compose.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card__fixture-shape/VARIATION.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card__fixture-shape/deployment.lock.toml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.override.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.shape.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/deployments/fixture-card__fixture-shape/docker-compose.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/upgrade_compat/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/upgrade_compat/fleet/docker-compose.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/upgrade_compat/fleet/env.example +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/upgrade_compat/single/docker-compose.yml +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/fixtures/upgrade_compat/single/env.example +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/README.md +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/__init__.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/no-pool-gateway.json +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/regen.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/gateway-only__base.env +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/gateway-only__orin.env +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/gateway-only__spark.env +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/shapes/gateway-only__thor.env +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/switch-plans.txt +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/goldens/template-defaults.env +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_assess.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_assess_perf.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_associate_compose.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_associate_exposure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_associate_gateway_boundaries.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_associate_role.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_audio_he_compose_chain.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_audio_he_goldens.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_audio_he_tts_compose.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_bench_compare.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_bench_report.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_benchmark_all_lobes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_benchmark_window.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_bluetts_dockerfile.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_bluetts_server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_boundary_serves_only.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_buildability_guard.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_calibration_knee.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_capabilities_member_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cat_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cat_score.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_catalog.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_catalog_embed_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_catalog_tiers.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_chatterbox_ml_dockerfile.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_chatterbox_multilingual_server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_chatterbox_pcm16.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_chatterbox_readiness.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_clef_eval.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_clef_quant_index.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_clef_sets.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_benchmark_profiles.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_calibrate.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_capabilities.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_capabilities_replicas.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_eval.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_eval_cat.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_fleet.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_gateway_auth.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_introspection.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_logs.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_measure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_mesh.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_route.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_run.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_runtime.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_tunnel.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_up.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_up_replace.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_cli_wiring.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_client_reasoning_roundtrip.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_colleague_contract.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_comfyui_compose.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_comfyui_dockerfile.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_comfyui_volumes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_compose_chain.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_decider_render.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_decider_sidecar.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_decider_sidecar_vllm.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_deployment_lock.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_deployment_lock_doc.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_detect.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_audio_he.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_fix.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_lane_safety.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_machine_profile.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_mesh_retirement.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_passthrough.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_refresh_plugin.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_repin_version.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_role_command.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_doctor_role_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_dropped_lobe_honesty.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_embed_finetune.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_embed_h2h.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_embed_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_embed_lanes_import.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_embed_overlay.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_embed_sidecar.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_fleet_audio_vad_env.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_fleet_compose_mounts.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_fleet_minor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_fleet_per_machine_knobs.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_fleet_secrets_env_file.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_fleet_template_gateway_env.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_audio_peer.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_audio_routing.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_auth.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_auth_rejection_log.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_busy_e2e.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_capabilities.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_config_proxy.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_config_replicas.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_config_wiring.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_decider.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_decider_mesh.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_embed_deep.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_embed_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_env_passthrough_guard.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_feasibility.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_fleet_doc.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_force_strict.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_get_relay.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_hand_adapters.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_member_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_no_lifecycle_actuator.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_peer_advert.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_peer_only_pool.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_pool.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_pool_capacity_wiring.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_pool_pressure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_pool_saturation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_proxy.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_readiness.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_realtime_ws.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_render_facade.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_replicas.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_routing.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_selection.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_serve_mesh_wiring.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_server.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_status.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_stream_termination.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gateway_tiers.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gemma4_compose.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gemma4_dockerfile.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gen_api_key.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_gitignore_convention.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_governor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_init.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_init_audio_he.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_init_coresidency.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_init_from_lock.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_init_gpu_access.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_init_profile.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_init_shape.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_innereye_ui_port.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_lane_safety_compose.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_lane_safety_knobs_documented.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_lane_state_dir.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_lifecycle_cache_clear.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_live_capabilities.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_lobes_compose_wrapper.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_lock_drift.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_logwrap_backoff.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_logwrap_held.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_logwrap_hold.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_machine_adapter.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_machines.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_config.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_flap_per_name.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_heartbeat_live.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_member_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_naming.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_roster.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_routes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_routing.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_routing_wiring.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_templates.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_verify_reason.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_mesh_wire.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_minor_client.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_minor_governance.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_minor_integration.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_minor_logprobs.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_nightly_migration_doc.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_no_config_byte_identity.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_orin_associate_boot_order.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_orin_associate_shape.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_orin_cortex_shape.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_orin_decider_shape.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_orin_embed_shape.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_orin_gateway_read_timeout.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_orin_lobe_shape.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_overview_live.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_parser.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_peer_referral.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_preserve_thinking_diagnostic.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_pressure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_pressure_policy.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_profile_goldens.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_profile_render.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_profile_schema.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_profiles.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_proxy_integration.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_readiness_peer_probe.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_app_stream_structure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_audio_env_coverage.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_audio_facade.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_continuation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_conversation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_conversation_stream.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_floor.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_floor_segments.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_generate_failure_surfacing.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_generate_stream_settings.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_he_accept_helpers.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_imports.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_parallel_tool_calls.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_pcm.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_protocol.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_readiness.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_segmenter.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_segmenter_eager.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_segmenter_level_gate.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_sentences.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_session.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_settings.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_smoke_helpers.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_speculation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_stt_forward.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_timings.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_tts_gate.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_tts_text.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_turn.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_turn_stream.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_vocalize.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_realtime_wire.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_role_probes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_roles.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_roles_audio_advert.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_roles_audio_language.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_roles_proxied.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_roles_replicas.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_routing_models_member_lanes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_scan_deployment_secrets.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_senses_speculative_config.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_shape_budgets.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_shape_contract_matrix.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_shape_gateway_only.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_shape_goldens.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_shape_host_env_rerender.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_shapes.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_smoke_duo.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_spec_arms.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_spike_preflight.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_status_fleet.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_status_pressure.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_switch_bf16.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_switch_plan_goldens.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_templates_preserve_thinking.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_tier_request.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_tool_parser_plugin.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_tts_client_hebrew_diacritizer.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_tts_pause_and_truncation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_up_no_deps_isolation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_upgrade_compat.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_variation.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_variation_catalog.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_vllm_plugin_thinking.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_watcher.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_wheel_excludes_deployments.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_worker_compose.py +0 -0
- {lobes_cli-0.90.2 → lobes_cli-0.91.0}/tests/test_worker_recipe_knobs.py +0 -0
|
@@ -4,6 +4,34 @@ All notable changes to this project are documented here. The format is based on
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
|
|
5
5
|
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.91.0] - 2026-10-23
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Hebrew Whisper STT (audio-he overlay): decode-quality knobs for long recordings (issue #329) - STT_NO_REPEAT_NGRAM_SIZE (default 6), STT_REPETITION_PENALTY (default 1.0 = off), STT_COMPRESSION_RATIO_MAX (default 2.4), STT_TEMPERATURE_FALLBACK (default 0.2,0.4), STT_LOGPROB_STAT (default median; mean = legacy), STT_MAX_WORD_RUN (default 4; 0/off disables), STT_VAD (default auto) with STT_VAD_THRESHOLD / STT_VAD_MIN_SPEECH_MS; each has an off value that restores the previous decode exactly.
|
|
12
|
+
- Word-run knobs (#329 follow-up): STT_MAX_WORD_RUN (default 4; 0/off disables) TRIMS a run of one word, or one two-word phrase (Unicode word tokens, punctuation ignored), to 3 repeats and keeps the rest of the chunk, so emphatic speech is never dropped; STT_WORD_RUN_FAIL (default 8; 0/off disables) fails a multi-window chunk with a run that long like a compression-ratio failure - retried through the temperature ladder, then dropped with reason=word_run. stt_chunk lines carry word_run=, max_word_run= and word_run_fail=, and a trim logs event=trimmed.
|
|
13
|
+
- Structured stt_chunk (retry / dropped / trimmed / skipped) and per-request stt_request log lines in the stt container, so dropped and retried chunks are observable server-side; stt_request names the request policy (policy=single_window|multi_window stat=mean|median); the client-facing dropped[] field waits for verbose_json (#328).
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- STT_LOGPROB_STAT now defaults to median (threshold STT_MIN_AVG_LOGPROB=-0.35 unchanged) for multi-window uploads: on a live A/B on the DGX Spark the mean gate dropped 118 of 215 decoded chunks and the median gate 39 of 215.
|
|
18
|
+
- Single-window requests (every realtime turn) keep the pre-#329 confidence gate exactly: the mean statistic, one greedy decode, no temperature fallback, a word run trimmed but never failed. A short silence hallucination (mean -0.58, median -0.15) would pass a median gate.
|
|
19
|
+
- The stt handler runs the whole transcription (resample, Silero scan, every Whisper decode) off the event loop in a worker thread, one transcription at a time behind one lock, so /v1/health/ready stays responsive during a long upload; the Silero wrapper's lock now covers a whole chunk scan (reset plus every window).
|
|
20
|
+
- DecodeSettings, DecodePolicy (both frozen), ChunkOutcome and RequestSummary are dataclasses; STT_MIN_AVG_LOGPROB accepts the same off tokens as the other knobs (false and no included).
|
|
21
|
+
- Dockerfile.whisper-stt installs silero-vad==6.2.1 with --no-deps (its torchaudio dependency would replace the base image torch); the server loads the bundled TorchScript model by path and falls back to decoding every chunk if it cannot.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Hebrew batch STT no longer passes a phrase looped to the token cap (n-gram block plus a per-character zlib compression-ratio check), and re-decodes a chunk failing either gate at sampling temperatures before dropping it (#329). The live A/B measured the median gate with a fail-at-4 word-run gate; the single-window policy and the trim-versus-fail word-run design have not run live.
|
|
26
|
+
- The last chunk of a multi-window upload is never VAD-skipped (a short closing word was lost), and a chunk too short for one VAD window counts as speech.
|
|
27
|
+
- A retry that comes back empty after an earlier attempt failed a gate is a drop (reason=empty_after_retry), logged and counted as one, never as a recovery.
|
|
28
|
+
|
|
29
|
+
## [0.90.3] - 2026-10-18
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- Mesh: plain `embedder` / `reranker` on a box that does not host them (the DGX Spark) answered 404 even though several members serve identical lanes, because their fingerprints advertised `quantization: unknown` and the strict pool rule never pools an unknown (#297). Every card profile now declares `quantization = "none"` for both pooling gears (the lanes pass no `--quantization`), rendered as `EMBED_QUANTIZATION=none` / `RERANK_QUANTIZATION=none` and added to `env.example`; `lobes doctor --fix` appends them to existing deployments. The strict rule itself is unchanged.
|
|
34
|
+
|
|
7
35
|
## [0.90.2] - 2026-10-18
|
|
8
36
|
|
|
9
37
|
### Changed
|
|
@@ -977,7 +977,9 @@ rollback, restore the backup —, `...-accept-orin-embed.txt`). **UNVALIDATED:**
|
|
|
977
977
|
everything beyond code retrieval — prose/docs/math, real image/video/audio
|
|
978
978
|
retrieval (the probes were synthetic), MRL quality, cross-model agreement —
|
|
979
979
|
is issue **#296**; the plain-`embedder`-on-the-Spark pooling finding is issue
|
|
980
|
-
**#297** (a pre-existing strict-fingerprint rule, not caused by this shape
|
|
980
|
+
**#297** (a pre-existing strict-fingerprint rule, not caused by this shape;
|
|
981
|
+
fixed 2026-10-18 by declaring `quantization = "none"` for the embedder and
|
|
982
|
+
reranker in every card profile, so their fingerprints carry a real value). No
|
|
981
983
|
consumer is switched implicitly: `EIDETIC_EMBED_MODEL` / `COHERENCE_EMBED_MODEL`
|
|
982
984
|
opt in by lane id and switching means re-embedding. See
|
|
983
985
|
`docs/orin-embed-deployment.md`, `docs/embeddinggemma-2.md` and `lobes explain
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: lobes-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.91.0
|
|
4
4
|
Summary: lobes — run, assess, and switch the local vLLM model.
|
|
5
5
|
Project-URL: Homepage, https://github.com/agentculture/lobes-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/agentculture/lobes-cli/issues
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
# Hebrew realtime — a duplex Hebrew voice session with tool calling
|
|
2
|
+
|
|
3
|
+
An **opt-in overlay** on top of the realtime audio overlay
|
|
4
|
+
([`realtime-pipeline.md`](realtime-pipeline.md)): the same `GET /v1/realtime`
|
|
5
|
+
WebSocket session, serving Hebrew. A person speaks Hebrew, the box answers in
|
|
6
|
+
Hebrew, and the model can call tools that the **client** owns. The English
|
|
7
|
+
overlay's files are byte-identical with or without it.
|
|
8
|
+
|
|
9
|
+
If you are building a client, read the contract instead:
|
|
10
|
+
[`contracts/realtime-tool-calling.md`](contracts/realtime-tool-calling.md).
|
|
11
|
+
|
|
12
|
+
> **Status (the #108 rule).** Everything here was built and measured on ONE box
|
|
13
|
+
> — the DGX Spark GB10, 2026-09-18 — from a hand-carried deployment of this
|
|
14
|
+
> branch's wheel. The measurements are real and cited; the *packaged* path
|
|
15
|
+
> (`lobes init --audio --audio-lang he` from a released wheel) is
|
|
16
|
+
> **DECLARED / UNVALIDATED** until an acceptance transcript from that path
|
|
17
|
+
> lands under `docs/evidence/`. No Jetson has run any of it (issue #276).
|
|
18
|
+
|
|
19
|
+
## The stack
|
|
20
|
+
|
|
21
|
+
| stage | engine | notes |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| VAD / turn-taking | Silero, `server_vad` | PulseVAD was tried and false-triggered on all four non-speech clips |
|
|
24
|
+
| STT | `ivrit-ai/whisper-large-v3-turbo`, transformers fp16 (`Dockerfile.whisper-stt`, `listen_server_whisper.py`) | ~170–200 ms per turn |
|
|
25
|
+
| generate | the gateway's own `/v1/chat/completions`, `OPENAI_MODEL=multimodal` | on the Spark: `nvidia/Gemma-4-26B-A4B-NVFP4`, `gemma4` tool + reasoning parsers, 32–44 tok/s; native 262144 window since 2026-09-19 (was 32768; `docs/evidence/2026-09-19-accept-multimodal-gemma26b-native-context-spark.txt`) |
|
|
26
|
+
| TTS (shipped default) | Chatterbox **Multilingual**, `language_id="he"`, phonikud niqqud (`Dockerfile.chatterbox-ml`) | seconds per sentence; needs niqqud; samples non-deterministically, hence a runaway guard |
|
|
27
|
+
| TTS (measured best) | **BlueTTS**, CPU ONNX (`Dockerfile.bluetts`, `lobes.realtime.bluetts_server`) | 93–305 ms per sentence, its own G2P, no niqqud wanted — see *BlueTTS* below for why it is not the default |
|
|
28
|
+
|
|
29
|
+
Evidence: `docs/evidence/2026-09-hebrew-*.txt` (seven files) and
|
|
30
|
+
`docs/evidence/2026-09-hebrew-realtime-streaming-bluetts-spark.txt`.
|
|
31
|
+
|
|
32
|
+
### Three things that are easy to get wrong
|
|
33
|
+
|
|
34
|
+
- **Whisper hallucinates on non-speech** — this fine-tune emits plain text such
|
|
35
|
+
as `תודה רבה` for a door slam, and its `<|nospeech|>` probability reads 0.000.
|
|
36
|
+
The mean token log-probability separates cleanly (speech ≥ −0.12,
|
|
37
|
+
hallucination ≤ −0.58), so the sidecar drops a transcript below
|
|
38
|
+
`STT_MIN_AVG_LOGPROB` (default −0.35; `off` disables). 4/4 non-speech clips
|
|
39
|
+
dropped, 22/22 speech clips kept.
|
|
40
|
+
- **Chatterbox Multilingual without niqqud is unusable for Hebrew** (92 % → ~9 %
|
|
41
|
+
round-trip WER with phonikud), and a Latin-script word derails it.
|
|
42
|
+
- **An NVFP4A16 export of Gemma 4 12B damaged Hebrew** where bf16 and Google's
|
|
43
|
+
QAT checkpoint did not. Check Hebrew output before promoting a quantization.
|
|
44
|
+
|
|
45
|
+
### Batch transcription: formats and long clips
|
|
46
|
+
|
|
47
|
+
`POST /v1/audio/transcriptions` takes any format the image's ffmpeg decodes —
|
|
48
|
+
m4a/aac, mp3, ogg/opus, webm, flac, and WAV at any bit depth — not only 16-bit
|
|
49
|
+
PCM WAV. A 16-bit RIFF/WAVE upload (the realtime bridge's own turn audio) is
|
|
50
|
+
still read directly and never touches ffmpeg; anything else is transcoded to
|
|
51
|
+
16 kHz mono PCM16 first, and an undecodable upload is a 400 `invalid_audio`.
|
|
52
|
+
|
|
53
|
+
An upload longer than Whisper's 30 s window is **chunked**, not refused: each
|
|
54
|
+
cut goes at the quietest 20 ms frame in the last 5 s of its window, every
|
|
55
|
+
window is judged on its own (silence skip, gates and retries, below), and the
|
|
56
|
+
non-empty pieces are joined with a space. `STT_MAX_AUDIO_SECONDS` (default 600) caps the
|
|
57
|
+
total; past it the reply is a 413 `clip_too_long`. The upload byte cap
|
|
58
|
+
(`STT_MAX_UPLOAD_BYTES`, 16 MiB) still applies first, so ten minutes of
|
|
59
|
+
uncompressed 16 kHz WAV (~19 MB) needs it raised; a compressed voice note does
|
|
60
|
+
not. MEASURED on the DGX Spark, 2026-10-09, with synthetic BlueTTS speech: an
|
|
61
|
+
80 s m4a was transcribed in 3 windows in 3.9 s with every sentence intact at
|
|
62
|
+
the seams; mp3, ogg/opus, webm, 24-bit WAV and m4a single sentences each came
|
|
63
|
+
back verbatim. A real microphone recording is still UNVALIDATED (#108).
|
|
64
|
+
|
|
65
|
+
### Decode quality: loops, retries and silence (issue #329)
|
|
66
|
+
|
|
67
|
+
On a real 56-minute recording, the decode above failed in two ways. A two-word
|
|
68
|
+
phrase looped until the token cap, and a loop is high-confidence, so it passed
|
|
69
|
+
the gate. The gate also dropped 61 of 125 chunks whole with no second try, and
|
|
70
|
+
some of them were real speech. Each chunk now goes through the steps below.
|
|
71
|
+
Each step has a knob whose off value gives back the old decode exactly (for
|
|
72
|
+
`STT_LOGPROB_STAT`, the legacy value `mean`).
|
|
73
|
+
|
|
74
|
+
**Two request policies.** A request of **one** window (30 s or less), which
|
|
75
|
+
covers every realtime turn, and a **multi-window** upload are judged
|
|
76
|
+
differently. The `stt_request` log line names the policy a request used
|
|
77
|
+
(`policy=single_window stat=mean` or `policy=multi_window stat=median`).
|
|
78
|
+
|
|
79
|
+
| | single window (realtime) | multi-window upload |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| confidence statistic | `mean`, always (the pre-#329 gate) | `STT_LOGPROB_STAT` (default `median`) |
|
|
82
|
+
| decodes per chunk | one greedy decode, never retried | greedy, then `STT_TEMPERATURE_FALLBACK` |
|
|
83
|
+
| word run of 4–7 | trimmed to 3 | trimmed to 3 |
|
|
84
|
+
| word run of 8 or more | trimmed to 3 | fails the chunk: retry, then drop |
|
|
85
|
+
| Silero VAD | never consulted | every chunk except the last |
|
|
86
|
+
|
|
87
|
+
The −0.35 threshold was measured on the **mean**. A short silence
|
|
88
|
+
hallucination can fail the mean while passing a median gate: in live data,
|
|
89
|
+
4 tokens with log-probabilities −1.9, −0.1, −0.1, −0.2 have a mean of −0.58
|
|
90
|
+
and a median of −0.15. Among short (6 tokens or fewer) first attempts that
|
|
91
|
+
failed the mean gate, 7 of 24 would have passed a median gate. A long upload
|
|
92
|
+
gains more from the median than it loses, but a realtime turn is usually
|
|
93
|
+
short, so it keeps the mean. It also keeps one greedy decode: re-sampling a
|
|
94
|
+
silent turn's hallucination at a higher temperature until one sample passes
|
|
95
|
+
would add up to two decodes of latency for nothing.
|
|
96
|
+
|
|
97
|
+
1. **Silence skipping (`STT_VAD`).** On an upload longer than one window,
|
|
98
|
+
Silero VAD reads each chunk first. Three kinds of chunk are never skipped:
|
|
99
|
+
a single-window request (the bridge's own VAD already opened that turn, and
|
|
100
|
+
a one-word reply may hold very little speech), the **last** chunk of an
|
|
101
|
+
upload (`plan_chunks` leaves it 0–5 s long, so a closing word may hold less
|
|
102
|
+
than `STT_VAD_MIN_SPEECH_MS` of speech), and a chunk shorter than one 32 ms
|
|
103
|
+
VAD window (there is nothing to judge, so it counts as speech). If Silero
|
|
104
|
+
finds less than `STT_VAD_MIN_SPEECH_MS` of speech, Whisper never decodes
|
|
105
|
+
the chunk, so a silent chunk cannot turn into `תודה רבה`. The scan stops as
|
|
106
|
+
soon as it has found enough speech, so a speech chunk costs only a few VAD
|
|
107
|
+
calls. The image installs the `silero-vad` wheel `--no-deps`, because its
|
|
108
|
+
torchaudio dependency would replace the base image's torch. The server loads
|
|
109
|
+
the bundled TorchScript model by path. If Silero fails to load, or fails on
|
|
110
|
+
a call, the server logs a warning and decodes the chunk as before.
|
|
111
|
+
2. **Loop prevention at decode time.** `STT_NO_REPEAT_NGRAM_SIZE` sets the
|
|
112
|
+
transformers n-gram block. `STT_REPETITION_PENALTY` is off by default,
|
|
113
|
+
because it penalises every recurring token, Hebrew prefix letters included.
|
|
114
|
+
Beam search was considered and left out. It would cost about 4× the GPU
|
|
115
|
+
time on a shared box, and the per-token log-probabilities the gate reads
|
|
116
|
+
would need different bookkeeping.
|
|
117
|
+
3. **Gates per attempt.** The first is the confidence gate,
|
|
118
|
+
`STT_MIN_AVG_LOGPROB` (−0.35) on the request policy's statistic (above).
|
|
119
|
+
The second is OpenAI Whisper's zlib compression ratio,
|
|
120
|
+
`STT_COMPRESSION_RATIO_MAX`, default 2.4, on both policies. The ratio is
|
|
121
|
+
taken one byte per character, not over UTF-8. Every Hebrew letter shares
|
|
122
|
+
one UTF-8 lead byte, which alone pushes ordinary Hebrew prose to about 2.3.
|
|
123
|
+
Counted per character, the same prose scores about 1.7, like English. Those
|
|
124
|
+
figures come from synthetic text, not from a recording. The third is the
|
|
125
|
+
**word-run failure check**, `STT_WORD_RUN_FAIL`, default 8, on multi-window
|
|
126
|
+
uploads only (next step).
|
|
127
|
+
4. **Word runs: trim, or fail only when far beyond speech.** A word run is one
|
|
128
|
+
word, or one two-word phrase, repeated back to back. Words are Unicode
|
|
129
|
+
word tokens compared case-folded and without niqqud, so punctuation between
|
|
130
|
+
the repeats does not break the run. The n-gram block misses such a run (the
|
|
131
|
+
punctuation tokens make every n-gram different), and so does the
|
|
132
|
+
compression ratio (one short run inside a full chunk of speech). Emphatic
|
|
133
|
+
speech repeats words too ("no no no no, I disagree", or a realtime "yes yes
|
|
134
|
+
yes yes"), and failing the whole chunk for it would drop 30 s of correct
|
|
135
|
+
text. So a run of `STT_MAX_WORD_RUN` (4) or more is **trimmed** to
|
|
136
|
+
`STT_MAX_WORD_RUN − 1` repeats, and the rest of the chunk is kept. The cut
|
|
137
|
+
goes from the last kept repeat to the end of the run, so the punctuation
|
|
138
|
+
and words after it follow on. Only a run of `STT_WORD_RUN_FAIL` (8) or
|
|
139
|
+
more, far beyond normal speech, fails a multi-window chunk with
|
|
140
|
+
`reason=word_run`. A single window only trims. The trade-off: the live A/B
|
|
141
|
+
below found hallucinated one-word runs of 11 and 5, both absent from a
|
|
142
|
+
reference transcript. With these defaults the 11 is re-decoded or dropped,
|
|
143
|
+
but the 5 is trimmed to 3, so three words of that hallucination stay in the
|
|
144
|
+
text.
|
|
145
|
+
5. **Retry before dropping (`STT_TEMPERATURE_FALLBACK`, multi-window only).**
|
|
146
|
+
A chunk that fails any gate is decoded again at each sampling temperature
|
|
147
|
+
in turn. Sampling uses the full distribution, and the gate undoes the
|
|
148
|
+
temperature, so it reads the same quantity every time. The first result
|
|
149
|
+
that passes every gate is kept. If none passes, the chunk is dropped, as
|
|
150
|
+
before, with the failing gates as its `reason` (`low_logprob`,
|
|
151
|
+
`compression_ratio`, `word_run`). An empty or tags-only transcript on the
|
|
152
|
+
first attempt counts as silence and is never retried. An empty retry after
|
|
153
|
+
a failed attempt is a **drop** (`reason=empty_after_retry`), not a
|
|
154
|
+
recovery: the first attempt heard something, and it is gone.
|
|
155
|
+
|
|
156
|
+
| knob | default | off | what it does |
|
|
157
|
+
|---|---|---|---|
|
|
158
|
+
| `STT_LOGPROB_STAT` | `median` | `mean` | Which statistic the confidence gate reads on a multi-window upload. `median` ignores a few rare tokens, such as a name, in an otherwise confident chunk. A single window always reads `mean`. The log lines carry both. |
|
|
159
|
+
| `STT_NO_REPEAT_NGRAM_SIZE` | `6` | `0` | Blocks any repeated token n-gram within a chunk. |
|
|
160
|
+
| `STT_REPETITION_PENALTY` | `1.0` | `1.0` | transformers' repetition penalty. `1.1` is the issue's suggestion. |
|
|
161
|
+
| `STT_COMPRESSION_RATIO_MAX` | `2.4` | `off` | Treats a chunk whose text compresses better than this as a loop. |
|
|
162
|
+
| `STT_MAX_WORD_RUN` | `4` | `0` / `off` | Trims a run of one word or two-word phrase this long to one fewer repeats. Values below 2 fall back to the default. |
|
|
163
|
+
| `STT_WORD_RUN_FAIL` | `8` | `0` / `off` | Fails a multi-window chunk with a run this long (retry, then drop). Values below 2 fall back to the default. |
|
|
164
|
+
| `STT_TEMPERATURE_FALLBACK` | `0.2,0.4` | `off` | Re-decode temperatures for a failing multi-window chunk. Each one is another Whisper decode. |
|
|
165
|
+
| `STT_VAD` | `auto` | `off` | Skips non-speech chunks of a multi-window upload with Silero before decoding. |
|
|
166
|
+
| `STT_VAD_THRESHOLD` | `0.5` | — | Silero speech probability per 32 ms window. |
|
|
167
|
+
| `STT_VAD_MIN_SPEECH_MS` | `250` | — | How much speech makes a chunk worth decoding. |
|
|
168
|
+
|
|
169
|
+
**Off the event loop.** The handler runs the whole transcription (resample,
|
|
170
|
+
VAD scan and every Whisper decode) in a worker thread, as it already did the
|
|
171
|
+
ffmpeg transcode, so `/v1/health/ready` answers while a long upload decodes.
|
|
172
|
+
One transcription runs at a time, behind one lock, so concurrent requests
|
|
173
|
+
never share the GPU or Silero's recurrent state. A realtime turn that arrives
|
|
174
|
+
during a long upload still waits for that upload to finish.
|
|
175
|
+
|
|
176
|
+
**Observability.** The stt container logs one line for each retried, dropped,
|
|
177
|
+
trimmed or skipped chunk:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
stt_chunk event=retry chunk=3/18 attempt=0 temperature=0.0 reason=compression_ratio avg_logprob=-0.04 median_logprob=-0.01 compression_ratio=9.80 word_run=30 policy=multi_window stat=median ... tokens=440
|
|
181
|
+
stt_chunk event=dropped chunk=7/18 attempt=2 temperature=0.4 reason=low_logprob ... text='...'
|
|
182
|
+
stt_chunk event=dropped chunk=8/18 attempt=1 temperature=0.2 reason=empty_after_retry ... previous_reason=compression_ratio
|
|
183
|
+
stt_chunk event=trimmed chunk=5/18 word_run=5 runs=1 max_word_run=4
|
|
184
|
+
stt_chunk event=skipped chunk=9/18 reason=no_speech
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
It also logs one summary line per request:
|
|
188
|
+
`stt_request policy= stat= chunks= decoded= vad_skipped= retried= recovered= dropped= trimmed= decodes= seconds=`.
|
|
189
|
+
Clients cannot see any of this yet. A `dropped[]` field and per-segment
|
|
190
|
+
`avg_logprob` / `compression_ratio` wait for `response_format=verbose_json`
|
|
191
|
+
(#328).
|
|
192
|
+
|
|
193
|
+
**Live A/B, DGX Spark, 2026-10-23 — why the default is now the median.** The
|
|
194
|
+
first build of this section ran on the live Hebrew `stt` lane against two
|
|
195
|
+
private recordings, cut into 16 requests of 480 s (269 chunks). Counts only:
|
|
196
|
+
|
|
197
|
+
- **Loops are fixed.** The longest run of one phrase fell from 220 (pre-#329)
|
|
198
|
+
to 3 at the defaults of the time.
|
|
199
|
+
- **The mean gate was the binding constraint.** It still dropped 118 of 215
|
|
200
|
+
decoded chunks (55 %); retries recovered 7. Every drop was `low_logprob`.
|
|
201
|
+
- **The median gate dropped 39 of 215 (18 %)**, and every window then carried
|
|
202
|
+
at least as much text as a reference transcript of the same span (a rough
|
|
203
|
+
speech reference, not ground truth). That is why `median` became the
|
|
204
|
+
multi-window default.
|
|
205
|
+
- **It let through a confident hallucination.** In two windows a short word
|
|
206
|
+
was repeated 11 and 5 times in a row, with punctuation between, and a
|
|
207
|
+
two-word run of 5 sat in the same span. The word was absent from the
|
|
208
|
+
reference transcript. That is what the word-run knobs were added for.
|
|
209
|
+
- Silero loaded in the built image and skipped 54 of the 269 chunks.
|
|
210
|
+
|
|
211
|
+
A second run measured the median default with a word-run gate that **failed**
|
|
212
|
+
the chunk at 4 repeats (an earlier design of step 4): still 39 of 215 dropped
|
|
213
|
+
(18 %), the longest run of one phrase 3, three chunks hitting the word-run
|
|
214
|
+
gate. 15 of the 16 requests in both runs were multi-window. The 16th, the
|
|
215
|
+
20 s tail of one recording, was a single window: it returned 6 characters
|
|
216
|
+
in the second run, where the pre-#329 build returned none. That one request
|
|
217
|
+
is the only single-window evidence, and it predates the single-window
|
|
218
|
+
policy.
|
|
219
|
+
|
|
220
|
+
**Status (#108).** The single-window/multi-window split, the trim-versus-fail
|
|
221
|
+
word-run design, the never-skipped last chunk, `empty_after_retry` and the
|
|
222
|
+
off-loop, serialized transcription are unit-tested with a fake decoder and a
|
|
223
|
+
fake VAD only; none of them has run live. 18 % still misses the issue's 10 %
|
|
224
|
+
drop target. To validate, re-run the recordings on the live lane, plus a set
|
|
225
|
+
of short realtime turns, and read the `stt_request` and `stt_chunk` lines.
|
|
226
|
+
Acceptance means no phrase repeated more than 3 times in a row, fewer than
|
|
227
|
+
10 % of non-silent chunks dropped, and still no text from silence.
|
|
228
|
+
|
|
229
|
+
## Latency: what was built, and what it bought
|
|
230
|
+
|
|
231
|
+
Measured live, a human on a reSpeaker XVF3800, from the moment the server
|
|
232
|
+
decides the turn ended to the first audio byte:
|
|
233
|
+
|
|
234
|
+
| configuration | first audio |
|
|
235
|
+
|---|---|
|
|
236
|
+
| whole-reply generate + Chatterbox Multilingual | 2.6 s (one sentence), 7.3 s (longer) |
|
|
237
|
+
| + sentence streaming (`GENERATE_STREAM`, default on) + BlueTTS | 0.67–1.0 s |
|
|
238
|
+
| + hidden speculation (`VAD_EAGER_MS=250`) | **1–113 ms** |
|
|
239
|
+
|
|
240
|
+
…plus, always, the silence the VAD waits through before it believes the turn
|
|
241
|
+
ended (`VAD_SILENCE_MS`). Once speculation is on, that wait is essentially the
|
|
242
|
+
whole perceived delay:
|
|
243
|
+
|
|
244
|
+
```text
|
|
245
|
+
perceived delay ≈ max( VAD_SILENCE_MS , VAD_EAGER_MS + pipeline )
|
|
246
|
+
pipeline ≈ 600 ms = STT ~170 + first clause ~300 + TTS ~120
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
| knob | default | what it does |
|
|
250
|
+
|---|---|---|
|
|
251
|
+
| `GENERATE_STREAM` | `true` | Stream the generate call; speak sentence by sentence. `false` is the exact previous path. **On for every language, English included.** |
|
|
252
|
+
| `REPLY_FIRST_CLAUSE_MIN_CHARS` | `24` | How long the opening clause must be before a comma may end the first spoken piece. `5` on the Spark: first audio ~1.1 s → ~0.6 s, at the price of a short first piece. |
|
|
253
|
+
| `VAD_MIN_LEVEL_PCT` | `0` (off) | **Ignore quiet voices** (background talk, a TV, the next room). A chunk counts as speech only while the PEAK input level — held ~250 ms, like a level meter — is at least this % of full scale; below it, speech opens no turn, interrupts no reply and does not keep a turn open. Silero cannot do this: a far voice scores as high as a near one. On a reSpeaker direct speech peaks at 15–55 % and the room floor at 1–2 %, so 3–5 is a sensible start (`4` on the Spark). Peak, not RMS — speech RMS is only 5–9 %. Depends on microphone gain and AGC: tune per device. |
|
|
254
|
+
| `VAD_EAGER_MS` | `0` (off) | **Hidden speculation.** At this much provisional silence the bridge runs STT → generate → TTS out of sight. Speech resumes → discarded without trace. Turn confirmed → adopted, but only if the real generate request is byte-identical to the speculative one. Costs a wasted STT + generate on every mid-sentence pause. |
|
|
255
|
+
| `CONTINUATION_WINDOW_MS` | `0` (off) | **Continuation merge.** An onset this soon after a silence commit is the speaker carrying on: the reply stops (inside the barge-in guard window too), the half-turn leaves history, both halves are re-transcribed as one turn. One take-back per utterance. What makes a short `VAD_SILENCE_MS` affordable. |
|
|
256
|
+
| `CONTINUATION_TOOL_HOLD_MS` | `500` | With the merge on, a finished tool call is held this long after the commit — a call the client already has cannot be taken back. Speech is never held. A fixed cost on every tool turn. |
|
|
257
|
+
|
|
258
|
+
The Spark runs `VAD_SILENCE_MS=500`, `VAD_EAGER_MS=160`,
|
|
259
|
+
`CONTINUATION_WINDOW_MS=1200`: plain replies 328–370 ms after the commit
|
|
260
|
+
(~830–870 ms after the speaker stops), tool turns 1.16–1.64 s.
|
|
261
|
+
|
|
262
|
+
**Honest limits.** The continuation merge has been proven on a recording only —
|
|
263
|
+
no live session has yet produced one. A noise burst with no words in it still
|
|
264
|
+
counts as a barge-in. A merged turn sends two `transcription.completed` events
|
|
265
|
+
(the half, then the whole) and nothing on the wire marks the second as
|
|
266
|
+
superseding the first. English words inside Hebrew speech are misheard and hard
|
|
267
|
+
to follow when spoken (issue #277).
|
|
268
|
+
|
|
269
|
+
## BlueTTS — built, measured, deliberately not the default
|
|
270
|
+
|
|
271
|
+
`lobes.realtime.bluetts_server` is a drop-in for the `chatterbox` service (same
|
|
272
|
+
port keys, same `POST /v1/audio/synthesize` → raw PCM16 mono 24 kHz). CPU-only,
|
|
273
|
+
resamples its native 44.1 kHz, strips any niqqud (it runs its own RenikudPlus
|
|
274
|
+
G2P — leave the bridge's `PHONIKUD_MODEL_PATH` unset), and reports ready only
|
|
275
|
+
after a warm-up synthesis has loaded that G2P.
|
|
276
|
+
|
|
277
|
+
The engine **code** (github.com/maxmelichov/BlueTTS) is MIT and pinned by
|
|
278
|
+
commit; `Dockerfile.bluetts` installs its dependencies from the engine's own
|
|
279
|
+
`uv.lock`, because an unpinned resolve picked a `renikud-plus` that 404s at
|
|
280
|
+
warm-up. The **weights** repo declared **no licence** when this was written, so:
|
|
281
|
+
|
|
282
|
+
- nothing in this repo downloads the weights or names their repo as a default;
|
|
283
|
+
- the operator downloads them deliberately and mounts the directory at
|
|
284
|
+
`BLUETTS_ONNX_DIR`;
|
|
285
|
+
- the Hebrew overlay's shipped voice stays Chatterbox Multilingual, and no
|
|
286
|
+
compose file wires BlueTTS in.
|
|
287
|
+
|
|
288
|
+
To run it, add a service built from `Dockerfile.bluetts` with that mount and
|
|
289
|
+
point the bridge's `TTS_URL` at it. `BLUETTS_VOICE` (`noa`), `BLUETTS_STEPS`
|
|
290
|
+
(5; 2–3 buys ~20–25 %, quality not auditioned), `BLUETTS_SPEED`.
|
|
291
|
+
|
|
292
|
+
## Audio hardware notes (both cost hours)
|
|
293
|
+
|
|
294
|
+
- **Check the pipewire card profile first.** The reSpeaker XVF3800 had flipped
|
|
295
|
+
to its *digital* output at 34 % volume: almost nothing reached the speaker on
|
|
296
|
+
its 3.5 mm jack, its echo canceller reported `converged: false` all day, and
|
|
297
|
+
the session interrupted itself (6 times in 7 turns). `pactl set-card-profile
|
|
298
|
+
<card> output:analog-stereo+input:analog-stereo` plus full sink volume →
|
|
299
|
+
`converged: true`, zero self-interruptions. The profile can flip when the
|
|
300
|
+
device re-enumerates, and the source/sink numeric suffixes change with it.
|
|
301
|
+
- **Wire the speaker to the device that owns the microphone.** An echo
|
|
302
|
+
canceller only cancels what it plays itself; audio sent to a monitor over
|
|
303
|
+
HDMI has no reference and makes echo worse. For the same reason you cannot
|
|
304
|
+
test a session by playing a recording through that speaker — the canceller
|
|
305
|
+
removes it.
|
|
306
|
+
- **A client must drain its player before exiting.** The server delivers ahead
|
|
307
|
+
of the playhead; closing the player on `response.done` cut replies
|
|
308
|
+
mid-sentence. In a browser the same gap shows up as stutter unless playback
|
|
309
|
+
(re)starts a jitter buffer ahead of now.
|
|
310
|
+
|
|
311
|
+
## Selecting it
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
lobes init --fleet --audio --audio-lang he # dry-run; add --apply
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
materialises `docker-compose.audio-he.yml`, `env.audio-he.example` (merged
|
|
318
|
+
append-only into `.env`), `Dockerfile.whisper-stt`, `Dockerfile.chatterbox-ml`,
|
|
319
|
+
`Dockerfile.bluetts` and `listen_server_whisper.py`; `lobes fleet up` includes
|
|
320
|
+
the overlay when it is present. `--audio` alone, or `--audio-lang en`, is
|
|
321
|
+
exactly the English overlay. Language is an overlay choice — not a shape, not a
|
|
322
|
+
variation.
|
|
323
|
+
|
|
324
|
+
`GET /capabilities` names what is served: `stt`/`tts` carry the declared
|
|
325
|
+
`model`, `runtime` and — only when declared — `language`.
|
|
@@ -90,12 +90,18 @@ feasible = true
|
|
|
90
90
|
model = "Qwen/Qwen3-Embedding-0.6B"
|
|
91
91
|
gpu_mem_util = 0.06
|
|
92
92
|
max_model_len = 8192
|
|
93
|
+
# quantization "none": the lane passes no --quantization, so the engine loads the
|
|
94
|
+
# bf16 checkpoint as-is. Declared so the mesh fingerprint is a real value, not
|
|
95
|
+
# "unknown", and identical members pool on a box that does not host them (#297).
|
|
96
|
+
quantization = "none"
|
|
93
97
|
|
|
94
98
|
[roles.reranker]
|
|
95
99
|
feasible = true
|
|
96
100
|
model = "Qwen/Qwen3-Reranker-0.6B"
|
|
97
101
|
gpu_mem_util = 0.06
|
|
98
102
|
max_model_len = 8192
|
|
103
|
+
# quantization "none": as for the embedder above (#297).
|
|
104
|
+
quantization = "none"
|
|
99
105
|
|
|
100
106
|
# The opt-in `innereye` render tenant (ComfyUI, issue #82) is vetoed on an
|
|
101
107
|
# unrecognised card for the same reason as muse/worker/associate: this
|
|
@@ -494,6 +494,10 @@ feasible = true
|
|
|
494
494
|
model = "Qwen/Qwen3-Embedding-0.6B"
|
|
495
495
|
gpu_mem_util = 0.06
|
|
496
496
|
max_model_len = 8192
|
|
497
|
+
# quantization "none": the lane passes no --quantization, so the engine loads the
|
|
498
|
+
# bf16 checkpoint as-is. Declared so the mesh fingerprint is a real value, not
|
|
499
|
+
# "unknown", and identical members pool on a box that does not host them (#297).
|
|
500
|
+
quantization = "none"
|
|
497
501
|
# attention_backend: overlaid from lobes.machines.get("orin") — TRITON_ATTN, a
|
|
498
502
|
# conservative first-boot carry-over of Thor's sm_110 pooling divergence that
|
|
499
503
|
# was NOT independently re-tested on sm_87. This gear booted healthy that way
|
|
@@ -504,6 +508,8 @@ feasible = true
|
|
|
504
508
|
model = "Qwen/Qwen3-Reranker-0.6B"
|
|
505
509
|
gpu_mem_util = 0.06
|
|
506
510
|
max_model_len = 8192
|
|
511
|
+
# quantization "none": as for the embedder above (#297).
|
|
512
|
+
quantization = "none"
|
|
507
513
|
# attention_backend + enforce_eager: overlaid from lobes.machines.get("orin") —
|
|
508
514
|
# TRITON_ATTN + enforce_eager=true, the same carried-over Jetson safe-boot
|
|
509
515
|
# choice. This gear booted healthy that way and its ordering probe passed
|
|
@@ -106,12 +106,18 @@ feasible = true
|
|
|
106
106
|
model = "Qwen/Qwen3-Embedding-0.6B"
|
|
107
107
|
gpu_mem_util = 0.06
|
|
108
108
|
max_model_len = 8192
|
|
109
|
+
# quantization "none": the lane passes no --quantization, so the engine loads the
|
|
110
|
+
# bf16 checkpoint as-is. Declared so the mesh fingerprint is a real value, not
|
|
111
|
+
# "unknown", and identical members pool on a box that does not host them (#297).
|
|
112
|
+
quantization = "none"
|
|
109
113
|
|
|
110
114
|
[roles.reranker]
|
|
111
115
|
feasible = true
|
|
112
116
|
model = "Qwen/Qwen3-Reranker-0.6B"
|
|
113
117
|
gpu_mem_util = 0.06
|
|
114
118
|
max_model_len = 8192
|
|
119
|
+
# quantization "none": as for the embedder above (#297).
|
|
120
|
+
quantization = "none"
|
|
115
121
|
|
|
116
122
|
# --- innereye: the declared peak-GiB figure (issue #268, plan
|
|
117
123
|
# innereye-lobes-hosts-comfyui, t6) --------------------------------------
|
|
@@ -141,6 +141,10 @@ feasible = true
|
|
|
141
141
|
model = "Qwen/Qwen3-Embedding-0.6B"
|
|
142
142
|
gpu_mem_util = 0.06
|
|
143
143
|
max_model_len = 8192
|
|
144
|
+
# quantization "none": the lane passes no --quantization, so the engine loads the
|
|
145
|
+
# bf16 checkpoint as-is. Declared so the mesh fingerprint is a real value, not
|
|
146
|
+
# "unknown", and identical members pool on a box that does not host them (#297).
|
|
147
|
+
quantization = "none"
|
|
144
148
|
# attention_backend: overlaid from the shared SM_110 trait — TRITON_ATTN
|
|
145
149
|
# (the FlashInfer/FLASH_ATTN pooling path hangs on sm_110).
|
|
146
150
|
|
|
@@ -149,5 +153,7 @@ feasible = true
|
|
|
149
153
|
model = "Qwen/Qwen3-Reranker-0.6B"
|
|
150
154
|
gpu_mem_util = 0.06
|
|
151
155
|
max_model_len = 8192
|
|
156
|
+
# quantization "none": as for the embedder above (#297).
|
|
157
|
+
quantization = "none"
|
|
152
158
|
# attention_backend + enforce_eager: overlaid from the shared SM_110 trait —
|
|
153
159
|
# TRITON_ATTN + enforce_eager=true (CUDA-graph capture is unstable here).
|
|
@@ -39,6 +39,15 @@ RUN pip install --no-cache-dir uv \
|
|
|
39
39
|
fastapi \
|
|
40
40
|
"uvicorn[standard]"
|
|
41
41
|
|
|
42
|
+
# Silero VAD (issue #329, STT_VAD) — skips non-speech chunks before Whisper
|
|
43
|
+
# decodes them. The same package and version the realtime bridge pins in
|
|
44
|
+
# uv.lock, but installed --no-deps: its declared torchaudio dependency would
|
|
45
|
+
# pull a torchaudio wheel pinned to a DIFFERENT torch and replace the base
|
|
46
|
+
# image's validated one. listen_server_whisper.py loads the wheel's bundled
|
|
47
|
+
# TorchScript model by path (never `import silero_vad`, whose __init__
|
|
48
|
+
# imports torchaudio), and falls back to decoding every chunk if it cannot.
|
|
49
|
+
RUN uv pip install --system --no-cache-dir --no-deps "silero-vad==6.2.1"
|
|
50
|
+
|
|
42
51
|
# Do NOT bake STT_MODEL into the image — it is served from the mounted HF
|
|
43
52
|
# cache volume (docker-compose.audio.yml's `stt` service already mounts
|
|
44
53
|
# ${HF_CACHE}), exactly like every other fleet lane. HF_HUB_DISABLE_XET=1
|
|
@@ -87,6 +87,41 @@ services:
|
|
|
87
87
|
# 'תודה רבה'). Measured 2026-09-18: speech >= -0.12, hallucinations <= -0.58.
|
|
88
88
|
# `off` disables the gate.
|
|
89
89
|
- STT_MIN_AVG_LOGPROB=${STT_MIN_AVG_LOGPROB:--0.35}
|
|
90
|
+
# Decode-quality knobs (issue #329; docs/hebrew-realtime.md). Each has
|
|
91
|
+
# an OFF value that restores the pre-#329 decode exactly.
|
|
92
|
+
# STT_LOGPROB_STAT: `median` (default since the 2026-10-23 live A/B;
|
|
93
|
+
# ignores a few rare tokens in an otherwise confident chunk) or `mean`
|
|
94
|
+
# (the legacy statistic -0.35 was first measured on). Applies to
|
|
95
|
+
# multi-window uploads only: a single-window request (every realtime
|
|
96
|
+
# turn) always uses the mean and one greedy decode, as before #329.
|
|
97
|
+
- STT_LOGPROB_STAT=${STT_LOGPROB_STAT:-median}
|
|
98
|
+
# STT_NO_REPEAT_NGRAM_SIZE: block any repeated token n-gram at decode
|
|
99
|
+
# time (stops a phrase looping to the token cap). 0 = off.
|
|
100
|
+
- STT_NO_REPEAT_NGRAM_SIZE=${STT_NO_REPEAT_NGRAM_SIZE:-6}
|
|
101
|
+
# STT_REPETITION_PENALTY: transformers' repetition penalty. 1.0 = off
|
|
102
|
+
# (default: it penalises every recurring Hebrew prefix letter too).
|
|
103
|
+
- STT_REPETITION_PENALTY=${STT_REPETITION_PENALTY:-1.0}
|
|
104
|
+
# STT_COMPRESSION_RATIO_MAX: a chunk whose text compresses better than
|
|
105
|
+
# this (zlib, one byte per character) is a loop. `off` disables.
|
|
106
|
+
- STT_COMPRESSION_RATIO_MAX=${STT_COMPRESSION_RATIO_MAX:-2.4}
|
|
107
|
+
# STT_MAX_WORD_RUN: a run of one word (or two-word phrase) this many
|
|
108
|
+
# times in a row is TRIMMED to one fewer repeats. 0/`off` disables.
|
|
109
|
+
- STT_MAX_WORD_RUN=${STT_MAX_WORD_RUN:-4}
|
|
110
|
+
# STT_WORD_RUN_FAIL: a run this long fails a multi-window chunk like a
|
|
111
|
+
# loop (retry, then drop); a single window only trims. 0/`off` disables.
|
|
112
|
+
- STT_WORD_RUN_FAIL=${STT_WORD_RUN_FAIL:-8}
|
|
113
|
+
# STT_TEMPERATURE_FALLBACK: sampling temperatures a multi-window chunk
|
|
114
|
+
# failing any gate is re-decoded at before it is dropped (a single
|
|
115
|
+
# window is never retried). `off` = drop at once.
|
|
116
|
+
- STT_TEMPERATURE_FALLBACK=${STT_TEMPERATURE_FALLBACK:-0.2,0.4}
|
|
117
|
+
# STT_VAD: `auto` skips non-speech chunks of a multi-window upload with
|
|
118
|
+
# Silero before decoding (never a single-window/realtime turn; falls
|
|
119
|
+
# back to decoding everything if Silero cannot load); `off`.
|
|
120
|
+
- STT_VAD=${STT_VAD:-auto}
|
|
121
|
+
# STT_VAD_THRESHOLD / STT_VAD_MIN_SPEECH_MS: a chunk is speech once this
|
|
122
|
+
# many ms of 32 ms windows score at or above the threshold.
|
|
123
|
+
- STT_VAD_THRESHOLD=${STT_VAD_THRESHOLD:-0.5}
|
|
124
|
+
- STT_VAD_MIN_SPEECH_MS=${STT_VAD_MIN_SPEECH_MS:-250}
|
|
90
125
|
# STT_RUNTIME: informational — names the serving stack for
|
|
91
126
|
# GET /capabilities; the container fixed on transformers, not a
|
|
92
127
|
# switchable knob.
|
|
@@ -117,6 +117,83 @@ STT_LANGUAGE=he
|
|
|
117
117
|
# real speech >= -0.12, hallucinations <= -0.58. `off` disables it.
|
|
118
118
|
STT_MIN_AVG_LOGPROB=-0.35
|
|
119
119
|
|
|
120
|
+
# --- Decode quality (issue #329) ------------------------------------------
|
|
121
|
+
# Measured on one real 56-minute recording before these knobs existed: a
|
|
122
|
+
# two-word phrase looped to the token cap (a loop is HIGH-confidence, so the
|
|
123
|
+
# gate above passes it) and half the chunks were dropped whole, some of them
|
|
124
|
+
# real speech. Every knob below has an OFF value that restores that previous
|
|
125
|
+
# decode exactly. The defaults are starting points (the issue's and OpenAI
|
|
126
|
+
# Whisper's); a live A/B on the DGX Spark (2026-10-23) then moved
|
|
127
|
+
# STT_LOGPROB_STAT to `median` and added the word-run knobs — see
|
|
128
|
+
# docs/hebrew-realtime.md. Every retried, dropped, trimmed or skipped chunk
|
|
129
|
+
# logs one `stt_chunk event=...` line (reason, avg/median log-probability,
|
|
130
|
+
# compression ratio, word run, attempt), and every request one
|
|
131
|
+
# `stt_request policy=...` summary line, in the stt container's log.
|
|
132
|
+
#
|
|
133
|
+
# Two request policies. A SINGLE-window request (<= 30 s — every realtime
|
|
134
|
+
# turn) keeps the pre-#329 gate exactly: the MEAN log-probability against
|
|
135
|
+
# STT_MIN_AVG_LOGPROB, one greedy decode, no retry, and a word run only
|
|
136
|
+
# trimmed. A MULTI-window upload uses STT_LOGPROB_STAT, the
|
|
137
|
+
# STT_TEMPERATURE_FALLBACK ladder and STT_WORD_RUN_FAIL.
|
|
138
|
+
|
|
139
|
+
# STT_LOGPROB_STAT: which statistic STT_MIN_AVG_LOGPROB is compared with on
|
|
140
|
+
# a multi-window upload. `median` (default — robust to a few rare tokens, e.g.
|
|
141
|
+
# a name, in an otherwise confident chunk; on the live A/B it dropped 39 of
|
|
142
|
+
# 215 decoded chunks against the mean's 118) or `mean` (the legacy statistic
|
|
143
|
+
# -0.35 was first measured on). A single-window request always uses `mean`.
|
|
144
|
+
STT_LOGPROB_STAT=median
|
|
145
|
+
|
|
146
|
+
# STT_NO_REPEAT_NGRAM_SIZE: forbid any token n-gram from repeating within a
|
|
147
|
+
# chunk at decode time. 0 = off.
|
|
148
|
+
STT_NO_REPEAT_NGRAM_SIZE=6
|
|
149
|
+
|
|
150
|
+
# STT_REPETITION_PENALTY: transformers' repetition penalty (>= 1.0). 1.0 = off,
|
|
151
|
+
# the default: it penalises EVERY recurring token, including Hebrew's prefix
|
|
152
|
+
# letters, so it is an accuracy risk the n-gram block is not. 1.1 to try it.
|
|
153
|
+
STT_REPETITION_PENALTY=1.0
|
|
154
|
+
|
|
155
|
+
# STT_COMPRESSION_RATIO_MAX: OpenAI Whisper's loop check — a chunk whose text
|
|
156
|
+
# compresses better than this under zlib is treated as a loop. Measured one
|
|
157
|
+
# byte per character, so ordinary Hebrew scores like English (~1.6-1.7).
|
|
158
|
+
# `off` disables.
|
|
159
|
+
STT_COMPRESSION_RATIO_MAX=2.4
|
|
160
|
+
|
|
161
|
+
# STT_MAX_WORD_RUN: a run of one word, or one two-word phrase, this many
|
|
162
|
+
# times in a row (punctuation between does not break the run) is TRIMMED to
|
|
163
|
+
# STT_MAX_WORD_RUN - 1 repeats; the rest of the chunk is kept. 4 = three
|
|
164
|
+
# repeats are left alone, 4-7 become three ("no no no no, I disagree" is
|
|
165
|
+
# ordinary speech). 0/`off` disables trimming.
|
|
166
|
+
STT_MAX_WORD_RUN=4
|
|
167
|
+
|
|
168
|
+
# STT_WORD_RUN_FAIL: a run this long is far beyond normal speech, so on a
|
|
169
|
+
# multi-window upload it fails the chunk like a loop: retried, then dropped
|
|
170
|
+
# with reason=word_run. Catches the confident short-word hallucination the
|
|
171
|
+
# n-gram block and the compression ratio miss (the live A/B found runs of 11
|
|
172
|
+
# and 5: 11 is re-decoded or dropped, 5 is trimmed to 3). A single-window
|
|
173
|
+
# request only trims. 0/`off` never fails on a word run.
|
|
174
|
+
STT_WORD_RUN_FAIL=8
|
|
175
|
+
|
|
176
|
+
# STT_TEMPERATURE_FALLBACK: comma-separated sampling temperatures in (0, 1]. A
|
|
177
|
+
# multi-window chunk failing the confidence gate, the compression check or
|
|
178
|
+
# the word-run check is re-decoded at each in turn and the first result
|
|
179
|
+
# passing all three is kept; if none does (or a retry comes back empty), the
|
|
180
|
+
# chunk is dropped. Each retry is one more Whisper decode. A single-window
|
|
181
|
+
# request is never retried. `off` = no retry.
|
|
182
|
+
STT_TEMPERATURE_FALLBACK=0.2,0.4
|
|
183
|
+
|
|
184
|
+
# STT_VAD: `auto` runs Silero VAD over each chunk of an upload longer than one
|
|
185
|
+
# 30 s window and skips the ones without speech, so silence never reaches
|
|
186
|
+
# Whisper (where it hallucinates text). A single-window request — every
|
|
187
|
+
# realtime turn — is never skipped, nor is the last (short) chunk of an
|
|
188
|
+
# upload or a chunk under one 32 ms VAD window. Falls back to decoding every
|
|
189
|
+
# chunk when Silero cannot load. `off` disables.
|
|
190
|
+
STT_VAD=auto
|
|
191
|
+
|
|
192
|
+
# STT_VAD_THRESHOLD / STT_VAD_MIN_SPEECH_MS: a chunk counts as speech once at
|
|
193
|
+
# least STT_VAD_MIN_SPEECH_MS of its 32 ms windows score >= STT_VAD_THRESHOLD.
|
|
194
|
+
STT_VAD_THRESHOLD=0.5
|
|
195
|
+
STT_VAD_MIN_SPEECH_MS=250
|
|
196
|
+
|
|
120
197
|
# === Hebrew TTS: Chatterbox Multilingual sidecar (hebrew-realtime plan,
|
|
121
198
|
# task t11 — approved deviation d5, operator 2026-09-18) ===================
|
|
122
199
|
# docker-compose.audio-he.yml's `chatterbox` service overrides
|
|
@@ -149,6 +149,9 @@ EMBED_MAX_MODEL_LEN=8192
|
|
|
149
149
|
# 0.06 load-tested 2026-06-19; 0.025 fails with "No available memory for the cache
|
|
150
150
|
# blocks" (vLLM's pooling runner still reserves a cache-block budget).
|
|
151
151
|
EMBED_GPU_MEM_UTIL=0.06
|
|
152
|
+
# Declared for the mesh fingerprint only (the lane passes no --quantization): a real
|
|
153
|
+
# value lets identical embedder members pool on a box that does not host one (#297).
|
|
154
|
+
EMBED_QUANTIZATION=none
|
|
152
155
|
# Internal URL the gateway uses to reach the embedding backend.
|
|
153
156
|
EMBED_URL=http://vllm-embed:8000
|
|
154
157
|
# Attention backend for the pooling runner. "auto" (the shipped default) is
|
|
@@ -215,6 +218,8 @@ RERANK_MODEL=Qwen/Qwen3-Reranker-0.6B
|
|
|
215
218
|
RERANK_SERVED_NAME=Qwen/Qwen3-Reranker-0.6B
|
|
216
219
|
RERANK_MAX_MODEL_LEN=8192
|
|
217
220
|
RERANK_GPU_MEM_UTIL=0.06
|
|
221
|
+
# As EMBED_QUANTIZATION above (#297).
|
|
222
|
+
RERANK_QUANTIZATION=none
|
|
218
223
|
# Internal URL the gateway uses to reach the reranker backend.
|
|
219
224
|
RERANK_URL=http://vllm-rerank:8000
|
|
220
225
|
# Attention backend for the pooling runner — same "auto" sentinel/rationale as
|