Publish fine-tuned model to catalog and assign to a running app#7
Publish fine-tuned model to catalog and assign to a running app#7keypair34 wants to merge 7 commits into
Conversation
After a fine-tuned GGUF finishes uploading to Hugging Face, let the user register it into the GresIQ model catalog and assign it straight to a running app from the same screen, so a fine-tune can go live without an App Store update. Depends on smbcloud-gresiq-sdk 0.4.9's new create_model() (not yet published to crates.io) and the matching backend endpoint in smbcloud-api (not yet deployed) -- this branch will not build from crates.io until 0.4.9 is published. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Confirms the publish-to-catalog branch now builds cleanly straight from crates.io with no local patch needed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Adds a post-upload flow to register a fine-tuned GGUF into the GresIQ catalog (gresiq::create_model) and a new PublishModel screen to assign it to a running app. app.rs wires the a key on GgufDetail, spawns the register task, and handles ModelRegistered/ModelRegisterFailed events; ui.rs renders the new picker and updated footers. derive_base_model_meta guesses family/parameter class from the base model id and has tests.
Reviewers should check the assign path in the new screen (it relies on assigning_for_app_index + models_cursor state being consistent) and the family-detection ordering in derive_base_model_meta.
Automated review by siGit Code · commit a248667
- Run cargo fmt to fix the CI Format check failures - Hold the freshly registered model by id/name in dedicated fields instead of a models_cursor index, so assignment can't drift onto a different row if the models list is ever reloaded while the publish screen is open - Fix parameter-class detection to require a digit boundary, so a size like 3B can no longer falsely match inside 13B or 43B - Key the apps-list loading indicator off apps_loaded instead of busy, since busy can flip back to false from an unrelated event before the apps fetch actually finishes - Add regression tests for the size-detection fix Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Adds a publish-to-catalog flow: after a fine-tuned GGUF uploads to HF, pressing a on GgufDetail registers it via the new gresiq::create_model (SDK 0.4.9) and transitions to a new PublishModel screen for immediate assignment to a running app.
Key pieces: new Screen::PublishModel, AuthEvent::ModelRegistered/ModelRegisterFailed, publish_model_id/name state held by id (not cursor) to survive model reloads, derive_base_model_meta for family/param-class inference with contains_size_token guarding against substring size mismatches, plus UI rendering and footer/loading-state fixes.
Reviewers should focus on the busy/loading interplay in trigger_publish_model (concurrent apps fetch vs. registration) and the size-token detection edge cases.
Automated review by siGit Code · commit a20fe81
- Bound the size-token match on both sides, not just the leading digit check, so "3B" can no longer match inside "3Beta" or "3B2" - Note why trigger_load_apps must run before app.busy is set to true in trigger_publish_model, since it early-returns when busy - Give the apps-list empty state a per-screen hint, since "Press n to create one" was showing on the publish picker where n does nothing - Add regression tests for the boundary fix Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Adds a publish-to-catalog flow: after a fine-tuned GGUF uploads to HF, pressing a on GgufDetail registers it via the new gresiq::create_model (bumped SDK 0.3.35→0.4.9) and transitions to a new PublishModel screen that reuses the apps picker to assign the model live. Includes helpers derive_base_model_meta/contains_size_token for inferring family/parameter class, plus unit tests. render_apps_list now takes a custom empty hint and keys its loading state on apps_loaded instead of busy.
Reviewers should check the busy-state interplay between the concurrent apps fetch and model registration, and the parameter_class matching against the SUPPORTED_MODEL_INFO name.
Automated review by siGit Code · commit 9f1b583
The GGUF detail status line advertised a "u" key that was never wired up: upload has always been Enter, and only for local fine-tune outputs. The status now matches the footer, pointing at Enter for uploadable GGUFs and at the chat test for GGUFs that came from HF. Also adds the missing parameter classes (0.6B, 1.7B, 8B, 30B, and more of the Qwen2.5/Qwen3 lineups) and teaches contains_size_token to reject matches preceded by a dot, so 7B can no longer match inside 1.7B. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Fixed in c7744a4. The status line was advertising a Related catch while in there: that base model is Qwen3-0.6B, which catalog registration would have classified as parameter_class "unknown" because the size list only had eight entries. The same commit fills the list out and stops the token matcher from matching decimal tails (7B inside 1.7B). |

Summary
GgufDetailscreen), pressinganow registers it into the GresIQ model catalog (private to the account, persmbcloud-api's newPOST /v1/client/gresiq/models) and drops into a newPublishModelscreen to assign it straight to a running app.assign_modelplumbing, so the app picks up the new model live via the SDK'sload_assigned_modelpolling — no App Store update needed.smbcloud-gresiq-sdk0.4.9 (published) and the matchingsmbcloud-apibackend endpoint (merged todevelopmentand confirmed live in production).Test plan
cargo build— clean, resolvessmbcloud-gresiq-sdk0.4.9 from crates.iocargo clippy --all-targets— cleancargo test— 25 passed, 2 ignored (heavy GGUF integration tests)POST /v1/client/gresiq/modelsreturns 401 auth error, not 404)