Repository navigation
Conversation
…ake is a 400 A client could not tell from /v1/models whether a model takes image or video parts, and a video_url part sent to a server whose model reads video but which has no libtfvideo (GLM-5.3-Flash with the default image) ended in HTTP 500 at the first video (ashhart#3004). Each model entry now ends with "input_types": ["text"], plus "image" with --vision, plus "video" when the checkpoint offers video and libtfvideo loads. The keys before it keep their order and bytes. There is no new option: the server decides it once at startup (input_types.zig), loading libtfvideo with the loader every video uses, which keeps its answer, and only when the model offers video. Server.media() takes its image and video flags from the same Inputs, so every request route (chat, completions, responses, messages, tokenize) refuses a video_url part on a server that does not list "video" with the 400 an unsupported part gets (invalid_request_error). The startup log names the missing library once. If libtfvideo still fails at a video, that is now a 400 naming the library instead of a 500. The 17 server goldens holding a /v1/models reply gain the key on each entry (the fake engine is text only) and 25 bytes of Content-Length per entry, and nothing else. New tests in models_input_types_test.zig cover the listing (text, image, image and video, and video without the library), the 400 for both kinds of model without video, and the library refusal. docs/api.md describes the key; docs/vision.md says when libtfvideo loads. Co-authored-by: WebReflection <85749+WebReflection@users.noreply.github.com>
This was referenced Nov 13, 2026
Author
|
/atc depends 3019 |
ashhart
force-pushed
the
lead/models-input-types
branch
from
November 14, 2026 03:15
0029d0e to
eab1e7e
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
Adds the request-layer
repetition_penaltycontract while engine capability remains opt-in. Chat, completions, Messages and Responses accept a positive finite float32 factor; omission andnulluse identity factor1; a backend without the capability refuses an effective nonidentity factor before generation. Ifgeneration_config.jsondeclares an active factor, startup tells the operator to pass it explicitly.lead/models-input-typesat0029d0e822f73363cc9e0f774a3e52837bb7a4de. This PR contributes0029d0e8..bedf1b166.atc overlap --json: selected inspection of GLM-5.3-Flash CUDA: shared rounds draft MTP for every stream at once #2856, GLM on CUDA: kept states, carries and prompt twins under the latent split (TF_GLM_KV_SPLIT, #1431 part 4; stacked on #2937) #2938 and parent server: /v1/models lists each model's input_types; a video it can't take is a 400, not a 500 (#3004) #3019 is complete. GLM on CUDA: kept states, carries and prompt twins under the latent split (TF_GLM_KV_SPLIT, #1431 part 4; stacked on #2937) #2938 shares one file and merges cleanly; server: /v1/models lists each model's input_types; a video it can't take is a 400, not a 500 (#3004) #3019 shares 19 files and merges cleanly; GLM-5.3-Flash CUDA: shared rounds draft MTP for every stream at once #2856 shares none. This is selected coverage.Stack order: this request/API layer, #3154 (kernels/contracts), then #3155 (GLM engine wiring). All three drafts target
lead/models-input-typesand identify their own commit ranges.Checks on this head
bedf1b166.zig build test-repetition-api-host test-golden --summary all: 8/8 steps; 29/29 focused unit tests; 55/55 fixture/security goldens; 319/331 server goldens with 12 known differences and zero unexpected differences.zig build test test-kernel-contract test-golden fuzz-cortheon --summary all: 677/677 steps; 8,679 passed, 222 skipped, zero failed.zig fmt --check build.zig zig,git diff --check, andtools/pr_check.py: pass; 31 changed files and zero new lean findings.zig build: 26/29 steps succeeded;tf-qwen35-cudahits seven Windowsstd.c/fabric-network errors. The exact parent0029d0e8reproduces the same seven errors and 26/29 result; this PR does not change that code.Receipt
nullequal to1; no profile, checkpoint or server-wide default.Checklist