The GitHub Actions job "Build and push images" on texera.git/main has failed.
Run started by GitHub user bobbai00 (triggered by bobbai00).

Head commit for run:
7fbf64e3da96a271245c3be47a2587d5513dee6f / Tanishq Gandhi 
<[email protected]>
feat(file-service): add model file upload and version endpoints (#6872)

### What changes were proposed in this PR?

Adds file upload and versioning to the model API, on top of the
metadata/access
layer. A model version is a folder of files: uploads are staged, then
committed
together as one immutable LakeFS version.

**Endpoints** on `ModelResource`:

| Method | Path | |
| --- | --- | --- |
| `POST` | `/{mid}/version/create` | commit staged files as a version |
| `GET` | `/{mid}/version/list` | |
| `GET` | `/{mid}/version/latest` | |
| `GET` | `/{mid}/version/{mvid}/rootFileNodes` | the version's file
tree |
| `POST` | `/{mid}/upload` | one-shot upload |
| `DELETE` | `/{mid}/file` | drop a staged file before commit |
| `POST` | `/multipart-upload` | init / finish / abort |
| `POST` | `/multipart-upload/part` | |

**Schema:** `model_upload_session` and `model_upload_session_part`, in
`texera_ddl.sql` and migration `sql/updates/41.sql` (changeSet 41).
Re-running
the migration is a no-op.

**Upload engine:** the multipart flow reuses `ResourceUploadService`
from #7764
rather than a second copy of the dataset engine, so what lands here is
the
model descriptor plus the endpoints above.

**File types:** any file is accepted. A model bundles weights with
`config.json`, tokenizer/vocab files and sharded checkpoints, so an
extension
allowlist would reject valid models. `framework` stays metadata.

### Any related issues, documentation, discussions?

Part of #6498. Umbrella #6494. Design discussion #6616.

The remaining #6498 work — the endpoints the model UI needs — follows in
a
separate PR.

### How was this PR tested?

New `ModelUploadResourceSpec` (9 tests): one-shot upload committed into
a
version, `.pth` accepted, a version with no staged changes rejected,
staged-file
delete, companion files committed alongside weights, nested folder
structure
preserved in the committed tree, a later version carrying over untouched
files
and replacing only the re-uploaded one, and the multipart init → part →
finish
path plus abort.

Full `FileService` suite passes: **332 tests, 14 suites, 0 failures**,
including
`DatasetResourceSpec` (152) unchanged — the shared engine is not
regressed by
the model descriptor.

```
sbt "FileService/test"
```

`scalafmtCheckAll` and `scalafixAll --check` clean.

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

Generated-by: Claude Code (Claude Opus 4.8)

---------

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

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

With regards,
GitHub Actions via GitBox

Reply via email to