mirror of
https://github.com/storytold/craft-ai-integrations.git
synced 2026-11-02 18:06:49 +00:00
0e55340771
* refactor(ai-egui): migrate shared widgets to egui 0.37 * egui037: qualify shared AI widgets and downstream dependency pins * docs(ai-egui): record the committed migration qualification * fix(ci): provide Vulkan snapshots and allow pinned fork sources * test: make cancellation-before-load coverage deterministic
9.6 KiB
9.6 KiB
Status: what runs, what is tested, what is open
Three levels, kept apart on purpose. A saved key, a static catalogue, a passing scripted test and a live job prove different things.
Built and tested against scripted servers only
No real hosted service, download host or repository was contacted by these tests.
| Area | Crate | Notes |
|---|---|---|
| OpenAI-compatible text and images | craft-ai-openai |
Streaming, tools, structured output; image generate, edit and inpaint. A streamed reply is bounded three ways: per line (1 MiB), total bytes kept (the same as a whole reply, 128 MiB), and events held for one poll (65,536; a stream that passes it without a poll fails the job and the connection is dropped). |
| FLUX image and video | craft-ai-bfl |
|
| Seedance video through BytePlus ModelArk | craft-ai-seedance |
The Volcengine China address is refused. |
| Gemini images on Vertex express mode | craft-ai-vertex |
An express-mode key is not a full-project Vertex credential and has no free key probe. |
| ArtCraft Omni API key | craft-ai-artcraft |
Prompt-only image and video. Account or subscription access has no adapter: no official programmatic route is documented. An API key is not evidence that a subscription covers the requests. |
| Hosted media copies | craft-ai-media |
https only (loopback only for a connection marked local), every redirect re-checked, private addresses refused, size bounded, file type taken from the bytes. A failed copy keeps the original link with a notice. A busy host is retried with a bounded, doubling pause. Not built: retries for provider API calls, expiry tracking, resume, and an input-side upload cache. |
| Generic ComfyUI workflows | craft-ai-comfyui |
Maps a prompt field; image.inpaint needs mapped LoadImage and LoadImageMask fields. A workflow is offered as a model only after /object_info confirms its nodes and checkpoint names; submission repeats the check. Output stays inline (32 MiB) unless the app gives a directory (1 GiB, local file: handle, app owns cleanup). Targeted cancel is off by default because an older server may treat it as a global interrupt. Imported image.segment workflows map a description and source to a checked, source-sized grayscale mask plus the shared result. Empty masks mean no match; source uploads are remembered for selection jobs. This is not calibrated absence detection: the example Florence graph can find a box for an absent subject. No input file handles or general parameter mapping yet. |
| Built-in engines | craft-ai-engine, craft-ai-engine-candle, craft-ai-engine-rten, craft-ai-engine-burn |
Contract, registry and provider are tested with a fake runner and the shared conformance suite. SAM 3 on Candle (point and text prompts, processor, or Metal on macOS) ran on a real photograph and passes the same suite on Meta's checkpoint; the live tests skip without CRAFT_SAM3_WEIGHTS. It reads the Hugging Face checkpoint layout with tokenizer files, not the ComfyUI file. Pictures go in as PNG or JPEG (a JPEG's EXIF turn is applied). No Nvidia (CUDA) build, and the launcher does not download the checkpoint yet. SAM 2.1 on rten (processor only) reads the publisher's two .onnx files, pinned by size and SHA-256, with click and box prompts; a description is refused in plain words. Pictures are bounded by side and pixel count. With the real files in release on one Windows machine: a mask at the picture's size, and a hover through the ordinary job path with a median of about 35 ms after a first look of about 0.7 s (one picture, not a benchmark). SAM 2.1 is the first recipe for Select subject, so the plain built-in offer is SAM 2.1 on rten. No macOS or Linux run, and no app has run it through the shared binding yet. SAM 2.1 on Burn (craft-ai-engine-burn, cargo feature burn, optional, after rten in the recipe) reads weights that craft-ai-burn-setup prepares once on the computer; on one Windows machine with a graphics card its mask matched rten's (best-mask IoU 1.0, one click and one box, one picture, not a benchmark). Given the downloaded encoder.onnx, the runner prepares the saved copy itself on first load (in burn-prepared/ beside the model folder; no progress and no Cancel during that load). No app has run it through the shared binding yet, and there has been no live run on macOS or Linux. See docs/BURN-ENGINE.md. |
| First-run setup flow | craft-ai-client, craft-ai-egui, craft-ai-features |
One start button on SetupSession (checks complete files on disk, otherwise downloads; blocker says why it does nothing), a licence tick only where a file's licence needs one, FolderDesk::ensure_default for the suggested folder, ToolDesk::adopt for checked files only, a try-it sample that clicks for built-in selection models and fails a selection that chose nothing, status and picker that agree when a model's file has gone, and engine advice that does not call a measured-quick built-in engine (rten, one machine) slow. Scripted tests and a fake provider only: no real download, no model run through it, no app has mounted it, no macOS or Linux run. |
| Shared egui widgets | craft-ai-egui |
Source and tests migrated to egui 0.37 with the reviewed storytold egui family at 6d518fc799681571963842f95b55a6b68431b15a and winit at a517b3846ee8457d84ee4975110bfda6797c44dc. The final headless candidate passed 108 tests, strict all-target clippy and cargo fmt --check on Linux. Five deterministic kittest wgpu/snapshot goldens are committed; a pure-background RGB(27,27,27) to RGB(30,30,30) change failed the expected snapshot with 75,486 changed pixels, and the two compiled connection-panel lifecycle mutants were caught before the source and golden hashes were restored and the 108 tests passed again. A locked consumer-smoke check and its one draw test passed with one craft-ai-core identity and the pinned egui family; that rendererless root does not use the winit patch. No app imports the widgets. Native X11/Wayland/Windows behavior, IME/clipboard/focus, physical GPU qualification and performance measurements remain open. |
| Declarative adapter | craft-ai-declarative |
Request/response and queue flows from a data file; prompt-only inputs. No launcher screen to add a spec yet. |
| Custom connections, model sources, node packs | craft-ai-core, craft-ai-comfy-env |
See docs/custom-connections-and-sources.md. Own-host tokens only, no key sent across a redirect, pickle formats need consent, unverified checksums are flagged. |
| Model folders | craft-ai-core, craft-ai-comfy-env, craft-ai-client |
A person's own folders of model files, kept as a map (which sub-folders hold which kind) in the shared store, never moved, renamed or deleted. Scanned read only with limits (depth, files, entries, header size), one default for downloads, folders linked from ComfyUI are read only, and the map can be written as a ComfyUI extra-paths file. Not wired yet: downloads and the installed-files scan still use ComfyUI's own folders, and no launcher screen is merged. |
| Consent, history, shared store, key handling | craft-ai-core, craft-ai-native, craft-ai-client |
Consent is scoped to app, connection, destination and capability, per kind of data, and may expire. craft-ai-egui offers the original prompt and a timed prompt through consent_prompt_with_terms; no app has mounted it yet. |
Run for real
Only the local SAM 3 clients (Sam3Point, Sam3Session): point, box, text, candidate masks, grounding
instances and prepared hover sessions, through a headless ComfyUI on one Windows machine. The live-test
evidence is not kept in this repository. This does not make the generic ComfyUI image or video workflows
live-tested.
Not verified
- Any real hosted provider, in any adapter.
- TLS against an intercepting proxy or antivirus HTTPS scanner.
craft-ai-httptrusts the platform's certificate store, so such software can read traffic, API keys included, and there is no switch back to bundled roots. - macOS (CI runs the tests on Linux and Windows), and the macOS and Linux keychains. The real keychain
test is
#[ignore]d. - Model download from Hugging Face and automatic node-pack installation against the real services.
- The built-in recommended-models catalogue (
catalog.json) is empty. Which models to recommend per tool is a curation decision, so "Recommended" never appears until someone makes it. - App adoption. PhotoCraft's dev build uses the SAM 3 clients directly, not the shared role, connection and consent flow. A route-resolution test or a Ready badge is not inference adoption.
- The keychain is no longer called while the shared file lock is held, but how long a slow real keychain takes is unmeasured.
- The encrypted-file secret store is not in
ConnectionManager::standard(). It layers the environment and the OS keychain only, so on a machine with no keychain (a bare Linux session) a key cannot be saved until an app supplies its own passphrase and builds aLayeredStorewithEncryptedFileStore.
Design limits
- The runtime is in-process: apps link
craft-ai-clientand run adapters themselves. A daemon with IPC between apps and the adapters has been suggested by the maintainers and is a separate discussion; no wire format is defined. - A registered tool is a declaration, not installed code. No dynamic adapter registry for arbitrary user code, no general tool executor and no automatic model installation.
- Interactive negative boxes are ignored, grounding exemplar boxes are not strict regions, hover JPEGs are not exact masks, candidate order is not a semantic label, and refinement is not guaranteed to improve quality. Runtime catalogue entries stay executable-only.