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.
- package/README.md +7 -28
- package/README.zh-CN.md +6 -26
- package/dist/scripts/benchmark-dataset-verification.js +118 -0
- package/dist/scripts/benchmark-dataset-verification.js.map +1 -0
- package/dist/scripts/canary-external-endpoint.js +56 -0
- package/dist/scripts/canary-external-endpoint.js.map +1 -0
- package/dist/scripts/canary-native-training.js +8 -6
- package/dist/scripts/canary-native-training.js.map +1 -1
- package/dist/scripts/canary-remote-training.js +8 -6
- package/dist/scripts/canary-remote-training.js.map +1 -1
- package/dist/scripts/check-architecture.js +1 -1
- package/dist/scripts/check-architecture.js.map +1 -1
- package/dist/src/adapters/providers/codex.js +5 -2
- package/dist/src/adapters/providers/codex.js.map +1 -1
- package/dist/src/adapters/providers/model-call.js +1 -2
- package/dist/src/adapters/providers/model-call.js.map +1 -1
- package/dist/src/adapters/providers/training-tool.js +2 -0
- package/dist/src/adapters/providers/training-tool.js.map +1 -1
- package/dist/src/backends/harbor/artifact-pins.js +42 -0
- package/dist/src/backends/harbor/artifact-pins.js.map +1 -0
- package/dist/src/backends/harbor/backend.js +16 -8
- package/dist/src/backends/harbor/backend.js.map +1 -1
- package/dist/src/backends/harbor/bound-credential-helper.js +24 -0
- package/dist/src/backends/harbor/bound-credential-helper.js.map +1 -0
- package/dist/src/backends/harbor/credential-snapshot.js +71 -0
- package/dist/src/backends/harbor/credential-snapshot.js.map +1 -0
- package/dist/src/backends/harbor/environment-config.js +25 -2
- package/dist/src/backends/harbor/environment-config.js.map +1 -1
- package/dist/src/backends/harbor/environment-files.js +143 -0
- package/dist/src/backends/harbor/environment-files.js.map +1 -0
- package/dist/src/backends/harbor/evaluation-binding.js +160 -0
- package/dist/src/backends/harbor/evaluation-binding.js.map +1 -0
- package/dist/src/backends/harbor/host-credential-helper.js +5 -0
- package/dist/src/backends/harbor/host-credential-helper.js.map +1 -1
- package/dist/src/backends/harbor/index.js +2 -0
- package/dist/src/backends/harbor/index.js.map +1 -1
- package/dist/src/backends/harbor/model-proxy-config.js +3 -18
- package/dist/src/backends/harbor/model-proxy-config.js.map +1 -1
- package/dist/src/backends/harbor/portable-regrade.js +15 -3
- package/dist/src/backends/harbor/portable-regrade.js.map +1 -1
- package/dist/src/backends/harbor/python-runtime.js +71 -0
- package/dist/src/backends/harbor/python-runtime.js.map +1 -0
- package/dist/src/backends/harbor/tools.js +6 -4
- package/dist/src/backends/harbor/tools.js.map +1 -1
- package/dist/src/backends/index.js +3 -0
- package/dist/src/backends/index.js.map +1 -1
- package/dist/src/cli/arguments.js +30 -30
- package/dist/src/cli/arguments.js.map +1 -1
- package/dist/src/cli/commands/capabilities.js +7 -3
- package/dist/src/cli/commands/capabilities.js.map +1 -1
- package/dist/src/cli/commands/daemon.js +0 -17
- package/dist/src/cli/commands/daemon.js.map +1 -1
- package/dist/src/cli/commands/eval-binding.js +32 -0
- package/dist/src/cli/commands/eval-binding.js.map +1 -0
- package/dist/src/cli/commands/eval.js +21 -15
- package/dist/src/cli/commands/eval.js.map +1 -1
- package/dist/src/cli/commands/models.js +32 -45
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/run.js +0 -35
- package/dist/src/cli/commands/run.js.map +1 -1
- package/dist/src/cli/main.js +0 -4
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/output.js +5 -16
- package/dist/src/cli/output.js.map +1 -1
- package/dist/src/control-plane/eval-records.js +3 -1
- package/dist/src/control-plane/eval-records.js.map +1 -1
- package/dist/src/control-plane/eval-recovery.js +4 -1
- package/dist/src/control-plane/eval-recovery.js.map +1 -1
- package/dist/src/control-plane/eval-scheduler.js +16 -8
- package/dist/src/control-plane/eval-scheduler.js.map +1 -1
- package/dist/src/control-plane/index.js +0 -2
- package/dist/src/control-plane/index.js.map +1 -1
- package/dist/src/control-plane/model-capture-planning.js +3 -4
- package/dist/src/control-plane/model-capture-planning.js.map +1 -1
- package/dist/src/control-plane/remote-model-routes.js +4 -24
- package/dist/src/control-plane/remote-model-routes.js.map +1 -1
- package/dist/src/control-plane/remote-offer-contract.js +2 -2
- package/dist/src/control-plane/remote-offer-contract.js.map +1 -1
- package/dist/src/control-plane/remote-result-transport.js +7 -8
- package/dist/src/control-plane/remote-result-transport.js.map +1 -1
- package/dist/src/control-plane/remote-work-coordinator.js +2 -2
- package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
- package/dist/src/control-plane/remote-work-recovery.js +2 -2
- package/dist/src/control-plane/remote-work-recovery.js.map +1 -1
- package/dist/src/control-plane/remote-worker-protocol.js +1 -1
- package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
- package/dist/src/control-plane/remote-worker-runner.js +21 -6
- package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
- package/dist/src/control-plane/remote-workers.js +2 -2
- package/dist/src/control-plane/remote-workers.js.map +1 -1
- package/dist/src/control-plane/rerun-recovery.js +1 -1
- package/dist/src/control-plane/rerun-recovery.js.map +1 -1
- package/dist/src/control-plane/rerun-scheduler.js +21 -14
- package/dist/src/control-plane/rerun-scheduler.js.map +1 -1
- package/dist/src/control-plane/rerun-source.js +5 -2
- package/dist/src/control-plane/rerun-source.js.map +1 -1
- package/dist/src/control-plane/rerun-submission.js +7 -5
- package/dist/src/control-plane/rerun-submission.js.map +1 -1
- package/dist/src/control-plane/synthetic-result.js +3 -2
- package/dist/src/control-plane/synthetic-result.js.map +1 -1
- package/dist/src/control-plane/worker-model-relay.js +1 -1
- package/dist/src/control-plane/worker-model-relay.js.map +1 -1
- package/dist/src/controller-runtime/hash.js +6 -0
- package/dist/src/controller-runtime/hash.js.map +1 -1
- package/dist/src/daemon/client.js +12 -35
- package/dist/src/daemon/client.js.map +1 -1
- package/dist/src/daemon/evaluation-binding.js +33 -0
- package/dist/src/daemon/evaluation-binding.js.map +1 -0
- package/dist/src/daemon/evaluation-submission.js +27 -0
- package/dist/src/daemon/evaluation-submission.js.map +1 -0
- package/dist/src/daemon/index.js +1 -0
- package/dist/src/daemon/index.js.map +1 -1
- package/dist/src/daemon/json-stream.js +98 -0
- package/dist/src/daemon/json-stream.js.map +1 -0
- package/dist/src/daemon/scheduler.js +1 -4
- package/dist/src/daemon/scheduler.js.map +1 -1
- package/dist/src/daemon/server.js +14 -54
- package/dist/src/daemon/server.js.map +1 -1
- package/dist/src/domain/endpoints.js +2 -0
- package/dist/src/domain/endpoints.js.map +1 -0
- package/dist/src/domain/evaluation-binding.js +5 -0
- package/dist/src/domain/evaluation-binding.js.map +1 -0
- package/dist/src/domain/index.js +2 -0
- package/dist/src/domain/index.js.map +1 -1
- package/dist/src/domain/runs.js.map +1 -1
- package/dist/src/evals/benchmark-adapter-manifest.js +95 -32
- package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
- package/dist/src/evals/benchmark-verification.js +106 -0
- package/dist/src/evals/benchmark-verification.js.map +1 -0
- package/dist/src/evals/collect-only-rerun.js +3 -2
- package/dist/src/evals/collect-only-rerun.js.map +1 -1
- package/dist/src/evals/directory.js +9 -1
- package/dist/src/evals/directory.js.map +1 -1
- package/dist/src/evals/endpoint-attempts.js +112 -0
- package/dist/src/evals/endpoint-attempts.js.map +1 -0
- package/dist/src/evals/endpoint-usage.js +8 -0
- package/dist/src/evals/endpoint-usage.js.map +1 -0
- package/dist/src/evals/environment-binding.js +9 -0
- package/dist/src/evals/environment-binding.js.map +1 -0
- package/dist/src/evals/eval-artifact-planning.js +10 -1
- package/dist/src/evals/eval-artifact-planning.js.map +1 -1
- package/dist/src/evals/eval-finalization.js +2 -3
- package/dist/src/evals/eval-finalization.js.map +1 -1
- package/dist/src/evals/eval-logical-plan.js +2 -0
- package/dist/src/evals/eval-logical-plan.js.map +1 -1
- package/dist/src/evals/eval-result-builder.js +4 -0
- package/dist/src/evals/eval-result-builder.js.map +1 -1
- package/dist/src/evals/eval-state.js +22 -0
- package/dist/src/evals/eval-state.js.map +1 -0
- package/dist/src/evals/execution-plan.js +6 -2
- package/dist/src/evals/execution-plan.js.map +1 -1
- package/dist/src/evals/index.js +5 -1
- package/dist/src/evals/index.js.map +1 -1
- package/dist/src/evals/infrastructure-retry.js +2 -0
- package/dist/src/evals/infrastructure-retry.js.map +1 -1
- package/dist/src/evals/model-capture-runtime.js +9 -13
- package/dist/src/evals/model-capture-runtime.js.map +1 -1
- package/dist/src/evals/native-phase-evidence.js +8 -2
- package/dist/src/evals/native-phase-evidence.js.map +1 -1
- package/dist/src/evals/planned-execution.js +7 -2
- package/dist/src/evals/planned-execution.js.map +1 -1
- package/dist/src/evals/planned-progress-publisher.js +18 -5
- package/dist/src/evals/planned-progress-publisher.js.map +1 -1
- package/dist/src/evals/planned-retry-execution.js +1 -0
- package/dist/src/evals/planned-retry-execution.js.map +1 -1
- package/dist/src/evals/preparation-rerun.js +0 -1
- package/dist/src/evals/preparation-rerun.js.map +1 -1
- package/dist/src/evals/progress.js +92 -7
- package/dist/src/evals/progress.js.map +1 -1
- package/dist/src/evals/records.js +12 -2
- package/dist/src/evals/records.js.map +1 -1
- package/dist/src/evals/recovery.js +2 -0
- package/dist/src/evals/recovery.js.map +1 -1
- package/dist/src/evals/remote-rerun-execution.js +1 -3
- package/dist/src/evals/remote-rerun-execution.js.map +1 -1
- package/dist/src/evals/remote-verifier-rerun.js +1 -1
- package/dist/src/evals/remote-verifier-rerun.js.map +1 -1
- package/dist/src/evals/request.js +14 -45
- package/dist/src/evals/request.js.map +1 -1
- package/dist/src/evals/rerun-observation.js +31 -0
- package/dist/src/evals/rerun-observation.js.map +1 -0
- package/dist/src/evals/rerun.js +23 -28
- package/dist/src/evals/rerun.js.map +1 -1
- package/dist/src/evals/service.js +45 -42
- package/dist/src/evals/service.js.map +1 -1
- package/dist/src/evals/shared-runtime.js +125 -0
- package/dist/src/evals/shared-runtime.js.map +1 -0
- package/dist/src/evals/trial-import.js +10 -2
- package/dist/src/evals/trial-import.js.map +1 -1
- package/dist/src/evals/trial-publication-recovery.js +1 -1
- package/dist/src/evals/trial-publication-recovery.js.map +1 -1
- package/dist/src/evals/verifier-artifacts.js +1 -0
- package/dist/src/evals/verifier-artifacts.js.map +1 -1
- package/dist/src/evals/verifier-only-rerun.js +1 -1
- package/dist/src/evals/verifier-only-rerun.js.map +1 -1
- package/dist/src/evals/verifier-rerun-result.js +3 -2
- package/dist/src/evals/verifier-rerun-result.js.map +1 -1
- package/dist/src/evals/verifier-score-artifacts.js +9 -1
- package/dist/src/evals/verifier-score-artifacts.js.map +1 -1
- package/dist/src/foundation/config.js +0 -5
- package/dist/src/foundation/config.js.map +1 -1
- package/dist/src/inference/index.js +3 -22
- package/dist/src/inference/index.js.map +1 -1
- package/dist/src/inference/lock.js +44 -130
- package/dist/src/inference/lock.js.map +1 -1
- package/dist/src/model-access/endpoint-contract.js +127 -0
- package/dist/src/model-access/endpoint-contract.js.map +1 -0
- package/dist/src/model-access/endpoint-credentials.js +54 -0
- package/dist/src/model-access/endpoint-credentials.js.map +1 -0
- package/dist/src/model-access/endpoint-probe-stream.js +66 -0
- package/dist/src/model-access/endpoint-probe-stream.js.map +1 -0
- package/dist/src/model-access/endpoint-verification.js +76 -0
- package/dist/src/model-access/endpoint-verification.js.map +1 -0
- package/dist/src/model-access/endpoints.js +105 -0
- package/dist/src/model-access/endpoints.js.map +1 -0
- package/dist/src/model-access/index.js +5 -1
- package/dist/src/model-access/index.js.map +1 -1
- package/dist/src/model-access/proxy.js +57 -14
- package/dist/src/model-access/proxy.js.map +1 -1
- package/dist/src/model-access/remote-model.js +21 -29
- package/dist/src/model-access/remote-model.js.map +1 -1
- package/dist/src/model-access/usage.js +30 -0
- package/dist/src/model-access/usage.js.map +1 -0
- package/dist/src/runs/endpoint-runtime.js +40 -0
- package/dist/src/runs/endpoint-runtime.js.map +1 -0
- package/dist/src/runs/executor.js +28 -42
- package/dist/src/runs/executor.js.map +1 -1
- package/dist/src/runs/local-inference-environment.js +5 -53
- package/dist/src/runs/local-inference-environment.js.map +1 -1
- package/dist/src/runs/manifest.js +1 -0
- package/dist/src/runs/manifest.js.map +1 -1
- package/dist/src/runs/outcome.js +3 -10
- package/dist/src/runs/outcome.js.map +1 -1
- package/dist/src/runs/queued.js +3 -2
- package/dist/src/runs/queued.js.map +1 -1
- package/dist/src/runs/records.js +3 -0
- package/dist/src/runs/records.js.map +1 -1
- package/dist/src/runs/request.js +10 -38
- package/dist/src/runs/request.js.map +1 -1
- package/dist/src/workers/remote-harbor-work-spec.js +8 -10
- package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
- package/dist/src/workers/remote-harbor-worker.js +3 -0
- package/dist/src/workers/remote-harbor-worker.js.map +1 -1
- package/docs/evidence/eval-preparation-2026-10-09.json +393 -0
- package/docs/evidence/eval-preparation-2026-10-09.md +178 -0
- package/docs/local-model-inference-spec.zh-CN.md +4 -663
- package/docs/resource-storage.zh-CN.md +116 -0
- package/docs/schemas/endpoint-evaluation-attempt.schema.json +29 -0
- package/docs/schemas/eval-artifact-pin.schema.json +14 -0
- package/docs/schemas/eval-execution-plan.schema.json +486 -105
- package/docs/schemas/eval-progress.schema.json +1 -1
- package/docs/schemas/eval-request.schema.json +149 -18
- package/docs/schemas/eval-rerun-submission.schema.json +8 -1
- package/docs/schemas/eval-result.schema.json +310 -56
- package/docs/schemas/evaluation-binding.schema.json +15 -0
- package/docs/schemas/external-endpoint-binding.schema.json +153 -0
- package/docs/schemas/external-endpoint-config.schema.json +93 -0
- package/docs/schemas/inference-execution-evidence.schema.json +253 -3
- package/docs/schemas/inference-lock-v3.schema.json +6 -0
- package/docs/schemas/inference-lock.schema.json +842 -341
- package/docs/schemas/ordered-eval-control.schema.json +7 -1
- package/docs/schemas/ready-endpoint-binding.schema.json +201 -0
- package/docs/schemas/run-manifest.schema.json +6 -0
- package/docs/schemas/run-request.schema.json +122 -20
- package/examples/external-inference/.env.example +16 -0
- package/examples/external-inference/README.md +203 -0
- package/examples/external-inference/accept.mjs +297 -0
- package/examples/external-inference/compose.gateway.yaml +119 -0
- package/examples/external-inference/compose.single.yaml +64 -0
- package/examples/external-inference/compose.tp2.yaml +15 -0
- package/examples/external-inference/deployment.example.json +58 -0
- package/examples/external-inference/endpoint.chat-completions.example.json +13 -0
- package/examples/external-inference/endpoint.responses.example.json +13 -0
- package/integrations/harbor/hitch_build_inputs.py +213 -0
- package/integrations/harbor/hitch_build_process.py +126 -0
- package/integrations/harbor/hitch_compose_preparation.py +274 -0
- package/integrations/harbor/hitch_harbor_agent.py +25 -39
- package/integrations/harbor/hitch_harbor_environment.py +96 -3
- package/integrations/harbor/hitch_image_cache.py +357 -0
- package/integrations/harbor/hitch_python_runtime.py +303 -0
- package/integrations/harbor/hitch_shared_runtime.py +123 -0
- package/integrations/model-call/cli.js +11 -10
- package/integrations/training-tool/cli.js +5 -3
- package/node_modules/smol-toml/LICENSE +24 -0
- package/node_modules/smol-toml/README.md +418 -0
- package/node_modules/smol-toml/dist/date.d.ts +41 -0
- package/node_modules/smol-toml/dist/date.js +127 -0
- package/node_modules/smol-toml/dist/error.d.ts +38 -0
- package/node_modules/smol-toml/dist/error.js +63 -0
- package/node_modules/smol-toml/dist/extract.js +69 -0
- package/node_modules/smol-toml/dist/index.cjs +734 -0
- package/node_modules/smol-toml/dist/index.d.ts +43 -0
- package/node_modules/smol-toml/dist/index.js +33 -0
- package/node_modules/smol-toml/dist/parse.d.ts +36 -0
- package/node_modules/smol-toml/dist/parse.js +149 -0
- package/node_modules/smol-toml/dist/primitive.js +238 -0
- package/node_modules/smol-toml/dist/stringify.d.ts +31 -0
- package/node_modules/smol-toml/dist/stringify.js +181 -0
- package/node_modules/smol-toml/dist/struct.js +179 -0
- package/node_modules/smol-toml/dist/util.d.ts +38 -0
- package/node_modules/smol-toml/dist/util.js +89 -0
- package/node_modules/smol-toml/package.json +68 -0
- package/package.json +15 -4
- package/dist/src/cli/commands/local.js +0 -130
- package/dist/src/cli/commands/local.js.map +0 -1
- package/dist/src/cli/commands/model-node.js +0 -26
- package/dist/src/cli/commands/model-node.js.map +0 -1
- package/dist/src/control-plane/inference-manager.js +0 -357
- package/dist/src/control-plane/inference-manager.js.map +0 -1
- package/dist/src/control-plane/managed-gateway-receipt.js +0 -26
- package/dist/src/control-plane/managed-gateway-receipt.js.map +0 -1
- package/dist/src/control-plane/managed-service-recovery.js +0 -158
- package/dist/src/control-plane/managed-service-recovery.js.map +0 -1
- package/dist/src/daemon/inference-prepare.js +0 -47
- package/dist/src/daemon/inference-prepare.js.map +0 -1
- package/dist/src/inference/daemon-capacity.js +0 -41
- package/dist/src/inference/daemon-capacity.js.map +0 -1
- package/dist/src/inference/device-reservation.js +0 -58
- package/dist/src/inference/device-reservation.js.map +0 -1
- package/dist/src/inference/doctor.js +0 -95
- package/dist/src/inference/doctor.js.map +0 -1
- package/dist/src/inference/generation-recovery.js +0 -83
- package/dist/src/inference/generation-recovery.js.map +0 -1
- package/dist/src/inference/managed-launcher.js +0 -35
- package/dist/src/inference/managed-launcher.js.map +0 -1
- package/dist/src/inference/materialize.js +0 -66
- package/dist/src/inference/materialize.js.map +0 -1
- package/dist/src/inference/model-location.js +0 -34
- package/dist/src/inference/model-location.js.map +0 -1
- package/dist/src/inference/node-client.js +0 -167
- package/dist/src/inference/node-client.js.map +0 -1
- package/dist/src/inference/node-registry.js +0 -79
- package/dist/src/inference/node-registry.js.map +0 -1
- package/dist/src/inference/observation.js +0 -79
- package/dist/src/inference/observation.js.map +0 -1
- package/dist/src/inference/preflight.js +0 -132
- package/dist/src/inference/preflight.js.map +0 -1
- package/dist/src/inference/process-sglang.js +0 -169
- package/dist/src/inference/process-sglang.js.map +0 -1
- package/dist/src/inference/protocol-probe.js +0 -29
- package/dist/src/inference/protocol-probe.js.map +0 -1
- package/dist/src/inference/remote-model-store.js +0 -24
- package/dist/src/inference/remote-model-store.js.map +0 -1
- package/dist/src/inference/runtime-catalog.js +0 -41
- package/dist/src/inference/runtime-catalog.js.map +0 -1
- package/dist/src/inference/runtime-store.js +0 -93
- package/dist/src/inference/runtime-store.js.map +0 -1
- package/dist/src/inference/service-attachment.js +0 -46
- package/dist/src/inference/service-attachment.js.map +0 -1
- package/dist/src/inference/service-inspection.js +0 -38
- package/dist/src/inference/service-inspection.js.map +0 -1
- package/dist/src/inference/sglang.js +0 -279
- package/dist/src/inference/sglang.js.map +0 -1
- package/dist/src/inference/supervisor.js +0 -460
- package/dist/src/inference/supervisor.js.map +0 -1
- package/dist/src/model-access/local-gateway-request.js +0 -139
- package/dist/src/model-access/local-gateway-request.js.map +0 -1
- package/dist/src/model-access/local-gateway.js +0 -323
- package/dist/src/model-access/local-gateway.js.map +0 -1
- package/dist/src/runs/local-inference-run.js +0 -53
- 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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"}
|