📈 GH Trending Explorer 🎲 Surprise me

← all repos

FluidInference / FluidUse

git clone https://github.com/FluidInference/FluidUse.git v0.3.0 · 25d ago

Local computer use on Apple silicon: on-device typed decisions with laya and form filling with CUA-S1-FORMS, driven through the macOS Accessibility API

—
stars, 24h
—
stars, 7 days
+523
stars, 30 days · #532
523
★ total
40
forks · 8 open issues

Star history starts 2026-10-20; the chart appears after the second daily snapshot.

LanguageSwift
LicenseApache-2.0
Created2026-09-21 (1mo ago)
Last push6d ago
Watchers5
OwnerOrganization

GitHub topics

Links

README excerpt
# FluidUse
See decision-model runtime support for the current Core ML model matrix and handoff notes.
Local computer use on Apple silicon. FluidUse reads a form in a running Mac
app or browser through the Accessibility API, asks a small on-device model
what belongs in each field, and types the answer into the real app. About
1 ms per decision on the Neural Engine, nothing leaves the machine.
The first model is CUA-S1-FORMS, a 706K-parameter form specialist from Cua, converted to Core ML and served by FluidInference.
## Demo video
https://github.com/user-attachments/assets/a0b31285-05be-4bcf-a645-4283eb327c35
## Use
 [code] 
 [code] 
`WebFormDriver` does the same for an embedded `WKWebView`. `DocumentEntities`
turns a PDF or text file of `Label: value` lines into the profile; an optional
`PredeterminedAnswer` sheet covers question-style fields the model does not decide.
## laya typed decisions
laya (Convai Innovations, Apache-2.0) is an open
Jev-style decision model: a 322M mmBERT encoder plus decision head that answers typed
`choice` / `score` / `noul` questions about a text state with calibrated probabilities in one
pass, no generated tokens. `LayaManager` runs the Core ML buckets from
FluidInference/laya-coreml (128/256/512/1024
tokens, 32 options) on the Neural Engine: 3.7 ms per short question on an M5 Pro, about 7×
faster than the ~27 ms upstream reports on an M1 Max GPU.
 [code] 
`LayaManager.Configuration` picks the buckets to load, their compute units (128 → CPU+ANE,
longer → all units) and the weight precision (`fp16`, or `e8` with an int8 embedding table at 30%
less weight and the same accuracy); a prompt runs on the smallest loaded bucket that fits, and the largest one
truncates the state on the right like laya's `max_len`. The tokenizer is a Swift port of the
mmBERT/Gemma byte-fallback BPE and matches HuggingFace `tokenizers` on the conversion fixtures.
On laya's own published suites (3,899 questions rebuilt from upstream's scripts) the Core ML
buckets match the PyTorch reference's accuracy on every suite (AG News 0.935, Emotion 0.537,
MASSIVE-20 0.657, spam/phishing 0.993, guardrails 0.808, …) at 5.2 ms median per question versus
61.6 ms for PyTorch on the same Mac's CPU. Full tables in Benchmarks.md; the
questions, reference answers, reports and conversion live in
mobius `models/computer-use/laya/coreml`.
 [code] 
`LayaTetrisDemo` (Sources/LayaTetrisDemo, 25 s clip)
defaults to GLiClass comparing the heuristic's two strongest legal landings in one call. Its policy
control can instead run laya, which scores each surviving landing independently with *"Is this a
clean placement?"*, or the heuristic and random baselines. The window is a single column so it sits
next to a terminal; the app prints decisions and model latency to stdout for presentations:
 [code] 
The current ten-seed capped run averages 3,667 pieces for GLiClass LUT8 and 2,874 for the corrected
heuristic control. See Benchmarks.md for the exact policy, per-seed results, an