lobes-cli 0.45.0__tar.gz → 0.45.2__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.
Files changed (419) hide show
  1. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.github/workflows/publish.yml +12 -0
  2. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.github/workflows/tests.yml +6 -0
  3. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/CHANGELOG.md +34 -0
  4. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/PKG-INFO +1 -1
  5. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/machine-profiles.md +37 -10
  6. lobes_cli-0.45.2/docs/orin-profiles.md +183 -0
  7. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/pyproject.toml +1 -1
  8. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/uv.lock +1 -1
  9. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.agex/data/pr/events.jsonl +0 -0
  10. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/ask-colleague/SKILL.md +0 -0
  11. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  12. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  13. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  14. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  15. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  16. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  17. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/challenge/SKILL.md +0 -0
  18. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/cicd/SKILL.md +0 -0
  19. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  20. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  21. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  22. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  23. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  24. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/communicate/SKILL.md +0 -0
  25. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  26. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  27. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  28. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  29. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  30. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/deviate/SKILL.md +0 -0
  31. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  32. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  33. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/model-runner/SKILL.md +0 -0
  34. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/model-runner/scripts/model-runner.sh +0 -0
  35. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/recall/SKILL.md +0 -0
  36. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/recall/scripts/recall.sh +0 -0
  37. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/remember/SKILL.md +0 -0
  38. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/remember/scripts/remember.sh +0 -0
  39. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/run-tests/SKILL.md +0 -0
  40. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
  41. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/scope/SKILL.md +0 -0
  42. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
  43. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  44. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  45. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  46. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/summarize-delivery/SKILL.md +0 -0
  47. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/think/SKILL.md +0 -0
  48. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/think/scripts/think.sh +0 -0
  49. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/version-bump/SKILL.md +0 -0
  50. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
  51. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.claude/skills.local.yaml.example +0 -0
  52. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/current +0 -0
  53. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/current_plan +0 -0
  54. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
  55. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
  56. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
  57. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
  58. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
  59. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
  60. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
  61. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
  62. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
  63. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
  64. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
  65. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
  66. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
  67. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
  68. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
  69. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
  70. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/model-gear-now-serves-an-embedding-gear-qwen3-embe.json +0 -0
  71. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
  72. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/proxy-lobes-pairwise-auth.json +0 -0
  73. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
  74. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/frames/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
  75. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-adds-a-third-middle-model-tier-and-pressure.json +0 -0
  76. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-exposes-the-full-colleague-runtime-stack-as.json +0 -0
  77. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-fits-the-machine-it-lands-on-one-command-det.json +0 -0
  78. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-gateway-relays-sse-streams-frame-by-frame-th.json +0 -0
  79. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-never-advertises-a-capability-it-cannot-serv.json +0 -0
  80. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.json +0 -0
  81. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-preserves-qwen-thinking-traces-across-multi.json +0 -0
  82. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-serves-strict-grammar-constrained-tool-calls.json +0 -0
  83. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-serves-the-brain-shape-you-choose-machine-as.json +0 -0
  84. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-serves-the-mesh-brain-end-state-one-lobe-per.json +0 -0
  85. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.json +0 -0
  86. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.json +0 -0
  87. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-ships-a-per-lobe-benchmark-suite-speed-paral.json +0 -0
  88. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-tells-clients-the-truth-about-a-fleet-a-cons.json +0 -0
  89. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/lobes-unifies-its-generate-lane-on-one-vllm-nightl.json +0 -0
  90. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/model-gear-now-serves-an-embedding-gear-qwen3-embe-2.json +0 -0
  91. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/model-gear-owns-the-audio-i-o-surface-end-to-end-m.json +0 -0
  92. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/proxy-lobes-pairwise-auth.json +0 -0
  93. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/the-gemma-4-12b-gear-gets-speculative-decoding-lob.json +0 -0
  94. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.devague/plans/under-pressure-lobes-tells-you-the-cortex-model-is.json +0 -0
  95. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.eidetic/memory/colleague__public.jsonl +0 -0
  96. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.eidetic/memory/lobes__public.jsonl +0 -0
  97. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.flake8 +0 -0
  98. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.gitignore +0 -0
  99. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/.markdownlint-cli2.yaml +0 -0
  100. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/AGENTS.md +0 -0
  101. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/CLAUDE.md +0 -0
  102. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/LICENSE +0 -0
  103. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/README.md +0 -0
  104. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/culture.yaml +0 -0
  105. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/chatterbox-tts.md +0 -0
  106. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/colleague-stack.md +0 -0
  107. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/deliveries/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  108. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/deployment-shapes.md +0 -0
  109. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/durable-logs.md +0 -0
  110. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/evidence/2026-07-14-accept-referral-thor.txt +0 -0
  111. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/evidence/2026-07-14-accept-spark-lobe-gb10.txt +0 -0
  112. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/evidence/2026-07-14-accept-thor-lobe-live-referral-thor.txt +0 -0
  113. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/evidence/2026-07-14-accept-thor-lobe-thor.txt +0 -0
  114. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/evidence/2026-07-14-strict-tools-spark-lobe-spark.txt +0 -0
  115. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/evidence/2026-07-16-proxy-lobes-live-spark-thor.txt +0 -0
  116. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/gateway-fleet.md +0 -0
  117. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/gemma-4-12b-nvfp4.md +0 -0
  118. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/gemma4-mtp-draft.md +0 -0
  119. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/mistral-small-3.2-24b-nvfp4.md +0 -0
  120. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/openai-api.md +0 -0
  121. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/parakeet-stt.md +0 -0
  122. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
  123. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
  124. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
  125. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
  126. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
  127. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
  128. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
  129. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
  130. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
  131. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
  132. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
  133. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
  134. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
  135. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
  136. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
  137. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
  138. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
  139. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
  140. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
  141. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/plans/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  142. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/qwen3-14b-nvfp4.md +0 -0
  143. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/qwen3-32b-nvfp4.md +0 -0
  144. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/qwen3-embedding-0.6b.md +0 -0
  145. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/qwen3-reranker-0.6b.md +0 -0
  146. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/qwen3.5-4b-minor.md +0 -0
  147. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/qwen3.6-27b-nvfp4.md +0 -0
  148. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/qwen3.6-27b-text-nvfp4-mtp.md +0 -0
  149. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/qwen3.6-35b-a3b-nvfp4.md +0 -0
  150. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/realtime-pipeline.md +0 -0
  151. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/skill-sources.md +0 -0
  152. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-06-12-model-gear-owns-the-audio-i-o-surface-end-to-end-m.md +0 -0
  153. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-06-19-model-gear-now-serves-an-embedding-gear-qwen3-embe-2.md +0 -0
  154. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-06-26-lobes-ships-a-minor-lobe-a-cheap-warm-co-resident.md +0 -0
  155. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-06-26-lobes-ships-a-per-lobe-benchmark-suite-speed-paral.md +0 -0
  156. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-06-29-lobes-adds-a-third-middle-model-tier-and-pressure.md +0 -0
  157. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-06-30-lobes-now-defaults-to-a-spark-duo-the-qwen3-6-27b.md +0 -0
  158. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-06-30-lobes-ships-a-custom-vllm-image-from-nvcr-io-nvidi.md +0 -0
  159. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-01-gemma-4-12b-gear-gets-speculative-decoding-draft.md +0 -0
  160. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-01-lobes-unifies-its-generate-lane-on-one-vllm-nightl.md +0 -0
  161. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-03-lobes-exposes-the-full-colleague-runtime-stack-as.md +0 -0
  162. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-03-under-pressure-lobes-tells-you-the-cortex-model-is.md +0 -0
  163. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-04-lobes-tells-clients-the-truth-about-a-fleet-a-cons.md +0 -0
  164. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-07-lobes-preserves-qwen-thinking-traces-across-multi.md +0 -0
  165. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-09-lobes-never-advertises-a-capability-it-cannot-serv.md +0 -0
  166. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-10-lobes-gateway-relays-sse-streams-frame-by-frame-th.md +0 -0
  167. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-13-lobes-fits-the-machine-it-lands-on-one-command-det.md +0 -0
  168. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-14-lobes-serves-strict-grammar-constrained-tool-calls.md +0 -0
  169. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-14-lobes-serves-the-brain-shape-you-choose-machine-as.md +0 -0
  170. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-14-lobes-serves-the-mesh-brain-end-state-one-lobe-per.md +0 -0
  171. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/specs/2026-07-16-proxy-lobes-pairwise-auth.md +0 -0
  172. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/superpowers/plans/2026-05-22-scaffold-cli-sibling.md +0 -0
  173. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/superpowers/specs/2026-05-22-scaffold-cli-sibling-design.md +0 -0
  174. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/tensorrt-llm-investigation.md +0 -0
  175. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/tuning-profiles.md +0 -0
  176. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/validate-tiers.md +0 -0
  177. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/docs/vllm-nightly-migration.md +0 -0
  178. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/examples/minor-evals/smoke.jsonl +0 -0
  179. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/__init__.py +0 -0
  180. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/__main__.py +0 -0
  181. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/_metrics.py +0 -0
  182. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/assess.py +0 -0
  183. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/bench/__init__.py +0 -0
  184. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/bench/cat_probe.py +0 -0
  185. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/bench/cat_score.py +0 -0
  186. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/bench/compare.py +0 -0
  187. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/bench/report.py +0 -0
  188. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/catalog.py +0 -0
  189. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/__init__.py +0 -0
  190. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/__init__.py +0 -0
  191. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/assess.py +0 -0
  192. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/benchmark.py +0 -0
  193. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/capabilities.py +0 -0
  194. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/cli.py +0 -0
  195. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/doctor.py +0 -0
  196. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/eval.py +0 -0
  197. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/explain.py +0 -0
  198. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/fleet.py +0 -0
  199. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/init.py +0 -0
  200. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/learn.py +0 -0
  201. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/logs.py +0 -0
  202. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/measure.py +0 -0
  203. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/overview.py +0 -0
  204. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/route.py +0 -0
  205. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/run.py +0 -0
  206. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/serve.py +0 -0
  207. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/status.py +0 -0
  208. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/stop.py +0 -0
  209. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/switch.py +0 -0
  210. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/tunnel.py +0 -0
  211. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/up.py +0 -0
  212. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_commands/whoami.py +0 -0
  213. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_errors.py +0 -0
  214. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_live.py +0 -0
  215. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_output.py +0 -0
  216. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/cli/_runtime_ops.py +0 -0
  217. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/explain/__init__.py +0 -0
  218. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/explain/catalog.py +0 -0
  219. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/gateway/__init__.py +0 -0
  220. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/gateway/__main__.py +0 -0
  221. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/gateway/_config.py +0 -0
  222. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/gateway/_pressure_policy.py +0 -0
  223. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/gateway/_readiness.py +0 -0
  224. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/gateway/_routing.py +0 -0
  225. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/gateway/_tier_request.py +0 -0
  226. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/gateway/server.py +0 -0
  227. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/machines/__init__.py +0 -0
  228. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/machines/_registry.py +0 -0
  229. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/machines/_strategy.py +0 -0
  230. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/machines/_traits.py +0 -0
  231. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/machines/blackwell.py +0 -0
  232. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/machines/generic.py +0 -0
  233. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/machines/spark.py +0 -0
  234. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/machines/thor.py +0 -0
  235. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/minor/__init__.py +0 -0
  236. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/minor/_client.py +0 -0
  237. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/minor/governance.py +0 -0
  238. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/__init__.py +0 -0
  239. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin/__init__.py +0 -0
  240. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin/base.toml +0 -0
  241. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin/spark.toml +0 -0
  242. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin/thor.toml +0 -0
  243. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin_shapes/__init__.py +0 -0
  244. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin_shapes/machine-as-brain.toml +0 -0
  245. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin_shapes/orin-small.toml +0 -0
  246. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin_shapes/spark-lobe.toml +0 -0
  247. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/builtin_shapes/thor-lobe.toml +0 -0
  248. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/loader.py +0 -0
  249. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/render.py +0 -0
  250. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/schema.py +0 -0
  251. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/shape_render.py +0 -0
  252. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/profiles/shapes.py +0 -0
  253. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/__init__.py +0 -0
  254. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/__main__.py +0 -0
  255. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/_readiness.py +0 -0
  256. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/_settings.py +0 -0
  257. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/app.py +0 -0
  258. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/audio_facade.py +0 -0
  259. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/chatterbox_server.py +0 -0
  260. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/protocol.py +0 -0
  261. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/realtime/tts_client.py +0 -0
  262. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/roles.py +0 -0
  263. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/roles_measure.py +0 -0
  264. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/runtime/__init__.py +0 -0
  265. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/runtime/_compose.py +0 -0
  266. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/runtime/_detect.py +0 -0
  267. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/runtime/_env.py +0 -0
  268. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/runtime/_health.py +0 -0
  269. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/runtime/_parser.py +0 -0
  270. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/runtime/_pressure.py +0 -0
  271. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/runtime/_tunnel.py +0 -0
  272. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/__init__.py +0 -0
  273. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/cf-tunnel.env.example +0 -0
  274. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/docker-compose.yml +0 -0
  275. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/env.example +0 -0
  276. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/Dockerfile.chatterbox +0 -0
  277. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/Dockerfile.gateway +0 -0
  278. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/Dockerfile.parakeet +0 -0
  279. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/Dockerfile.realtime +0 -0
  280. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/Dockerfile.vllm-gemma4 +0 -0
  281. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/__init__.py +0 -0
  282. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/_readiness.py +0 -0
  283. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/docker-compose.audio.yml +0 -0
  284. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/docker-compose.yml +0 -0
  285. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/env.audio.example +0 -0
  286. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/env.example +0 -0
  287. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/fleet/listen_server.py +0 -0
  288. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/templates/mg-logwrap.sh +0 -0
  289. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/vllm_plugins/__init__.py +0 -0
  290. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/lobes/vllm_plugins/qwen3_thinking_tool_parser.py +0 -0
  291. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/packaging/model-gear/README.md +0 -0
  292. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/packaging/model-gear/pyproject.toml +0 -0
  293. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/scripts/accept-shape.sh +0 -0
  294. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/scripts/audio-smoke.py +0 -0
  295. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/scripts/gen-api-key.py +0 -0
  296. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/scripts/live-check.sh +0 -0
  297. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/scripts/validate-tiers.sh +0 -0
  298. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/sonar-project.properties +0 -0
  299. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/__init__.py +0 -0
  300. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/conftest.py +0 -0
  301. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/fixtures/upgrade_compat/README.md +0 -0
  302. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/fixtures/upgrade_compat/fleet/docker-compose.yml +0 -0
  303. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/fixtures/upgrade_compat/fleet/env.example +0 -0
  304. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/fixtures/upgrade_compat/single/docker-compose.yml +0 -0
  305. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/fixtures/upgrade_compat/single/env.example +0 -0
  306. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/README.md +0 -0
  307. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/__init__.py +0 -0
  308. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/base.env +0 -0
  309. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/regen.py +0 -0
  310. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/orin-small__base.env +0 -0
  311. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/orin-small__spark.env +0 -0
  312. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/orin-small__thor.env +0 -0
  313. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/spark-lobe__base.env +0 -0
  314. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/spark-lobe__spark.env +0 -0
  315. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/spark-lobe__thor.env +0 -0
  316. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/thor-lobe__base.env +0 -0
  317. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/thor-lobe__spark.env +0 -0
  318. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/shapes/thor-lobe__thor.env +0 -0
  319. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/spark.env +0 -0
  320. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/template-defaults.env +0 -0
  321. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/goldens/thor.env +0 -0
  322. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_assess.py +0 -0
  323. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_assess_perf.py +0 -0
  324. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_bench_compare.py +0 -0
  325. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_bench_report.py +0 -0
  326. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_benchmark_all_lobes.py +0 -0
  327. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_boundary_serves_only.py +0 -0
  328. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cat_probe.py +0 -0
  329. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cat_score.py +0 -0
  330. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_catalog.py +0 -0
  331. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_catalog_tiers.py +0 -0
  332. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_chatterbox_pcm16.py +0 -0
  333. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_chatterbox_readiness.py +0 -0
  334. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli.py +0 -0
  335. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_benchmark_profiles.py +0 -0
  336. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_capabilities.py +0 -0
  337. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_eval.py +0 -0
  338. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_eval_cat.py +0 -0
  339. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_fleet.py +0 -0
  340. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_gateway_auth.py +0 -0
  341. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_introspection.py +0 -0
  342. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_logs.py +0 -0
  343. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_measure.py +0 -0
  344. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_route.py +0 -0
  345. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_run.py +0 -0
  346. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_runtime.py +0 -0
  347. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_tunnel.py +0 -0
  348. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_up.py +0 -0
  349. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_cli_wiring.py +0 -0
  350. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_client_reasoning_roundtrip.py +0 -0
  351. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_colleague_contract.py +0 -0
  352. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_detect.py +0 -0
  353. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_doctor.py +0 -0
  354. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_doctor_machine_profile.py +0 -0
  355. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_dropped_lobe_honesty.py +0 -0
  356. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_fleet_minor.py +0 -0
  357. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_fleet_per_machine_knobs.py +0 -0
  358. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_fleet_template_gateway_env.py +0 -0
  359. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_audio_routing.py +0 -0
  360. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_auth.py +0 -0
  361. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_busy_e2e.py +0 -0
  362. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_capabilities.py +0 -0
  363. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_config_proxy.py +0 -0
  364. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_config_wiring.py +0 -0
  365. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_feasibility.py +0 -0
  366. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_fleet_doc.py +0 -0
  367. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_force_strict.py +0 -0
  368. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_proxy.py +0 -0
  369. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_readiness.py +0 -0
  370. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_routing.py +0 -0
  371. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_server.py +0 -0
  372. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_status.py +0 -0
  373. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gateway_tiers.py +0 -0
  374. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gemma4_compose.py +0 -0
  375. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gemma4_dockerfile.py +0 -0
  376. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_gen_api_key.py +0 -0
  377. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_init.py +0 -0
  378. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_init_profile.py +0 -0
  379. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_init_shape.py +0 -0
  380. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_live_capabilities.py +0 -0
  381. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_machines.py +0 -0
  382. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_minor_client.py +0 -0
  383. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_minor_governance.py +0 -0
  384. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_minor_integration.py +0 -0
  385. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_minor_logprobs.py +0 -0
  386. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_nightly_migration_doc.py +0 -0
  387. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_overview_live.py +0 -0
  388. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_parser.py +0 -0
  389. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_peer_referral.py +0 -0
  390. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_preserve_thinking_diagnostic.py +0 -0
  391. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_pressure.py +0 -0
  392. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_pressure_policy.py +0 -0
  393. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_profile_goldens.py +0 -0
  394. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_profile_render.py +0 -0
  395. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_profile_schema.py +0 -0
  396. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_profiles.py +0 -0
  397. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_proxy_integration.py +0 -0
  398. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_readiness_peer_probe.py +0 -0
  399. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_realtime_audio_facade.py +0 -0
  400. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_realtime_imports.py +0 -0
  401. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_realtime_protocol.py +0 -0
  402. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_realtime_readiness.py +0 -0
  403. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_realtime_settings.py +0 -0
  404. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_role_probes.py +0 -0
  405. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_roles.py +0 -0
  406. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_roles_proxied.py +0 -0
  407. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_shape_budgets.py +0 -0
  408. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_shape_contract_matrix.py +0 -0
  409. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_shape_goldens.py +0 -0
  410. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_shapes.py +0 -0
  411. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_smoke_duo.py +0 -0
  412. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_status_fleet.py +0 -0
  413. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_status_pressure.py +0 -0
  414. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_switch_bf16.py +0 -0
  415. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_templates_preserve_thinking.py +0 -0
  416. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_tier_request.py +0 -0
  417. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_tool_parser_plugin.py +0 -0
  418. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_upgrade_compat.py +0 -0
  419. {lobes_cli-0.45.0 → lobes_cli-0.45.2}/tests/test_vllm_plugin_thinking.py +0 -0
