alt.freeweights.minicpm / MiniCPM-V-4.6-Thinking-AWQ
From: openbmb <huggingface.co/openbmb>Newsgroups: alt.freeweights.minicpmSubject:

MiniCPM-V-4.6-Thinking-AWQ

Date: 2026-11-15Commit: 7226fddSigned: 2DC28CC7B26A283B ✓

Image text to text model with 1.3B parameters. Safetensors weights, 1.89 GB in all. Published by openbmb under Apache-2.0.

1.3B params1.89GBMiniCPM-V-4.6-Thinking-AWQsafetensorspermissive
FactsParams1.3BSize1.89 GBFormatssafetensorsTaskimage text to textLicenseApache-2.0From sourcepermissive
$ fw get openbmb/MiniCPM-V-4.6-Thinking-AWQ
# manifest sha256 b94a2fe0f4f2… · 1.89 GB · 9 files
$ fw verify ./MiniCPM-V-4.6-Thinking-AWQ openbmb/MiniCPM-V-4.6-Thinking-AWQ
From sourceHosted (signed)openbmb/MiniCPM-V-4.6-Thinking-AWQLast check: 2026-11-15 04:43 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Quantized of MiniCPM-V-4.6-Thinking.

Works with

Overview

Size
1.89 GB
Weights
1.87 GB (safetensors)
Parameters
1.3B
Formats
safetensors
Task
image text to text
License
Apache-2.0 (permissive)
Files
9, each with a sha256
Publisher
openbmb
Added
2026-11-15
Section
alt.freeweights.minicpm
Lineage

Original release from the publisher.

Base model: openbmb/MiniCPM-V-4.6-Thinking

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 04:43 UTCpassed

Model card

From the publisher at commit 7226fdd. Shown as plain text with links; images open at the publisher.

This repository hosts the AWQ (W4A16, AutoAWQ) quantized version of MiniCPM-V 4.6 Thinking. For the original BF16 weights and the full model card, please refer to openbmb/MiniCPM-V-4.6-Thinking.

A Pocket-Sized MLLM for Ultra-Efficient Image and Video Understanding on Your Phone

GitHub | MiniCPM Wiki(Chinese) | CookBook | Demo | Feishu (Lark)

News#

  • [2026.05.17] ⭐️⭐️⭐️ We release the API service of MiniCPM-V 4.6, with a public free API key together! Try it now.

MiniCPM-V 4.6 Thinking#

MiniCPM-V 4.6 Thinking is the long chain-of-thought reasoning variant of MiniCPM-V 4.6. It generates an explicit reasoning trace before producing the final answer, substantially boosting performance on complex multimodal reasoning, math, and OCR-heavy tasks, while keeping the same edge-friendly architecture (SigLIP2-400M vision encoder + Qwen3.5-0.8B LLM) and the mixed 4x/16x visual token compression of MiniCPM-V 4.6.

Evaluation#

Overall Performance (Thinking)

Image: image

Click to view MiniCPM-V 4.6 (Instruct) performance.

Image: image

Click to view MiniCPM-V 4.6 inference efficiency results.

High-Concurrency Throughput

Image: image

Single Request TTFT (ms)

Image: image

Examples#
Overall#

https://www.youtube.com/watch?v=Ch5UG1FoysM

MiniCPM-V 4.6 can be deployed across three mainstream end-side platforms — iOS, Android and HarmonyOS. The clips below are raw screen recordings on phone devices without edition.

| iPhone iPhone 17 Pro Max | Android Redmi K70 | HarmonyOS HUAWEI nova 14

| Image: image | Image: image | Image: image

Usages#
Inference with Transformers#
Installation#
pip install "transformers[torch]>=5.7.0" torchvision torchcodec

Note on CUDA compatibility: torchcodec (used for video decoding) may have compatibility issues with certain CUDA versions. For example, torch>=2.11 bundles CUDA 13.1 by default, while environments with CUDA 12.x may encounter errors such as RuntimeError: Could not load libtorchcodec. Two workarounds:

  1. Replace torchcodec with PyAV — supports both image and video inference without CUDA version constraints:
   pip install "transformers[torch]>=5.7.0" torchvision av
  1. Pin the CUDA version when installing torch to match your environment (e.g. CUDA 12.8):
   pip install "transformers>=5.7.0" torchvision torchcodec --index-url https://download.pytorch.org/whl/cu128
