ReleasedApache-2.0v2.0

Pusula. The right decision, in Turkish.

Doğru karar, doğru yön.

Pusula is an open-source AI decision model for Turkish, developed by Erenext’s AI Lab. Decision models answer typed questions about a text and return a probability for every option instead of generated text. Examples: which team should handle a request, how urgent it is, whether a human should take over, and whether it contains fraud, insults, personal data or a prompt injection. Pusula is Decision 3.0 (vllm-sr/d3) adapted to Turkish.

What it decides

  • Three question types: choice (one option), noul (yes or no), score (ordered levels). Options are defined in each request.
  • Routing with a built-in Turkish taxonomy: 20 domains, 103 subdomains, 333 intents, or an institution’s own topic list.
  • 20 ready-made templates: topic and intent, 14 checks for messages (for example urgency, emotion, missing information, action required, human handoff, personal data, security, insults, fraud, life and safety, legal risk, churn risk and sales opportunity) and 4 for AI agents (action risk, data leaving the institution, source grounding and task completion).
  • Informal writing, typos, missing Turkish characters and mixed Turkish and English text are covered.
  • Long texts up to 200,000 characters are checked part by part (/v1/scan).
  • Drop-in d3 replacement: the same request and answer format as d3’s /v1/systemone.

Two versions: same requests, different tradeoffs

Pusula

Model
Turkish Decision 3.0: LoRA adapter (rank 32) and code readout on vllm-sr/d3
Size
26B; adapter download about 0.9 GB, plus base d3 weights of about 52 GB
Runs on
GPU: at least 64 GB in BF16, at least 24 GB in 4-bit
Turkish Decision Benchmark / gold test set
92.0 / 92.1
Real customer messages (500 held-out, licensed)
90.6
Best for
Highest accuracy, built-in and custom questions
Weights
Hugging Face
Install
pip install "pusula[serve,d3] @ git+https://github.com/erenextlabs/pusula"
Load
D3Engine.load("~/d3", adapter="~/pusula")

Pusula Nano

Model
TabiBERT cross-encoder (boun-tabilab/TabiBERT) and option scorer
Size
149M parameters, about 0.6 GB, no base weights needed
Runs on
CPU or any GPU
Turkish Decision Benchmark / gold test set
83.2 / 91.3
Real customer messages (500 held-out, licensed)
89.9
Best for
High volume and low latency on the built-in questions
Weights
Hugging Face
Install
pip install "pusula[serve] @ git+https://github.com/erenextlabs/pusula"
Load
DecisionEngine.load("~/pusula-nano")

Both versions accept identical requests. For tasks that differ from the built-in questions or have many options, use Pusula (MASSIVE 60-way intent: 85.2 vs 32.7).

Results for v2.0

Accuracy in percent, from the public model cards.

EvaluationDecision 3.0 (base)Pusula 2.0Pusula Nano 2.0
Real customer messages (500 held-out, licensed)84.090.689.9
Long customer complaints (500 held-out, licensed)81.588.384.6
Turkish Decision Benchmark (2,194 messages)88.592.083.2
Gold test set (757 held-out messages)86.392.191.3
Custom questions in unseen sectors92.893.555.5
Source grounding of agent answers93.098.038.0
Personal data in emails95.3100.093.3
Hidden instructions in documents100.0100.078.2
MASSIVE tr-TR, 60-way intent, zero-shot (human-written)85.385.232.7
OffensEval 2020 Turkish (real tweets)88.488.381.8

Labels were assigned blind and independently by two AI annotators, with adjudication, under the published labeling policy. The real customer messages were labeled blind by an AI annotator under the same policy. See the model cards for the full 17-row table. On the benchmark, Pusula 2.0 (92.0) is slightly below Pusula 1.0 (92.6); improvements are planned for v2.1. Most training data is synthetic; evaluate on your own data before deployment.

Full results and per-question table

How to use it

Python API (engine.decide, decide_many, route, scan) and HTTP API (POST /v1/systemone, /v1/systemone/batch, /v1/scan, /v1/route; GET /v1/taxonomy, /health, /ready). By default the server listens on 127.0.0.1 only; remote access requires an API key. The training pipeline is included in the repo, so d3 can be fine-tuned for other domains.

pip install "pusula[serve] @ git+https://github.com/erenextlabs/pusula"
hf download erenextlabs/pusula-nano --local-dir ~/pusula-nano     # small model, no base weights
PUSULA_MODEL_DIR=~/pusula-nano pusula-serve --port 8080

Releases

  • v2.0 31 October 2026 Current. 20 templates, routing through an institution’s own list, Nano trained with licensed real messages.
  • v1.0 18 October 2026
  • v1.0-onizleme 17 October 2026 Preview.

Each release is tagged in GitHub and both Hugging Face repos. Roadmap: v2.1, with improvements in domain, human handoff and missing information.

Open source and credits

Apache-2.0, for both versions. Pusula is built on vllm-sr/d3 (itself built on Qwen3.8-27B); its training data was written with Gemma-4-31B-it and labeled with Qwen3.8-27B, and TabiBERT was used for data curation. Pusula Nano is built on TabiBERT. All are Apache-2.0.

Contributors: Hasan Şahin (project lead), Ahmet Sayman (contributor).

Deploying Pusula in your product or support workflow?

Contact us
WhatsApp