@@ -23,6 +23,9 @@ jobs:
23
23
  - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
24
24
 
25
25
  - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4
26
+ with:
27
+ version: "0.11.29"
28
+ enable-cache: true
26
29
 
27
30
  - run: uv python install 3.12
28
31
 
@@ -44,6 +47,9 @@ jobs:
44
47
  - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
45
48
 
46
49
  - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4
50
+ with:
51
+ version: "0.11.29"
52
+ enable-cache: true
47
53
 
48
54
  - run: uv python install 3.12
49
55
 
@@ -79,6 +85,9 @@ jobs:
79
85
  - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
80
86
 
81
87
  - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4
88
+ with:
89
+ version: "0.11.29"
90
+ enable-cache: true
82
91
 
83
92
  - run: uv python install 3.12
84
93
 
@@ -101,6 +110,9 @@ jobs:
101
110
  - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
102
111
 
103
112
  - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4
113
+ with:
114
+ version: "0.11.29"
115
+ enable-cache: true
104
116
 
105
117
  - run: uv python install 3.12
106
118
 
@@ -24,6 +24,9 @@ jobs:
24
24
  fetch-depth: 0
25
25
 
26
26
  - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4
27
+ with:
28
+ version: "0.11.29"
29
+ enable-cache: true
27
30
 
