Image-Text-to-Text
Transformers
Safetensors
English
qwen3_5
piko
piko-9b
multimodal
vision-language
hybrid-attention
linear-attention
ocr
document-understanding
conversational
Instructions to use Dexy2/Piko-9b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Dexy2/Piko-9b with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="Dexy2/Piko-9b") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("Dexy2/Piko-9b") model = AutoModelForMultimodalLM.from_pretrained("Dexy2/Piko-9b", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Dexy2/Piko-9b with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Dexy2/Piko-9b" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Dexy2/Piko-9b", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/Dexy2/Piko-9b
- SGLang
How to use Dexy2/Piko-9b with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "Dexy2/Piko-9b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Dexy2/Piko-9b", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "Dexy2/Piko-9b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Dexy2/Piko-9b", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use Dexy2/Piko-9b with Docker Model Runner:
docker model run hf.co/Dexy2/Piko-9b
| # Final Summary — Piko-9b Release Work | |
| 2026-07-29. | |
| ## What Piko-9b turned out to be | |
| A **tensor-level composition of two existing open checkpoints**, not a trained model: | |
| * **Language backbone** (9,197,093,888 params, 427 tensors) — bitwise identical to | |
| `wraithfast-phase15-150k-full-ft`, a fine-tune of `deepreinforce-ai/Ornith-1.0-9B` produced by | |
| five merged QLoRA stages. | |
| * **Vision tower and merger** (456,010,480 params, 348 tensors) — bitwise identical to | |
| `Qwen/Qwen3.5-9B`, copied without modification. | |
| Zero of the 775 tensors are unaccounted for. The six QLoRA adapters trained under the "Piko" name | |
| exist on disk with non-zero deltas and are **absent from the published weights**: the published | |
| tensors match the pre-adapter checkpoint exactly. | |
| ## The three findings that changed the release | |
| **1. The published benchmark numbers belonged to a different model.** All nine headline scores | |
| matched two local result files to the digit, both recording | |
| `base_model: wraithfast-phase14-100k-full-ft, adapter: wraithfast-phase15-150k-qlora` — a | |
| text-only checkpoint predating the vision composition. The same file's identity probe has that | |
| model answering *"i am called mythos"* and *"i am built on the kairo 6b base model."* | |
| **2. No vision training ever happened.** The phase-6 log contains three events: download → compose | |
| → run smoke benchmark → crash on a TLS certificate error fetching `images.cocodataset.org`. The | |
| vision dataset was never built. The "OCR" datasets were text-only by the project's own manifest: | |
| *"OCR rows train interpretation of OCR/image text detection outputs, not direct pixel vision."* | |
| **3. The vision path works anyway.** This was the surprise. A tower trained for Qwen's embedding | |
| space, bolted onto a backbone that has drifted 1.5–5 % away from it, with no re-alignment, scores | |
| **10/10 on OCR and 10/10 on document understanding**. It read a rendered receipt's merchant and | |
| total correctly and extracted all four values from a bar chart. The multimodal claim survives — in | |
| a narrowed, measured form. | |
| ## What was measured | |
| | Suite | Piko-9b | `Qwen/Qwen3.5-9B` | Verdict | | |
| |---|---:|---:|---| | |
| | Custom regression suite (70 cases) | **65/70** | **63/70** | No significant difference | | |
| | Smoke evaluation | 8/8 | — | Pass | | |
| | Inference validation (12 checks) | 12/12 | — | Pass | | |
| Per category, both models: OCR 10/10 vs 10/10, documents 10/10 vs 10/10, reasoning 10/10 vs 10/10, | |
| long context 5/5 vs 5/5, tables/charts 9/10 vs 9/10, hallucination/safety 7/10 vs 7/10, | |
| instruction following 9/10 vs 8/10, coding 5/5 vs 4/5. | |
| Every category's 95% Wilson intervals overlap. **Piko-9b is not shown to outperform its base | |
| model.** The +20 % on coding is one example out of five. | |
| Performance, 4-bit NF4 on an RTX 5070 Ti: 101 s cold load, 7.37 GB resident, 29–36 tok/s at batch | |
| 1, 81–85 at batch 4, ~5,500 tok/s prefill, 13 ms image preprocessing. Decode rate is **flat across | |
| context length** — the hybrid stack working as designed. | |
| ## The operational discovery | |
| **`device_map="auto"` silently corrupts this model.** On a GPU too small to hold it, layers offload | |
| to CPU, the linear-attention recurrent state breaks, and every prompt returns `!!!!!!!!!!` with no | |
| error raised. First observed as an apparently catastrophic model failure; isolated by loading the | |
| same weights in 4-bit fully resident, which produced correct output immediately. | |
| This is now the first item in the troubleshooting guide, the first check in the smoke evaluation | |
| (exit code 2), a dedicated regression test, and a guard in every example script. It is the single | |
| most likely way a user's deployment breaks. | |
| ## Licensing | |
| The language backbone descends from **MIT**-licensed `Ornith-1.0-9B`; the vision tower is | |
| **Apache-2.0** from `Qwen3.5-9B`. Apache-2.0 for the combined work is permissible **only with the | |
| MIT notice retained** — the previous release shipped an Apache-2.0 `LICENSE` with no attribution | |
| to either upstream. A `NOTICE` file now carries both. | |
| Training-data licensing for the fine-tuning stages **could not be established**: manifests record | |
| categories and row counts, but several sources are named only by local filename. | |
| ## Still live and unfixed | |
| `config.json` on the Hub publishes two absolute paths from the author's machine inside its | |
| `piko_composition` block. The corrected block is specified in | |
| [`repository_audit.md`](repository_audit.md) §8. **That fix has not been applied** — it requires | |
| editing the model repository, which was not done without authorisation. | |
| ## What was not done, and why | |
| | Item | Reason | | |
| |---|---| | |
| | IFEval, MMLU-Pro, GSM8K, HumanEval, OCRBench, DocVQA, ChartQA, TextVQA, MMMU | 1–3 h per model each, doubled for the baseline. Scripts provided and runnable | | |
| | bfloat16 unquantized profiling | Needs ~22 GB; test GPU has 15.92 GB | | |
| | 8-bit | Not exercised | | |
| | GGUF / AWQ / GPTQ artefacts | Not produced; nothing claimed. Scripts provided | | |
| | Video input | No fixture built; documented as untested | | |
| | Context beyond ~32K | Hardware limit | | |
| | Byte-comparing the Hub checkpoint | Verified by file name and size only; 21 GB re-download not performed | | |
| | Testing the six unmerged adapters | Out of scope, but worth doing — nobody has checked whether they help | | |
| ## An honest read of the outcome | |
| The repository is now accurate, reproducible, and complete. But the central measured fact is that | |
| **Piko-9b performs the same as the model whose vision tower it borrowed.** A user choosing between | |
| them should probably take `Qwen/Qwen3.5-9B`: better documented, better supported, and its vision | |
| tower and language backbone were trained together. | |
| What Piko-9b genuinely has is a different language backbone with a different fine-tuning history, | |
| and a demonstration — worth something on its own — that a vision tower can survive being | |
| transplanted onto a drifted backbone without re-alignment. | |
| That is a defensible thing to publish. It is not what the previous model card said. | |