makepad/libs/asset/data/tests/model_program.rs
Admin d24cbee60d asset platform: store pipelines with honest banded progress, vision annotation through the job queue, fleet scheduling (roles, spread, peer provisioning), the music contract, synonym search, the runs card
Squashed from work; the fine-grained history is under tag archive/work-2026-08-29:
- mp* wave: mpwm window manager + the mp app family, WM API, theme bridge, PDF engine fix
- work: land the sources the last commits reference
- kenney: catalogue all 50 free 3D kits; Modal dismissed() never fired
- asset store: central vision-annotation queue; Kenney donate prompt
- asset-ai: vision domain — image + prompt -> text on every fleet node
- annotation runs the fleet's vision services through the normal job queue
- vj: responsive DJ mixer + Windows drag-and-drop, cherry-picked from PR #1199 (vjroger)
- store search: WordNet synonym expansion, query-side; per-term seeks
- video scheduling: a cold model pin never downloads past a warm one, and a dedicated box only serves its role
- an expansion can never lose a run — and `expand: true` finally means something
- fleet panel: a slow box is not a missing box
- h3: first+last keyframe conditioning (the weights were always FL2VA)
- registry: the three H3 FL2VA tiers name their real conditioning
- fleet scheduling: spread before stacking, and a stuck job moves
- a download never steals a job from a box that has the weights
- the faster GPU takes the tie: 6000 > 5090 > 4090
- an evicted flux model gives the card its VRAM back
- a job now records what each of its stages was handed
- open a stage in RUNS and read what it sent
- every expanded song was an instrumental: the lyrics had nowhere to go
- the writer never overwrites words the person wrote
- store: a dependent job's body is spliced from its deps' results at claim
- a fleet box's job row says what that job was asked for
- the store runs a whole pipeline, and one record says how far it got
- a client can declare a whole run, watch it, and stop it
- 100% now means published, and the expander is a job you can queue
- one card says what a spawned task is doing, everywhere
- a run that ends says so, instead of being noticed later
- when every box holding the model is busy, buy another copy
2026-08-29 09:26:25 +02:00

56 lines
1.6 KiB
Rust

mod common;
use makepad_asset_data::{
AssetDataError, AssetFile, AssetKind, DeviceTier, FileRole, MediaType,
};
fn model_program_manifest() -> makepad_asset_data::AssetManifest {
let mut manifest = common::weapon_manifest();
manifest.kind = AssetKind::ModelProgram;
manifest.capabilities.spawnable = false;
manifest.spawn_recipe = None;
manifest.files.push(AssetFile {
role: FileRole::Source,
tier: DeviceTier::Any,
lod: 0,
media: MediaType::Text,
blob: common::blob(8),
byte_len: 40,
dims: None,
});
manifest.metrics.total_bytes += 40;
manifest
}
#[test]
fn model_program_requires_text_source_and_keeps_legacy_manifest_encoding_valid() {
let manifest = model_program_manifest();
let bytes = manifest.to_canonical_bytes().expect("valid model-program");
let decoded = makepad_asset_data::AssetManifest::from_canonical_bytes(&bytes)
.expect("model-program round trip");
assert_eq!(decoded, manifest);
let mut missing = manifest.clone();
missing.files.retain(|file| file.role != FileRole::Source);
missing.metrics.total_bytes -= 40;
assert!(matches!(
missing.validate(),
Err(AssetDataError::Missing {
what: "model-program source role"
})
));
let mut wrong_media = manifest;
wrong_media
.files
.iter_mut()
.find(|file| file.role == FileRole::Source)
.unwrap()
.media = MediaType::Bin;
assert!(matches!(
wrong_media.validate(),
Err(AssetDataError::Missing {
what: "model-program source role"
})
));
}