28
31
  - run: uv python install 3.12
29
32
 
@@ -49,6 +52,9 @@ jobs:
49
52
  node-version: '20'
50
53
 
51
54
  - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4
55
+ with:
56
+ version: "0.11.29"
57
+ enable-cache: true
52
58
 
53
59
  - run: uv python install 3.12
54
60
 
@@ -4,6 +4,40 @@ 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.45.2] - 2026-07-17
8
+
9
+ ### Added
10
+
11
+ - `docs/orin-profiles.md` — Jetson AGX Orin 64GB live-validation evidence
12
+ (2026-07-16/17, issue #127 mesh work): the operator profile serving Gemma
13
+ `senses` at its full 128K context on Ampere sm_87 (measured `gpu_mem_util`
14
+ 0.45; 0.30 refused with 2.25 GiB KV vs the 3.08 GiB that 131072 needs; KV
15
+ pool 802,644 tokens / 6.12x concurrency), embedder/reranker probe results,
16
+ why `cortex` (modelopt NVFP4 W4A4) is architecturally infeasible on Ampere,
17
+ three Jetson/sm_87 divergences found live (csv-mode GPU access needs
18
+ `runtime: nvidia`; the Parakeet base image is Spark-only — no sm_87
19
+ kernels; unified-memory use far exceeds the util sum), the validated #127
20
+ cortex proxy wiring, and the gateway→gateway audio-chaining limitation
21
+ (readiness probes `/v1/health/ready`, which a peer gateway 401s/404s —
22
+ first-class audio referral knobs are the phase-2 candidate).
23
+
24
+ ### Changed
25
+
26
+ - `docs/machine-profiles.md` cross-links the Orin worked example from the
27
+ custom-profile section.
28
+
29
+ ### Fixed
30
+
31
+ - `docs/machine-profiles.md` documented `lobes init --machine` for selecting
32
+ a profile; `init`'s actual flag is `--profile` (`--machine` belongs to
33
+ `switch`). The wrong flag made the documented custom-profile flow error out.
34
+
35
+ ## [0.45.1] - 2026-07-17
36
+
37
+ ### Changed
38
+
39
+ - CI hardening: pin `astral-sh/setup-uv`'s `version` to `0.11.29` (was `latest`) and turn on `enable-cache: true` across both workflows (`tests.yml`, `publish.yml`, 6 usages total), so a transient GitHub release-CDN outage can no longer take down every job by failing uv's "resolve latest" step; two identical CI failures on PR #132 (2026-07-16 22:39Z/22:43Z, GitHub 503 HTML from the setup-uv download) prompted the change. The action's SHA pin, tokens, and cache-dependency-glob are unchanged
40
+
7
41
  ## [0.45.0] - 2026-07-16
