File size: 18,276 Bytes
4aa6500
 
 
 
 
 
 
 
 
 
 
 
 
1b40f26
4aa6500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b40f26
4aa6500
 
 
 
 
 
 
 
 
1b40f26
4aa6500
 
 
 
 
 
 
 
 
1b40f26
4aa6500
 
 
 
 
 
 
 
 
1b40f26
4aa6500
 
 
 
 
 
 
 
 
 
 
 
 
 
1b40f26
 
4aa6500
 
 
 
ccce6cb
 
 
1b40f26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4aa6500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b40f26
 
4aa6500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b40f26
 
4aa6500
 
 
 
 
 
 
1b40f26
 
 
4aa6500
 
 
1b40f26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4aa6500
 
 
1b40f26
 
 
 
 
 
 
 
 
 
 
 
4aa6500
 
 
1b40f26
 
 
 
 
 
 
 
4aa6500
 
 
 
1b40f26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4aa6500
 
 
 
 
 
 
1b40f26
 
 
 
 
 
 
 
 
 
 
4aa6500
 
 
 
 
 
 
 
1b40f26
 
4aa6500
 
 
 
1b40f26
4aa6500
 
 
 
 
 
1b40f26
 
 
4aa6500
 
 
 
 
 
 
 
 
1b40f26
4aa6500
 
 
 
1b40f26
 
 
 
 
 
 
 
 
 
 
 
4aa6500
 
 
 
 
 
 
 
 
 
 
 
 
1b40f26
 
 
 
4aa6500
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
---
license: apache-2.0
language:
- en
- ne
library_name: barga
pipeline_tag: zero-shot-classification
base_model: SupersonicLabs/Julia-1
tags:
- nepali
- decision-model
- multiple-choice
- system-one
- turn-taking
- modernbert
- mmbert
model-index:
- name: barga
  results:
  - task:
      type: multiple-choice
      name: Typed decisions
    dataset:
      name: typed-decisions (test split)
      type: LocalLLaMA/typed-decisions
      split: test
    metrics:
    - type: accuracy
      value: 76.3
      name: Accuracy (released checkpoint)
  - task:
      type: natural-language-inference
      name: Natural language inference
    dataset:
      name: MultiNLI (300-question sample)
      type: nyu-mll/multi_nli
    metrics:
    - type: accuracy
      value: 68.3
      name: Accuracy (released checkpoint)
  - task:
      type: natural-language-inference
      name: Natural language inference (Nepali)
    dataset:
      name: MNLI-Nepali (300-question sample)
      type: IRIIS-RESEARCH/MNLI-Nepali
    metrics:
    - type: accuracy
      value: 65.0
      name: Accuracy (released checkpoint)
  - task:
      type: question-answering
      name: Answerability / extractive QA as choice
    dataset:
      name: SQuAD 2.0 (300-question sample)
      type: rajpurkar/squad_v2
    metrics:
    - type: accuracy
      value: 62.3
      name: Accuracy (released checkpoint)
  - task:
      type: text-classification
      name: Intent classification
    dataset:
      name: CLINC150 (300-question sample)
      type: clinc/clinc_oos
    metrics:
    - type: accuracy
      value: 93.3
      name: Accuracy (released checkpoint)
---

# barga

**barga** (Nepali बर्ग, "category") is a small **system-one decision model** for English and Nepali. It reads a
**state** (a conversation, a call transcript, a document, a game position) and one or more **questions**, each with
its own candidate **options**, and returns a probability for every option in a single forward pass. It does not
generate text. It decides.

- **Size:** 140.6M parameters (ModernBERT / mmBERT-small encoder + a small option scorer), fp32 safetensors, 562 MB.
- **Languages:** English, Nepali (Devanagari and romanized), and code-mixed Nepali–English.
- **Architecture:** split-layer. The lower 11 of 22 encoder layers read the state once; the top 11 layers read each
  question jointly with the state. Every question about the same state shares one state encoding.
- **Speed:** 0.90 s per turn (median; 1.45 s p95; measured with about one core of background load) on an Apple M3 Pro
  CPU with 4 threads, for simulator call turns of about 6 questions over states of up to 1,024 tokens; a short input with one question takes 0.05–0.2 s. Peak
  process memory 2.6 GB.