Load Model#
from transformers import AutoModelForImageTextToText, AutoProcessor

model_id = "openbmb/MiniCPM-V-4.6-Thinking-AWQ"

processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
    model_id, torch_dtype="auto", device_map="auto"
)

# Flash Attention 2 is recommended for better acceleration and memory saving,
# especially in multi-image and video scenarios.
# model = AutoModelForImageTextToText.from_pretrained(
#     model_id,
#     torch_dtype=torch.bfloat16,
#     attn_implementation="flash_attention_2",
#     device_map="auto",
# )
Image Inference#
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/refract.png"},
            {"type": "text", "text": "What causes this phenomenon?"},
        ],
    }
]

downsample_mode = "16x"  # Using `downsample_mode="4x"` for Finer Detail

inputs = processor.apply_chat_template(
    messages, tokenize=True, add_generation_prompt=True,
    return_dict=True, return_tensors="pt",
    downsample_mode=downsample_mode,
    max_slice_nums=36,
).to(model.device)

generated_ids = model.generate(**inputs, downsample_mode=downsample_mode, max_new_tokens=512)
generated_ids_trimmed = [
    out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text[0])
Video Inference#
messages = [
    {
        "role": "user",
        "content": [
            {"type": "video", "url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/football.mp4"},
            {"type": "text", "text": "Describe this video in detail. Follow the timeline and focus on on-screen text, interface changes, main actions, and scene changes."},
        ],
    }
]

downsample_mode = "16x"  # Using `downsample_mode="4x"` for Finer Detail

inputs = processor.apply_chat_template(
    messages, tokenize=True, add_generation_prompt=True,
    return_dict=True, return_tensors="pt",
    downsample_mode=downsample_mode,
    max_num_frames=128,
    stack_frames=1,
    max_slice_nums=1,
    use_image_id=False,
).to(model.device)

generated_ids = model.generate(**inputs, downsample_mode=downsample_mode, max_new_tokens=2048)
generated_ids_trimmed = [
    out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text[0])
Advanced Parameters#

You can customize image/video processing by passing additional parameters to apply_chat_template:

ParameterDefaultApplies toDescription
downsample_mode"16x"Image & VideoVisual token downsampling. "16x" merges tokens for efficiency; "4x" keeps 4× more tokens for finer detail. Must also be passed to generate().
max_slice_nums9Image & VideoMaximum number of slices when splitting a high-resolution image. Higher values preserve more detail for large images. Recommended: 36 for image, 1 for video.
max_num_frames128Video onlyThe max_num_frames parameter dynamically controls the temporal context length and prevents VRAM overflow:

Short Videos (duration ≤ max_num_frames sec): The processor defaults to 1 FPS, capturing second-by-second details without hitting the upper limit. Long Videos (duration > max_num_frames sec): The processor automatically switches to uniform sampling, selecting exactly max_num_frames evenly spaced across the entire timeline. |

| stack_frames | 1 | Video only | Total sample points per second. 1 = main frame only (no stacking). N (N>1) = 1 main frame + N−1 sub-frames per second; the sub-frames are composited into a grid image and interleaved with main frames. Recommended setting is 1 for short videos, and 3 or 5 for long videos. |

| use_image_id | True | Image & Video | Whether to prepend <image_id>N</image_id> tags before each image/frame placeholder. Set True for image, False for video. |

Note: downsample_mode must be passed to both apply_chat_template (for correct placeholder count) and generate (for the vision encoder). All other parameters only need to be passed to apply_chat_template.

Serving with transformers serve#

Hugging Face Transformers includes a lightweight OpenAI-compatible server for quick testing and moderate-load deployment.

pip install "transformers[serving]>=5.7.0"

Start the server:

transformers serve openbmb/MiniCPM-V-4.6-Thinking-AWQ --port 8000 --host 0.0.0.0 --continuous-batching

Send a request:

curl -s http://localhost:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "openbmb/MiniCPM-V-4.6-Thinking-AWQ",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "image_url", "image_url": {"url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/refract.png"}},
        {"type": "text", "text": "What causes this phenomenon?"}
      ]
    }]
  }'