8
42
 
9
43
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lobes-cli
3
- Version: 0.45.0
3
+ Version: 0.45.2
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
@@ -16,8 +16,21 @@ reference.
16
16
 
17
17
  ## How detection works
18
18
 
19
- When `lobes init` runs (or `lobes serve` / `lobes status` without an explicit
20
- `--machine`), the following steps resolve the machine name:
19
+ The card-detection flow below runs only during **`lobes init`** — either
20
+ auto-detected from the card, or forced with an explicit `--profile <name>` —
21
+ to resolve the per-role `Profile` this document describes and render it into
22
+ `.env`. **`lobes serve` and `lobes status` run no detection at all** and
23
+ accept neither `--profile` nor `--machine`: they only read the deployment's
24
+ already-rendered `.env` (including the persisted `LOBES_PROFILE`) — profile
25
+ selection happens once, at `init` time, not on every `serve`/`status` call.
26
+ `lobes switch` has its own, separate `--machine` flag — a *different*,
27
+ legacy single-model machine-profile knob (`lobes/profiles/__init__.py`'s
28
+ `MachineProfile` / `resolve_machine()`, tuning the single-model template's
29
+ GPU/context defaults), not the fleet `Profile` system covered here; left at
30
+ its default (`auto`), it re-detects the GPU name via `nvidia-smi -L` on its
31
+ own code path, not `lobes/runtime/_detect.py::detect_card()`.
32
+
33
+ The following steps resolve the machine name at `lobes init` time:
21
34
 
