The GitHub Actions job "License Binary Checker" on texera.git/main has failed.
Run started by GitHub user github-merge-queue[bot] (triggered by 
github-merge-queue[bot]).

Head commit for run:
50321e403c82df299a13deb50a7f9849dd93bdba / Tanishq Gandhi 
<[email protected]>
feat(frontend): add model file upload and version creation (#8078)

### What changes were proposed in this PR?

Models can now be uploaded to and versioned from the UI. PR 3 of the
ML-model frontend series, on top of #8068 and #8072, both merged.

**What you can do:** upload files to a model, watch them upload, revert
or delete staged changes, and commit them as a version. A new Settings
tab edits the model's name, description, framework and format. Admin →
Settings gains a Model card for the model upload limits.

**1. Refactor — no behavior change.** The dataset detail page owned the
whole upload machinery. This pulls it out into resource-agnostic pieces,
addressed by a `FileResourceEndpoint` descriptor (base path, name query
param, and the four
`site_settings` keys):

- `service/user/file-resource/multipart-upload.service.ts` — the
~280-line multipart engine, out of `DatasetService`
- `service/user/file-resource/staged-file.service.ts` — diff, revert,
delete
- `component/user/version-uploader/` — the whole "Create New Version"
panel (file picker, progress panels, staged list, version box)
- `component/user/staged-objects-list/` — moved out of `user-dataset/`

**2. Feature — models.** `MODEL_FILE_RESOURCE_ENDPOINT`, `ModelService`
version/framework/format calls, the model page's upload panel and
Settings tab, and the Admin Model upload card.

**Two bugs fixed along the way.**

- Renaming a model while an upload was in flight stranded it. The upload
engine captures the resource name when the upload starts, so the
remaining part and finish calls kept addressing the old name, and the
abort — which reads the name at click time — 404'd as well. The Settings
tab now blocks a rename until the panel is idle.
- Renaming a model left its file tree pointing at the old name. File
paths embed the resource name and both preview and single-file download
resolve by that path, so every file 404'd until the page was reloaded.
The Model Card's "Latest version file" went stale the same way. Renaming
now refreshes both and reopens the file you were reading rather than
resetting to the version's first. The dataset page has the same bug; it
is deliberately left alone here so this PR changes no dataset behavior,
and is queued with three other pre-existing dataset fixes for one
cleanup PR at the end of the series.

**Deliberately not here:** Access & visibility (public/private,
downloadable) lands in PR 4 — both can be set when creating a model,
just not changed afterwards yet. Delete stays on the Models list card.
View and like counts stay static `0` until models reach the hub in PR 5.


<img width="1202" height="703" alt="Screenshot 2026-08-28 at 1 49 22 PM"
src="https://github.com/user-attachments/assets/ea601483-b68b-4d1e-ab49-5f3246e84211";
/>
<img width="1138" height="748" alt="Screenshot 2026-08-28 at 1 49 31 PM"
src="https://github.com/user-attachments/assets/24240b49-acc3-4da9-9b3d-abfa3519cb04";
/>
<img width="1070" height="446" alt="Screenshot 2026-08-28 at 1 55 54 PM"
src="https://github.com/user-attachments/assets/22c4cb19-1dda-4cff-98f6-72d35a57d585";
/>

### Any related issues, documentation, discussions?

Closes #6499.

Follows #8068 (Models page) and #8072 (model detail page), both merged.
Does not touch unified search, so it does not depend on #7930.

### How was this PR tested?

532 tests pass across the thirteen affected specs, including 72 in the
new `version-uploader.component.spec.ts`.

Every dataset upload test still exists — they moved to the component
that now owns that code rather than being deleted. That includes the
three `loadUploadSettings` fallback tests, which pin the invariant the
code comments warn about: a failed or unparsable settings fetch must
leave the tuning fields alone, because a NaN concurrency limit stalls
the queue outright (`activeUploads < NaN` is never true). Two `ngOnInit`
assertions changed: the dataset page no longer fetches upload tuning
itself, so it no longer calls
`getPublicSetting` on load; the panel does, when it renders. No dataset
behavior changed.

New coverage: the model endpoint and its own settings keys, version
creation, framework/format editing with rollback on failure, and the
Admin upload cards run against both resource families so one cannot
write the other's keys.

### Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Claude Opus 5)

---------

Co-authored-by: Claude Opus 5 <[email protected]>

Report URL: https://github.com/apache/texera/actions/runs/33385289582

With regards,
GitHub Actions via GitBox

Reply via email to