- **Licence:** Apache-2.0. Built on [Julia-1](https://huggingface.co/SupersonicLabs/Julia-1) (Apache-2.0), which is
  built on [mmBERT-small](https://huggingface.co/jhu-clsp/mmBERT-small) (MIT).
- **Made by** [Ampixa](https://ampixa.com).
- **Try it:** play against barga in the [Kirtipur courtyard](https://ampixa.com/barga/): Bagh-Chal, chess, Ludo, Marriage,
  Dhumbal and Call Break, with every option it weighed and the exact request and reply. Launch video:
  [English](https://ampixa.com/barga/assets/video/barga-launch-en.mp4) ·
  [नेपाली](https://ampixa.com/barga/assets/video/barga-launch-ne.mp4). (The site still runs the previous checkpoint,
  `g14`.)

## Versions

| revision | checkpoint | what it is for |
|---|---|---|
| `main` (this card, 2026-10-11) | **G21**, seed 17 | General decisions plus streaming turn-end timing. Best overall accuracy. **Does not pause its own speech when a caller interrupts** (see Turn-taking). |
| [`turn-taking`](https://huggingface.co/ampixa/barga/tree/turn-taking) | G22b, seed 17 | Voice-agent floor control: pauses for a real interruption, keeps playing through "हजुर". About 1–2 points lower on general decisions. |
| [`g14`](https://huggingface.co/ampixa/barga/tree/g14) | G14, seed 17 | The first release (2026-10-05), unchanged. |

```python
barga.load("ampixa/barga")                          # main (G21)
barga.load("ampixa/barga", revision="turn-taking")  # G22b
barga.load("ampixa/barga", revision="g14")          # the 2026-10-05 release
```

**What changed from `g14`:** the training mix adds 15% turn-taking states, built from the same partner calls. Some
states are anchored to the call's timeline; others are streaming states polled every 0.2 s while the call runs. On
protected test calls the new checkpoint:
- cuts in during a caller's mid-turn pause half as often (0.12 vs 0.25);
- rarely misses a turn end (0.02 vs 0.24);
- scores 90.1 on timeline floor decisions (`g14` 75.7);
- is +0.7 on the mean of 17 general test sets.

Some sets are lower: chess (−6.8), AG News (−6, on 100 questions) and the other games (−0.1 to −1.9).

## Quickstart

```bash
pip install barga
```

```python
import barga

model = barga.load("ampixa/barga")          # device="cuda" for a GPU

state = ("Caller: Hello, I want to book a check-up for my dog tomorrow morning.\n"
         "Agent: Sure. We have 9:30 or 11:00 tomorrow.\n"
         "Caller: 9:30 is fine.")

for d in model.decide(state, [
    {"id": "intent", "text": "What does the caller want?",
     "options": [{"id": "book", "description": "Book an appointment"},
                 {"id": "cancel", "description": "Cancel an appointment"},
                 {"id": "info", "description": "Only ask for information"}]},
    {"id": "intent_ne", "text": "कल गर्नेले के चाहनुहुन्छ?",
     "options": [{"id": "book", "description": "अपोइन्टमेन्ट बुक गर्न"},
                 {"id": "cancel", "description": "अपोइन्टमेन्ट रद्द गर्न"},
                 {"id": "info", "description": "जानकारी मात्र सोध्न"}]},
]):
    print(d.question_id, d.choice, d.probs)
# intent    book  {'book': 0.984, 'cancel': 0.015, 'info': 0.001}
# intent_ne book  {'book': 0.866, 'cancel': 0.134, 'info': 0.001}
```

Questions can be `"choice"` (default), `"boolean"` (two options valued `True`/`False`) or `"ordinal"` (numeric
option values; the result also carries an `expected_value`). Each takes 2–20 options and an optional `rubric`. The
model reads only the state, the question, the rubric and each option's description, never the ids. The input
format is documented in the [barga package](https://pypi.org/project/barga/).

## How to read the output

`choice` is the most probable option; `probs` gives every option's probability (they sum to 1 within a question).
Probabilities compare options within one question. A flat distribution (say a top probability below 0.6) means the
model is unsure, which is often correct when the state does not answer the question. Set your own threshold on
your own data before acting on a decision automatically.

## Intended uses

- Turn-by-turn decisions in voice and chat agents: intent, slot values, whether the caller confirmed, what to do next.
- Turn-end timing in a voice agent: whether the caller has finished and the agent should answer now (see
  Turn-taking; for pausing on interruptions use the `turn-taking` revision).
- Classification, routing and yes/no checks over English or Nepali text, with the label set given at run time.
- Reading-comprehension style checks (does the text support this statement? is this question answerable?).
- Rule and strategy questions about Nepali-played card and board games (see the limits below).

## Evaluation

All numbers are accuracy (%) on held-out test sets that were never used for training or checkpoint selection. The
released checkpoint is **seed 17**. **Two-seed** is the mean of seed 17 and an identically trained seed-18 replicate,
shown to indicate seed variance. **`g14`** is the previous release's checkpoint on the same questions. Sampled sets
use a fixed seed (17).

### Calls and agent decisions

| test set | questions | released | two-seed | `g14` |
|---|---:|---:|---:|---:|
| Held-out real customer-service calls, set A (English questions) | 2,589 | 76.7 | 76.7 | 77.0 |
| same calls, Nepali questions | 2,589 | 76.1 | 76.2 | 77.1 |
| set A scored against what the agent in the recording did (English / Nepali questions)¹ | 2,380 | 77.4 / 77.7 | 78.1 / 78.4 | 76.7 / 77.7 |
| set A in the output style of a speech recognizer (English / Nepali questions) | 2,589 | 71.1 / 71.8 | 71.5 / 71.7 | 72.1 / 71.6 |
| Held-out real calls, set B (English) | 135 | 67.4 | 66.3 | 64.4 |
| set B in speech-recognizer style | 135 | 62.2 | 61.9 | 62.2 |
| Receptionist simulator, template phrasing (300 calls) | 1,779 | 94.4 | 94.6 | 94.4 |
| Receptionist simulator, LLM phrasing (300 calls) | 1,678 | 94.9 | 95.5 | 96.1 |
| typed-decisions test split | 2,000 | 76.3 | 76.8 | 76.3 |
| Timeline floor decisions on protected calls (94 calls) | 4,532 | 90.1 | 90.4 | 75.7 |

¹ About two thirds of set A's questions ask what the agent should do with the floor at that moment, and an audio
teacher labelled them. That teacher agrees with what the human agent actually did only about 70% of the time at turn
ends. This row scores those questions against the recorded behaviour instead, where it is defined.

### Reading comprehension and classification (300-question samples unless noted)

| test set | released | two-seed | `g14` |
|---|---:|---:|---:|
| MultiNLI | 68.3 | 69.3 | 66.0 |
| MNLI-Nepali | 65.0 | 66.0 | 64.3 |
| SQuAD 2.0 | 62.3 | 61.5 | 61.0 |
| BoolQ | 61.7 | 63.5 | 60.7 |
| ShARC | 67.3 | 64.8 | 62.7 |
| PAWS | 57.0 | 56.0 | 56.7 |
| CLINC150 intents | 93.3 | 92.2 | 90.7 |
| AG News (100) | 89.0 | 90.0 | 95.0 |
| Emotion (100) | 82.0 | 80.5 | 81.0 |
| Hard cases (1,500; the hard slice of an Ampixa support-ticket decision set) | 36.5 | 31.7 | 26.3 |

### Games (rule and strategy questions; positions from engines and self-play)

| game | questions | released | two-seed | `g14` |
|---|---:|---:|---:|---:|
| Dhumbal | 1,440 | 61.9 | 62.4 | 62.0 |
| Ludo | 1,592 | 61.0 | 61.7 | 62.9 |
| Marriage | 1,494 | 46.3 | 46.3 | 47.7 |
| Call Break | 1,828 | 47.2 | 47.3 | 47.8 |
| Chess | 1,674 | 36.0 | 38.7 | 42.8 |
| Bagh-Chal | 3,726 | 23.1 | 23.2 | 24.0 |

Game questions have 2–20 options, so chance differs by set: about 14% on Bagh-Chal, and up to 50% on yes/no
families.

### Turn-taking (streaming floor control, protected test calls)

The stream test replays 94 protected real calls, never used for training, and asks the floor question every 0.2 s:
wait, answer now, play a short acknowledgement, or pause the agent's own speech. The scores are raw argmax choices,
two-seed means. Lower is better except for stopping.

| error | main (G21) | `turn-taking` (G22b) | `g14` |
|---|---:|---:|---:|
| Cut-in: answers in a mid-turn pause after which the caller goes on | 0.12 | 0.16 | 0.25 |
| Misses a turn end (has not answered by the time the recorded agent spoke) | 0.02 | 0.02 | 0.24 |
| Answers while the caller is speaking (per tick) | 0.00 | 0.00 | 0.22 |
| Pauses or cuts into its own ongoing speech (per tick) | 0.00 | 0.00 | 0.81 |
| Stops or answers when the caller only acknowledges during its speech (share of acknowledgements) | 0.00 | 0.00 | 0.54 |
| **Stops for a real interruption within 1.0 s** (482 caller runs of ≥ 3 words and ≥ 1.0 s; higher is better) | **0.00** | **0.82** | 0.72 |
| Stops for a short run (≤ 2 words) | 0.00 | 0.04 | 0.51 |

The stop rows come from a separate probe on the same 94 calls. It plays the agent's reply as if it were still
playing when the caller starts, and asks at 0.2–2.0 s into the caller's speech.

- **Threshold:** answering only when P(COMMIT_RESPONSE) ≥ 0.65 in caller silence (tuned on 30 separate dev calls)
  lowers main's cut-in to 0.10 and raises its misses to 0.03.
- **No SOFT_ACK:** no checkpoint here chooses the short-acknowledgement option (0 of 379 opportunities on the
  stream test).

**Main never pauses its own speech for a caller.** Its streaming training data had no stop examples, so it learned
"the caller is talking over playback, keep playing". If your agent needs barge-in handling, use the `turn-taking`
revision, or handle barge-in outside the model (for example, a voice-activity rule). The input format for these
states is documented on the `turn-taking` card.

### Against Julia-1 on identical questions

Same questions and the same scoring for both models; a question a model cannot encode counts as wrong.

| | Julia-1 | barga (released) |
|---|---:|---:|
| typed-decisions test | 72.5 | **76.3** |
| CLINC150 | 55.7 | **93.3** |
| MultiNLI / MNLI-Nepali | 30.7 / 31.0 | **68.3 / 65.0** |
| ShARC / BoolQ / SQuAD 2.0 | 31.0 / 45.7 / 51.0 | **67.3 / 61.7 / 62.3** |
| PAWS | 54.3 | **57.0** |
| AG News (100) | **94.0** | 89.0 |
| Emotion (100) | **86.0** | 82.0 |
| Hard cases | 33.7 | **36.5** |
| Julia-1's own evaluation families (12 Open-Jev families, macro) | **87.8** | 56.3 |

On the real-call and simulator sets barga scores 76–77 and 94–95, against Julia-1's 22 and 23. Read that gap with
care:
- **Encoding:** Julia-1 cannot encode some of those questions; on the questions both models answer it scores 17.7–24.8.
- **Training data:** barga was trained on the training splits of those same sources, and Julia-1 was not.

Julia-1 leads on its own evaluation families: game-playing agents (tile platformer, ViZDoom, Snake), workflow and
customer controls, and reasoning controls. barga was not trained on those families.

## Limitations

- **No barge-in.** This checkpoint does not pause its own speech when a caller interrupts (above). Use the
  `turn-taking` revision or an external rule.
- **Near chance on some game families.** Chess move legality (yes/no), tic-tac-toe, Bagh-Chal, Marriage discards,
  Ludo safe squares and Call Break card play score within a few points of chance. Do not use barga as a game engine;
  use a rules engine for legality and barga, at most, to rank legal moves.
- **Out of domain.** Julia-1's agent-control families (above) and the hard support-ticket cases are weak spots.
- **Real-call accuracy is about 77%.** Speech-recognizer errors cost about 5 points (71–72%). Keep a human or a
  confirmation step in the loop for anything with consequences.
- **Calibration.** Probabilities are informative but not calibrated to your data; threshold them on your own data.
- **Context.** 1,024 state tokens (when a state is longer, barga keeps its beginning and its most recent end) and
  768 tokens per question with its options. Longer questions are rejected, not cut.
- **Languages.** Tested on English, Nepali (Devanagari and romanized) and code-mixed text. Other languages inherit
  some ability from mmBERT but were not evaluated.
- **Seed variance.** Two identically trained seeds differ by up to 5 points on small sets (100–300 questions), by 5.4
  on chess and by 9.6 on the hard cases (36.5 vs 26.9). Differences smaller than that between models are not
  meaningful.

## Out-of-scope uses

Generating text; open-ended question answering without candidate options; medical, legal, financial or safety-critical
decisions without human review; profiling or surveillance of people; any use that violates the licences of the
training data sources listed below.

## Training data

barga was fine-tuned from the encoder of Julia-1 on a weighted mix of 38 training sets:

| source | share | licence / terms |
|---|---:|---|
| Nepali/English customer-service calls from partners, used under agreement; not released | 13.1% | private; used under agreement |
| Turn-taking states built from the same partner calls: timeline-anchored floor decisions and 0.2 s streaming states (labels from recorded timing; short caller runs audio-checked in two agreeing passes); not released | 15.0% | private; used under agreement |
| Receptionist simulator: synthetic calls; template phrasing and LLM-written phrasing | 11.4% | generated by Ampixa |
| typed-decisions (train split) | 7.2% | Apache-2.0 |
| Paraphrases of typed-decisions train cases (same targets) | 1.0% | as typed-decisions |
| MultiNLI, SQuAD 2.0, ShARC, CLINC150, BoolQ, PAWS (English) | 15.9% | CC BY 3.0 / CC BY-SA 3.0 / MIT / other (MultiNLI), CC BY-SA 4.0, CC BY-SA 3.0, CC BY 3.0, CC BY-SA 3.0, "may be freely used for any purpose" |
| MultiNLI, SQuAD 2.0, ShARC, CLINC150, BoolQ machine-translated to Nepali (Sarvam-Translate) | 11.5% | as the originals |
| MNLI-Nepali (IRIIS-RESEARCH) | 3.9% | see the dataset |
| Bagh-Chal, Marriage, Dhumbal, Ludo, Call Break positions with rule-checked labels | 10.2% | generated by Ampixa |
| Chess positions from the Lichess open database with engine labels | 2.5% | CC0 (Lichess database) |
| Ampixa support-ticket decision sets (routing, negation, urgency, emotion, abstention) | 3.9% | Ampixa |
| Typed-decision replays with teacher soft labels | 1.9% | generated by Ampixa |
| AG News, Emotion (dair-ai), Banking77, MASSIVE (scenario) | 2.6% | research / non-commercial (AG News), educational and research purposes only (Emotion), CC BY 4.0, CC BY 4.0 |

Protected test calls and the typed-decisions test split were never used for training. No call audio or transcripts
are released.

## Files

- `backbone/`: ModernBERT encoder (config.json, model.safetensors)
- `heads.pt`: option scorer weights
- `tokenizer/`: tokenizer (the mmBERT/Gemma-style 256k vocabulary)
- `bundle.json`: architecture, serialization config and the sha256 of every file above; `barga.load` verifies
  them before loading. Its backbone reference was rewritten from a local path to its public source; every hashed
  file is byte-identical to the evaluated checkpoint.

`barga` 0.1.1 from PyPI reproduces the reference evaluation exactly on this checkpoint: same choices, probabilities
within 1e-6. That covers 50 records each from the simulator, typed-decisions, chess, streaming, stop-probe and timeline
test sets.

## Citation

```bibtex
@misc{barga2026,
  title  = {barga: a system-one decision model for English and Nepali},
  author = {Ampixa},
  year   = {2026},
  url    = {https://huggingface.co/ampixa/barga}
}
```

barga builds on Julia-1 (Supersonic Labs) and mmBERT (Johns Hopkins University CLSP).