agent-hitch 0.2.16 → 0.2.17

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 (361) hide show
  1. package/README.md +7 -28
  2. package/README.zh-CN.md +6 -26
  3. package/dist/scripts/benchmark-dataset-verification.js +118 -0
  4. package/dist/scripts/benchmark-dataset-verification.js.map +1 -0
  5. package/dist/scripts/canary-external-endpoint.js +56 -0
  6. package/dist/scripts/canary-external-endpoint.js.map +1 -0
  7. package/dist/scripts/canary-native-training.js +8 -6
  8. package/dist/scripts/canary-native-training.js.map +1 -1
  9. package/dist/scripts/canary-remote-training.js +8 -6
  10. package/dist/scripts/canary-remote-training.js.map +1 -1
  11. package/dist/scripts/check-architecture.js +1 -1
  12. package/dist/scripts/check-architecture.js.map +1 -1
  13. package/dist/src/adapters/providers/codex.js +5 -2
  14. package/dist/src/adapters/providers/codex.js.map +1 -1
  15. package/dist/src/adapters/providers/model-call.js +1 -2
  16. package/dist/src/adapters/providers/model-call.js.map +1 -1
  17. package/dist/src/adapters/providers/training-tool.js +2 -0
  18. package/dist/src/adapters/providers/training-tool.js.map +1 -1
  19. package/dist/src/backends/harbor/artifact-pins.js +42 -0
  20. package/dist/src/backends/harbor/artifact-pins.js.map +1 -0
  21. package/dist/src/backends/harbor/backend.js +16 -8
  22. package/dist/src/backends/harbor/backend.js.map +1 -1
  23. package/dist/src/backends/harbor/bound-credential-helper.js +24 -0
  24. package/dist/src/backends/harbor/bound-credential-helper.js.map +1 -0
  25. package/dist/src/backends/harbor/credential-snapshot.js +71 -0
  26. package/dist/src/backends/harbor/credential-snapshot.js.map +1 -0
  27. package/dist/src/backends/harbor/environment-config.js +25 -2
  28. package/dist/src/backends/harbor/environment-config.js.map +1 -1
  29. package/dist/src/backends/harbor/environment-files.js +143 -0
  30. package/dist/src/backends/harbor/environment-files.js.map +1 -0
  31. package/dist/src/backends/harbor/evaluation-binding.js +160 -0
  32. package/dist/src/backends/harbor/evaluation-binding.js.map +1 -0
  33. package/dist/src/backends/harbor/host-credential-helper.js +5 -0
  34. package/dist/src/backends/harbor/host-credential-helper.js.map +1 -1
  35. package/dist/src/backends/harbor/index.js +2 -0
  36. package/dist/src/backends/harbor/index.js.map +1 -1
  37. package/dist/src/backends/harbor/model-proxy-config.js +3 -18
  38. package/dist/src/backends/harbor/model-proxy-config.js.map +1 -1
  39. package/dist/src/backends/harbor/portable-regrade.js +15 -3
  40. package/dist/src/backends/harbor/portable-regrade.js.map +1 -1
  41. package/dist/src/backends/harbor/python-runtime.js +71 -0
  42. package/dist/src/backends/harbor/python-runtime.js.map +1 -0
  43. package/dist/src/backends/harbor/tools.js +6 -4
  44. package/dist/src/backends/harbor/tools.js.map +1 -1
  45. package/dist/src/backends/index.js +3 -0
  46. package/dist/src/backends/index.js.map +1 -1
  47. package/dist/src/cli/arguments.js +30 -30
  48. package/dist/src/cli/arguments.js.map +1 -1
  49. package/dist/src/cli/commands/capabilities.js +7 -3
  50. package/dist/src/cli/commands/capabilities.js.map +1 -1
  51. package/dist/src/cli/commands/daemon.js +0 -17
  52. package/dist/src/cli/commands/daemon.js.map +1 -1
  53. package/dist/src/cli/commands/eval-binding.js +32 -0
  54. package/dist/src/cli/commands/eval-binding.js.map +1 -0
  55. package/dist/src/cli/commands/eval.js +21 -15
  56. package/dist/src/cli/commands/eval.js.map +1 -1
  57. package/dist/src/cli/commands/models.js +32 -45
  58. package/dist/src/cli/commands/models.js.map +1 -1
  59. package/dist/src/cli/commands/run.js +0 -35
  60. package/dist/src/cli/commands/run.js.map +1 -1
  61. package/dist/src/cli/main.js +0 -4
  62. package/dist/src/cli/main.js.map +1 -1
  63. package/dist/src/cli/output.js +5 -16
  64. package/dist/src/cli/output.js.map +1 -1
  65. package/dist/src/control-plane/eval-records.js +3 -1
  66. package/dist/src/control-plane/eval-records.js.map +1 -1
  67. package/dist/src/control-plane/eval-recovery.js +4 -1
  68. package/dist/src/control-plane/eval-recovery.js.map +1 -1
  69. package/dist/src/control-plane/eval-scheduler.js +16 -8
  70. package/dist/src/control-plane/eval-scheduler.js.map +1 -1
  71. package/dist/src/control-plane/index.js +0 -2
  72. package/dist/src/control-plane/index.js.map +1 -1
  73. package/dist/src/control-plane/model-capture-planning.js +3 -4
  74. package/dist/src/control-plane/model-capture-planning.js.map +1 -1
  75. package/dist/src/control-plane/remote-model-routes.js +4 -24
  76. package/dist/src/control-plane/remote-model-routes.js.map +1 -1
  77. package/dist/src/control-plane/remote-offer-contract.js +2 -2
  78. package/dist/src/control-plane/remote-offer-contract.js.map +1 -1
  79. package/dist/src/control-plane/remote-result-transport.js +7 -8
  80. package/dist/src/control-plane/remote-result-transport.js.map +1 -1
  81. package/dist/src/control-plane/remote-work-coordinator.js +2 -2
  82. package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
  83. package/dist/src/control-plane/remote-work-recovery.js +2 -2
  84. package/dist/src/control-plane/remote-work-recovery.js.map +1 -1
  85. package/dist/src/control-plane/remote-worker-protocol.js +1 -1
  86. package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
  87. package/dist/src/control-plane/remote-worker-runner.js +21 -6
  88. package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
  89. package/dist/src/control-plane/remote-workers.js +2 -2
  90. package/dist/src/control-plane/remote-workers.js.map +1 -1
  91. package/dist/src/control-plane/rerun-recovery.js +1 -1
  92. package/dist/src/control-plane/rerun-recovery.js.map +1 -1
  93. package/dist/src/control-plane/rerun-scheduler.js +21 -14
  94. package/dist/src/control-plane/rerun-scheduler.js.map +1 -1
  95. package/dist/src/control-plane/rerun-source.js +5 -2
  96. package/dist/src/control-plane/rerun-source.js.map +1 -1
  97. package/dist/src/control-plane/rerun-submission.js +7 -5
  98. package/dist/src/control-plane/rerun-submission.js.map +1 -1
  99. package/dist/src/control-plane/synthetic-result.js +3 -2
  100. package/dist/src/control-plane/synthetic-result.js.map +1 -1
  101. package/dist/src/control-plane/worker-model-relay.js +1 -1
  102. package/dist/src/control-plane/worker-model-relay.js.map +1 -1
  103. package/dist/src/controller-runtime/hash.js +6 -0
  104. package/dist/src/controller-runtime/hash.js.map +1 -1
  105. package/dist/src/daemon/client.js +12 -35
  106. package/dist/src/daemon/client.js.map +1 -1
  107. package/dist/src/daemon/evaluation-binding.js +33 -0
  108. package/dist/src/daemon/evaluation-binding.js.map +1 -0
  109. package/dist/src/daemon/evaluation-submission.js +27 -0
  110. package/dist/src/daemon/evaluation-submission.js.map +1 -0
  111. package/dist/src/daemon/index.js +1 -0
  112. package/dist/src/daemon/index.js.map +1 -1
  113. package/dist/src/daemon/json-stream.js +98 -0
  114. package/dist/src/daemon/json-stream.js.map +1 -0
  115. package/dist/src/daemon/scheduler.js +1 -4
  116. package/dist/src/daemon/scheduler.js.map +1 -1
  117. package/dist/src/daemon/server.js +14 -54
  118. package/dist/src/daemon/server.js.map +1 -1
  119. package/dist/src/domain/endpoints.js +2 -0
  120. package/dist/src/domain/endpoints.js.map +1 -0
  121. package/dist/src/domain/evaluation-binding.js +5 -0
  122. package/dist/src/domain/evaluation-binding.js.map +1 -0
  123. package/dist/src/domain/index.js +2 -0
  124. package/dist/src/domain/index.js.map +1 -1
  125. package/dist/src/domain/runs.js.map +1 -1
  126. package/dist/src/evals/benchmark-adapter-manifest.js +95 -32
  127. package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
  128. package/dist/src/evals/benchmark-verification.js +106 -0
  129. package/dist/src/evals/benchmark-verification.js.map +1 -0
  130. package/dist/src/evals/collect-only-rerun.js +3 -2
  131. package/dist/src/evals/collect-only-rerun.js.map +1 -1
  132. package/dist/src/evals/directory.js +9 -1
  133. package/dist/src/evals/directory.js.map +1 -1
  134. package/dist/src/evals/endpoint-attempts.js +112 -0
  135. package/dist/src/evals/endpoint-attempts.js.map +1 -0
  136. package/dist/src/evals/endpoint-usage.js +8 -0
  137. package/dist/src/evals/endpoint-usage.js.map +1 -0
  138. package/dist/src/evals/environment-binding.js +9 -0
  139. package/dist/src/evals/environment-binding.js.map +1 -0
  140. package/dist/src/evals/eval-artifact-planning.js +10 -1
  141. package/dist/src/evals/eval-artifact-planning.js.map +1 -1
  142. package/dist/src/evals/eval-finalization.js +2 -3
  143. package/dist/src/evals/eval-finalization.js.map +1 -1
  144. package/dist/src/evals/eval-logical-plan.js +2 -0
  145. package/dist/src/evals/eval-logical-plan.js.map +1 -1
  146. package/dist/src/evals/eval-result-builder.js +4 -0
  147. package/dist/src/evals/eval-result-builder.js.map +1 -1
  148. package/dist/src/evals/eval-state.js +22 -0
  149. package/dist/src/evals/eval-state.js.map +1 -0
  150. package/dist/src/evals/execution-plan.js +6 -2
  151. package/dist/src/evals/execution-plan.js.map +1 -1
  152. package/dist/src/evals/index.js +5 -1
  153. package/dist/src/evals/index.js.map +1 -1
  154. package/dist/src/evals/infrastructure-retry.js +2 -0
  155. package/dist/src/evals/infrastructure-retry.js.map +1 -1
  156. package/dist/src/evals/model-capture-runtime.js +9 -13
  157. package/dist/src/evals/model-capture-runtime.js.map +1 -1
  158. package/dist/src/evals/native-phase-evidence.js +8 -2
  159. package/dist/src/evals/native-phase-evidence.js.map +1 -1
  160. package/dist/src/evals/planned-execution.js +7 -2
  161. package/dist/src/evals/planned-execution.js.map +1 -1
  162. package/dist/src/evals/planned-progress-publisher.js +18 -5
  163. package/dist/src/evals/planned-progress-publisher.js.map +1 -1
  164. package/dist/src/evals/planned-retry-execution.js +1 -0
  165. package/dist/src/evals/planned-retry-execution.js.map +1 -1
  166. package/dist/src/evals/preparation-rerun.js +0 -1
  167. package/dist/src/evals/preparation-rerun.js.map +1 -1
  168. package/dist/src/evals/progress.js +92 -7
  169. package/dist/src/evals/progress.js.map +1 -1
  170. package/dist/src/evals/records.js +12 -2
  171. package/dist/src/evals/records.js.map +1 -1
  172. package/dist/src/evals/recovery.js +2 -0
  173. package/dist/src/evals/recovery.js.map +1 -1
  174. package/dist/src/evals/remote-rerun-execution.js +1 -3
  175. package/dist/src/evals/remote-rerun-execution.js.map +1 -1
  176. package/dist/src/evals/remote-verifier-rerun.js +1 -1
  177. package/dist/src/evals/remote-verifier-rerun.js.map +1 -1
  178. package/dist/src/evals/request.js +14 -45
  179. package/dist/src/evals/request.js.map +1 -1
  180. package/dist/src/evals/rerun-observation.js +31 -0
  181. package/dist/src/evals/rerun-observation.js.map +1 -0
  182. package/dist/src/evals/rerun.js +23 -28
  183. package/dist/src/evals/rerun.js.map +1 -1
  184. package/dist/src/evals/service.js +45 -42
  185. package/dist/src/evals/service.js.map +1 -1
  186. package/dist/src/evals/shared-runtime.js +125 -0
  187. package/dist/src/evals/shared-runtime.js.map +1 -0
  188. package/dist/src/evals/trial-import.js +10 -2
  189. package/dist/src/evals/trial-import.js.map +1 -1
  190. package/dist/src/evals/trial-publication-recovery.js +1 -1
  191. package/dist/src/evals/trial-publication-recovery.js.map +1 -1
  192. package/dist/src/evals/verifier-artifacts.js +1 -0
  193. package/dist/src/evals/verifier-artifacts.js.map +1 -1
  194. package/dist/src/evals/verifier-only-rerun.js +1 -1
  195. package/dist/src/evals/verifier-only-rerun.js.map +1 -1
  196. package/dist/src/evals/verifier-rerun-result.js +3 -2
  197. package/dist/src/evals/verifier-rerun-result.js.map +1 -1
  198. package/dist/src/evals/verifier-score-artifacts.js +9 -1
  199. package/dist/src/evals/verifier-score-artifacts.js.map +1 -1
  200. package/dist/src/foundation/config.js +0 -5
  201. package/dist/src/foundation/config.js.map +1 -1
  202. package/dist/src/inference/index.js +3 -22
  203. package/dist/src/inference/index.js.map +1 -1
  204. package/dist/src/inference/lock.js +44 -130
  205. package/dist/src/inference/lock.js.map +1 -1
  206. package/dist/src/model-access/endpoint-contract.js +127 -0
  207. package/dist/src/model-access/endpoint-contract.js.map +1 -0
  208. package/dist/src/model-access/endpoint-credentials.js +54 -0
  209. package/dist/src/model-access/endpoint-credentials.js.map +1 -0
  210. package/dist/src/model-access/endpoint-probe-stream.js +66 -0
  211. package/dist/src/model-access/endpoint-probe-stream.js.map +1 -0
  212. package/dist/src/model-access/endpoint-verification.js +76 -0
  213. package/dist/src/model-access/endpoint-verification.js.map +1 -0
  214. package/dist/src/model-access/endpoints.js +105 -0
  215. package/dist/src/model-access/endpoints.js.map +1 -0
  216. package/dist/src/model-access/index.js +5 -1
  217. package/dist/src/model-access/index.js.map +1 -1
  218. package/dist/src/model-access/proxy.js +57 -14
  219. package/dist/src/model-access/proxy.js.map +1 -1
  220. package/dist/src/model-access/remote-model.js +21 -29
  221. package/dist/src/model-access/remote-model.js.map +1 -1
  222. package/dist/src/model-access/usage.js +30 -0
  223. package/dist/src/model-access/usage.js.map +1 -0
  224. package/dist/src/runs/endpoint-runtime.js +40 -0
  225. package/dist/src/runs/endpoint-runtime.js.map +1 -0
  226. package/dist/src/runs/executor.js +28 -42
  227. package/dist/src/runs/executor.js.map +1 -1
  228. package/dist/src/runs/local-inference-environment.js +5 -53
  229. package/dist/src/runs/local-inference-environment.js.map +1 -1
  230. package/dist/src/runs/manifest.js +1 -0
  231. package/dist/src/runs/manifest.js.map +1 -1
  232. package/dist/src/runs/outcome.js +3 -10
  233. package/dist/src/runs/outcome.js.map +1 -1
  234. package/dist/src/runs/queued.js +3 -2
  235. package/dist/src/runs/queued.js.map +1 -1
  236. package/dist/src/runs/records.js +3 -0
  237. package/dist/src/runs/records.js.map +1 -1
  238. package/dist/src/runs/request.js +10 -38
  239. package/dist/src/runs/request.js.map +1 -1
  240. package/dist/src/workers/remote-harbor-work-spec.js +8 -10
  241. package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
  242. package/dist/src/workers/remote-harbor-worker.js +3 -0
  243. package/dist/src/workers/remote-harbor-worker.js.map +1 -1
  244. package/docs/evidence/eval-preparation-2026-10-09.json +393 -0
  245. package/docs/evidence/eval-preparation-2026-10-09.md +178 -0
  246. package/docs/local-model-inference-spec.zh-CN.md +4 -663
  247. package/docs/resource-storage.zh-CN.md +116 -0
  248. package/docs/schemas/endpoint-evaluation-attempt.schema.json +29 -0
  249. package/docs/schemas/eval-artifact-pin.schema.json +14 -0
  250. package/docs/schemas/eval-execution-plan.schema.json +486 -105
  251. package/docs/schemas/eval-progress.schema.json +1 -1
  252. package/docs/schemas/eval-request.schema.json +149 -18
  253. package/docs/schemas/eval-rerun-submission.schema.json +8 -1
  254. package/docs/schemas/eval-result.schema.json +310 -56
  255. package/docs/schemas/evaluation-binding.schema.json +15 -0
  256. package/docs/schemas/external-endpoint-binding.schema.json +153 -0
  257. package/docs/schemas/external-endpoint-config.schema.json +93 -0
  258. package/docs/schemas/inference-execution-evidence.schema.json +253 -3
  259. package/docs/schemas/inference-lock-v3.schema.json +6 -0
  260. package/docs/schemas/inference-lock.schema.json +842 -341
  261. package/docs/schemas/ordered-eval-control.schema.json +7 -1
  262. package/docs/schemas/ready-endpoint-binding.schema.json +201 -0
  263. package/docs/schemas/run-manifest.schema.json +6 -0
  264. package/docs/schemas/run-request.schema.json +122 -20
  265. package/examples/external-inference/.env.example +16 -0
  266. package/examples/external-inference/README.md +203 -0
  267. package/examples/external-inference/accept.mjs +297 -0
  268. package/examples/external-inference/compose.gateway.yaml +119 -0
  269. package/examples/external-inference/compose.single.yaml +64 -0
  270. package/examples/external-inference/compose.tp2.yaml +15 -0
  271. package/examples/external-inference/deployment.example.json +58 -0
  272. package/examples/external-inference/endpoint.chat-completions.example.json +13 -0
  273. package/examples/external-inference/endpoint.responses.example.json +13 -0
  274. package/integrations/harbor/hitch_build_inputs.py +213 -0
  275. package/integrations/harbor/hitch_build_process.py +126 -0
  276. package/integrations/harbor/hitch_compose_preparation.py +274 -0
  277. package/integrations/harbor/hitch_harbor_agent.py +25 -39
  278. package/integrations/harbor/hitch_harbor_environment.py +96 -3
  279. package/integrations/harbor/hitch_image_cache.py +357 -0
  280. package/integrations/harbor/hitch_python_runtime.py +303 -0
  281. package/integrations/harbor/hitch_shared_runtime.py +123 -0
  282. package/integrations/model-call/cli.js +11 -10
  283. package/integrations/training-tool/cli.js +5 -3
  284. package/node_modules/smol-toml/LICENSE +24 -0
  285. package/node_modules/smol-toml/README.md +418 -0
  286. package/node_modules/smol-toml/dist/date.d.ts +41 -0
  287. package/node_modules/smol-toml/dist/date.js +127 -0
  288. package/node_modules/smol-toml/dist/error.d.ts +38 -0
  289. package/node_modules/smol-toml/dist/error.js +63 -0
  290. package/node_modules/smol-toml/dist/extract.js +69 -0
  291. package/node_modules/smol-toml/dist/index.cjs +734 -0
  292. package/node_modules/smol-toml/dist/index.d.ts +43 -0
  293. package/node_modules/smol-toml/dist/index.js +33 -0
  294. package/node_modules/smol-toml/dist/parse.d.ts +36 -0
  295. package/node_modules/smol-toml/dist/parse.js +149 -0
  296. package/node_modules/smol-toml/dist/primitive.js +238 -0
  297. package/node_modules/smol-toml/dist/stringify.d.ts +31 -0
  298. package/node_modules/smol-toml/dist/stringify.js +181 -0
  299. package/node_modules/smol-toml/dist/struct.js +179 -0
  300. package/node_modules/smol-toml/dist/util.d.ts +38 -0
  301. package/node_modules/smol-toml/dist/util.js +89 -0
  302. package/node_modules/smol-toml/package.json +68 -0
  303. package/package.json +15 -4
  304. package/dist/src/cli/commands/local.js +0 -130
  305. package/dist/src/cli/commands/local.js.map +0 -1
  306. package/dist/src/cli/commands/model-node.js +0 -26
  307. package/dist/src/cli/commands/model-node.js.map +0 -1
  308. package/dist/src/control-plane/inference-manager.js +0 -357
  309. package/dist/src/control-plane/inference-manager.js.map +0 -1
  310. package/dist/src/control-plane/managed-gateway-receipt.js +0 -26
  311. package/dist/src/control-plane/managed-gateway-receipt.js.map +0 -1
  312. package/dist/src/control-plane/managed-service-recovery.js +0 -158
  313. package/dist/src/control-plane/managed-service-recovery.js.map +0 -1
  314. package/dist/src/daemon/inference-prepare.js +0 -47
  315. package/dist/src/daemon/inference-prepare.js.map +0 -1
  316. package/dist/src/inference/daemon-capacity.js +0 -41
  317. package/dist/src/inference/daemon-capacity.js.map +0 -1
  318. package/dist/src/inference/device-reservation.js +0 -58
  319. package/dist/src/inference/device-reservation.js.map +0 -1
  320. package/dist/src/inference/doctor.js +0 -95
  321. package/dist/src/inference/doctor.js.map +0 -1
  322. package/dist/src/inference/generation-recovery.js +0 -83
  323. package/dist/src/inference/generation-recovery.js.map +0 -1
  324. package/dist/src/inference/managed-launcher.js +0 -35
  325. package/dist/src/inference/managed-launcher.js.map +0 -1
  326. package/dist/src/inference/materialize.js +0 -66
  327. package/dist/src/inference/materialize.js.map +0 -1
  328. package/dist/src/inference/model-location.js +0 -34
  329. package/dist/src/inference/model-location.js.map +0 -1
  330. package/dist/src/inference/node-client.js +0 -167
  331. package/dist/src/inference/node-client.js.map +0 -1
  332. package/dist/src/inference/node-registry.js +0 -79
  333. package/dist/src/inference/node-registry.js.map +0 -1
  334. package/dist/src/inference/observation.js +0 -79
  335. package/dist/src/inference/observation.js.map +0 -1
  336. package/dist/src/inference/preflight.js +0 -132
  337. package/dist/src/inference/preflight.js.map +0 -1
  338. package/dist/src/inference/process-sglang.js +0 -169
  339. package/dist/src/inference/process-sglang.js.map +0 -1
  340. package/dist/src/inference/protocol-probe.js +0 -29
  341. package/dist/src/inference/protocol-probe.js.map +0 -1
  342. package/dist/src/inference/remote-model-store.js +0 -24
  343. package/dist/src/inference/remote-model-store.js.map +0 -1
  344. package/dist/src/inference/runtime-catalog.js +0 -41
  345. package/dist/src/inference/runtime-catalog.js.map +0 -1
  346. package/dist/src/inference/runtime-store.js +0 -93
  347. package/dist/src/inference/runtime-store.js.map +0 -1
  348. package/dist/src/inference/service-attachment.js +0 -46
  349. package/dist/src/inference/service-attachment.js.map +0 -1
  350. package/dist/src/inference/service-inspection.js +0 -38
  351. package/dist/src/inference/service-inspection.js.map +0 -1
  352. package/dist/src/inference/sglang.js +0 -279
  353. package/dist/src/inference/sglang.js.map +0 -1
  354. package/dist/src/inference/supervisor.js +0 -460
  355. package/dist/src/inference/supervisor.js.map +0 -1
  356. package/dist/src/model-access/local-gateway-request.js +0 -139
  357. package/dist/src/model-access/local-gateway-request.js.map +0 -1
  358. package/dist/src/model-access/local-gateway.js +0 -323
  359. package/dist/src/model-access/local-gateway.js.map +0 -1
  360. package/dist/src/runs/local-inference-run.js +0 -53
  361. package/dist/src/runs/local-inference-run.js.map +0 -1
