Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
31aeef3
Add portable cross-platform validation harness and remote runners
leehack Sep 17, 2026
4526c3c
Include pinned LiteRT libraries in portable desktop bundles
leehack Sep 17, 2026
ffd146a
docs: make Firebase primary and include NPU qualification
leehack Sep 17, 2026
1c58408
Fix Firebase asynchronous submission identity recovery
leehack Sep 17, 2026
b860bfe
Bound mobile model downloads with clearer timeout diagnostics
leehack Sep 17, 2026
418835b
docs: record Firebase CPU pilot outcomes
leehack Sep 17, 2026
74db9c8
Add locked NPU inputs and offline qualification preflight
leehack Sep 17, 2026
e7c5943
Add verified Android NPU validation bundles and native control
leehack Sep 17, 2026
2288eed
Keep NPU QA apps on their packaged profile
leehack Sep 17, 2026
4ef1a7e
Add explicit Firebase Blaze validation budgets
leehack Sep 17, 2026
be8d1c4
Bound Firebase validation by verified free minutes
leehack Sep 17, 2026
8f5a4d9
docs: record Firebase S24 NPU and CPU validation results
leehack Sep 17, 2026
c85d2c0
Merge remote-tracking branch 'origin/main' into feature/cross-platfor…
leehack Sep 17, 2026
72a685b
Add native NPU history controls on current LiteRT runtime
leehack Sep 17, 2026
fb8d2be
Match public thinking context in native history controls
leehack Sep 17, 2026
4d7bd95
docs: record current-runtime native history replay
leehack Sep 17, 2026
d0bd029
fix: preserve plain system text in LiteRT chat history
leehack Sep 17, 2026
126a8bd
docs: record public S24 replay after system-content fix
leehack Sep 17, 2026
2b60477
test: add locked Gemma CPU history controls
leehack Sep 17, 2026
79e3425
test: guard gated CPU submission and record native controls
leehack Sep 17, 2026
56e2a18
test: enforce validation obligations and record suite readiness
leehack Sep 17, 2026
ec9106b
ci: validate portable bundles on pull requests
leehack Sep 17, 2026
b34e835
ci: verify extracted validation command portability
leehack Sep 17, 2026
18f1366
Merge main after native Unicode detokenization fix
leehack Sep 17, 2026
b917f55
test: add versioned validation catalog and focused lifecycle runs
leehack Sep 17, 2026
862b9e7
test: require accelerator proof for every selected reload
leehack Sep 17, 2026
6bc6c69
test: add portable stream batching parity validation
leehack Sep 17, 2026
fa94671
test: satisfy strict validation harness lint
leehack Sep 17, 2026
8c5ed94
test: bind qualification to verified model and runtime payloads
leehack Sep 17, 2026
c29999e
test: keep provenance fixtures independent of runtime pins
leehack Sep 17, 2026
4d05447
Add primary model profiles and speech validation packs
leehack Sep 18, 2026
bd2af7f
Fix speech cancellation guard lint
leehack Sep 18, 2026
8f9fbb6
Isolate coverage CLI test package resolution
leehack Sep 18, 2026
9402c9c
Format isolated coverage CLI fixture
leehack Sep 18, 2026
46e5732
Persist model preparation diagnostics before inference
leehack Sep 18, 2026
31867c1
Merge current main runtime updates into validation suite
leehack Sep 18, 2026
b92a0e1
Include CUDA modules in portable desktop validation bundles
leehack Sep 18, 2026
21f89f9
Recognize typed speech input rejection in validation checks
leehack Sep 18, 2026
89097b7
Recover Firebase polling and execute stop and readiness validation
leehack Sep 18, 2026
3d59bb2
Refresh terminal evidence during Firebase recovery
leehack Sep 18, 2026
6223da5
Require physical device identity for Vulkan validation
leehack Sep 18, 2026
2662c12
Merge commit '2cb42da843fa661ee3e2fb3a7e10e369a623a02b' into feature/…
leehack Sep 18, 2026
a4c4d07
Use supported SCP protocol for Windows validation VMs
leehack Sep 18, 2026
e3ac0d9
Merge commit '57f9c72996ce789b48336b92755912aaeea704d2' into feature/…
leehack Sep 18, 2026
0c0a379
Merge commit '9dc974887c4716c76ab362eb8ad11ef6b4f3ff62' into feature/…
leehack Sep 18, 2026
f1a13f3
Discover Windows backends in compiled CLI library directories
leehack Sep 18, 2026
340d0c3
Recognize selected Vulkan hardware in placement reports
leehack Sep 18, 2026
b980cb4
Merge remote-tracking branch 'origin/main' into feature/cross-platfor…
leehack Sep 18, 2026
ea2965f
Merge remote-tracking branch 'origin/main' into feature/cross-platfor…
leehack Sep 18, 2026
e285519
Document Vulkan selected-model placement evidence
leehack Sep 18, 2026
4bac9db
Merge remote-tracking branch 'origin/main' into feature/cross-platfor…
leehack Sep 18, 2026
e2404b3
Align validation workflows with current action contracts
leehack Sep 18, 2026
b55857f
Add portable Unicode thinking and tool validation cases
leehack Sep 18, 2026
644535c
Merge remote-tracking branch 'origin/main' into feature/cross-platfor…
leehack Sep 18, 2026
f67fe69
Preserve partial tool validation evidence on runtime errors
leehack Sep 18, 2026
b13c545
Merge remote-tracking branch 'origin/main' into feature/cross-platfor…
leehack Sep 18, 2026
af6fd1b
Merge main with validated Qwen tool fixes
leehack Sep 19, 2026
051fbd2
docs: distinguish validation readiness from model qualification
leehack Sep 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
18 changes: 18 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,24 @@ jobs:
- name: Check Pana Score
run: flutter pub global run pana . --exit-code-threshold 0

