bios-mcp 0.1.1-dev.17 → 0.1.1-rc.14
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 +11 -86
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -41,73 +41,22 @@ not claimed without an explicit acknowledgement from the endpoint.
|
|
|
41
41
|
## Safe inference workflow
|
|
42
42
|
|
|
43
43
|
1. `get_inference_gpu_options` returns inference-fit configurations joined to
|
|
44
|
-
authoritative deployment prices and stock.
|
|
45
|
-
|
|
46
|
-
server resolves the model facts (vision-aware) and answers with computed
|
|
47
|
-
`min_gpus`, `valid_counts`, and `bookable_counts` — the exact minimums the
|
|
48
|
-
create gate enforces, so client-supplied facts can never understate a
|
|
49
|
-
minimum. `unknown` is not treated as available; never offer a count below
|
|
50
|
-
`min_gpus` or outside `bookable_counts`.
|
|
44
|
+
authoritative deployment prices and stock. `unknown` is not treated as
|
|
45
|
+
available.
|
|
51
46
|
2. `preflight_inference` validates the exact source, model, GPU, queue, price
|
|
52
47
|
cap, and wallet-hold terms without creating a deployment or mutating funds.
|
|
53
|
-
3. `create_inference` uses the same request contract
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
total hourly price is explicit, and a GPU alternative is never selected
|
|
62
|
-
without approval. `gpu_priorities` backups (1-5 ranked choices) may be
|
|
63
|
-
supplied on ANY create — they form the after-start replacement ladder;
|
|
64
|
-
the queue itself stays opt-in.
|
|
65
|
-
4. `get_inference_booking` polls a booking handle from a long-running
|
|
66
|
-
`create_inference` (pending → revealed payload → or the standard 409).
|
|
67
|
-
5. `get_inference_status` reports durable queue state, provisioning/loading,
|
|
68
|
-
endpoint readiness, price cap, notification summary, and wallet
|
|
69
|
-
authorization. An endpoint is live only when the returned status is
|
|
70
|
-
`running`. `queued_capacity` means waiting for stock at zero charge —
|
|
71
|
-
after a deployment has ever been booked, GPU loss never ends in a
|
|
72
|
-
capacity failure; it waits and auto-resumes.
|
|
73
|
-
6. `get_inference_notifications` reports durable lifecycle-email delivery,
|
|
48
|
+
3. `create_inference` uses the same request contract. Queueing is opt-in, a
|
|
49
|
+
maximum total hourly price is explicit, and a GPU alternative is never
|
|
50
|
+
selected without approval. Its inference key is shown only once.
|
|
51
|
+
4. `get_inference_status` reports durable queue expiry (including
|
|
52
|
+
`status_reason=queue_expired`), provisioning/loading, endpoint readiness,
|
|
53
|
+
price cap, notification summary, and wallet authorization. An endpoint is
|
|
54
|
+
live only when the returned status is `running`.
|
|
55
|
+
5. `get_inference_notifications` reports durable lifecycle-email delivery,
|
|
74
56
|
bounded retries, and operator-visible dead letters.
|
|
75
|
-
|
|
57
|
+
6. `update_inference_policy`, `stop_inference`, `resume_inference`,
|
|
76
58
|
`restart_inference`, and `delete_inference` manage the lifecycle.
|
|
77
59
|
|
|
78
|
-
## Standard capacity error contract
|
|
79
|
-
|
|
80
|
-
Training and inference speak ONE capacity rejection shape: HTTP `409` with
|
|
81
|
-
`error.code = CAPACITY_UNAVAILABLE` (training also echoes the deprecated
|
|
82
|
-
`SELECTED_GPU_UNAVAILABLE` as `legacy_code` for one release). The MCP
|
|
83
|
-
transport serializes it as compact JSON in the tool-error text — even when
|
|
84
|
-
zero alternatives exist — so an agent can act on it directly:
|
|
85
|
-
|
|
86
|
-
```json
|
|
87
|
-
{
|
|
88
|
-
"code": "CAPACITY_UNAVAILABLE",
|
|
89
|
-
"reason": "insufficient_stock | below_model_minimum | invalid_gpu_count | model_too_large",
|
|
90
|
-
"message": "H200 is out of stock",
|
|
91
|
-
"recoverable": true,
|
|
92
|
-
"instruction": "Retry with one of available_gpus (never below its min_gpus), or resubmit with allow_capacity_queue=true.",
|
|
93
|
-
"available_gpus": [
|
|
94
|
-
{ "gpu_type": "H100_80GB", "gpu_count": 2, "min_gpus": 2, "valid_counts": [2, 4, 8],
|
|
95
|
-
"tier": "secure", "price_hour_cents": 598, "available_count": 6 }
|
|
96
|
-
],
|
|
97
|
-
"minimum_requirement": {
|
|
98
|
-
"selected_gpu_min": 2, "selected_valid_counts": [2, 4, 8],
|
|
99
|
-
"per_type": [{ "gpu_type": "H200", "min_gpus": 2, "valid_counts": [2, 4, 8] }]
|
|
100
|
-
},
|
|
101
|
-
"selected": { "gpu_type": "H200", "gpu_count": 2, "availability_status": "out_of_stock" },
|
|
102
|
-
"queue_eligible": false,
|
|
103
|
-
"checked_at": "2026-07-19T00:00:00Z"
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
A `503 ADMISSION_UNAVAILABLE` is a transient market outage, never a capacity
|
|
108
|
-
verdict — retry shortly, never conclude out-of-stock from it. See
|
|
109
|
-
`get_platform_guide` topic `capacity_errors` for the recovery playbook.
|
|
110
|
-
|
|
111
60
|
Raw Hugging Face tokens are intentionally excluded from MCP tool inputs. Store
|
|
112
61
|
the token in a platform Hugging Face integration and pass `hf_integration_id`.
|
|
113
62
|
|
|
@@ -116,30 +65,6 @@ the token in a platform Hugging Face integration and pass `hf_integration_id`.
|
|
|
116
65
|
original acknowledgement instead of creating another job, wallet hold, queue
|
|
117
66
|
entry, or GPU request. The MCP server generates a fresh key when it is omitted.
|
|
118
67
|
|
|
119
|
-
## Training lifecycle (book-before-reveal)
|
|
120
|
-
|
|
121
|
-
Like inference, `create_training_job` books a GPU before it reveals a job.
|
|
122
|
-
The call blocks while the ranked ladder is booked (~40s typical); a job id and
|
|
123
|
-
the "training started" email exist only once a real pod is secured. Read
|
|
124
|
-
`status` on the response and from `get_training_status`:
|
|
125
|
-
|
|
126
|
-
- `booked` — a GPU is secured (booked == secured); the job then provisions,
|
|
127
|
-
downloads, and runs on its own. Money is captured only after this point.
|
|
128
|
-
- `securing` — still booking at the deadline; the async tail continues.
|
|
129
|
-
Poll `get_training_status` until `booked`/`running` (or a terminal state).
|
|
130
|
-
Nothing is charged while securing.
|
|
131
|
-
- `queued` — returned only with explicit queue consent; waits for stock at
|
|
132
|
-
zero charge and books via the same path.
|
|
133
|
-
- A booking-time capacity miss returns the standard `CAPACITY_UNAVAILABLE`
|
|
134
|
-
(409) with fresh `available_gpus` and **no job exists** (nothing charged);
|
|
135
|
-
a transient `503 ADMISSION_UNAVAILABLE` is a retry, never out-of-stock, and
|
|
136
|
-
the platform never auto-substitutes a GPU.
|
|
137
|
-
|
|
138
|
-
If a started job loses its pod, it rests at `interrupted` — a self-heal state
|
|
139
|
-
distinct from `failed` in which billing is already stopped. Call
|
|
140
|
-
`resume_training_job` to continue from the last checkpoint; resume re-books on
|
|
141
|
-
secured capacity before reporting resumed, so the same guarantees apply.
|
|
142
|
-
|
|
143
68
|
Training and deployment share one authoritative GPU-capacity broker. Server
|
|
144
69
|
priority is evaluated first. Within an equal-priority class, the broker rotates
|
|
145
70
|
across users and preserves FIFO order within each user's own requests. This
|