Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
55231e6
Add Url variant to AgentDesiredModel for generic HTTP model downloads
mcharytoniuk May 18, 2026
a58ebd9
Route off-HuggingFace http(s) URLs to the Url strategy in the JS disp…
mcharytoniuk May 18, 2026
1535744
Extract paddler_cache_dir into its own workspace crate
mcharytoniuk May 18, 2026
a74a11f
Add paddler_download_manager crate with cross-platform cache_dir split
mcharytoniuk May 18, 2026
058c93a
Drop coverage-driven clippy suppressions and rename stream_to_partial…
mcharytoniuk May 18, 2026
d531a4b
Rename URL cache subdir to downloaded-models
mcharytoniuk May 18, 2026
66f4442
Specialize AgentIssue variants and drop retry plumbing from download …
mcharytoniuk May 19, 2026
f58dd42
Add cross-process download lock primitive to paddler_cache_dir
mcharytoniuk May 19, 2026
26d6ca1
Add connect_timeout and indeterminate-size signal to download manager
mcharytoniuk May 19, 2026
a1cef96
Wire URL resolver and indeterminate download progress through paddler
mcharytoniuk May 19, 2026
57a53b4
Allow unwrap in tests and raise crate coverage gates
mcharytoniuk May 19, 2026
428c2e3
Reorder import groups in HuggingFace resolver
mcharytoniuk May 19, 2026
2585909
resolve copilot comments
mcharytoniuk May 19, 2026
bcc5949
Reset download_total when download progress becomes indeterminate
mcharytoniuk May 19, 2026
7868cce
Harden DownloadManager: reject non-http(s) schemes, 10s read timeout,…
mcharytoniuk May 19, 2026
3f75c6c
Mirror download_indeterminate in Python and JS client schemas
mcharytoniuk May 19, 2026
dcbf9ca
Run JS client tests in CI
mcharytoniuk May 19, 2026
dfe15ce
Use PADDLER_SOURCES for paddler_gui target
mcharytoniuk May 19, 2026
dd4b512
Use if let to satisfy clippy::single_match_else in set_download_status
mcharytoniuk May 19, 2026
070ca34
Add download_indeterminate to Python test fixtures
mcharytoniuk May 19, 2026
3c9d1c8
Gate concurrent in-process cluster lifecycle test behind tests_that_u…
mcharytoniuk May 19, 2026
182a3ca
add missing inference parameters to Python InferenceParameters, count…
malzag May 19, 2026
f21cf59
Restore Unknown issue fallback in AgentIssues render
mcharytoniuk May 19, 2026
772004d
Reject unsupported URL schemes in resolver before creating cache state
mcharytoniuk May 19, 2026
894511e
Bump JS CI Node to 24 to satisfy rust-coverage-check engines
mcharytoniuk May 19, 2026
6dd7a08
Merge remote-tracking branch 'origin/agent-desired-model-url-source' …
mcharytoniuk May 19, 2026
c337cd0
Use SHA-256 hex as flat cache filename; drop URL path parsing
mcharytoniuk May 19, 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
19 changes: 19 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,25 @@ jobs:
- name: Run unit tests
run: make test.unit

javascript:
name: javascript
runs-on: ubuntu-latest

steps:
- name: checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '24'

- name: Install dependencies
run: npm ci

- name: Run JS client tests
run: make test.client.js

python:
name: python (${{ matrix.python-version }})
runs-on: ubuntu-latest
Expand Down
53 changes: 53 additions & 0 deletions Cargo.lock

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

7 changes: 6 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = ["paddler", "paddler_bootstrap", "paddler_cli", "paddler_client", "paddler_client_cli", "paddler_gui", "paddler_tests", "paddler_types"]
members = ["paddler", "paddler_bootstrap", "paddler_cache_dir", "paddler_cli", "paddler_client", "paddler_client_cli", "paddler_download_manager", "paddler_gui", "paddler_tests", "paddler_types"]
Comment thread
mcharytoniuk marked this conversation as resolved.
resolver = "2"

