Holo2-4B-CoreAI / README.md
mlboydaisuke's picture
gen-cards: regenerate Use-it block
100f230 verified
|
Raw
History Blame Contribute Delete
4.38 kB
---
license: apache-2.0
base_model: Hcompany/Holo2-4B
pipeline_tag: image-text-to-text
tags:
- core-ai
- coreml
- on-device
- ios
- iphone
- vision-language
- gui-grounding
- computer-use
- qwen3-vl
language:
- en
---
# Holo2-4B β€” Core AI (on-device, iPhone) Β· GUI-grounding VLM
[Hcompany/Holo2-4B](https://huggingface.co/Hcompany/Holo2-4B) converted to Apple **Core AI**
for on-device inference, served by the **CoreAIChat** app.
Holo2 is H Company's **computer-use / GUI-grounding** vision-language model: given a screenshot
and an instruction ("click the submit button"), it predicts the **click coordinates / locates the
UI element**. Built on the **Qwen3-VL-4B** backbone, so it rides the Core AI zoo's existing
Qwen3-VL pipeline. The zoo's **first GUI-grounding / computer-use model**.
<!-- gen-cards:use-it begin id=holo2-4b (managed by scripts/gen-cards β€” edit cards.json / QuickStart.swift, not this block) -->
## Use it
▢️ **Run it (source)** β€” the [VLChat runner](https://github.com/john-rocky/coreai-kit/tree/main/Examples/VLChat)
(GUI + CLI, one app for every vision-language model in the catalog):
```bash
git clone https://github.com/john-rocky/coreai-kit
open coreai-kit/Examples/VLChat/VLChat.xcodeproj
# β†’ Run, then pick "Holo2 4B" in the model picker
# agents / headless (macOS):
cd coreai-kit/Examples/VLChat
swift run vlchat-cli --model holo2-4b --image screenshot.png --prompt "Localize an element on the GUI image according to my instructions and output a click position as Click(x, y) with x num pixels from the left edge and y num pixels from the top edge. Instruction: click the Submit button."
```
πŸ’» **Build with it** β€” complete; the glue is kit API, copy-paste runs:
```swift
import CoreAIKit
import FoundationModels
let vlm = try await KitVisionModel(catalog: "holo2-4b")
let session = LanguageModelSession(model: vlm)
let image = try ImageFile.load(imageURL) // any image file β†’ CGImage + EXIF orientation
let reply = try await session.respond(to: Prompt {
prompt
Attachment(image.cgImage, orientation: image.orientation)
})
// reply.content: "Click(x, y)" in 0-1000-normalized coordinates for a grounding prompt,
// or a plain answer for a normal question - all generated on-device
```
The take-home is [`Examples/VLChat/Sources/QuickStart.swift`](https://github.com/john-rocky/coreai-kit/blob/main/Examples/VLChat/Sources/QuickStart.swift)
β€” this exact code as one typed function, no UI; the CLI is an argument shell over it, and
the GUI drives the same `KitVisionModel(catalog:)` behind a `LanguageModelSession`.
Holo2 is a GUI-grounding model: feed a screenshot and H Company's localization prompt
(see the card's grounding section) and it returns `Click(x, y)` in 0-1000-normalized
coordinates β€” multiply by `imageSize / 1000` for pixels. It also answers free-form
questions like its Qwen3-VL base.
**Integration checklist**
- SPM: `https://github.com/john-rocky/coreai-kit` β†’ product **CoreAIKit**
- Info.plist: `NSPhotoLibraryUsageDescription` β€” only if you use PhotosPicker
- Entitlements (iOS): `com.apple.developer.kernel.increased-memory-limit`
- First run downloads the model β€” 5.5 GB (Mac) / 5.5 GB (iPhone) β€” then it loads from the
local cache (Application Support; progress via the `downloadProgress` callback)
- Measure in Release β€” Debug is ~3Γ— slower on per-token host work
<!-- gen-cards:use-it end -->
## Contents (`gpu-pipelined/`)
- `holo2_4b_decode_int8lin_s1/` β€” the **decode** bundle (static query=1, per-block-32 int8 linear
body; rides Apple's `coreai-pipelined` GPU engine, specializes on-device β€” no AOT needed). ~4.4 GB.
- `holo2_4b_vision/` β€” the fixed-grid **vision encoder** `.aimodel` (fp16): `patches [784,1536]
-> (image_embeds [196,2560], deepstack [3,196,2560])`. Run once per image. ~0.8 GB.
## Parity (vs fp32 HF oracle, Core AI GPU engine)
- **Vision:** image-embeds cos **0.999983**, deepstack cos **0.999989**.
- **Decoder (int8lin):** teacher-forced S=1 sweep **4/4**, **16/16** decode steps token-exact,
HF-seeded decode match. All PASS.
## Use
Install **CoreAIChat**, pick **Holo2 4B**, attach a screenshot, and ask where an element is /
what to click β€” it grounds the instruction to the image.
## License
Apache-2.0, inherited from the base model
[Hcompany/Holo2-4B](https://huggingface.co/Hcompany/Holo2-4B). See `LICENSE`.