Tool calling example:

curl -s http://localhost:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{
  "model": "openbmb/MiniCPM-V-4.6-Thinking-AWQ",
  "messages": [{"role": "user", "content": [
    {"type": "text", "text": "the weather of Beijing"}
  ]}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Get the current weather for a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {"type": "string", "description": "City name"}
        },
        "required": ["location"]
      }
    }
  }]
}'

The model returns a natural-language explanation followed by a structured <tool_call> block embedded in the content field. Note that a dedicated tool call parser for this format has not yet been added to the transformers library, so the tool calls need to be extracted manually via regex for now.

{
    "id": "f4f09c7d-8045-4cb1-ade9-07aa5dee637d",
    "choices": [
        {
            "finish_reason": "stop",
            "index": 0,
            "message": {
                "content": "I need to check the current weather for Beijing, so I will call the get_weather function.\n\n<tool_call>\n<function=get_weather>\n<parameter=location>\nBeijing\n</parameter>\n</function>\n</tool_call>",
                "role": "assistant"
            }
        }
    ],
    "created": 1778748859,
    "model": "openbmb/MiniCPM-V-4.6-Thinking-AWQ@main",
    "object": "chat.completion",
    "usage": {
        "completion_tokens": 47,
        "prompt_tokens": 283,
        "total_tokens": 330
    }
}
Handling Escaped Newlines in Model Outputs#

In some cases, the model might output escaped newline characters \n as string literals instead of actual newlines. To render the text correctly, especially in UI layers, you can use the following utility function. This function carefully replaces literal \n with real newlines while protecting scenarios where \n has specific semantic meaning.

Utility Function:

import re

_PATTERN = re.compile(
    r'(```[\s\S]*?```'       # fenced code blocks
    r'|`[^`]+`'              # inline code
    r'|\$\$[\s\S]*?\$\$'     # display math
    r'|\$[^$]+\$'            # inline math
    r'|\\\([\s\S]*?\\\)'     # \(...\)
    r'|\\\[[\s\S]*?\\\]'     # \[...\]
    r')'
    r'|(?<!\\)(?:\\r\\n|\\[nr])'
)

def normalize_response_text(text: str) -> str:
    """
    Lightweight post-processing: Converts literal '\\n' to actual newlines, 
    while protecting code blocks, inline code, and LaTeX commands.
    """
    if not isinstance(text, str) or "\\" not in text:
        return text
    return _PATTERN.sub(lambda m: m.group(1) or '\n', text)
Deploy MiniCPM-V 4.6 on iOS, Android, and HarmonyOS Platforms#

We have adapted MiniCPM-V 4.6 for deployment on iOS, Android, and HarmonyOS platforms, with all edge adaptation code fully open-sourced. Developers can reproduce the on-device experience in just a few steps. Visit our edge deployment repository for platform-specific build guides, or go to the download page to try pre-built apps directly.

Use MiniCPM-V 4.6 in Other Inference and Training Frameworks#

MiniCPM-V 4.6 supports multiple inference and training frameworks. Below are quick-start commands for each. For full details, see our Cookbook.

vLLM — Full Guide

vllm serve openbmb/MiniCPM-V-4.6-Thinking-AWQ \
  --port 8000 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder \
  --default-chat-template-kwargs '{"enable_thinking": true}'

Note: --enable-auto-tool-choice and --tool-call-parser qwen3_coder enable tool/function calling support. If you don't need tool use, you can omit these flags and simply run vllm serve openbmb/MiniCPM-V-4.6-Thinking-AWQ.

curl -s http://localhost:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{
  "model": "openbmb/MiniCPM-V-4.6-Thinking-AWQ",
  "messages": [{"role": "user", "content": [
    {"type": "image_url", "image_url": {"url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/refract.png"}},
    {"type": "text", "text": "What causes this phenomenon?"}
  ]}]
}'

Tool calling example:

curl -s http://localhost:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{
  "model": "openbmb/MiniCPM-V-4.6-Thinking-AWQ",
  "messages": [{"role": "user", "content": [
    {"type": "text", "text": "北京的天气"}
  ]}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Get the current weather for a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {"type": "string", "description": "City name"}
        },
        "required": ["location"]
      }
    }
  }]
}'

