Model reference · open weights

Azra-1-Mini

LLMs OttomanNLP Image→text 1 build Open weights 746 dl/mo

Azra-1-Mini is an open-weight language model from OttomanNLP. Azra-1-Mini-0.8b (BF16) weighs 1.7 GB; the smallest configuration that runs it is RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • Azra-1-Mini is a vision-language model developed by OttomanNLP for image-to-text transcription of Ottoman Turkish in Nesih and Rika scripts.
  • The model has 853M parameters, a context length of 262144 tokens, and supports Ottoman, Turkish, and Arabic languages.
  • It is released under the Apache-2.0 license.

Summary of the OttomanNLP/Azra-1-Mini-0.8b model card, 2026-10-01

What it is

Released byOttomanNLP
Released2026-08-07
Parameters853M
VRAM1.7 GB for the weights

What it runs on

Memory and cards for Azra-1-Mini-0.8b (BF16)

1.7 GBweights, file size
12 MBcache per 1K tokens
39 MBfixed state per request
2.0 GBruntime overhead, at least
262,144 tokenscontext max
CardRequests at onceContext maxMemory
8K each32K each
RTX 3060 12 GB5617all 256K11.6 GB
RTX 4060 Ti 16 GB8326all 256K15.4 GB
RTX 3090 24 GB14044all 256K23.4 GB
RTX 4090 24 GB14044all 256K23.4 GB
RTX 5090 32 GB19561all 256K31.0 GB
L40S 48 GB28791all 256K44.0 GB
A100 80 GB532168all 256K78.2 GB
H100 80 GB496156all 256K78.1 GB
RTX PRO 6000 Blackwell 96 GB608192all 256K93.8 GB
DGX Spark (GB10) 128 GB unified705223all 256K107 GB
H200 141 GB924292all 256K138 GB
B200 180 GB1000+378all 256K176 GB
Memory needed at each load
Requests at once8K tokens each32K tokens each
13.9 GB4.2 GB
54.4 GB5.9 GB
84.8 GB7.3 GB
166.0 GB10.8 GB
328.2 GB17.9 GB
6412.7 GB32.0 GB

One card, with vLLM's small-card settings.

From the model card

What OttomanNLP says about Azra-1-Mini

Read the model card

Azra 1-Mini 0.8b is a lightweight, high-performance Vision-Language OCR model specialized in Ottoman Turkish text transcription across both Nesih (printed/calligraphic) and Rika/Riqa (handwritten) scripts.

Despite having only 0.8 billion parameters, Azra 1-Mini achieves state-of-the-art accuracy on Ottoman Turkish OCR tasks, outperforming significantly larger proprietary models.

⚠️ Important Note on Input Resolution & Segmentation: This model has been fine-tuned and optimized specifically for line-level text images (satır bazlı görüntüler). It may not achieve optimal accuracy directly on full-page images without prior text line cropping/segmentation.


📊 Benchmark Results & Performance Comparison

The model was evaluated against leading proprietary Vision-Language models on standard Ottoman Turkish test sets using character accuracy (100% - CER).

1. Nesih Script Test Set (Printed / Calligraphic)

ModelSuccess Rate (%)Rank
Gemini 3.1 Pro82.82%👑 1st
Azra 1-Mini 0.8b80.23%🥈 2nd
Qwen 3.8 Max74.26%🥉 3rd

2. Rika Script Test Set (Handwritten)

ModelSuccess Rate (%)Rank
Azra 1-Mini 0.8b67.08%👑 1st (Winner)
Gemini 3.1 Pro58.46%🥈 2nd
Qwen 3.8 Max54.99%🥉 3rd

🌟 Key Highlight: Azra 1-Mini 0.8b achieves 1st place on the handwritten Rika dataset (67.08%), significantly outperforming both Gemini 3.1 Pro and Qwen 3.8 Max while running efficiently at sub-billion parameter scale.


📷 Qualitative Results & Sample Transcriptions

Below are top qualitative predictions generated by Azra 1-Mini 0.8b from the evaluation test sets:

1. Nesih Script Samples (Printed / Calligraphic)

