Downloads · 30 days
22
33% of all-time downloads
tokimoa/Jagle-VL-2.2B-Jagle-FineVision-MLX-8bit
Jagle-VL-2.2B-Jagle-FineVision-MLX-8bit is a image-text-to-text model from tokimoa. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for mlx. The card lists the license as apache-2.0.
llm-jpの日本語VLM Jagle-VL-2.2B-Jagle-FineVision(Qwen3-1.7B + siglip2ビジョンエンコーダ・InternVL型・llmjpvlアーキテクチャ)のMLX 8bit量子化版です。Apple Silicon Macで約2.5GB・実測142 tok/s(M4 Max)・ピークメモリ約4.3GBで動きます。
Downloads · 30 days
22
33% of all-time downloads
All-time downloads
66
Public
Parameters
2.1B
2.7 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors2.7 GB · 99%
How the weights are stored.
U321.7B · 81%
From the Hugging Face model README
llm-jpの日本語VLM Jagle-VL-2.2B-Jagle-FineVision(Qwen3-1.7B + siglip2ビジョンエンコーダ・InternVL型・llmjpvlアーキテクチャ)のMLX 8bit量子化版です。Apple Silicon Macで約2.5GB・実測142 tok/s(M4 Max)・ピークメモリ約4.3GBで動きます。
請求書・議事録・契約書・チェックシート等の実写風文書画像で、6問すべて内容正解を確認しています(合計金額880,000円・担当変更「鈴木から田中」・Recall@5で0.92 など)。決定論的設定(temperature 0)で検証。
本モデルのテキスト側はQwen3バックボーンですが、mlx-vlm 0.6.8のllmjpvl実装はllama/qwen2のみ対応です。以下のパッチで動きます(上流PR: Blaizzy/mlx-vlm#1801・マージ後は不要になります):
mlx_vlm/models/llmjpvl/language.py のAttentionに qwen3 のq/k RMSNormを追加:
# __init__ 内(head_dim算出後)
self.use_qk_norm = config.model_type == "qwen3"
if self.use_qk_norm:
self.q_norm = nn.RMSNorm(head_dim, eps=config.rms_norm_eps)
self.k_norm = nn.RMSNorm(head_dim, eps=config.rms_norm_eps)
# __call__ 内(reshape/transpose後・rope前)
if self.use_qk_norm:
queries = self.q_norm(queries)
keys = self.k_norm(keys)
あわせて LanguageModel.__init__ の対応リストに "qwen3" を追加し、config.py の TextConfig に head_dim: Optional[int] = None を追加してください(head_dim = getattr(config, "head_dim", None) or hidden_size // n_heads)。
from mlx_vlm import load, generate
from mlx_vlm.prompt_utils import apply_chat_template
from mlx_vlm.utils import load_config
repo = "tokimoa/Jagle-VL-2.2B-Jagle-FineVision-MLX-8bit"
model, processor = load(repo, trust_remote_code=True)
config = load_config(repo, trust_remote_code=True)
prompt = apply_chat_template(processor, config, "この画像に何が写っていますか。", num_images=1)
out = generate(model, processor, prompt, image=["doc.png"], max_tokens=400, temperature=0.0)
text = out.text
# 出力冒頭にチャネルトークンが付くため剥がす(上流READMEと同じ後処理)
for tok in ["<|channel|>final<|message|>", "<|return|>"]:
text = text.replace(tok, "")
print(text.strip())
Converted by tokimoa — データを外に出さないAI活用を支援しています