SGLang — Full Guide

python -m sglang.launch_server --model openbmb/MiniCPM-V-4.6-Thinking-AWQ --port 30000
curl -s http://localhost:30000/v1/chat/completions -H 'Content-Type: application/json' -d '{
  "model": "openbmb/MiniCPM-V-4.6-Thinking-AWQ",
  "messages": [{"role": "user", "content": [
    {"type": "image_url", "image_url": {"url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/refract.png"}},
    {"type": "text", "text": "What causes this phenomenon?"}
  ]}]
}'

llama.cpp — Full Guide

llama-server -m MiniCPM-V-4.6-Q4_K_M.gguf --port 8080
curl -s http://localhost:8080/v1/chat/completions -H 'Content-Type: application/json' -d '{
  "model": "MiniCPM-V-4.6",
  "messages": [{"role": "user", "content": [
    {"type": "image_url", "image_url": {"url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/refract.png"}},
    {"type": "text", "text": "What causes this phenomenon?"}
  ]}]
}'

Ollama — Full Guide

ollama run minicpm-v-4.6-thinking

In the interactive session, paste an image path or URL directly to chat with the model.

LLaMA-Factory (Fine-tuning) — Full Guide

llamafactory-cli train examples/train_lora/minicpmv4_6_lora_sft.yaml

ms-swift (Fine-tuning) — Full Guide

swift sft --model_type minicpm-v-4_6 --dataset <your-dataset>

License#

Model License#
  • The MiniCPM-o/V model weights and code are open-sourced under the Apache-2.0 license.
Statement#
  • As MLLMs, MiniCPM-o/V models generate content by learning a large number of multimodal corpora, but they cannot comprehend, express personal opinions, or make value judgements. Anything generated by MiniCPM-o/V models does not represent the views and positions of the model developers
  • We will not be liable for any problems arising from the use of MiniCPM-o/V models, including but not limited to data security issues, risk of public opinion, or any risks and problems arising from the misdirection, misuse, dissemination, or misuse of the model.

Technical Reports and Key Techniques Papers#

👏 Welcome to explore key techniques of MiniCPM-o/V and other multimodal projects of our team:

Technical Reports: MiniCPM-o 4.5 | MiniCPM-V 4.5 | MiniCPM-o 2.6 | MiniCPM-Llama3-V 2.5 | MiniCPM-V 2.0

Other Multimodal Projects: VisCPM | RLPR | RLHF-V | LLaVA-UHD | RLAIF-V | LLaVA-UHD-v4

Citation#

If you find our model/code/paper helpful, please consider citing our papers 📝 and staring us ⭐️!