ImageGround Truth (GT)Model Prediction (Azra 1-Mini)CER
امّا اری وابدار ونازک اولور هر اعجک زمان غرسیامّا اری وابدار ونازک اولور هر اعجک زمان غرسی0.00%
هلاک ایدر ازایسه علاج ایله خلاص اولورهلاک ایدر ازایسه علاج ایله خلاص اولور0.00%
یافوجی ایچنه دوشرلر اوّل التنه وافرد وکلمش خردلیافوجی ایچنه دوشرلر اوّل التنه وافرد وکلمش خردل0.00%
اغزی محکم باغلنوب اول بوداق اکلوب یره کوملسه وقتاغزی محکمه باغلنوب اول بوداق اکلوب یره کوملسه وقت2.08%
دکمک زماندر دیمش یعنی آیک نقصانی زمانی که اوّلدکک زماندر دیمش یعنی آیک نقصانی زمانی که اوّل2.17%

2. Rika Script Samples (Handwritten)

ImageGround Truth (GT)Model Prediction (Azra 1-Mini)CER
دیمک طلب و دیانت بزدن، دین، شریعت، هدایت اللهدندر و بو هدایت ایکیدیک طلب و دیانت بزدن، دین، شریعت، هدایت اللهدندر۔ و بوهدایت ایکی4.62%
ایتمک دون بنی تنویر ایدن کونشک یارین تنویر ایدهمیهجکنی ادعا ایتمک کبی قانون استقرایی انکاردر۔ایتمک دوند بنی تنویر ایدن کونشک یارین تنویر ایدرمهجیکنی ادعا ایتمک کبی قانون استقرالی انکاردر۔5.38%
ایمانده نه قدر بیوک بر سعادت و نعمت؛ و نه قدر بیوک بر لذت و راحت بولوندیغنی اڭلامقایمانده نه قدر یوک بر سعادت ونعمت و نه قدر یوک بر لذت و راحت بولوندیغی اشلامم8.54%
”الله تعالی ابراهیم علیه السلامه وحی ایدوب دیدی که: اسماعیل حقندهکی دعاکی قبول ایتدم و اونی"الله تعالی ابراهیم علمه السلام دحی ایدوب دیدی کی: اسماعیل حقندهکی دعاک قبول ایتدم واولی8.79%
بوراده مطلوب اولمامق لازم کلیر، فی الواقع "الصراط المستقیم" نظم جلیلی بزه علی الاطلاقبوراده مطلوب اولاسون لازم کلیر۔ فی الواقع "الصراط المستقیم" نظام جلیلی بزه علی الاطام9.41%

🚀 Usage Guide (transformers)

Below is the standard, native PyTorch & Hugging Face transformers implementation using AutoProcessor and Qwen3_5ForConditionalGeneration:

import os
import torch
from PIL import Image
from transformers import AutoProcessor, Qwen3_5ForConditionalGeneration
from qwen_vl_utils import process_vision_info

# Device & dtype settings
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device == "cuda" else torch.float32

model_id = "OttomanNLP/Azra-1-Mini-0.8b"

print("[INFO] Loading model and processor...")
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = Qwen3_5ForConditionalGeneration.from_pretrained(
    model_id,
    torch_dtype=dtype,
    device_map="auto" if device == "cuda" else None,
    trust_remote_code=True
)
model.eval()
print("[INFO] Model loaded successfully!")

def extract_text(image_path: str, prompt: str = "Görseldeki Osmanlıca metni transkribe et:") -> str:
    """Extract Ottoman text from a line image"""
    if not os.path.exists(image_path):
        return f"File not found: {image_path}"

    image = Image.open(image_path).convert("RGB")

    # Adjust dimensions to multiples of 64
    w, h = image.size
    new_w = ((w + 63) // 64) * 64
    new_h = ((h + 63) // 64) * 64
    if (new_w, new_h) != (w, h):
        image = image.resize((new_w, new_h), Image.Resampling.LANCZOS)

    messages = [{
        "role": "user",
        "content": [
            {"type": "image", "image": image},
            {"type": "text", "text": prompt}
        ]
    }]

    text_input = processor.apply_chat_template(
        messages, tokenize=False, add_generation_prompt=True
    )
    image_inputs, _ = process_vision_info(messages)

    inputs = processor(
        text=[text_input],
        images=image_inputs,
        padding=True,
        return_tensors="pt"
    ).to(device)

    with torch.inference_mode():
        generated_ids = model.generate(
            **inputs,
            max_new_tokens=512,
            do_sample=False,
            repetition_penalty=1.2,
            no_repeat_ngram_size=3,
            pad_token_id=processor.tokenizer.pad_token_id,
            eos_token_id=processor.tokenizer.eos_token_id,
        )

    input_len = inputs.input_ids.shape[1]
    output_text = processor.batch_decode(
        generated_ids[:, inpu

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms