Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
ebf4e8a
Add Laya CUDA resource ownership
Sep 30, 2026
50591ae
Combine checkpoint and CUDA resource dependencies
Sep 30, 2026
ff8d017
Keep Laya checkpoint weights resident on CUDA
Sep 30, 2026
4b2c0d4
Allocate bounded Laya inference workspaces
Sep 30, 2026
ad1c7b8
Run Laya encoder and decision layers through native CUDA
Sep 30, 2026
5b5518b
Check encoder reuse without intermediate synchronization
Sep 30, 2026
0c50122
Clarify eager encoder inference scope
Sep 30, 2026
d37da99
Document separate CUDA operator loading
Sep 30, 2026
684470a
Validate distinct mixed requests at maximum encoder batch
Sep 30, 2026
0a349f3
Validate rotary sizes before loading kernels and honor GPU selection
Sep 30, 2026
506b4a1
Merge main into CUDA resource branch
Oct 1, 2026
90cb4a1
Merge checkpoint update into Laya GPU dependencies
Oct 1, 2026
fb4316f
Merge updated CUDA resources into Laya GPU dependencies
Oct 1, 2026
b8357d4
Merge updated dependencies into Laya workspace
Oct 1, 2026
7208c8b
Merge updated workspace dependencies into Laya encoder
Oct 1, 2026
a20b2da
Move CUDA resource tests to the root test directory
Oct 1, 2026
dbab441
Merge branch 'codex/laya-test-layout' into codex/laya-tests-resident-…
Oct 1, 2026
9ef493e
Merge branch 'codex/laya-tests-runtime' into codex/laya-tests-residen…
Oct 1, 2026
b8f9a33
Merge branch 'codex/laya-tests-resident-base' into codex/laya-tests-w…
Oct 1, 2026
2f5ff4b
Move Laya residency and workspace tests to the root test directory
Oct 1, 2026
dfb6eda
Merge branch 'codex/laya-tests-workspace' into codex/laya-tests-encoder
Oct 1, 2026
ff4d8fa
Move Laya encoder tests to the root test directory
Oct 1, 2026
6ae5e0f
Merge main into Laya PR #48
Oct 3, 2026
565e3fe
Merge updated Laya workspace branch into PR #49
Oct 3, 2026
df85135
docs(laya): publish native encoder validation steps
Oct 3, 2026
7574f19
docs(laya): publish residency and workspace validation
Oct 3, 2026
047d018
docs(laya): include parent resource validation steps
Oct 3, 2026
b7c9384
Merge resource validation docs into the encoder
Oct 3, 2026
d235783
perf(laya): resolve encoder resources and kernel handles at load
Levius-Fubuki Oct 4, 2026
d97c21f
laya: reuse input staging and group CUDA uploads
Levius-Fubuki Oct 4, 2026
4adc79c
feat(cuda): capture fixed-shape Laya encoder graphs
Levius-Fubuki Oct 4, 2026
8f58f15
feat(laya): port prepared execution plan onto native worker
Levius-Fubuki Oct 5, 2026
0b8dd4a
feat(laya): reuse grouped native input uploads
Levius-Fubuki Oct 5, 2026
ecfdeaf
fix(laya): preserve sparse bundle attention compatibility
Levius-Fubuki Oct 5, 2026
5833efa
fix(laya): propagate missing attention shape errors
Levius-Fubuki Oct 5, 2026
04a9406
fix(cuda): guard capture cleanup and partial graph ownership
Levius-Fubuki Oct 5, 2026
6ecf4a1
merge: propagate prepared plan compatibility into grouped uploads
Levius-Fubuki Oct 5, 2026
231cf35
merge: propagate current prepared plan into capture guards
Levius-Fubuki Oct 5, 2026
6043294
ci: validate retargeted Laya host changes against main
Levius-Fubuki Oct 5, 2026
3923c1e
ci: validate retargeted Laya host changes against main
Levius-Fubuki Oct 5, 2026
30b63b7
ci: validate retargeted Laya host changes against main
Levius-Fubuki Oct 5, 2026
28083ea
Merge main and retain Laya dispatch and ABI regression tests
Levius-Fubuki Oct 10, 2026
8f81355
merge: propagate maintained Laya grouped-upload regression coverage
Levius-Fubuki Oct 10, 2026
b5550fd
docs: render Laya regression setup paragraphs correctly
Levius-Fubuki Oct 10, 2026
df9f4c6
merge: carry corrected Laya regression setup documentation
Levius-Fubuki Oct 10, 2026
23f2680
merge: retain Laya capture cleanup and recovery regression tests
Levius-Fubuki Oct 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ jobs:
- name: Format
run: cargo fmt --all --check
- name: Clippy
run: cargo clippy --workspace --locked --all-targets -- -D warnings
run: cargo clippy --workspace --locked --all-targets --features omni-laya/serve -- -D warnings
- name: Frontend API tests
run: cargo test -p omni-jev --test frontend --locked
- name: Test
run: cargo test --workspace --locked
run: cargo test --workspace --locked --features omni-laya/serve
- name: Build
run: cargo build --workspace --release --locked
run: cargo build --workspace --release --locked --features omni-laya/serve