@proceedings{yu2025minicpmv45cookingefficient,
      title={MiniCPM-V 4.5: Cooking Efficient MLLMs via Architecture, Data, and Training Recipe}, 
      author={Tianyu Yu and Zefan Wang and Chongyi Wang and Fuwei Huang and Wenshuo Ma and Zhihui He and Tianchi Cai and Weize Chen and Yuxiang Huang and Yuanqian Zhao and others},
      year={2025},
      url={https://arxiv.org/abs/2509.18154}, 
}

@article{yao2024minicpm,
  title={MiniCPM-V: A GPT-4V Level MLLM on Your Phone},
  author={Yao, Yuan and Yu, Tianyu and Zhang, Ao and Wang, Chongyi and Cui, Junbo and Zhu, Hongji and Cai, Tianchi and Li, Haoyu and Zhao, Weilin and He, Zhihui and others},
  journal={arXiv preprint arXiv:2408.01800},
  year={2024}
}

Files

9 files · 1.89 GBWeights 1.87 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 9 files with their sha256
FileSizesha256
.gitattributes1.57 KB34448b82c17d60fec9b65b1f093c115ddbaadc04beb1b0140b6bfed2e012a930
README.md20.2 KBda77bbf5258b41a94dc2bd55ab3b0b8d858bab6379ffc36d6c13014351903274
chat_template.jinja7.30 KB8a2210dffde6b0ccce5b16990da83c159f24d3667b4565da682c456c16a4fd6e
config.json3.01 KB318bff17cf5894aab555f4a54b7ca972ac8520d7371432ef5a957020784351e7
generation_config.json214 B7cf2e3ed8955ab9b8b1f62e9e0a7950aeeec4088875570c5ced74a2e74b103de
model.safetensors1.87 GB5c91351207a0a2c68a30faf4cf60b96f2261b5fcf32424b1e91d8c03d6d6ff60
processor_config.json1.20 KB21582ba07ca4af215b9c7ec1738274ba62ce4b34d140051f313144dea7df6817
tokenizer.json20.0 MB33861e37bb955af1e3f3061182b820f347eba2b9c2c1011c82794bf0d6e77b54
tokenizer_config.json9.00 KBba362a361938ce932439ce2c74e0fe282427cc7096b67e77c7505ee0da1e12d7
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
7226fddcbd pinned now2026-11-15 04:43 UTC9 files · 1.89 GB

Use it

$ fw get openbmb/MiniCPM-V-4.6-Thinking-AWQ
# manifest sha256 b94a2fe0f4f2… · 1.89 GB · 9 files
$ fw verify ./MiniCPM-V-4.6-Thinking-AWQ openbmb/MiniCPM-V-4.6-Thinking-AWQ
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/openbmb/MiniCPM-V-4.6-Thinking-AWQ.json --dir ./MiniCPM-V-4.6-Thinking-AWQ $ python3 fw.py verify ./MiniCPM-V-4.6-Thinking-AWQ ./openbmb__MiniCPM-V-4.6-Thinking-AWQ.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download openbmb/MiniCPM-V-4.6-Thinking-AWQ --revision 7226fddcbdc2ffd1851679cd1befe29ba463af97 --local-dir ./MiniCPM-V-4.6-Thinking-AWQ
transformersLoad the weights in Python.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import AutoModelForImageTextToText, AutoProcessor processor = AutoProcessor.from_pretrained("openbmb/MiniCPM-V-4.6-Thinking-AWQ", revision="7226fddcbdc2ffd1851679cd1befe29ba463af97") model = AutoModelForImageTextToText.from_pretrained("openbmb/MiniCPM-V-4.6-Thinking-AWQ", revision="7226fddcbdc2ffd1851679cd1befe29ba463af97", device_map="auto")
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve openbmb/MiniCPM-V-4.6-Thinking-AWQ --revision 7226fddcbdc2ffd1851679cd1befe29ba463af97

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
da77bbf5258b41a94dc2bd55ab3b0b8d858bab6379ffc36d6c13014351903274
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: openbmb <huggingface.co/openbmb>Newsgroups: alt.freeweights.minicpmSubject: MiniCPM-V-4.6-Thinking-AWQDate: 2026-11-15Commit: 7226fddSigned: 2DC28CC7B26A283B ✓
Upstream
openbmb/MiniCPM-V-4.6-Thinking-AWQ
Pinned commit
7226fddcbdc2ffd1851679cd1befe29ba463af97
Manifest
MiniCPM-V-4.6-Thinking-AWQ.json · .minisig
Manifest sha256
b94a2fe0f4f2cc82b8b96516864febd6085fe1fef68b103eb651bcb19d5ed1a3
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 04:43 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/openbmb/MiniCPM-V-4.6-Thinking-AWQ.json $ curl -O https://freeweights.allternit.com/manifests/openbmb/MiniCPM-V-4.6-Thinking-AWQ.json.minisig $ minisign -Vm MiniCPM-V-4.6-Thinking-AWQ.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

openbmb/MiniCPM-V-4.6-Thinking · this model is a quantization of it

No model in the catalog names this one as its parent.

Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download openbmb/MiniCPM-V-4.6-Thinking-AWQ
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. MiniCPM-V-4.6-Thinking-AWQ.json. Provenance. Takedown history: none.
From: openbmb <huggingface.co/openbmb>Subject: AgentCPM-Explore-GGUF
From: openbmb <huggingface.co/openbmb>Subject: AgentCPM-Report
From: openbmb <huggingface.co/openbmb>Subject: AgentCPM-Report-GGUF
From: openbmb <huggingface.co/openbmb>Subject: BitCPM-CANN-0.5B-gguf
From: openbmb <huggingface.co/openbmb>Subject: BitCPM-CANN-1B-gguf
From: openbmb <huggingface.co/openbmb>Subject: BitCPM-CANN-3B-gguf