Image-Text-to-Text
MLX
Safetensors
English
phi4mm
apple-silicon
vision-language-model
multimodal
phi-4
quantized
4bit
siglip
document-understanding
chart-understanding
ocr
conversational
Eval Results (legacy)
Instructions to use Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit with MLX:
# Make sure mlx-vlm is installed # pip install --upgrade mlx-vlm from mlx_vlm import load, generate from mlx_vlm.prompt_utils import apply_chat_template from mlx_vlm.utils import load_config # Load the model model, processor = load("Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit") config = load_config("Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit") # Prepare input image = ["http://images.cocodataset.org/val2017/000000039769.jpg"] prompt = "Describe this image." # Apply chat template formatted_prompt = apply_chat_template( processor, config, prompt, num_images=1 ) # Generate output output = generate(model, processor, formatted_prompt, image) print(output) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit"
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent
How to use Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit"
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit"
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "Ferox-AI/Phi-4-multimodal-instruct-mlx-4bit" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
| license: mit | |
| license_link: https://huggingface.co/microsoft/Phi-4-multimodal-instruct/resolve/main/LICENSE | |
| language: | |
| - en | |
| tags: | |
| - mlx | |
| - apple-silicon | |
| - vision-language-model | |
| - multimodal | |
| - phi-4 | |
| - quantized | |
| - 4bit | |
| - siglip | |
| - document-understanding | |
| - chart-understanding | |
| - ocr | |
| pipeline_tag: image-text-to-text | |
| library_name: mlx | |
| base_model: microsoft/Phi-4-multimodal-instruct | |
| datasets: | |
| - lmms-lab/DocVQA | |
| - lmms-lab/ai2d | |
| - MMMU/MMMU | |
| - HuggingFaceM4/ChartQA | |
| - lmms-lab/textvqa | |
| - echo840/OCRBench | |
| - derek-thomas/ScienceQA | |
| - AI4Math/MathVista | |
| model-index: | |
| - name: Phi-4-multimodal-instruct-mlx-4bit | |
| results: | |
| - task: | |
| type: image-text-to-text | |
| dataset: | |
| name: AI2D | |
| type: lmms-lab/ai2d | |
| split: test | |
| metrics: | |
| - type: accuracy | |
| value: 83.0 | |
| name: Accuracy (n=100) | |
| - task: | |
| type: image-text-to-text | |
| dataset: | |
| name: ChartQA | |
| type: HuggingFaceM4/ChartQA | |
| split: test | |
| metrics: | |
| - type: relaxed_accuracy | |
| value: 86.0 | |
| name: Relaxed Accuracy (n=100) | |
| - task: | |
| type: image-text-to-text | |
| dataset: | |
| name: DocVQA | |
| type: lmms-lab/DocVQA | |
| split: validation | |
| metrics: | |
| - type: anls | |
| value: 82.8 | |
| name: ANLS (n=100) | |
| - task: | |
| type: image-text-to-text | |
| dataset: | |
| name: TextVQA | |
| type: lmms-lab/textvqa | |
| split: validation | |
| metrics: | |
| - type: accuracy | |
| value: 80.0 | |
| name: Accuracy (n=100) | |
| - task: | |
| type: image-text-to-text | |
| dataset: | |
| name: OCRBench | |
| type: echo840/OCRBench | |
| split: test | |
| metrics: | |
| - type: score | |
| value: 840 | |
| name: Score/1000 (n=100) | |
| - task: | |
| type: image-text-to-text | |
| dataset: | |
| name: ScienceQA | |
| type: derek-thomas/ScienceQA | |
| split: test | |
| metrics: | |
| - type: accuracy | |
| value: 95.8 | |
| name: Accuracy (n=48, image-only) | |
| - task: | |
| type: image-text-to-text | |
| dataset: | |
| name: MathVista | |
| type: AI4Math/MathVista | |
| split: testmini | |
| metrics: | |
| - type: accuracy | |
| value: 58.0 | |
| name: Accuracy (n=100) | |
| # Phi-4-Multimodal-Instruct β MLX 4-bit | |
| A 4-bit quantized [Apple MLX](https://github.com/ml-explore/mlx) conversion of [microsoft/Phi-4-multimodal-instruct](https://huggingface.co/microsoft/Phi-4-multimodal-instruct) for native inference on Apple Silicon. | |
| **Converted by [Ferox AI](https://ferox.ca)** Β· Vision-language inference on MacBook / Mac Studio / Mac Pro without cloud dependencies. | |
| | | | | |
| |---|---| | |
| | **Parameters** | 5.6B (pre-LoRA-fusion) | | |
| | **Quantization** | 4-bit, group_size=64 (backbone only; SigLIP encoder remains FP16) | | |
| | **Disk size** | ~3.9 GB | | |
| | **Base model** | [microsoft/Phi-4-multimodal-instruct](https://huggingface.co/microsoft/Phi-4-multimodal-instruct) | | |
| | **License** | MIT | | |
| | **Modality** | Vision + Text (Phase 1; audio deferred) | | |
| > **Other variants:** [bf16 (full precision)](https://huggingface.co/ferox-ai/Phi-4-multimodal-instruct-mlx-bf16) Β· [8-bit](https://huggingface.co/ferox-ai/Phi-4-multimodal-instruct-mlx-8bit) | |
| ## Quickstart | |
| ```python | |
| from mlx_vlm import load, generate | |
| model, processor = load("ferox-ai/Phi-4-multimodal-instruct-mlx-4bit") | |
| output = generate( | |
| model, | |
| processor, | |
| "Describe this image in detail.", | |
| ["path/to/image.jpg"], | |
| max_tokens=512, | |
| verbose=False, | |
| ) | |
| print(output) | |
| ``` | |
| Requires `mlx-vlm >= 0.1.0` with Phi-4-MM architecture support. Install dependencies: | |
| ```bash | |
| pip install mlx-vlm>=0.1.0 mlx>=0.22.0 | |
| ``` | |
| ## Benchmark Results | |
| Evaluated with our internal evaluation harness on a single Apple Silicon device. Scores are computed on a 100-sample subset of each benchmark. Microsoft's reference scores are reported on the full dataset using PyTorch FP16 β direct comparison should account for both the precision difference and sample-size variance. | |
| | Benchmark | This Model (4-bit) | bf16 | Microsoft FP16 (full dataset) | Metric | | |
| |-----------|:------------------:|:----:|:-----------------------------:|--------| | |
| | **AI2D** | 83.0 | 90.0 | 82.3 | Accuracy | | |
| | **ChartQA** | **86.0** | 85.0 | 81.4 | Relaxed Accuracy | | |
| | **DocVQA** | 82.8 | 86.2 | 93.2 | ANLS | | |
| | **MathVista** | 58.0 | 58.0 | 62.4 | Accuracy | | |
| | **MMMU** | 24.0 | 31.0 | 55.1 | Accuracy | | |
| | **OCRBench** | 840 | 840 | 844 | Score / 1000 | | |
| | **ScienceQA** | 95.8β | 100.0β | 97.5 | Accuracy | | |
| | **TextVQA** | **80.0** | 82.0 | 75.6 | Accuracy | | |
| β ScienceQA: 48 of 100 samples scored (image-bearing questions only; 52 text-only questions excluded). | |
| ### Quantization impact | |
| Across all benchmarks, 4-bit quantization produces a mean accuracy delta of β2.2 percentage points relative to bf16 β within the expected range for 4-bit group quantization on a model of this scale. | |
| ### Note on MMMU | |
| The 100-sample MMMU scores (24.0% 4-bit, 31.0% bf16) fall well below Microsoft's reported 55.1%. To isolate the cause, we ran a **full 900-sample MMMU validation** on the lossless bf16 variant and obtained **27.9%** β consistent with the subset, which confirms the gap is **not** caused by quantization or weight conversion. We were unable to reproduce Microsoft's 55.1% and attribute the difference to evaluation-harness and answer-extraction handling for MMMU's multiple-choice format (prompt formatting and option parsing), rather than to the model's underlying capability β which is better reflected by the document-, chart-, OCR-, and science-focused benchmarks above. | |
| ## Architecture | |
| | Component | Details | | |
| |-----------|---------| | |
| | **Backbone** | Phi-4-Mini (3.8B) β 32 transformer layers, hidden_size=3072, 24 query heads / 8 KV heads (GQA), head_dim=128, LongRoPE positional encoding (131K context) | | |
| | **Vision encoder** | SigLIP-SO400M NaViT β 27 layers, 16 heads, head_dim=72, hidden_size=1152 | | |
| | **Vision projection** | 2-layer MLP: Linear(4608β3072) β GELU β Linear(3072β3072). Input is a 2Γ2 spatial merge of SigLIP patch features | | |
| | **Vision LoRA** | rank=256, alpha=512 (~370M parameters) β **pre-fused** into backbone weights before quantization | | |
| | **Image preprocessing** | Dynamic HD tiling (deterministic grid, up to 8 crops at 448Γ448). PIL + NumPy only; zero PyTorch dependency at inference | | |
| | **Quantization** | 4-bit with group_size=64. Applied to backbone linear layers only; SigLIP encoder weights remain in FP16 | | |
| ### Weight provenance | |
| Weights are converted from `microsoft/Phi-4-multimodal-instruct` using a deterministic pipeline: | |
| 1. Download source checkpoint (PyTorch safetensors) | |
| 2. Fuse vision LoRA adapters into backbone weights (eliminates runtime adapter overhead) | |
| 3. Remap weight keys to MLX naming conventions | |
| 4. Transpose LoRA matrices (PEFT β MLX format) | |
| 5. Quantize backbone to 4-bit (SigLIP excluded) | |
| 6. Serialize as MLX safetensors | |
| The conversion and quantization pipeline is deterministic and fully reproducible from the base model. | |
| ## Intended Use | |
| This model is designed for **local, on-device vision-language inference** on Apple Silicon hardware. Suitable applications include: | |
| - Document understanding and extraction (invoices, forms, reports) | |
| - Chart and diagram interpretation | |
| - Visual question answering | |
| - OCR and text recognition in images | |
| - Educational content analysis | |
| ### Out of scope | |
| - Audio processing (Phase 2, not included in this release) | |
| - Production deployment without application-level safety filtering | |
| - Use cases requiring guaranteed factual accuracy without human verification | |
| ## Limitations | |
| - **100-sample evaluations.** Benchmark scores are computed on subsets, not full datasets. Expect variance relative to full-dataset evaluations. | |
| - **Vision-only.** This is a Phase 1 release covering the vision modality. Audio support from the original Phi-4-multimodal architecture is not included. | |
| - **No runtime LoRA switching.** Vision LoRA adapters are pre-fused; the model cannot dynamically swap adapters. | |
| - **Apple Silicon required.** MLX is designed for Apple's unified memory architecture (M1/M2/M3/M4). This model will not run on CUDA or CPU-only systems. | |
| ## Citation | |
| If you use this model in your work, please cite: | |
| ```bibtex | |
| @misc{feroxai2026phi4mlx, | |
| title={Phi-4-Multimodal-Instruct MLX Conversion}, | |
| author={Ferox AI}, | |
| year={2026}, | |
| url={https://huggingface.co/ferox-ai/Phi-4-multimodal-instruct-mlx-4bit}, | |
| note={4-bit quantized MLX port of microsoft/Phi-4-multimodal-instruct} | |
| } | |
| ``` | |
| ## Acknowledgments | |
| - **Microsoft Research** for the [Phi-4-multimodal-instruct](https://huggingface.co/microsoft/Phi-4-multimodal-instruct) model and technical report | |
| - **Apple MLX team** for the [MLX framework](https://github.com/ml-explore/mlx) | |
| - **Prince Canuma** for [mlx-vlm](https://github.com/Blaizzy/mlx-vlm) | |