benchmarks:
runs-on: ubuntu-latest
Expand Down
29 changes: 3 additions & 26 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@ The Rust checks used by [CI](.github/workflows/ci.yml) are:

```sh
cargo fmt --all --check
cargo clippy --workspace --locked --all-targets -- -D warnings
cargo test --workspace --locked
cargo build --workspace --release --locked
cargo clippy --workspace --locked --all-targets --features omni-laya/serve -- -D warnings
cargo test --workspace --locked --features omni-laya/serve
cargo build --workspace --release --locked --features omni-laya/serve
```

For an agent-assisted self-review, use the repository's
Expand All @@ -96,29 +96,6 @@ remain responsible for understanding the changes and verifying the results.
Self-review helps maintainers focus on design and correctness; it does not
replace maintainer review.

### Large code changes

PRs with **more than 3,000 changed lines of authored code** need extra contributor
attention before requesting review. Count additions plus deletions against the
PR's merge base in source files, tests, and build or validation scripts. Report
this count separately from the total diff size; exclude documentation, generated
output, lockfiles, and static fixtures from the code count, while still reviewing
those files for relevance and correctness.

- Complete a full self-review of every affected component and its integration
boundaries. A quick precheck alone is insufficient; keep the PR in draft until
the contributor self-review is complete.
- Consider splitting independent features, refactors, and cleanup into focused
PRs. If the change needs to stay together, explain why in the PR description
and provide a component map and suggested review order.
- Include the code-line count and a validation summary for each affected area in
the PR description: commands, results, and unverified behavior with reasons.
Cover changed interfaces between components as well as individual components.

Size signals the need for closer review; it is not itself a correctness finding.
Choose checks based on the changed behavior and risk. Crossing this threshold
alone does not require GPU benchmarks or other expensive experiments.

## Documentation site

The site at <https://thinkflowlab.github.io/system1-omni/> is built with MkDocs
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions src/backends/cuda/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,10 @@ publish = false
[dependencies]
anyhow = "1"
libloading = "0.8"

[dev-dependencies]
tempfile = "3"

[[test]]
name = "laya_runtime"
path = "../../../tests/cuda/laya_runtime.rs"
24 changes: 18 additions & 6 deletions src/backends/cuda/kernels/runtime.cu
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,26 @@ int laya_capture_begin(void* stream) {
cudaStreamCaptureModeThreadLocal);
}

// End capture and release temporary/partial graph ownership on every outcome.
int laya_capture_end(void* stream, void** executable) {
if (!executable) return -1;
*executable = nullptr;
if (!stream) return -1;
cudaGraph_t graph = nullptr;
auto e = cudaStreamEndCapture(static_cast<cudaStream_t>(stream), &graph);
if (e != cudaSuccess)
return e;
e = cudaGraphInstantiate(reinterpret_cast<cudaGraphExec_t*>(executable), graph, 0);
cudaGraphDestroy(graph);
return e;
cudaGraphExec_t created = nullptr;
auto status = cudaStreamEndCapture(static_cast<cudaStream_t>(stream), &graph);
if (status == cudaSuccess && graph)
status = cudaGraphInstantiate(&created, graph, 0);
if (graph) {
auto destroyed = cudaGraphDestroy(graph);
if (status == cudaSuccess) status = destroyed;
}
if (status != cudaSuccess || !created) {
if (created) cudaGraphExecDestroy(created);
return status != cudaSuccess ? status : -1;
}
*executable = created;
return 0;
}

int laya_graph_run(void* executable, void* stream) {
Expand Down
Loading