QVAC-23075 feat[api]: expose image_no_upscale in the SDK config schema - #3854
Merged
Conversation
Contributor
Review StatusCurrent Status: ✅ APPROVED |
Contributor
License compliance — findings detected (warn-only)Critical: 0 · High: 7 · Medium: 0
How to resolve a blocking finding:
Warn-only (shadow) mode — this check does not block merges yet. Updated automatically by the canonical license compliance workflow. NOTICE presence (advisory)Missing NOTICE (advisory, does not block):
|
yingying0906
added a commit
that referenced
this pull request
Aug 14, 2026
Parses the idefics3-style preprocessing override out of the load config and forwards it to the vision context, so a caller can say "on" or "off" instead of being stuck with whatever the GGUF declares. Unset leaves the model's own value alone. This is what separates the VisionPsy Flash checkpoint from the base one, whose mmprojs are otherwise indistinguishable, so a Flash checkpoint loaded without it silently runs base preprocessing. It changes the image token count, so it moves both accuracy and encode time. LoadConfigHandlers parses the string into common_params, and MtmdLlmContext::initVisionContext copies it into mtmd_context_params next to image_tile_mode. Unit coverage for the parse sits with the other load-config cases. Needs the fabric side, tetherto/qvac-fabric-llm.cpp#205, which adds image_no_upscale to common_params and mtmd_context_params. cpp-lint stays red here until that merges and the registry publishes the next fabric version. Split out at Gianfranco's request. The SDK schema is #3854 and the VLM benchmark is #3855.
yingying0906
added a commit
that referenced
this pull request
Aug 14, 2026
Parses the idefics3-style preprocessing override out of the load config and forwards it to the vision context, so a caller can say "on" or "off" instead of being stuck with whatever the GGUF declares. Unset leaves the model's own value alone. This is what separates the VisionPsy Flash checkpoint from the base one, whose mmprojs are otherwise indistinguishable, so a Flash checkpoint loaded without it silently runs base preprocessing. It changes the image token count, so it moves both accuracy and encode time. LoadConfigHandlers parses the string into common_params, and MtmdLlmContext::initVisionContext copies it into mtmd_context_params next to image_tile_mode. Unit coverage for the parse sits with the other load-config cases. Needs the fabric side, tetherto/qvac-fabric-llm.cpp#205, which adds image_no_upscale to common_params and mtmd_context_params. cpp-lint stays red here until that merges and the registry publishes the next fabric version. Split by area. The SDK schema is #3854 and the VLM benchmark is #3855.
yingying0906
force-pushed
the
feat/QVAC-23075-visionpsy-sdk
branch
from
August 14, 2026 04:25
70b4bd1 to
ab3bbf3
Compare
yingying0906
added a commit
that referenced
this pull request
Aug 14, 2026
Adds the base and Flash VisionPsy checkpoints to the model catalog, with their manifest entries, and the plumbing the comparison needed to be fair: - `resolve-cli-model.cjs` resolves a spec to the blob the CLI legs load, so an addon leg and a CLI leg run the same bytes at the same ctx_size. - `cli-args.cjs` carries a catalog entry's `cliArgs` to the CLI legs, since model-specific flags such as VisionPsy Flash's `--image-no-upscale` are fabric-fork additions that upstream-cli aborts on. - `stdout-parser.js` and `aggregate.js` read vision-encode timing and score the new rows. `package.json` registers the new `__tests__` in `test:prestage` so they run in CI. The manifest gains the VisionPsy blobs the catalog points at; without them the catalog resolves to keys that do not exist. Split by area. The addon side stays in #3725 and the SDK schema is #3854.
yingying0906
force-pushed
the
feat/QVAC-23075-visionpsy-sdk
branch
from
August 14, 2026 04:42
ab3bbf3 to
66ba8b1
Compare
Adds the idefics3-style preprocessing switch to the llamacpp completion config so a caller can override what the GGUF says. "on" rounds the image's long side up to a whole number of slices and caps it, so an image below the cap keeps its own resolution and becomes far fewer slices; "off" always stretches the long side to the cap. Unset keeps the model's own value. This is what separates the VisionPsy Flash checkpoint from the base one, whose mmprojs are otherwise indistinguishable, so a Flash checkpoint loaded without it silently runs base preprocessing. It changes the image token count, so it moves both accuracy and encode time. Additive and optional, so [api] rather than [bc]. The generated Python client is regenerated in the same commit because pr-checks-sdk-python.yml runs generate.py --check and fails the merge guard on a stale client.
yingying0906
force-pushed
the
feat/QVAC-23075-visionpsy-sdk
branch
from
August 17, 2026 03:59
66ba8b1 to
1d29067
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
maxim-smotrov
had a problem deploying
to
release
August 19, 2026 08:43 — with
GitHub Actions
Failure
Contributor
QVAC E2E —
|
Contributor
QVAC E2E —
|
Contributor
Contributor
Contributor
iancris
approved these changes
Aug 19, 2026
gianni-cor
approved these changes
Aug 19, 2026
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 problem does this PR solve?
📝 How does it solve it?
0.44.0image_no_upscaleon the llamacpp completion config, an optional"on" | "off"that overrides the idefics3-style preprocessing rule the GGUF declares."on"rounds the image's long side up to a whole number of slices and caps it, so an image below the cap keeps its own resolution and becomes far fewer slices."off"always stretches the long side to the cap.sdk-python/_generatedfiles are in the same commit on purpose.pr-checks-sdk-python.ymlrunsgenerate.py --checkand fails with "Generated Python client is stale" ifcontract/schema.jsonmoves without them, which then cascades intomerge-guard / validate-pr.🧪 How was it tested?
CI run: https://github.com/tetherto/qvac/actions/runs/32269149688?pr=3854
image_no_upscalevalues."on"and"off"and verifies that"on"uses less than half as many prompt tokens.🔌 API Changes