22
35
  1. **Gather raw facts** (from `lobes/runtime/_detect.py::detect_card()`):
23
36
  - **Device name**: from `nvidia-smi --query-gpu=name,compute_cap`
@@ -51,8 +64,8 @@ When `lobes init` runs (or `lobes serve` / `lobes status` without an explicit
51
64
 
52
65
  ## How a profile is chosen
53
66
 
54
- Once detection (or an explicit `--machine` flag) resolves the card name, a
55
- profile is looked up via `lobes/profiles/loader.py::resolve_profile()`:
67
+ Once detection (or an explicit `--profile` flag on `lobes init`) resolves the
68
+ card name, a profile is looked up via `lobes/profiles/loader.py::resolve_profile()`:
56
69
 
57
70
  1. **Explicit always wins**: if `--profile <name>` was given (or a
58
71
  `LOBES_PROFILE` env var), that profile is used, even if it diverges from
@@ -294,7 +307,8 @@ latency (higher tail latency per request).
294
307
 
295
308
  Operator-defined profiles go in `<deployment-dir>/profiles/<name>.toml` (the
296
309
  file's stem is the profile name). They are discovered automatically by
297
- `lobes init` / `lobes serve` and override any built-in with the same name.
310
+ `lobes init` (the only verb that resolves a `Profile` — see "How detection
311
+ works" above) and override any built-in with the same name.
298
312
 
299
313
  A profile is a self-contained TOML declaration. Example:
300
314
 
@@ -334,7 +348,8 @@ max_model_len = 8192
334
348
  **Rules:**
335
349
 
336
350
  - **File name is the profile name.** `profiles/my-custom-box.toml` → profile
337
- name is `my-custom-box`. Use it as `lobes init --machine my-custom-box --apply`.
351
+ name is `my-custom-box`. Use it as `lobes init --profile my-custom-box --apply`
352
+ (the flag is `--profile` on `init`, `--machine` on `switch`).
338
353
  - **Inline `name` field must match the file stem.** If the file declares
339
354
  `name = "something-else"`, profile loading fails with an error (this prevents
340
355
  confusion from stale copies).
@@ -355,8 +370,8 @@ max_model_len = 8192
355
370
  To use your profile:
356
371
 
357
372
  ```bash
358
- # Explicit --machine or LOBES_PROFILE env var:
359
- lobes init --machine my-custom-box --apply
373
+ # Explicit flag (--profile on init, --machine on switch) or LOBES_PROFILE env var:
374
+ lobes init --profile my-custom-box --apply
360
375
  lobes switch my-model --machine my-custom-box --apply
361
376
 
362
377
  # Automatic if the detected machine name matches:
@@ -369,6 +384,11 @@ Auto-detection only works if the *detected machine name* (from
369
384
  profile to be auto-selected on a new card, add a new `CardStrategy` module to
370
385
  `lobes/machines/` (following the `spark.py` / `thor.py` pattern).
371
386
 
387
+ For a complete worked example — a live-validated operator profile for the
388
+ Jetson AGX Orin 64GB (Gemma `senses` at its full 128K context on Ampere sm_87,
389
+ with measured knob values and the Jetson divergences found on the way) — see
390
+ [`orin-profiles.md`](orin-profiles.md).
391
+
372
392
  ## The goldens contract
373
393
 
374
394
  CI guards against cross-machine breakage via golden `.env` files — one per
@@ -395,14 +415,21 @@ built-in defaults (when no profile is loaded) render as expected.
395
415
 
396
416
  lobes is deployed and validated on the following hardware, with the stated
397
417
  caveat profile as the truthful, tested configuration. Aspirational entries are
398
- marked clearly as **unvalidated**.
418
+ marked clearly as **unvalidated**. **This table's scope is BUILT-IN
419
+ profiles/shapes** (`lobes/profiles/builtin/*.toml`,
420
+ `lobes/profiles/builtin_shapes/*.toml`) — the #108 rule is that a built-in
421
+ earns "validated" status only via a repo-recorded boot of that *exact*
422
+ built-in, so a validated operator-defined profile (`<deploy-dir>/profiles/
423
+ <name>.toml`) does not by itself validate a built-in for the same card. The
424
+ Orin row below carries both facts side by side so they read as complementary,
425
+ not contradictory.
399
426
 
400
427
  | card | machine | profile | status | validation |
401
428
  |---|---|---|---|---|
402
429
  | **DGX Spark** (Grace Blackwell, 128 GB unified) | `spark` | `spark.toml` | load-tested | 2026-06-03 — `lobes benchmark` ran at ~7.8–8.0 tok/s decode (27B primary, util 0.30, single-stream) on the fleet duo (cortex 128K, senses 32K) with FlashInfer attention. **The correctness probes postdate that run and have not been executed on the GB10** — rerank ordering there is explicitly unverified (issue #106). See `docs/tuning-profiles.md` and the Spark run on `docs/qwen3.6-27b-text-nvfp4-mtp.md`. |
403
430
  | **Jetson AGX Thor** (Blackwell-class sm_110, 128 GB unified) | `thor` | `thor.toml` | load-tested | 2026-07-13 — the three correctness probes (cortex known-answer, embed paraphrase-ranking, rerank ordering) all pass with the profile's four divergences (`cortex kv_cache_dtype=auto`, `embedder TRITON_ATTN`, `reranker TRITON_ATTN + enforce_eager=true`); senses' health was not confirmed in that run (it boots last and the concurrent-boot race, caveat 4 below, can catch it). |
404
431
  | **unknown card** (UNKNOWN) | `generic` | `base.toml` | conservative fallback | — — no hardware beyond Spark/Thor is load-tested; UNKNOWN cards are served a small 4B model, no 27B, and no multimodal (`senses` disabled). Avoids OOM crashes on first boot. See issue #107 for broader "small default on every card" work. |
405
- | Jetson AGX Orin / Orin Nano Super | `(not yet)` | (not yet) | **unvalidated** | Not deployed or tested. Named in the mesh topology for future integration but no profile yet. Do not claim Orin support. |
432
+ | Jetson AGX Orin / Orin Nano Super | `(not yet)` | (not yet) | **no built-in profile — unvalidated at that scope; operator-validated separately** | **Built-ins:** no built-in `orin` profile exists, and the built-in `orin-small` *shape* remains DECLARED/UNVALIDATED (#108 — an unbooted built-in stays unvalidated regardless of operator activity elsewhere). Do not claim built-in Orin support from this row. **Operator deployment:** a physical Jetson AGX Orin 64GB WAS operator-validated 2026-07-16/17, using a hand-written **operator profile** (`<deploy-dir>/profiles/orin.toml` — `senses`/`embedder`/`reranker`, `senses` at its full native 131072 context, measured `gpu_mem_util=0.45`) composed with the built-in `thor-lobe` *shape* (not `orin-small`). See [`orin-profiles.md`](orin-profiles.md) for the measured knobs and the Jetson/sm_87 divergences found live. |
406
433
 
407
434
  ## Thor caveats and validation facts
408
435
 
@@ -0,0 +1,183 @@
1
+ # Jetson AGX Orin 64GB — live-validated senses / embedder / reranker profile
2
+
3
+ **Status: operator-validated on physical hardware, 2026-07-16/17** (issue #127
4
+ mesh work). This page records what a real Jetson AGX Orin 64GB Developer Kit
5
+ (Ampere **sm_87**, 61.3 GiB unified memory, CUDA 13.2 / driver 595.78) actually
6
+ serves, with measured numbers — the #108 discipline: a card earns its tuning
7
+ data by booting it, and this boot is what earned Orin's. The repo's built-in
8
+ `orin-small` *shape* remains DECLARED/UNVALIDATED (this deployment used
9
+ `thor-lobe`, not `orin-small` — see "Shape choice" below).
10
+
11
+ ## What this box serves
12
+
13
+ | role | model | context | gpu_mem_util | result |
14
+ |---|---|---|---|---|
15
+ | `senses` | `coolthor/gemma-4-12B-it-NVFP4A16` | **131072 (full native 128K)** | **0.45** | KV pool **802,644 tokens**, **6.12×** concurrency at 131,072/request |
16
+ | `embedder` | `Qwen/Qwen3-Embedding-0.6B` | 8192 | 0.06 | healthy; 1024-dim embeddings |
17
+ | `reranker` | `Qwen/Qwen3-Reranker-0.6B` | 8192 | 0.06 | healthy; **rerank ordering probe passes** |
18
+ | `cortex` | — | — | — | `feasible=false` (see "Why no cortex"), referred/proxied to the Spark |
19
+ | `stt`/`tts` | — | — | — | dropped locally; `/v1/audio/*` forwards to a peer gateway via `AUDIO_URL` |
20
+
21
+ Probes passed (2026-07-17, via the gateway on `:8000`): senses known-answer
22
+ (text, `model=senses` alias), senses **vision** intake (solid-color image →
23
+ correct one-word answer), embeddings (1024 dims), rerank ordering (relevant
24
+ document top-ranked, score 0.82). The three core-role correctness probes that
25
+ `lobes assess` encodes are therefore all exercised on sm_87.
26
+
27
+ ## The operator profile
28
+
29
+ There is deliberately no built-in `orin` profile in `lobes/profiles/builtin/`
30
+ (#108: no invented knobs for an unbooted card). This deployment declares an
31
+ **operator profile** at `<deploy-dir>/profiles/orin.toml`, selected with
32
+ `lobes init --profile orin`:
33
+
34
+ ```toml
35
+ name = "orin"
36
+ summary = "Jetson AGX Orin 64GB (Ampere sm_87, 64 GB unified) — operator profile: senses + pooling gears, no cortex"
37
+
38
+ [roles.cortex]
39
+ feasible = false
40
+
41
+ [roles.senses]
42
+ feasible = true
43
+ model = "coolthor/gemma-4-12B-it-NVFP4A16"
44
+ gpu_mem_util = 0.45
45
+ max_model_len = 131072
46
+ quantization = "compressed-tensors"
47
+ attention_backend = "TRITON_ATTN"
48
+
49
+ [roles.embedder]
50
+ feasible = true
51
+ model = "Qwen/Qwen3-Embedding-0.6B"
52
+ gpu_mem_util = 0.06
53
+ max_model_len = 8192
54
+ attention_backend = "TRITON_ATTN"
55
+
56
+ [roles.reranker]
57
+ feasible = true
58
+ model = "Qwen/Qwen3-Reranker-0.6B"
59
+ gpu_mem_util = 0.06
60
+ max_model_len = 8192
61
+ attention_backend = "TRITON_ATTN"
62
+ enforce_eager = true
63
+ ```
64
+
65
+ ### Why these knobs
66
+
67
+ - **`senses` runs on Ampere because the checkpoint is weight-only FP4.**
68
+ `coolthor/gemma-4-12B-it-NVFP4A16` is compressed-tensors **W4A16** — weights
69
+ dequantise through vLLM's Marlin/FP4 path (compute capability ≥ 8.0), so
70
+ sm_87 qualifies. Activations stay 16-bit; no Blackwell FP4 tensor cores
71
+ needed. The full stack — Marlin GEMM, torch.compile/inductor, the MTP
72
+ (`eagle_head`) draft, TRITON_ATTN — ran clean on sm_87 with the same pinned
73
+ vLLM nightly digest the Spark/Thor fleets use (`vllm/vllm-openai@sha256:7c5a…`,
74
+ vLLM 0.23.1rc1.dev672). vLLM's own arm64 release builds list 8.7 as an
75
+ aarch64-only target, which is why the multi-arch image carries the kernels.
76
+ - **`gpu_mem_util = 0.45` is MEASURED, not computed** (the same discipline as
77
+ thor-lobe's 0.30). The first boot at util 0.30 (18.4 GiB of 61.3) was refused
78
+ by vLLM: after weights (~7.7 GiB), the MTP draft head, CUDA graphs
79
+ (0.75 GiB) and runtime overhead, only **2.25 GiB** KV remained where
80
+ `max_model_len=131072` needs **3.08 GiB** (vLLM's estimated max at 0.30 was
81
+ 76,352). At 0.45 (~27.6 GiB) the same boot reports **18.86 GiB KV =
82
+ 802,644 tokens = 6.12×** concurrency at full context. Do not copy Thor's
83
+ 0.30 onto a 64 GB board for 128K.
84
+ - **`max_model_len = 131072`** — the checkpoint's full native context. It fits;
85
+ no 64K/32K trim was needed on 64 GB once util was raised.
86
+ - **`cortex feasible = false` (why no cortex).** The 27B primary
87
+ (`sakamakismile/Qwen3.6-27B-Text-NVFP4-MTP`) is **modelopt NVFP4 W4A4** —
88
+ its quantised *activations* need Blackwell FP4 tensor cores; sm_87 is
89
+ Ampere. This is a hard architecture line, not a memory tradeoff.
90
+ - **Pooling gears mirror Thor's Jetson divergences as the conservative first
91
+ boot** (`TRITON_ATTN` both, reranker `enforce_eager`). Thor's FLASH_ATTN
92
+ pooling hang is sm_110-specific and was NOT re-tested on sm_87 — these are
93
+ safe-boot choices, not proven-necessary ones. Relaxing them (and measuring)
94
+ is open follow-up work.
95
+
96
+ ## Shape choice: `thor-lobe`, not `orin-small`
97
+
98
+ The built-in `orin-small` reference shape (minor + pooling + audio, both heavy
99
+ lobes dropped) was NOT what this deployment wanted — the assignment here is
100
+ **Orin hosts the Gemma senses lobe** (most important role for this box, user
101
+ decision on #127). `thor-lobe` hosts exactly `senses + embedder + reranker +
102
+ stt + tts` and drops `cortex`, so it renders the right deployment on this box
103
+ when composed over the operator profile:
104
+
105
+ ```bash
106
+ lobes init --profile orin --shape thor-lobe --apply
107
+ ```
108
+
109
+ Note the shape's own senses overrides (`gpu_mem_util=0.30`,
110
+ `max_model_len=131072` — Thor-measured values) overlay the profile at render
111
+ time; on this box the rendered `.env` needed `MULTIMODAL_GPU_MEM_UTIL=0.45`
112
+ (the Orin-measured value above). `orin-small` itself remains unbooted and
113
+ therefore still DECLARED/UNVALIDATED.
114
+
115
+ ## Jetson/sm_87 divergences found live (upstreaming candidates)
116
+
117
+ 1. **csv-mode GPU access.** This Orin's NVIDIA container toolkit (1.19.1,
118
+ `mode = "auto"`) resolves to legacy **csv** mode, where the compose
119
+ template's `deploy.resources.reservations.devices` (`--gpus`-style) request
120
+ fails at container create: *"invoking the NVIDIA Container Runtime Hook
121
+ directly … is not supported. Please use the NVIDIA Container Runtime"*.
122
+ Fix applied on-box: every GPU service's `deploy:` stanza in the deployed
123
+ `docker-compose.yml`/`docker-compose.audio.yml` replaced with
124
+ `runtime: nvidia`. **A re-init reverts this hand edit** — a template knob or
125
+ machine-strategy overlay is the real fix. (Thor presumably works because
126
+ JetPack 7 ships CDI mode.)
127
+ 2. **The Parakeet STT base image is Spark-specific.** `Dockerfile.parakeet`'s
128
+ base `scitrera/dgx-spark-vllm:0.16.0-t4` ships a torch with no sm_87
129
+ kernels — NeMo dies at model load with `CUDA error: no kernel image is
130
+ available for execution on the device` (observed live: 8 container
131
+ restarts). Working fix (staged on-box before local audio was dropped):
132
+ rebase the Dockerfile onto the fleet's own pinned vLLM nightly digest
133
+ (whose arm64 torch is sm_87-validated by senses itself) and add
134
+ `ENTRYPOINT []` so its CMD survives the base image's entrypoint. The same
135
+ mismatch plausibly explains stt/tts `ready=false` on the sm_110 Thor.
136
+ 3. **Unified-memory budgeting is tighter than the util sum.** Each vLLM engine
137
+ consumes CPU-side memory beyond `gpu_mem_util × total` (host buffers plus
138
+ the default 4 GiB `swap_space` per engine). With senses 0.45 + two 0.06
139
+ gears the box sat at **54/61 GiB used with zero swap configured** — the
140
+ util sum (0.57 ≈ 35 GiB) undercounts by ~19 GiB. Leave real headroom, or
141
+ audio sidecars/host workloads will OOM-race the fleet.
142
+
143
+ ## Mesh wiring (#127) from this box
144
+
145
+ - `PRIMARY_PEER_ORIGIN=http://spark.tail0be7e0.ts.net:8001` — cortex referral
146
+ (the same operator-typed value the Thor uses). `PRIMARY_PEER_PROXY=true` +
147
+ `PRIMARY_PEER_API_KEY=<the Spark's inbound GATEWAY_API_KEY>` arm the
148
+ follow-the-referral forward. **VALIDATED LIVE 2026-07-17**: a
149
+ `model=cortex` chat request from this box answers from the Spark's 27B
150
+ (`X-Lobes-Proxied-By: http://spark.tail0be7e0.ts.net:8001`, HTTP 200),
151
+ caller's own credential stripped per the #127 contract.
152
+ - `AUDIO_URL=http://100.127.105.72:8001` — `/v1/audio/*` is *configured* to
153
+ forward to the Spark's gateway instead of local sidecars, but **audio
154
+ cannot chain gateway→gateway as of 0.45.0** (found live, 2026-07-17): the
155
+ audio readiness probe GETs `<AUDIO_URL>/v1/health/ready` unauthenticated,
156
+ which a peer *gateway* 401s (its GET /v1/* namespace is bearer-gated) and
157
+ would 404 anyway (that endpoint belongs to the realtime *bridge*, and
158
+ gateways only path-route `/v1/audio/*`) — the probe returns False forever
159
+ and this box answers a permanent 503. Working peer-audio today means
160
+ pointing `AUDIO_URL` at the peer's realtime **bridge** directly (publish
161
+ its port, e.g. `8080`, on the peer's tailnet — the bridge is keyless and
162
+ serves `/v1/health/ready` itself). Audio is also **outside the #127
163
+ pairwise-auth contract** (four core roles only): the forward passes the
164
+ caller's own `Authorization` through verbatim, attaches no per-peer key,
165
+ and `stt`/`tts` get no `hosted_by` referral annotation. First-class audio
166
+ referral/proxy knobs are the phase-2 candidate this measures out.
167
+
168
+ ## Reproducing on another Orin
169
+
170
+ ```bash
171
+ uv tool install lobes-cli # or: uv sync in a checkout
172
+ mkdir -p ~/.lobes/profiles # then write profiles/orin.toml (above)
173
+ lobes init --profile orin --shape thor-lobe --apply
174
+ # csv-mode boards: swap the deploy.resources GPU stanzas for `runtime: nvidia`
175
+ # (divergence 1 above) until a template knob lands.
176
+ lobes up senses --apply # boot order: senses first, then gears
177
+ lobes up embedder --apply && lobes up reranker --apply
178
+ docker compose -f docker-compose.yml -f docker-compose.shape.yml up -d gateway
179
+ ```
180
+
181
+ Boot sequentially — the machine-profiles boot-ordering caveat (concurrent
182
+ first boots race vLLM's free-memory measurement on unified boards) applies to
183
+ this card too.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lobes-cli"
3
- version = "0.45.0"
3
+ version = "0.45.2"
4
4
  description = "lobes — run, assess, and switch the local vLLM model."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -440,7 +440,7 @@ wheels = [
440
440
 
441
441
  [[package]]
442
442
  name = "lobes-cli"
443
- version = "0.45.0"
443
+ version = "0.45.2"
444
444
  source = { editable = "." }
445
445
 
446
446
  [package.optional-dependencies]
File without changes