[workspace.package]
Expand Down Expand Up @@ -30,8 +30,10 @@ dashmap = "6.1"
encoding_rs = { version = "0.8", features = ["serde"] }
env_logger = "0.11"
esbuild-metafile = "0.5.2"
fslock = "=0.2.1"
futures = "0.3"
futures-util = { version = "0.3", features = ["tokio-io"] }
headers = "=0.4.1"
hf-hub = { version = "0.4", features = ["tokio"] }
image = "0.25"
indoc = "2"
Expand All @@ -56,6 +58,7 @@ rust-embed = { version = "8.9", features = ["interpolate-folder-path"] }
serial_test = { version = "3", features = ["file_locks"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sha2 = "0.10"
shellexpand = "3"
iced = { version = "0.14", features = ["image", "svg", "tokio"] }
if-addrs = "0.13"
Expand All @@ -70,7 +73,9 @@ thiserror = "2"
url = { version = "2.5", features = ["serde"] }
paddler = { version = "4.0.0", path = "paddler" }
paddler_bootstrap = { version = "4.0.0", path = "paddler_bootstrap" }
paddler_cache_dir = { version = "4.0.0", path = "paddler_cache_dir" }
paddler_client = { version = "4.0.0", path = "paddler_client" }
paddler_download_manager = { version = "4.0.0", path = "paddler_download_manager" }
paddler_tests = { version = "4.0.0", path = "paddler_tests" }
paddler_types = { version = "4.0.0", path = "paddler_types" }

Expand Down
56 changes: 39 additions & 17 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

RUST_LOG ?= debug

PADDLER_CLI_SOURCES := $(shell find paddler/src paddler_bootstrap/src paddler_cli/src paddler_client/src paddler_types/src -name '*.rs')
PADDLER_GUI_SOURCES := $(shell find paddler/src paddler_bootstrap/src paddler_gui/src paddler_types/src -name '*.rs')
COVERAGE_PACKAGES := -p paddler_cache_dir -p paddler_download_manager
PADDLER_SOURCES := $(shell find paddler/src paddler_bootstrap/src paddler_cache_dir/src paddler_cli/src paddler_client/src paddler_download_manager/src paddler_gui/src paddler_types/src -name '*.rs')
FRONTEND_SOURCES := $(shell find resources -type f) $(wildcard jarmuz/*.mjs)

# -----------------------------------------------------------------------------
Expand All @@ -20,28 +20,28 @@ node_modules: package-lock.json
esbuild-meta.json: $(FRONTEND_SOURCES) jarmuz-static.mjs tsconfig.json package.json node_modules
./jarmuz-static.mjs

target/debug/paddler: $(PADDLER_CLI_SOURCES)
target/debug/paddler: $(PADDLER_SOURCES)
cargo build -p paddler_cli

target/release/paddler: $(PADDLER_CLI_SOURCES) esbuild-meta.json
target/release/paddler: $(PADDLER_SOURCES) esbuild-meta.json
cargo build --release -p paddler_cli --features web_admin_panel

target/cuda/debug/paddler: $(PADDLER_CLI_SOURCES) esbuild-meta.json
target/cuda/debug/paddler: $(PADDLER_SOURCES) esbuild-meta.json
cargo build -p paddler_cli --features cuda,web_admin_panel --target-dir target/cuda

target/cuda/release/paddler: $(PADDLER_CLI_SOURCES) esbuild-meta.json
target/cuda/release/paddler: $(PADDLER_SOURCES) esbuild-meta.json
cargo build --release -p paddler_cli --features cuda,web_admin_panel --target-dir target/cuda

target/metal/debug/paddler: $(PADDLER_CLI_SOURCES) esbuild-meta.json
target/metal/debug/paddler: $(PADDLER_SOURCES) esbuild-meta.json
cargo build -p paddler_cli --features metal,web_admin_panel --target-dir target/metal

target/metal/release/paddler: $(PADDLER_CLI_SOURCES) esbuild-meta.json
target/metal/release/paddler: $(PADDLER_SOURCES) esbuild-meta.json
cargo build --release -p paddler_cli --features metal,web_admin_panel --target-dir target/metal

target/vulkan/release/paddler: $(PADDLER_CLI_SOURCES) esbuild-meta.json
target/vulkan/release/paddler: $(PADDLER_SOURCES) esbuild-meta.json
cargo build --release -p paddler_cli --features vulkan,web_admin_panel --target-dir target/vulkan

target/release/paddler_gui: $(PADDLER_GUI_SOURCES) esbuild-meta.json
target/release/paddler_gui: $(PADDLER_SOURCES) esbuild-meta.json
cargo build --release -p paddler_gui --features web_admin_panel

# -----------------------------------------------------------------------------
Expand All @@ -57,37 +57,59 @@ clean:

.PHONY: clippy
clippy: esbuild-meta.json
cargo clippy --workspace --all-targets --features web_admin_panel,tests_that_use_llms,tests_that_use_compiled_paddler
cargo clippy --workspace --all-targets --features web_admin_panel,tests_that_use_llms,tests_that_use_compiled_paddler,tests_that_use_in_process_cluster

.PHONY: coverage
coverage: node_modules
cargo llvm-cov clean --workspace
cargo llvm-cov $(COVERAGE_PACKAGES) --no-report
cargo llvm-cov report --json --output-path target/llvm-cov.json
cargo llvm-cov report --lcov --output-path target/lcov.info
cargo llvm-cov report
npx rust-coverage-check target/llvm-cov.json \
--workspace-root $(CURDIR) \
--gated paddler_cache_dir=100 \
--gated paddler_download_manager=99

.PHONY: coverage-clean
coverage-clean:
cargo llvm-cov clean --workspace
rm -rf target/llvm-cov-target
rm -f target/llvm-cov.json target/lcov.info

.PHONY: coverage-report
coverage-report:
cargo llvm-cov $(COVERAGE_PACKAGES) --html

.PHONY: fmt
fmt: node_modules
./jarmuz-fmt.mjs

.PHONY: test
test: test.unit test.integration
test: test.client.js test.unit test.integration

.PHONY: test.integration
test.integration: target/debug/paddler
cargo test -p paddler_tests --features tests_that_use_compiled_paddler,tests_that_use_llms
cargo test -p paddler_tests --features tests_that_use_compiled_paddler,tests_that_use_in_process_cluster,tests_that_use_llms

.PHONY: test.integration.cuda
test.integration.cuda: target/cuda/debug/paddler
PADDLER_BINARY_PATH=../target/cuda/debug/paddler PADDLER_TEST_DEVICE=cuda cargo test --target-dir target/cuda -p paddler_tests --features cuda,tests_that_use_compiled_paddler,tests_that_use_llms
PADDLER_BINARY_PATH=../target/cuda/debug/paddler PADDLER_TEST_DEVICE=cuda cargo test --target-dir target/cuda -p paddler_tests --features cuda,tests_that_use_compiled_paddler,tests_that_use_in_process_cluster,tests_that_use_llms

.PHONY: test.integration.metal
test.integration.metal: target/metal/debug/paddler
PADDLER_BINARY_PATH=../target/metal/debug/paddler PADDLER_TEST_DEVICE=metal cargo test --target-dir target/metal -p paddler_tests --features metal,tests_that_use_compiled_paddler,tests_that_use_llms
PADDLER_BINARY_PATH=../target/metal/debug/paddler PADDLER_TEST_DEVICE=metal cargo test --target-dir target/metal -p paddler_tests --features metal,tests_that_use_compiled_paddler,tests_that_use_in_process_cluster,tests_that_use_llms

.PHONY: test.unit
test.unit: esbuild-meta.json
cargo test --features web_admin_panel

.PHONY: build.client.js
build.client.js:
build.client.js: node_modules
npm --workspace @intentee/paddler-client run build

.PHONY: test.client.js
test.client.js:
test.client.js: node_modules
npm --workspace @intentee/paddler-client test

.PHONY: watch
Expand Down
2 changes: 2 additions & 0 deletions clippy.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
allow-expect-in-tests = true
allow-unwrap-in-tests = true
14 changes: 14 additions & 0 deletions package-lock.json

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

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"devDependencies": {
"@intentee/rust-coverage-check": "^0.2.0",
"@types/hotwired__turbo": "^8",
"@types/react": "^19.1.10",
"@types/react-dom": "^19.1.7",
Expand Down
2 changes: 2 additions & 0 deletions paddler/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ log = { workspace = true }
minijinja = { workspace = true }
minijinja-contrib = { workspace = true }
nanoid = { workspace = true }
paddler_cache_dir = { workspace = true }
paddler_download_manager = { workspace = true }
paddler_types = { workspace = true }
thiserror = { workspace = true }
rand = { workspace = true }
Expand Down
Loading
Loading