@@ -1,279 +0,0 @@
1
- import { randomBytes } from "node:crypto";
2
- import http from "node:http";
3
- import path from "node:path";
4
- import { HitchError, delay, ensureDir, hitchRootId, runCommand, statePaths } from "../foundation/index.js";
5
- import { defaultDeviceReservationDirectory, releaseInferenceDevice, reserveInferenceDevice } from "./device-reservation.js";
6
- import { validateRuntimeObservation } from "./observation.js";
7
- import { doctorLocalInference } from "./doctor.js";
8
- import { materializeLocalModel } from "./materialize.js";
9
- import { probeSGLangProtocol } from "./protocol-probe.js";
10
- export class DockerSGLangLauncher {
11
- deviceDirectory;
12
- docker;
13
- env;
14
- invoke;
15
- request;
16
- constructor(options = {}) {
17
- this.deviceDirectory = options.deviceReservationDirectory ?? defaultDeviceReservationDirectory();
18
- this.env = options.env ?? process.env;
19
- this.docker = options.dockerExecutable || this.env.HITCH_DOCKER_PATH || "docker";
20
- this.invoke = options.run ?? ((executable, args, timeoutMs = 30 * 60_000) => runCommand(executable, args, {
21
- env: this.env, timeoutMs, failureCode: "inference_process_exited", failureExitCode: 12,
22
- }));
23
- this.request = options.fetch ?? fetch;
24
- }
25
- async start(input) {
26
- if (input.runtime.package.kind !== "oci" || input.runtime.backend !== input.lock.execution.platform.backend) {
27
- throw new TypeError("SGLang runtime does not match lock backend");
28
- }
29
- const modelDirectory = await materializeLocalModel(input.root, input.model);
30
- const cacheDirectory = await ensureDir(path.join(statePaths(input.root).inferenceCache, input.runtime.runtime_id.slice("sha256:".length)));
31
- const port = await availablePort();
32
- const engineToken = randomBytes(32).toString("hex");
33
- const adminToken = randomBytes(32).toString("hex");
34
- const wireModel = `hitch-${input.model.model_id.slice("sha256:".length, "sha256:".length + 16)}`;
35
- const network = `hitch-inference-${hitchRootId(input.root)}`;
36
- await this.ensureNetwork(network);
37
- const name = `hitch-sglang-${input.serviceId.replace(/[^a-z0-9_.-]/gi, "-").slice(0, 48)}`;
38
- const args = dockerArguments({
39
- input, modelDirectory, cacheDirectory, port, engineToken, adminToken, wireModel, network, name,
40
- });
41
- let containerId = "";
42
- let observation;
43
- const backend = input.lock.execution.platform;
44
- if (backend.backend === "cuda") {
45
- if (!backend.device_constraint)
46
- throw new TypeError("CUDA launch requires a locked GPU UUID");
47
- await reserveInferenceDevice(this.deviceDirectory, input.root, input.serviceId, backend.device_constraint);
48
- }
49
- try {
50
- if (backend.backend === "cuda") {
51
- const weights = input.model.files.filter((f) => f.path.endsWith(".safetensors")).reduce((sum, f) => sum + f.size, 0);
52
- const doctor = await doctorLocalInference("cuda", {
53
- env: this.env, dockerExecutable: this.docker, run: this.invoke,
54
- deviceConstraint: backend.device_constraint, requiredMemoryMiB: Math.ceil((weights * 1.25 + 1024 ** 3) / 1024 ** 2),
55
- });
56
- if (!doctor.ready)
57
- throw new HitchError("locked GPU is no longer available or compatible", { code: "inference_device_unsupported", exitCode: 12 });
58
- }
59
- containerId = (await this.invoke(this.docker, args, 60_000)).stdout.trim();
60
- if (!/^[a-f0-9]{12,64}$/.test(containerId))
61
- throw new TypeError("Docker returned an invalid SGLang container ID");
62
- await input.onCreated?.(containerId);
63
- await input.onServiceCreated?.({ schema_version: "2", kind: "docker", container_id: containerId });
64
- await this.waitUntilReady(`http://127.0.0.1:${port}`, engineToken, wireModel, input.lock, containerId, input.signal);
65
- observation = await this.observe(input, containerId, `http://127.0.0.1:${port}`, engineToken);
66
- // Warmup must not seed a candidate's prefix cache.
67
- const cleared = await this.request(`http://127.0.0.1:${port}/flush_cache`, {
68
- headers: { Authorization: `Bearer ${adminToken}` }, signal: AbortSignal.timeout(10_000),
69
- });
70
- if (!cleared.ok)
71
- throw new HitchError("SGLang warmup cache could not be cleared", { code: "inference_runtime_mismatch", exitCode: 12 });
72
- }
73
- catch (error) {
74
- // A failed docker run can still have created a container. Resolve it by
75
- // owner labels before releasing a device; transport errors stay ambiguous.
76
- const cleaned = await this.stopOrphan(input.root, {
77
- service_id: input.serviceId, inference_id: input.lock.inference_id,
78
- ...(containerId ? { container_id: containerId } : {}),
79
- });
80
- if (cleaned === "ambiguous")
81
- throw new HitchError("SGLang startup cleanup is ambiguous; device reservation retained", {
82
- code: "inference_recovery_ambiguous", exitCode: 12, cause: error,
83
- });
84
- throw error;
85
- }
86
- let stopped = false;
87
- let stopping;
88
- return {
89
- container_id: containerId,
90
- service_handle: { schema_version: "2", kind: "docker", container_id: containerId },
91
- base_url: `http://127.0.0.1:${port}`,
92
- wire_model: wireModel,
93
- engine_token: engineToken,
94
- admin_token: adminToken,
95
- observation,
96
- checkHealth: () => this.checkHealth(containerId, `http://127.0.0.1:${port}`),
97
- stop: () => {
98
- if (stopped)
99
- return Promise.resolve();
100
- stopping ??= (async () => {
101
- await this.invoke(this.docker, ["rm", "-f", containerId], 30_000);
102
- await releaseInferenceDevice(this.deviceDirectory, input.root, input.serviceId);
103
- stopped = true;
104
- })().finally(() => { stopping = undefined; });
105
- return stopping;
106
- },
107
- };
108
- }
109
- async stopOrphan(root, record) {
110
- if (record.service_handle?.kind === "process")
111
- return "ambiguous";
112
- try {
113
- const selector = record.container_id ? ["--filter", `id=${record.container_id}`]
114
- : ["--filter", `label=io.hitch.root-id=${hitchRootId(root)}`, "--filter", `label=io.hitch.service-id=${record.service_id}`];
115
- const found = await this.invoke(this.docker, ["container", "ls", "-a", "--no-trunc", ...selector, "--format", "{{.ID}}"], 10_000);
116
- const ids = found.stdout.trim().split(/\r?\n/).filter(Boolean);
117
- if (ids.length === 0) {
118
- await releaseInferenceDevice(this.deviceDirectory, root, record.service_id);
119
- return "missing";
120
- }
121
- if (ids.length !== 1 || !/^[a-f0-9]{64}$/.test(ids[0]))
122
- return "ambiguous";
123
- const inspected = await this.inspect(ids[0]);
124
- const labels = inspected.Config?.Labels;
125
- if (labels?.["io.hitch.local-inference"] !== "true" || labels["io.hitch.root-id"] !== hitchRootId(root)
126
- || labels["io.hitch.inference-id"] !== record.inference_id)
127
- return "ambiguous";
128
- await this.invoke(this.docker, ["rm", "-f", ids[0]], 30_000);
129
- await releaseInferenceDevice(this.deviceDirectory, root, record.service_id);
130
- return "stopped";
131
- }
132
- catch {
133
- return "ambiguous";
134
- }
135
- }
136
- async inspect(id) {
137
- const result = await this.invoke(this.docker, ["container", "inspect", "--format", "{{json .}}", id], 10_000);
138
- const value = JSON.parse(result.stdout);
139
- if (typeof value.State?.Running !== "boolean" || typeof value.Image !== "string")
140
- throw new TypeError("invalid Docker container inspection");
141
- return value;
142
- }
143
- async checkHealth(id, baseUrl) {
144
- const state = (await this.inspect(id)).State;
145
- if (!state.Running)
146
- throw new HitchError(`SGLang container exited (${state.ExitCode})`, {
147
- code: state.OOMKilled ? "inference_oom" : "inference_process_exited", exitCode: 12,
148
- });
149
- const health = await this.request(`${baseUrl}/health`, { signal: AbortSignal.timeout(5_000) });
150
- if (!health.ok)
151
- throw new HitchError(`SGLang health returned HTTP ${health.status}`, { code: "inference_route_unavailable", exitCode: 12 });
152
- }
153
- async observe(input, id, baseUrl, token) {
154
- const container = await this.inspect(id);
155
- const response = await this.request(`${baseUrl}/server_info`, {
156
- headers: { Authorization: `Bearer ${token}` }, signal: AbortSignal.timeout(10_000),
157
- });
158
- if (!response.ok)
159
- throw new HitchError("SGLang server_info unavailable", { code: "inference_runtime_mismatch", exitCode: 12 });
160
- let uuid = null;
161
- if (input.lock.execution.platform.backend === "cuda") {
162
- const probe = await this.invoke(this.docker, ["exec", id, "python3", "-c",
163
- "import torch; assert torch.cuda.is_available() and torch.cuda.device_count() == 1; assert torch.zeros(1, device='cuda').item() == 0"], 30_000);
164
- void probe;
165
- uuid = (await this.invoke(this.docker, ["exec", id, "nvidia-smi", "--query-gpu=uuid", "--format=csv,noheader"], 10_000)).stdout.trim();
166
- }
167
- return validateRuntimeObservation(await response.json(), container.Image, uuid, input.lock, input.runtime);
168
- }
169
- async ensureNetwork(name) {
170
- try {
171
- await this.invoke(this.docker, ["network", "inspect", name], 10_000);
172
- return;
173
- }
174
- catch { }
175
- try {
176
- await this.invoke(this.docker, ["network", "create", "--internal", "--driver", "bridge", name], 30_000);
177
- }
178
- catch (error) {
179
- try {
180
- await this.invoke(this.docker, ["network", "inspect", name], 10_000);
181
- }
182
- catch {
183
- throw error;
184
- }
185
- }
186
- }
187
- async waitUntilReady(baseUrl, token, wireModel, lock, containerId, signal) {
188
- const deadline = Date.now() + lock.execution.startup_timeout_ms;
189
- let last = "service did not respond";
190
- while (Date.now() < deadline) {
191
- if (signal?.aborted)
192
- throw new HitchError("SGLang startup cancelled", { code: "cancelled", exitCode: 9 });
193
- const state = (await this.inspect(containerId)).State;
194
- if (!state.Running)
195
- throw new HitchError(`SGLang exited during startup (${state.ExitCode})`, {
196
- code: state.OOMKilled ? "inference_oom" : "inference_process_exited", exitCode: 12,
197
- });
198
- try {
199
- const health = await this.request(`${baseUrl}/health`, { signal: AbortSignal.timeout(2_000) });
200
- if (health.ok) {
201
- const models = await this.request(`${baseUrl}/v1/models`, {
202
- headers: { Authorization: `Bearer ${token}` }, signal: AbortSignal.timeout(5_000),
203
- });
204
- if (!models.ok || !JSON.stringify(await models.json()).includes(wireModel))
205
- throw new Error("served model alias is absent");
206
- await probeSGLangProtocol(this.request, baseUrl, token, wireModel, lock.protocol.api);
207
- return;
208
- }
209
- last = `health returned HTTP ${health.status}`;
210
- }
211
- catch (error) {
212
- if (error instanceof HitchError)
213
- throw error;
214
- last = error.message;
215
- }
216
- await delay(500);
217
- }
218
- throw new HitchError(`SGLang startup timed out: ${last}`, { code: "inference_start_timeout", exitCode: 12 });
219
- }
220
- }
221
- function dockerArguments(input) {
222
- const { lock } = input.input;
223
- const backend = lock.execution.platform;
224
- const image = input.input.runtime.package;
225
- if (image.kind !== "oci")
226
- throw new TypeError("SGLang Docker launch requires an OCI runtime");
227
- return [
228
- "run", "--detach", "--name", input.name,
229
- "--label", "io.hitch.local-inference=true",
230
- "--label", `io.hitch.service-id=${input.input.serviceId}`,
231
- "--label", `io.hitch.root-id=${hitchRootId(input.input.root)}`,
232
- "--label", `io.hitch.inference-id=${lock.inference_id}`,
233
- "--network", input.network,
234
- "--read-only", "--cap-drop", "ALL", "--security-opt", "no-new-privileges", "--pids-limit", "4096",
235
- "--memory", String(lock.resources.memory_bytes), "--cpus", String(lock.resources.cpu_millis / 1_000),
236
- "--shm-size", "2g", "--tmpfs", "/tmp:rw,noexec,nosuid,size=2g",
237
- "--mount", `type=bind,src=${input.modelDirectory},dst=/model,readonly`,
238
- "--mount", `type=bind,src=${input.cacheDirectory},dst=/root/.cache`,
239
- "--publish", `127.0.0.1:${input.port}:30000`,
240
- ...(backend.backend === "cuda" ? ["--gpus", `device=${backend.device_constraint || "0"}`] : []),
241
- ...(backend.backend === "cpu" ? ["--env", "SGLANG_USE_CPU_ENGINE=1", "--env", `OMP_NUM_THREADS=${backend.cpu_threads}`, "--env", `SGLANG_CPU_OMP_THREADS=${backend.cpu_threads}`] : []),
242
- image.image,
243
- "python3", "-m", "sglang.launch_server",
244
- "--model-path", "/model", "--served-model-name", input.wireModel,
245
- "--host", "0.0.0.0", "--port", "30000",
246
- "--api-key", input.engineToken, "--admin-api-key", input.adminToken,
247
- "--random-seed", String(lock.generation.seed),
248
- "--load-format", lock.execution.load_format, "--dtype", lock.execution.dtype,
249
- "--tp-size", "1", "--dp-size", "1", "--pp-size", "1",
250
- "--context-length", String(lock.execution.context_tokens_per_request),
251
- "--max-running-requests", String(lock.execution.max_running_requests),
252
- "--max-total-tokens", String(lock.execution.max_total_tokens),
253
- "--chunked-prefill-size", String(lock.execution.chunked_prefill_size),
254
- "--max-prefill-tokens", String(lock.execution.max_prefill_tokens),
255
- "--kv-cache-dtype", lock.execution.kv_cache_dtype,
256
- "--attention-backend", lock.execution.attention_backend,
257
- "--sampling-backend", lock.execution.sampling_backend,
258
- // Request logging is disabled by default; there is no negative CLI switch.
259
- ...(lock.execution.quantization ? ["--quantization", lock.execution.quantization] : []),
260
- ...(lock.execution.prefix_cache.mode === "disabled" ? ["--disable-radix-cache"] : []),
261
- ...(!backend.overlap_schedule ? ["--disable-overlap-schedule"] : []),
262
- ...(backend.backend === "cuda" ? ["--mem-fraction-static", String(backend.mem_fraction_static)] : ["--device", "cpu"]),
263
- ...(backend.backend === "cuda" && backend.cuda_graph === "disabled" ? ["--disable-cuda-graph"] : []),
264
- ...(lock.protocol.tool_call_parser ? ["--tool-call-parser", lock.protocol.tool_call_parser] : []),
265
- ...(lock.protocol.reasoning_parser ? ["--reasoning-parser", lock.protocol.reasoning_parser] : []),
266
- ...(lock.execution.deterministic_inference ? ["--enable-deterministic-inference"] : []),
267
- ];
268
- }
269
- async function availablePort() {
270
- const server = http.createServer();
271
- await new Promise((resolve, reject) => {
272
- server.once("error", reject);
273
- server.listen(0, "127.0.0.1", resolve);
274
- });
275
- const port = server.address().port;
276
- await new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve()));
277
- return port;
278
- }
279
- //# sourceMappingURL=sglang.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sglang.js","sourceRoot":"","sources":["../../../src/inference/sglang.ts"],"names":[],"mappings":"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"}