elcooooo commited on
Commit
fb42270
·
verified ·
1 Parent(s): 9d834ee

Model card, prompts and integration guide

Browse files
Files changed (3) hide show
  1. MOBILE-INTEGRATION.md +328 -0
  2. README.md +176 -0
  3. prompts.json +296 -0
MOBILE-INTEGRATION.md ADDED
@@ -0,0 +1,328 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ClickBook on-device model — integration guide
2
+
3
+ For the iOS and Android teams. Every number here is measured on this repo's
4
+ benchmark or its ship gate; where something is untested it says so explicitly.
5
+
6
+ **Start here:** ship `models/wide_iq4xs_e2.gguf` and `out/prompts.json`. Everything
7
+ else in this document explains those two files.
8
+
9
+ ---
10
+
11
+ ## 1. The two shipping assets
12
+
13
+ ### `models/wide_iq4xs_e2.gguf` — 1.844 GB
14
+
15
+ | | |
16
+ |---|---|
17
+ | base | Gemma 4 E2B instruction-tuned |
18
+ | quantisation | IQ4_XS body, Q2_K token embeddings, imatrix-guided |
19
+ | vocabulary | 231,955 tokens (of 262,144; the rest are pruned scripts) |
20
+ | runtime | llama.cpp b10326 or later |
21
+ | benchmark | **79.2** on the 90-item set, 15 failures, no empty or truncated panels |
22
+
23
+ That 79.2 is measured on this exact file and is level with the 1.666 GB
24
+ eleven-language build (79.0 at the same seed, 78.4 averaged over two). **Restoring
25
+ seven scripts costs nothing on the languages already served** — a earlier
26
+ intermediate build read 1.4 marks lower, which a second seed showed to be noise.
27
+
28
+ ### `out/prompts.json` — 32 KB
29
+
30
+ Every prompt, per language, with `{{word}}`, `{{sentence}}` and `{{passage}}`
31
+ placeholders, plus the required request settings and per-language token caps.
32
+
33
+ **Substitute into these strings; do not retype or paraphrase them.** The wording is
34
+ the result of seven measured revisions and small changes have moved benchmark
35
+ scores by double digits. Regenerate the file after any prompt change:
36
+
37
+ ```bash
38
+ BENCH_PROMPTS=v7 npx tsx scripts/export-prompts.ts > out/prompts.json
39
+ ```
40
+
41
+ ### Other builds, same recipe, if the size budget changes
42
+
43
+ | file | size | scripts |
44
+ |---|---:|---|
45
+ | `iq4xs_e2.gguf` | 1.666 GB | Latin, Cyrillic, Arabic |
46
+ | `cjkkrhi_iq4xs_e2.gguf` | 1.815 GB | + CJK, Hangul, Devanagari |
47
+ | **`wide_iq4xs_e2.gguf`** | **1.844 GB** | **+ Tamil, Thai, Greek, Hebrew** |
48
+ | `allscripts_iq4xs_e2.gguf` | 1.950 GB | every script — over a 1.9 GB cap |
49
+
50
+ Vocabulary costs **3.49 KB per token**: Gemma 4 keeps per-layer embeddings, so a
51
+ token carries 10,496 parameters. Script coverage is therefore expensive, and the
52
+ shipped subset is deliberate. `scripts/build-script-variant.sh` builds any other
53
+ combination.
54
+
55
+ ---
56
+
57
+ ## 2. Language support
58
+
59
+ `out/prompts.json` carries `book`, `reader` and `evidence` for every language.
60
+ Honour those flags — they are ship gates, not preferences.
61
+
62
+ | language | book | reader | evidence |
63
+ |---|:--:|:--:|---|
64
+ | English, German, Arabic | ✅ | ✅ | benchmark, 90 items × 2 seeds |
65
+ | French, Portuguese, Spanish, Italian, Russian, Dutch, Polish, Turkish | ✅ | — | benchmark, 183 items each on an older build: 69–86 |
66
+ | Chinese, Japanese, Korean, Hindi, Thai, Hebrew | ✅ | ✅ | ship gate: 4/4 tabs pass |
67
+ | **Tamil** | ✅ | ❌ | ship gate: CONTEXT fails |
68
+ | **Greek** | ❌ | ❌ | ship gate: output corrupted |
69
+
70
+ Reader-language support for French through Turkish needs TRANSLATION and CONTEXT
71
+ templates, which do not exist yet. Those languages can be read *from*, not
72
+ answered *in*.
73
+
74
+ ### Greek — do not enable
75
+
76
+ Output mixes scripts and invents words:
77
+
78
+ ```
79
+ "η σκέψη του μυаλу" Cyrillic а and у inside a Greek word
80
+ "που άμεσως führte" a German verb
81
+ "για να β Olympic" nonsense
82
+ ```
83
+
84
+ Only 1,511 Greek tokens were retained, and that is not enough. Leaving them in the
85
+ file is harmless; just never offer Greek as a book or reader language.
86
+
87
+ ### Tamil — book language only
88
+
89
+ MEANING, EXAMPLE and TRANSLATION pass. CONTEXT does not: translating a passage
90
+ *into* Tamil produced `அவர்店の앞 அதிக நேரம்…` — Han, Kana and Hangul spliced into
91
+ Tamil. A Tamil speaker can read a Tamil book with English, German or Arabic
92
+ answers; do not offer Tamil as the answer language.
93
+
94
+ ### The six smoke-tested languages
95
+
96
+ Each was probed with taps where the obvious reading is wrong. All six read them
97
+ correctly:
98
+
99
+ | language | tap | got |
100
+ |---|---|---|
101
+ | Chinese | 不是个东西 | a scornful insult, not "a thing" |
102
+ | Japanese | 手が空いた | became free, not "hand is empty" |
103
+ | Korean | 발이 넓다 | well connected, not "wide feet" |
104
+ | Hindi | हाथ धोना | to lose something, not "wash hands" |
105
+ | Thai | ใจดี | kind-hearted |
106
+ | Hebrew | יד חמה | a knack for it, not "warm hand" |
107
+
108
+ **Two taps per language is not a benchmark.** English, German and Arabic have 90
109
+ items across two seeds; these have a handful of sentences. Treat them as beta and
110
+ expect to find failures the gate does not cover.
111
+
112
+ ---
113
+
114
+ ## 3. Request configuration
115
+
116
+ ```jsonc
117
+ {
118
+ "n_ctx": 2048, // 555 suffices for one tap and is faster
119
+ "n_threads": 6,
120
+ "n_gpu_layers": 99, // 0 on CPU-only devices
121
+ "temperature": 0.1,
122
+ "top_k": 40,
123
+ "top_p": 0.9,
124
+ "repeat_penalty": 1.05,
125
+ "seed": 42,
126
+ "chat_template_kwargs": { "enable_thinking": false } // REQUIRED
127
+ }
128
+ ```
129
+
130
+ ### `enable_thinking: false` is not optional
131
+
132
+ Without it the model reasons before answering, spends the whole budget in
133
+ `reasoning_content`, and returns **empty `content` with `finish_reason: "length"`**.
134
+ In the UI that is indistinguishable from an unsupported language or a broken
135
+ model. It has cost this project three separate debugging sessions, including one
136
+ where nine languages appeared to fail and none of them had.
137
+
138
+ If you ever enable thinking deliberately, raise every cap below to 1000 first.
139
+
140
+ ### Token caps
141
+
142
+ Defaults, and the per-language values in `prompts.json` under `caps.perLanguage`:
143
+
144
+ | tab | default | ko / th | hi | ta | he |
145
+ |---|---:|---:|---:|---:|---:|
146
+ | MEANING | 111 | 136 | 144 | 160 | 192 |
147
+ | EXAMPLE | 222 | 272 | 288 | 320 | 384 |
148
+ | TRANSLATION | 111 | 136 | 144 | 160 | 192 |
149
+ | CONTEXT | 444 | 544 | 576 | 640 | 768 |
150
+
151
+ Chinese and Japanese use the defaults — measured, they cost the same tokens as
152
+ English for equivalent content (`scripts/token-cost.ts`). Hebrew is the most
153
+ expensive script at 1.67×.
154
+
155
+ Verified headroom at these caps: the longest MEANING answer across all seven new
156
+ languages was 25 of 112 tokens, and no tab in any language came within 10% of its
157
+ cap. Nothing truncates.
158
+
159
+ ### Performance
160
+
161
+ 12.1 s per popup on the device configuration (CPU, ctx 555, all four tabs);
162
+ roughly 1.7 s per tab with GPU offload.
163
+
164
+ ---
165
+
166
+ ## 4. How a tap becomes four answers
167
+
168
+ | tab | prompt & answer language | asks for |
169
+ |---|---|---|
170
+ | MEANING | **book** | define the tapped word in the sense this sentence gives it |
171
+ | EXAMPLE | **book** | three new short sentences using that same sense |
172
+ | TRANSLATION | **reader** | what the word means, answered in the reader's language |
173
+ | CONTEXT | **reader** | translate the whole passage |
174
+
175
+ Two rules that carry measured weight:
176
+
177
+ - **`{{sentence}}` must come from the tap's character offsets**, not from splitting
178
+ the passage on punctuation. When the same word appears twice in a passage, the
179
+ wrong sentence produces a confidently wrong answer.
180
+ - **`{{passage}}`** is the whole block, or roughly 520 characters centred on the
181
+ tap when the block is longer.
182
+
183
+ The idiom clause inside each prompt — "if the word is part of an idiom, explain the
184
+ whole phrase instead" — is what makes idiom taps work. Do not trim it for brevity.
185
+
186
+ ---
187
+
188
+ ## 5. Verifying a build before release
189
+
190
+ ```bash
191
+ npx tsx scripts/newlang-verify.ts models/wide_iq4xs_e2.gguf
192
+ ```
193
+
194
+ Exits non-zero if any language fails. It checks, per tab: non-empty output, no
195
+ foreign-script contamination, inside the token cap with headroom, and that EXAMPLE
196
+ returns three unnumbered lines. Current state: **27 of 28 checks pass**, the
197
+ exception being Tamil CONTEXT, which is why Tamil is book-only.
198
+
199
+ To read the answers rather than assert on them:
200
+
201
+ ```bash
202
+ npx tsx scripts/newlang-probe.ts models/wide_iq4xs_e2.gguf zh,ja,ko
203
+ ```
204
+
205
+ For the eleven benchmarked languages:
206
+
207
+ ```bash
208
+ SENSE10_MODEL=models/wide_iq4xs_e2.gguf bash scripts/full90.sh myarm
209
+ ```
210
+
211
+ ---
212
+
213
+ ## 6. What is not in this build
214
+
215
+ There is **no on-device dictionary**. A purpose-built sense resource measured
216
+ +12.7 marks (79.0 → 91.7 on the 90-item benchmark) but needs a generation run that
217
+ has not been funded; the version buildable from free public lexicons measured
218
+ **+0.7** and is not worth its 82.5 MB. Format and integration points are in
219
+ `docs/sense10.md`. `wide_iq4xs_e2.gguf` leaves 56 MB under a 1.9 GB cap if one
220
+ ships later.
221
+
222
+ Known open issues, both reproducible with the ship gate:
223
+
224
+ - Tamil CONTEXT script contamination (§2).
225
+ - EXAMPLE occasionally numbers its sentences despite the prompt forbidding it.
226
+ Strip a leading `1.` / `-` / `•` client-side.
227
+
228
+ ---
229
+
230
+ ## 7. Packaging and delivery
231
+
232
+ The model is delivered by the stores themselves — Play Asset Delivery on Android,
233
+ Background Assets on iOS. Both host and serve it free, both resume interrupted
234
+ downloads, and both tie the asset to an app version, which matters here because
235
+ `prompts.json` describes gates and caps for **this** model file. A plain CDN URL
236
+ lets those drift apart; the store mechanisms do not.
237
+
238
+ ### Integrity
239
+
240
+ ```
241
+ file ClickBook-Gemma-4-E2B-multi-IQ4_XS.gguf
242
+ bytes 1,844,170,944
243
+ sha256 0ad915db36b04976d4a217e264d5a46c2d08fb77632875795d7ac080b8d5f6fe
244
+ ```
245
+
246
+ Verify after assembly, before first load. A truncated or mis-ordered file will
247
+ often still load in llama.cpp and produce fluent nonsense — the failure does not
248
+ announce itself.
249
+
250
+ ### Android — Play Asset Delivery, two packs
251
+
252
+ The per-pack limit is **1.5 GB** and this file is 1.844 GB, so it must be split.
253
+ Note the limit applies to *compressed download size*, which does not help: a GGUF
254
+ is quantised weights and compresses by only 3% (ratio 0.970, measured), so
255
+ compressed size is effectively file size.
256
+
257
+ **Every variant of this model exceeds 1.5 GB**, including the 1.666 GB
258
+ eleven-language build, so splitting is unavoidable and model size is therefore not
259
+ a packaging consideration when choosing which build to ship.
260
+
261
+ Use **fast-follow** delivery: the app opens immediately and the model arrives in
262
+ the background behind a progress UI you control. Two packs of 922.1 MB, split at
263
+ the exact byte midpoint and concatenated in order:
264
+
265
+ ```bash
266
+ split -b 922085472 ClickBook-Gemma-4-E2B-multi-IQ4_XS.gguf model.part
267
+ # model.partaa bytes 0..922,085,471
268
+ # sha256 d98cccc0847c9f2200d2eeba1f0d928d70f945528d08c52abfcd1231c7a003b1
269
+ # model.partab bytes 922,085,472..1,844,170,943
270
+ # sha256 d09e50a639d5f3d28eae17d9708217f9fedfb240063ec3dade5bcf6b46b43393
271
+ ```
272
+
273
+ Two packs sit far inside the 30 GB cumulative fast-follow allowance, so there is
274
+ no second limit to design around.
275
+
276
+ ### iOS — Background Assets, one pack
277
+
278
+ **On-Demand Resources is deprecated as of iOS 27.** Build on **Background Assets**
279
+ with Apple-hosted asset packs, which allow 200 GB across up to 200 packs.
280
+
281
+ The per-pack limit on **iOS 18+ is 8 GB**, so the model ships as a **single
282
+ 1.844 GB pack** with no splitting and no reassembly. On iOS 17 and earlier the
283
+ limit is 512 MB per tag, which would mean four parts — if the minimum deployment
284
+ target is below iOS 18, raise it or accept the extra client complexity.
285
+
286
+ ### Consequence: the two platforms need different packaging
287
+
288
+ Android reassembles two parts; iOS receives one file. **Do not design one chunking
289
+ scheme for both.** Keep the split and concatenation logic on the Android side
290
+ only, and let iOS treat the model as an ordinary single asset.
291
+
292
+ | | limit per pack | parts for 1.844 GB |
293
+ |---|---:|---:|
294
+ | Android, Play Asset Delivery | 1.5 GB | **2** |
295
+ | iOS 18+, Background Assets | 8 GB | **1** |
296
+ | iOS ≤ 17, On-Demand Resources | 512 MB | 4 (and deprecated) |
297
+
298
+ ---
299
+
300
+ ## 8. Release checklist
301
+
302
+ Everything below has been run against the assets in this repo. Re-run after any
303
+ change to the model, the prompts or the caps.
304
+
305
+ | # | check | command | current |
306
+ |---|---|---|---|
307
+ | 1 | model is the expected size | `ls -l models/wide_iq4xs_e2.gguf` | 1.844 GB ✅ |
308
+ | 2 | no regression on the benchmarked languages | `SENSE10_MODEL=models/wide_iq4xs_e2.gguf bash scripts/full90.sh rel` | 79.2 vs 79.0 ✅ |
309
+ | 3 | new languages pass the ship gate | `npx tsx scripts/newlang-verify.ts models/wide_iq4xs_e2.gguf` | 27/28 ✅ (Tamil CONTEXT known) |
310
+ | 4 | prompts export is current and at v7 | `BENCH_PROMPTS=v7 npx tsx scripts/export-prompts.ts > out/prompts.json` | 32 KB, v7 ✅ |
311
+ | 5 | client sends `enable_thinking: false` | inspect one request | **verify per platform** |
312
+ | 6 | client honours `book` / `reader` flags | Greek hidden, Tamil not offered as answer language | **verify per platform** |
313
+ | 7 | client derives `{{sentence}}` from tap offsets | not from punctuation splitting | **verify per platform** |
314
+ | 8 | assembled model matches the checksum | `sha256sum` after concatenation | **verify per platform** |
315
+
316
+ Rows 5–8 cannot be checked from this repo and are the ones most likely to be got
317
+ wrong. Two of them fail silently: row 5 looks like a model defect, and row 8 —
318
+ a mis-assembled model — loads without complaint and generates fluent nonsense.
319
+
320
+ ### Reproducing every number in this document
321
+
322
+ ```bash
323
+ bash scripts/full90.sh <arm> # 90-item benchmark
324
+ npx tsx scripts/newlang-verify.ts <model.gguf> # ship gate, exits non-zero
325
+ npx tsx scripts/newlang-probe.ts <model.gguf> zh,ja,ko # read the answers
326
+ npx tsx scripts/token-cost.ts <model.gguf> # token cost per script
327
+ bash scripts/build-script-variant.sh <name> <Scripts,Comma> # a different script set
328
+ ```
README.md ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: gemma
3
+ base_model: google/gemma-4-E2B-it
4
+ library_name: gguf
5
+ pipeline_tag: text-generation
6
+ tags:
7
+ - gguf
8
+ - llama.cpp
9
+ - on-device
10
+ - mobile
11
+ - vocabulary-pruned
12
+ - quantized
13
+ language:
14
+ - en
15
+ - de
16
+ - ar
17
+ - fr
18
+ - es
19
+ - it
20
+ - pt
21
+ - nl
22
+ - pl
23
+ - tr
24
+ - ru
25
+ - zh
26
+ - ja
27
+ - ko
28
+ - hi
29
+ - ta
30
+ - th
31
+ - he
32
+ ---
33
+
34
+ # ClickBook Gemma 4 E2B — multilingual, vocabulary-pruned, IQ4_XS
35
+
36
+ An on-device reading assistant model. A reader taps a word in a book; the model
37
+ explains it in the sense that sentence gives it, writes fresh examples, translates
38
+ the word, and translates the passage.
39
+
40
+ **1.844 GB**, built to fit a 1.85 GB application budget on iOS and Android.
41
+
42
+ ## What was changed from the base model
43
+
44
+ 1. **Vocabulary pruned from 262,144 to 231,955 tokens.** Scripts not served by the
45
+ product were removed: Bengali, Gurmukhi, Gujarati, Oriya, Telugu, Kannada,
46
+ Malayalam, Sinhala, Lao, Tibetan, Myanmar, Georgian, Ethiopic, Cherokee and
47
+ others. Latin, Cyrillic, Arabic, CJK, Hangul, Devanagari, Tamil, Thai, Greek
48
+ and Hebrew are retained.
49
+
50
+ This matters more than it would in most architectures: Gemma 4 carries
51
+ per-layer embeddings, so a vocabulary token costs **10,496 parameters** — about
52
+ 3.49 KB in this quantisation. Vocabulary is roughly a third of the file.
53
+
54
+ 2. **Quantised to IQ4_XS** with **Q2_K token embeddings**, guided by an importance
55
+ matrix computed over 1,538 calibration chunks.
56
+
57
+ Embedding tensors are deliberately left out of imatrix guidance because they
58
+ cannot benefit from it — embedding lookups are gather operations, not matrix
59
+ multiplications, so `llama-imatrix` never observes them.
60
+
61
+ ## Files
62
+
63
+ | file | purpose |
64
+ |---|---|
65
+ | `ClickBook-Gemma-4-E2B-multi-IQ4_XS.gguf` | the model |
66
+ | `prompts.json` | every prompt, per language, with placeholders and token caps |
67
+ | `MOBILE-INTEGRATION.md` | integration guide for client developers |
68
+
69
+ ## Usage
70
+
71
+ ```bash
72
+ llama-server -m ClickBook-Gemma-4-E2B-multi-IQ4_XS.gguf -c 2048 -ngl 99 --jinja
73
+ ```
74
+
75
+ ```jsonc
76
+ {
77
+ "messages": [{ "role": "user", "content": "<prompt from prompts.json>" }],
78
+ "temperature": 0.1, "top_k": 40, "top_p": 0.9, "repeat_penalty": 1.05,
79
+ "max_tokens": 111,
80
+ "chat_template_kwargs": { "enable_thinking": false }
81
+ }
82
+ ```
83
+
84
+ ### `enable_thinking: false` is required
85
+
86
+ Without it the model reasons before answering, spends the entire token budget in
87
+ `reasoning_content`, and returns **empty `content` with `finish_reason: "length"`**.
88
+ That is indistinguishable from a broken model or an unsupported language. If you
89
+ want reasoning, raise every cap to 1000 first.
90
+
91
+ ## Language support
92
+
93
+ Support is uneven and the model card should be believed over the language tag list
94
+ above, which cannot express degrees.
95
+
96
+ | languages | reading | answering | evidence |
97
+ |---|:--:|:--:|---|
98
+ | English, German, Arabic | yes | yes | 90-item benchmark, two seeds |
99
+ | French, Portuguese, Spanish, Italian, Russian, Dutch, Polish, Turkish | yes | not yet | 183 items each on an earlier build, 69–86 |
100
+ | Chinese, Japanese, Korean, Hindi, Thai, Hebrew | yes | yes | smoke-tested, 4/4 tabs pass |
101
+ | Tamil | yes | **no** | passage translation into Tamil is corrupted |
102
+ | Greek | **no** | **no** | output mixes scripts and invents words |
103
+
104
+ **Greek is broken. Do not enable it.** Only 1,511 Greek tokens survived the prune,
105
+ which is not enough for coherent generation; output splices Cyrillic letters and
106
+ German words into Greek text.
107
+
108
+ **Tamil should be read but not written to.** Translating a passage into Tamil
109
+ produced Han, Kana and Hangul characters spliced into Tamil script.
110
+
111
+ The six smoke-tested languages passed every automated check and read two
112
+ deliberately hard idiomatic taps each correctly — 手が空いた, 발이 넓다, हाथ धोना,
113
+ ใจดี, יד חמה. That is a handful of sentences, not a benchmark. Treat them as beta.
114
+
115
+ ## Evaluation
116
+
117
+ Measured on a 90-item held-out set of tapped words in English, German and Arabic,
118
+ graded 0–100 by an LLM judge against a rubric containing a reference sense. Same
119
+ prompts, sampler and seed throughout; the only variable is the model file.
120
+
121
+ | build | vocabulary | size | score | failures |
122
+ |---|---:|---:|---:|---:|
123
+ | same weights at **f16** | 231,955 | 8.676 GB | 80.5 | 12 |
124
+ | **this model** | 231,955 | **1.844 GB** | **79.2** | 15 |
125
+ | narrower prune, 11 languages | 180,850 | 1.666 GB | 79.0 | 15 |
126
+ | **unpruned vocabulary**, same quantisation | 262,144 | 1.950 GB | **63.6** | 23 |
127
+
128
+ Three things this shows.
129
+
130
+ **Quantisation is nearly free.** IQ4_XS with Q2_K embeddings costs **1.3 points**
131
+ against the same weights at f16, for a **4.7× smaller file** — 8.676 GB to 1.844 GB.
132
+
133
+ **Restoring seven scripts is free.** Going from 180,850 to 231,955 tokens — adding
134
+ CJK, Hangul, Devanagari, Tamil, Thai, Greek and Hebrew — moved the score by 0.2 and
135
+ the failure count not at all.
136
+
137
+ **Pruning is not only a size optimisation, it is a quality one.** The unpruned
138
+ 262,144-token vocabulary, built with an identical recipe and imatrix, scores
139
+ **15.6 points lower** and fails 23 items instead of 15. The regression is worst on
140
+ the *easiest* third of the set (91.5 → 70.8). A plausible mechanism is that at
141
+ Q2_K precision the embedding table and output distribution spend capacity on tens
142
+ of thousands of tokens the model never needs, at the expense of the tokens it
143
+ does. The measurement is single-seed and reported as measured; the explanation is
144
+ a hypothesis.
145
+
146
+ ### Packaging note for mobile
147
+
148
+ The file compresses by only 3% (ratio 0.970) — quantised weights are close to
149
+ incompressible, so download size is effectively file size. Google Play's asset
150
+ pack limit is 1.5 GB per pack, which this model exceeds, so Android delivery needs
151
+ **two asset packs** concatenated on device. Every smaller variant above exceeds it
152
+ too, so splitting is unavoidable regardless of which build is chosen.
153
+
154
+ ## Limitations
155
+
156
+ - **Not a chat model.** It is tuned for four narrow tasks driven by the supplied
157
+ prompts. General conversation is out of scope.
158
+ - The hardest word senses remain hard: polysemous common words (*bank*, *charge*,
159
+ *Schloss*) are where the 15 failures concentrate.
160
+ - No on-device dictionary is bundled. An external sense resource was measured at
161
+ +12.7 points on the same benchmark but is not included here.
162
+ - Quality in the newly-restored scripts is established by smoke tests only.
163
+
164
+ ## License and provenance
165
+
166
+ Derived from [`google/gemma-4-E2B-it`](https://huggingface.co/google/gemma-4-E2B-it)
167
+ and distributed under the **[Gemma Terms of Use](https://ai.google.dev/gemma/terms)**.
168
+
169
+ By using this model you agree to those terms, including the
170
+ [Gemma Prohibited Use Policy](https://ai.google.dev/gemma/prohibited_use_policy).
171
+ Those restrictions pass through to anyone you distribute this model or its
172
+ derivatives to. The modifications made here — vocabulary pruning and quantisation
173
+ — are described above.
174
+
175
+ Gemma is a trademark of Google LLC. This is an independent derivative and is not
176
+ endorsed by or affiliated with Google.
prompts.json ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "promptVersion": "v7",
3
+ "generatedFrom": "adapters/clickbook-prompts.ts + scripts/newlang-prompts.ts",
4
+ "model": {
5
+ "file": "wide_iq4xs_e2.gguf",
6
+ "bytes": 1844,
7
+ "unit": "MB",
8
+ "vocab": 231955
9
+ },
10
+ "request": {
11
+ "required": {
12
+ "chat_template_kwargs": {
13
+ "enable_thinking": false
14
+ }
15
+ },
16
+ "sampling": {
17
+ "temperature": 0.1,
18
+ "top_k": 40,
19
+ "top_p": 0.9,
20
+ "repeat_penalty": 1.05,
21
+ "seed": 42
22
+ },
23
+ "server": {
24
+ "n_ctx": 2048,
25
+ "n_ctx_min": 555,
26
+ "n_threads": 6,
27
+ "n_gpu_layers": 99
28
+ }
29
+ },
30
+ "placeholders": {
31
+ "{{word}}": "the tapped word, verbatim from the text",
32
+ "{{sentence}}": "the sentence containing the tap, derived from the tap character offsets",
33
+ "{{passage}}": "the whole block, or ~520 characters around the tap if longer"
34
+ },
35
+ "caps": {
36
+ "default": {
37
+ "meaning": 111,
38
+ "example": 222,
39
+ "translation": 111,
40
+ "context": 444
41
+ },
42
+ "perLanguage": {
43
+ "zh": {
44
+ "meaning": 112,
45
+ "example": 224,
46
+ "translation": 112,
47
+ "context": 448
48
+ },
49
+ "ja": {
50
+ "meaning": 112,
51
+ "example": 224,
52
+ "translation": 112,
53
+ "context": 448
54
+ },
55
+ "ko": {
56
+ "meaning": 136,
57
+ "example": 272,
58
+ "translation": 136,
59
+ "context": 544
60
+ },
61
+ "hi": {
62
+ "meaning": 144,
63
+ "example": 288,
64
+ "translation": 144,
65
+ "context": 576
66
+ },
67
+ "ta": {
68
+ "meaning": 160,
69
+ "example": 320,
70
+ "translation": 160,
71
+ "context": 640
72
+ },
73
+ "th": {
74
+ "meaning": 136,
75
+ "example": 272,
76
+ "translation": 136,
77
+ "context": 544
78
+ },
79
+ "he": {
80
+ "meaning": 192,
81
+ "example": 384,
82
+ "translation": 192,
83
+ "context": 768
84
+ }
85
+ }
86
+ },
87
+ "languages": {
88
+ "ar": {
89
+ "name": "Arabic",
90
+ "book": true,
91
+ "reader": true,
92
+ "evidence": "benchmark, 90 items x 2 seeds",
93
+ "prompts": {
94
+ "meaning": "ما معنى «{{word}}» هنا؟ الجملة التي وردت فيها: <<<{{sentence}}>>>\nعرّف «{{word}}» نفسها بالمعنى الذي تعطيه لها الجملة. وإذا كانت داخل تعبير اصطلاحي - أي عبارة معناها ليس مجموع كلماتها - فاشرح العبارة كلها. ولا تلخّص الجملة ولا تعد سردها. استخدم العربية البسيطة. من دون تسميات أو ماركداون أو علامات اقتباس أو أمثلة.",
95
+ "example": "هكذا استُخدمت «{{word}}» هنا: <<<{{sentence}}>>>\nاكتب 3 جمل قصيرة جديدة من عندك تستخدم «{{word}}» بالمعنى نفسه. إذا كانت «{{word}}» داخل تعبير اصطلاحي - أي عبارة معناها ليس مجموع كلماتها - فاحتفظ بالعبارة كلها. أما الكلمة المركبة فليست تعبيرا اصطلاحيا، فاستخدم «{{word}}» وحدها. لا تستخدم أي معنى آخر. ولا تكرر الجملة السابقة. استخدم العربية البسيطة. من دون تسميات أو ماركداون أو علامات اقتباس.",
96
+ "translation": "قارئ وجد كلمة «{{word}}» في هذه الجملة: <<<{{sentence}}>>>\nاشرح بالعربية ما تعنيه «{{word}}» هناك. اكتب عبارة قصيرة لا كلمة واحدة مجردة. وإذا كانت جزءا من تعبير اصطلاحي، فاشرح العبارة كلها. اشرح الكلمة ولا تترجم الجملة. من دون تسميات أو ماركداون أو علامات اقتباس أو أمثلة. أجب بالعربية.",
97
+ "context": "ترجم هذا المقطع إلى العربية بشكل طبيعي وسلس: {{passage}}. حافظ على المعنى والأسلوب الأصلي. أعط الترجمة العربية فقط. من دون تسميات أو ماركداون أو علامات اقتباس أو ملاحظات."
98
+ }
99
+ },
100
+ "de": {
101
+ "name": "German",
102
+ "book": true,
103
+ "reader": true,
104
+ "evidence": "benchmark, 90 items x 2 seeds",
105
+ "prompts": {
106
+ "meaning": "Was bedeutet «{{word}}» hier? Der Satz, in dem es vorkommt: <<<{{sentence}}>>>\nErkläre «{{word}}» selbst, in der Bedeutung, die der Satz ihm gibt. Wenn «{{word}}» dort Teil einer Redewendung ist - einer Wendung, deren Bedeutung sich nicht aus den einzelnen Wörtern ergibt - erkläre stattdessen die ganze Wendung. Fasse den Satz nicht zusammen und erzähle ihn nicht nach. Nutze einfaches Deutsch. Keine Beschriftungen, kein Markdown, keine Anführungszeichen, keine Beispiele.",
107
+ "example": "So wird «{{word}}» verwendet: <<<{{sentence}}>>>\nSchreibe 3 neue kurze eigene Sätze, die «{{word}}» mit genau dieser Bedeutung verwenden. Wenn der Satz «{{word}}» in einer Redewendung verwendet - einer Wendung, deren Bedeutung sich nicht aus den einzelnen Wörtern ergibt - behalte die ganze Wendung. Ein zusammengesetztes Wort ist keine Redewendung; dort nutze einfach «{{word}}» selbst. Nutze keine andere Bedeutung. Wiederhole den Satz oben nicht. Nutze einfaches Deutsch. Keine Beschriftungen, kein Markdown, keine Anführungszeichen.",
108
+ "translation": "Ein Leser ist auf das Wort «{{word}}» in diesem Satz gestoßen: <<<{{sentence}}>>>\nErkläre auf Deutsch, was «{{word}}» dort bedeutet. Schreibe eine kurze Wendung, nicht nur ein einzelnes Wort. Wenn es Teil einer Redewendung ist, erkläre die ganze Wendung. Erkläre das Wort, übersetze nicht den Satz. Keine Beschriftungen, kein Markdown, keine Anführungszeichen, keine Beispiele. Antworte auf Deutsch.",
109
+ "context": "Übersetze diesen Text in natürliches Deutsch: {{passage}}. Behalte Bedeutung und Ton des Originals bei. Antworte nur mit der deutschen Übersetzung. Keine Beschriftungen, kein Markdown, keine Anführungszeichen, keine Notizen."
110
+ }
111
+ },
112
+ "el": {
113
+ "name": "el",
114
+ "book": false,
115
+ "reader": false,
116
+ "evidence": "ship gate: output mixes Cyrillic and German into Greek, invents words",
117
+ "note": "DO NOT ENABLE. Only 1,511 Greek tokens were retained.",
118
+ "prompts": {}
119
+ },
120
+ "en": {
121
+ "name": "English",
122
+ "book": true,
123
+ "reader": true,
124
+ "evidence": "benchmark, 90 items x 2 seeds",
125
+ "prompts": {
126
+ "meaning": "What does «{{word}}» mean here? The sentence it appears in: <<<{{sentence}}>>>\nDefine «{{word}}» itself, in the sense the sentence gives it. If «{{word}}» is part of an idiom there - a phrase whose meaning is not the sum of its words - explain what that whole phrase means instead. Do not summarise or retell the sentence. Use simple English. No labels, no markdown, no quotes, no examples.",
127
+ "example": "Here is how «{{word}}» is used: <<<{{sentence}}>>>\nWrite 3 new short sentences of your own that use «{{word}}» with that same meaning. If the sentence uses «{{word}}» inside an idiom - a phrase whose meaning is not the sum of its words - keep that whole phrase. A compound word or a possessive is not an idiom; for those just use «{{word}}» itself. Do not use any other meaning. Do not repeat the sentence above. Use plain English. No labels, no markdown, no quotes.",
128
+ "translation": "A reader met the word «{{word}}» in this sentence: <<<{{sentence}}>>>\nIn English, explain what «{{word}}» means there. Write a short phrase, not a single bare word. If it is part of an idiom, explain what the whole phrase means. Explain the word, do not translate the sentence. No labels, no markdown, no quotes, no examples. Answer in English.",
129
+ "context": "Translate this passage into natural English: {{passage}}. Keep the meaning and tone of the original. Reply with only the English translation. No labels, no markdown, no quotes, no notes."
130
+ }
131
+ },
132
+ "es": {
133
+ "name": "Spanish",
134
+ "book": true,
135
+ "reader": false,
136
+ "evidence": "benchmark, 183 items (older build): 81.3",
137
+ "prompts": {
138
+ "meaning": "¿Qué significa «{{word}}» aquí? La oración en la que aparece: <<<{{sentence}}>>>\nDefine «{{word}}» en sí, en el sentido que le da la oración. Si «{{word}}» forma parte de una expresión idiomática - una frase cuyo significado no es la suma de sus palabras - explica en su lugar qué significa toda la expresión. No resumas ni recuentes la oración. Usa un español sencillo. Sin etiquetas, sin markdown, sin comillas, sin ejemplos.",
139
+ "example": "Así se usa «{{word}}»: <<<{{sentence}}>>>\nEscribe 3 oraciones cortas nuevas tuyas que usen «{{word}}» con ese mismo significado. Si la oración usa «{{word}}» dentro de una expresión idiomática - una frase cuyo significado no es la suma de sus palabras - conserva toda la expresión. Una palabra compuesta no es una expresión idiomática; en ese caso usa «{{word}}» sola. No uses ningún otro significado. No repitas la oración anterior. Usa un español sencillo. Sin etiquetas, sin markdown, sin comillas."
140
+ }
141
+ },
142
+ "fr": {
143
+ "name": "French",
144
+ "book": true,
145
+ "reader": false,
146
+ "evidence": "benchmark, 183 items (older build): 86.3",
147
+ "prompts": {
148
+ "meaning": "Que signifie «{{word}}» ici ? La phrase où il apparaît : <<<{{sentence}}>>>\nDéfinis «{{word}}» lui-même, dans le sens que la phrase lui donne. Si «{{word}}» fait partie d'une expression idiomatique - une locution dont le sens n'est pas la somme des mots - explique plutôt ce que signifie l'expression entière. Ne résume pas et ne raconte pas la phrase. Utilise un français simple. Sans étiquettes, sans markdown, sans guillemets, sans exemples.",
149
+ "example": "Voici comment «{{word}}» est employé : <<<{{sentence}}>>>\nÉcris 3 nouvelles phrases courtes de ton cru qui emploient «{{word}}» avec exactement ce sens. Si la phrase emploie «{{word}}» dans une expression idiomatique - une locution dont le sens n'est pas la somme des mots - garde l'expression entière. Un mot composé n'est pas une expression idiomatique ; dans ce cas emploie «{{word}}» seul. N'emploie aucun autre sens. Ne répète pas la phrase ci-dessus. Utilise un français simple. Sans étiquettes, sans markdown, sans guillemets."
150
+ }
151
+ },
152
+ "he": {
153
+ "name": "Hebrew",
154
+ "book": true,
155
+ "reader": true,
156
+ "evidence": "ship gate: 4/4 tabs pass; 2 taps read correctly",
157
+ "prompts": {
158
+ "meaning": "מה המשמעות של «{{word}}» כאן? המשפט שבו היא מופיעה: <<<{{sentence}}>>>\nהסבר את המילה «{{word}}» עצמה, במשמעות שהמשפט נותן לה. אם «{{word}}» היא חלק מצירוף קבוע שמשמעותו אינה סכום המילים שבו, הסבר את הצירוף כולו. אל תסכם ואל תחזור על המשפט. כתוב בעברית פשוטה משפט אחד בלבד. בלי תוויות, בלי markdown, בלי מרכאות ובלי דוגמאות.",
159
+ "example": "כך משתמשים ב־«{{word}}»: <<<{{sentence}}>>>\nכתוב 3 משפטים קצרים חדשים משלך שמשתמשים ב־«{{word}}» באותה משמעות בדיוק. אם היא חלק מצירוף קבוע, שמור על הצירוף כולו. אל תשתמש במשמעות אחרת. אל תחזור על המשפט שלמעלה. משפט אחד בכל שורה, בלי מספור. בעברית פשוטה. בלי תוויות, בלי markdown ובלי מרכאות.",
160
+ "translation": "\"{{sentence}}\" מה המשמעות של {{word}} כאן? כתוב הסבר קצר מאוד בעברית פשוטה. בלי תוויות, בלי markdown, בלי מרכאות ובלי דוגמאות. ענה בעברית.",
161
+ "context": "תרגם את הקטע הזה לעברית טבעית: {{passage}}. שמור על המשמעות והנימה של המקור. ענה רק בתרגום העברי. בלי תוויות, בלי markdown, בלי מרכאות ובלי הערות."
162
+ }
163
+ },
164
+ "hi": {
165
+ "name": "Hindi",
166
+ "book": true,
167
+ "reader": true,
168
+ "evidence": "ship gate: 4/4 tabs pass; 2 taps read correctly",
169
+ "prompts": {
170
+ "meaning": "यहाँ «{{word}}» का क्या अर्थ है? जिस वाक्य में यह आया है: <<<{{sentence}}>>>\nइस वाक्य में «{{word}}» का जो अर्थ है, उसी शब्द के बारे में समझाइए। यदि «{{word}}» किसी बँधे हुए वाक्यांश का हिस्सा है जिसका अर्थ अलग-अलग शब्दों के अर्थ का जोड़ नहीं है, तो पूरे वाक्यांश का अर्थ समझाइए। वाक्य का सारांश या दोहराव मत कीजिए। सरल हिंदी में केवल एक वाक्य लिखिए। कोई लेबल, markdown, उद्धरण चिह्न या उदाहरण नहीं।",
171
+ "example": "«{{word}}» इस तरह प्रयोग होता है: <<<{{sentence}}>>>\nइसी अर्थ में «{{word}}» का प्रयोग करते हुए अपने 3 नए छोटे वाक्य लिखिए। यदि यह किसी बँधे हुए वाक्यांश का हिस्सा है तो पूरा वाक्यांश रखिए। कोई दूसरा अर्थ मत लीजिए। ऊपर का वाक्य मत दोहराइए। हर वाक्य नई पंक्ति में, संख्या मत लगाइए। सरल हिंदी में। कोई लेबल, markdown या उद्धरण चिह्न नहीं।",
172
+ "translation": "\"{{sentence}}\" इसमें {{word}} का क्या अर्थ है? सरल हिंदी में बहुत छोटा उत्तर लिखिए। कोई लेबल, markdown, उद्धरण चिह्न या उदाहरण नहीं। हिंदी में उत्तर दीजिए।",
173
+ "context": "इस अंश का सहज हिंदी में अनुवाद कीजिए: {{passage}}। मूल का अर्थ और लहजा बनाए रखिए। केवल हिंदी अनुवाद दीजिए। कोई लेबल, markdown, उद्धरण चिह्न या टिप्पणी नहीं।"
174
+ }
175
+ },
176
+ "it": {
177
+ "name": "Italian",
178
+ "book": true,
179
+ "reader": false,
180
+ "evidence": "benchmark, 183 items (older build): 81.3",
181
+ "prompts": {
182
+ "meaning": "Che cosa significa «{{word}}» qui? La frase in cui compare: <<<{{sentence}}>>>\nDefinisci «{{word}}» stessa, nel senso che le dà la frase. Se «{{word}}» fa parte di un'espressione idiomatica - una locuzione il cui significato non è la somma delle parole - spiega invece che cosa significa l'intera espressione. Non riassumere e non raccontare la frase. Usa un italiano semplice. Senza etichette, senza markdown, senza virgolette, senza esempi.",
183
+ "example": "Ecco come viene usata «{{word}}»: <<<{{sentence}}>>>\nScrivi 3 nuove frasi brevi tue che usino «{{word}}» con lo stesso significato. Se la frase usa «{{word}}» dentro un'espressione idiomatica - una locuzione il cui significato non è la somma delle parole - mantieni l'intera espressione. Una parola composta non è un'espressione idiomatica; in quel caso usa «{{word}}» da sola. Non usare nessun altro significato. Non ripetere la frase qui sopra. Usa un italiano semplice. Senza etichette, senza markdown, senza virgolette."
184
+ }
185
+ },
186
+ "ja": {
187
+ "name": "Japanese",
188
+ "book": true,
189
+ "reader": true,
190
+ "evidence": "ship gate: 4/4 tabs pass; 2 taps read correctly",
191
+ "prompts": {
192
+ "meaning": "ここでの «{{word}}» の意味は何ですか。その語が現れる文:<<<{{sentence}}>>>\nこの文が «{{word}}» に与えている意味を、その語自体について説明してください。もし «{{word}}» が決まった言い回しの一部で、全体の意味が個々の語の意味の合計にならない場合は、その言い回し全体を説明してください。文を要約したり言い換えたりしないでください。やさしい日本語で、一文だけ書いてください。ラベル、マークダウン、引用符、例文は不要です。",
193
+ "example": "«{{word}}» はこのように使われます:<<<{{sentence}}>>>\n同じ意味で «{{word}}» を使った短い新しい文を3つ書いてください。決まった言い回しの一部なら、その言い回し全体を残してください。他の意味では使わないでください。上の文を繰り返さないでください。1行に1文、番号は付けないでください。やさしい日本語で。ラベル、マークダウン、引用符は不要です。",
194
+ "translation": "「{{sentence}}」ここでの {{word}} の意味は何ですか。やさしい日本語で、とても短い説明を書いてください。ラベル、マークダウン、引用符、例文は不要です。日本語で答えてください。",
195
+ "context": "この文章を自然な日本語に翻訳してください:{{passage}}。原文の意味と調子を保ってください。日本語の訳文だけを答えてください。ラベル、マークダウン、引用符、注釈は不要です。"
196
+ }
197
+ },
198
+ "ko": {
199
+ "name": "Korean",
200
+ "book": true,
201
+ "reader": true,
202
+ "evidence": "ship gate: 4/4 tabs pass; 2 taps read correctly",
203
+ "prompts": {
204
+ "meaning": "여기에서 «{{word}}»는 무슨 뜻인가요? 그 말이 나오는 문장: <<<{{sentence}}>>>\n이 문장이 «{{word}}»에 주는 뜻을, 그 말 자체에 대해 설명해 주세요. «{{word}}»가 굳어진 표현의 일부이고 전체 뜻이 낱말 뜻의 합이 아니라면, 그 표현 전체를 설명해 주세요. 문장을 요약하거나 다시 말하지 마세요. 쉬운 한국어로 한 문장만 쓰세요. 라벨, 마크다운, 따옴표, 예문은 쓰지 마세요.",
205
+ "example": "«{{word}}»는 이렇게 쓰입니다: <<<{{sentence}}>>>\n같은 뜻으로 «{{word}}»를 쓴 짧은 새 문장 3개를 직접 써 주세요. 굳어진 표현의 일부라면 표현 전체를 그대로 두세요. 다른 뜻으로 쓰지 마세요. 위 문장을 되풀이하지 마세요. 한 줄에 한 문장씩, 번호는 붙이지 마세요. 쉬운 한국어로. 라벨, 마크다운, 따옴표는 쓰지 마세요.",
206
+ "translation": "\"{{sentence}}\" 여기에서 {{word}}는 무슨 뜻인가요? 쉬운 한국어로 아주 짧은 설명을 써 주세요. 라벨, 마크다운, 따옴표, 예문은 쓰지 마세요. 한국어로 답해 주세요.",
207
+ "context": "이 글을 자연스러운 한국어로 번역해 주세요: {{passage}}. 원문의 뜻과 어조를 지켜 주세요. 한국어 번역만 답해 주세요. 라벨, 마크다운, 따옴표, 주석은 쓰지 마세요."
208
+ }
209
+ },
210
+ "nl": {
211
+ "name": "Dutch",
212
+ "book": true,
213
+ "reader": false,
214
+ "evidence": "benchmark, 183 items (older build): 79.2",
215
+ "prompts": {
216
+ "meaning": "Wat betekent «{{word}}» hier? De zin waarin het voorkomt: <<<{{sentence}}>>>\nDefinieer «{{word}}» zelf, in de betekenis die de zin eraan geeft. Als «{{word}}» deel uitmaakt van een uitdrukking - een zegswijze waarvan de betekenis niet de som van de woorden is - leg dan uit wat die hele uitdrukking betekent. Vat de zin niet samen en vertel hem niet na. Gebruik eenvoudig Nederlands. Geen labels, geen markdown, geen aanhalingstekens, geen voorbeelden.",
217
+ "example": "Zo wordt «{{word}}» gebruikt: <<<{{sentence}}>>>\nSchrijf 3 nieuwe korte eigen zinnen die «{{word}}» met precies die betekenis gebruiken. Als de zin «{{word}}» in een uitdrukking gebruikt - een zegswijze waarvan de betekenis niet de som van de woorden is - behoud dan de hele uitdrukking. Een samenstelling is geen uitdrukking; gebruik daar gewoon «{{word}}» zelf. Gebruik geen andere betekenis. Herhaal de zin hierboven niet. Gebruik eenvoudig Nederlands. Geen labels, geen markdown, geen aanhalingstekens."
218
+ }
219
+ },
220
+ "pl": {
221
+ "name": "Polish",
222
+ "book": true,
223
+ "reader": false,
224
+ "evidence": "benchmark, 183 items (older build): 76.7",
225
+ "prompts": {
226
+ "meaning": "Co znaczy «{{word}}» w tym miejscu? Zdanie, w którym występuje: <<<{{sentence}}>>>\nZdefiniuj samo «{{word}}» w znaczeniu, jakie nadaje mu to zdanie. Jeśli «{{word}}» jest częścią idiomu - wyrażenia, którego znaczenie nie jest sumą słów - wyjaśnij zamiast tego znaczenie całego wyrażenia. Nie streszczaj ani nie opowiadaj zdania. Używaj prostego języka polskiego. Bez etykiet, bez markdowna, bez cudzysłowów, bez przykładów.",
227
+ "example": "Tak użyto «{{word}}»: <<<{{sentence}}>>>\nNapisz 3 nowe krótkie własne zdania, które używają «{{word}}» w dokładnie tym samym znaczeniu. Jeśli zdanie używa «{{word}}» wewnątrz idiomu - wyrażenia, którego znaczenie nie jest sumą słów - zachowaj całe wyrażenie. Wyraz złożony nie jest idiomem; w takim razie użyj samego «{{word}}». Nie używaj żadnego innego znaczenia. Nie powtarzaj powyższego zdania. Używaj prostego języka polskiego. Bez etykiet, bez markdowna, bez cudzysłowów."
228
+ }
229
+ },
230
+ "pt": {
231
+ "name": "Portuguese",
232
+ "book": true,
233
+ "reader": false,
234
+ "evidence": "benchmark, 183 items (older build): 85.7",
235
+ "prompts": {
236
+ "meaning": "O que significa «{{word}}» aqui? A frase em que aparece: <<<{{sentence}}>>>\nDefine «{{word}}» em si, no sentido que a frase lhe dá. Se «{{word}}» fizer parte de uma expressão idiomática - uma locução cujo significado não é a soma das palavras - explica antes o que significa a expressão inteira. Não resumas nem recontes a frase. Usa português simples. Sem rótulos, sem markdown, sem aspas, sem exemplos.",
237
+ "example": "É assim que «{{word}}» é usada: <<<{{sentence}}>>>\nEscreve 3 frases curtas novas tuas que usem «{{word}}» com esse mesmo significado. Se a frase usar «{{word}}» dentro de uma expressão idiomática - uma locução cujo significado não é a soma das palavras - mantém a expressão inteira. Uma palavra composta não é uma expressão idiomática; nesse caso usa «{{word}}» sozinha. Não uses nenhum outro significado. Não repitas a frase acima. Usa português simples. Sem rótulos, sem markdown, sem aspas."
238
+ }
239
+ },
240
+ "ru": {
241
+ "name": "Russian",
242
+ "book": true,
243
+ "reader": false,
244
+ "evidence": "benchmark, 183 items (older build): 81.2",
245
+ "prompts": {
246
+ "meaning": "Что значит «{{word}}» здесь? Предложение, в котором оно встречается: <<<{{sentence}}>>>\nОпредели само «{{word}}» в том значении, которое даёт ему предложение. Если «{{word}}» входит в идиому - выражение, смысл которого не складывается из слов - объясни вместо этого значение всего выражения. Не пересказывай и не резюмируй предложение. Используй простой русский язык. Без пометок, без markdown, без кавычек, без примеров.",
247
+ "example": "Вот как употреблено «{{word}}»: <<<{{sentence}}>>>\nНапиши 3 новых коротких собственных предложения, где «{{word}}» имеет то же значение. Если в предложении «{{word}}» употреблено внутри идиомы - выражения, смысл которого не складывается из слов - сохрани всё выражение. Сложное слово идиомой не является; тогда используй само «{{word}}». Не используй другие значения. Не повторяй предложение выше. Используй простой русский язык. Без пометок, без markdown, без кавычек."
248
+ }
249
+ },
250
+ "ta": {
251
+ "name": "Tamil",
252
+ "book": true,
253
+ "reader": false,
254
+ "evidence": "ship gate: MEANING/EXAMPLE/TRANSLATION pass, CONTEXT fails",
255
+ "note": "CONTEXT spliced Han, Kana and Hangul into Tamil output. Book language only.",
256
+ "prompts": {
257
+ "meaning": "இங்கே «{{word}}» என்பதன் பொருள் என்ன? அது வரும் வாக்கியம்: <<<{{sentence}}>>>\nஇந்த வாக்கி���ம் «{{word}}» என்பதற்குத் தரும் பொருளை, அச்சொல்லைப் பற்றியே விளக்குங்கள். «{{word}}» ஒரு நிலையான தொடரின் பகுதியாக இருந்து, அதன் பொருள் தனிச் சொற்களின் கூட்டுப் பொருள் அல்ல எனில், அந்தத் தொடர் முழுவதையும் விளக்குங்கள். வாக்கியத்தைச் சுருக்கவோ மீண்டும் சொல்லவோ வேண்டாம். எளிய தமிழில் ஒரே ஒரு வாக்கியம் மட்டும் எழுதுங்கள். லேபிள், markdown, மேற்கோள் குறி, எடுத்துக்காட்டு வேண்டாம்.",
258
+ "example": "«{{word}}» இப்படிப் பயன்படுத்தப்படுகிறது: <<<{{sentence}}>>>\nஅதே பொருளில் «{{word}}» ஐப் பயன்படுத்தி உங்கள் சொந்த 3 புதிய குறுகிய வாக்கியங்களை எழுதுங்கள். அது ஒரு நிலையான தொடரின் பகுதியாக இருந்தால் தொடர் முழுவதையும் வைத்திருங்கள். வேறு பொருளைப் பயன்படுத்த வேண்டாம். மேலே உள்ள வாக்கியத்தை மீண்டும் எழுத வேண்டாம். ஒரு வரிக்கு ஒரு வாக்கியம், எண் இட வேண்டாம். எளிய தமிழில். லேபிள், markdown, மேற்கோள் குறி வேண்டாம்."
259
+ }
260
+ },
261
+ "th": {
262
+ "name": "Thai",
263
+ "book": true,
264
+ "reader": true,
265
+ "evidence": "ship gate: 4/4 tabs pass; 2 taps read correctly",
266
+ "prompts": {
267
+ "meaning": "«{{word}}» ในที่นี้หมายความว่าอะไร ประโยคที่คำนี้ปรากฏ: <<<{{sentence}}>>>\nอธิบายความหมายของ «{{word}}» เองตามที่ประโยคนี้ให้ไว้ ถ้า «{{word}}» เป็นส่วนหนึ่งของวลีที่ตายตัว ซึ่งความหมายรวมไม่ใช่ผลรวมของคำแต่ละคำ ให้อธิบายความหมายของวลีทั้งวลีแทน อย่าสรุปหรือเล่าประโยคซ้ำ ใช้ภาษาไทยง่าย ๆ เขียนเพียงประโยคเดียว ไม่ต้องมีป้ายกำกับ markdown เครื่องหมายคำพูด หรือตัวอย่าง",
268
+ "example": "«{{word}}» ใช้แบบนี้: <<<{{sentence}}>>>\nเขียนประโยคสั้น ๆ ใหม่ของคุณเอง 3 ประโยค ที่ใช้ «{{word}}» ในความหมายเดียวกัน ถ้าเป็นส่วนหนึ่งของวลีที่ตายตัว ให้คงวลีทั้งหมดไว้ อย่าใช้ความหมายอื่น อย่าเขียนประโยคข้างบนซ้ำ บรรทัดละหนึ่งประโยค ไม่ต้องใส่ตัวเลข ใช้ภาษาไทยง่าย ๆ ไม่ต้องมีป้ายกำกับ markdown หรือเครื่องหมายคำพูด",
269
+ "translation": "\"{{sentence}}\" คำว่า {{word}} ในที่นี้หมายความว่าอะไร เขียนคำอธิบายสั้นมากเป็นภาษาไทยง่าย ๆ ไม่ต้องมีป้ายกำกับ markdown เครื่องหมายคำพูด หรือตัวอย่าง ตอบเป็นภาษาไทย",
270
+ "context": "แปลข้อความนี้เป็นภาษาไทยที่เป็นธรรมชาติ: {{passage}} รักษาความหมายและน้ำเสียงของต้นฉบับไว้ ตอบเฉพาะคำแปลภาษาไทย ไม่ต้องมีป้ายกำกับ markdown เครื่องหมายคำพูด หรือหมายเหตุ"
271
+ }
272
+ },
273
+ "tr": {
274
+ "name": "Turkish",
275
+ "book": true,
276
+ "reader": false,
277
+ "evidence": "benchmark, 183 items (older build): 69.3 — weakest",
278
+ "prompts": {
279
+ "meaning": "Burada «{{word}}» ne anlama geliyor? Geçtiği cümle: <<<{{sentence}}>>>\n«{{word}}» kelimesinin kendisini, cümlenin ona verdiği anlamda tanımla. Eğer «{{word}}» bir deyimin parçasıysa - anlamı kelimelerinin toplamı olmayan bir söz öbeği - bunun yerine tüm deyimin ne anlama geldiğini açıkla. Cümleyi özetleme ve yeniden anlatma. Basit Türkçe kullan. Etiket, markdown, tırnak işareti ve örnek kullanma.",
280
+ "example": "«{{word}}» böyle kullanılıyor: <<<{{sentence}}>>>\nAynı anlamda «{{word}}» kullanan 3 yeni kısa cümle yaz. Eğer cümle «{{word}}» kelimesini bir deyim içinde kullanıyorsa - anlamı kelimelerinin toplamı olmayan bir söz öbeği - deyimin tamamını koru. Birleşik kelime deyim değildir; onda sadece «{{word}}» kullan. Başka hiçbir anlam kullanma. Yukarıdaki cümleyi tekrarlama. Basit Türkçe kullan. Etiket, markdown veya tırnak işareti kullanma."
281
+ }
282
+ },
283
+ "zh": {
284
+ "name": "Chinese",
285
+ "book": true,
286
+ "reader": true,
287
+ "evidence": "ship gate: 4/4 tabs pass; 2 taps read correctly",
288
+ "prompts": {
289
+ "meaning": "«{{word}}» 在这里是什么意思?它所在的句子:<<<{{sentence}}>>>\n请解释 «{{word}}» 本身在这个句子里的意思。如果 «{{word}}» 是一个固定说法的一部分——整体意思不等于各个字的意思相加——那就解释整个说法。不要复述或概括这个句子。用简单的中文,只写一句话。不要标签、不要markdown、不要引号、不要举例。",
290
+ "example": "«{{word}}» 是这样用的:<<<{{sentence}}>>>\n请你自己写 3 个新的短句,用 «{{word}}» 表达同样的意思。如果它属于一个固定说法,就保留整个说法。不要用别的意思。不要重复上面的句子。每句一行,不要编号。用简单的中文。不要标签、不要markdown、不要引号。",
291
+ "translation": "\"{{sentence}}\" 其中 {{word}} 是什么意思?用简单的中文写一个很短的解释。不要标签、不要markdown、不要引号、不要举例。请用中文回答。",
292
+ "context": "把这段文字翻译成自然的中文:{{passage}}。保持原文的意思和语气。只给出中文译文。不要标签、不要markdown、不要引号、不要注释。"
293
+ }
294
+ }
295
+ }
296
+ }