validation-harness:
name: Validation harness (model-free)
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
- uses: subosito/flutter-action@v2
with:
flutter-version: 3.47.1
channel: stable
cache: true
- run: dart pub get
working-directory: packages/llamadart_validation
- run: dart analyze --fatal-infos
working-directory: packages/llamadart_validation
- run: dart test
working-directory: packages/llamadart_validation

companion-packages:
name: Companion Package (${{ matrix.package }})
runs-on: macos-latest
Expand Down
113 changes: 113 additions & 0 deletions .github/workflows/validation_bundles.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: Validation bundles

on:
pull_request:
branches: [main]
paths:
- .github/workflows/validation_bundles.yml
- packages/llamadart_validation/**
- tool/testing/validation.dart
- tool/testing/validation/**
- example/chat_app/lib/validation_main.dart
- example/chat_app/lib/validation/**
- example/chat_app/integration_test/validation_test.dart
- example/chat_app/android/**
- example/chat_app/ios/**
- example/chat_app/pubspec.*
- scripts/build_chat_app_web.sh
workflow_dispatch:
inputs:
profile:
description: Locked quick profile compiled into mobile and Web apps
type: choice
options: [tiny-gguf-cpu, tiny-gguf-lifecycle, tiny-gguf-batching, tiny-gguf-metal, tiny-gguf-vulkan, tiny-gguf-cuda, chat-gguf-cpu, chat-gguf-metal, chat-gguf-vulkan, chat-gguf-cuda, chat-litert-cpu, chat-litert-gpu]
default: tiny-gguf-cpu

permissions:
contents: read

concurrency:
group: validation-bundles-${{ github.ref }}
cancel-in-progress: false

jobs:
desktop:
name: Desktop ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, windows-2022, macos-15]
runs-on: ${{ matrix.os }}
timeout-minutes: 35
steps:
- uses: actions/checkout@v7
- uses: subosito/flutter-action@v2
with:
flutter-version: 3.47.1
channel: stable
cache: true
- uses: actions/setup-python@v6
with:
python-version: '3.12'
- run: dart pub get
- run: dart run tool/testing/validation.dart build --target desktop --profile ${{ inputs.profile || 'tiny-gguf-cpu' }} --out .dart_tool/validation/bundle
- name: Preserve executable permissions in transport
run: tar -czf .dart_tool/validation/bundle.tar.gz -C .dart_tool/validation bundle
- name: Verify extracted desktop command and profiles
shell: bash
run: |
python - <<'PY'
import os
from pathlib import Path
import subprocess
import tarfile
import tempfile

archive = Path('.dart_tool/validation/bundle.tar.gz').resolve()
with tempfile.TemporaryDirectory(prefix='llamadart-portable-') as scratch:
with tarfile.open(archive) as package:
package.extractall(scratch, filter='data')
extension = '.exe' if os.name == 'nt' else ''
command = Path(scratch) / 'bundle/bin' / ('llamadart-validate' + extension)
subprocess.run([str(command), '--help'], cwd=scratch, check=True, timeout=30)
profiles = subprocess.run([str(command), '--list'], cwd=scratch, check=True,
capture_output=True, text=True, timeout=30).stdout.splitlines()
if 'tiny-gguf-cpu' not in profiles:
raise RuntimeError('Extracted command did not discover bundled profiles')
PY
- uses: actions/upload-artifact@v7
with:
name: validation-desktop-${{ runner.os }}-${{ runner.arch }}-${{ github.sha }}
path: .dart_tool/validation/bundle.tar.gz
retention-days: 7
if-no-files-found: error

app:
name: App ${{ matrix.target }}
strategy:
fail-fast: false
matrix:
target: [android, web, ios-inputs]
runs-on: ubuntu-24.04
timeout-minutes: 40
steps:
- uses: actions/checkout@v7
- uses: subosito/flutter-action@v2
with:
flutter-version: 3.47.1
channel: stable
cache: true
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '17'
- run: dart run tool/prepare_workspace.dart
- run: dart run tool/testing/validation.dart build --target ${{ matrix.target }} --profile ${{ inputs.profile || 'tiny-gguf-cpu' }} --out .dart_tool/validation/bundle
- name: Preserve executable permissions in transport
run: tar -czf .dart_tool/validation/bundle.tar.gz -C .dart_tool/validation bundle
- uses: actions/upload-artifact@v7
with:
name: validation-${{ matrix.target }}-${{ github.sha }}
path: .dart_tool/validation/bundle.tar.gz
retention-days: 7
if-no-files-found: error
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
build/
pubspec.lock
!example/chat_app/pubspec.lock
!packages/llamadart_validation/pubspec.lock

# Native runtime profiling output from optional model validation.
*.profraw
.flutter-plugins
.flutter-plugins-dependencies
.metadata
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
## Unreleased

* Discover Windows backend libraries in standard compiled Dart CLI bundles.

* Add locked Gemma 4/Qwen3.5 validation profiles, explicit NPU coverage, and opt-in speech and voice-pipeline diagnostics.

* Preserve system instructions as plain text when seeding native LiteRT-LM chat history.

- Render structured typed tool results as JSON text for chat templates while preserving string results and source objects.

- Preserve Qwen XML tool argument types using declared schemas and reject invalid or undeclared calls without exposing executable tool deltas.
Expand Down
Loading
Loading