Repository navigation
Conversation
bc30d30 to
48fa10f
Compare
|
Thanks @devopsfortunato, splitting the reload wait from the restart drain is a good fix: a client could not tell a model load from a shutdown before. Two small things. First, On the names: #2196 counts the same refusals under its own, and clients will key on one set. We'll take your |
48fa10f to
bbbd150
Compare
Review on ashhart#2202: a busy embedding engine answered engine_unavailable, so a client waited for a restart that was not coming. Busy now answers engine_busy and says busy; only a closed or stale engine stays engine_unavailable. Refs ashhart#2135.
|
Both points are done, head is now
Checks on this head: Glad to hear #2196's counters will reuse the |
Review on ashhart#2202: a busy embedding engine answered engine_unavailable, so a client waited for a restart that was not coming. Busy now answers engine_busy and says busy; only a closed or stale engine stays engine_unavailable. Refs ashhart#2135.
bbbd150 to
881dadb
Compare
|
Thanks @devopsfortunato. The embeddings split now matches chat and speech, and the test pins it through the route's own envelope. Ready to land, and it's in the queue. #2196's counters will follow your names. |
Review on ashhart#2202: a busy embedding engine answered engine_unavailable, so a client waited for a restart that was not coming. Busy now answers engine_busy and says busy; only a closed or stale engine stays engine_unavailable. Refs ashhart#2135.
881dadb to
15c4ccb
Compare
A parked engine's reload answered as server_restarting; it now names engine_loading or engine_reload_failed, and capacity refusals carry engine_busy, engine_unavailable or memory_pressure from the same bounded table. The drain's body bytes, every status code and every other message are unchanged, and the Messages routes keep their Anthropic envelope with no code field. Refs ashhart#2135.
Review on ashhart#2202: a busy embedding engine answered engine_unavailable, so a client waited for a restart that was not coming. Busy now answers engine_busy and says busy; only a closed or stale engine stays engine_unavailable. Refs ashhart#2135.
15c4ccb to
e9aa096
Compare
|
Thank you @devopsfortunato. This is merged into main with your commits under your own name, so you're listed as a TensorFold contributor. It ships in the next release, credited to you in the changelog and the release notes. |
|
Thanks @devopsfortunato! This is in TensorFold 1.2.3, out now: https://github.com/ashhart/TensorFold/releases/tag/v1.2.3 |
What this changes
c588759e7)atc overlap --json, after the latest rebase: 4 entries carryconflict: "conflicts"— tokenizer: read a Qwen2 slow-tokenizer export when tokenizer.json is absent #2225, qwen CUDA: a faster opt-in paged path (TF_QWEN_KV_PAGES=256), --parallel a cap with pages set #2011 and Metal: the 27B verifies 32 rows a pass on pre-M5 Macs #1841 areCHANGELOG.mdalone (the shared top-bullet slot), and kimi: experimental K3.1 index operators on Metal, native serving stays capped #2228 also reportszig/src/server/chat.zig. kimi: experimental K3.1 index operators on Metal, native serving stays capped #2228 is based on a main older thancached_tokensandtool_parse, so its wholechat.zigdiverges from current main; my part of that file is one import line plus the three capacity arm lines, so once kimi: experimental K3.1 index operators on Metal, native serving stays capped #2228 rebases onto current main the overlap disappears (it does not touch those arms). No rebase of this branch is needed for any of them; it is on current main (c588759e7), rebased twice while the PR was open.A parked engine's reload wait and the retryable capacity refusals now name their reason in one fixed
codefrom a bounded table (zig/src/server/wait_reason.zig):server_restarting(the drain, unchanged),engine_loadingandengine_reload_failed(a parked model still unloading, or whose reload failed — both used to answer with the restart body,"code": "server_restarting"and "server restarting: retry shortly", so a client could not tell a shutdown from a model load), andengine_busy/engine_unavailable/memory_pressureon the capacity refusals that carried no code at all.Status codes, the drain body's bytes, Retry-After values and every 400 refusal are unchanged; the code is additive. A capacity refusal keeps the frozen Python engine's shape (
typeinvalid_request_error, its message, and noRetry-After). The Messages routes keep their Anthropic envelope, which has no code field, and the Sliding Weights learn/delete and imprint routes keep their own 503 bodies;docs/api.mdsays so.Review fix on this head (maintainer's two points)
embeddings.ziganswered a busy engine withengine_unavailable, so a client could wait for a restart that was not coming.Busynow answersengine_busyand says "the embedding engine is busy; retry shortly", matching chat and speech; onlyClosed/Stalestayengine_unavailable. A new host test inembedding_service_test.zigpins both codes and both messages through the same envelope the route sends.c588759e7); the only conflict each time wasCHANGELOG.md's top bullet, resolved by keeping both, andchat.zig's import merge was clean.Checks on this head
881dadb32(two commits, rebased ontoc588759e7)python3 tools/zig/lean_check.py, on this tree: 425 problems, 0 new (the file count moved to 5458 with the rebased tree; the problem count is the same as main's).zig build test-server-cpu --summary all— 1046 passed, 0 failed, 1 skipped of 1047 (the skip is the pre-existinglibtfgrammar.sogrammar-backend test). Includes the fivewait_reason_testcases (bounded table, frozen drain body, reload mapping, capacity code with a control, and the two end-to-end route tests) and the new embeddings busy/closed test.zig build test-rerank-host --summary all— 37 passed, 1 skipped (run on the previous head; the review fix does not touch rerank).zig build test-golden --summary all— 0 unexpected differences (322/335 and 55/55 equal).zig build test-server-security --summary all— 24 passed, 0 failed; 20/20 host tests.zig fmt --check build.zig zigandgit diff --check— clean.881dadb32): all 7 checks pass —zig,zig-windows,zig-macos-dev-tools,fmt,release-paths (ubuntu-24.04),benchmark-clients (ubuntu-latest)andbenchmark-clients (windows-latest). Both earlier heads were 7/7 green too.Receipt
n/a: this change cannot reach inference. It only widens the JSON error object of retryable 503s and gives the idle-reload wait its own reason; no kernel, weight, sampling, scheduling or arithmetic path changes, so exactness, decode/prompt speed and kernel-contract receipts do not apply. What does change on the wire is pinned by the tests: the drain body is byte-frozen, the capacity envelope keeps
messageandtypeand addscode, and the route tests assert the full status line,Retry-After: 30and the code.Checklist
codes and the absence ofserver_restarting, which main'sdraining()answer necessarily contains; the embeddings test pinsengine_busyfor a busy engine andengine_unavailablefor a closed one. They skip cleanly without a GPU or grammar library.