Pusula Nano

The fast, CPU-friendly member of the Pusula family. Pusula Nano is a 149M-parameter TabiBERT cross-encoder. The same typed questions as Pusula (request routing, urgency, human handoff, prompt injection, or custom questions) are answered with a probability for every option. The model runs on a CPU or any GPU.

Version v2.0 (31 October 2026); earlier weights remain available as revisions v1.0 and v1.0-onizleme
Base model boun-tabilab/TabiBERT (Apache-2.0)
This repository Encoder + option scorer, 149M parameters, ~0.6 GB
Language Turkish
Training data Specially curated Turkish data: synthetic messages generated for this project and human-written customer messages licensed from a commercial partner
Interface Same request and answer format as d3's /v1/systemone

Results

Accuracy (%). Evaluation labels were assigned blind and independently by two annotators (Claude Opus 5.5 and Claude Sonnet 5.5) with adjudication, under the published labeling policy; the real customer messages were labeled blind by Claude under the same policy. Evaluation labels are used exclusively for evaluation. In v2.0, the evaluation sets were extended to the 20 templates; the 1.0 models and Decision 3.0 were therefore evaluated again on the same sets, and their scores differ from those published with v1.0.

Evaluation Questions Pusula Nano 1.0 Pusula Nano 2.0 Pusula 2.0
Real customer messages (500 held-out, licensed) 7,500 64.0 89.9 90.6
Long customer complaints (500 held-out, licensed) 4,500 84.6 84.6 88.3
Turkish Decision Benchmark (2,194 messages) 19,861 82.7 83.2 92.0
Gold test set (757 held-out messages) 11,355 62.8 91.3 92.1
Custom questions in unseen sectors 400 50.5 55.5 93.5
Missing information (eksik_bilgi) 99 58.6 53.5 98.0
Sales opportunity (satis_firsati) 100 51.0 95.0 97.0
Life and safety (can_guvenligi) 120 81.7 89.2 100.0
Insults and hate speech (hakaret) 114 43.9 71.0 95.6
Fraud (dolandiricilik) 97 51.5 69.1 100.0
Source grounding of agent answers (kaynaga_dayanma) 100 30.0 38.0 98.0
AI agent questions (templates 17-20) 300 51.2 68.2 97.8
Personal data in e-mails 150 71.3 93.3 100.0
Hidden instructions in documents 400 73.8 78.2 100.0
Long documents (about 12,000 characters) 120 46.7 50.8 100.0
MASSIVE tr-TR, 60-way intent, zero-shot (human-written) 2,974 36.4 32.7 85.2
OffensEval 2020 Turkish, offensive language (real tweets) 3,528 30.6 81.8 88.3

Pusula Nano 2.0 scores above Nano 1.0 on 14 of the 17 evaluations, equal on long customer complaints and below it on missing information 53.5 (Nano 1.0: 58.6) and MASSIVE 32.7 (Nano 1.0: 36.4). Nano 1.0 was trained before the 20 templates were introduced, which explains its lower scores on the sets that contain them.

Intended use: high-volume, low-latency processing of the built-in Turkish questions (routing over 20 domains and the 20 templates, such as urgency, human handoff, action required, security risk and personal data) on a CPU or a small GPU. For other tasks, Pusula is recommended.

Usage

pip install "pusula[serve] @ git+https://github.com/hsnsahinhsn/pusula"
hf download hsnsahinhsn/pusula-nano --local-dir pusula-nano
from pusula.inference import DecisionEngine

engine = DecisionEngine.load("pusula-nano")          # device="cpu" or "cuda"
route = engine.route("Faturama iki kez ücret yansımış, iade istiyorum.")

HTTP server: PUSULA_MODEL_DIR=pusula-nano pusula-serve --port 8080 (see the Pusula repository).

The model can be tried on Google Colab without installation: Open In Colab

Training

  • Data: the 35,635 synthetic Turkish training messages of Pusula 2.0 (19,399 new messages written by Gemma-4-31B-it across NACE Rev. 2.1 sectors and ESCO occupations, and 16,236 earlier synthetic messages), labeled by Qwen3.8-27B under the written labeling policy; 7,419 real messages licensed from a commercial partner and anonymized prior to use (customer messages and long customer complaints), labeled by Qwen3.8-27B under the same policy. The 201 messages labeled as missing information were repeated eight times for this question only. Messages of the evaluation sets are excluded from training.
  • Method: TabiBERT was fine-tuned for two epochs as a cross-encoder that scores each (message, question, option) pair; the temperatures of the three question types were then fitted on a held-out validation set.

Limitations

  • Accuracy on tasks that differ from the training questions is limited (MASSIVE 60-way intent 32.7; Pusula: 85.2); Pusula is recommended for such tasks.
  • Most of the training data is synthetic; evaluation on application-specific data is recommended before deployment.

Contributors and citation

Pusula is developed by the following contributors:

Name Role GitHub Hugging Face
Hasan Şahin Project lead hsnsahinhsn hsnsahinhsn
Ahmet Sayman Contributor asayman asaymantr

Source code: github.com/hsnsahinhsn/pusula.

@software{pusula2026,
  title   = {Pusula: The First Full-Featured Turkish Decision Model},
  author  = {Şahin, Hasan and Sayman, Ahmet},
  year    = {2026},
  version = {2.0},
  url     = {https://github.com/hsnsahinhsn/pusula},
  license = {Apache-2.0}
}

License and attribution

Released under Apache-2.0. Pusula Nano is built on boun-tabilab/TabiBERT (Apache-2.0) and was trained on data labeled with Qwen3.8-27B; the synthetic messages of v2.0 were written with Gemma-4-31B-it (Google, Apache-2.0), with sectors and occupations sampled from NACE Rev. 2.1 (Source: Eurostat) and ESCO (© European Union). External evaluations: Amazon MASSIVE (CC BY 4.0) and OffensEval 2020 Turkish (Çöltekin, 2020; CC BY). See NOTICE.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for hsnsahinhsn/pusula-nano

Finetuned
(5)
this model