riswanmsm commited on
Commit
682bee1
·
1 Parent(s): b51903a

Submit final system code, manifest, and predictions for team-riswan

Browse files
Files changed (44) hide show
  1. .gitignore +8 -0
  2. ENVIRONMENT.md +17 -0
  3. README.md +79 -25
  4. REPRODUCIBILITY.md +49 -0
  5. checks/test_reconstruction.py +60 -0
  6. data/README.md +5 -0
  7. data/few_shot_examples.json +252 -0
  8. inference.ipynb +26 -16
  9. inference.py +460 -161
  10. model_manifest.json +79 -0
  11. predictions.jsonl +45 -45
  12. requirements.txt +4 -5
  13. submission_manifest.json +72 -0
  14. training/README.md +15 -14
  15. training/ensemble_v9.py +139 -0
  16. training/evidence/dataset_loader_check.json +7 -0
  17. training/evidence/kaggle_environment.json +31 -0
  18. training/evidence/kaggle_parameter_metadata.json +22 -0
  19. training/evidence/notebook09f65026da.ipynb +0 -0
  20. training/evidence/original_cell5_pass4_pass5.py +113 -0
  21. training/evidence/pass4_pass5_log.txt +73 -0
  22. training/evidence/plumbing_checks.json +6 -0
  23. training/evidence/requirements.original-kaggle-observed.txt +16 -0
  24. training/evidence/requirements.packaging-check.txt +15 -0
  25. training/evidence/verification_report.json +120 -0
  26. training/kaggle_cells/cell1_pass1.py +143 -0
  27. training/kaggle_cells/cell3_pass2.py +149 -0
  28. training/kaggle_cells/cell4_pass3.py +158 -0
  29. training/kaggle_cells/cell5_pass4_pass5.py +124 -0
  30. training/passes/baseline_cot_4shot.jsonl +0 -0
  31. training/passes/baseline_direct_4shot.jsonl +0 -0
  32. training/passes/mac_think_2048_orig.jsonl +0 -0
  33. training/passes/pass1_think_2048_orig.jsonl +0 -0
  34. training/passes/pass2_think_4096_rot1.jsonl +0 -0
  35. training/passes/pass3_think_4096_hint.jsonl +720 -0
  36. training/passes/pass4_think_4096_rot2.jsonl +712 -0
  37. training/passes/pass5_think_4096_rot3.jsonl +712 -0
  38. training/passes/positional_option_keys.json +1 -0
  39. training/src/baseline_runner.py +456 -0
  40. training/src/few_shot_prompts.py +250 -0
  41. training/src/few_shot_runner.py +209 -0
  42. training/src/package_submission.py +85 -0
  43. training/src/prompts.py +70 -0
  44. verify_submission.py +98 -0
.gitignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ __pycache__/
2
+ *.py[cod]
3
+ .DS_Store
4
+ .venv/
5
+ inference_work/
6
+ rerun/
7
+ predictions_rerun.jsonl
8
+ predictions_v9_rebuilt.jsonl
ENVIRONMENT.md ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Environment evidence
2
+
3
+ ## Historical Kaggle export
4
+
5
+ The participant supplied `notebook09f65026da.ipynb`, copied unchanged under `training/evidence/`. Its metadata records Python **3.13.15** and Kaggle docker image version ID **28755**. Metadata records no active accelerator at export, while the setup cell and run outputs describe two T4-backed Ollama servers. The freeze output includes **torch 2.11.0+cu128**, **transformers 5.16.1**, and **accelerate 1.14.0**; the complete observed subset is in `training/evidence/requirements.original-kaggle-observed.txt`. These packages do not implement the shown inference: those requests use Python's standard-library HTTP client and the Ollama server. The freeze cell's execution count does not prove these versions were present for every earlier pass.
6
+
7
+ No historical Ollama server version, complete model digest, complete pip freeze, or full-run wall time is contained in the supplied notebook export. A subsequent participant-provided Kaggle diagnostic reports **Ollama server 0.40.12** on both ports 11434 and 11435. Neither server had a model loaded at that diagnostic. This establishes the inspected version, not the version of every earlier pass.
8
+
9
+ ## Current Mac inspection
10
+
11
+ The installed Ollama **client** reports 0.40.7; there was no running server during inspection. This is not proof of the server version used for the submitted Mac predictions. `model_manifest.json` records the local model manifest hash and component inventory observed on 28 October 2026.
12
+
13
+ ## Reconstruction test environment
14
+
15
+ The cleaned replay and metadata checks use an isolated Python environment. `requirements.txt` pins **huggingface_hub==2.3.0**, the package tested for dataset access during packaging, not an assertion about original Kaggle versions. The resolved packages are in `training/evidence/requirements.packaging-check.txt`.
16
+
17
+ Ollama is a separate system dependency. The original notebook installs it from `https://ollama.com/install.sh` and downloads `gemma4:e4b`; both moving references need exact version/model identity evidence. The runner checks for a provisioned server/model and does not silently install a different one. This leaves a setup discrepancy against the provided Hugging-Face-only template; organiser approval or a verified equivalent packaging path is still needed.
README.md CHANGED
@@ -1,31 +1,85 @@
1
- # Team team-riswan – Sinhala MMLU Shared Task System
2
 
3
- ## System summary
4
- - **Base model(s):** `google/gemma-4-E4B-it` (Apache 2.0 license, released April 2, 2026).
5
- - **What we did:** Zero-shot curriculum-contextualized prompt engineering (combining subject domain context, grade levels 6–13, and explicit Sinhala negation-awareness instructions) coupled with native test-time reasoning traces (`think=True`) and option-order permutation consensus to eliminate multiple-choice position bias. No fine-tuning or training was performed, adhering strictly to Rule 04.
6
- - **Total inference parameters:** `7.52B` (active causal language model backbone `model.language_model.*` = 7,521,605,888 parameters; strictly $\le 8.0\text{B}$ per Rule 02).
7
- - **Extra data used for training or retrieval:** None.
8
 
9
- ## Models and resources in this submission
10
- | Repo | What it is |
11
- |---|---|
12
- | `SinhalaMMLU-SharedTask/team-riswan` | Code, inference script, final predictions, and documentation (this repo) |
13
- | `google/gemma-4-E4B-it` | Upstream base model on Hugging Face (no separate fine-tuned adapter required) |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
- ## How to run
16
  ```bash
17
  pip install -r requirements.txt
18
- python inference.py
 
 
19
  ```
20
- *(Or open and run `inference.ipynb` top-to-bottom in Google Colab / Kaggle).*
21
-
22
- - **GPU used:** 1x NVIDIA A100 (40GB) or 2x Tesla T4 GPUs (or any GPU with $\ge$ 16GB VRAM in BF16/FP16).
23
- - **Approximate run time on the test set:** ~45–75 minutes on an A100 GPU (or ~90 minutes on 2x T4).
24
- - **Anything else the organizers need to know:** Please accept the standard Google Gemma license on Hugging Face (`google/gemma-4-E4B-it`) if accessing via Hugging Face Hub. Inference is fully deterministic (`do_sample=False`, fixed seed 42) and runs offline without network retrieval during inference.
25
-
26
- ## Files
27
- - `inference.py` – Standalone Python inference script directly executable by the organizers.
28
- - `inference.ipynb` – Interactive Jupyter Notebook version for 1-click Colab / Kaggle execution.
29
- - `predictions.jsonl` – The exact 2,238-line prediction file submitted to the leaderboard.
30
- - `requirements.txt` – Package versions used.
31
- - `training/` – Documentation confirming zero-shot inference without parameter training (Rule 04 compliance).
 
 
 
 
 
 
 
1
+ # Team riswan — SinhalaMMLU Shared Task, ICTer 2026
2
 
3
+ This repository preserves **Codabench submission #138**, `submission_think_ens_v9_final.zip`, with provisional macro accuracy **64.2482** (Easy 65.2648, Medium 56.3456, Hard 71.134), as shown in the participant's 28 October 2026 screenshot. Ranking remains subject to organiser verification.
 
 
 
 
4
 
5
+ **Reproduction status:** the eight saved passes reproduce `predictions.jsonl` byte-for-byte. Fresh model inference has not been shown to reproduce the score. The supplied organiser template's no-sampling and Hugging-Face-only setup guidance differs from the historical system. See [REPRODUCIBILITY.md](REPRODUCIBILITY.md) for the full disclosure; this package does not certify rules compliance.
6
+
7
+ ## Team and resources
8
+
9
+ - Team: **riswan**. Codabench participant: **riswan**. The registered team name was confirmed by the participant.
10
+ - [Team repository](https://huggingface.co/SinhalaMMLU-SharedTask/team-riswan) — configured repository destination; packaging changes are local until uploaded.
11
+ - [Base model: google/gemma-4-E4B-it](https://huggingface.co/google/gemma-4-E4B-it) — upstream model card lists Apache 2.0.
12
+ - [Ollama model: gemma4:e4b](https://ollama.com/library/gemma4:e4b) — the actual serving tag used by the original scripts; a moving tag is not an immutable model revision.
13
+ - [Competition dataset](https://huggingface.co/datasets/SinhalaMMLU-SharedTask/Sinhala-MMLU-SharedTask-Test-Dataset).
14
+ - [Task website](https://sinhalammlu.ucsc.cmb.ac.lk/) and [rules](https://sinhalammlu.ucsc.cmb.ac.lk/rules.html).
15
+ - No trained model or adapter is evidenced in the submitted pipeline; it uses frozen model inference. No additional model repository is currently included.
16
+
17
+ ## Method actually used
18
+
19
+ Two four-shot baselines (English analysis and direct-answer modes) contribute low-weight votes and identify disagreements. Five thinking passes use the original option order, cyclic rotations, or an additional terminology instruction. A separate Mac thinking run contributes another vote. A deterministic, difficulty-specific weighted merge combines the saved answers. Rotated votes are ignored when the positional-option regex matches. The entire system is **not zero-shot**: the four-shot examples are supplied in [data/few_shot_examples.json](data/few_shot_examples.json).
20
+
21
+ | Source | Saved answers | Thinking | Output-token limit | Temperature | Option order |
22
+ |---|---:|---|---:|---:|---|
23
+ | CoT baseline | 2238 | false | 260 | 0 | Original; four examples |
24
+ | Direct baseline | 2238 | false | 15 | 0 | Original; four examples |
25
+ | Pass 1 | 2238 | true | 2048 | 0 | Original |
26
+ | Pass 2 | 1100 | true | 4096 | 0 | Rotation +1 |
27
+ | Pass 3 | 720 | true | 4096 | 0.1, top_p 0.95 | Original; terminology hint |
28
+ | Pass 4 | 712 | true | 4096 | 0 | Rotation +2 |
29
+ | Pass 5 | 712 | true | 4096 | 0 | Rotation +3 |
30
+ | Mac | 1160 | true | 2048 | 0 | Original |
31
+
32
+ The generation requests in the archived code do **not** specify an Ollama seed. `training/ensemble_v9.py` is the exact weighted merge logic, with added validation. Ties use `Counter.most_common`: the first answer encountered in the fixed source order among tied totals wins. This is not an unweighted majority vote.
33
+
34
+ ## Parameters, hardware, and timing
35
+
36
+ - **Ollama-reported parameter count: 7,996,157,674 (approximately 7.996B)**, comprising **7,518,069,290** main-model parameters plus **478,088,384** projector parameters. Both Kaggle servers running Ollama **0.40.12** reported these same component counts. This sum is below 8,000,000,000.
37
+ - These are model-metadata counts; no models were loaded when the diagnostic was captured. Any additional loaded components and final eligibility can be verified by the organisers during reproduction. See [model_manifest.json](model_manifest.json).
38
+ - Historical hardware: Kaggle **2 × NVIDIA Tesla T4**, two Ollama servers, two concurrent requests per server; separate Apple Mac with **16 GB memory** reported by the participant. Exact Mac chip and historical runtime versions still need confirmation.
39
+ - The exported notebook shows Pass 4 at **106.4 minutes after 700/719 attempts**, and Pass 5 at **105.6 minutes after 700/719 attempts**, followed by completion messages. Each complete pass took longer than its last printed progress time. Complete end-to-end runtime was not recorded in the supplied export; no A100 timing is claimed.
40
+
41
+ ## Verify the archived submission without running a model
42
+
43
+ From the repository root (Python 3.10+; standard library only):
44
+
45
+ ```bash
46
+ python verify_submission.py
47
+ python training/ensemble_v9.py --out predictions_v9_rebuilt.jsonl
48
+ ```
49
+
50
+ `verify_submission.py` checks hashes, unique identifiers, answer ranges and byte-identical replay. The saved positional keys are archival input-derived metadata, not labels. To independently regenerate that filter and inspect target sets:
51
+
52
+ ```bash
53
+ python verify_submission.py --data /path/to/dataset
54
+ ```
55
+
56
+ This verifies the saved result; it is **not** a substitute for the organisers' fresh-model reproduction check.
57
+
58
+ ## Fresh inference reconstruction
59
+
60
+ This runner is an audited reconstruction of a multi-machine workflow, not a claim that one script originally produced v9 end-to-end. First provision the correct Ollama runtime and original model. Historical setup is preserved in the notebook under `training/evidence/`; it uses the Ollama installer/registry, which differs from the supplied Hugging-Face-only template. Do not silently replace the quantized model with upstream BF16 and claim equivalence. Download the complete team repository, including `training/src`.
61
 
 
62
  ```bash
63
  pip install -r requirements.txt
64
+ mkdir -p rerun
65
+ cd rerun
66
+ python ../inference.py
67
  ```
68
+
69
+ The script obtains all JSON question files from `DATA_REPO` on Hugging Face, then uses local Ollama endpoints. Setup downloads happen before answering. For a local offline dataset use `--local-data /path/to/dataset`. Saved test predictions are never read by the default fresh-run path. Set `OLLAMA_HOSTS` to choose local servers and `WORKDIR` to select a fresh checkpoint directory. `LIMIT=2` provides a small smoke run per difficulty; it is not a full evaluation.
70
+
71
+ The submitted `predictions.jsonl` is protected against overwriting. Running from `rerun/` writes new answers there. A full fresh Mac pass traverses the entire priority queue: the original 1160-answer partial prefix is preserved only as historical evidence, not hard-coded as a test-count rule. Consequently the fresh pipeline is not guaranteed to produce the original votes or score.
72
+
73
+ ## Contents
74
+
75
+ - `predictions.jsonl`: exact final leaderboard predictions (2238 rows).
76
+ - `inference.py`, `inference.ipynb`: reconstructed fresh-run workflow and a notebook wrapper using the same script.
77
+ - `training/ensemble_v9.py`, `training/passes/`: exact merge logic and its eight historical inputs.
78
+ - `training/kaggle_cells/`, `training/src/`: archived stage and prompt code; archive edits are disclosed.
79
+ - `training/evidence/`: participant-exported notebook, original Pass 4/5 source and output logs, observed environment versions.
80
+ - `data/few_shot_examples.json`: the embedded labelled examples used in the prompts; source URLs were not recorded in the code.
81
+ - `requirements.txt`, `ENVIRONMENT.md`: minimal tested reconstruction dependency and historical environment evidence.
82
+ - `submission_manifest.json`, `model_manifest.json`, `verify_submission.py`: provenance and verification.
83
+ - `REPRODUCIBILITY.md`: unresolved differences, template cross-check, and verification scope.
84
+
85
+ Additional data provenance and the history of prompt/vote selection require author confirmation; absence of test gold labels in these files is not by itself proof that no test-based tuning occurred.
REPRODUCIBILITY.md ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Reproduction and submission-template cross-check
2
+
3
+ ## Verified preservation
4
+
5
+ The package's `predictions.jsonl` equals the member of `submission_think_ens_v9_final.zip` byte-for-byte. SHA-256: `0998ea38f240c05103a7572a9a367a553f4e2b7664a31fe70f5c9668214dd554`. It contains 2238 unique question keys and only answers 1–4. Both merge implementations produce the same answer for every question. The archived merge reproduces every byte.
6
+
7
+ ## Original run versus reconstruction
8
+
9
+ 1. **Mac prefix:** all 1160 saved Mac rows, including their sequence, exactly match the first 1160 questions from the original disagreement-first, Hard/Medium/Easy priority queue. The old reconstructed rule selected only 1100 (disagreements plus all Hard). The historical local script schedules all questions; there is no evidence of a deliberate rule to select the extra 60. The current reconstruction therefore traverses the full queue. It does not encode 1160 or question-specific keys as a new-data selection rule.
10
+ 2. **Passes 4/5:** the supplied notebook confirms 719 targets, both loops completed, and the code omits requests with no parseable explicit answer or exhausted retries. Each saved pass has 712 answers. The seven omissions per pass are therefore consistent with the recorded skip behavior; the exact reason for each omission cannot be recovered from prediction-only checkpoints. They are intentionally absent from archival voting. The missing-key lists differ between the two passes.
11
+ 3. **Targets:** rules computed from the saved model outputs exactly match all 1100 Pass-2 and 720 Pass-3 keys. The 720-key literal target list in the exported Pass-4/5 notebook is checked against the same rule. Regenerated model answers can change these sets.
12
+ 4. **Model representation:** local Mac metadata uses an MLX safetensors representation with NVFP4 tensor metadata. The notebook's Kaggle downloads have different blob identities. Hardware/runtime/model hashes and context settings must be recovered to characterize cross-platform differences. Identical model tags do not guarantee identical quantizations or answers.
13
+ 5. **Sampling:** historical Pass 3 uses temperature 0.1 and top_p 0.95, without an explicit seed. The reconstructed runner retains this fact. The interrupted reconstruction had added seed=42; that was removed because it was not in the original requests. Other recorded requests use temperature 0, which alone is not a guarantee of bit-identical outputs across runtimes.
14
+ 6. **Error handling:** the repaired runner uses the archived request budgets, timeouts, retry counts and rotated-option fallback mapping. Errors and fallback answers are part of the historical method; adding extra retries or replacing ambiguous answers would change the pipeline. The archived Mac parser differs slightly from the Kaggle parser and is used for its stage.
15
+ 7. **Source provenance:** the exported notebook includes setup and Passes 4/5, not original execution outputs for Passes 1–3 or Mac. The other cell scripts were already present in the interrupted package and cannot be independently authenticated from this notebook. The Pass-3 archive replaced an embedded Pass-1 answer string with a file read. Cell 5's empty placeholder was repaired by recomputing its selection rule; the literal original is separately preserved in `training/evidence/`.
16
+
17
+ ## Organiser instructions: status
18
+
19
+ | Requirement | Evidence/status |
20
+ |---|---|
21
+ | Repository `team-<teamname>` in organisation | Git remote points to `SinhalaMMLU-SharedTask/team-riswan`; local preparation does not prove upload |
22
+ | Exact final predictions | Verified byte-for-byte; submission #138 |
23
+ | Actual generation scripts | Original exported notebook plus archived stage scripts provided; full historical execution provenance incomplete |
24
+ | Packages and versions | Original exported package subset retained; reconstruction dependency pinned and tested separately |
25
+ | Team/model/count/hardware/runtime/links | README includes evidence and explicitly marks missing details |
26
+ | Training/data-preparation code and extra data | Prompt examples, selection/rotation/merge code included; no parameter training evidenced in this pipeline; example provenance needs confirmation |
27
+ | Separate model/adapter repos if trained | No trained model or adapter evidenced; no such repository currently provided |
28
+ | Fresh environment end-to-end model run | Not completed; CPU replay/import checks do not satisfy this |
29
+ | Download everything from Hugging Face in script | Historical Ollama registry/installer differs; no exception confirmed |
30
+ | No sampling and fixed seed | Historical Pass 3 differs; no exception confirmed |
31
+ | Parameter count | Ollama reports 7,518,069,290 main-model + 478,088,384 projector = **7,996,157,674**, below 8B. This is metadata; organisers can verify additional loaded components during reproduction. |
32
+ | No tuning/prompt design on test questions | Must be assessed from actual experiment history; lack of parameter updates does not establish compliance |
33
+
34
+ Changing the model backend, temperature, historical vote weights, or stage coverage after submission cannot retroactively prove how the submitted score was produced. Any alternative implementation must be labelled as such and separately evaluated. The final eligibility decision belongs to the organisers.
35
+
36
+ ## Verification scope
37
+
38
+ `verify_submission.py` is a no-model audit of historical artifacts. `--data` additionally verifies selection rules and prompt-data exact-text overlap (not semantic contamination). It does not access hidden gold answers. Regression checks use fabricated questions and scripted local responses; they establish plumbing behavior only, never model accuracy. See the packaged verification report for checks actually run.
39
+
40
+ ## Packaging checks completed on 28 October 2026
41
+
42
+ - Isolated environment installation of `huggingface_hub==2.3.0` succeeded.
43
+ - Remote loader fetched 41 JSON files / 2238 questions; question text, choices and keys matched the local dataset.
44
+ - Both command-line replay paths reproduced the submitted prediction bytes.
45
+ - Seven regression tests passed using fabricated inputs and scripted responses. Run `python -B checks/test_reconstruction.py` to repeat them.
46
+ - Literal target indices from the supplied notebook matched the computed 720-question disagreement set.
47
+ - Exact normalized question-text comparison found no matches between embedded examples and the competition questions; this does not prove absence of semantic overlap or test-based tuning.
48
+ - Python syntax and notebook JSON checked; no credential-pattern hits found in package files.
49
+ - No GPU/model rerun, Hugging Face upload or organiser approval was performed by this packaging audit.
checks/test_reconstruction.py ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import importlib.util,json,tempfile,unittest,sys,subprocess,os
2
+ from pathlib import Path
3
+ from unittest.mock import patch
4
+ P=Path(__file__).resolve().parents[1]
5
+ s=importlib.util.spec_from_file_location('inf',P/'inference.py');inf=importlib.util.module_from_spec(s);s.loader.exec_module(inf)
6
+ Q={'q_no':1,'question':'Example?','subject':'Demo','category':'stem','choices':['a','b','c','d'],'_level':'easy','_file':'easy/demo.json'}
7
+ class PipelineTests(unittest.TestCase):
8
+ def test_rotation_mapping_and_fallback(self):
9
+ k=inf.kof(Q)
10
+ with tempfile.TemporaryDirectory() as d:
11
+ with patch.object(inf,'chat',return_value=('no answer','')) as c:
12
+ result=inf.stage_rot([Q],['http://127.0.0.1:11434'],1,Path(d),1,'pass2','p2.jsonl',{k:'4'},{k:'3'})
13
+ self.assertEqual(result[k],'2'); self.assertEqual(c.call_args.args[-1],300);self.assertEqual(c.call_count,1)
14
+ with patch.object(inf,'chat',return_value=('no answer','')):
15
+ self.assertEqual(inf.stage_rot([Q],['http://127.0.0.1:11434'],1,Path(d),2,'p4','p4.jsonl',{k:'4'},{k:'3'},False),{})
16
+ def test_pass3_preserves_actual_sampling(self):
17
+ with tempfile.TemporaryDirectory() as d,patch.object(inf,'chat',return_value=('Answer: 2','')) as c:
18
+ inf.stage_pass3([Q],['http://127.0.0.1:11434'],1,Path(d),{inf.kof(Q):'4'})
19
+ self.assertEqual(c.call_args.args[4],{'temperature':0.1,'top_p':0.95,'num_predict':4096})
20
+ def test_transport_does_not_invent_seed(self):
21
+ from io import BytesIO
22
+ with patch.object(inf._OPENER,'open',return_value=BytesIO(b'{"message":{"content":"Answer: 2"}}')) as op:
23
+ inf.chat('http://127.0.0.1:11434','s','u',True,{'temperature':0.1})
24
+ payload=json.loads(op.call_args.args[0].data)
25
+ self.assertNotIn('seed',payload['options'])
26
+ def test_loader_row_order_and_duplicates(self):
27
+ rows=[{**Q,'_file':'hard/b.json','_level':'hard'}, {**Q,'_file':'easy/a.json'}]
28
+ self.assertEqual([q['_file'] for q in inf.prepare(rows)],['hard/b.json','easy/a.json'])
29
+ with self.assertRaises(ValueError): inf.prepare([dict(Q),dict(Q)])
30
+ def test_missing_or_duplicate_checkpoint_fails(self):
31
+ with tempfile.TemporaryDirectory() as d:
32
+ p=Path(d)/'p.jsonl'
33
+ with self.assertRaises(FileNotFoundError):inf.load_ck(p,required=True)
34
+ r={'q_no':1,'subject':'Demo','category':'stem','level':'easy','answer':'1'};p.write_text((json.dumps(r)+'\n')*2)
35
+ with self.assertRaises(ValueError):inf.load_ck(p)
36
+ def test_protect_submitted_file(self):
37
+ old=(P/'predictions.jsonl').read_bytes()
38
+ r=subprocess.run([sys.executable,'-B',str(P/'inference.py'),'--output',str(P/'predictions.jsonl')],capture_output=True,text=True)
39
+ self.assertNotEqual(r.returncode,0);self.assertIn('Do not overwrite',r.stderr);self.assertEqual(old,(P/'predictions.jsonl').read_bytes())
40
+ def test_full_orchestration_with_scripted_responses(self):
41
+ # Tests all stage orchestration on fabricated data. No actual model or competition answers.
42
+ with tempfile.TemporaryDirectory() as td:
43
+ root=Path(td);data=root/'data'
44
+ for level in ['easy','medium','hard']:
45
+ (data/level).mkdir(parents=True)
46
+ (data/level/'demo.json').write_text(json.dumps([{'q_no':1,'subject':'Demo','category':'stem','question':'Example?','choices':['a','b','c','d']}]))
47
+ calls=[]
48
+ def chat(host,system,user,think,options,timeout=420):
49
+ calls.append(options)
50
+ if not think:return ('Answer: 1' if options['num_predict']==260 else '2','')
51
+ return ('Answer: 3','')
52
+ env={'WORKDIR':str(root/'ck'),'WORKERS':'1','OLLAMA_HOSTS':'http://127.0.0.1:11434'}
53
+ with patch.dict(os.environ,env),patch.object(sys,'argv',['inference.py','--local-data',str(data),'--output',str(root/'out.jsonl')]),patch.object(inf,'ensure_ollama'),patch.object(inf,'chat',side_effect=chat):
54
+ inf.main()
55
+ answers=[json.loads(l) for l in (root/'out.jsonl').read_text().splitlines()]
56
+ self.assertEqual(len(answers),3); self.assertTrue(any(x.get('temperature')==0.1 for x in calls))
57
+ before=len(calls)
58
+ with patch.dict(os.environ,env),patch.object(sys,'argv',['inference.py','--local-data',str(data),'--output',str(root/'out2.jsonl')]),patch.object(inf,'ensure_ollama'),patch.object(inf,'chat',side_effect=chat):inf.main()
59
+ self.assertEqual(len(calls),before)
60
+ if __name__=='__main__':unittest.main(verbosity=2)
data/README.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # In-context examples
2
+
3
+ `few_shot_examples.json` is an exact data export of `EXEMPLARS_BY_DOMAIN` in `training/src/few_shot_prompts.py`. It includes question text, choices, answer and supplied English/Tamil explanations. The baseline builder chooses four examples from the category, with a global fallback; this is in-context data, not a parameter-training dataset.
4
+
5
+ Source URLs, authorship and licences were not recorded in the code and remain to be confirmed by the participant. Existing source comments about external origin are not independent verification. No hidden competition answer key is included or used for the package audit.
data/few_shot_examples.json ADDED
@@ -0,0 +1,252 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "humanities": [
3
+ {
4
+ "question": "අනුරාධපුර රාජධානියේ පළමු රජු ලෙස සැලකෙන්නේ කවුරුන්ද?",
5
+ "choices": [
6
+ "දේවානම්පියතිස්ස රජු",
7
+ "පණ්ඩුකාභය රජු",
8
+ "දුටුගැමුණු රජු",
9
+ "වළගම්බා රජු"
10
+ ],
11
+ "analysis": "The question asks who is considered the first king of the Anuradhapura Kingdom. Options: (1) Devanampiyatissa, (2) Pandukabhaya, (3) Dutugemunu, (4) Valagamba. King Pandukabhaya founded Anuradhapura as the capital and was its first king.",
12
+ "analysis_ta": "வினா: அனுராதபுர இராச்சியத்தின் முதல் மன்னராகக் கருதப்படுபவர் யார்? தெரிவுகள்: (1) தேவநம்பியதிஸ்ஸ, (2) பண்டுகாபய, (3) துட்டகைமுனு, (4) வலகம்பா. அனுராதபுரத்தைத் தலைநகராகக் கொண்டு ஆட்சி செய்த முதல் மன்னன் பண்டுகாபய ஆவார்.",
13
+ "answer": "2"
14
+ },
15
+ {
16
+ "question": "මහාචාර්ය එදිරිවීර සරච්චන්ද්‍රයන් විසින් රචිත ප්‍රකට ශෛලිගත නාට්‍යය කුමක්ද?",
17
+ "choices": [
18
+ "කැලණි පාලම",
19
+ "හුණුවටයේ කතාව",
20
+ "සුබ සහ යස",
21
+ "මනමේ"
22
+ ],
23
+ "analysis": "The question asks for the famous stylized drama written by Prof. Ediriweera Sarachchandra. Options: (1) Kelani Palama, (2) Hunuwataye Kathawa, (3) Suba saha Yasa, (4) Maname. Maname (1956) is Sarachchandra's iconic stylized drama.",
24
+ "analysis_ta": "வினா: பேராசிரியர் எதிரிவீர சரச்சந்திரவால் எழுதப்பட்ட புகழ்பெற்ற நாடகம் எது? தெரிவுகள்: (1) களனி பாலம, (2) ஹுனுவட்டயே கதாவ, (3) சுப சஹ யச, (4) மனமே. 'மனமே' (1956) சரச்சந்திரவின் புகழ்பெற்ற நாடகமாகும்.",
25
+ "answer": "4"
26
+ },
27
+ {
28
+ "question": "සිදුහත් කුමරු ගිහිගෙය හැර යාමේ සිදුවීම බෞද්ධ සාහිත්‍යයේ හඳුන්වනු ලබන්නේ කුමන නමකින්ද?",
29
+ "choices": [
30
+ "මහාභිනිෂ්ක්‍රමණය",
31
+ "ධම්මචක්කප්පවත්තනය",
32
+ "මහා පරිනිර්වාණය",
33
+ "සම්බෝධිය"
34
+ ],
35
+ "analysis": "The question asks how Prince Siddhartha's renunciation of worldly life is known in Buddhist literature. Options: (1) Mahabinishkramanaya (Great Renunciation), (2) Dhammacakkappavattana, (3) Maha Parinirvana, (4) Sambodhi. Renunciation is Mahabinishkramanaya.",
36
+ "analysis_ta": "வினா: சித்தார்த்த இளவரசர் இல்லற வாழ்வைத் துறந்த நிகழ்வு பௌத்த இலக்கியத்தில் எவ்வாறு அழைக்கப்படுகிறது? தெரிவுகள்: (1) மஹாபினிஷ்கிரமணய (மகா துறவு), (2) தம்மசக்கப்பவத்தன, (3) மகா பரிநிர்வாணம், (4) சம்போதி. இல்லறத் துறவு மஹாபினிஷ்கிரமணய எனப்படும்.",
37
+ "answer": "1"
38
+ },
39
+ {
40
+ "question": "උඩරට නර්තන සම්ප්‍රදායේ ප්‍රධානතම අවනද්ධ භාණ්ඩය කුමක්ද?",
41
+ "choices": [
42
+ "දවුල",
43
+ "තම්මැට්ටම",
44
+ "ගැට බෙරය",
45
+ "යක් බෙරය"
46
+ ],
47
+ "analysis": "The question asks for the main percussion drum of the Kandyan (Udarata) dance tradition. Options: (1) Dawula, (2) Thammattama, (3) Geta Beraya, (4) Yak Beraya. Geta Beraya is the primary drum of Kandyan dance.",
48
+ "analysis_ta": "வினா: கண்டிய (உடரட்ட) நடன மரபின் முக்கிய தோற்கருவி எது? தெரிவுகள்: (1) தவுல, (2) தம்மட்டம, (3) கெட்ட பெரய, (4) யக் பெரய. கண்டிய நடனத்தின் பிரதான மேளம் கெட்ட பெரய ஆகும்.",
49
+ "answer": "3"
50
+ }
51
+ ],
52
+ "stem": [
53
+ {
54
+ "question": "ශා�� ප්‍රභාසංශ්ලේෂණ ක්‍රියාවලියේදී අතුරු ඵලයක් ලෙස පරිසරයට නිදහස් වන වායුව කුමක්ද?",
55
+ "choices": [
56
+ "කාබන් ඩයොක්සයිඩ්",
57
+ "ඔක්සිජන්",
58
+ "නයිට්‍රජන්",
59
+ "හයිඩ්‍රජන්"
60
+ ],
61
+ "analysis": "The question asks which gas is released as a byproduct of plant photosynthesis. Options: (1) Carbon dioxide, (2) Oxygen, (3) Nitrogen, (4) Hydrogen. Photosynthesis absorbs CO2 and releases Oxygen.",
62
+ "analysis_ta": "வினா: தாவர ஒளித்தொகுப்பின் போது பக்க விளைபொருளாகச் சூழலுக்கு விடுவிக்கப்படும் வாயு எது? தெரிவுகள்: (1) காபீரனீரொட்சைட்டு, (2) ஒட்சிசன், (3) நைதரசன், (4) ஐதரசன். ஒளித்தொகுப்பின் போது ஒட்சிசன் வாயு வெளியேற்றப்படுகிறது.",
63
+ "answer": "2"
64
+ },
65
+ {
66
+ "question": "විද්‍යුත් ධාරාව මැනීම සඳහා භාවිත කරන ජාත්‍යන්තර සම්මත (SI) ඒකකය කුමක්ද?",
67
+ "choices": [
68
+ "වෝල්ට් (V)",
69
+ "ඕම් (Ω)",
70
+ "වොට් (W)",
71
+ "ඇම්පියර් (A)"
72
+ ],
73
+ "analysis": "The question asks for the SI unit used to measure electric current. Options: (1) Volt, (2) Ohm, (3) Watt, (4) Ampere. Electric current is measured in Amperes (A).",
74
+ "analysis_ta": "வினா: மின்னோட்டத்தை அளவிடப் பயன்படும் சர்வதேச நியம (SI) அலகு யாது? தெரிவுகள்: (1) வோல்ட் (V), (2) ஓம் (Ω), (3) வாட் (W), (4) அம்பியர் (A). மின்னோட்டத்தின் SI அலகு அம்பியர் (A) ஆகும்.",
75
+ "answer": "4"
76
+ },
77
+ {
78
+ "question": "ජලයේ රසායනික සූත්‍රය නිවැරදිව දක්වා ඇත්තේ කවරේද?",
79
+ "choices": [
80
+ "H2O",
81
+ "CO2",
82
+ "NaCl",
83
+ "CH4"
84
+ ],
85
+ "analysis": "The question asks for the chemical formula of water. Options: (1) H2O, (2) CO2, (3) NaCl, (4) CH4. Water is H2O.",
86
+ "analysis_ta": "வினா: நீரின் இரசாயனச் சூத்திரம் எது? தெரிவுகள்: (1) H2O, (2) CO2, (3) NaCl, (4) CH4. நீரின் இரசாயனச் சூத்திரம் H2O ஆகும்.",
87
+ "answer": "1"
88
+ },
89
+ {
90
+ "question": "දිග මැනීම සඳහා භාවිත වන ජාත්‍යන්තර සම්මත (SI) ඒකකය කුමක්ද?",
91
+ "choices": [
92
+ "මිලිමීටර්",
93
+ "සෙන්ටිමීටර්",
94
+ "මීටර්",
95
+ "කිලෝමීටර්"
96
+ ],
97
+ "analysis": "The question asks for the SI base unit of length. Options: (1) millimeter, (2) centimeter, (3) meter, (4) kilometer. The SI base unit of length is the meter.",
98
+ "analysis_ta": "வினா: நீளத்தை அளவிடப் பயன்படும் சர்வதேச நியம (SI) அலகு எது? தெரிவுகள்: (1) மில்லிமீற்றர், (2) சென்ரிமீற்றர், (3) மீற்றர், (4) கிலோமீற்றர். நீளத்தின் SI அடிப்படை அலகு மீற்றர் ஆகும்.",
99
+ "answer": "3"
100
+ }
101
+ ],
102
+ "social_science": [
103
+ {
104
+ "question": "ශ්‍රී ලංකාවේ මුදල් නෝට්ටු නිකුත් කිරීමේ නිල බලය හිමි ආයතනය කුමක්ද?",
105
+ "choices": [
106
+ "මුදල් අමාත්‍යාංශය",
107
+ "ශ්‍රී ලංකා මහ බැංකුව",
108
+ "ලංකා බැංකුව",
109
+ "මහා භාණ්ඩාගාරය"
110
+ ],
111
+ "analysis": "The question asks which institution has official authority to issue currency notes in Sri Lanka. Options: (1) Ministry of Finance, (2) Central Bank of Sri Lanka, (3) Bank of Ceylon, (4) General Treasury. The Central Bank of Sri Lanka issues currency.",
112
+ "analysis_ta": "வினா: இலங்கையில் நாணயத்தாள்களை வெளியிடும் அதிகாரம் கொண்ட நிறுவனம் எது? தெரிவுகள்: (1) நிதி அமைச்சு, (2) இலங்கை மத்திய வங��கி, (3) இலங்கை வங்கி, (4) மகா திறைசேரி. இலங்கை மத்திய வங்கியே நாணயத்தாள்களை வெளியிடுகிறது.",
113
+ "answer": "2"
114
+ },
115
+ {
116
+ "question": "නිෂ්පාදන සාධක සතරට අයත් නොවන සාධකය තෝරන්න.",
117
+ "choices": [
118
+ "භූමිය",
119
+ "ශ්‍රමය",
120
+ "ප්‍රාග්ධනය",
121
+ "උද්ධමනය"
122
+ ],
123
+ "analysis": "The question asks which item does NOT belong to the four factors of production. Options: (1) Land, (2) Labor, (3) Capital, (4) Inflation. Land, labor, capital, and entrepreneurship are factors of production; inflation is not.",
124
+ "analysis_ta": "வினா: நான்கு உற்பத்திக் காரணிகளில் அடங்காத ஒன்றைத் தெரிவு செய்க. தெரிவுகள்: (1) நிலம், (2) உழைப்பு, (3) மூலதனம், (4) பணவீக்கம். நிலம், உழைப்பு, மூலதனம், முயற்சியாண்மை என்பன உற்பத்திக் காரணிகள்; பணவீக்கம் உற்பத்திக் காரணி அல்ல.",
125
+ "answer": "4"
126
+ },
127
+ {
128
+ "question": "ශ්‍රී ලංකාවේ දිගම ගංගාව කුමක්ද?",
129
+ "choices": [
130
+ "මහවැලි ගඟ",
131
+ "කැලණි ගඟ",
132
+ "කළු ගඟ",
133
+ "වලවේ ගඟ"
134
+ ],
135
+ "analysis": "The question asks for the longest river in Sri Lanka. Options: (1) Mahaweli River, (2) Kelani River, (3) Kalu River, (4) Walawe River. Mahaweli River (335 km) is the longest.",
136
+ "analysis_ta": "வினா: இலங்கையின் மிக நீளமான ஆறு எது? தெரிவுகள்: (1) மகாவலி கங்கை, (2) களனி கங்கை, (3) களு கங்கை, (4) வளவை கங்கை. மகாவலி கங்கை (335 கி.மீ) இலங்கையின் மிக நீளமான ஆறாகும்.",
137
+ "answer": "1"
138
+ },
139
+ {
140
+ "question": "ශ්‍රී ලංකාවේ භූමි ප්‍රමාණය අනුව විශාලතම පළාත කුමක්ද?",
141
+ "choices": [
142
+ "බස්නාහිර පළාත",
143
+ "වයඹ පළාත",
144
+ "උතුරු මැද පළාත",
145
+ "දකුණු පළාත"
146
+ ],
147
+ "analysis": "The question asks for the largest province in Sri Lanka by land area. Options: (1) Western, (2) North Western, (3) North Central, (4) Southern. North Central Province is the largest by area.",
148
+ "analysis_ta": "வினா: நிலப்பரப்பின் அடிப்படையில் இலங்கையின் மிகப்பெரிய மாகாணம் எது? தெரிவுகள்: (1) மேல் மாகாணம், (2) வயம்ப மாகாணம், (3) வடமத்திய மாகாணம், (4) தென் மாகாணம். வடமத்திய மாகாணமே நிலப்பரப்பில் மிகப்பெரியது.",
149
+ "answer": "3"
150
+ }
151
+ ],
152
+ "language": [
153
+ {
154
+ "question": "'ගම්පෙරළිය' නවකතාව රචනා කළ ලේඛකයා කවුරුන්ද?",
155
+ "choices": [
156
+ "කුමාරතුංග මුනිදාස",
157
+ "මාර්ටින් වික්‍රමසිංහ",
158
+ "ඩබ්ලියු. ඒ. සිල්වා",
159
+ "පියදාස සිරිසේන"
160
+ ],
161
+ "analysis": "The question asks who wrote the Sinhala novel 'Gamperaliya'. Options: (1) Kumaratunga Munidasa, (2) Martin Wickramasinghe, (3) W. A. Silva, (4) Piyadasa Sirisena. Gamperaliya was written by Martin Wickramasinghe.",
162
+ "analysis_ta": "வினா: 'கம்பெரலிய' நாவலை எழுதிய ஆசிரியர் யார்? தெரிவுகள்: (1) குமாரதுங்க முனிதாச, (2) மார்ட்டின் விக்கிரமசிங்க, (3) டபிள்யூ. ஏ. சில்வா, (4) பியதாச சிறிசேன. கம்பெரலிய நாவலை எழுதியவர் மார்ட்டின் விக்கிரமசிங்க ஆவார்.",
163
+ "answer": "2"
164
+ },
165
+ {
166
+ "question": "සිංහල ව්‍යාකරණයට අනුව උක්ත ආඛ්‍යාත සම්බන්ධය නිවැරදි වාක්‍යය තෝරන්න.",
167
+ "choices": [
168
+ "ළමයි පොත් කියවයි.",
169
+ "මම පාසල් ගියෝය.",
170
+ "අපි ගීත ගයති.",
171
+ "ගොවියෝ කුඹුරු කොටති."
172
+ ],
173
+ "analysis": "The question asks for the grammatically correct Sinhala subject-verb agreement. Options 1, 2, 3 mismatch plural/first-person subjects with third-person singular/plural verbs. Option 4 ('ගොවියෝ කුඹුරු කොටති') correctly pairs plural animate subject 'ගොවියෝ' with plural verb 'කොටති'.",
174
+ "analysis_ta": "வினா: சிங்கள இலக்கணத்தின்படி எழுவாய்-பயனிலை இயைபு சரியாக உள்ள வாக்கியத்தைத் தெரிவு செய்க. 4-வது தெரிவு ('ගොවියෝ කුඹුරු කොටති') பன்மை எழுவாயுடன் ('ගොවියෝ') பன்மை வினைமுற்றை ('කොටති') சரியாக இணைக்கிறது.",
175
+ "answer": "4"
176
+ },
177
+ {
178
+ "question": "නූතන සම්මත සිංහල වර්ණ මාලාවේ අඩංගු මුළු අක්ෂර ගණන කීයද?",
179
+ "choices": [
180
+ "60 කි.",
181
+ "54 කි.",
182
+ "36 කි.",
183
+ "42 කි."
184
+ ],
185
+ "analysis": "The question asks for the total number of letters in the modern standard Sinhala alphabet (Nuthana Sinhala Varnamalawa). It contains 60 letters.",
186
+ "analysis_ta": "வினா: நவீன நியம சிங்கள நெடுங்கணக்கில் உள்ள மொத்த எழுத்துக்களின் எண்ணிக்கை யாது? தெரிவுகள்: (1) 60, (2) 54, (3) 36, (4) 42. நவீன சிங்கள நெடுங்கணக்கில் மொத்தம் 60 எழுத்துக்கள் உள்ளன.",
187
+ "answer": "1"
188
+ },
189
+ {
190
+ "question": "'හිරු' යන පදයට සමානාර්ථ පදයක් නොවන්නේ කුමක්ද?",
191
+ "choices": [
192
+ "සූර්යයා",
193
+ "දිනකර",
194
+ "නිශාකර",
195
+ "රවි"
196
+ ],
197
+ "analysis": "The question asks which word is NOT a synonym for 'Hiru' (Sun). Options: (1) Suryaya (Sun), (2) Dinakara (Sun), (3) Nishakara (Moon - night maker), (4) Ravi (Sun). Nishakara means Moon, not Sun.",
198
+ "analysis_ta": "வினா: 'ஹிரு' (சூரியன்) என்ற சொல்லுக்கு ஒத்த கருத்துச் சொல் அல்லாதது எது? தெரிவுகள்: (1) சூர்யயா (சூரியன்), (2) தினகர (சூரியன்), (3) நிஷாகர (சந்திரன்), (4) ரவி (சூரியன்). நிஷாகர என்பது சந்திரனைக் குறிக்கும்.",
199
+ "answer": "3"
200
+ }
201
+ ],
202
+ "other": [
203
+ {
204
+ "question": "මිනිස් සිරුරේ වර්ධනයට සහ පටක අලුත්වැඩියාවට ප්‍රධාන වශයෙන් අවශ්‍ය වන පෝෂකය කුමක්ද?",
205
+ "choices": [
206
+ "කාබෝහයිඩ්‍රේට්",
207
+ "ප්‍රෝටීන්",
208
+ "ලිපිඩ",
209
+ "ඛනිජ ලවණ"
210
+ ],
211
+ "analysis": "The question asks which nutrient is primarily needed for human body growth and tissue repair. Options: (1) Carbohydrates, (2) Proteins, (3) Lipids, (4) Minerals. Proteins are responsible for growth and tissue repair.",
212
+ "analysis_ta": "வினா: மனித உடல் வளர்ச்சிக்கும் இழையங்களைப் பழுதுபார்த்தலுக்கும் பிரதானமாகத் தேவைப்படும் போசணைப் பொருள் எது? தெரிவுகள்: (1) காபோவைதரேற்று, (2) புரதம், (3) இலிப்பிட்டு, (4) கனியுப்பு. புரதமே உடல் வளர்ச்சிக்குப் பிரதானமாகத் தேவைப்படுகிறது.",
213
+ "answer": "2"
214
+ },
215
+ {
216
+ "question": "සමබල ආහාර වේලක අඩංගු විය යුතු සංඝටකයක් නොවන්නේ කුමක්ද?",
217
+ "choices": [
218
+ "විටමින්",
219
+ "ප්‍රෝටීන්",
220
+ "ජලය",
221
+ "කෘත්‍රිම වර්ණක"
222
+ ],
223
+ "analysis": "The question asks what is NOT an essential component of a balanced diet. Options: (1) Vitamins, (2) Proteins, (3) Water, (4) Artificial colorings. Artificial colorings are not part of a healthy balanced diet.",
224
+ "analysis_ta": "வினா: சமநிலை உணவில் அடங்கக்கூடாத கூறு எது? தெரிவுகள்: (1) விற்றமின், (2) புரதம், (3) நீர், (4) செயற்கை நிறமூட்டிகள். செயற்கை நிறமூட்டிகள் சமநிலை உணவின் கூறு அல்ல.",
225
+ "answer": "4"
226
+ },
227
+ {
228
+ "question": "පරිගණකයක මධ්‍ය සැකසුම් ඒකකය හඳුන්වන කෙටි නාමය කුමක්ද?",
229
+ "choices": [
230
+ "CPU",
231
+ "RAM",
232
+ "ROM",
233
+ "USB"
234
+ ],
235
+ "analysis": "The question asks for the abbreviation of a computer's Central Processing Unit. It is CPU.",
236
+ "analysis_ta": "வினா: கணினியின் மையச் செயற்பாட்டு அலகைக் குறிக்கும் சுருக்கப் பெயர் யாது? அது CPU ஆகும்.",
237
+ "answer": "1"
238
+ },
239
+ {
240
+ "question": "ශාක වර්ධනය සඳහා අත්‍යවශ්‍ය මහා පෝෂක තුන වන්නේ,",
241
+ "choices": [
242
+ "යකඩ, තඹ, සින්ක්",
243
+ "කැල්සියම්, මැග්නීසියම්, ගෙන්දගම්",
244
+ "නයිට්‍රජන්, පොස්පරස්, පොටෑසියම්",
245
+ "බෝරෝන්, මැංගනීස්, ක්ලෝරීන්"
246
+ ],
247
+ "analysis": "The question asks for the three primary macronutrients essential for plant growth. Options: (3) Nitrogen, Phosphorus, Potassium (NPK). NPK are the three primary macronutrients.",
248
+ "analysis_ta": "வினா: தாவர வளர்ச்சிக்கு அத்தியாவசியமான மூன்று மாபோசணைப் பதார்த்தங்கள் யாவை? தெரிவு (3) நைதரசன், பொசுபரசு, பொட்டாசியம் (NPK) ஆகும்.",
249
+ "answer": "3"
250
+ }
251
+ ]
252
+ }
inference.ipynb CHANGED
@@ -4,41 +4,51 @@
4
  "cell_type": "markdown",
5
  "metadata": {},
6
  "source": [
7
- "# Sinhala MMLU Shared Task - Official System Reproduction Notebook\n",
8
- "**Team:** `team-riswan` \n",
9
- "**Model:** `google/gemma-4-E4B-it` (7.52B active causal LM parameters <= 8.0B)\n\n",
10
- "This notebook installs dependencies and runs the official inference script to reproduce `predictions.jsonl`."
11
- ]
12
  },
13
  {
14
  "cell_type": "code",
15
- "execution_count": null,
16
  "metadata": {},
 
17
  "outputs": [],
18
  "source": [
19
- "!pip install -q torch>=2.4.0 transformers>=4.45.0 accelerate>=0.34.0 huggingface_hub>=0.25.0 numpy>=1.24.0"
20
- ]
 
 
 
 
 
21
  },
22
  {
23
  "cell_type": "code",
24
- "execution_count": null,
25
  "metadata": {},
 
26
  "outputs": [],
27
  "source": [
28
- "\"\"\"\nSinhala MMLU Shared Task - Final inference script\nTeam: team-riswan\nBase Model: google/gemma-4-E4B-it (7.52B active causal LM parameters)\n\nThe organizers will run this file exactly as it is, changing ONLY the DATA_REPO line\nbelow to point to the final Sinhala MMLU dataset:\n\n pip install -r requirements.txt\n python inference.py\n\nRules\n * Everything (models, adapters, extra data) must be downloaded from Hugging Face inside\n this script. No local paths, no Google Drive / Kaggle paths.\n * No API keys or tokens in the code. If something is gated, the organizers log in themselves.\n * No closed or paid APIs. Only your open-weight system (8B total inference parameters or fewer).\n * Deterministic: no sampling (do_sample=False) and a fixed seed, so a re-run gives the same answers.\n * Do not rely on file names, question counts or answers in the dataset. Load every .json file\n in DATA_REPO, as section 1 does. The final dataset has the same structure as the test dataset.\n\"\"\"\n\n# ======================= ORGANIZERS CHANGE ONLY THIS LINE =======================\nDATA_REPO = \"SinhalaMMLU-SharedTask/Sinhala-MMLU-SharedTask-Test-Dataset\"\n# ================================================================================\n\nOUTPUT_FILE = \"predictions.jsonl\"\n\n# ----------------------- TEAM SETTINGS\nMODEL_ID = \"google/gemma-4-E4B-it\"\nSEED = 42\nBATCH = 4\nMAX_NEW_TOKENS = 2048 # Allows complete step-by-step curriculum reasoning\n\nimport json\nimport os\nimport random\nimport re\nimport numpy as np\nimport torch\nfrom huggingface_hub import HfFileSystem, list_repo_files\n\n\ndef set_seed(seed):\n random.seed(seed)\n np.random.seed(seed)\n torch.manual_seed(seed)\n torch.cuda.manual_seed_all(seed)\n\n\n# =============== 1. LOAD THE DATASET FROM HUGGING FACE (do not change) ===============\ndef load_questions(data_repo):\n fs = HfFileSystem()\n files = sorted(f for f in list_repo_files(data_repo, repo_type=\"dataset\") if f.endswith(\".json\"))\n rows = []\n for f in files:\n with fs.open(f\"datasets/{data_repo}/{f}\", \"r\", encoding=\"utf-8\") as fh:\n raw = json.load(fh)\n if isinstance(raw, dict):\n raw = next(v for v in raw.values() if isinstance(v, list))\n for r in raw:\n r[\"_file\"] = f\n rows.append(r)\n return rows\n\n\ndef get_level(r):\n return (r.get(\"metadata\") or {}).get(\"difficulty\") or r[\"_file\"].split(\"/\")[0]\n\n\n# =============== 2. YOUR SYSTEM (Zero-Shot Curriculum Teacher Reasoning) ===============\nSYSTEM_THINK_PROMPT = (\n \"You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), \"\n \"fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four \"\n \"numbered options. Exactly one option is correct. Read the Sinhala carefully, including \"\n \"negations such as '\u0db1\u0ddc\u0dc0\u0db1' / '\u0db1\u0ddc\u0dc0\u0dda' (NOT). If the question or options contain Sanskrit, \"\n \"Hindustani, Pali, Tamil, or technical terms, carefully map them to their standard curriculum \"\n \"meaning. You may reason in English. Finish with the final answer in the form 'Answer: <number>'.\"\n)\n\nANSWER_THINK_RE = re.compile(r\"(?:Answer|\u0db4\u0dd2\u0dc5\u0dd2\u0dad\u0dd4\u0dbb)\\s*[:\uff1a]?\\s*\\**\\s*\\(?([1-4])\\)?\", re.IGNORECASE)\n\n\ndef load_system():\n from transformers import AutoModelForCausalLM, AutoTokenizer\n tok = AutoTokenizer.from_pretrained(MODEL_ID)\n tok.padding_side = \"left\"\n if tok.pad_token is None:\n tok.pad_token = tok.eos_token or tok.unk_token\n \n # Load model with bfloat16 (or float16 fallback) on available GPU/CPU\n dtype = torch.bfloat16 if torch.cuda.is_available() and torch.cuda.is_bf16_supported() else torch.float16\n model = AutoModelForCausalLM.from_pretrained(\n MODEL_ID,\n torch_dtype=dtype,\n device_map=\"auto\"\n )\n model.eval()\n return tok, model\n\n\ndef make_prompt(r):\n choices = r.get(\"choices\")\n if choices is None:\n choices = r.get(\"options\", [])\n if isinstance(choices, dict):\n keys = sorted(choices.keys(), key=lambda x: str(x))\n opt_list = [choices[k] for k in keys]\n else:\n opt_list = list(choices) if choices else []\n\n opts = \"\\n\".join(f\"{i}. {c}\" for i, c in enumerate(opt_list, 1))\n lvl = str(get_level(r)).lower().strip()\n grade = \"6-9\" if lvl == \"easy\" else (\"10-11 (O/L)\" if lvl == \"medium\" else \"12-13 (A/L)\")\n subj = r.get(\"subject\", \"General\")\n qtext = str(r.get(\"question\", \"\")).strip()\n\n user_msg = (\n f\"\u0dc0\u0dd2\u0dc2\u0dba (Subject): {subj} | \u0dc1\u0dca\u200d\u0dbb\u0dda\u0dab\u0dd2\u0dba (Grade): {grade}\\n\\n\"\n f\"\u0db4\u0dca\u200d\u0dbb\u0dc1\u0dca\u0db1\u0dba (Question):\\n{qtext}\\n\\n\"\n f\"\u0dc0\u0dd2\u0d9a\u0dbd\u0dca\u0db4 (Options):\\n{opts}\\n\\n\"\n \"Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'.\"\n )\n return user_msg\n\n\ndef extract_answer(text):\n if not text:\n return \"1\"\n if \"</think>\" in text:\n text = text.split(\"</think>\")[-1]\n text = text.strip()\n\n m = ANSWER_THINK_RE.findall(text)\n if m:\n return m[-1]\n explicit_matches = re.findall(\n r\"(?:\u0db4\u0dd2\u0dc5\u0dd2\u0dad\u0dd4\u0dbb|Answer|Final Answer|Correct Option|\u0db1\u0dd2\u0dc0\u0dd0\u0dbb\u0daf\u0dd2 \u0db4\u0dd2\u0dc5\u0dd2\u0dad\u0dd4\u0dbb|\u0dad\u0ddd\u0dbb\u0dcf\u0d9c\u0dd0\u0db1\u0dd3\u0db8)\\s*(?:is|\u0dc0\u0db1\u0dca\u0db1\u0dda)?\\s*[:\\s*#(\\[]*(?:Option\\s*)?([1-4])\\b\",\n text,\n re.IGNORECASE,\n )\n if explicit_matches:\n return explicit_matches[-1]\n matches = re.findall(r\"\\b([1-4])\\b\", text)\n if matches:\n return matches[-1]\n m2 = re.search(r\"[1-4]\", text)\n return m2.group(0) if m2 else \"1\"\n\n\ndef predict_all(system, rows):\n tok, model = system\n answers = [None] * len(rows)\n\n for b in range(0, len(rows), BATCH):\n batch = rows[b : b + BATCH]\n texts = []\n for r in batch:\n user_content = make_prompt(r)\n messages = [\n {\"role\": \"system\", \"content\": SYSTEM_THINK_PROMPT},\n {\"role\": \"user\", \"content\": user_content},\n ]\n try:\n formatted = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)\n except Exception:\n formatted = f\"{SYSTEM_THINK_PROMPT}\\n\\n{user_content}\\n\\nAnswer:\"\n texts.append(formatted)\n\n enc = tok(texts, return_tensors=\"pt\", padding=True, add_special_tokens=False).to(model.device)\n with torch.no_grad():\n out = model.generate(\n **enc,\n max_new_tokens=MAX_NEW_TOKENS,\n do_sample=False,\n pad_token_id=tok.pad_token_id,\n )\n decoded = tok.batch_decode(out[:, enc[\"input_ids\"].shape[1] :], skip_special_tokens=True)\n for j, d in enumerate(decoded):\n answers[b + j] = extract_answer(d)\n print(f\"Progress: {min(b + BATCH, len(rows))}/{len(rows)}\", end=\"\\r\")\n\n return answers\n\n\n# =============== 3. WRITE PREDICTIONS (do not change) ===============\nif __name__ == \"__main__\":\n set_seed(SEED)\n rows = load_questions(DATA_REPO)\n print(len(rows), \"questions loaded from\", DATA_REPO)\n\n system = load_system()\n answers = predict_all(system, rows)\n\n assert len(answers) == len(rows), \"predict_all() must return one answer per question\"\n with open(OUTPUT_FILE, \"w\", encoding=\"utf-8\") as f:\n for r, a in zip(rows, answers):\n a = str(a).strip()\n assert a in {\"1\", \"2\", \"3\", \"4\"}, f\"invalid answer {a!r} for q_no={r.get('q_no')}\"\n f.write(\n json.dumps(\n {\n \"q_no\": r[\"q_no\"],\n \"subject\": r[\"subject\"],\n \"category\": r[\"category\"],\n \"level\": get_level(r),\n \"answer\": a,\n },\n ensure_ascii=False,\n separators=(\",\", \":\"),\n )\n + \"\\n\"\n )\n print(\"\\nSaved\", OUTPUT_FILE)\n"
29
- ]
 
 
 
 
30
  }
31
  ],
32
  "metadata": {
33
- "language_info": {
34
- "name": "python"
35
- },
36
  "kernelspec": {
37
  "display_name": "Python 3",
38
  "language": "python",
39
  "name": "python3"
 
 
 
 
40
  }
41
  },
42
  "nbformat": 4,
43
- "nbformat_minor": 2
44
- }
 
4
  "cell_type": "markdown",
5
  "metadata": {},
6
  "source": [
7
+ "# SinhalaMMLU — team-riswan, submission #138\n",
8
+ "This notebook runs the reconstructed Ollama pipeline from this repository. Read README.md and REPRODUCIBILITY.md first. Fresh model reproduction is unverified; Pass 3 retains historical sampling. The exact submitted predictions stay untouched.\n",
9
+ "Provision the original Ollama model/runtime before running the last cell. The model setup currently differs from the organisers' Hugging-Face-only template; approval is outstanding.\n"
10
+ ],
11
+ "id": "team-riswan-0"
12
  },
13
  {
14
  "cell_type": "code",
 
15
  "metadata": {},
16
+ "execution_count": null,
17
  "outputs": [],
18
  "source": [
19
+ "%pip install huggingface_hub==2.3.0\n",
20
+ "from huggingface_hub import snapshot_download\n",
21
+ "from pathlib import Path\n",
22
+ "import subprocess, sys\n",
23
+ "repo = Path(snapshot_download('SinhalaMMLU-SharedTask/team-riswan', allow_patterns=['*.py', '*.md', '*.txt', 'training/src/*', 'training/ensemble_v9.py']))\n"
24
+ ],
25
+ "id": "team-riswan-1"
26
  },
27
  {
28
  "cell_type": "code",
 
29
  "metadata": {},
30
+ "execution_count": null,
31
  "outputs": [],
32
  "source": [
33
+ "# Full model run: expensive. No archived predictions are used.\n",
34
+ "run_dir = Path.cwd() / 'rerun'\n",
35
+ "run_dir.mkdir(exist_ok=True)\n",
36
+ "subprocess.run([sys.executable, str(repo / 'inference.py')], cwd=run_dir, check=True)\n"
37
+ ],
38
+ "id": "team-riswan-2"
39
  }
40
  ],
41
  "metadata": {
 
 
 
42
  "kernelspec": {
43
  "display_name": "Python 3",
44
  "language": "python",
45
  "name": "python3"
46
+ },
47
+ "language_info": {
48
+ "name": "python",
49
+ "version": "3"
50
  }
51
  },
52
  "nbformat": 4,
53
+ "nbformat_minor": 5
54
+ }
inference.py CHANGED
@@ -1,22 +1,17 @@
1
  """
2
- Sinhala MMLU Shared Task - Final inference script
3
- Team: team-riswan
4
- Base Model: google/gemma-4-E4B-it (7.52B active causal LM parameters)
5
-
6
- The organizers will run this file exactly as it is, changing ONLY the DATA_REPO line
7
- below to point to the final Sinhala MMLU dataset:
8
-
9
- pip install -r requirements.txt
10
- python inference.py
11
-
12
- Rules
13
- * Everything (models, adapters, extra data) must be downloaded from Hugging Face inside
14
- this script. No local paths, no Google Drive / Kaggle paths.
15
- * No API keys or tokens in the code. If something is gated, the organizers log in themselves.
16
- * No closed or paid APIs. Only your open-weight system (8B total inference parameters or fewer).
17
- * Deterministic: no sampling (do_sample=False) and a fixed seed, so a re-run gives the same answers.
18
- * Do not rely on file names, question counts or answers in the dataset. Load every .json file
19
- in DATA_REPO, as section 1 does. The final dataset has the same structure as the test dataset.
20
  """
21
 
22
  # ======================= ORGANIZERS CHANGE ONLY THIS LINE =======================
@@ -25,33 +20,46 @@ DATA_REPO = "SinhalaMMLU-SharedTask/Sinhala-MMLU-SharedTask-Test-Dataset"
25
 
26
  OUTPUT_FILE = "predictions.jsonl"
27
 
28
- # ----------------------- TEAM SETTINGS
29
- MODEL_ID = "google/gemma-4-E4B-it"
30
- SEED = 42
31
- BATCH = 4
32
- MAX_NEW_TOKENS = 2048 # Allows complete step-by-step curriculum reasoning
33
 
 
34
  import json
35
  import os
36
- import random
37
  import re
38
- import numpy as np
39
- import torch
40
- from huggingface_hub import HfFileSystem, list_repo_files
41
-
42
-
43
- def set_seed(seed):
44
- random.seed(seed)
45
- np.random.seed(seed)
46
- torch.manual_seed(seed)
47
- torch.cuda.manual_seed_all(seed)
48
-
49
-
50
- # =============== 1. LOAD THE DATASET FROM HUGGING FACE (do not change) ===============
51
- def load_questions(data_repo):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  fs = HfFileSystem()
53
  files = sorted(f for f in list_repo_files(data_repo, repo_type="dataset") if f.endswith(".json"))
54
- rows = []
55
  for f in files:
56
  with fs.open(f"datasets/{data_repo}/{f}", "r", encoding="utf-8") as fh:
57
  raw = json.load(fh)
@@ -64,11 +72,46 @@ def load_questions(data_repo):
64
 
65
 
66
  def get_level(r):
67
- return (r.get("metadata") or {}).get("difficulty") or r["_file"].split("/")[0]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
 
70
- # =============== 2. YOUR SYSTEM (Zero-Shot Curriculum Teacher Reasoning) ===============
71
- SYSTEM_THINK_PROMPT = (
 
 
 
 
 
 
 
72
  "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
73
  "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
74
  "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
@@ -76,138 +119,394 @@ SYSTEM_THINK_PROMPT = (
76
  "Hindustani, Pali, Tamil, or technical terms, carefully map them to their standard curriculum "
77
  "meaning. You may reason in English. Finish with the final answer in the form 'Answer: <number>'."
78
  )
 
 
 
 
79
 
80
- ANSWER_THINK_RE = re.compile(r"(?:Answer|පිළිතුර)\s*[::]?\s*\**\s*\(?([1-4])\)?", re.IGNORECASE)
81
-
82
-
83
- def load_system():
84
- from transformers import AutoModelForCausalLM, AutoTokenizer
85
- tok = AutoTokenizer.from_pretrained(MODEL_ID)
86
- tok.padding_side = "left"
87
- if tok.pad_token is None:
88
- tok.pad_token = tok.eos_token or tok.unk_token
89
-
90
- # Load model with bfloat16 (or float16 fallback) on available GPU/CPU
91
- dtype = torch.bfloat16 if torch.cuda.is_available() and torch.cuda.is_bf16_supported() else torch.float16
92
- model = AutoModelForCausalLM.from_pretrained(
93
- MODEL_ID,
94
- torch_dtype=dtype,
95
- device_map="auto"
96
- )
97
- model.eval()
98
- return tok, model
99
-
100
-
101
- def make_prompt(r):
102
- choices = r.get("choices")
103
- if choices is None:
104
- choices = r.get("options", [])
105
- if isinstance(choices, dict):
106
- keys = sorted(choices.keys(), key=lambda x: str(x))
107
- opt_list = [choices[k] for k in keys]
108
- else:
109
- opt_list = list(choices) if choices else []
110
 
111
- opts = "\n".join(f"{i}. {c}" for i, c in enumerate(opt_list, 1))
112
- lvl = str(get_level(r)).lower().strip()
113
  grade = "6-9" if lvl == "easy" else ("10-11 (O/L)" if lvl == "medium" else "12-13 (A/L)")
114
- subj = r.get("subject", "General")
115
- qtext = str(r.get("question", "")).strip()
116
-
117
- user_msg = (
118
- f"විෂය (Subject): {subj} | ශ්‍රේණිය (Grade): {grade}\n\n"
119
- f"ප්‍රශ්නය (Question):\n{qtext}\n\n"
120
  f"විකල්ප (Options):\n{opts}\n\n"
121
  "Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'."
122
  )
123
- return user_msg
124
 
125
 
126
- def extract_answer(text):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  if not text:
128
  return "1"
129
  if "</think>" in text:
130
  text = text.split("</think>")[-1]
131
  text = text.strip()
132
-
133
- m = ANSWER_THINK_RE.findall(text)
134
- if m:
135
- return m[-1]
136
- explicit_matches = re.findall(
137
- r"(?:පිළිතුර|Answer|Final Answer|Correct Option|නිවැරදි පිළිතුර|තෝරාගැනීම)\s*(?:is|වන්නේ)?\s*[:\s*#(\[]*(?:Option\s*)?([1-4])\b",
138
- text,
139
- re.IGNORECASE,
140
- )
141
- if explicit_matches:
142
- return explicit_matches[-1]
143
- matches = re.findall(r"\b([1-4])\b", text)
144
- if matches:
145
- return matches[-1]
146
- m2 = re.search(r"[1-4]", text)
147
- return m2.group(0) if m2 else "1"
148
-
149
-
150
- def predict_all(system, rows):
151
- tok, model = system
152
- answers = [None] * len(rows)
153
-
154
- for b in range(0, len(rows), BATCH):
155
- batch = rows[b : b + BATCH]
156
- texts = []
157
- for r in batch:
158
- user_content = make_prompt(r)
159
- messages = [
160
- {"role": "system", "content": SYSTEM_THINK_PROMPT},
161
- {"role": "user", "content": user_content},
162
- ]
163
- try:
164
- formatted = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
165
- except Exception:
166
- formatted = f"{SYSTEM_THINK_PROMPT}\n\n{user_content}\n\nAnswer:"
167
- texts.append(formatted)
168
-
169
- enc = tok(texts, return_tensors="pt", padding=True, add_special_tokens=False).to(model.device)
170
- with torch.no_grad():
171
- out = model.generate(
172
- **enc,
173
- max_new_tokens=MAX_NEW_TOKENS,
174
- do_sample=False,
175
- pad_token_id=tok.pad_token_id,
176
- )
177
- decoded = tok.batch_decode(out[:, enc["input_ids"].shape[1] :], skip_special_tokens=True)
178
- for j, d in enumerate(decoded):
179
- answers[b + j] = extract_answer(d)
180
- print(f"Progress: {min(b + BATCH, len(rows))}/{len(rows)}", end="\r")
181
-
182
- return answers
183
-
184
-
185
- # =============== 3. WRITE PREDICTIONS (do not change) ===============
186
- if __name__ == "__main__":
187
- set_seed(SEED)
188
- rows = load_questions(DATA_REPO)
189
- print(len(rows), "questions loaded from", DATA_REPO)
190
-
191
- system = load_system()
192
- answers = predict_all(system, rows)
193
-
194
- assert len(answers) == len(rows), "predict_all() must return one answer per question"
195
- with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  for r, a in zip(rows, answers):
197
  a = str(a).strip()
198
  assert a in {"1", "2", "3", "4"}, f"invalid answer {a!r} for q_no={r.get('q_no')}"
199
- f.write(
200
- json.dumps(
201
- {
202
- "q_no": r["q_no"],
203
- "subject": r["subject"],
204
- "category": r["category"],
205
- "level": get_level(r),
206
- "answer": a,
207
- },
208
- ensure_ascii=False,
209
- separators=(",", ":"),
210
- )
211
- + "\n"
212
- )
213
- print("\nSaved", OUTPUT_FILE)
 
1
  """
2
+ Reconstructed runner for the stages contributing to Codabench submission #138.
3
+ See README.md and REPRODUCIBILITY.md before using this runner for final ranking.
4
+ The saved-pass merge is byte-exact; fresh model reproduction has NOT been verified.
5
+ Original Kaggle source snapshots are under training/kaggle_cells/.
6
+
7
+ Default: regenerate passes with Ollama, without reading archived test predictions.
8
+ Pass 3 retains historical temperature 0.1 and no explicit seed. This conflicts with
9
+ no-sampling guidance in the supplied template; it is disclosed, not silently changed.
10
+ The historical Mac run stopped after 1160 items of a full priority queue; a fresh
11
+ run completes that queue, since a hard-coded test-count cutoff is not generalizable.
12
+
13
+ Run from a separate output directory to preserve the submitted predictions.jsonl.
14
+ --merge-only is an archival audit, not fresh model inference.
 
 
 
 
 
15
  """
16
 
17
  # ======================= ORGANIZERS CHANGE ONLY THIS LINE =======================
 
20
 
21
  OUTPUT_FILE = "predictions.jsonl"
22
 
23
+ # ----------------------- TEAM SETTINGS (exactly as used for the final submission)
24
+ MODEL_TAG = "gemma4:e4b"
25
+ SEED = None # Original archived requests did not specify an Ollama seed.
26
+ STAGES_DEFAULT = "baselines,pass1,pass2,pass3,pass45,mac"
 
27
 
28
+ import argparse
29
  import json
30
  import os
 
31
  import re
32
+ import shutil
33
+ import subprocess
34
+ import sys
35
+ import time
36
+ import urllib.request
37
+ from collections import Counter
38
+ import hashlib
39
+ import platform
40
+ from concurrent.futures import ThreadPoolExecutor, as_completed
41
+ from pathlib import Path
42
+
43
+ HERE = Path(__file__).resolve().parent
44
+ LEVEL_RANK = {"easy": 0, "medium": 1, "hard": 2}
45
+
46
+
47
+ # =============== 1. LOAD THE DATASET (template loader; `--local-data` is for offline checks only) ===============
48
+ def load_questions(data_repo, local_data=None):
49
+ rows = []
50
+ if local_data:
51
+ for lvl in ("easy", "medium", "hard"):
52
+ for f in sorted((Path(local_data) / lvl).rglob("*.json")):
53
+ raw = json.load(open(f, encoding="utf-8"))
54
+ if isinstance(raw, dict):
55
+ raw = next(v for v in raw.values() if isinstance(v, list))
56
+ for r in raw:
57
+ r["_file"] = f"{lvl}/{f.name}"
58
+ rows.append(r)
59
+ return rows
60
+ from huggingface_hub import HfFileSystem, list_repo_files
61
  fs = HfFileSystem()
62
  files = sorted(f for f in list_repo_files(data_repo, repo_type="dataset") if f.endswith(".json"))
 
63
  for f in files:
64
  with fs.open(f"datasets/{data_repo}/{f}", "r", encoding="utf-8") as fh:
65
  raw = json.load(fh)
 
72
 
73
 
74
  def get_level(r):
75
+ return str((r.get("metadata") or {}).get("difficulty") or r["_file"].split("/")[0]).lower().strip()
76
+
77
+
78
+ def prepare(rows):
79
+ """Normalise rows (list 'choices', lower-case '_level') and order them easy -> medium -> hard."""
80
+ for r in rows:
81
+ ch = r.get("choices")
82
+ if ch is None:
83
+ ch = r.get("options", [])
84
+ if isinstance(ch, dict):
85
+ ch = [ch[k] for k in sorted(ch.keys(), key=lambda x: str(x))]
86
+ r["choices"] = list(ch)
87
+ r["_level"] = get_level(r)
88
+ # Preserve the organiser loader's row order. Scheduling is handled separately.
89
+ seen = set()
90
+ for r in rows:
91
+ key = kof(r)
92
+ if key in seen:
93
+ raise ValueError(f"Duplicate question key: {key}")
94
+ seen.add(key)
95
+ if r["_level"] not in LEVEL_RANK or len(r["choices"]) != 4:
96
+ raise ValueError(f"Expected known difficulty and four choices: {key}")
97
+ if not rows:
98
+ raise ValueError("No questions were loaded")
99
+ return rows
100
+
101
+
102
+ def kof(q):
103
+ return (q["q_no"], q["subject"], q["category"], q["_level"])
104
 
105
 
106
+ # =============== 2. YOUR SYSTEM ===============
107
+ SYSTEM_THINK = (
108
+ "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
109
+ "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
110
+ "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
111
+ "negations such as 'නොවන' / 'නොවේ' (NOT). You may reason in English. "
112
+ "Finish with the final answer in the form 'Answer: <number>'."
113
+ )
114
+ SYSTEM_THINK_HINT = ( # pass 3 only
115
  "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
116
  "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
117
  "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
 
119
  "Hindustani, Pali, Tamil, or technical terms, carefully map them to their standard curriculum "
120
  "meaning. You may reason in English. Finish with the final answer in the form 'Answer: <number>'."
121
  )
122
+ ANS_RE = re.compile(r"(?:Answer|පිළිතුර)\s*[::]?\s*\**\s*\(?([1-4])\)?", re.I)
123
+ POS_RE = re.compile(r"ඉහත|above|\b[1-4]\s*(?:හා|සහ|හෝ|,|and|or)\s*[1-4]\b", re.I)
124
+ STOP_NONTHINK = ["\nප්‍රශ්නය:", "\nQuestion:", "<|im_end|>", "<|endoftext|>", "<|im_start|>"]
125
+ _OPENER = urllib.request.build_opener(urllib.request.ProxyHandler({}))
126
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
 
128
+ def think_user_prompt(q, shift=0):
129
+ lvl = q["_level"]
130
  grade = "6-9" if lvl == "easy" else ("10-11 (O/L)" if lvl == "medium" else "12-13 (A/L)")
131
+ ch = list(q["choices"])
132
+ ch = ch[shift:] + ch[:shift]
133
+ opts = "\n".join(f"{i}. {c}" for i, c in enumerate(ch, 1))
134
+ return (
135
+ f"විෂය (Subject): {q.get('subject', 'General')} | ශ්‍රේණිය (Grade): {grade}\n\n"
136
+ f"ප්‍රශ්නය (Question):\n{str(q['question']).strip()}\n\n"
137
  f"විකල්ප (Options):\n{opts}\n\n"
138
  "Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'."
139
  )
 
140
 
141
 
142
+ # ---------------------------------------------------------------- Ollama plumbing
143
+ def _alive(host):
144
+ try:
145
+ urllib.request.urlopen(f"{host}/api/tags", timeout=3)
146
+ return True
147
+ except Exception:
148
+ return False
149
+
150
+
151
+ def ensure_ollama(hosts):
152
+ """Check/start existing Ollama; model provisioning is an explicit setup step."""
153
+ if shutil.which("ollama") is None:
154
+ raise RuntimeError("Install Ollama first (see README.md). No automatic shell installer is executed.")
155
+ for idx, host in enumerate(hosts):
156
+ if not _alive(host):
157
+ if not host.startswith(("http://127.0.0.1:", "http://localhost:")):
158
+ raise RuntimeError(f"Only local Ollama hosts are supported: {host}")
159
+ env = {**os.environ, "OLLAMA_HOST": host.replace("http://", ""), "OLLAMA_NUM_PARALLEL": "2",
160
+ "OLLAMA_FLASH_ATTENTION": "1", "OLLAMA_KEEP_ALIVE": "24h"}
161
+ if len(hosts) > 1:
162
+ env["CUDA_VISIBLE_DEVICES"] = str(idx)
163
+ subprocess.Popen(["ollama", "serve"], env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
164
+ for _ in range(60):
165
+ if _alive(host):
166
+ break
167
+ time.sleep(1)
168
+ with _OPENER.open(f"{host}/api/tags", timeout=10) as response:
169
+ tags = json.load(response).get("models", [])
170
+ model = next((m for m in tags if MODEL_TAG in (m.get("name"), m.get("model"))), None)
171
+ if model is None:
172
+ raise RuntimeError(f"{MODEL_TAG} is not installed on {host}. Provision the exact original model first.")
173
+ print("Ollama model:", model.get("name"), "digest:", model.get("digest"), flush=True)
174
+
175
+
176
+
177
+ def default_hosts():
178
+ env = os.environ.get("OLLAMA_HOSTS")
179
+ if env:
180
+ return [h.strip() if h.strip().startswith("http") else f"http://{h.strip()}" for h in env.split(",")]
181
+ try:
182
+ n = len(subprocess.run(["nvidia-smi", "-L"], capture_output=True, text=True).stdout.strip().splitlines())
183
+ except Exception:
184
+ n = 0
185
+ return ["http://127.0.0.1:11434", "http://127.0.0.1:11435"] if n >= 2 else ["http://127.0.0.1:11434"]
186
+
187
+
188
+ def chat(host, system, user, think, options, timeout=420):
189
+ payload = json.dumps({
190
+ "model": MODEL_TAG,
191
+ "messages": [{"role": "system", "content": system}, {"role": "user", "content": user}],
192
+ "stream": False, "think": think, "options": options,
193
+ }).encode("utf-8")
194
+ req = urllib.request.Request(f"{host}/api/chat", data=payload, headers={"Content-Type": "application/json"})
195
+ with _OPENER.open(req, timeout=timeout) as resp:
196
+ msg = json.loads(resp.read().decode("utf-8")).get("message", {})
197
+ return msg.get("content", "") or "", msg.get("thinking", "") or ""
198
+
199
+
200
+ def extract_think(content, thinking, digit_fallback=True):
201
+ """Answer digit from a thinking-mode reply, or None."""
202
+ m = ANS_RE.findall(content) or ANS_RE.findall(thinking)
203
+ if m:
204
+ return m[-1]
205
+ if digit_fallback:
206
+ d = re.findall(r"\b([1-4])\b", content if content.strip() else thinking)
207
+ if d:
208
+ return d[-1]
209
+ return None
210
+
211
+
212
+ def extract_answer_digit(text):
213
+ """Answer extraction for the non-thinking 4-shot baselines (same as training/src/baseline_runner.py)."""
214
  if not text:
215
  return "1"
216
  if "</think>" in text:
217
  text = text.split("</think>")[-1]
218
  text = text.strip()
219
+ ex = re.findall(r"(?:පිළිතුර|Answer|Final Answer|Correct Option|නිවැරදි පිළිතුර|තෝරාගැනීම)\s*(?:is|වන්නේ)?\s*[:\s*#(\[]*(?:Option\s*)?([1-4])\b", text, re.I)
220
+ if ex:
221
+ return ex[-1]
222
+ m = re.match(r"^[(\[]?\s*([1-4])\b", text)
223
+ if m and len(text) <= 8:
224
+ return m.group(1)
225
+ d = re.findall(r"\b([1-4])\b", text)
226
+ if d:
227
+ return d[-1]
228
+ m = re.search(r"[1-4]", text)
229
+ return m.group(0) if m else "1"
230
+
231
+
232
+ # ---------------------------------------------------------------- checkpointed parallel runner
233
+ def load_ck(path, required=False):
234
+ res = {}
235
+ path = Path(path)
236
+ if not path.exists():
237
+ if required:
238
+ raise FileNotFoundError(f"Required saved pass missing: {path}")
239
+ return res
240
+ with path.open(encoding="utf-8") as f:
241
+ for number, line in enumerate(f, 1):
242
+ if line.strip():
243
+ r = json.loads(line)
244
+ key = (r["q_no"], r["subject"], r["category"], r["level"])
245
+ answer = str(r["answer"])
246
+ if key in res or answer not in {"1", "2", "3", "4"}:
247
+ raise ValueError(f"Duplicate key or invalid answer at {path}:{number}")
248
+ res[key] = answer
249
+ return res
250
+
251
+
252
+ def run_stage(name, qs, solver, ck_path, hosts, workers):
253
+ """Run solver(host, q) -> answer-or-None for every question in qs not yet in the checkpoint."""
254
+ done = load_ck(ck_path)
255
+ todo = [q for q in qs if kof(q) not in done]
256
+ print(f"[{name}] targets={len(qs)} done={len(done)} todo={len(todo)}", flush=True)
257
+ t0 = time.time()
258
+ n = 0
259
+ with open(ck_path, "a", encoding="utf-8") as fo, ThreadPoolExecutor(max_workers=workers) as ex:
260
+ futs = {ex.submit(solver, hosts[i % len(hosts)], q): q for i, q in enumerate(todo)}
261
+ for fut in as_completed(futs):
262
+ q = futs[fut]
263
+ ans = fut.result()
264
+ if ans is not None:
265
+ fo.write(json.dumps({"q_no": q["q_no"], "subject": q["subject"], "category": q["category"],
266
+ "level": q["_level"], "answer": ans}, ensure_ascii=False) + "\n")
267
+ fo.flush()
268
+ done[kof(q)] = ans
269
+ n += 1
270
+ if n % 20 == 0 or n == len(todo):
271
+ print(f" [{name}] {n}/{len(todo)} ({(time.time() - t0) / 60:.1f} min)", flush=True)
272
+ return done
273
+
274
+
275
+ def tries(fn, n=2):
276
+ for _ in range(n):
277
+ try:
278
+ return fn()
279
+ except Exception as exc:
280
+ print(f"Model request failed ({type(exc).__name__}): {exc}", file=sys.stderr, flush=True)
281
+ time.sleep(2)
282
+ return None
283
+
284
+
285
+ # ---------------------------------------------------------------- stages
286
+ def stage_baseline(qs, hosts, workers, wd, cot):
287
+ sys.path.insert(0, str(training_src()))
288
+ from few_shot_prompts import build_few_shot_prompt
289
+ system = ("You are an expert examiner for the Sri Lankan school curriculum (Sinhala medium). "
290
+ "For each multiple-choice question, write a concise 1-2 sentence English translation and fact-check ('Analysis:'), "
291
+ "then end on a new line with strictly 'Answer: <digit>' (where <digit> is 1, 2, 3, or 4)."
292
+ if cot else
293
+ "You are an examination AI for the Sri Lankan school curriculum (Sinhala medium). "
294
+ "For every multiple-choice question, analyze the options carefully and answer by replying "
295
+ "with ONLY the single digit of the best option (1, 2, 3, or 4). "
296
+ "Do NOT provide explanations, do NOT include option text, and do NOT write anything other than the single digit.")
297
+ opts = {"temperature": 0.0, "num_predict": 260 if cot else 15, "stop": STOP_NONTHINK}
298
+
299
+ def solve(host, q):
300
+ prompt = build_few_shot_prompt(q, num_shots=4, cot=cot, cot_lang="en")
301
+ r = tries(lambda: chat(host, system, prompt, False, opts, 240), n=1)
302
+ return extract_answer_digit(r[0]) if r else "1"
303
+
304
+ return run_stage("cot" if cot else "direct", qs, solve, wd / ("baseline_cot_4shot.jsonl" if cot else "baseline_direct_4shot.jsonl"), hosts, workers)
305
+
306
+
307
+ def stage_pass1(qs, hosts, workers, wd, cot, name="pass1", ck="pass1_think_2048_orig.jsonl"):
308
+ opts = {"temperature": 0.0, "num_predict": 2048}
309
+
310
+ def solve(host, q):
311
+ r = tries(lambda: chat(host, SYSTEM_THINK, think_user_prompt(q), True, opts, 240), n=1)
312
+ a = extract_think(*r) if r else None
313
+ return a if a else cot.get(kof(q), "1")
314
+
315
+ return run_stage(name, qs, solve, wd / ck, hosts, workers)
316
+
317
+
318
+ def stage_rot(qs, hosts, workers, wd, shift, name, ck, p1, cot, fallback=True):
319
+ """Rotated-options pass (4096 tokens, greedy). Predictions are mapped back to the original option numbers."""
320
+ opts = {"temperature": 0.0, "num_predict": 4096}
321
+
322
+ def solve(host, q):
323
+ r = tries(lambda: chat(host, SYSTEM_THINK, think_user_prompt(q, shift), True, opts, 300), n=1 if fallback else 2)
324
+ if r is None:
325
+ return (p1.get(kof(q)) or cot.get(kof(q), "1")) if fallback else None
326
+ a = extract_think(*r, digit_fallback=fallback)
327
+ if a is None:
328
+ if not fallback:
329
+ return None
330
+ a = "1" # Original Pass 2 defaults to rotated option 1, then maps back.
331
+ return str(((int(a) - 1 + shift) % 4) + 1)
332
+
333
+ return run_stage(name, qs, solve, wd / ck, hosts, workers)
334
+
335
+
336
+ def stage_pass3(qs, hosts, workers, wd, p1):
337
+ opts = {"temperature": 0.1, "top_p": 0.95, "num_predict": 4096}
338
+
339
+ def solve(host, q):
340
+ r = tries(lambda: chat(host, SYSTEM_THINK_HINT, think_user_prompt(q), True, opts, 300), n=3)
341
+ if r is None:
342
+ return p1.get(kof(q), "1")
343
+ return extract_think(*r) or "1"
344
+
345
+ return run_stage("pass3", qs, solve, wd / "pass3_think_4096_hint.jsonl", hosts, workers)
346
+
347
+
348
+ # =============== merge: fixed level-aware weighted vote (identical to training/ensemble_v9.py) ===============
349
+ def merge_one(k, pos, p1, p2, p3, p4, p5, mac, cot, dr):
350
+ lvl = k[3]
351
+ v = Counter()
352
+ if lvl == "hard":
353
+ v[p1[k]] += 1.15
354
+ if k in mac: v[mac[k]] += 1.10
355
+ if k in p3: v[p3[k]] += 1.10
356
+ for m in (p2, p4, p5):
357
+ if k in m and k not in pos: v[m[k]] += 1.10
358
+ if k in cot: v[cot[k]] += 0.35
359
+ if k in dr: v[dr[k]] += 0.35
360
+ elif lvl == "medium":
361
+ v[p1[k]] += 1.25
362
+ if k in mac: v[mac[k]] += 1.05
363
+ if k in p3: v[p3[k]] += 1.10
364
+ for m in (p2, p4, p5):
365
+ if k in m and k not in pos: v[m[k]] += 1.05
366
+ if k in cot: v[cot[k]] += 0.35
367
+ if k in dr: v[dr[k]] += 0.35
368
+ else: # easy: pass 1 anchored at 2.40 so only a margin >= 2 supermajority can overturn it
369
+ v[p1[k]] += 2.40
370
+ if k in mac: v[mac[k]] += 1.0
371
+ if k in p3: v[p3[k]] += 1.0
372
+ for m in (p2, p4, p5):
373
+ if k in m and k not in pos: v[m[k]] += 0.95
374
+ if k in cot: v[cot[k]] += 0.30
375
+ if k in dr: v[dr[k]] += 0.30
376
+ return v.most_common(1)[0][0]
377
+
378
+
379
+ def training_src():
380
+ p = HERE / "training" / "src"
381
+ if not (p / "few_shot_prompts.py").exists():
382
+ raise FileNotFoundError("Download the complete team repository, including training/src.")
383
+ return p
384
+
385
+
386
+ def priority_order(rows, cot, dr):
387
+ # Original scheduler: disagreements first, then hard -> medium -> easy.
388
+ canonical = sorted(rows, key=lambda q: (LEVEL_RANK[q["_level"]], q["_file"]))
389
+ return sorted(canonical, key=lambda q: (
390
+ 0 if cot.get(kof(q)) != dr.get(kof(q)) else 1,
391
+ {"hard": 0, "medium": 1, "easy": 2}[q["_level"]]))
392
+
393
+
394
+ def stage_mac(qs, hosts, wd, cot):
395
+ # Original local runner was sequential and used its own broader answer parser.
396
+ sys.path.insert(0, str(training_src()))
397
+ from baseline_runner import extract_answer_digit as original_extract
398
+ def solve(host, q):
399
+ r = tries(lambda: chat(host, SYSTEM_THINK, think_user_prompt(q), True,
400
+ {"temperature": 0.0, "num_predict": 2048}, 240), n=1)
401
+ if r is None:
402
+ return cot.get(kof(q), "1")
403
+ content, thinking = r
404
+ found = ANS_RE.findall(content) or ANS_RE.findall(thinking)
405
+ return found[-1] if found else original_extract(content if content.strip() else thinking)
406
+ return run_stage("mac", qs, solve, wd / "mac_think_2048_orig.jsonl", hosts[:1], 1)
407
+
408
+
409
+ def main():
410
+ ap = argparse.ArgumentParser()
411
+ ap.add_argument("--merge-only", metavar="PASSES_DIR", default=None,
412
+ help="skip the model: merge the saved raw passes (training/passes) -> reproduces predictions.jsonl")
413
+ ap.add_argument("--local-data", metavar="DIR", default=None, help="read easy/medium/hard/*.json from a local folder instead of Hugging Face")
414
+ ap.add_argument("--output", default=OUTPUT_FILE, help="output path; submitted predictions are protected")
415
+ args = ap.parse_args()
416
+ output = Path(args.output).resolve()
417
+ if output == (HERE / "predictions.jsonl").resolve():
418
+ raise ValueError("Do not overwrite submitted predictions.jsonl. Run from a separate folder or use --output.")
419
+
420
+ rows = prepare(load_questions(DATA_REPO, args.local_data))
421
+ limit = int(os.environ.get("LIMIT", "0"))
422
+ if limit:
423
+ keep, cnt = [], Counter()
424
+ for r in rows:
425
+ if cnt[r["_level"]] < limit:
426
+ keep.append(r)
427
+ cnt[r["_level"]] += 1
428
+ rows = keep
429
+ print(len(rows), "questions loaded from", args.local_data or DATA_REPO)
430
+ pos = {kof(q) for q in rows if POS_RE.search(" ".join(map(str, q["choices"])))}
431
+
432
+ if args.merge_only:
433
+ d = Path(args.merge_only)
434
+ names = {"p1": "pass1_think_2048_orig.jsonl", "p2": "pass2_think_4096_rot1.jsonl", "p3": "pass3_think_4096_hint.jsonl",
435
+ "p4": "pass4_think_4096_rot2.jsonl", "p5": "pass5_think_4096_rot3.jsonl", "mac": "mac_think_2048_orig.jsonl",
436
+ "cot": "baseline_cot_4shot.jsonl", "dr": "baseline_direct_4shot.jsonl"}
437
+ M = {k: load_ck(d / v, required=True) for k, v in names.items()}
438
+ expected = {kof(q) for q in rows}
439
+ if set(M["p1"]) != expected:
440
+ raise ValueError("Saved Pass 1 must match the complete input key set (no LIMIT in merge-only mode).")
441
+ if any(set(v) - expected for v in M.values()):
442
+ raise ValueError("Saved passes contain question keys absent from the supplied dataset.")
443
+ else:
444
+ wd = Path(os.environ.get("WORKDIR", "inference_work"))
445
+ wd.mkdir(parents=True, exist_ok=True)
446
+ stages = set(STAGES_DEFAULT.split(","))
447
+ hosts = default_hosts()
448
+ workers = int(os.environ.get("WORKERS", 2 * len(hosts)))
449
+ ensure_ollama(hosts)
450
+ print("hosts:", hosts, "| workers:", workers, "| model:", MODEL_TAG)
451
+
452
+ config = {"dataset_sha256": hashlib.sha256(json.dumps(rows, ensure_ascii=False, sort_keys=True).encode()).hexdigest(),
453
+ "runner_sha256": hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
454
+ "model": MODEL_TAG, "hosts": hosts, "workers": workers,
455
+ "python": platform.python_version(), "seed": None}
456
+ meta = wd / "run_config.json"
457
+ if meta.exists() and json.loads(meta.read_text()) != config:
458
+ raise ValueError("Workdir belongs to a different dataset/configuration. Use a new WORKDIR.")
459
+ meta.write_text(json.dumps(config, indent=2) + "\n")
460
+ print("Fresh-run reconstruction: no guarantee of the historical score; see REPRODUCIBILITY.md.")
461
+ baseline_rows = sorted(rows, key=lambda q: (LEVEL_RANK[q["_level"]], q["_file"]))
462
+ cot = stage_baseline(baseline_rows, hosts[:1], 1, wd, True)
463
+ dr = stage_baseline(baseline_rows, hosts[:1], 1, wd, False)
464
+ priority = priority_order(rows, cot, dr)
465
+ p1 = stage_pass1(priority, hosts, workers, wd, cot)
466
+ rot_ok = [q for q in priority if len(q["choices"]) == 4]
467
+
468
+ # pass 2: hard + questions where the two 4-shot baselines disagree
469
+ t2 = [q for q in rot_ok if q["_level"] == "hard" or cot.get(kof(q)) != dr.get(kof(q))]
470
+ p2 = stage_rot(t2, hosts, workers, wd, 1, "pass2", "pass2_think_4096_rot1.jsonl", p1, cot) if "pass2" in stages else {}
471
+
472
+ # pass 3 targets: Pass1 != Pass2, or (not in Pass2) Pass1 != CoT / Direct
473
+ t3 = []
474
+ for q in baseline_rows:
475
+ k = kof(q)
476
+ if k in p2:
477
+ if p1[k] != p2[k]:
478
+ t3.append(q)
479
+ elif p1[k] != cot.get(k) or p1[k] != dr.get(k):
480
+ t3.append(q)
481
+ p3 = stage_pass3(t3, hosts, workers, wd, p1) if "pass3" in stages else {}
482
+
483
+ # pass 4/5: same uncertain set, only 4-option questions without positional options; unclear replies are skipped
484
+ t45 = [q for q in t3 if len(q["choices"]) == 4 and kof(q) not in pos]
485
+ p4 = stage_rot(t45, hosts, workers, wd, 2, "pass4", "pass4_think_4096_rot2.jsonl", p1, cot, fallback=False) if "pass45" in stages else {}
486
+ p5 = stage_rot(t45, hosts, workers, wd, 3, "pass5", "pass5_think_4096_rot3.jsonl", p1, cot, fallback=False) if "pass45" in stages else {}
487
+
488
+ # The original Mac runner traversed ALL questions in priority order and was stopped.
489
+ # Do not encode a historical test-set count as a new-data selection rule.
490
+ mac = stage_mac(priority, hosts, wd, cot) if "mac" in stages else {}
491
+ M = {"p1": p1, "p2": p2, "p3": p3, "p4": p4, "p5": p5, "mac": mac, "cot": cot, "dr": dr}
492
+
493
+ # =============== 3. WRITE PREDICTIONS ===============
494
+ answers = []
495
+ for r in rows:
496
+ k = kof(r)
497
+ if k not in M["p1"]:
498
+ M["p1"][k] = M["cot"].get(k, "1")
499
+ answers.append(merge_one(k, pos, M["p1"], M["p2"], M["p3"], M["p4"], M["p5"], M["mac"], M["cot"], M["dr"]))
500
+ assert len(answers) == len(rows), "one answer per question required"
501
+ output.parent.mkdir(parents=True, exist_ok=True)
502
+ with output.open("w", encoding="utf-8") as f:
503
  for r, a in zip(rows, answers):
504
  a = str(a).strip()
505
  assert a in {"1", "2", "3", "4"}, f"invalid answer {a!r} for q_no={r.get('q_no')}"
506
+ f.write(json.dumps({"q_no": r["q_no"], "subject": r["subject"], "category": r["category"],
507
+ "level": r["_level"], "answer": a}, ensure_ascii=False) + "\n")
508
+ print("\nSaved", output)
509
+
510
+
511
+ if __name__ == "__main__":
512
+ main()
 
 
 
 
 
 
 
 
model_manifest.json ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "observed_date": "2026-10-28",
3
+ "model_tag": "gemma4:e4b",
4
+ "upstream": "https://huggingface.co/google/gemma-4-E4B-it",
5
+ "local_manifest_sha256": "0314351184bcfc7f88ba25bdaec896325ed6adcc5371674a988be35cd120101d",
6
+ "ollama_client_version_observed": "0.40.7",
7
+ "historical_server_versions": null,
8
+ "historical_kaggle_model_manifest_digest": null,
9
+ "total_parameters_loaded_at_inference": null,
10
+ "component_inventory": {
11
+ "model.audio_tower": 751,
12
+ "model.embed_audio": 1,
13
+ "model.embed_vision": 1,
14
+ "model.language_model": 719,
15
+ "model.vision_tower": 658,
16
+ "config.json": 1,
17
+ "generation_config.json": 1,
18
+ "hf_quant_config.json": 1,
19
+ "processor_config.json": 1,
20
+ "tokenizer.json": 1,
21
+ "tokenizer_config.json": 1,
22
+ "draft.masked_embedding": 2,
23
+ "draft.model": 46,
24
+ "draft.post_projection": 1,
25
+ "draft.pre_projection": 1,
26
+ "draft/config.json": 1,
27
+ "draft/generation_config.json": 1,
28
+ "draft/tokenizer.json": 1,
29
+ "draft/tokenizer_config.json": 1
30
+ },
31
+ "notes": [
32
+ "Manifest presence does not establish runtime loading.",
33
+ "Local Mac tensor metadata describes NVFP4 quantization and an MLX representation. The current manifest contains audio, vision and draft tensors as well as text tensors.",
34
+ "Kaggle notebook pull log shows blob prefixes 370c2879f176 (5.5 GB), 4cb21b935cd7 (991 MB), 05612e54110f (98 MB). These are not full hashes or a complete runtime configuration.",
35
+ "Both Kaggle servers report main model 7,518,069,290 and projector 478,088,384, total 7,996,157,674. Additional runtime components may be checked by organisers during reproduction."
36
+ ],
37
+ "ollama_config": {
38
+ "model_format": "safetensors",
39
+ "model_family": "",
40
+ "model_families": null,
41
+ "model_type": "",
42
+ "file_type": "",
43
+ "renderer": "gemma4",
44
+ "parser": "gemma4",
45
+ "requires": "0.31.0",
46
+ "capabilities": [
47
+ "completion",
48
+ "vision",
49
+ "audio",
50
+ "tools",
51
+ "thinking"
52
+ ],
53
+ "draft": {
54
+ "model_format": "safetensors",
55
+ "architecture": "Gemma4AssistantForCausalLM",
56
+ "tensor_prefix": "draft.",
57
+ "config": "draft/config.json"
58
+ },
59
+ "architecture": "",
60
+ "os": "",
61
+ "rootfs": {
62
+ "type": "",
63
+ "diff_ids": null
64
+ }
65
+ },
66
+ "kaggle_server_version_observed": "0.40.12",
67
+ "reported_parameter_counts": {
68
+ "main_model": 7518069290,
69
+ "projector": 478088384,
70
+ "main_model_plus_projector": 7996157674,
71
+ "billions": 7.996157674,
72
+ "source": "Participant-pasted /api/show diagnostic from Kaggle ports 11434 and 11435, 2026-10-28",
73
+ "scope": "Sum of reported main-model and projector metadata; not a measurement of every loaded runtime component."
74
+ },
75
+ "kaggle_loaded_models_at_diagnostic": {
76
+ "11434": [],
77
+ "11435": []
78
+ }
79
+ }
predictions.jsonl CHANGED
@@ -7,7 +7,7 @@
7
  {"q_no": 7, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
8
  {"q_no": 8, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
9
  {"q_no": 9, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
10
- {"q_no": 10, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
11
  {"q_no": 11, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "1"}
12
  {"q_no": 12, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
13
  {"q_no": 13, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "4"}
@@ -19,9 +19,9 @@
19
  {"q_no": 19, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
20
  {"q_no": 20, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
21
  {"q_no": 21, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
22
- {"q_no": 22, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "1"}
23
  {"q_no": 23, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
24
- {"q_no": 24, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "4"}
25
  {"q_no": 25, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
26
  {"q_no": 26, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
27
  {"q_no": 27, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
@@ -34,7 +34,7 @@
34
  {"q_no": 4, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
35
  {"q_no": 5, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
36
  {"q_no": 6, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
37
- {"q_no": 7, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
38
  {"q_no": 8, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
39
  {"q_no": 9, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
40
  {"q_no": 10, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
@@ -49,11 +49,11 @@
49
  {"q_no": 19, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
50
  {"q_no": 20, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
51
  {"q_no": 21, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
52
- {"q_no": 22, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
53
  {"q_no": 23, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
54
  {"q_no": 24, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
55
  {"q_no": 25, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
56
- {"q_no": 26, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
57
  {"q_no": 27, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
58
  {"q_no": 28, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
59
  {"q_no": 29, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
@@ -116,7 +116,7 @@
116
  {"q_no": 6, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
117
  {"q_no": 7, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
118
  {"q_no": 8, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
119
- {"q_no": 9, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
120
  {"q_no": 10, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
121
  {"q_no": 11, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
122
  {"q_no": 12, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
@@ -131,12 +131,12 @@
131
  {"q_no": 21, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
132
  {"q_no": 22, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
133
  {"q_no": 23, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
134
- {"q_no": 24, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
135
  {"q_no": 25, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
136
- {"q_no": 26, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
137
  {"q_no": 27, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
138
  {"q_no": 28, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
139
- {"q_no": 29, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
140
  {"q_no": 30, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
141
  {"q_no": 31, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
142
  {"q_no": 32, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
@@ -205,7 +205,7 @@
205
  {"q_no": 7, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
206
  {"q_no": 8, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
207
  {"q_no": 9, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
208
- {"q_no": 10, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
209
  {"q_no": 11, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
210
  {"q_no": 12, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
211
  {"q_no": 13, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
@@ -227,7 +227,7 @@
227
  {"q_no": 29, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
228
  {"q_no": 30, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
229
  {"q_no": 31, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
230
- {"q_no": 32, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
231
  {"q_no": 33, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
232
  {"q_no": 34, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
233
  {"q_no": 35, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
@@ -243,8 +243,8 @@
243
  {"q_no": 6, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
244
  {"q_no": 7, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
245
  {"q_no": 8, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
246
- {"q_no": 9, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
247
- {"q_no": 10, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
248
  {"q_no": 11, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
249
  {"q_no": 12, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
250
  {"q_no": 13, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
@@ -257,7 +257,7 @@
257
  {"q_no": 20, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
258
  {"q_no": 21, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
259
  {"q_no": 22, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
260
- {"q_no": 23, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
261
  {"q_no": 24, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
262
  {"q_no": 25, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
263
  {"q_no": 26, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
@@ -296,7 +296,7 @@
296
  {"q_no": 59, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
297
  {"q_no": 60, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
298
  {"q_no": 1, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
299
- {"q_no": 2, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "2"}
300
  {"q_no": 3, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "4"}
301
  {"q_no": 4, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "2"}
302
  {"q_no": 5, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
@@ -321,12 +321,12 @@
321
  {"q_no": 24, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
322
  {"q_no": 25, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
323
  {"q_no": 26, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
324
- {"q_no": 27, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
325
- {"q_no": 28, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
326
  {"q_no": 29, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
327
  {"q_no": 30, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
328
  {"q_no": 31, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
329
- {"q_no": 32, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
330
  {"q_no": 33, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
331
  {"q_no": 34, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
332
  {"q_no": 35, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
@@ -334,7 +334,7 @@
334
  {"q_no": 37, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
335
  {"q_no": 38, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
336
  {"q_no": 39, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
337
- {"q_no": 40, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
338
  {"q_no": 41, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
339
  {"q_no": 42, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
340
  {"q_no": 43, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
@@ -380,7 +380,7 @@
380
  {"q_no": 39, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
381
  {"q_no": 40, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
382
  {"q_no": 41, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
383
- {"q_no": 42, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
384
  {"q_no": 43, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
385
  {"q_no": 44, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
386
  {"q_no": 45, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
@@ -388,7 +388,7 @@
388
  {"q_no": 47, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "4"}
389
  {"q_no": 48, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
390
  {"q_no": 49, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "4"}
391
- {"q_no": 50, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "4"}
392
  {"q_no": 1, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
393
  {"q_no": 2, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "3"}
394
  {"q_no": 3, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
@@ -422,7 +422,7 @@
422
  {"q_no": 31, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
423
  {"q_no": 32, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "4"}
424
  {"q_no": 33, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "3"}
425
- {"q_no": 34, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "4"}
426
  {"q_no": 35, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "1"}
427
  {"q_no": 36, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
428
  {"q_no": 1, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
@@ -431,7 +431,7 @@
431
  {"q_no": 4, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
432
  {"q_no": 5, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
433
  {"q_no": 6, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
434
- {"q_no": 7, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
435
  {"q_no": 8, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
436
  {"q_no": 9, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
437
  {"q_no": 10, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
@@ -452,9 +452,9 @@
452
  {"q_no": 25, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
453
  {"q_no": 26, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
454
  {"q_no": 27, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
455
- {"q_no": 28, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
456
  {"q_no": 29, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
457
- {"q_no": 30, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
458
  {"q_no": 31, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
459
  {"q_no": 32, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
460
  {"q_no": 33, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
@@ -469,13 +469,13 @@
469
  {"q_no": 2, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
470
  {"q_no": 3, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
471
  {"q_no": 4, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
472
- {"q_no": 5, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
473
  {"q_no": 6, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
474
  {"q_no": 7, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
475
  {"q_no": 8, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
476
  {"q_no": 9, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
477
  {"q_no": 10, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
478
- {"q_no": 11, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
479
  {"q_no": 12, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
480
  {"q_no": 13, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
481
  {"q_no": 14, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
@@ -559,14 +559,14 @@
559
  {"q_no": 92, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
560
  {"q_no": 1, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
561
  {"q_no": 2, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
562
- {"q_no": 3, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
563
  {"q_no": 4, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
564
  {"q_no": 5, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
565
  {"q_no": 6, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
566
  {"q_no": 7, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
567
  {"q_no": 8, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
568
  {"q_no": 9, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
569
- {"q_no": 10, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
570
  {"q_no": 11, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
571
  {"q_no": 12, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
572
  {"q_no": 13, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
@@ -580,7 +580,7 @@
580
  {"q_no": 21, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
581
  {"q_no": 22, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
582
  {"q_no": 23, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
583
- {"q_no": 24, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
584
  {"q_no": 25, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
585
  {"q_no": 26, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
586
  {"q_no": 27, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
@@ -622,7 +622,7 @@
622
  {"q_no": 63, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
623
  {"q_no": 64, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
624
  {"q_no": 65, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
625
- {"q_no": 66, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
626
  {"q_no": 67, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
627
  {"q_no": 68, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
628
  {"q_no": 69, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
@@ -632,7 +632,7 @@
632
  {"q_no": 73, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
633
  {"q_no": 74, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
634
  {"q_no": 75, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
635
- {"q_no": 76, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
636
  {"q_no": 77, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
637
  {"q_no": 78, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
638
  {"q_no": 79, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
@@ -735,7 +735,7 @@
735
  {"q_no": 56, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
736
  {"q_no": 57, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
737
  {"q_no": 58, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
738
- {"q_no": 59, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
739
  {"q_no": 60, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
740
  {"q_no": 61, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
741
  {"q_no": 62, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
@@ -784,7 +784,7 @@
784
  {"q_no": 105, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
785
  {"q_no": 106, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
786
  {"q_no": 107, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
787
- {"q_no": 108, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
788
  {"q_no": 109, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
789
  {"q_no": 110, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
790
  {"q_no": 111, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
@@ -878,7 +878,7 @@
878
  {"q_no": 25, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
879
  {"q_no": 26, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
880
  {"q_no": 27, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
881
- {"q_no": 28, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
882
  {"q_no": 29, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
883
  {"q_no": 30, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
884
  {"q_no": 31, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
@@ -1082,7 +1082,7 @@
1082
  {"q_no": 151, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
1083
  {"q_no": 152, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
1084
  {"q_no": 153, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
1085
- {"q_no": 154, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
1086
  {"q_no": 155, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
1087
  {"q_no": 156, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
1088
  {"q_no": 157, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
@@ -1129,7 +1129,7 @@
1129
  {"q_no": 39, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
1130
  {"q_no": 40, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
1131
  {"q_no": 1, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1132
- {"q_no": 2, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1133
  {"q_no": 3, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1134
  {"q_no": 4, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1135
  {"q_no": 5, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
@@ -1147,7 +1147,7 @@
1147
  {"q_no": 17, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1148
  {"q_no": 18, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1149
  {"q_no": 19, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1150
- {"q_no": 20, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1151
  {"q_no": 21, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1152
  {"q_no": 22, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1153
  {"q_no": 23, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
@@ -1231,7 +1231,7 @@
1231
  {"q_no": 101, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1232
  {"q_no": 102, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1233
  {"q_no": 103, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1234
- {"q_no": 104, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1235
  {"q_no": 105, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1236
  {"q_no": 106, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1237
  {"q_no": 107, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
@@ -1335,7 +1335,7 @@
1335
  {"q_no": 15, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
1336
  {"q_no": 16, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
1337
  {"q_no": 17, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
1338
- {"q_no": 18, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
1339
  {"q_no": 19, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
1340
  {"q_no": 20, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
1341
  {"q_no": 21, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
@@ -1363,7 +1363,7 @@
1363
  {"q_no": 7, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
1364
  {"q_no": 8, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1365
  {"q_no": 9, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1366
- {"q_no": 10, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1367
  {"q_no": 11, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1368
  {"q_no": 12, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1369
  {"q_no": 13, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
@@ -1455,7 +1455,7 @@
1455
  {"q_no": 58, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
1456
  {"q_no": 59, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
1457
  {"q_no": 60, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
1458
- {"q_no": 61, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
1459
  {"q_no": 62, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
1460
  {"q_no": 63, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
1461
  {"q_no": 64, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
@@ -1601,7 +1601,7 @@
1601
  {"q_no": 7, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1602
  {"q_no": 8, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
1603
  {"q_no": 9, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
1604
- {"q_no": 10, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
1605
  {"q_no": 11, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
1606
  {"q_no": 12, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1607
  {"q_no": 13, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
@@ -1644,7 +1644,7 @@
1644
  {"q_no": 50, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1645
  {"q_no": 51, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
1646
  {"q_no": 52, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1647
- {"q_no": 53, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1648
  {"q_no": 54, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
1649
  {"q_no": 55, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1650
  {"q_no": 56, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
 
7
  {"q_no": 7, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
8
  {"q_no": 8, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
9
  {"q_no": 9, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
10
+ {"q_no": 10, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
11
  {"q_no": 11, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "1"}
12
  {"q_no": 12, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
13
  {"q_no": 13, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "4"}
 
19
  {"q_no": 19, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
20
  {"q_no": 20, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
21
  {"q_no": 21, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
22
+ {"q_no": 22, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
23
  {"q_no": 23, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
24
+ {"q_no": 24, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
25
  {"q_no": 25, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
26
  {"q_no": 26, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
27
  {"q_no": 27, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
 
34
  {"q_no": 4, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
35
  {"q_no": 5, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
36
  {"q_no": 6, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
37
+ {"q_no": 7, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
38
  {"q_no": 8, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
39
  {"q_no": 9, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
40
  {"q_no": 10, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
 
49
  {"q_no": 19, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
50
  {"q_no": 20, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
51
  {"q_no": 21, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
52
+ {"q_no": 22, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
53
  {"q_no": 23, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
54
  {"q_no": 24, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
55
  {"q_no": 25, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
56
+ {"q_no": 26, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
57
  {"q_no": 27, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
58
  {"q_no": 28, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
59
  {"q_no": 29, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
 
116
  {"q_no": 6, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
117
  {"q_no": 7, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
118
  {"q_no": 8, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
119
+ {"q_no": 9, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
120
  {"q_no": 10, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
121
  {"q_no": 11, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
122
  {"q_no": 12, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
 
131
  {"q_no": 21, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
132
  {"q_no": 22, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
133
  {"q_no": 23, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
134
+ {"q_no": 24, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
135
  {"q_no": 25, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
136
+ {"q_no": 26, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
137
  {"q_no": 27, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
138
  {"q_no": 28, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
139
+ {"q_no": 29, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
140
  {"q_no": 30, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
141
  {"q_no": 31, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
142
  {"q_no": 32, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
 
205
  {"q_no": 7, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
206
  {"q_no": 8, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
207
  {"q_no": 9, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
208
+ {"q_no": 10, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
209
  {"q_no": 11, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
210
  {"q_no": 12, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
211
  {"q_no": 13, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
 
227
  {"q_no": 29, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
228
  {"q_no": 30, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
229
  {"q_no": 31, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
230
+ {"q_no": 32, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
231
  {"q_no": 33, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
232
  {"q_no": 34, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
233
  {"q_no": 35, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
 
243
  {"q_no": 6, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
244
  {"q_no": 7, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
245
  {"q_no": 8, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
246
+ {"q_no": 9, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
247
+ {"q_no": 10, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
248
  {"q_no": 11, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
249
  {"q_no": 12, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
250
  {"q_no": 13, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
 
257
  {"q_no": 20, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
258
  {"q_no": 21, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
259
  {"q_no": 22, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
260
+ {"q_no": 23, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
261
  {"q_no": 24, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
262
  {"q_no": 25, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
263
  {"q_no": 26, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
 
296
  {"q_no": 59, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
297
  {"q_no": 60, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
298
  {"q_no": 1, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
299
+ {"q_no": 2, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "1"}
300
  {"q_no": 3, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "4"}
301
  {"q_no": 4, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "2"}
302
  {"q_no": 5, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
 
321
  {"q_no": 24, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
322
  {"q_no": 25, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
323
  {"q_no": 26, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
324
+ {"q_no": 27, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
325
+ {"q_no": 28, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
326
  {"q_no": 29, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
327
  {"q_no": 30, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
328
  {"q_no": 31, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
329
+ {"q_no": 32, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
330
  {"q_no": 33, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
331
  {"q_no": 34, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
332
  {"q_no": 35, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
 
334
  {"q_no": 37, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
335
  {"q_no": 38, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
336
  {"q_no": 39, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
337
+ {"q_no": 40, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
338
  {"q_no": 41, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
339
  {"q_no": 42, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
340
  {"q_no": 43, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
 
380
  {"q_no": 39, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
381
  {"q_no": 40, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
382
  {"q_no": 41, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
383
+ {"q_no": 42, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
384
  {"q_no": 43, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
385
  {"q_no": 44, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
386
  {"q_no": 45, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
 
388
  {"q_no": 47, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "4"}
389
  {"q_no": 48, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
390
  {"q_no": 49, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "4"}
391
+ {"q_no": 50, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
392
  {"q_no": 1, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
393
  {"q_no": 2, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "3"}
394
  {"q_no": 3, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
 
422
  {"q_no": 31, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
423
  {"q_no": 32, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "4"}
424
  {"q_no": 33, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "3"}
425
+ {"q_no": 34, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "1"}
426
  {"q_no": 35, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "1"}
427
  {"q_no": 36, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
428
  {"q_no": 1, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
 
431
  {"q_no": 4, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
432
  {"q_no": 5, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
433
  {"q_no": 6, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
434
+ {"q_no": 7, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
435
  {"q_no": 8, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
436
  {"q_no": 9, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
437
  {"q_no": 10, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
 
452
  {"q_no": 25, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
453
  {"q_no": 26, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
454
  {"q_no": 27, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
455
+ {"q_no": 28, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
456
  {"q_no": 29, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
457
+ {"q_no": 30, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
458
  {"q_no": 31, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
459
  {"q_no": 32, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
460
  {"q_no": 33, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
 
469
  {"q_no": 2, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
470
  {"q_no": 3, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
471
  {"q_no": 4, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
472
+ {"q_no": 5, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
473
  {"q_no": 6, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
474
  {"q_no": 7, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
475
  {"q_no": 8, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
476
  {"q_no": 9, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
477
  {"q_no": 10, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
478
+ {"q_no": 11, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
479
  {"q_no": 12, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
480
  {"q_no": 13, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
481
  {"q_no": 14, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
 
559
  {"q_no": 92, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
560
  {"q_no": 1, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
561
  {"q_no": 2, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
562
+ {"q_no": 3, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
563
  {"q_no": 4, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
564
  {"q_no": 5, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
565
  {"q_no": 6, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
566
  {"q_no": 7, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
567
  {"q_no": 8, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
568
  {"q_no": 9, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
569
+ {"q_no": 10, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
570
  {"q_no": 11, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
571
  {"q_no": 12, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
572
  {"q_no": 13, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
 
580
  {"q_no": 21, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
581
  {"q_no": 22, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
582
  {"q_no": 23, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
583
+ {"q_no": 24, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
584
  {"q_no": 25, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
585
  {"q_no": 26, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
586
  {"q_no": 27, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
 
622
  {"q_no": 63, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
623
  {"q_no": 64, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
624
  {"q_no": 65, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
625
+ {"q_no": 66, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
626
  {"q_no": 67, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
627
  {"q_no": 68, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
628
  {"q_no": 69, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
 
632
  {"q_no": 73, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
633
  {"q_no": 74, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
634
  {"q_no": 75, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
635
+ {"q_no": 76, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
636
  {"q_no": 77, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
637
  {"q_no": 78, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
638
  {"q_no": 79, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
 
735
  {"q_no": 56, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
736
  {"q_no": 57, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
737
  {"q_no": 58, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
738
+ {"q_no": 59, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
739
  {"q_no": 60, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
740
  {"q_no": 61, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
741
  {"q_no": 62, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
 
784
  {"q_no": 105, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
785
  {"q_no": 106, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
786
  {"q_no": 107, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
787
+ {"q_no": 108, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
788
  {"q_no": 109, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
789
  {"q_no": 110, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
790
  {"q_no": 111, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
 
878
  {"q_no": 25, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
879
  {"q_no": 26, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
880
  {"q_no": 27, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
881
+ {"q_no": 28, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
882
  {"q_no": 29, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
883
  {"q_no": 30, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
884
  {"q_no": 31, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
 
1082
  {"q_no": 151, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
1083
  {"q_no": 152, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
1084
  {"q_no": 153, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
1085
+ {"q_no": 154, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
1086
  {"q_no": 155, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
1087
  {"q_no": 156, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
1088
  {"q_no": 157, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
 
1129
  {"q_no": 39, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
1130
  {"q_no": 40, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
1131
  {"q_no": 1, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1132
+ {"q_no": 2, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1133
  {"q_no": 3, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1134
  {"q_no": 4, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1135
  {"q_no": 5, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
 
1147
  {"q_no": 17, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1148
  {"q_no": 18, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1149
  {"q_no": 19, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1150
+ {"q_no": 20, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1151
  {"q_no": 21, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1152
  {"q_no": 22, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1153
  {"q_no": 23, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
 
1231
  {"q_no": 101, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1232
  {"q_no": 102, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1233
  {"q_no": 103, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
1234
+ {"q_no": 104, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1235
  {"q_no": 105, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
1236
  {"q_no": 106, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
1237
  {"q_no": 107, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
 
1335
  {"q_no": 15, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
1336
  {"q_no": 16, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
1337
  {"q_no": 17, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
1338
+ {"q_no": 18, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
1339
  {"q_no": 19, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
1340
  {"q_no": 20, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
1341
  {"q_no": 21, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
 
1363
  {"q_no": 7, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
1364
  {"q_no": 8, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1365
  {"q_no": 9, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1366
+ {"q_no": 10, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
1367
  {"q_no": 11, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1368
  {"q_no": 12, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
1369
  {"q_no": 13, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
 
1455
  {"q_no": 58, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
1456
  {"q_no": 59, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
1457
  {"q_no": 60, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
1458
+ {"q_no": 61, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
1459
  {"q_no": 62, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
1460
  {"q_no": 63, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
1461
  {"q_no": 64, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
 
1601
  {"q_no": 7, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1602
  {"q_no": 8, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
1603
  {"q_no": 9, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
1604
+ {"q_no": 10, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1605
  {"q_no": 11, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
1606
  {"q_no": 12, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1607
  {"q_no": 13, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
 
1644
  {"q_no": 50, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1645
  {"q_no": 51, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
1646
  {"q_no": 52, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1647
+ {"q_no": 53, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
1648
  {"q_no": 54, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
1649
  {"q_no": 55, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
1650
  {"q_no": 56, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
requirements.txt CHANGED
@@ -1,5 +1,4 @@
1
- torch>=2.4.0
2
- transformers>=4.45.0
3
- accelerate>=0.34.0
4
- huggingface_hub>=0.25.0
5
- numpy>=1.24.0
 
1
+ # Dependency for dataset download in the reconstructed runner (tested at packaging).
2
+ # The original Ollama inference requests and saved-pass merge use Python stdlib only.
3
+ # This is NOT claimed to be the original Kaggle environment lock; see ENVIRONMENT.md.
4
+ huggingface_hub==2.3.0
 
submission_manifest.json ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "team": "riswan",
3
+ "codabench_submission_id": 138,
4
+ "codabench_filename": "submission_think_ens_v9_final.zip",
5
+ "score": {
6
+ "macro": 64.2482,
7
+ "easy": 65.2648,
8
+ "medium": 56.3456,
9
+ "hard": 71.134
10
+ },
11
+ "score_evidence": "User-provided leaderboard screenshot, 2026-10-28; provisional, not recomputed with gold labels.",
12
+ "predictions_sha256": "0998ea38f240c05103a7572a9a367a553f4e2b7664a31fe70f5c9668214dd554",
13
+ "zip_sha256": "8e11a43b16f6d1ad4a8979f9e2fa1954c3cae48549ec7b9591d3bd31a9cc8735",
14
+ "passes": {
15
+ "p1": {
16
+ "file": "training/passes/pass1_think_2048_orig.jsonl",
17
+ "rows": 2238,
18
+ "sha256": "602f9f03dd0e655fe8246826a02896bd1f03e815588a0df7c24838268c890568",
19
+ "original_project_path": "data/predictions_gemma4_think_kaggle_2238.jsonl",
20
+ "matches_original_source": true
21
+ },
22
+ "p2": {
23
+ "file": "training/passes/pass2_think_4096_rot1.jsonl",
24
+ "rows": 1100,
25
+ "sha256": "fecbb30512b11532b28204c5bb9262f87da1d9d7e9e7ae59d7a636d6f7133d50",
26
+ "original_project_path": "predictions_gemma4_think_pass2_ckpt.jsonl",
27
+ "matches_original_source": true
28
+ },
29
+ "p3": {
30
+ "file": "training/passes/pass3_think_4096_hint.jsonl",
31
+ "rows": 720,
32
+ "sha256": "cc724b6eba5b2a42fea1dcd8d143aeedb68406f412fd04fdb0d88028acb2be6c",
33
+ "original_project_path": "predictions_gemma4_think_pass3_ckpt.jsonl",
34
+ "matches_original_source": true
35
+ },
36
+ "p4": {
37
+ "file": "training/passes/pass4_think_4096_rot2.jsonl",
38
+ "rows": 712,
39
+ "sha256": "2b2535b1fd58606d2dd2fe43c268a9901df737f2812cabba4afcbde3572f2292",
40
+ "original_project_path": "predictions_gemma4_think_pass4_ckpt.jsonl",
41
+ "matches_original_source": true
42
+ },
43
+ "p5": {
44
+ "file": "training/passes/pass5_think_4096_rot3.jsonl",
45
+ "rows": 712,
46
+ "sha256": "2b1fdbc3e2abd4ab1c0dc7990fdc0efe2840fe897892508d6d683e967bfec3d7",
47
+ "original_project_path": "predictions_gemma4_think_pass5_ckpt.jsonl",
48
+ "matches_original_source": true
49
+ },
50
+ "mac": {
51
+ "file": "training/passes/mac_think_2048_orig.jsonl",
52
+ "rows": 1160,
53
+ "sha256": "a24d6da87db1b20f82a908f55cc7af9c6320886fd25edf99b5b9673855d468dd",
54
+ "original_project_path": "data/predictions_gemma4_think_ckpt.jsonl",
55
+ "matches_original_source": true
56
+ },
57
+ "cot": {
58
+ "file": "training/passes/baseline_cot_4shot.jsonl",
59
+ "rows": 2238,
60
+ "sha256": "9ee658f029f62d37d0c0bcdef8b15151a6f79d31a9ed780b898e836d26641375",
61
+ "original_project_path": "data/predictions_gemma4_cot.jsonl",
62
+ "matches_original_source": true
63
+ },
64
+ "dr": {
65
+ "file": "training/passes/baseline_direct_4shot.jsonl",
66
+ "rows": 2238,
67
+ "sha256": "24d9a51a2ad13ab4506398bf54b7989e7511fa82c9d36a954fda210d127254b5",
68
+ "original_project_path": "data/predictions_gemma4_direct.jsonl",
69
+ "matches_original_source": true
70
+ }
71
+ }
72
+ }
training/README.md CHANGED
@@ -1,18 +1,19 @@
1
- # Training & Data Preparation — Team team-riswan
2
 
3
- ## 1. Zero-Shot Curriculum-Contextualized Architecture
4
- **No model fine-tuning, parameter updates, or LoRA adapter training was performed.**
5
 
6
- In strict compliance with **Rule 04** (*"No training, tuning, or prompt design on test questions"*) and **Rule 05** (*"Offline inference"*), our system relies entirely on zero-shot inference with native test-time reasoning traces using the frozen open-weight base model **`google/gemma-4-E4B-it`** (released April 2, 2026 under the Apache 2.0 license, compliant with Rule 03).
7
 
8
- ## 2. Test-Time Methodology
9
- Instead of risking overfitting or catastrophic forgetting via low-resource parameter tuning, our performance gains were achieved through test-time curriculum reasoning:
10
- 1. **Curriculum Teacher Contextualization:** Every question is presented with its Sri Lankan national school curriculum domain (`Subject` + `Grade: 6–9 / 10–11 (O/L) / 12–13 (A/L)`) and explicit Sinhala negation-awareness instructions (`නොවන` / `නොවේ`).
11
- 2. **Test-Time Thinking Traces (`think=True`):** The model is allocated a test-time thinking budget (`max_new_tokens=2048`) to reason step-by-step before committing to a final multiple-choice selection.
12
- 3. **Option Position De-Biasing:** To eliminate multiple-choice position bias (where compact LLMs exhibit non-uniform priors over option letters), test-time self-consistency consensus across cyclic option permutations is applied.
 
 
13
 
14
- ## 3. Parameter Count & Rule 02 Compliance
15
- - **Base Model:** `google/gemma-4-E4B-it`
16
- - **Active Loaded Parameters at Inference:** **`7,521,605,888` (`7.52B <= 8.0B`)**
17
- - The text language model backbone (`model.language_model.*`) contains 7.52B parameters.
18
- - Multimodal audio/vision encoders and speculative decoding draft heads are not loaded during text MCQ evaluation, ensuring strict compliance with the 8.0B parameter ceiling.
 
1
+ # Training, input preparation and historical inference
2
 
3
+ No parameter-training stage, LoRA adapter or fine-tuned weights is evidenced in the pipeline that generated submission #138. This is an inference ensemble containing **four-shot baselines**, not a wholly zero-shot system. Preparing prompts and selecting merge rules are distinct from parameter training; the documentation does not certify that the selection history complied with the competition's test-tuning restriction.
 
4
 
5
+ ## Files
6
 
7
+ - `src/few_shot_prompts.py`: embedded category-specific examples and prompt construction, exactly as found in the interrupted package. The actual examples are also exported to `../data/few_shot_examples.json`.
8
+ - `src/few_shot_runner.py`, `src/baseline_runner.py`, `src/prompts.py`: original local runner source snapshots. They include optional validation functionality; this package does not include validation labels or claim those functions were part of final inference. Historical comments asserting external provenance or compliance are unverified author comments, not audit conclusions.
9
+ - `kaggle_cells/`: prior stage source snapshots. Cell 5 now reconstructs the disagreement-based target set in place of an empty placeholder. These snapshots are historical workflow evidence with Kaggle-specific paths; `../inference.py` is the portable reconstruction.
10
+ - `evidence/notebook09f65026da.ipynb`: unchanged participant-exported notebook containing setup, actual Pass-4/5 code and completion logs, and a package-version listing. Use this as the primary source for those stages.
11
+ - `passes/`: model predictions, **not gold answers or training labels**. All eight are required for exact historical replay. They are never inputs to default fresh inference.
12
+ - `passes/positional_option_keys.json`: saved keys selected from question option text by a regex, used only in archival replay. Fresh inference computes the filter from incoming question text.
13
+ - `ensemble_v9.py`: exact final voting logic, now with missing-file/invalid-answer checks. Vote weights were not changed.
14
 
15
+ ## Extra data
16
+
17
+ The final baseline prompts use the examples embedded in the source. The participant previously described external practice data as collected from public sites, but the source code does not record source URLs for these examples. Their authorship, licences and whether closed APIs helped create them need author confirmation. No URL or human verification claim has been invented. Independent practice data prepared elsewhere in the project is not assumed to have been used for this final submission.
18
+
19
+ The supplied evidence establishes source files and saved model outputs, not a complete history of development decisions. See `../REPRODUCIBILITY.md` for unresolved issues.
training/ensemble_v9.py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Final merge ("v9") that produced the leaderboard submission (Codabench ID #138, 64.2482).
4
+
5
+ It is a deterministic weighted vote over the saved raw passes in training/passes/.
6
+ No model is called and no labels are used. This is the exact logic that was run, cleaned only
7
+ to read from the repo layout.
8
+
9
+ python training/ensemble_v9.py # -> predictions_v9_rebuilt.jsonl
10
+ cmp predictions_v9_rebuilt.jsonl predictions.jsonl # identical
11
+
12
+ Each source is a dict {(q_no, subject, category, level): "1".."4"} (answers in ORIGINAL option order):
13
+ p1 : Pass 1 think, 2048 tok, original order, all 2238 questions
14
+ p2 : Pass 2 think, 4096 tok, options rotated by 1 (hard + questions where CoT != Direct)
15
+ p3 : Pass 3 think, 4096 tok, system prompt with Sanskrit/Pali/technical-term hint (uncertain set)
16
+ p4 : Pass 4 think, 4096 tok, options rotated by 2 (uncertain set)
17
+ p5 : Pass 5 think, 4096 tok, options rotated by 3 (uncertain set)
18
+ mac : repeat of the Pass 1 configuration on a second machine (Apple Metal), disputed + hard questions
19
+ cot : 4-shot English CoT baseline (think=False)
20
+ dr : 4-shot direct-answer baseline (think=False)
21
+ Rotated passes (p2, p4, p5) are ignored on questions whose options refer to option positions
22
+ ("ඉහත", "above", "1 සහ 2", ...) because rotation changes the meaning of such options.
23
+ """
24
+ import argparse
25
+ import json
26
+ import re
27
+ from collections import Counter
28
+ from pathlib import Path
29
+
30
+ POS_RE = re.compile(r"ඉහත|above|\b[1-4]\s*(?:හා|සහ|හෝ|,|and|or)\s*[1-4]\b", re.I)
31
+
32
+ PASS_FILES = {
33
+ "p1": "pass1_think_2048_orig.jsonl",
34
+ "p2": "pass2_think_4096_rot1.jsonl",
35
+ "p3": "pass3_think_4096_hint.jsonl",
36
+ "p4": "pass4_think_4096_rot2.jsonl",
37
+ "p5": "pass5_think_4096_rot3.jsonl",
38
+ "mac": "mac_think_2048_orig.jsonl",
39
+ "cot": "baseline_cot_4shot.jsonl",
40
+ "dr": "baseline_direct_4shot.jsonl",
41
+ }
42
+
43
+
44
+ def key_of(r):
45
+ return (r["q_no"], r["subject"], r["category"], r["level"])
46
+
47
+
48
+ def load_map(path):
49
+ m = {}
50
+ with Path(path).open(encoding="utf-8") as f:
51
+ for line_no, line in enumerate(f, 1):
52
+ if line.strip():
53
+ r = json.loads(line)
54
+ k = key_of(r)
55
+ answer = str(r["answer"])
56
+ if k in m or answer not in {"1", "2", "3", "4"}:
57
+ raise ValueError(f"Duplicate key or invalid answer: {path}:{line_no}")
58
+ m[k] = answer
59
+ return m
60
+
61
+
62
+ def merge_one(k, pos, p1, p2, p3, p4, p5, mac, cot, dr):
63
+ """Weighted vote for one question. k = (q_no, subject, category, level)."""
64
+ lvl = k[3]
65
+ v = Counter()
66
+ if lvl == "hard":
67
+ v[p1[k]] += 1.15
68
+ if k in mac: v[mac[k]] += 1.10
69
+ if k in p3: v[p3[k]] += 1.10
70
+ for m in (p2, p4, p5):
71
+ if k in m and k not in pos: v[m[k]] += 1.10
72
+ if k in cot: v[cot[k]] += 0.35
73
+ if k in dr: v[dr[k]] += 0.35
74
+ elif lvl == "medium":
75
+ v[p1[k]] += 1.25
76
+ if k in mac: v[mac[k]] += 1.05
77
+ if k in p3: v[p3[k]] += 1.10
78
+ for m in (p2, p4, p5):
79
+ if k in m and k not in pos: v[m[k]] += 1.05
80
+ if k in cot: v[cot[k]] += 0.35
81
+ if k in dr: v[dr[k]] += 0.35
82
+ else: # easy: Pass 1 anchored at 2.40, so only a margin >= 2 supermajority can overturn it
83
+ v[p1[k]] += 2.40
84
+ if k in mac: v[mac[k]] += 1.0
85
+ if k in p3: v[p3[k]] += 1.0
86
+ for m in (p2, p4, p5):
87
+ if k in m and k not in pos: v[m[k]] += 0.95
88
+ if k in cot: v[cot[k]] += 0.30
89
+ if k in dr: v[dr[k]] += 0.30
90
+ return v.most_common(1)[0][0]
91
+
92
+
93
+ def positional_keys(questions):
94
+ """Keys of questions whose option text refers to option positions (input-only regex)."""
95
+ pos = set()
96
+ for q in questions:
97
+ if POS_RE.search(" ".join(map(str, q["choices"]))):
98
+ pos.add((q["q_no"], q["subject"], q["category"], q["level"]))
99
+ return pos
100
+
101
+
102
+ def main():
103
+ ap = argparse.ArgumentParser()
104
+ ap.add_argument("--passes", default=str(Path(__file__).parent / "passes"))
105
+ ap.add_argument("--data", default=None,
106
+ help="dir with easy/medium/hard/*.json (needed only for the positional-option filter)")
107
+ ap.add_argument("--out", default="predictions_v9_rebuilt.jsonl")
108
+ a = ap.parse_args()
109
+
110
+ if Path(a.out).resolve() == (Path(__file__).resolve().parents[1] / "predictions.jsonl"):
111
+ raise ValueError("Refusing to overwrite the submitted predictions.jsonl; choose a different --out.")
112
+ maps = {n: load_map(Path(a.passes) / f) for n, f in PASS_FILES.items()}
113
+ ref = [json.loads(l) for l in open(Path(a.passes) / PASS_FILES["p1"], encoding="utf-8") if l.strip()]
114
+
115
+ pos = set()
116
+ if a.data:
117
+ qs = []
118
+ for lvl in ("easy", "medium", "hard"):
119
+ for f in sorted((Path(a.data) / lvl).glob("*.json")):
120
+ for q in json.load(open(f, encoding="utf-8")):
121
+ q["level"] = lvl
122
+ qs.append(q)
123
+ pos = positional_keys(qs)
124
+ else:
125
+ pos_file = Path(a.passes) / "positional_option_keys.json"
126
+ pos = {tuple(x) for x in json.load(open(pos_file, encoding="utf-8"))}
127
+
128
+ with open(a.out, "w", encoding="utf-8") as f:
129
+ for q in ref:
130
+ k = key_of(q)
131
+ ans = merge_one(k, pos, maps["p1"], maps["p2"], maps["p3"], maps["p4"], maps["p5"],
132
+ maps["mac"], maps["cot"], maps["dr"])
133
+ f.write(json.dumps({"q_no": q["q_no"], "subject": q["subject"], "category": q["category"],
134
+ "level": q["level"], "answer": ans}, ensure_ascii=False) + "\n")
135
+ print("wrote", a.out)
136
+
137
+
138
+ if __name__ == "__main__":
139
+ main()
training/evidence/dataset_loader_check.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "huggingface_hub": "2.3.0",
3
+ "remote_question_count": 2238,
4
+ "local_question_count": 2238,
5
+ "keys_and_question_text_match": true,
6
+ "fresh_model_run": false
7
+ }
training/evidence/kaggle_environment.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "notebook_metadata": {
3
+ "kernelspec": {
4
+ "language": "python",
5
+ "display_name": "Python 3",
6
+ "name": "python3"
7
+ },
8
+ "language_info": {
9
+ "name": "python",
10
+ "version": "3.13.15",
11
+ "mimetype": "text/x-python",
12
+ "codemirror_mode": {
13
+ "name": "ipython",
14
+ "version": 3
15
+ },
16
+ "pygments_lexer": "ipython3",
17
+ "nbconvert_exporter": "python",
18
+ "file_extension": ".py"
19
+ },
20
+ "kaggle": {
21
+ "accelerator": "none",
22
+ "dataSources": [],
23
+ "dockerImageVersionId": 28755,
24
+ "isInternetEnabled": false,
25
+ "language": "python",
26
+ "sourceType": "notebook",
27
+ "isGpuEnabled": false
28
+ }
29
+ },
30
+ "note": "Notebook metadata reports no active GPU at export. Historical inference outputs and setup cell document dual GPU execution. Freeze cell execution count is 1; do not infer every earlier pass used this identical environment."
31
+ }
training/evidence/kaggle_parameter_metadata.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source": "Diagnostic output pasted by participant in chat, not the full parameter_audit.json file",
3
+ "date": "2026-10-28",
4
+ "servers": {
5
+ "11434": {
6
+ "version": "0.40.12",
7
+ "loaded_models": [],
8
+ "details.parameter_size": "7.5B",
9
+ "model_info.general.parameter_count": 7518069290,
10
+ "projector_info.general.parameter_count": 478088384
11
+ },
12
+ "11435": {
13
+ "version": "0.40.12",
14
+ "loaded_models": [],
15
+ "details.parameter_size": "7.5B",
16
+ "model_info.general.parameter_count": 7518069290,
17
+ "projector_info.general.parameter_count": 478088384
18
+ }
19
+ },
20
+ "reported_main_plus_projector": 7996157674,
21
+ "runtime_component_verification": "Deferred to organisers; no active model runner at capture."
22
+ }
training/evidence/notebook09f65026da.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
training/evidence/original_cell5_pass4_pass5.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # === CELL 5 (standalone): PASS 4 (rot +2) and PASS 5 (rot +3) on the 720 uncertain questions, 4096 tokens ===
2
+ import os, re, json, time, zipfile, shutil, subprocess, urllib.request
3
+ from pathlib import Path
4
+ from concurrent.futures import ThreadPoolExecutor, as_completed
5
+
6
+ # 1. Ollama servers (restart if the session was reset)
7
+ for idx, port in [(0, 11434), (1, 11435)]:
8
+ try:
9
+ urllib.request.urlopen(f"http://127.0.0.1:{port}/api/tags", timeout=3)
10
+ except Exception:
11
+ env = {**os.environ, "CUDA_VISIBLE_DEVICES": str(idx), "OLLAMA_HOST": f"127.0.0.1:{port}",
12
+ "OLLAMA_NUM_PARALLEL": "2", "OLLAMA_FLASH_ATTENTION": "1", "OLLAMA_KEEP_ALIVE": "24h"}
13
+ subprocess.Popen(["ollama", "serve"], env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
14
+ time.sleep(5)
15
+ tags = urllib.request.urlopen("http://127.0.0.1:11434/api/tags", timeout=5).read().decode()
16
+ if "gemma4" not in tags:
17
+ print("gemma4:e4b missing -> pulling (takes a few minutes)...")
18
+ subprocess.run(["ollama", "pull", "gemma4:e4b"], env={**os.environ, "OLLAMA_HOST": "127.0.0.1:11434"})
19
+ if "11435" not in "":
20
+ subprocess.run(["ollama", "pull", "gemma4:e4b"], env={**os.environ, "OLLAMA_HOST": "127.0.0.1:11435"})
21
+
22
+ # 2. Data directory (re-extract if the session was reset)
23
+ work_dir = Path("/kaggle/working/work"); work_dir.mkdir(parents=True, exist_ok=True)
24
+ data_dir = work_dir / "data"
25
+ if not (data_dir / "easy").exists():
26
+ for p in Path("/kaggle/input").rglob("*"):
27
+ if p.name == "kaggle_data.zip":
28
+ zipfile.ZipFile(p).extractall(work_dir); break
29
+ elif p.name == "predictions_gemma4_cot.jsonl":
30
+ shutil.copytree(p.parent.parent, work_dir, dirs_exist_ok=True); break
31
+ print("data dir exists:", (data_dir / "easy").exists())
32
+
33
+ HOSTS = ["http://127.0.0.1:11434", "http://127.0.0.1:11435"]
34
+ POS_RE = re.compile(r"ඉහත|above|\b[1-4]\s*(?:හා|සහ|හෝ|,|and|or)\s*[1-4]\b", re.I)
35
+ ANS_RE = re.compile(r"(?:Answer|පිළිතුර)\s*[::]?\s*\**\s*\(?([1-4])\)?", re.I)
36
+ SYSTEM_THINK = (
37
+ "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
38
+ "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
39
+ "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
40
+ "negations such as 'නොවන' / 'නොවේ' (NOT). You may reason in English. "
41
+ "Finish with the final answer in the form 'Answer: <number>'."
42
+ )
43
+
44
+ # 720 uncertain questions = indices into the canonical order (easy, medium, hard; files sorted)
45
+ TARGET_IDX = set(int(x) for x in "5,9,13,18,20,21,22,23,30,31,32,34,36,37,39,43,50,51,55,63,66,67,69,71,73,75,78,83,85,87,93,94,96,98,99,100,102,104,108,112,113,118,121,124,126,128,130,133,135,136,138,141,144,153,154,157,159,161,162,165,166,167,177,182,186,199,203,207,211,212,214,221,229,230,232,236,238,239,240,244,245,246,248,251,252,253,254,259,260,264,265,266,268,275,277,281,287,288,289,291,292,298,303,304,306,307,310,311,315,323,324,326,328,331,332,336,338,341,346,351,358,359,371,373,375,379,380,382,385,386,388,389,390,400,403,405,419,424,425,426,427,433,437,438,439,442,445,450,451,452,454,456,461,463,468,469,470,471,475,477,478,487,491,499,501,505,506,507,518,522,523,529,537,541,545,550,552,553,556,559,560,561,566,568,570,571,573,576,577,578,580,582,586,591,592,593,598,599,605,610,614,615,618,619,621,624,625,626,627,631,634,637,639,641,642,647,648,649,650,651,653,654,655,658,660,661,662,663,665,666,671,678,679,680,682,685,688,697,701,703,704,713,718,722,725,735,737,743,744,745,746,750,754,755,756,758,761,775,777,778,779,782,783,784,785,786,787,791,792,796,802,805,806,807,808,809,810,814,817,818,819,820,822,828,833,834,836,840,842,845,848,850,854,855,856,858,859,861,862,865,869,871,873,874,880,882,883,885,886,903,904,908,910,912,913,916,918,919,920,921,929,937,955,970,986,990,994,995,998,999,1007,1016,1022,1023,1024,1025,1031,1043,1045,1061,1067,1069,1070,1076,1080,1084,1089,1091,1092,1093,1100,1101,1104,1106,1116,1119,1123,1127,1131,1136,1137,1138,1139,1145,1148,1149,1153,1155,1161,1162,1163,1164,1168,1171,1172,1178,1183,1184,1190,1192,1195,1196,1201,1205,1207,1208,1209,1210,1212,1213,1221,1222,1223,1227,1228,1230,1231,1233,1234,1235,1238,1240,1245,1246,1248,1249,1250,1255,1260,1268,1269,1271,1273,1274,1277,1278,1280,1281,1288,1291,1292,1293,1294,1295,1303,1312,1318,1320,1321,1322,1324,1325,1326,1327,1328,1330,1333,1334,1336,1337,1338,1339,1340,1341,1342,1343,1346,1348,1349,1350,1352,1354,1355,1358,1361,1365,1369,1370,1373,1378,1379,1381,1383,1387,1389,1393,1394,1396,1401,1415,1418,1424,1425,1428,1432,1435,1436,1444,1445,1454,1455,1456,1457,1459,1460,1471,1472,1476,1478,1479,1481,1488,1490,1492,1494,1498,1501,1502,1505,1506,1507,1509,1513,1515,1520,1522,1523,1524,1528,1529,1530,1531,1537,1538,1539,1541,1543,1548,1550,1553,1554,1556,1561,1566,1567,1568,1571,1577,1578,1581,1582,1583,1584,1588,1594,1597,1598,1602,1603,1606,1607,1609,1610,1611,1612,1613,1614,1615,1616,1617,1622,1624,1625,1629,1636,1639,1644,1646,1648,1653,1654,1655,1656,1657,1660,1662,1663,1664,1665,1668,1670,1675,1676,1678,1679,1680,1681,1684,1686,1687,1688,1690,1691,1692,1693,1694,1698,1701,1704,1706,1711,1712,1714,1716,1717,1719,1724,1725,1726,1727,1729,1731,1733,1738,1740,1744,1745,1749,1751,1760,1761,1763,1769,1786,1790,1795,1797,1800,1807,1809,1814,1819,1825,1826,1827,1828,1832,1838,1846,1859,1864,1877,1880,1881,1884,1890,1898,1905,1906,1912,1913,1916,1917,1918,1919,1920,1924,1926,1927,1930,1932,1933,1934,1935,1941,1950,1963,1967,1968,1969,1971,1973,1975,1979,1988,1989,1993,1997,2009,2010,2016,2020,2024,2031,2032,2036,2038,2041,2045,2048,2050,2054,2059,2063,2065,2066,2067,2068,2071,2081,2103,2106,2108,2110,2118,2126,2130,2137,2138,2145,2157,2160,2167,2170,2180,2183,2184,2185,2203,2213,2214,2220,2221,2222,2225,2226,2227,2228,2231,2236".split(","))
46
+
47
+ def qkey(lvl, subj, q_no):
48
+ return f"{str(lvl).lower().strip()}_{str(subj).strip()}_{str(q_no).strip()}"
49
+
50
+ all_qs = []
51
+ for lvl in ["easy", "medium", "hard"]:
52
+ for f in sorted((data_dir / lvl).glob("*.json")):
53
+ for item in json.load(open(f, encoding="utf-8")):
54
+ item["_level"] = lvl
55
+ all_qs.append(item)
56
+ print("Total questions:", len(all_qs), "(expect 2238)")
57
+
58
+ targets = [q for i, q in enumerate(all_qs)
59
+ if i in TARGET_IDX and len(q["choices"]) == 4
60
+ and not POS_RE.search(" ".join(map(str, q["choices"])))]
61
+ print("Targets:", len(targets), "(expect ~715-720)")
62
+
63
+ def solve(args):
64
+ idx, q, shift = args
65
+ host = HOSTS[idx % 2]
66
+ lvl = q["_level"]; subj = q["subject"]
67
+ grade = "6-9" if lvl == "easy" else ("10-11 (O/L)" if lvl == "medium" else "12-13 (A/L)")
68
+ ch = list(q["choices"])
69
+ rot = ch[shift:] + ch[:shift]
70
+ opts = "\n".join(f"{i}. {c}" for i, c in enumerate(rot, 1))
71
+ user = (f"විෂය (Subject): {subj} | ශ්‍රේණිය (Grade): {grade}\n\n"
72
+ f"ප්‍රශ්නය (Question):\n{q['question'].strip()}\n\n"
73
+ f"විකල්ප (Options):\n{opts}\n\n"
74
+ "Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'.")
75
+ payload = json.dumps({"model": "gemma4:e4b",
76
+ "messages": [{"role": "system", "content": SYSTEM_THINK}, {"role": "user", "content": user}],
77
+ "stream": False, "think": True,
78
+ "options": {"temperature": 0.0, "num_predict": 4096}}).encode("utf-8")
79
+ for _ in range(2):
80
+ try:
81
+ req = urllib.request.Request(f"{host}/api/chat", data=payload, headers={"Content-Type": "application/json"})
82
+ with urllib.request.urlopen(req, timeout=300) as resp:
83
+ msg = json.loads(resp.read().decode("utf-8")).get("message", {})
84
+ content, thinking = msg.get("content", "") or "", msg.get("thinking", "") or ""
85
+ m = ANS_RE.findall(content) or ANS_RE.findall(thinking)
86
+ if not m:
87
+ return None # no clear answer: skip so it does not pollute the vote
88
+ orig = str(((int(m[-1]) - 1 + shift) % 4) + 1) # map back to original option numbering
89
+ return {"q_no": q["q_no"], "subject": subj, "category": q.get("category", "general"),
90
+ "level": lvl, "answer": orig}
91
+ except Exception:
92
+ time.sleep(2)
93
+ return None
94
+
95
+ for pass_no, shift in [(4, 2), (5, 3)]:
96
+ ck = Path(f"/kaggle/working/predictions_gemma4_think_pass{pass_no}_ckpt.jsonl")
97
+ done = set()
98
+ if ck.exists():
99
+ for line in open(ck, encoding="utf-8"):
100
+ if line.strip():
101
+ r = json.loads(line); done.add(qkey(r["level"], r["subject"], r["q_no"]))
102
+ todo = [(i, q, shift) for i, q in enumerate(targets) if qkey(q["_level"], q["subject"], q["q_no"]) not in done]
103
+ print(f"Pass {pass_no} (shift {shift}): done {len(done)}, remaining {len(todo)}")
104
+ t0 = time.time(); n = 0
105
+ with open(ck, "a", encoding="utf-8") as fo, ThreadPoolExecutor(max_workers=4) as ex:
106
+ for fut in as_completed([ex.submit(solve, t) for t in todo]):
107
+ r = fut.result()
108
+ if r:
109
+ fo.write(json.dumps(r, ensure_ascii=False) + "\n"); fo.flush()
110
+ n += 1
111
+ if n % 20 == 0:
112
+ print(f" Pass {pass_no}: {n}/{len(todo)} ({(time.time()-t0)/60:.1f} min)", flush=True)
113
+ print(f"PASS {pass_no} COMPLETE -> {ck}")
training/evidence/pass4_pass5_log.txt ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ data dir exists: True
2
+ Total questions: 2238 (expect 2238)
3
+ Targets: 719 (expect ~715-720)
4
+ Pass 4 (shift 2): done 0, remaining 719
5
+ Pass 4: 20/719 (5.3 min)
6
+ Pass 4: 40/719 (7.2 min)
7
+ Pass 4: 60/719 (9.6 min)
8
+ Pass 4: 80/719 (11.6 min)
9
+ Pass 4: 100/719 (14.9 min)
10
+ Pass 4: 120/719 (17.7 min)
11
+ Pass 4: 140/719 (20.7 min)
12
+ Pass 4: 160/719 (23.5 min)
13
+ Pass 4: 180/719 (26.0 min)
14
+ Pass 4: 200/719 (29.5 min)
15
+ Pass 4: 220/719 (33.2 min)
16
+ Pass 4: 240/719 (36.2 min)
17
+ Pass 4: 260/719 (38.9 min)
18
+ Pass 4: 300/719 (44.8 min)
19
+ Pass 4: 320/719 (48.3 min)
20
+ Pass 4: 340/719 (51.3 min)
21
+ Pass 4: 360/719 (53.8 min)
22
+ Pass 4: 400/719 (58.2 min)
23
+ Pass 4: 420/719 (61.0 min)
24
+ Pass 4: 440/719 (64.1 min)
25
+ Pass 4: 460/719 (66.9 min)
26
+ Pass 4: 480/719 (70.1 min)
27
+ Pass 4: 500/719 (72.5 min)
28
+ Pass 4: 520/719 (75.2 min)
29
+ Pass 4: 540/719 (78.3 min)
30
+ Pass 4: 560/719 (82.1 min)
31
+ Pass 4: 580/719 (85.5 min)
32
+ Pass 4: 600/719 (89.2 min)
33
+ Pass 4: 620/719 (93.1 min)
34
+ Pass 4: 640/719 (96.6 min)
35
+ Pass 4: 660/719 (100.3 min)
36
+ Pass 4: 680/719 (103.1 min)
37
+ Pass 4: 700/719 (106.4 min)
38
+ PASS 4 COMPLETE -> /kaggle/working/predictions_gemma4_think_pass4_ckpt.jsonl
39
+ Pass 5 (shift 3): done 0, remaining 719
40
+ Pass 5: 20/719 (2.4 min)
41
+ Pass 5: 40/719 (4.6 min)
42
+ Pass 5: 60/719 (6.9 min)
43
+ Pass 5: 80/719 (9.1 min)
44
+ Pass 5: 100/719 (12.3 min)
45
+ Pass 5: 120/719 (15.3 min)
46
+ Pass 5: 140/719 (18.1 min)
47
+ Pass 5: 160/719 (21.2 min)
48
+ Pass 5: 180/719 (23.9 min)
49
+ Pass 5: 200/719 (27.2 min)
50
+ Pass 5: 220/719 (31.1 min)
51
+ Pass 5: 240/719 (34.0 min)
52
+ Pass 5: 260/719 (36.2 min)
53
+ Pass 5: 280/719 (39.1 min)
54
+ Pass 5: 300/719 (42.2 min)
55
+ Pass 5: 320/719 (45.7 min)
56
+ Pass 5: 340/719 (48.2 min)
57
+ Pass 5: 360/719 (51.2 min)
58
+ Pass 5: 380/719 (53.5 min)
59
+ Pass 5: 400/719 (55.7 min)
60
+ Pass 5: 420/719 (58.9 min)
61
+ Pass 5: 440/719 (62.4 min)
62
+ Pass 5: 460/719 (65.5 min)
63
+ Pass 5: 480/719 (68.4 min)
64
+ Pass 5: 520/719 (73.7 min)
65
+ Pass 5: 540/719 (76.7 min)
66
+ Pass 5: 560/719 (80.4 min)
67
+ Pass 5: 580/719 (83.9 min)
68
+ Pass 5: 600/719 (87.7 min)
69
+ Pass 5: 620/719 (91.5 min)
70
+ Pass 5: 660/719 (99.0 min)
71
+ Pass 5: 680/719 (102.0 min)
72
+ Pass 5: 700/719 (105.6 min)
73
+ PASS 5 COMPLETE -> /kaggle/working/predictions_gemma4_think_pass5_ckpt.jsonl
training/evidence/plumbing_checks.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "checks": 7,
3
+ "result": "passed",
4
+ "model_calls": 0,
5
+ "scope": "Fabricated questions and scripted responses: rotation mapping/fallback, sampling/seed fidelity, data ordering, malformed checkpoints, original-file protection, all-stage orchestration and resumption. Not a model-quality or GPU test."
6
+ }
training/evidence/requirements.original-kaggle-observed.txt ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Observed in notebook export; not an exhaustive historical environment lock.
2
+ accelerate==1.14.0
3
+ pytorch-ignite==0.5.5
4
+ pytorch-lightning==2.6.6
5
+ sentence-transformers==5.7.0
6
+ torch==2.11.0+cu128
7
+ torchao==0.10.0
8
+ torchaudio==2.11.0+cu128
9
+ torchcodec==0.11.0+cu128
10
+ torchdata==0.11.0
11
+ torchinfo==1.8.0
12
+ torchmetrics==1.9.0
13
+ torchsummary==1.5.1
14
+ torchtune==0.6.1
15
+ torchvision==0.26.0+cu128
16
+ transformers==5.16.1
training/evidence/requirements.packaging-check.txt ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ anyio==4.15.1
2
+ click==8.5.0
3
+ filelock==4.2.4
4
+ fsspec==2026.9.0
5
+ h11==0.16.0
6
+ hf-xet==1.7.0
7
+ httpcore2==2.16.0
8
+ httpx2==2.16.0
9
+ huggingface_hub==2.3.0
10
+ idna==3.20
11
+ packaging==26.3
12
+ PyYAML==6.0.3
13
+ tqdm==4.70.1
14
+ truststore==0.10.5
15
+ typing_extensions==4.16.0
training/evidence/verification_report.json ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "submission_id": 138,
3
+ "rows": 2238,
4
+ "sha256": "0998ea38f240c05103a7572a9a367a553f4e2b7664a31fe70f5c9668214dd554",
5
+ "saved_pass_merge_byte_identical": true,
6
+ "pass_counts": {
7
+ "p1": 2238,
8
+ "p2": 1100,
9
+ "p3": 720,
10
+ "p4": 712,
11
+ "p5": 712,
12
+ "mac": 1160,
13
+ "cot": 2238,
14
+ "dr": 2238
15
+ },
16
+ "fresh_model_inference_verified": false,
17
+ "rules_compliance_certified": false,
18
+ "input_checks": {
19
+ "pass2_targets": 1100,
20
+ "pass3_targets": 720,
21
+ "literal_notebook_targets_match": true,
22
+ "pass45_targets": 719,
23
+ "mac_priority_prefix_match": true,
24
+ "omitted_keys": {
25
+ "p4": [
26
+ [
27
+ 17,
28
+ "Communication and Media Studies",
29
+ "other",
30
+ "medium"
31
+ ],
32
+ [
33
+ 18,
34
+ "Physics",
35
+ "stem",
36
+ "hard"
37
+ ],
38
+ [
39
+ 42,
40
+ "Eastern Music",
41
+ "Humanities",
42
+ "easy"
43
+ ],
44
+ [
45
+ 6,
46
+ "Art",
47
+ "humanities",
48
+ "hard"
49
+ ],
50
+ [
51
+ 60,
52
+ "Sinhala Language and Literature",
53
+ "other",
54
+ "easy"
55
+ ],
56
+ [
57
+ 68,
58
+ "Sinhala Language and Literature",
59
+ "other",
60
+ "easy"
61
+ ],
62
+ [
63
+ 8,
64
+ "Sinhala",
65
+ "language",
66
+ "hard"
67
+ ]
68
+ ],
69
+ "p5": [
70
+ [
71
+ 10,
72
+ "Sinhala",
73
+ "language",
74
+ "hard"
75
+ ],
76
+ [
77
+ 133,
78
+ "Sinhala",
79
+ "language",
80
+ "medium"
81
+ ],
82
+ [
83
+ 17,
84
+ "Communication and Media Studies",
85
+ "other",
86
+ "medium"
87
+ ],
88
+ [
89
+ 42,
90
+ "Biology",
91
+ "stem",
92
+ "hard"
93
+ ],
94
+ [
95
+ 6,
96
+ "Art",
97
+ "humanities",
98
+ "hard"
99
+ ],
100
+ [
101
+ 60,
102
+ "Sinhala",
103
+ "language",
104
+ "medium"
105
+ ],
106
+ [
107
+ 68,
108
+ "Sinhala Language and Literature",
109
+ "other",
110
+ "easy"
111
+ ]
112
+ ]
113
+ },
114
+ "few_shot_exact_text_overlaps": [],
115
+ "overlap_check_limit": "Exact normalized question text only; not semantic overlap or contamination certification."
116
+ },
117
+ "both_cli_merge_paths_byte_identical": true,
118
+ "plumbing_regression_tests_passed": 7,
119
+ "remote_dataset_loader_checked": true
120
+ }
training/kaggle_cells/cell1_pass1.py ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json, re, time, zipfile, shutil, urllib.request
2
+ from pathlib import Path
3
+ from concurrent.futures import ThreadPoolExecutor, as_completed
4
+
5
+ # 1. Locate uploaded data in /kaggle/input and copy to /kaggle/working/work
6
+ work_dir = Path("/kaggle/working/work")
7
+ work_dir.mkdir(parents=True, exist_ok=True)
8
+
9
+ for p in Path("/kaggle/input").rglob("*"):
10
+ if p.name == "kaggle_data.zip":
11
+ with zipfile.ZipFile(p, "r") as z:
12
+ z.extractall(work_dir)
13
+ break
14
+ elif p.name == "predictions_gemma4_cot.jsonl":
15
+ root = p.parent.parent
16
+ shutil.copytree(root, work_dir, dirs_exist_ok=True)
17
+ break
18
+
19
+ data_dir = work_dir / "data"
20
+ print("Data directory ready:", data_dir.exists())
21
+
22
+ # 2. Load canonical questions + existing checkpoints
23
+ def load_all_questions(d_dir: Path):
24
+ qs = []
25
+ for lvl in ["easy", "medium", "hard"]:
26
+ for f in sorted((d_dir / lvl).glob("*.json")):
27
+ for item in json.load(open(f, encoding="utf-8")):
28
+ item["_level"] = lvl
29
+ qs.append(item)
30
+ return qs
31
+
32
+ def load_ckpt(path: Path):
33
+ m = {}
34
+ if path.exists():
35
+ for line in open(path, encoding="utf-8"):
36
+ if line.strip():
37
+ r = json.loads(line)
38
+ k = f"{str(r['level']).lower().strip()}_{str(r['subject']).strip()}_{str(r['q_no']).strip()}"
39
+ m[k] = r
40
+ return m
41
+
42
+ canonical_qs = load_all_questions(data_dir)
43
+ cot_map = load_ckpt(data_dir / "predictions_gemma4_cot.jsonl")
44
+ dir_map = load_ckpt(data_dir / "predictions_gemma4_direct.jsonl")
45
+
46
+ # Sort: 749 Disputed (Hard -> Medium -> Easy) first, then Undisputed (Hard -> Medium -> Easy)
47
+ lvl_rank = {"hard": 0, "medium": 1, "easy": 2}
48
+ def sort_key(q):
49
+ k = f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}"
50
+ disputed = 0 if cot_map.get(k, {}).get("answer") != dir_map.get(k, {}).get("answer") else 1
51
+ return (disputed, lvl_rank.get(q["_level"].lower(), 3))
52
+
53
+ priority_qs = sorted(canonical_qs, key=sort_key)
54
+ print(f"Loaded {len(canonical_qs)} total questions. Starting Dual-T4 Parallel Thinking Run...")
55
+
56
+ SYSTEM_THINK = (
57
+ "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
58
+ "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
59
+ "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
60
+ "negations such as 'නොවන' / 'නොවේ' (NOT). You may reason in English. "
61
+ "Finish with the final answer in the form 'Answer: <number>'."
62
+ )
63
+ ANS_RE = re.compile(r"(?:Answer|පිළිතුර)\s*[::]?\s*\**\s*\(?([1-4])\)?", re.I)
64
+ HOSTS = ["http://127.0.0.1:11434", "http://127.0.0.1:11435"]
65
+
66
+ def solve_question(idx_q):
67
+ idx, q = idx_q
68
+ host = HOSTS[idx % 2] # Alternate evenly between T4 GPU #0 and T4 GPU #1
69
+ lvl = q["_level"].lower()
70
+ subj = q.get("subject", "General")
71
+ q_no = q["q_no"]
72
+ q_key = f"{lvl}_{subj.strip()}_{q_no}"
73
+ grade = "6-9" if lvl == "easy" else ("10-11 (O/L)" if lvl == "medium" else "12-13 (A/L)")
74
+ opts = "\n".join(f"{i}. {c}" for i, c in enumerate(q["choices"], 1))
75
+ user_msg = (
76
+ f"විෂය (Subject): {subj} | ශ්‍රේණිය (Grade): {grade}\n\n"
77
+ f"ප්‍රශ්නය (Question):\n{q['question'].strip()}\n\n"
78
+ f"විකල්ප (Options):\n{opts}\n\n"
79
+ "Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'."
80
+ )
81
+ payload = json.dumps({
82
+ "model": "gemma4:e4b",
83
+ "messages": [{"role": "system", "content": SYSTEM_THINK}, {"role": "user", "content": user_msg}],
84
+ "stream": False,
85
+ "think": True,
86
+ "options": {"temperature": 0.0, "num_predict": 2048}
87
+ }).encode("utf-8")
88
+ try:
89
+ req = urllib.request.Request(f"{host}/api/chat", data=payload, headers={"Content-Type": "application/json"})
90
+ with urllib.request.urlopen(req, timeout=240) as resp:
91
+ res = json.loads(resp.read().decode("utf-8"))
92
+ msg = res.get("message", {})
93
+ content, thinking = msg.get("content", ""), msg.get("thinking", "")
94
+ m = ANS_RE.findall(content) or ANS_RE.findall(thinking)
95
+ if m:
96
+ ans = m[-1]
97
+ else:
98
+ digits = re.findall(r"\b([1-4])\b", content if content.strip() else thinking)
99
+ ans = digits[-1] if digits else cot_map.get(q_key, {}).get("answer", "1")
100
+ except Exception as e:
101
+ ans = cot_map.get(q_key, {}).get("answer", "1")
102
+
103
+ return q_key, {
104
+ "q_no": q_no,
105
+ "subject": subj,
106
+ "category": q.get("category", "general"),
107
+ "level": lvl,
108
+ "answer": str(ans)
109
+ }
110
+
111
+ ckpt_path = Path("/kaggle/working/predictions_gemma4_think_ckpt.jsonl")
112
+ full_path = Path("/kaggle/working/predictions.jsonl")
113
+ zip_path = Path("/kaggle/working/submission_gemma4_think.zip")
114
+
115
+ completed_map = load_ckpt(ckpt_path)
116
+ todo = [(i, q) for i, q in enumerate(priority_qs) if f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}" not in completed_map]
117
+ print(f"Already completed: {len(completed_map)} | Remaining to solve: {len(todo)}")
118
+
119
+ def save_outputs():
120
+ with open(ckpt_path, "w", encoding="utf-8") as f:
121
+ for r in completed_map.values():
122
+ f.write(json.dumps(r, ensure_ascii=False) + "\n")
123
+ with open(full_path, "w", encoding="utf-8") as f:
124
+ for q in canonical_qs:
125
+ k = f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}"
126
+ rec = completed_map.get(k) or cot_map.get(k)
127
+ f.write(json.dumps(rec, ensure_ascii=False) + "\n")
128
+ with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
129
+ zf.write(full_path, arcname="predictions.jsonl")
130
+
131
+ t0 = time.time()
132
+ done_count = 0
133
+ with ThreadPoolExecutor(max_workers=4) as ex:
134
+ futures = [ex.submit(solve_question, item) for item in todo]
135
+ for fut in as_completed(futures):
136
+ k, rec = fut.result()
137
+ completed_map[k] = rec
138
+ done_count += 1
139
+ if done_count % 20 == 0 or done_count == len(todo):
140
+ save_outputs()
141
+ elapsed = time.time() - t0
142
+ rate = elapsed / done_count
143
+ print(f"[{len(completed_map)}/2238] ({elapsed/60:.1f}m elapsed, {rate:.1f}s/q effective) -> {zip_path.name} updated!")
training/kaggle_cells/cell3_pass2.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Self-Contained Cell 3: Pass 2 (Shuffled Options + 4096 Token Budget on Hard & Disputed Questions)
2
+ import json, os, re, time, zipfile, shutil, subprocess, urllib.request
3
+ from pathlib import Path
4
+ from concurrent.futures import ThreadPoolExecutor, as_completed
5
+
6
+ # 1. Ensure both Ollama servers (11434 and 11435) are alive
7
+ for idx, port in [(0, 11434), (1, 11435)]:
8
+ try:
9
+ urllib.request.urlopen(f"http://127.0.0.1:{port}/api/tags", timeout=3)
10
+ except Exception:
11
+ print(f"Restarting Ollama server on GPU #{idx} (port {port})...")
12
+ env = {**os.environ, "CUDA_VISIBLE_DEVICES": str(idx), "OLLAMA_HOST": f"127.0.0.1:{port}", "OLLAMA_NUM_PARALLEL": "2", "OLLAMA_FLASH_ATTENTION": "1", "OLLAMA_KEEP_ALIVE": "24h"}
13
+ subprocess.Popen(["ollama", "serve"], env=env, stdout=open(f"/tmp/ollama{idx}.log", "w"), stderr=subprocess.STDOUT)
14
+ time.sleep(4)
15
+
16
+ # 2. Ensure data directory and helper functions are defined
17
+ work_dir = Path("/kaggle/working/work")
18
+ work_dir.mkdir(parents=True, exist_ok=True)
19
+ data_dir = work_dir / "data"
20
+ if not data_dir.exists():
21
+ for p in Path("/kaggle/input").rglob("*"):
22
+ if p.name == "kaggle_data.zip":
23
+ with zipfile.ZipFile(p, "r") as z:
24
+ z.extractall(work_dir)
25
+ break
26
+ elif p.name == "predictions_gemma4_cot.jsonl":
27
+ shutil.copytree(p.parent.parent, work_dir, dirs_exist_ok=True)
28
+ break
29
+
30
+ def load_all_questions(d_dir: Path):
31
+ qs = []
32
+ for lvl in ["easy", "medium", "hard"]:
33
+ for f in sorted((d_dir / lvl).glob("*.json")):
34
+ for item in json.load(open(f, encoding="utf-8")):
35
+ item["_level"] = lvl
36
+ qs.append(item)
37
+ return qs
38
+
39
+ def load_ckpt(path: Path):
40
+ m = {}
41
+ if path.exists():
42
+ for line in open(path, encoding="utf-8"):
43
+ if line.strip():
44
+ r = json.loads(line)
45
+ k = f"{str(r['level']).lower().strip()}_{str(r['subject']).strip()}_{str(r['q_no']).strip()}"
46
+ m[k] = r
47
+ return m
48
+
49
+ canonical_qs = load_all_questions(data_dir)
50
+ cot_map = load_ckpt(data_dir / "predictions_gemma4_cot.jsonl")
51
+ dir_map = load_ckpt(data_dir / "predictions_gemma4_direct.jsonl")
52
+ p1_map = load_ckpt(Path("/kaggle/working/predictions.jsonl"))
53
+
54
+ lvl_rank = {"hard": 0, "medium": 1, "easy": 2}
55
+ def sort_key(q):
56
+ k = f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}"
57
+ disputed = 0 if cot_map.get(k, {}).get("answer") != dir_map.get(k, {}).get("answer") else 1
58
+ return (disputed, lvl_rank.get(q["_level"].lower(), 3))
59
+
60
+ priority_qs = sorted(canonical_qs, key=sort_key)
61
+
62
+ SYSTEM_THINK = (
63
+ "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
64
+ "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
65
+ "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
66
+ "negations such as 'නොවන' / 'නොවේ' (NOT). You may reason in English. "
67
+ "Finish with the final answer in the form 'Answer: <number>'."
68
+ )
69
+ ANS_RE = re.compile(r"(?:Answer|පිළිතුර)\s*[::]?\s*\**\s*\(?([1-4])\)?", re.I)
70
+ HOSTS = ["http://127.0.0.1:11434", "http://127.0.0.1:11435"]
71
+
72
+ p2_ckpt_path = Path("/kaggle/working/predictions_gemma4_think_pass2_ckpt.jsonl")
73
+
74
+ # Target the 749 Disputed questions + all remaining Hard questions (1,074 questions total)
75
+ target_qs = []
76
+ for q in priority_qs:
77
+ k = f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}"
78
+ is_disp = cot_map.get(k, {}).get("answer") != dir_map.get(k, {}).get("answer")
79
+ if is_disp or q["_level"].lower() == "hard":
80
+ target_qs.append(q)
81
+
82
+ p2_map = load_ckpt(p2_ckpt_path)
83
+ todo_p2 = [(i, q) for i, q in enumerate(target_qs) if f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}" not in p2_map]
84
+ print(f"Pass 2 (Shuffled + 4096 tokens) | Already done: {len(p2_map)} | Remaining: {len(todo_p2)}")
85
+
86
+ def solve_question_shuffled(idx_q):
87
+ idx, q = idx_q
88
+ host = HOSTS[idx % 2]
89
+ lvl = q["_level"].lower()
90
+ subj = q.get("subject", "General")
91
+ q_no = q["q_no"]
92
+ q_key = f"{lvl}_{subj.strip()}_{q_no}"
93
+ grade = "6-9" if lvl == "easy" else ("10-11 (O/L)" if lvl == "medium" else "12-13 (A/L)")
94
+
95
+ orig_choices = list(q["choices"])
96
+ rot_choices = orig_choices[1:] + orig_choices[:1]
97
+ opts = "\n".join(f"{i}. {c}" for i, c in enumerate(rot_choices, 1))
98
+ user_msg = (
99
+ f"විෂය (Subject): {subj} | ශ්‍රේණිය (Grade): {grade}\n\n"
100
+ f"ප්‍රශ්නය (Question):\n{q['question'].strip()}\n\n"
101
+ f"විකල්ප (Options):\n{opts}\n\n"
102
+ "Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'."
103
+ )
104
+ payload = json.dumps({
105
+ "model": "gemma4:e4b",
106
+ "messages": [{"role": "system", "content": SYSTEM_THINK}, {"role": "user", "content": user_msg}],
107
+ "stream": False,
108
+ "think": True,
109
+ "options": {"temperature": 0.0, "num_predict": 4096}
110
+ }).encode("utf-8")
111
+ try:
112
+ req = urllib.request.Request(f"{host}/api/chat", data=payload, headers={"Content-Type": "application/json"})
113
+ with urllib.request.urlopen(req, timeout=300) as resp:
114
+ res = json.loads(resp.read().decode("utf-8"))
115
+ msg = res.get("message", {})
116
+ content, thinking = msg.get("content", ""), msg.get("thinking", "")
117
+ m = ANS_RE.findall(content) or ANS_RE.findall(thinking)
118
+ if m:
119
+ rot_ans = m[-1]
120
+ else:
121
+ digits = re.findall(r"\b([1-4])\b", content if content.strip() else thinking)
122
+ rot_ans = digits[-1] if digits else "1"
123
+ rot_idx = int(rot_ans) - 1 if rot_ans in {"1", "2", "3", "4"} else 0
124
+ orig_ans = str(((rot_idx + 1) % 4) + 1)
125
+ except Exception:
126
+ orig_ans = (p1_map.get(q_key) or cot_map.get(q_key, {})).get("answer", "1")
127
+
128
+ return q_key, {
129
+ "q_no": q_no,
130
+ "subject": subj,
131
+ "category": q.get("category", "general"),
132
+ "level": lvl,
133
+ "answer": orig_ans
134
+ }
135
+
136
+ t0 = time.time()
137
+ done_p2 = 0
138
+ with ThreadPoolExecutor(max_workers=4) as ex:
139
+ futures = [ex.submit(solve_question_shuffled, item) for item in todo_p2]
140
+ for fut in as_completed(futures):
141
+ k, rec = fut.result()
142
+ p2_map[k] = rec
143
+ done_p2 += 1
144
+ if done_p2 % 20 == 0 or done_p2 == len(todo_p2):
145
+ with open(p2_ckpt_path, "w", encoding="utf-8") as f:
146
+ for r in p2_map.values():
147
+ f.write(json.dumps(r, ensure_ascii=False) + "\n")
148
+ elapsed = time.time() - t0
149
+ print(f"Pass 2 [{len(p2_map)}/{len(target_qs)}] ({elapsed/60:.1f}m elapsed, {elapsed/done_p2:.1f}s/q)")
training/kaggle_cells/cell4_pass3.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # === STANDALONE CELL 4: PASS 3 (4096 TOKENS + SANSKRIT/TECHNICAL HINT ON 720 TARGET QS) ===
2
+ import os, re, json, time, zipfile, shutil, subprocess, urllib.request
3
+ from pathlib import Path
4
+ from concurrent.futures import ThreadPoolExecutor, as_completed
5
+
6
+ # 1. Ensure both Ollama servers (GPU 0 -> 11434, GPU 1 -> 11435) are running
7
+ for idx, port in [(0, 11434), (1, 11435)]:
8
+ try:
9
+ urllib.request.urlopen(f"http://127.0.0.1:{port}/api/tags", timeout=3)
10
+ except Exception:
11
+ env = {**os.environ, "CUDA_VISIBLE_DEVICES": str(idx), "OLLAMA_HOST": f"127.0.0.1:{port}", "OLLAMA_NUM_PARALLEL": "2", "OLLAMA_FLASH_ATTENTION": "1", "OLLAMA_KEEP_ALIVE": "24h"}
12
+ subprocess.Popen(["ollama", "serve"], env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
13
+ time.sleep(3)
14
+
15
+ # 2. Locate /kaggle/working/work/data (or extract from /kaggle/input if needed)
16
+ work_dir = Path("/kaggle/working/work")
17
+ work_dir.mkdir(parents=True, exist_ok=True)
18
+ data_dir = work_dir / "data"
19
+ if not data_dir.exists():
20
+ for p in Path("/kaggle/input").rglob("*"):
21
+ if p.name == "kaggle_data.zip":
22
+ with zipfile.ZipFile(p, "r") as z:
23
+ z.extractall(work_dir)
24
+ break
25
+ elif p.name == "predictions_gemma4_cot.jsonl":
26
+ shutil.copytree(p.parent.parent, work_dir, dirs_exist_ok=True)
27
+ break
28
+
29
+ def load_all_questions(d_dir: Path):
30
+ qs = []
31
+ for lvl in ["easy", "medium", "hard"]:
32
+ for f in sorted((d_dir / lvl).glob("*.json")):
33
+ for item in json.load(open(f, encoding="utf-8")):
34
+ item["_level"] = lvl
35
+ qs.append(item)
36
+ return qs
37
+
38
+ def load_ckpt(path: Path):
39
+ m = {}
40
+ if path.exists():
41
+ for line in open(path, encoding="utf-8"):
42
+ if line.strip():
43
+ r = json.loads(line)
44
+ k = f"{str(r['level']).lower().strip()}_{str(r['subject']).strip()}_{str(r['q_no']).strip()}"
45
+ m[k] = str(r["answer"])
46
+ return m
47
+
48
+ # NOTE (archive edit): the original cell embedded the 2238 Pass-1 answers as a digit string (P1_DIGITS) to resume
49
+ # after a Kaggle session reset. They are identical to ../passes/pass1_think_2048_orig.jsonl and are loaded from there.
50
+ P1_DIGITS = ''.join(json.loads(l)['answer'] for l in open('/kaggle/working/pass1_think_2048_orig.jsonl', encoding='utf-8') if l.strip())
51
+
52
+ all_qs = load_all_questions(data_dir)
53
+ p1_map = {f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}": P1_DIGITS[i] for i, q in enumerate(all_qs)}
54
+ p2_map = load_ckpt(Path("/kaggle/working/predictions_gemma4_think_pass2_ckpt.jsonl"))
55
+ cot_map = load_ckpt(data_dir / "predictions_gemma4_cot.jsonl")
56
+ dir_map = load_ckpt(data_dir / "predictions_gemma4_direct.jsonl")
57
+
58
+ # Target: (A) 348 questions where P1 != P2, plus (B) 372 questions not in P2 where P1 != CoT or P1 != Direct
59
+ target_qs = []
60
+ for q in all_qs:
61
+ k = f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}"
62
+ if k in p2_map:
63
+ if p1_map.get(k) != p2_map.get(k):
64
+ target_qs.append(q)
65
+ else:
66
+ if p1_map.get(k) != cot_map.get(k) or p1_map.get(k) != dir_map.get(k):
67
+ target_qs.append(q)
68
+
69
+ p3_ckpt_path = Path("/kaggle/working/predictions_gemma4_think_pass3_ckpt.jsonl")
70
+ done_p3 = load_ckpt(p3_ckpt_path)
71
+ rem_p3 = [q for q in target_qs if f"{q['_level'].lower()}_{q['subject'].strip()}_{q['q_no']}" not in done_p3]
72
+ print(f"Pass 3 Target: {len(target_qs)} questions | Already done: {len(done_p3)} | Remaining: {len(rem_p3)}")
73
+
74
+ SYSTEM_THINK_PROMPT = (
75
+ "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
76
+ "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
77
+ "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
78
+ "negations such as 'නොවන' / 'නොවේ' (NOT). If the question or options contain Sanskrit, "
79
+ "Hindustani, Pali, Tamil, or technical terms, carefully map them to their standard curriculum "
80
+ "meaning. You may reason in English. Finish with the final answer in the form 'Answer: <number>'."
81
+ )
82
+ ANSWER_THINK_RE = re.compile(r"(?:Answer|පිළිතුර)\s*[::]?\s*\**\s*\(?([1-4])\)?", re.IGNORECASE)
83
+
84
+ def solve_p3(idx_q):
85
+ idx, q = idx_q
86
+ port = 11434 if (idx % 2 == 0) else 11435
87
+ lvl = q["_level"].lower()
88
+ subj = q.get("subject", "General")
89
+ q_no = q["q_no"]
90
+ q_key = f"{lvl}_{subj.strip()}_{q_no}"
91
+ grade = "6-9" if lvl == "easy" else ("10-11 (O/L)" if lvl == "medium" else "12-13 (A/L)")
92
+ opts = "\n".join(f"{i}. {c}" for i, c in enumerate(q["choices"], 1))
93
+ user_msg = (
94
+ f"විෂය (Subject): {subj} | ශ්‍රේණිය (Grade): {grade}\n\n"
95
+ f"ප්‍රශ්නය (Question):\n{q['question'].strip()}\n\n"
96
+ f"විකල්ප (Options):\n{opts}\n\n"
97
+ "Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'."
98
+ )
99
+ payload = {
100
+ "model": "gemma4:e4b",
101
+ "messages": [
102
+ {"role": "system", "content": SYSTEM_THINK_PROMPT},
103
+ {"role": "user", "content": user_msg},
104
+ ],
105
+ "think": True,
106
+ "stream": False,
107
+ "options": {"temperature": 0.1, "top_p": 0.95, "num_predict": 4096},
108
+ }
109
+ for attempt in range(3):
110
+ try:
111
+ req = urllib.request.Request(
112
+ f"http://127.0.0.1:{port}/api/chat",
113
+ data=json.dumps(payload).encode("utf-8"),
114
+ headers={"Content-Type": "application/json"},
115
+ )
116
+ with urllib.request.urlopen(req, timeout=300) as resp:
117
+ data = json.loads(resp.read().decode("utf-8"))
118
+ content = data.get("message", {}).get("content", "") or ""
119
+ thinking = data.get("message", {}).get("thinking", "") or ""
120
+ m = ANSWER_THINK_RE.findall(content) or ANSWER_THINK_RE.findall(thinking)
121
+ if m:
122
+ ans = m[-1]
123
+ else:
124
+ digits = re.findall(r"\b([1-4])\b", content if content.strip() else thinking)
125
+ ans = digits[-1] if digits else "1"
126
+ return {
127
+ "q_no": q_no,
128
+ "subject": subj,
129
+ "category": q.get("category", "general"),
130
+ "level": lvl,
131
+ "answer": str(ans),
132
+ }
133
+ except Exception:
134
+ time.sleep(2)
135
+ return {
136
+ "q_no": q_no,
137
+ "subject": subj,
138
+ "category": q.get("category", "general"),
139
+ "level": lvl,
140
+ "answer": p1_map.get(q_key, "1"),
141
+ }
142
+
143
+ t0 = time.time()
144
+ done_count = len(done_p3)
145
+ with open(p3_ckpt_path, "a", encoding="utf-8") as f_ckpt:
146
+ with ThreadPoolExecutor(max_workers=4) as ex:
147
+ futures = {ex.submit(solve_p3, (i, q)): q for i, q in enumerate(rem_p3)}
148
+ for fut in as_completed(futures):
149
+ res = fut.result()
150
+ f_ckpt.write(json.dumps(res, ensure_ascii=False) + "\n")
151
+ f_ckpt.flush()
152
+ done_count += 1
153
+ if done_count % 20 == 0 or done_count == len(target_qs):
154
+ el = time.time() - t0
155
+ rate = (done_count - len(done_p3)) / max(el, 1e-5)
156
+ eta = (len(target_qs) - done_count) / max(rate, 1e-5) / 60
157
+ print(f"[Pass 3: {done_count}/{len(target_qs)}] {rate:.2f} q/s | ETA: {eta:.1f} min", flush=True)
158
+ print("PASS 3 COMPLETE!")
training/kaggle_cells/cell5_pass4_pass5.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # === CELL 5 (standalone): PASS 4 (rot +2) and PASS 5 (rot +3) on the 720 uncertain questions, 4096 tokens ===
2
+ import os, re, json, time, zipfile, shutil, subprocess, urllib.request
3
+ from pathlib import Path
4
+ from concurrent.futures import ThreadPoolExecutor, as_completed
5
+
6
+ # 1. Ollama servers (restart if the session was reset)
7
+ for idx, port in [(0, 11434), (1, 11435)]:
8
+ try:
9
+ urllib.request.urlopen(f"http://127.0.0.1:{port}/api/tags", timeout=3)
10
+ except Exception:
11
+ env = {**os.environ, "CUDA_VISIBLE_DEVICES": str(idx), "OLLAMA_HOST": f"127.0.0.1:{port}",
12
+ "OLLAMA_NUM_PARALLEL": "2", "OLLAMA_FLASH_ATTENTION": "1", "OLLAMA_KEEP_ALIVE": "24h"}
13
+ subprocess.Popen(["ollama", "serve"], env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
14
+ time.sleep(5)
15
+ tags = urllib.request.urlopen("http://127.0.0.1:11434/api/tags", timeout=5).read().decode()
16
+ if "gemma4" not in tags:
17
+ print("gemma4:e4b missing -> pulling (takes a few minutes)...")
18
+ subprocess.run(["ollama", "pull", "gemma4:e4b"], env={**os.environ, "OLLAMA_HOST": "127.0.0.1:11434"})
19
+ if "11435" not in "":
20
+ subprocess.run(["ollama", "pull", "gemma4:e4b"], env={**os.environ, "OLLAMA_HOST": "127.0.0.1:11435"})
21
+
22
+ # 2. Data directory (re-extract if the session was reset)
23
+ work_dir = Path("/kaggle/working/work"); work_dir.mkdir(parents=True, exist_ok=True)
24
+ data_dir = work_dir / "data"
25
+ if not (data_dir / "easy").exists():
26
+ for p in Path("/kaggle/input").rglob("*"):
27
+ if p.name == "kaggle_data.zip":
28
+ zipfile.ZipFile(p).extractall(work_dir); break
29
+ elif p.name == "predictions_gemma4_cot.jsonl":
30
+ shutil.copytree(p.parent.parent, work_dir, dirs_exist_ok=True); break
31
+ print("data dir exists:", (data_dir / "easy").exists())
32
+
33
+ HOSTS = ["http://127.0.0.1:11434", "http://127.0.0.1:11435"]
34
+ POS_RE = re.compile(r"ඉහත|above|\b[1-4]\s*(?:හා|සහ|හෝ|,|and|or)\s*[1-4]\b", re.I)
35
+ ANS_RE = re.compile(r"(?:Answer|පිළිතුර)\s*[::]?\s*\**\s*\(?([1-4])\)?", re.I)
36
+ SYSTEM_THINK = (
37
+ "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
38
+ "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
39
+ "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
40
+ "negations such as 'නොවන' / 'නොවේ' (NOT). You may reason in English. "
41
+ "Finish with the final answer in the form 'Answer: <number>'."
42
+ )
43
+
44
+ # Packaging repair (2026-10-28): replace the interrupted archive's empty target list
45
+ # with the original input-derived disagreement rule. No labels are used.
46
+ def load_answers(path):
47
+ with Path(path).open(encoding="utf-8") as f:
48
+ return {(r["level"], r["subject"], r["q_no"]): str(r["answer"])
49
+ for r in (json.loads(line) for line in f if line.strip())}
50
+
51
+ def qkey(lvl, subj, q_no):
52
+ return f"{str(lvl).lower().strip()}_{str(subj).strip()}_{str(q_no).strip()}"
53
+
54
+ all_qs = []
55
+ for lvl in ["easy", "medium", "hard"]:
56
+ for f in sorted((data_dir / lvl).glob("*.json")):
57
+ for item in json.load(open(f, encoding="utf-8")):
58
+ item["_level"] = lvl
59
+ all_qs.append(item)
60
+ print("Total questions:", len(all_qs), "(expect 2238)")
61
+
62
+ p1 = load_answers("/kaggle/working/pass1_think_2048_orig.jsonl")
63
+ p2 = load_answers("/kaggle/working/predictions_gemma4_think_pass2_ckpt.jsonl")
64
+ cot = load_answers(data_dir / "predictions_gemma4_cot.jsonl")
65
+ direct = load_answers(data_dir / "predictions_gemma4_direct.jsonl")
66
+ targets = []
67
+ for q in all_qs:
68
+ k = (q["_level"], q["subject"], q["q_no"])
69
+ uncertain = p1[k] != p2[k] if k in p2 else p1[k] != cot.get(k) or p1[k] != direct.get(k)
70
+ if uncertain and len(q["choices"]) == 4 and not POS_RE.search(" ".join(map(str, q["choices"]))):
71
+ targets.append(q)
72
+ print("Targets:", len(targets), "(expect ~715-720)")
73
+
74
+ def solve(args):
75
+ idx, q, shift = args
76
+ host = HOSTS[idx % 2]
77
+ lvl = q["_level"]; subj = q["subject"]
78
+ grade = "6-9" if lvl == "easy" else ("10-11 (O/L)" if lvl == "medium" else "12-13 (A/L)")
79
+ ch = list(q["choices"])
80
+ rot = ch[shift:] + ch[:shift]
81
+ opts = "\n".join(f"{i}. {c}" for i, c in enumerate(rot, 1))
82
+ user = (f"විෂය (Subject): {subj} | ශ්‍රේණිය (Grade): {grade}\n\n"
83
+ f"ප්‍රශ්නය (Question):\n{q['question'].strip()}\n\n"
84
+ f"විකල්ප (Options):\n{opts}\n\n"
85
+ "Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'.")
86
+ payload = json.dumps({"model": "gemma4:e4b",
87
+ "messages": [{"role": "system", "content": SYSTEM_THINK}, {"role": "user", "content": user}],
88
+ "stream": False, "think": True,
89
+ "options": {"temperature": 0.0, "num_predict": 4096}}).encode("utf-8")
90
+ for _ in range(2):
91
+ try:
92
+ req = urllib.request.Request(f"{host}/api/chat", data=payload, headers={"Content-Type": "application/json"})
93
+ with urllib.request.urlopen(req, timeout=300) as resp:
94
+ msg = json.loads(resp.read().decode("utf-8")).get("message", {})
95
+ content, thinking = msg.get("content", "") or "", msg.get("thinking", "") or ""
96
+ m = ANS_RE.findall(content) or ANS_RE.findall(thinking)
97
+ if not m:
98
+ return None # no clear answer: skip so it does not pollute the vote
99
+ orig = str(((int(m[-1]) - 1 + shift) % 4) + 1) # map back to original option numbering
100
+ return {"q_no": q["q_no"], "subject": subj, "category": q.get("category", "general"),
101
+ "level": lvl, "answer": orig}
102
+ except Exception:
103
+ time.sleep(2)
104
+ return None
105
+
106
+ for pass_no, shift in [(4, 2), (5, 3)]:
107
+ ck = Path(f"/kaggle/working/predictions_gemma4_think_pass{pass_no}_ckpt.jsonl")
108
+ done = set()
109
+ if ck.exists():
110
+ for line in open(ck, encoding="utf-8"):
111
+ if line.strip():
112
+ r = json.loads(line); done.add(qkey(r["level"], r["subject"], r["q_no"]))
113
+ todo = [(i, q, shift) for i, q in enumerate(targets) if qkey(q["_level"], q["subject"], q["q_no"]) not in done]
114
+ print(f"Pass {pass_no} (shift {shift}): done {len(done)}, remaining {len(todo)}")
115
+ t0 = time.time(); n = 0
116
+ with open(ck, "a", encoding="utf-8") as fo, ThreadPoolExecutor(max_workers=4) as ex:
117
+ for fut in as_completed([ex.submit(solve, t) for t in todo]):
118
+ r = fut.result()
119
+ if r:
120
+ fo.write(json.dumps(r, ensure_ascii=False) + "\n"); fo.flush()
121
+ n += 1
122
+ if n % 20 == 0:
123
+ print(f" Pass {pass_no}: {n}/{len(todo)} ({(time.time()-t0)/60:.1f} min)", flush=True)
124
+ print(f"PASS {pass_no} COMPLETE -> {ck}")
training/passes/baseline_cot_4shot.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
training/passes/baseline_direct_4shot.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
training/passes/mac_think_2048_orig.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
training/passes/pass1_think_2048_orig.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
training/passes/pass2_think_4096_rot1.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
training/passes/pass3_think_4096_hint.jsonl ADDED
@@ -0,0 +1,720 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {"q_no": 14, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "1"}
2
+ {"q_no": 19, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
3
+ {"q_no": 10, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
4
+ {"q_no": 6, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
5
+ {"q_no": 21, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
6
+ {"q_no": 22, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
7
+ {"q_no": 24, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
8
+ {"q_no": 23, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "4"}
9
+ {"q_no": 3, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
10
+ {"q_no": 1, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
11
+ {"q_no": 5, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
12
+ {"q_no": 2, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
13
+ {"q_no": 7, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
14
+ {"q_no": 10, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
15
+ {"q_no": 8, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
16
+ {"q_no": 14, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
17
+ {"q_no": 26, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
18
+ {"q_no": 21, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
19
+ {"q_no": 22, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
20
+ {"q_no": 7, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
21
+ {"q_no": 4, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
22
+ {"q_no": 10, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
23
+ {"q_no": 12, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
24
+ {"q_no": 14, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
25
+ {"q_no": 8, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
26
+ {"q_no": 19, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
27
+ {"q_no": 26, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
28
+ {"q_no": 24, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
29
+ {"q_no": 16, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
30
+ {"q_no": 34, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
31
+ {"q_no": 37, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
32
+ {"q_no": 35, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
33
+ {"q_no": 28, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
34
+ {"q_no": 40, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
35
+ {"q_no": 39, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
36
+ {"q_no": 41, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
37
+ {"q_no": 43, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
38
+ {"q_no": 49, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
39
+ {"q_no": 45, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
40
+ {"q_no": 9, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
41
+ {"q_no": 3, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
42
+ {"q_no": 12, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
43
+ {"q_no": 4, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
44
+ {"q_no": 17, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
45
+ {"q_no": 21, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
46
+ {"q_no": 19, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
47
+ {"q_no": 15, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
48
+ {"q_no": 26, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
49
+ {"q_no": 29, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
50
+ {"q_no": 27, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
51
+ {"q_no": 35, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
52
+ {"q_no": 24, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
53
+ {"q_no": 45, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
54
+ {"q_no": 44, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
55
+ {"q_no": 50, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
56
+ {"q_no": 32, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
57
+ {"q_no": 53, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
58
+ {"q_no": 57, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
59
+ {"q_no": 52, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
60
+ {"q_no": 48, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
61
+ {"q_no": 10, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "4"}
62
+ {"q_no": 56, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
63
+ {"q_no": 58, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
64
+ {"q_no": 19, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "4"}
65
+ {"q_no": 6, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
66
+ {"q_no": 15, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "2"}
67
+ {"q_no": 2, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
68
+ {"q_no": 14, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
69
+ {"q_no": 10, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
70
+ {"q_no": 17, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
71
+ {"q_no": 15, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
72
+ {"q_no": 24, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
73
+ {"q_no": 32, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
74
+ {"q_no": 33, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
75
+ {"q_no": 35, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
76
+ {"q_no": 39, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
77
+ {"q_no": 2, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
78
+ {"q_no": 3, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
79
+ {"q_no": 4, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
80
+ {"q_no": 8, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
81
+ {"q_no": 10, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
82
+ {"q_no": 9, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
83
+ {"q_no": 15, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
84
+ {"q_no": 12, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
85
+ {"q_no": 17, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
86
+ {"q_no": 23, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
87
+ {"q_no": 16, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
88
+ {"q_no": 28, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
89
+ {"q_no": 18, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
90
+ {"q_no": 24, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
91
+ {"q_no": 30, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
92
+ {"q_no": 39, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
93
+ {"q_no": 32, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
94
+ {"q_no": 45, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
95
+ {"q_no": 29, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
96
+ {"q_no": 52, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
97
+ {"q_no": 41, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
98
+ {"q_no": 55, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
99
+ {"q_no": 51, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
100
+ {"q_no": 2, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "4"}
101
+ {"q_no": 53, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
102
+ {"q_no": 56, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
103
+ {"q_no": 8, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
104
+ {"q_no": 7, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "2"}
105
+ {"q_no": 11, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
106
+ {"q_no": 14, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
107
+ {"q_no": 15, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
108
+ {"q_no": 10, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
109
+ {"q_no": 27, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
110
+ {"q_no": 28, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
111
+ {"q_no": 30, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
112
+ {"q_no": 19, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
113
+ {"q_no": 35, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
114
+ {"q_no": 40, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
115
+ {"q_no": 32, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
116
+ {"q_no": 36, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
117
+ {"q_no": 1, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
118
+ {"q_no": 11, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
119
+ {"q_no": 19, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
120
+ {"q_no": 42, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
121
+ {"q_no": 6, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
122
+ {"q_no": 18, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
123
+ {"q_no": 31, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
124
+ {"q_no": 35, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
125
+ {"q_no": 33, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
126
+ {"q_no": 39, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
127
+ {"q_no": 42, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
128
+ {"q_no": 45, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
129
+ {"q_no": 40, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
130
+ {"q_no": 46, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
131
+ {"q_no": 48, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
132
+ {"q_no": 49, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
133
+ {"q_no": 50, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
134
+ {"q_no": 10, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "2"}
135
+ {"q_no": 13, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "1"}
136
+ {"q_no": 15, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "2"}
137
+ {"q_no": 34, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "4"}
138
+ {"q_no": 29, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "1"}
139
+ {"q_no": 36, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
140
+ {"q_no": 35, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
141
+ {"q_no": 1, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
142
+ {"q_no": 12, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
143
+ {"q_no": 7, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
144
+ {"q_no": 11, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
145
+ {"q_no": 19, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
146
+ {"q_no": 16, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
147
+ {"q_no": 13, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
148
+ {"q_no": 24, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
149
+ {"q_no": 25, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
150
+ {"q_no": 26, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
151
+ {"q_no": 35, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
152
+ {"q_no": 28, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
153
+ {"q_no": 2, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
154
+ {"q_no": 30, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
155
+ {"q_no": 4, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
156
+ {"q_no": 37, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
157
+ {"q_no": 9, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
158
+ {"q_no": 3, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
159
+ {"q_no": 12, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
160
+ {"q_no": 5, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
161
+ {"q_no": 25, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
162
+ {"q_no": 21, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
163
+ {"q_no": 11, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
164
+ {"q_no": 35, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
165
+ {"q_no": 39, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
166
+ {"q_no": 33, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
167
+ {"q_no": 40, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
168
+ {"q_no": 52, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
169
+ {"q_no": 56, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
170
+ {"q_no": 57, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
171
+ {"q_no": 41, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
172
+ {"q_no": 71, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
173
+ {"q_no": 79, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
174
+ {"q_no": 63, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
175
+ {"q_no": 75, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
176
+ {"q_no": 84, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
177
+ {"q_no": 86, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
178
+ {"q_no": 87, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
179
+ {"q_no": 90, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
180
+ {"q_no": 2, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
181
+ {"q_no": 8, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
182
+ {"q_no": 1, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
183
+ {"q_no": 12, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
184
+ {"q_no": 3, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
185
+ {"q_no": 15, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
186
+ {"q_no": 19, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
187
+ {"q_no": 10, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
188
+ {"q_no": 22, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
189
+ {"q_no": 13, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
190
+ {"q_no": 28, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
191
+ {"q_no": 18, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
192
+ {"q_no": 20, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
193
+ {"q_no": 34, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
194
+ {"q_no": 33, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
195
+ {"q_no": 24, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
196
+ {"q_no": 40, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
197
+ {"q_no": 35, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
198
+ {"q_no": 41, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
199
+ {"q_no": 47, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
200
+ {"q_no": 56, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
201
+ {"q_no": 57, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
202
+ {"q_no": 52, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
203
+ {"q_no": 63, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
204
+ {"q_no": 61, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
205
+ {"q_no": 60, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
206
+ {"q_no": 66, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
207
+ {"q_no": 67, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
208
+ {"q_no": 69, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
209
+ {"q_no": 76, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
210
+ {"q_no": 73, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
211
+ {"q_no": 68, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
212
+ {"q_no": 79, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
213
+ {"q_no": 81, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
214
+ {"q_no": 83, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
215
+ {"q_no": 1, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
216
+ {"q_no": 6, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
217
+ {"q_no": 7, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
218
+ {"q_no": 8, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
219
+ {"q_no": 12, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
220
+ {"q_no": 10, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
221
+ {"q_no": 9, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
222
+ {"q_no": 19, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
223
+ {"q_no": 17, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
224
+ {"q_no": 13, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
225
+ {"q_no": 14, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
226
+ {"q_no": 20, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
227
+ {"q_no": 22, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
228
+ {"q_no": 21, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
229
+ {"q_no": 25, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
230
+ {"q_no": 24, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
231
+ {"q_no": 37, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
232
+ {"q_no": 30, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
233
+ {"q_no": 2, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
234
+ {"q_no": 7, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
235
+ {"q_no": 1, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
236
+ {"q_no": 4, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
237
+ {"q_no": 23, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
238
+ {"q_no": 19, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
239
+ {"q_no": 25, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
240
+ {"q_no": 10, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
241
+ {"q_no": 40, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
242
+ {"q_no": 26, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
243
+ {"q_no": 35, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
244
+ {"q_no": 44, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
245
+ {"q_no": 59, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
246
+ {"q_no": 47, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
247
+ {"q_no": 57, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
248
+ {"q_no": 66, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
249
+ {"q_no": 67, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
250
+ {"q_no": 68, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
251
+ {"q_no": 65, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
252
+ {"q_no": 77, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
253
+ {"q_no": 78, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
254
+ {"q_no": 76, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
255
+ {"q_no": 72, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
256
+ {"q_no": 83, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
257
+ {"q_no": 99, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
258
+ {"q_no": 97, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
259
+ {"q_no": 80, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
260
+ {"q_no": 105, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
261
+ {"q_no": 101, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
262
+ {"q_no": 100, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
263
+ {"q_no": 107, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
264
+ {"q_no": 106, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
265
+ {"q_no": 104, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
266
+ {"q_no": 109, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
267
+ {"q_no": 113, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
268
+ {"q_no": 108, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
269
+ {"q_no": 124, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
270
+ {"q_no": 127, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
271
+ {"q_no": 114, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
272
+ {"q_no": 118, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
273
+ {"q_no": 128, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
274
+ {"q_no": 129, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
275
+ {"q_no": 131, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
276
+ {"q_no": 132, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
277
+ {"q_no": 130, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
278
+ {"q_no": 136, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
279
+ {"q_no": 140, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
280
+ {"q_no": 142, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
281
+ {"q_no": 139, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
282
+ {"q_no": 141, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
283
+ {"q_no": 150, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
284
+ {"q_no": 156, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
285
+ {"q_no": 155, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
286
+ {"q_no": 144, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
287
+ {"q_no": 164, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
288
+ {"q_no": 158, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
289
+ {"q_no": 167, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
290
+ {"q_no": 170, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
291
+ {"q_no": 172, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
292
+ {"q_no": 2, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
293
+ {"q_no": 162, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
294
+ {"q_no": 3, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
295
+ {"q_no": 6, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
296
+ {"q_no": 4, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
297
+ {"q_no": 7, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
298
+ {"q_no": 9, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
299
+ {"q_no": 13, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
300
+ {"q_no": 10, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
301
+ {"q_no": 19, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
302
+ {"q_no": 22, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
303
+ {"q_no": 21, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
304
+ {"q_no": 17, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
305
+ {"q_no": 30, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
306
+ {"q_no": 33, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
307
+ {"q_no": 31, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
308
+ {"q_no": 28, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
309
+ {"q_no": 34, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
310
+ {"q_no": 11, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
311
+ {"q_no": 16, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
312
+ {"q_no": 12, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "3"}
313
+ {"q_no": 20, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "4"}
314
+ {"q_no": 21, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
315
+ {"q_no": 18, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "4"}
316
+ {"q_no": 24, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "4"}
317
+ {"q_no": 26, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
318
+ {"q_no": 37, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
319
+ {"q_no": 27, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
320
+ {"q_no": 28, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
321
+ {"q_no": 25, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
322
+ {"q_no": 56, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
323
+ {"q_no": 29, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
324
+ {"q_no": 7, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
325
+ {"q_no": 40, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
326
+ {"q_no": 64, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
327
+ {"q_no": 68, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
328
+ {"q_no": 65, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
329
+ {"q_no": 60, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
330
+ {"q_no": 77, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
331
+ {"q_no": 69, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
332
+ {"q_no": 92, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
333
+ {"q_no": 86, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
334
+ {"q_no": 93, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
335
+ {"q_no": 94, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
336
+ {"q_no": 113, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
337
+ {"q_no": 95, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
338
+ {"q_no": 101, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
339
+ {"q_no": 115, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
340
+ {"q_no": 131, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
341
+ {"q_no": 146, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
342
+ {"q_no": 139, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
343
+ {"q_no": 140, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
344
+ {"q_no": 137, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
345
+ {"q_no": 159, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
346
+ {"q_no": 154, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
347
+ {"q_no": 2, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
348
+ {"q_no": 150, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
349
+ {"q_no": 3, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "4"}
350
+ {"q_no": 4, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
351
+ {"q_no": 12, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "4"}
352
+ {"q_no": 11, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
353
+ {"q_no": 15, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
354
+ {"q_no": 30, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
355
+ {"q_no": 27, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
356
+ {"q_no": 38, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "1"}
357
+ {"q_no": 34, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
358
+ {"q_no": 2, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
359
+ {"q_no": 17, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "4"}
360
+ {"q_no": 7, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
361
+ {"q_no": 8, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
362
+ {"q_no": 9, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
363
+ {"q_no": 10, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
364
+ {"q_no": 16, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
365
+ {"q_no": 19, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
366
+ {"q_no": 24, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
367
+ {"q_no": 20, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
368
+ {"q_no": 32, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
369
+ {"q_no": 34, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
370
+ {"q_no": 26, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
371
+ {"q_no": 33, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
372
+ {"q_no": 43, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
373
+ {"q_no": 35, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
374
+ {"q_no": 39, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
375
+ {"q_no": 42, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
376
+ {"q_no": 49, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
377
+ {"q_no": 54, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
378
+ {"q_no": 61, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
379
+ {"q_no": 66, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
380
+ {"q_no": 72, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
381
+ {"q_no": 63, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
382
+ {"q_no": 55, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
383
+ {"q_no": 78, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
384
+ {"q_no": 80, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
385
+ {"q_no": 76, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
386
+ {"q_no": 67, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
387
+ {"q_no": 83, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
388
+ {"q_no": 81, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
389
+ {"q_no": 92, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
390
+ {"q_no": 79, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
391
+ {"q_no": 84, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
392
+ {"q_no": 94, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
393
+ {"q_no": 93, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
394
+ {"q_no": 98, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
395
+ {"q_no": 101, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
396
+ {"q_no": 99, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
397
+ {"q_no": 102, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
398
+ {"q_no": 105, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
399
+ {"q_no": 106, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
400
+ {"q_no": 104, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
401
+ {"q_no": 109, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
402
+ {"q_no": 116, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
403
+ {"q_no": 117, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
404
+ {"q_no": 111, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
405
+ {"q_no": 119, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
406
+ {"q_no": 120, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
407
+ {"q_no": 121, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
408
+ {"q_no": 131, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
409
+ {"q_no": 126, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
410
+ {"q_no": 139, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
411
+ {"q_no": 140, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
412
+ {"q_no": 144, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
413
+ {"q_no": 142, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
414
+ {"q_no": 145, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
415
+ {"q_no": 148, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
416
+ {"q_no": 149, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
417
+ {"q_no": 152, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
418
+ {"q_no": 151, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
419
+ {"q_no": 9, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "2"}
420
+ {"q_no": 6, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "3"}
421
+ {"q_no": 12, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "2"}
422
+ {"q_no": 13, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "3"}
423
+ {"q_no": 11, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
424
+ {"q_no": 10, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
425
+ {"q_no": 36, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "2"}
426
+ {"q_no": 21, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "4"}
427
+ {"q_no": 30, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "2"}
428
+ {"q_no": 1, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
429
+ {"q_no": 2, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
430
+ {"q_no": 5, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
431
+ {"q_no": 3, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
432
+ {"q_no": 7, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
433
+ {"q_no": 6, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
434
+ {"q_no": 9, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
435
+ {"q_no": 14, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
436
+ {"q_no": 8, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
437
+ {"q_no": 11, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
438
+ {"q_no": 17, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
439
+ {"q_no": 19, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
440
+ {"q_no": 18, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
441
+ {"q_no": 15, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
442
+ {"q_no": 21, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
443
+ {"q_no": 22, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
444
+ {"q_no": 23, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
445
+ {"q_no": 27, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
446
+ {"q_no": 20, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
447
+ {"q_no": 24, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
448
+ {"q_no": 30, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
449
+ {"q_no": 29, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
450
+ {"q_no": 33, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
451
+ {"q_no": 31, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
452
+ {"q_no": 35, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
453
+ {"q_no": 36, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
454
+ {"q_no": 6, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
455
+ {"q_no": 10, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
456
+ {"q_no": 3, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
457
+ {"q_no": 14, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
458
+ {"q_no": 18, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
459
+ {"q_no": 24, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
460
+ {"q_no": 15, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
461
+ {"q_no": 23, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
462
+ {"q_no": 28, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
463
+ {"q_no": 34, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
464
+ {"q_no": 26, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
465
+ {"q_no": 32, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
466
+ {"q_no": 38, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
467
+ {"q_no": 5, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
468
+ {"q_no": 41, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
469
+ {"q_no": 39, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
470
+ {"q_no": 22, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
471
+ {"q_no": 19, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
472
+ {"q_no": 29, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
473
+ {"q_no": 32, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
474
+ {"q_no": 28, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
475
+ {"q_no": 36, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
476
+ {"q_no": 48, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
477
+ {"q_no": 39, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
478
+ {"q_no": 49, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
479
+ {"q_no": 58, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
480
+ {"q_no": 40, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
481
+ {"q_no": 61, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
482
+ {"q_no": 60, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
483
+ {"q_no": 59, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
484
+ {"q_no": 63, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
485
+ {"q_no": 3, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
486
+ {"q_no": 4, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
487
+ {"q_no": 64, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
488
+ {"q_no": 8, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
489
+ {"q_no": 11, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
490
+ {"q_no": 13, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
491
+ {"q_no": 20, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
492
+ {"q_no": 24, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
493
+ {"q_no": 10, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
494
+ {"q_no": 22, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
495
+ {"q_no": 30, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
496
+ {"q_no": 26, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
497
+ {"q_no": 34, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
498
+ {"q_no": 33, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
499
+ {"q_no": 38, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
500
+ {"q_no": 41, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
501
+ {"q_no": 37, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
502
+ {"q_no": 39, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
503
+ {"q_no": 47, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
504
+ {"q_no": 52, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
505
+ {"q_no": 45, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
506
+ {"q_no": 54, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
507
+ {"q_no": 55, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
508
+ {"q_no": 56, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
509
+ {"q_no": 60, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
510
+ {"q_no": 61, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
511
+ {"q_no": 62, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
512
+ {"q_no": 63, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
513
+ {"q_no": 69, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
514
+ {"q_no": 70, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
515
+ {"q_no": 71, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
516
+ {"q_no": 73, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
517
+ {"q_no": 75, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
518
+ {"q_no": 82, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
519
+ {"q_no": 85, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
520
+ {"q_no": 80, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
521
+ {"q_no": 93, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
522
+ {"q_no": 98, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
523
+ {"q_no": 86, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
524
+ {"q_no": 88, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
525
+ {"q_no": 103, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
526
+ {"q_no": 99, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
527
+ {"q_no": 109, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
528
+ {"q_no": 100, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
529
+ {"q_no": 110, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
530
+ {"q_no": 113, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
531
+ {"q_no": 115, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
532
+ {"q_no": 116, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
533
+ {"q_no": 114, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
534
+ {"q_no": 120, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
535
+ {"q_no": 1, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
536
+ {"q_no": 9, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
537
+ {"q_no": 5, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
538
+ {"q_no": 4, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
539
+ {"q_no": 10, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
540
+ {"q_no": 14, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
541
+ {"q_no": 13, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
542
+ {"q_no": 17, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
543
+ {"q_no": 16, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
544
+ {"q_no": 19, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
545
+ {"q_no": 18, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
546
+ {"q_no": 20, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
547
+ {"q_no": 21, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
548
+ {"q_no": 22, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
549
+ {"q_no": 23, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
550
+ {"q_no": 24, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
551
+ {"q_no": 31, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
552
+ {"q_no": 29, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
553
+ {"q_no": 36, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
554
+ {"q_no": 32, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
555
+ {"q_no": 43, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
556
+ {"q_no": 46, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
557
+ {"q_no": 53, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
558
+ {"q_no": 55, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
559
+ {"q_no": 51, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
560
+ {"q_no": 60, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
561
+ {"q_no": 63, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
562
+ {"q_no": 61, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
563
+ {"q_no": 62, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
564
+ {"q_no": 64, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
565
+ {"q_no": 67, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
566
+ {"q_no": 69, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
567
+ {"q_no": 71, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
568
+ {"q_no": 70, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
569
+ {"q_no": 75, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
570
+ {"q_no": 72, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
571
+ {"q_no": 77, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
572
+ {"q_no": 82, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
573
+ {"q_no": 86, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
574
+ {"q_no": 85, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
575
+ {"q_no": 87, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
576
+ {"q_no": 91, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
577
+ {"q_no": 83, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
578
+ {"q_no": 88, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
579
+ {"q_no": 93, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
580
+ {"q_no": 94, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
581
+ {"q_no": 99, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
582
+ {"q_no": 98, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
583
+ {"q_no": 97, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
584
+ {"q_no": 95, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
585
+ {"q_no": 101, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
586
+ {"q_no": 100, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
587
+ {"q_no": 105, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
588
+ {"q_no": 108, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
589
+ {"q_no": 119, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
590
+ {"q_no": 111, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
591
+ {"q_no": 113, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
592
+ {"q_no": 118, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
593
+ {"q_no": 123, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
594
+ {"q_no": 126, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
595
+ {"q_no": 124, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
596
+ {"q_no": 121, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
597
+ {"q_no": 132, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
598
+ {"q_no": 134, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
599
+ {"q_no": 131, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
600
+ {"q_no": 133, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
601
+ {"q_no": 140, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
602
+ {"q_no": 136, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
603
+ {"q_no": 138, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
604
+ {"q_no": 145, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
605
+ {"q_no": 147, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
606
+ {"q_no": 156, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
607
+ {"q_no": 151, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
608
+ {"q_no": 158, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
609
+ {"q_no": 152, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
610
+ {"q_no": 8, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "3"}
611
+ {"q_no": 11, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "2"}
612
+ {"q_no": 9, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "3"}
613
+ {"q_no": 17, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "3"}
614
+ {"q_no": 1, "subject": "Art", "category": "humanities", "level": "hard", "answer": "4"}
615
+ {"q_no": 34, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "4"}
616
+ {"q_no": 8, "subject": "Art", "category": "humanities", "level": "hard", "answer": "4"}
617
+ {"q_no": 11, "subject": "Art", "category": "humanities", "level": "hard", "answer": "4"}
618
+ {"q_no": 3, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
619
+ {"q_no": 6, "subject": "Art", "category": "humanities", "level": "hard", "answer": "3"}
620
+ {"q_no": 10, "subject": "Biology", "category": "stem", "level": "hard", "answer": "3"}
621
+ {"q_no": 5, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
622
+ {"q_no": 15, "subject": "Biology", "category": "stem", "level": "hard", "answer": "3"}
623
+ {"q_no": 21, "subject": "Biology", "category": "stem", "level": "hard", "answer": "2"}
624
+ {"q_no": 23, "subject": "Biology", "category": "stem", "level": "hard", "answer": "3"}
625
+ {"q_no": 22, "subject": "Biology", "category": "stem", "level": "hard", "answer": "2"}
626
+ {"q_no": 28, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
627
+ {"q_no": 34, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
628
+ {"q_no": 24, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
629
+ {"q_no": 5, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "4"}
630
+ {"q_no": 10, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "2"}
631
+ {"q_no": 42, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
632
+ {"q_no": 23, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "2"}
633
+ {"q_no": 27, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "2"}
634
+ {"q_no": 30, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "1"}
635
+ {"q_no": 36, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "4"}
636
+ {"q_no": 26, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "1"}
637
+ {"q_no": 3, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
638
+ {"q_no": 10, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "4"}
639
+ {"q_no": 11, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
640
+ {"q_no": 17, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
641
+ {"q_no": 21, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
642
+ {"q_no": 18, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
643
+ {"q_no": 23, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "4"}
644
+ {"q_no": 22, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
645
+ {"q_no": 25, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
646
+ {"q_no": 29, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
647
+ {"q_no": 31, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
648
+ {"q_no": 24, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
649
+ {"q_no": 32, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "4"}
650
+ {"q_no": 38, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
651
+ {"q_no": 35, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
652
+ {"q_no": 37, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
653
+ {"q_no": 40, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
654
+ {"q_no": 6, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "1"}
655
+ {"q_no": 39, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
656
+ {"q_no": 15, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "1"}
657
+ {"q_no": 4, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "1"}
658
+ {"q_no": 28, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "2"}
659
+ {"q_no": 3, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "4"}
660
+ {"q_no": 5, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "4"}
661
+ {"q_no": 7, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "3"}
662
+ {"q_no": 10, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
663
+ {"q_no": 1, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "2"}
664
+ {"q_no": 11, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "1"}
665
+ {"q_no": 9, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "3"}
666
+ {"q_no": 15, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "3"}
667
+ {"q_no": 11, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
668
+ {"q_no": 31, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
669
+ {"q_no": 19, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
670
+ {"q_no": 38, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "3"}
671
+ {"q_no": 46, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "3"}
672
+ {"q_no": 32, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "1"}
673
+ {"q_no": 4, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "4"}
674
+ {"q_no": 42, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "3"}
675
+ {"q_no": 3, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "3"}
676
+ {"q_no": 10, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "3"}
677
+ {"q_no": 8, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
678
+ {"q_no": 17, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
679
+ {"q_no": 13, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
680
+ {"q_no": 20, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "3"}
681
+ {"q_no": 22, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
682
+ {"q_no": 4, "subject": "Economics", "category": "social science", "level": "hard", "answer": "2"}
683
+ {"q_no": 13, "subject": "Economics", "category": "social science", "level": "hard", "answer": "3"}
684
+ {"q_no": 16, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
685
+ {"q_no": 9, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
686
+ {"q_no": 18, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
687
+ {"q_no": 15, "subject": "Economics", "category": "social science", "level": "hard", "answer": "4"}
688
+ {"q_no": 31, "subject": "Economics", "category": "social science", "level": "hard", "answer": "4"}
689
+ {"q_no": 17, "subject": "Economics", "category": "social science", "level": "hard", "answer": "3"}
690
+ {"q_no": 10, "subject": "Geography", "category": "social science", "level": "hard", "answer": "1"}
691
+ {"q_no": 7, "subject": "Geography", "category": "social science", "level": "hard", "answer": "3"}
692
+ {"q_no": 14, "subject": "Geography", "category": "social science", "level": "hard", "answer": "1"}
693
+ {"q_no": 21, "subject": "Economics", "category": "social science", "level": "hard", "answer": "2"}
694
+ {"q_no": 30, "subject": "Geography", "category": "social science", "level": "hard", "answer": "2"}
695
+ {"q_no": 12, "subject": "Geography", "category": "social science", "level": "hard", "answer": "4"}
696
+ {"q_no": 1, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "3"}
697
+ {"q_no": 34, "subject": "Geography", "category": "social science", "level": "hard", "answer": "3"}
698
+ {"q_no": 22, "subject": "Geography", "category": "social science", "level": "hard", "answer": "2"}
699
+ {"q_no": 9, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "2"}
700
+ {"q_no": 21, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "2"}
701
+ {"q_no": 24, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "1"}
702
+ {"q_no": 2, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "1"}
703
+ {"q_no": 2, "subject": "Physics", "category": "stem", "level": "hard", "answer": "1"}
704
+ {"q_no": 18, "subject": "Physics", "category": "stem", "level": "hard", "answer": "1"}
705
+ {"q_no": 5, "subject": "Physics", "category": "stem", "level": "hard", "answer": "2"}
706
+ {"q_no": 15, "subject": "Physics", "category": "stem", "level": "hard", "answer": "4"}
707
+ {"q_no": 16, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "4"}
708
+ {"q_no": 19, "subject": "Physics", "category": "stem", "level": "hard", "answer": "3"}
709
+ {"q_no": 26, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "2"}
710
+ {"q_no": 27, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "1"}
711
+ {"q_no": 20, "subject": "Physics", "category": "stem", "level": "hard", "answer": "4"}
712
+ {"q_no": 4, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
713
+ {"q_no": 3, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "1"}
714
+ {"q_no": 5, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "4"}
715
+ {"q_no": 8, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "1"}
716
+ {"q_no": 10, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "3"}
717
+ {"q_no": 9, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
718
+ {"q_no": 14, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "4"}
719
+ {"q_no": 11, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
720
+ {"q_no": 19, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "1"}
training/passes/pass4_think_4096_rot2.jsonl ADDED
@@ -0,0 +1,712 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {"q_no": 14, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
2
+ {"q_no": 10, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
3
+ {"q_no": 19, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
4
+ {"q_no": 6, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
5
+ {"q_no": 21, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
6
+ {"q_no": 24, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
7
+ {"q_no": 22, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
8
+ {"q_no": 23, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
9
+ {"q_no": 1, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
10
+ {"q_no": 2, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
11
+ {"q_no": 3, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
12
+ {"q_no": 5, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
13
+ {"q_no": 8, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
14
+ {"q_no": 14, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
15
+ {"q_no": 7, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
16
+ {"q_no": 10, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
17
+ {"q_no": 22, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
18
+ {"q_no": 26, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
19
+ {"q_no": 4, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
20
+ {"q_no": 8, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
21
+ {"q_no": 21, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
22
+ {"q_no": 7, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
23
+ {"q_no": 12, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
24
+ {"q_no": 10, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
25
+ {"q_no": 14, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
26
+ {"q_no": 16, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
27
+ {"q_no": 19, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
28
+ {"q_no": 24, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
29
+ {"q_no": 26, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
30
+ {"q_no": 28, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
31
+ {"q_no": 35, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
32
+ {"q_no": 34, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
33
+ {"q_no": 37, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
34
+ {"q_no": 40, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
35
+ {"q_no": 41, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
36
+ {"q_no": 39, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
37
+ {"q_no": 43, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
38
+ {"q_no": 45, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
39
+ {"q_no": 49, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
40
+ {"q_no": 3, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
41
+ {"q_no": 9, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
42
+ {"q_no": 12, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
43
+ {"q_no": 4, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
44
+ {"q_no": 17, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
45
+ {"q_no": 15, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
46
+ {"q_no": 21, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
47
+ {"q_no": 26, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
48
+ {"q_no": 19, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
49
+ {"q_no": 24, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
50
+ {"q_no": 29, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
51
+ {"q_no": 27, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
52
+ {"q_no": 32, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
53
+ {"q_no": 44, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
54
+ {"q_no": 48, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
55
+ {"q_no": 45, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
56
+ {"q_no": 35, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
57
+ {"q_no": 52, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
58
+ {"q_no": 53, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
59
+ {"q_no": 56, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
60
+ {"q_no": 58, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
61
+ {"q_no": 50, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
62
+ {"q_no": 10, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "4"}
63
+ {"q_no": 57, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
64
+ {"q_no": 15, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "2"}
65
+ {"q_no": 2, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
66
+ {"q_no": 6, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
67
+ {"q_no": 10, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
68
+ {"q_no": 15, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
69
+ {"q_no": 24, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
70
+ {"q_no": 14, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
71
+ {"q_no": 19, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "4"}
72
+ {"q_no": 33, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
73
+ {"q_no": 17, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
74
+ {"q_no": 39, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
75
+ {"q_no": 32, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
76
+ {"q_no": 3, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
77
+ {"q_no": 35, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
78
+ {"q_no": 2, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
79
+ {"q_no": 8, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
80
+ {"q_no": 10, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
81
+ {"q_no": 4, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
82
+ {"q_no": 9, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
83
+ {"q_no": 15, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
84
+ {"q_no": 17, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
85
+ {"q_no": 16, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
86
+ {"q_no": 12, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
87
+ {"q_no": 23, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
88
+ {"q_no": 28, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
89
+ {"q_no": 24, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
90
+ {"q_no": 30, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
91
+ {"q_no": 39, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
92
+ {"q_no": 18, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
93
+ {"q_no": 29, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
94
+ {"q_no": 32, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
95
+ {"q_no": 45, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
96
+ {"q_no": 52, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
97
+ {"q_no": 41, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
98
+ {"q_no": 51, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
99
+ {"q_no": 56, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
100
+ {"q_no": 2, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "1"}
101
+ {"q_no": 53, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
102
+ {"q_no": 55, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
103
+ {"q_no": 8, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "4"}
104
+ {"q_no": 7, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "2"}
105
+ {"q_no": 11, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
106
+ {"q_no": 14, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
107
+ {"q_no": 15, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
108
+ {"q_no": 27, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
109
+ {"q_no": 19, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
110
+ {"q_no": 30, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
111
+ {"q_no": 10, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "4"}
112
+ {"q_no": 35, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
113
+ {"q_no": 40, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
114
+ {"q_no": 28, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
115
+ {"q_no": 1, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
116
+ {"q_no": 36, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
117
+ {"q_no": 32, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
118
+ {"q_no": 11, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
119
+ {"q_no": 19, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
120
+ {"q_no": 6, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
121
+ {"q_no": 18, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
122
+ {"q_no": 33, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
123
+ {"q_no": 31, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
124
+ {"q_no": 39, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
125
+ {"q_no": 35, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
126
+ {"q_no": 46, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
127
+ {"q_no": 40, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "4"}
128
+ {"q_no": 42, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
129
+ {"q_no": 45, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
130
+ {"q_no": 48, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
131
+ {"q_no": 10, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "1"}
132
+ {"q_no": 50, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
133
+ {"q_no": 49, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "4"}
134
+ {"q_no": 15, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "2"}
135
+ {"q_no": 34, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "1"}
136
+ {"q_no": 13, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "3"}
137
+ {"q_no": 35, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "1"}
138
+ {"q_no": 36, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
139
+ {"q_no": 29, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "4"}
140
+ {"q_no": 1, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
141
+ {"q_no": 12, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
142
+ {"q_no": 7, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
143
+ {"q_no": 11, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
144
+ {"q_no": 16, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
145
+ {"q_no": 19, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
146
+ {"q_no": 24, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
147
+ {"q_no": 25, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
148
+ {"q_no": 26, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
149
+ {"q_no": 13, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
150
+ {"q_no": 30, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
151
+ {"q_no": 35, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
152
+ {"q_no": 28, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
153
+ {"q_no": 2, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
154
+ {"q_no": 37, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
155
+ {"q_no": 3, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
156
+ {"q_no": 5, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
157
+ {"q_no": 9, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
158
+ {"q_no": 11, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
159
+ {"q_no": 12, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
160
+ {"q_no": 21, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
161
+ {"q_no": 4, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
162
+ {"q_no": 33, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
163
+ {"q_no": 35, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
164
+ {"q_no": 39, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
165
+ {"q_no": 25, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
166
+ {"q_no": 40, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
167
+ {"q_no": 56, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
168
+ {"q_no": 52, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
169
+ {"q_no": 41, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
170
+ {"q_no": 75, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
171
+ {"q_no": 57, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
172
+ {"q_no": 63, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
173
+ {"q_no": 71, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
174
+ {"q_no": 86, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
175
+ {"q_no": 79, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
176
+ {"q_no": 84, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
177
+ {"q_no": 87, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
178
+ {"q_no": 90, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
179
+ {"q_no": 1, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
180
+ {"q_no": 8, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
181
+ {"q_no": 2, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
182
+ {"q_no": 12, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
183
+ {"q_no": 3, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
184
+ {"q_no": 15, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
185
+ {"q_no": 10, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
186
+ {"q_no": 13, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
187
+ {"q_no": 19, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
188
+ {"q_no": 22, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
189
+ {"q_no": 20, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
190
+ {"q_no": 28, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
191
+ {"q_no": 18, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
192
+ {"q_no": 34, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
193
+ {"q_no": 33, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
194
+ {"q_no": 40, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
195
+ {"q_no": 24, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
196
+ {"q_no": 35, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
197
+ {"q_no": 41, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
198
+ {"q_no": 47, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
199
+ {"q_no": 56, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
200
+ {"q_no": 52, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
201
+ {"q_no": 57, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
202
+ {"q_no": 63, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
203
+ {"q_no": 61, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
204
+ {"q_no": 67, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
205
+ {"q_no": 69, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
206
+ {"q_no": 66, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
207
+ {"q_no": 81, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
208
+ {"q_no": 76, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
209
+ {"q_no": 73, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
210
+ {"q_no": 79, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
211
+ {"q_no": 83, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
212
+ {"q_no": 1, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
213
+ {"q_no": 6, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
214
+ {"q_no": 8, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
215
+ {"q_no": 7, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
216
+ {"q_no": 10, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
217
+ {"q_no": 9, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
218
+ {"q_no": 12, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
219
+ {"q_no": 13, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
220
+ {"q_no": 17, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
221
+ {"q_no": 20, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
222
+ {"q_no": 19, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
223
+ {"q_no": 14, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
224
+ {"q_no": 22, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
225
+ {"q_no": 25, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
226
+ {"q_no": 21, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
227
+ {"q_no": 24, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
228
+ {"q_no": 2, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
229
+ {"q_no": 37, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
230
+ {"q_no": 30, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
231
+ {"q_no": 1, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
232
+ {"q_no": 7, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
233
+ {"q_no": 4, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
234
+ {"q_no": 19, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
235
+ {"q_no": 10, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
236
+ {"q_no": 23, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
237
+ {"q_no": 26, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
238
+ {"q_no": 25, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
239
+ {"q_no": 40, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
240
+ {"q_no": 35, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
241
+ {"q_no": 47, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
242
+ {"q_no": 57, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
243
+ {"q_no": 59, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
244
+ {"q_no": 44, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
245
+ {"q_no": 66, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
246
+ {"q_no": 65, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
247
+ {"q_no": 68, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
248
+ {"q_no": 76, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
249
+ {"q_no": 67, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
250
+ {"q_no": 72, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
251
+ {"q_no": 78, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
252
+ {"q_no": 83, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
253
+ {"q_no": 99, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
254
+ {"q_no": 77, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
255
+ {"q_no": 80, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
256
+ {"q_no": 101, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
257
+ {"q_no": 97, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
258
+ {"q_no": 100, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
259
+ {"q_no": 105, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
260
+ {"q_no": 106, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
261
+ {"q_no": 107, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
262
+ {"q_no": 104, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
263
+ {"q_no": 109, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
264
+ {"q_no": 108, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
265
+ {"q_no": 113, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
266
+ {"q_no": 124, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
267
+ {"q_no": 118, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
268
+ {"q_no": 127, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
269
+ {"q_no": 114, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
270
+ {"q_no": 128, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
271
+ {"q_no": 129, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
272
+ {"q_no": 131, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
273
+ {"q_no": 132, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
274
+ {"q_no": 136, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
275
+ {"q_no": 140, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
276
+ {"q_no": 139, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
277
+ {"q_no": 142, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
278
+ {"q_no": 130, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
279
+ {"q_no": 150, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
280
+ {"q_no": 141, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
281
+ {"q_no": 144, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
282
+ {"q_no": 156, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
283
+ {"q_no": 155, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
284
+ {"q_no": 158, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
285
+ {"q_no": 162, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
286
+ {"q_no": 164, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
287
+ {"q_no": 167, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
288
+ {"q_no": 3, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
289
+ {"q_no": 170, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
290
+ {"q_no": 2, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
291
+ {"q_no": 172, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
292
+ {"q_no": 6, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
293
+ {"q_no": 9, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
294
+ {"q_no": 4, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
295
+ {"q_no": 13, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
296
+ {"q_no": 7, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
297
+ {"q_no": 19, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
298
+ {"q_no": 10, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
299
+ {"q_no": 22, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
300
+ {"q_no": 17, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
301
+ {"q_no": 21, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
302
+ {"q_no": 30, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
303
+ {"q_no": 33, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
304
+ {"q_no": 11, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
305
+ {"q_no": 28, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
306
+ {"q_no": 31, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
307
+ {"q_no": 16, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
308
+ {"q_no": 34, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
309
+ {"q_no": 20, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "3"}
310
+ {"q_no": 18, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
311
+ {"q_no": 12, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
312
+ {"q_no": 24, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
313
+ {"q_no": 27, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
314
+ {"q_no": 21, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
315
+ {"q_no": 26, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "3"}
316
+ {"q_no": 29, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
317
+ {"q_no": 7, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
318
+ {"q_no": 40, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
319
+ {"q_no": 37, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
320
+ {"q_no": 28, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
321
+ {"q_no": 25, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
322
+ {"q_no": 56, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
323
+ {"q_no": 60, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
324
+ {"q_no": 65, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
325
+ {"q_no": 68, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
326
+ {"q_no": 64, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
327
+ {"q_no": 69, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
328
+ {"q_no": 92, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
329
+ {"q_no": 86, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
330
+ {"q_no": 77, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
331
+ {"q_no": 93, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
332
+ {"q_no": 95, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
333
+ {"q_no": 113, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
334
+ {"q_no": 101, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
335
+ {"q_no": 94, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
336
+ {"q_no": 131, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
337
+ {"q_no": 115, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
338
+ {"q_no": 139, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
339
+ {"q_no": 137, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
340
+ {"q_no": 146, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
341
+ {"q_no": 140, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
342
+ {"q_no": 154, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
343
+ {"q_no": 2, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
344
+ {"q_no": 150, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
345
+ {"q_no": 159, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
346
+ {"q_no": 3, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
347
+ {"q_no": 12, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "4"}
348
+ {"q_no": 4, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
349
+ {"q_no": 11, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "1"}
350
+ {"q_no": 27, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "4"}
351
+ {"q_no": 30, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
352
+ {"q_no": 15, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "1"}
353
+ {"q_no": 38, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "1"}
354
+ {"q_no": 2, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
355
+ {"q_no": 34, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
356
+ {"q_no": 7, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
357
+ {"q_no": 8, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
358
+ {"q_no": 9, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
359
+ {"q_no": 16, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
360
+ {"q_no": 10, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
361
+ {"q_no": 20, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
362
+ {"q_no": 24, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
363
+ {"q_no": 19, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
364
+ {"q_no": 26, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
365
+ {"q_no": 34, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
366
+ {"q_no": 32, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
367
+ {"q_no": 33, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
368
+ {"q_no": 35, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
369
+ {"q_no": 43, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
370
+ {"q_no": 42, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
371
+ {"q_no": 39, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
372
+ {"q_no": 49, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
373
+ {"q_no": 54, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
374
+ {"q_no": 55, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
375
+ {"q_no": 63, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
376
+ {"q_no": 61, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
377
+ {"q_no": 66, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
378
+ {"q_no": 67, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
379
+ {"q_no": 72, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
380
+ {"q_no": 78, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
381
+ {"q_no": 76, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
382
+ {"q_no": 79, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
383
+ {"q_no": 80, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
384
+ {"q_no": 83, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
385
+ {"q_no": 81, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
386
+ {"q_no": 84, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
387
+ {"q_no": 92, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
388
+ {"q_no": 93, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
389
+ {"q_no": 101, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
390
+ {"q_no": 94, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
391
+ {"q_no": 98, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
392
+ {"q_no": 99, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
393
+ {"q_no": 105, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
394
+ {"q_no": 104, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
395
+ {"q_no": 102, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
396
+ {"q_no": 106, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
397
+ {"q_no": 111, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
398
+ {"q_no": 109, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
399
+ {"q_no": 117, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
400
+ {"q_no": 120, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
401
+ {"q_no": 116, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
402
+ {"q_no": 126, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
403
+ {"q_no": 119, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
404
+ {"q_no": 139, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
405
+ {"q_no": 131, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
406
+ {"q_no": 121, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
407
+ {"q_no": 142, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
408
+ {"q_no": 145, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
409
+ {"q_no": 140, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
410
+ {"q_no": 148, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
411
+ {"q_no": 149, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
412
+ {"q_no": 152, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
413
+ {"q_no": 6, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "3"}
414
+ {"q_no": 151, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
415
+ {"q_no": 9, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
416
+ {"q_no": 10, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "4"}
417
+ {"q_no": 11, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
418
+ {"q_no": 12, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
419
+ {"q_no": 13, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "2"}
420
+ {"q_no": 36, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
421
+ {"q_no": 30, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
422
+ {"q_no": 21, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "4"}
423
+ {"q_no": 2, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
424
+ {"q_no": 5, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
425
+ {"q_no": 1, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
426
+ {"q_no": 3, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
427
+ {"q_no": 7, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
428
+ {"q_no": 9, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
429
+ {"q_no": 14, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
430
+ {"q_no": 8, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
431
+ {"q_no": 6, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
432
+ {"q_no": 17, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
433
+ {"q_no": 11, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
434
+ {"q_no": 19, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
435
+ {"q_no": 15, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
436
+ {"q_no": 21, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
437
+ {"q_no": 18, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
438
+ {"q_no": 23, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
439
+ {"q_no": 27, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
440
+ {"q_no": 22, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
441
+ {"q_no": 20, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
442
+ {"q_no": 30, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
443
+ {"q_no": 33, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
444
+ {"q_no": 24, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
445
+ {"q_no": 29, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
446
+ {"q_no": 35, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
447
+ {"q_no": 31, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
448
+ {"q_no": 36, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
449
+ {"q_no": 6, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
450
+ {"q_no": 3, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
451
+ {"q_no": 10, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
452
+ {"q_no": 18, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
453
+ {"q_no": 14, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
454
+ {"q_no": 15, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
455
+ {"q_no": 23, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
456
+ {"q_no": 24, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
457
+ {"q_no": 34, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
458
+ {"q_no": 28, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
459
+ {"q_no": 26, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
460
+ {"q_no": 32, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
461
+ {"q_no": 39, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
462
+ {"q_no": 5, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
463
+ {"q_no": 38, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
464
+ {"q_no": 22, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
465
+ {"q_no": 41, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
466
+ {"q_no": 19, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
467
+ {"q_no": 29, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
468
+ {"q_no": 32, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
469
+ {"q_no": 36, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
470
+ {"q_no": 40, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
471
+ {"q_no": 28, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
472
+ {"q_no": 39, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
473
+ {"q_no": 49, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
474
+ {"q_no": 48, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
475
+ {"q_no": 58, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
476
+ {"q_no": 59, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
477
+ {"q_no": 61, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
478
+ {"q_no": 64, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
479
+ {"q_no": 60, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
480
+ {"q_no": 4, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
481
+ {"q_no": 63, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
482
+ {"q_no": 10, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
483
+ {"q_no": 3, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
484
+ {"q_no": 13, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
485
+ {"q_no": 8, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
486
+ {"q_no": 11, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
487
+ {"q_no": 22, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
488
+ {"q_no": 24, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
489
+ {"q_no": 26, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
490
+ {"q_no": 20, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
491
+ {"q_no": 30, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
492
+ {"q_no": 33, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
493
+ {"q_no": 37, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
494
+ {"q_no": 39, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
495
+ {"q_no": 34, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
496
+ {"q_no": 38, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
497
+ {"q_no": 45, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
498
+ {"q_no": 41, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
499
+ {"q_no": 52, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
500
+ {"q_no": 55, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
501
+ {"q_no": 47, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
502
+ {"q_no": 56, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
503
+ {"q_no": 60, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
504
+ {"q_no": 54, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
505
+ {"q_no": 62, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
506
+ {"q_no": 63, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
507
+ {"q_no": 69, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
508
+ {"q_no": 61, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
509
+ {"q_no": 71, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
510
+ {"q_no": 70, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
511
+ {"q_no": 75, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
512
+ {"q_no": 73, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
513
+ {"q_no": 85, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
514
+ {"q_no": 82, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
515
+ {"q_no": 86, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
516
+ {"q_no": 93, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
517
+ {"q_no": 88, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
518
+ {"q_no": 99, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
519
+ {"q_no": 80, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
520
+ {"q_no": 103, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
521
+ {"q_no": 110, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
522
+ {"q_no": 98, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
523
+ {"q_no": 100, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
524
+ {"q_no": 114, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
525
+ {"q_no": 109, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
526
+ {"q_no": 116, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
527
+ {"q_no": 113, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
528
+ {"q_no": 1, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
529
+ {"q_no": 115, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
530
+ {"q_no": 120, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
531
+ {"q_no": 5, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
532
+ {"q_no": 10, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
533
+ {"q_no": 9, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
534
+ {"q_no": 4, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
535
+ {"q_no": 14, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
536
+ {"q_no": 17, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
537
+ {"q_no": 16, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
538
+ {"q_no": 13, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
539
+ {"q_no": 18, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
540
+ {"q_no": 19, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
541
+ {"q_no": 20, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
542
+ {"q_no": 22, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
543
+ {"q_no": 21, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
544
+ {"q_no": 23, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
545
+ {"q_no": 31, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
546
+ {"q_no": 24, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
547
+ {"q_no": 36, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
548
+ {"q_no": 29, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
549
+ {"q_no": 46, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
550
+ {"q_no": 32, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
551
+ {"q_no": 53, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
552
+ {"q_no": 43, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
553
+ {"q_no": 51, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
554
+ {"q_no": 55, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
555
+ {"q_no": 60, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
556
+ {"q_no": 64, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
557
+ {"q_no": 62, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
558
+ {"q_no": 61, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
559
+ {"q_no": 63, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
560
+ {"q_no": 69, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
561
+ {"q_no": 67, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
562
+ {"q_no": 70, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
563
+ {"q_no": 75, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
564
+ {"q_no": 71, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
565
+ {"q_no": 77, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
566
+ {"q_no": 72, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
567
+ {"q_no": 86, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
568
+ {"q_no": 85, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
569
+ {"q_no": 82, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
570
+ {"q_no": 83, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
571
+ {"q_no": 88, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
572
+ {"q_no": 93, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
573
+ {"q_no": 91, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
574
+ {"q_no": 87, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
575
+ {"q_no": 98, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
576
+ {"q_no": 94, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
577
+ {"q_no": 95, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
578
+ {"q_no": 100, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
579
+ {"q_no": 97, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
580
+ {"q_no": 99, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
581
+ {"q_no": 105, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
582
+ {"q_no": 101, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
583
+ {"q_no": 113, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
584
+ {"q_no": 108, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
585
+ {"q_no": 111, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
586
+ {"q_no": 119, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
587
+ {"q_no": 118, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
588
+ {"q_no": 123, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
589
+ {"q_no": 124, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
590
+ {"q_no": 121, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
591
+ {"q_no": 126, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
592
+ {"q_no": 132, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
593
+ {"q_no": 134, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
594
+ {"q_no": 131, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
595
+ {"q_no": 138, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
596
+ {"q_no": 136, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
597
+ {"q_no": 133, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
598
+ {"q_no": 140, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
599
+ {"q_no": 145, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
600
+ {"q_no": 151, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
601
+ {"q_no": 156, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
602
+ {"q_no": 147, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
603
+ {"q_no": 158, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
604
+ {"q_no": 152, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
605
+ {"q_no": 8, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "1"}
606
+ {"q_no": 11, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "2"}
607
+ {"q_no": 9, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "1"}
608
+ {"q_no": 17, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "3"}
609
+ {"q_no": 1, "subject": "Art", "category": "humanities", "level": "hard", "answer": "1"}
610
+ {"q_no": 8, "subject": "Art", "category": "humanities", "level": "hard", "answer": "1"}
611
+ {"q_no": 34, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "4"}
612
+ {"q_no": 3, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
613
+ {"q_no": 11, "subject": "Art", "category": "humanities", "level": "hard", "answer": "2"}
614
+ {"q_no": 10, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
615
+ {"q_no": 15, "subject": "Biology", "category": "stem", "level": "hard", "answer": "3"}
616
+ {"q_no": 21, "subject": "Biology", "category": "stem", "level": "hard", "answer": "2"}
617
+ {"q_no": 5, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
618
+ {"q_no": 23, "subject": "Biology", "category": "stem", "level": "hard", "answer": "3"}
619
+ {"q_no": 24, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
620
+ {"q_no": 22, "subject": "Biology", "category": "stem", "level": "hard", "answer": "2"}
621
+ {"q_no": 28, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
622
+ {"q_no": 34, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
623
+ {"q_no": 10, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "4"}
624
+ {"q_no": 5, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "4"}
625
+ {"q_no": 23, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "1"}
626
+ {"q_no": 27, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "3"}
627
+ {"q_no": 26, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "2"}
628
+ {"q_no": 42, "subject": "Biology", "category": "stem", "level": "hard", "answer": "3"}
629
+ {"q_no": 3, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
630
+ {"q_no": 30, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "1"}
631
+ {"q_no": 36, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "4"}
632
+ {"q_no": 10, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
633
+ {"q_no": 11, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
634
+ {"q_no": 17, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
635
+ {"q_no": 18, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
636
+ {"q_no": 22, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "4"}
637
+ {"q_no": 23, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
638
+ {"q_no": 24, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
639
+ {"q_no": 21, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
640
+ {"q_no": 29, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
641
+ {"q_no": 32, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
642
+ {"q_no": 31, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
643
+ {"q_no": 37, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
644
+ {"q_no": 25, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
645
+ {"q_no": 39, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
646
+ {"q_no": 6, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "4"}
647
+ {"q_no": 35, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
648
+ {"q_no": 38, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
649
+ {"q_no": 40, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
650
+ {"q_no": 28, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "3"}
651
+ {"q_no": 4, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "3"}
652
+ {"q_no": 15, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "1"}
653
+ {"q_no": 3, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "1"}
654
+ {"q_no": 7, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "4"}
655
+ {"q_no": 11, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "1"}
656
+ {"q_no": 5, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "3"}
657
+ {"q_no": 10, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
658
+ {"q_no": 9, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "4"}
659
+ {"q_no": 1, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "1"}
660
+ {"q_no": 31, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
661
+ {"q_no": 15, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "3"}
662
+ {"q_no": 11, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
663
+ {"q_no": 19, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
664
+ {"q_no": 38, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "1"}
665
+ {"q_no": 46, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
666
+ {"q_no": 32, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "2"}
667
+ {"q_no": 42, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "2"}
668
+ {"q_no": 4, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "4"}
669
+ {"q_no": 8, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
670
+ {"q_no": 3, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
671
+ {"q_no": 10, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "1"}
672
+ {"q_no": 13, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "1"}
673
+ {"q_no": 17, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
674
+ {"q_no": 22, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
675
+ {"q_no": 20, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "1"}
676
+ {"q_no": 4, "subject": "Economics", "category": "social science", "level": "hard", "answer": "2"}
677
+ {"q_no": 9, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
678
+ {"q_no": 13, "subject": "Economics", "category": "social science", "level": "hard", "answer": "3"}
679
+ {"q_no": 18, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
680
+ {"q_no": 16, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
681
+ {"q_no": 17, "subject": "Economics", "category": "social science", "level": "hard", "answer": "3"}
682
+ {"q_no": 15, "subject": "Economics", "category": "social science", "level": "hard", "answer": "2"}
683
+ {"q_no": 7, "subject": "Geography", "category": "social science", "level": "hard", "answer": "1"}
684
+ {"q_no": 31, "subject": "Economics", "category": "social science", "level": "hard", "answer": "2"}
685
+ {"q_no": 12, "subject": "Geography", "category": "social science", "level": "hard", "answer": "4"}
686
+ {"q_no": 10, "subject": "Geography", "category": "social science", "level": "hard", "answer": "1"}
687
+ {"q_no": 21, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
688
+ {"q_no": 22, "subject": "Geography", "category": "social science", "level": "hard", "answer": "2"}
689
+ {"q_no": 30, "subject": "Geography", "category": "social science", "level": "hard", "answer": "2"}
690
+ {"q_no": 14, "subject": "Geography", "category": "social science", "level": "hard", "answer": "4"}
691
+ {"q_no": 34, "subject": "Geography", "category": "social science", "level": "hard", "answer": "2"}
692
+ {"q_no": 21, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "1"}
693
+ {"q_no": 2, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "1"}
694
+ {"q_no": 1, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "4"}
695
+ {"q_no": 9, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "2"}
696
+ {"q_no": 24, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "1"}
697
+ {"q_no": 2, "subject": "Physics", "category": "stem", "level": "hard", "answer": "1"}
698
+ {"q_no": 15, "subject": "Physics", "category": "stem", "level": "hard", "answer": "4"}
699
+ {"q_no": 19, "subject": "Physics", "category": "stem", "level": "hard", "answer": "3"}
700
+ {"q_no": 5, "subject": "Physics", "category": "stem", "level": "hard", "answer": "2"}
701
+ {"q_no": 16, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "4"}
702
+ {"q_no": 27, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "1"}
703
+ {"q_no": 20, "subject": "Physics", "category": "stem", "level": "hard", "answer": "3"}
704
+ {"q_no": 26, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "2"}
705
+ {"q_no": 4, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
706
+ {"q_no": 3, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
707
+ {"q_no": 5, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "4"}
708
+ {"q_no": 9, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
709
+ {"q_no": 10, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "3"}
710
+ {"q_no": 11, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
711
+ {"q_no": 14, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "4"}
712
+ {"q_no": 19, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "1"}
training/passes/pass5_think_4096_rot3.jsonl ADDED
@@ -0,0 +1,712 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {"q_no": 6, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
2
+ {"q_no": 19, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
3
+ {"q_no": 14, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
4
+ {"q_no": 10, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
5
+ {"q_no": 21, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
6
+ {"q_no": 22, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
7
+ {"q_no": 24, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "3"}
8
+ {"q_no": 23, "subject": "Art", "category": "Humanities", "level": "easy", "answer": "2"}
9
+ {"q_no": 3, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "2"}
10
+ {"q_no": 1, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
11
+ {"q_no": 5, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
12
+ {"q_no": 7, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
13
+ {"q_no": 8, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
14
+ {"q_no": 2, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
15
+ {"q_no": 10, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "4"}
16
+ {"q_no": 14, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "3"}
17
+ {"q_no": 22, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
18
+ {"q_no": 21, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
19
+ {"q_no": 26, "subject": "Buddhism", "category": "Humanities", "level": "easy", "answer": "1"}
20
+ {"q_no": 4, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
21
+ {"q_no": 10, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
22
+ {"q_no": 8, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
23
+ {"q_no": 12, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
24
+ {"q_no": 7, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
25
+ {"q_no": 24, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
26
+ {"q_no": 19, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
27
+ {"q_no": 16, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
28
+ {"q_no": 14, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
29
+ {"q_no": 28, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
30
+ {"q_no": 35, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
31
+ {"q_no": 34, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
32
+ {"q_no": 26, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
33
+ {"q_no": 39, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "2"}
34
+ {"q_no": 41, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
35
+ {"q_no": 37, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "4"}
36
+ {"q_no": 40, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
37
+ {"q_no": 49, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
38
+ {"q_no": 45, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "1"}
39
+ {"q_no": 3, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
40
+ {"q_no": 9, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
41
+ {"q_no": 43, "subject": "Catholicism", "category": "Humanities", "level": "easy", "answer": "3"}
42
+ {"q_no": 4, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
43
+ {"q_no": 17, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
44
+ {"q_no": 15, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
45
+ {"q_no": 19, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
46
+ {"q_no": 12, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
47
+ {"q_no": 21, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
48
+ {"q_no": 26, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
49
+ {"q_no": 24, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
50
+ {"q_no": 29, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
51
+ {"q_no": 27, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
52
+ {"q_no": 44, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
53
+ {"q_no": 32, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
54
+ {"q_no": 48, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
55
+ {"q_no": 45, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
56
+ {"q_no": 52, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
57
+ {"q_no": 35, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
58
+ {"q_no": 56, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "4"}
59
+ {"q_no": 58, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "1"}
60
+ {"q_no": 50, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "2"}
61
+ {"q_no": 53, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
62
+ {"q_no": 10, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "4"}
63
+ {"q_no": 57, "subject": "Christianity", "category": "Humanities", "level": "easy", "answer": "3"}
64
+ {"q_no": 15, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "2"}
65
+ {"q_no": 10, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
66
+ {"q_no": 2, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
67
+ {"q_no": 6, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
68
+ {"q_no": 15, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "2"}
69
+ {"q_no": 14, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
70
+ {"q_no": 19, "subject": "Civics", "category": "Social_science", "level": "easy", "answer": "4"}
71
+ {"q_no": 24, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
72
+ {"q_no": 17, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
73
+ {"q_no": 33, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
74
+ {"q_no": 39, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "3"}
75
+ {"q_no": 32, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "1"}
76
+ {"q_no": 35, "subject": "Dancing", "category": "Humanities", "level": "easy", "answer": "4"}
77
+ {"q_no": 3, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
78
+ {"q_no": 8, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
79
+ {"q_no": 2, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
80
+ {"q_no": 10, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
81
+ {"q_no": 4, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
82
+ {"q_no": 15, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
83
+ {"q_no": 9, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
84
+ {"q_no": 17, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
85
+ {"q_no": 12, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "1"}
86
+ {"q_no": 16, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
87
+ {"q_no": 23, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
88
+ {"q_no": 24, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
89
+ {"q_no": 28, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
90
+ {"q_no": 30, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
91
+ {"q_no": 18, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
92
+ {"q_no": 39, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
93
+ {"q_no": 32, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
94
+ {"q_no": 45, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
95
+ {"q_no": 29, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
96
+ {"q_no": 52, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
97
+ {"q_no": 41, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
98
+ {"q_no": 55, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "3"}
99
+ {"q_no": 51, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "4"}
100
+ {"q_no": 2, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "1"}
101
+ {"q_no": 53, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
102
+ {"q_no": 56, "subject": "Drama and Theatre", "category": "other", "level": "easy", "answer": "2"}
103
+ {"q_no": 8, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
104
+ {"q_no": 7, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
105
+ {"q_no": 11, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
106
+ {"q_no": 14, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
107
+ {"q_no": 15, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
108
+ {"q_no": 27, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "2"}
109
+ {"q_no": 10, "subject": "Eastern_Music", "category": "Humanities", "level": "easy", "answer": "3"}
110
+ {"q_no": 30, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
111
+ {"q_no": 35, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
112
+ {"q_no": 19, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "3"}
113
+ {"q_no": 28, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
114
+ {"q_no": 40, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
115
+ {"q_no": 36, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "4"}
116
+ {"q_no": 1, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "1"}
117
+ {"q_no": 11, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
118
+ {"q_no": 32, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
119
+ {"q_no": 19, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
120
+ {"q_no": 42, "subject": "Eastern Music", "category": "Humanities", "level": "easy", "answer": "1"}
121
+ {"q_no": 33, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
122
+ {"q_no": 18, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
123
+ {"q_no": 31, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
124
+ {"q_no": 6, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
125
+ {"q_no": 35, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
126
+ {"q_no": 39, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
127
+ {"q_no": 42, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
128
+ {"q_no": 45, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
129
+ {"q_no": 40, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "4"}
130
+ {"q_no": 46, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
131
+ {"q_no": 48, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
132
+ {"q_no": 49, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "2"}
133
+ {"q_no": 10, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "1"}
134
+ {"q_no": 50, "subject": "Geography", "category": "Social_science", "level": "easy", "answer": "3"}
135
+ {"q_no": 15, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "2"}
136
+ {"q_no": 34, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "1"}
137
+ {"q_no": 13, "subject": "Health & Physical Education", "category": "other", "level": "easy", "answer": "4"}
138
+ {"q_no": 36, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "2"}
139
+ {"q_no": 35, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "3"}
140
+ {"q_no": 29, "subject": "Health and Physical Education", "category": "other", "level": "easy", "answer": "1"}
141
+ {"q_no": 7, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
142
+ {"q_no": 12, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
143
+ {"q_no": 11, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
144
+ {"q_no": 1, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
145
+ {"q_no": 16, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
146
+ {"q_no": 24, "subject": "History", "category": "Humanities", "level": "easy", "answer": "1"}
147
+ {"q_no": 19, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
148
+ {"q_no": 25, "subject": "History", "category": "Humanities", "level": "easy", "answer": "3"}
149
+ {"q_no": 13, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
150
+ {"q_no": 26, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
151
+ {"q_no": 30, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
152
+ {"q_no": 28, "subject": "History", "category": "Humanities", "level": "easy", "answer": "4"}
153
+ {"q_no": 35, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
154
+ {"q_no": 37, "subject": "History", "category": "Humanities", "level": "easy", "answer": "2"}
155
+ {"q_no": 2, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
156
+ {"q_no": 3, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
157
+ {"q_no": 5, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
158
+ {"q_no": 4, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
159
+ {"q_no": 9, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
160
+ {"q_no": 12, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
161
+ {"q_no": 11, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
162
+ {"q_no": 21, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
163
+ {"q_no": 35, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
164
+ {"q_no": 39, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
165
+ {"q_no": 25, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
166
+ {"q_no": 33, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
167
+ {"q_no": 40, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
168
+ {"q_no": 52, "subject": "Science", "category": "stem", "level": "easy", "answer": "1"}
169
+ {"q_no": 57, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
170
+ {"q_no": 56, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
171
+ {"q_no": 41, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
172
+ {"q_no": 71, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
173
+ {"q_no": 75, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
174
+ {"q_no": 79, "subject": "Science", "category": "stem", "level": "easy", "answer": "4"}
175
+ {"q_no": 63, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
176
+ {"q_no": 86, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
177
+ {"q_no": 90, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
178
+ {"q_no": 84, "subject": "Science", "category": "stem", "level": "easy", "answer": "3"}
179
+ {"q_no": 87, "subject": "Science", "category": "stem", "level": "easy", "answer": "2"}
180
+ {"q_no": 8, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
181
+ {"q_no": 2, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
182
+ {"q_no": 1, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
183
+ {"q_no": 3, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
184
+ {"q_no": 10, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
185
+ {"q_no": 12, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
186
+ {"q_no": 15, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
187
+ {"q_no": 13, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
188
+ {"q_no": 20, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
189
+ {"q_no": 18, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
190
+ {"q_no": 19, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
191
+ {"q_no": 22, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
192
+ {"q_no": 33, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
193
+ {"q_no": 24, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
194
+ {"q_no": 28, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
195
+ {"q_no": 34, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
196
+ {"q_no": 41, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
197
+ {"q_no": 35, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
198
+ {"q_no": 40, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
199
+ {"q_no": 57, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
200
+ {"q_no": 56, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
201
+ {"q_no": 52, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
202
+ {"q_no": 61, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
203
+ {"q_no": 47, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
204
+ {"q_no": 63, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "2"}
205
+ {"q_no": 66, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
206
+ {"q_no": 60, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
207
+ {"q_no": 67, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
208
+ {"q_no": 69, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
209
+ {"q_no": 73, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
210
+ {"q_no": 83, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
211
+ {"q_no": 79, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "4"}
212
+ {"q_no": 81, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "1"}
213
+ {"q_no": 76, "subject": "Sinhala Language and Literature", "category": "other", "level": "easy", "answer": "3"}
214
+ {"q_no": 6, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
215
+ {"q_no": 8, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
216
+ {"q_no": 1, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
217
+ {"q_no": 7, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
218
+ {"q_no": 10, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
219
+ {"q_no": 9, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
220
+ {"q_no": 12, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
221
+ {"q_no": 13, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
222
+ {"q_no": 17, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
223
+ {"q_no": 20, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "2"}
224
+ {"q_no": 19, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
225
+ {"q_no": 14, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
226
+ {"q_no": 22, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
227
+ {"q_no": 25, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "3"}
228
+ {"q_no": 24, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
229
+ {"q_no": 21, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "1"}
230
+ {"q_no": 1, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
231
+ {"q_no": 2, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
232
+ {"q_no": 37, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
233
+ {"q_no": 30, "subject": "Agriculture and Food Technology", "category": "other", "level": "medium", "answer": "4"}
234
+ {"q_no": 7, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
235
+ {"q_no": 4, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
236
+ {"q_no": 19, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
237
+ {"q_no": 23, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
238
+ {"q_no": 10, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
239
+ {"q_no": 25, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
240
+ {"q_no": 26, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
241
+ {"q_no": 35, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
242
+ {"q_no": 40, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
243
+ {"q_no": 44, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
244
+ {"q_no": 57, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
245
+ {"q_no": 47, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
246
+ {"q_no": 59, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
247
+ {"q_no": 66, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
248
+ {"q_no": 67, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
249
+ {"q_no": 68, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
250
+ {"q_no": 65, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
251
+ {"q_no": 72, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
252
+ {"q_no": 76, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
253
+ {"q_no": 77, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
254
+ {"q_no": 78, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
255
+ {"q_no": 97, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
256
+ {"q_no": 83, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
257
+ {"q_no": 99, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
258
+ {"q_no": 80, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
259
+ {"q_no": 100, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
260
+ {"q_no": 101, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
261
+ {"q_no": 106, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
262
+ {"q_no": 105, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
263
+ {"q_no": 104, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
264
+ {"q_no": 107, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
265
+ {"q_no": 108, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
266
+ {"q_no": 109, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
267
+ {"q_no": 113, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
268
+ {"q_no": 124, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
269
+ {"q_no": 118, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
270
+ {"q_no": 114, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
271
+ {"q_no": 128, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
272
+ {"q_no": 127, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
273
+ {"q_no": 129, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
274
+ {"q_no": 131, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
275
+ {"q_no": 132, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
276
+ {"q_no": 140, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
277
+ {"q_no": 130, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
278
+ {"q_no": 136, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
279
+ {"q_no": 139, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
280
+ {"q_no": 142, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "2"}
281
+ {"q_no": 150, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
282
+ {"q_no": 141, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
283
+ {"q_no": 144, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
284
+ {"q_no": 156, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
285
+ {"q_no": 155, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "3"}
286
+ {"q_no": 158, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
287
+ {"q_no": 162, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
288
+ {"q_no": 164, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
289
+ {"q_no": 172, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
290
+ {"q_no": 167, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "1"}
291
+ {"q_no": 170, "subject": "Buddhism", "category": "Humanities", "level": "medium", "answer": "4"}
292
+ {"q_no": 2, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
293
+ {"q_no": 3, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
294
+ {"q_no": 6, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
295
+ {"q_no": 9, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "4"}
296
+ {"q_no": 13, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
297
+ {"q_no": 4, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
298
+ {"q_no": 19, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
299
+ {"q_no": 7, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
300
+ {"q_no": 22, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
301
+ {"q_no": 10, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
302
+ {"q_no": 21, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
303
+ {"q_no": 30, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "2"}
304
+ {"q_no": 17, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
305
+ {"q_no": 33, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
306
+ {"q_no": 28, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
307
+ {"q_no": 11, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
308
+ {"q_no": 31, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "3"}
309
+ {"q_no": 16, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
310
+ {"q_no": 34, "subject": "Catholicism", "category": "Humanities", "level": "medium", "answer": "1"}
311
+ {"q_no": 20, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "3"}
312
+ {"q_no": 12, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "3"}
313
+ {"q_no": 18, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
314
+ {"q_no": 21, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "4"}
315
+ {"q_no": 24, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "3"}
316
+ {"q_no": 27, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "3"}
317
+ {"q_no": 26, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
318
+ {"q_no": 28, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "2"}
319
+ {"q_no": 25, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
320
+ {"q_no": 7, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
321
+ {"q_no": 29, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "3"}
322
+ {"q_no": 37, "subject": "Christianity", "category": "Humanities", "level": "medium", "answer": "1"}
323
+ {"q_no": 40, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
324
+ {"q_no": 56, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
325
+ {"q_no": 64, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
326
+ {"q_no": 65, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
327
+ {"q_no": 60, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
328
+ {"q_no": 68, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
329
+ {"q_no": 69, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
330
+ {"q_no": 86, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
331
+ {"q_no": 77, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
332
+ {"q_no": 92, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
333
+ {"q_no": 93, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
334
+ {"q_no": 95, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
335
+ {"q_no": 101, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
336
+ {"q_no": 113, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
337
+ {"q_no": 131, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
338
+ {"q_no": 115, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
339
+ {"q_no": 94, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
340
+ {"q_no": 139, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
341
+ {"q_no": 140, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "2"}
342
+ {"q_no": 146, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "4"}
343
+ {"q_no": 137, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
344
+ {"q_no": 154, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
345
+ {"q_no": 150, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "3"}
346
+ {"q_no": 2, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
347
+ {"q_no": 159, "subject": "Civics", "category": "Social_science", "level": "medium", "answer": "1"}
348
+ {"q_no": 4, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
349
+ {"q_no": 3, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
350
+ {"q_no": 12, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "4"}
351
+ {"q_no": 11, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
352
+ {"q_no": 15, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "1"}
353
+ {"q_no": 27, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "3"}
354
+ {"q_no": 30, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "1"}
355
+ {"q_no": 34, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
356
+ {"q_no": 38, "subject": "Communication and Media Studies", "category": "other", "level": "medium", "answer": "2"}
357
+ {"q_no": 2, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
358
+ {"q_no": 9, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
359
+ {"q_no": 8, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
360
+ {"q_no": 10, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
361
+ {"q_no": 7, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
362
+ {"q_no": 24, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
363
+ {"q_no": 16, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
364
+ {"q_no": 20, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
365
+ {"q_no": 32, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
366
+ {"q_no": 26, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
367
+ {"q_no": 19, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
368
+ {"q_no": 34, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
369
+ {"q_no": 33, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
370
+ {"q_no": 35, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
371
+ {"q_no": 43, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
372
+ {"q_no": 42, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
373
+ {"q_no": 39, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
374
+ {"q_no": 49, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
375
+ {"q_no": 61, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
376
+ {"q_no": 55, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
377
+ {"q_no": 54, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
378
+ {"q_no": 63, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
379
+ {"q_no": 67, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
380
+ {"q_no": 76, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
381
+ {"q_no": 72, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
382
+ {"q_no": 78, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
383
+ {"q_no": 79, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
384
+ {"q_no": 66, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
385
+ {"q_no": 81, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
386
+ {"q_no": 84, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
387
+ {"q_no": 80, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
388
+ {"q_no": 93, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
389
+ {"q_no": 92, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
390
+ {"q_no": 83, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
391
+ {"q_no": 101, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
392
+ {"q_no": 98, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
393
+ {"q_no": 94, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
394
+ {"q_no": 104, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
395
+ {"q_no": 106, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
396
+ {"q_no": 99, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
397
+ {"q_no": 102, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
398
+ {"q_no": 111, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
399
+ {"q_no": 105, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
400
+ {"q_no": 117, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
401
+ {"q_no": 120, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
402
+ {"q_no": 109, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
403
+ {"q_no": 116, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
404
+ {"q_no": 126, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
405
+ {"q_no": 139, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
406
+ {"q_no": 119, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
407
+ {"q_no": 121, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
408
+ {"q_no": 131, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "2"}
409
+ {"q_no": 140, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
410
+ {"q_no": 142, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
411
+ {"q_no": 145, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
412
+ {"q_no": 149, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "3"}
413
+ {"q_no": 151, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
414
+ {"q_no": 152, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "4"}
415
+ {"q_no": 148, "subject": "Dancing", "category": "Humanities", "level": "medium", "answer": "1"}
416
+ {"q_no": 9, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "2"}
417
+ {"q_no": 6, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "3"}
418
+ {"q_no": 11, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
419
+ {"q_no": 10, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
420
+ {"q_no": 13, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "3"}
421
+ {"q_no": 12, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "2"}
422
+ {"q_no": 36, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "2"}
423
+ {"q_no": 30, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "1"}
424
+ {"q_no": 21, "subject": "Design and Construction Technology", "category": "other", "level": "medium", "answer": "4"}
425
+ {"q_no": 5, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
426
+ {"q_no": 2, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
427
+ {"q_no": 3, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
428
+ {"q_no": 7, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
429
+ {"q_no": 1, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
430
+ {"q_no": 9, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
431
+ {"q_no": 14, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
432
+ {"q_no": 6, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
433
+ {"q_no": 8, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
434
+ {"q_no": 11, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
435
+ {"q_no": 17, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
436
+ {"q_no": 19, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
437
+ {"q_no": 18, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
438
+ {"q_no": 21, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
439
+ {"q_no": 15, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
440
+ {"q_no": 23, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
441
+ {"q_no": 20, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
442
+ {"q_no": 27, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
443
+ {"q_no": 30, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "4"}
444
+ {"q_no": 24, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
445
+ {"q_no": 22, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
446
+ {"q_no": 33, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
447
+ {"q_no": 29, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
448
+ {"q_no": 31, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "2"}
449
+ {"q_no": 35, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "1"}
450
+ {"q_no": 36, "subject": "Eastern Music", "category": "Humanities", "level": "medium", "answer": "3"}
451
+ {"q_no": 6, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
452
+ {"q_no": 3, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
453
+ {"q_no": 10, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
454
+ {"q_no": 18, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
455
+ {"q_no": 24, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
456
+ {"q_no": 14, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
457
+ {"q_no": 15, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
458
+ {"q_no": 23, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
459
+ {"q_no": 28, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
460
+ {"q_no": 34, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
461
+ {"q_no": 26, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "2"}
462
+ {"q_no": 32, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "4"}
463
+ {"q_no": 39, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "1"}
464
+ {"q_no": 38, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
465
+ {"q_no": 5, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
466
+ {"q_no": 22, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
467
+ {"q_no": 19, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
468
+ {"q_no": 41, "subject": "Geography", "category": "Social_science", "level": "medium", "answer": "3"}
469
+ {"q_no": 29, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
470
+ {"q_no": 28, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
471
+ {"q_no": 36, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
472
+ {"q_no": 32, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
473
+ {"q_no": 49, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
474
+ {"q_no": 48, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
475
+ {"q_no": 40, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "4"}
476
+ {"q_no": 39, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
477
+ {"q_no": 58, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
478
+ {"q_no": 59, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
479
+ {"q_no": 61, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "2"}
480
+ {"q_no": 64, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
481
+ {"q_no": 60, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "3"}
482
+ {"q_no": 4, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
483
+ {"q_no": 3, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
484
+ {"q_no": 63, "subject": "Health", "category": "Social_science", "level": "medium", "answer": "1"}
485
+ {"q_no": 13, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
486
+ {"q_no": 10, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
487
+ {"q_no": 11, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
488
+ {"q_no": 8, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
489
+ {"q_no": 24, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
490
+ {"q_no": 22, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
491
+ {"q_no": 20, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
492
+ {"q_no": 26, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
493
+ {"q_no": 30, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
494
+ {"q_no": 33, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
495
+ {"q_no": 37, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
496
+ {"q_no": 34, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
497
+ {"q_no": 41, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
498
+ {"q_no": 38, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
499
+ {"q_no": 45, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
500
+ {"q_no": 39, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
501
+ {"q_no": 47, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
502
+ {"q_no": 54, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
503
+ {"q_no": 55, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
504
+ {"q_no": 52, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
505
+ {"q_no": 56, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
506
+ {"q_no": 60, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
507
+ {"q_no": 61, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
508
+ {"q_no": 63, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
509
+ {"q_no": 62, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
510
+ {"q_no": 69, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
511
+ {"q_no": 71, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
512
+ {"q_no": 70, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
513
+ {"q_no": 73, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
514
+ {"q_no": 75, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
515
+ {"q_no": 82, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
516
+ {"q_no": 85, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
517
+ {"q_no": 86, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
518
+ {"q_no": 80, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
519
+ {"q_no": 88, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
520
+ {"q_no": 93, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
521
+ {"q_no": 103, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
522
+ {"q_no": 99, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
523
+ {"q_no": 98, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
524
+ {"q_no": 100, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
525
+ {"q_no": 109, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
526
+ {"q_no": 110, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
527
+ {"q_no": 113, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
528
+ {"q_no": 116, "subject": "History", "category": "Humanities", "level": "medium", "answer": "4"}
529
+ {"q_no": 115, "subject": "History", "category": "Humanities", "level": "medium", "answer": "2"}
530
+ {"q_no": 114, "subject": "History", "category": "Humanities", "level": "medium", "answer": "1"}
531
+ {"q_no": 120, "subject": "History", "category": "Humanities", "level": "medium", "answer": "3"}
532
+ {"q_no": 1, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
533
+ {"q_no": 9, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
534
+ {"q_no": 5, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
535
+ {"q_no": 4, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
536
+ {"q_no": 10, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
537
+ {"q_no": 14, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
538
+ {"q_no": 17, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
539
+ {"q_no": 13, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
540
+ {"q_no": 19, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
541
+ {"q_no": 18, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
542
+ {"q_no": 16, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
543
+ {"q_no": 23, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
544
+ {"q_no": 21, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
545
+ {"q_no": 20, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
546
+ {"q_no": 22, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
547
+ {"q_no": 31, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
548
+ {"q_no": 29, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
549
+ {"q_no": 32, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
550
+ {"q_no": 24, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
551
+ {"q_no": 36, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
552
+ {"q_no": 43, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
553
+ {"q_no": 46, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
554
+ {"q_no": 53, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
555
+ {"q_no": 55, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
556
+ {"q_no": 51, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
557
+ {"q_no": 62, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
558
+ {"q_no": 63, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
559
+ {"q_no": 61, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
560
+ {"q_no": 67, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
561
+ {"q_no": 64, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
562
+ {"q_no": 70, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
563
+ {"q_no": 72, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
564
+ {"q_no": 69, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
565
+ {"q_no": 77, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
566
+ {"q_no": 71, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
567
+ {"q_no": 83, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
568
+ {"q_no": 75, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
569
+ {"q_no": 86, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
570
+ {"q_no": 88, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
571
+ {"q_no": 85, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
572
+ {"q_no": 82, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
573
+ {"q_no": 93, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
574
+ {"q_no": 87, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
575
+ {"q_no": 91, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
576
+ {"q_no": 95, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
577
+ {"q_no": 98, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
578
+ {"q_no": 94, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
579
+ {"q_no": 100, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
580
+ {"q_no": 97, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
581
+ {"q_no": 99, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
582
+ {"q_no": 105, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
583
+ {"q_no": 101, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
584
+ {"q_no": 111, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
585
+ {"q_no": 118, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
586
+ {"q_no": 108, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
587
+ {"q_no": 121, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
588
+ {"q_no": 113, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
589
+ {"q_no": 123, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
590
+ {"q_no": 124, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
591
+ {"q_no": 119, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
592
+ {"q_no": 126, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
593
+ {"q_no": 131, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
594
+ {"q_no": 132, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
595
+ {"q_no": 134, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
596
+ {"q_no": 136, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "4"}
597
+ {"q_no": 140, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
598
+ {"q_no": 138, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
599
+ {"q_no": 147, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "2"}
600
+ {"q_no": 145, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "3"}
601
+ {"q_no": 158, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
602
+ {"q_no": 156, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
603
+ {"q_no": 152, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
604
+ {"q_no": 151, "subject": "Sinhala", "category": "language", "level": "medium", "answer": "1"}
605
+ {"q_no": 9, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "3"}
606
+ {"q_no": 8, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "1"}
607
+ {"q_no": 1, "subject": "Art", "category": "humanities", "level": "hard", "answer": "4"}
608
+ {"q_no": 17, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "4"}
609
+ {"q_no": 11, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "3"}
610
+ {"q_no": 8, "subject": "Art", "category": "humanities", "level": "hard", "answer": "2"}
611
+ {"q_no": 34, "subject": "Agricultural Science", "category": "stem", "level": "hard", "answer": "1"}
612
+ {"q_no": 3, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
613
+ {"q_no": 10, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
614
+ {"q_no": 11, "subject": "Art", "category": "humanities", "level": "hard", "answer": "3"}
615
+ {"q_no": 21, "subject": "Biology", "category": "stem", "level": "hard", "answer": "2"}
616
+ {"q_no": 5, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
617
+ {"q_no": 23, "subject": "Biology", "category": "stem", "level": "hard", "answer": "3"}
618
+ {"q_no": 15, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
619
+ {"q_no": 28, "subject": "Biology", "category": "stem", "level": "hard", "answer": "1"}
620
+ {"q_no": 22, "subject": "Biology", "category": "stem", "level": "hard", "answer": "2"}
621
+ {"q_no": 24, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
622
+ {"q_no": 10, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "4"}
623
+ {"q_no": 34, "subject": "Biology", "category": "stem", "level": "hard", "answer": "4"}
624
+ {"q_no": 5, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "4"}
625
+ {"q_no": 26, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "1"}
626
+ {"q_no": 30, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "2"}
627
+ {"q_no": 23, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "1"}
628
+ {"q_no": 27, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "2"}
629
+ {"q_no": 3, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "4"}
630
+ {"q_no": 36, "subject": "Biosystem Technology", "category": "stem", "level": "hard", "answer": "2"}
631
+ {"q_no": 11, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
632
+ {"q_no": 10, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "4"}
633
+ {"q_no": 17, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
634
+ {"q_no": 22, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
635
+ {"q_no": 18, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
636
+ {"q_no": 23, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
637
+ {"q_no": 21, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
638
+ {"q_no": 29, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
639
+ {"q_no": 24, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
640
+ {"q_no": 31, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
641
+ {"q_no": 32, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "4"}
642
+ {"q_no": 25, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
643
+ {"q_no": 39, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "2"}
644
+ {"q_no": 37, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
645
+ {"q_no": 35, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "3"}
646
+ {"q_no": 38, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
647
+ {"q_no": 6, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "1"}
648
+ {"q_no": 40, "subject": "Buddhist Civilization", "category": "humanities", "level": "hard", "answer": "1"}
649
+ {"q_no": 3, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "1"}
650
+ {"q_no": 4, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "1"}
651
+ {"q_no": 15, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "1"}
652
+ {"q_no": 28, "subject": "Business Studies", "category": "social science", "level": "hard", "answer": "1"}
653
+ {"q_no": 7, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "3"}
654
+ {"q_no": 11, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "2"}
655
+ {"q_no": 9, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "4"}
656
+ {"q_no": 5, "subject": "Chemistry", "category": "stem", "level": "hard", "answer": "4"}
657
+ {"q_no": 10, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "1"}
658
+ {"q_no": 15, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "2"}
659
+ {"q_no": 1, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "1"}
660
+ {"q_no": 11, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "3"}
661
+ {"q_no": 31, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "4"}
662
+ {"q_no": 38, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "2"}
663
+ {"q_no": 19, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "3"}
664
+ {"q_no": 32, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "2"}
665
+ {"q_no": 46, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "2"}
666
+ {"q_no": 4, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "4"}
667
+ {"q_no": 3, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
668
+ {"q_no": 10, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "1"}
669
+ {"q_no": 8, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
670
+ {"q_no": 17, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
671
+ {"q_no": 42, "subject": "Communication and Media Studies", "category": "social science", "level": "hard", "answer": "2"}
672
+ {"q_no": 22, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
673
+ {"q_no": 13, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "2"}
674
+ {"q_no": 20, "subject": "Dancing (Indigenous)", "category": "humanities", "level": "hard", "answer": "3"}
675
+ {"q_no": 9, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
676
+ {"q_no": 4, "subject": "Economics", "category": "social science", "level": "hard", "answer": "2"}
677
+ {"q_no": 13, "subject": "Economics", "category": "social science", "level": "hard", "answer": "3"}
678
+ {"q_no": 15, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
679
+ {"q_no": 18, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
680
+ {"q_no": 16, "subject": "Economics", "category": "social science", "level": "hard", "answer": "2"}
681
+ {"q_no": 17, "subject": "Economics", "category": "social science", "level": "hard", "answer": "1"}
682
+ {"q_no": 21, "subject": "Economics", "category": "social science", "level": "hard", "answer": "2"}
683
+ {"q_no": 31, "subject": "Economics", "category": "social science", "level": "hard", "answer": "4"}
684
+ {"q_no": 7, "subject": "Geography", "category": "social science", "level": "hard", "answer": "1"}
685
+ {"q_no": 12, "subject": "Geography", "category": "social science", "level": "hard", "answer": "2"}
686
+ {"q_no": 14, "subject": "Geography", "category": "social science", "level": "hard", "answer": "4"}
687
+ {"q_no": 22, "subject": "Geography", "category": "social science", "level": "hard", "answer": "2"}
688
+ {"q_no": 34, "subject": "Geography", "category": "social science", "level": "hard", "answer": "3"}
689
+ {"q_no": 10, "subject": "Geography", "category": "social science", "level": "hard", "answer": "3"}
690
+ {"q_no": 30, "subject": "Geography", "category": "social science", "level": "hard", "answer": "2"}
691
+ {"q_no": 21, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "1"}
692
+ {"q_no": 2, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "1"}
693
+ {"q_no": 1, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "3"}
694
+ {"q_no": 2, "subject": "Physics", "category": "stem", "level": "hard", "answer": "2"}
695
+ {"q_no": 9, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "2"}
696
+ {"q_no": 24, "subject": "Home Economics", "category": "other", "level": "hard", "answer": "2"}
697
+ {"q_no": 15, "subject": "Physics", "category": "stem", "level": "hard", "answer": "4"}
698
+ {"q_no": 19, "subject": "Physics", "category": "stem", "level": "hard", "answer": "3"}
699
+ {"q_no": 16, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "1"}
700
+ {"q_no": 5, "subject": "Physics", "category": "stem", "level": "hard", "answer": "1"}
701
+ {"q_no": 27, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "1"}
702
+ {"q_no": 18, "subject": "Physics", "category": "stem", "level": "hard", "answer": "3"}
703
+ {"q_no": 20, "subject": "Physics", "category": "stem", "level": "hard", "answer": "3"}
704
+ {"q_no": 4, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
705
+ {"q_no": 26, "subject": "Political Science", "category": "social science", "level": "hard", "answer": "2"}
706
+ {"q_no": 3, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
707
+ {"q_no": 8, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "4"}
708
+ {"q_no": 5, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "4"}
709
+ {"q_no": 9, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "3"}
710
+ {"q_no": 11, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "2"}
711
+ {"q_no": 14, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "4"}
712
+ {"q_no": 19, "subject": "Sinhala", "category": "language", "level": "hard", "answer": "1"}
training/passes/positional_option_keys.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [[1, "Design and Construction Technology", "other", "medium"], [12, "Health", "Social_science", "medium"], [19, "Health and Physical Education", "other", "easy"], [20, "Science", "stem", "easy"], [28, "Health and Physical Education", "other", "easy"], [32, "Health and Physical Education", "other", "easy"], [45, "Science", "stem", "easy"], [144, "Dancing", "Humanities", "medium"]]
training/src/baseline_runner.py ADDED
@@ -0,0 +1,456 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ # Historical source snapshot. Comments about accuracy, data origin, or compliance
3
+ # are author claims, not verification; see training/README.md and REPRODUCIBILITY.md.
4
+ """
5
+ Baseline Inference Runner for Sinhala MMLU Shared Task
6
+ Loads all questions from data/ (easy, medium, hard) and outputs predictions.jsonl
7
+ Uses Ollama /api/chat with strict structured exam prompting.
8
+ Supports:
9
+ - Fast direct mode (default), Cross-Lingual CoT mode (--cot), and <think> mode (--think)
10
+ - Rapid local validation benchmark (--val_only)
11
+ - Automatic checkpointing and resuming
12
+ """
13
+
14
+ import json
15
+ import argparse
16
+ import sys
17
+ import re
18
+ import os
19
+ import random
20
+ from pathlib import Path
21
+ import urllib.request
22
+
23
+ # Add src to sys.path so prompts can be imported from anywhere
24
+ sys.path.insert(0, str(Path(__file__).parent))
25
+ from prompts import build_prompt
26
+
27
+
28
+ def extract_answer_digit(text: str) -> str:
29
+ """Extracts the chosen option index (1, 2, 3, 4) from model output text."""
30
+ if not text:
31
+ return "1"
32
+ # If '</think>' is present in content, only parse after '</think>'
33
+ if "</think>" in text:
34
+ text = text.split("</think>")[-1]
35
+ text = text.strip()
36
+
37
+ # 1. Explicit 'Answer: X' or 'පිළිතුර: X' or 'Option X' (take last match if CoT text precedes it)
38
+ explicit_matches = re.findall(
39
+ r"(?:පිළිතුර|Answer|Final Answer|Correct Option|නිවැරදි පිළිතුර|තෝරාගැනීම)\s*(?:is|වන්නේ)?\s*[:\s*#(\[]*(?:Option\s*)?([1-4])\b",
40
+ text,
41
+ re.IGNORECASE,
42
+ )
43
+ if explicit_matches:
44
+ return explicit_matches[-1]
45
+
46
+ # 2. Match leading digit if response is just a digit
47
+ m = re.match(r"^[(\[]?\s*([1-4])\b", text)
48
+ if m and len(text) <= 8:
49
+ return m.group(1)
50
+
51
+ # 3. Match the last standalone digit 1-4 in the response
52
+ matches = re.findall(r"\b([1-4])\b", text)
53
+ if matches:
54
+ return matches[-1]
55
+
56
+ m = re.search(r"[1-4]", text)
57
+ if m:
58
+ return m.group(0)
59
+
60
+ # Fallback default
61
+ return "1"
62
+
63
+
64
+ def load_all_questions(data_dir: Path):
65
+ """Loads all questions from easy, medium, and hard folders in consistent order."""
66
+ questions = []
67
+ levels = ["easy", "medium", "hard"]
68
+
69
+ for lvl in levels:
70
+ folder = data_dir / lvl
71
+ if not folder.exists():
72
+ continue
73
+ files = sorted(list(folder.glob("*.json")))
74
+ for f in files:
75
+ with open(f, "r", encoding="utf-8") as fp:
76
+ data = json.load(fp)
77
+ for item in data:
78
+ item["_level"] = lvl
79
+ item["_source_file"] = f.name
80
+ questions.append(item)
81
+
82
+ return questions
83
+
84
+
85
+ def load_val_questions(gold_val_path: Path):
86
+ """Loads questions from the gold validation file."""
87
+ questions = []
88
+ with open(gold_val_path, "r", encoding="utf-8") as f:
89
+ for line in f:
90
+ line = line.strip()
91
+ if line:
92
+ d = json.loads(line)
93
+ d["_level"] = d["level"]
94
+ questions.append(d)
95
+ return questions
96
+
97
+
98
+ def make_q_key(record: dict) -> str:
99
+ lvl = str(record.get("level", "")).lower().strip()
100
+ subj = str(record.get("subject", "")).strip()
101
+ q_no = str(record.get("q_no", "")).strip()
102
+ return f"{lvl}_{subj}_{q_no}"
103
+
104
+
105
+ def load_existing_checkpoint(output_path: Path):
106
+ """Loads existing predictions from output_file if resuming, indexed by composite key."""
107
+ existing = {}
108
+ if output_path.exists():
109
+ with open(output_path, "r", encoding="utf-8") as fp:
110
+ for line in fp:
111
+ line = line.strip()
112
+ if line:
113
+ try:
114
+ record = json.loads(line)
115
+ key = make_q_key(record)
116
+ existing[key] = record
117
+ except Exception:
118
+ pass
119
+ return existing
120
+
121
+
122
+ SYSTEM_EXAM_PROMPT = (
123
+ "You are an examination AI for the Sri Lankan school curriculum (Sinhala medium). "
124
+ "For every multiple-choice question, analyze the options carefully and answer by replying "
125
+ "with ONLY the single digit of the best option (1, 2, 3, or 4). "
126
+ "Do NOT provide explanations, do NOT include option text, and do NOT write anything other than the single digit."
127
+ )
128
+
129
+ SYSTEM_COT_PROMPT = (
130
+ "You are an expert examiner for the Sri Lankan school curriculum (Sinhala medium). "
131
+ "For each multiple-choice question, write a concise 1-2 sentence English translation and fact-check ('Analysis:'), "
132
+ "then end on a new line with strictly 'Answer: <digit>' (where <digit> is 1, 2, 3, or 4)."
133
+ )
134
+
135
+ SYSTEM_THINK_PROMPT = (
136
+ "You are an expert teacher of the Sri Lankan national school curriculum (grades 6-13), "
137
+ "fluent in Sinhala. You will receive a multiple-choice question written in Sinhala with four "
138
+ "numbered options. Exactly one option is correct. Read the Sinhala carefully, including "
139
+ "negations such as 'නොවන' / 'නොවේ' (NOT). You may reason in English. "
140
+ "Finish with the final answer in the form 'Answer: <number>'."
141
+ )
142
+
143
+ ANSWER_THINK_RE = re.compile(r"(?:Answer|පිළිතුර)\s*[::]?\s*\**\s*\(?([1-4])\)?", re.IGNORECASE)
144
+
145
+
146
+ def build_think_user_prompt(q: dict) -> str:
147
+ """Builds the Zero-Shot Curriculum Teacher user prompt with Subject & Grade context (72.82% val accuracy)."""
148
+ choices = q.get("choices")
149
+ if choices is None:
150
+ choices = q.get("options", [])
151
+ if isinstance(choices, dict):
152
+ keys = sorted(choices.keys(), key=lambda x: str(x))
153
+ opt_list = [choices[k] for k in keys]
154
+ else:
155
+ opt_list = list(choices) if choices else []
156
+
157
+ opts = "\n".join(f"{i}. {c}" for i, c in enumerate(opt_list, 1))
158
+ lvl = str(q.get("_level", q.get("level", "medium"))).lower().strip()
159
+ grade = "6-9" if lvl == "easy" else ("10-11 (O/L)" if lvl == "medium" else "12-13 (A/L)")
160
+ subj = q.get("subject", "General")
161
+ qtext = q.get("question", "").strip()
162
+ return (
163
+ f"විෂය (Subject): {subj} | ශ්‍රේණිය (Grade): {grade}\n\n"
164
+ f"ප්‍රශ්නය (Question):\n{qtext}\n\n"
165
+ f"විකල්ප (Options):\n{opts}\n\n"
166
+ "Which option (1, 2, 3 or 4) is correct? End your reply with 'Answer: <number>'."
167
+ )
168
+
169
+
170
+ _NO_PROXY_OPENER = urllib.request.build_opener(urllib.request.ProxyHandler({}))
171
+
172
+
173
+ def query_ollama_chat(
174
+ model_name: str,
175
+ system_prompt: str,
176
+ user_prompt: str,
177
+ think: bool = False,
178
+ cot: bool = False,
179
+ timeout: int = 240
180
+ ) -> tuple[str, str]:
181
+ """Sends a chat request to local Ollama /api/chat and returns (raw_text, extracted_digit)."""
182
+ if think:
183
+ num_predict = 2048
184
+ elif cot:
185
+ num_predict = 260
186
+ else:
187
+ num_predict = 15
188
+
189
+ options = {
190
+ "temperature": 0.0,
191
+ "num_predict": num_predict,
192
+ }
193
+ if not think:
194
+ options["stop"] = ["\nප්‍රශ්නය:", "\nQuestion:", "<|im_end|>", "<|endoftext|>", "<|im_start|>"]
195
+
196
+ req_data = json.dumps({
197
+ "model": model_name,
198
+ "messages": [
199
+ {"role": "system", "content": system_prompt},
200
+ {"role": "user", "content": user_prompt}
201
+ ],
202
+ "stream": False,
203
+ "think": think,
204
+ "options": options
205
+ }).encode("utf-8")
206
+
207
+ req = urllib.request.Request(
208
+ "http://127.0.0.1:11434/api/chat",
209
+ data=req_data,
210
+ headers={"Content-Type": "application/json"}
211
+ )
212
+
213
+ with _NO_PROXY_OPENER.open(req, timeout=timeout) as resp:
214
+ res = json.loads(resp.read().decode("utf-8"))
215
+ msg = res.get("message", {})
216
+ content = msg.get("content", "")
217
+ thinking = msg.get("thinking", "")
218
+ if think:
219
+ m = ANSWER_THINK_RE.findall(content) or ANSWER_THINK_RE.findall(thinking)
220
+ if m:
221
+ return content or thinking, m[-1]
222
+ combined = (thinking + "\n" + content).strip()
223
+ return combined, extract_answer_digit(content if content.strip() else thinking)
224
+ return content, extract_answer_digit(content)
225
+
226
+
227
+ def save_merged_full_predictions(
228
+ canonical_questions: list,
229
+ completed_map: dict,
230
+ fallback_map: dict,
231
+ merged_path: Path
232
+ ):
233
+ """Writes a complete 2,238-line prediction file in canonical order using completed_map + fallback_map."""
234
+ with open(merged_path, "w", encoding="utf-8") as fp:
235
+ for q in canonical_questions:
236
+ q_no = q["q_no"]
237
+ subj = q.get("subject", "general")
238
+ cat = q.get("category", "general")
239
+ lvl = q["_level"].lower()
240
+ q_key = f"{lvl}_{subj}_{q_no}"
241
+ if q_key in completed_map:
242
+ rec = completed_map[q_key]
243
+ elif q_key in fallback_map:
244
+ rec = fallback_map[q_key]
245
+ else:
246
+ rec = {
247
+ "q_no": q_no,
248
+ "subject": subj,
249
+ "category": cat,
250
+ "level": lvl,
251
+ "answer": "1"
252
+ }
253
+ fp.write(json.dumps(rec, ensure_ascii=False) + "\n")
254
+
255
+
256
+ def run_inference(
257
+ data_dir: str,
258
+ output_file: str,
259
+ engine: str,
260
+ model_name: str,
261
+ mock: bool,
262
+ max_questions: int = None,
263
+ resume: bool = True,
264
+ val_only: bool = False,
265
+ gold_val_file: str = "data/gold_val_41.jsonl",
266
+ think: bool = False,
267
+ cot: bool = False,
268
+ priority_disputed: bool = False,
269
+ fallback_file: str = "data/predictions_gemma4_cot.jsonl",
270
+ compare_file: str = "data/predictions_gemma4_direct.jsonl",
271
+ merged_output: str = "data/predictions_gemma4_think_full.jsonl"
272
+ ):
273
+ if val_only:
274
+ val_path = Path(gold_val_file)
275
+ if not val_path.exists():
276
+ print(f"Error: Gold validation file '{gold_val_file}' not found!")
277
+ sys.exit(1)
278
+ all_questions = load_val_questions(val_path)
279
+ print(f"Loaded {len(all_questions)} validation questions from '{gold_val_file}'.")
280
+ else:
281
+ data_path = Path(data_dir)
282
+ if not data_path.exists():
283
+ print(f"Error: Data directory '{data_dir}' not found!")
284
+ sys.exit(1)
285
+ all_questions = load_all_questions(data_path)
286
+ print(f"Loaded {len(all_questions)} questions across easy, medium, and hard.")
287
+
288
+ canonical_questions = list(all_questions)
289
+
290
+ fallback_map = {}
291
+ compare_map = {}
292
+ if not val_only and Path(fallback_file).exists():
293
+ fallback_map = load_existing_checkpoint(Path(fallback_file))
294
+ if not val_only and Path(compare_file).exists():
295
+ compare_map = load_existing_checkpoint(Path(compare_file))
296
+
297
+ if priority_disputed and not val_only and fallback_map and compare_map:
298
+ lvl_rank = {"hard": 0, "medium": 1, "easy": 2}
299
+ def sort_key(q):
300
+ lvl = q["_level"].lower()
301
+ subj = q.get("subject", "general")
302
+ q_no = q["q_no"]
303
+ k = f"{lvl}_{subj}_{q_no}"
304
+ a1 = fallback_map.get(k, {}).get("answer", "1")
305
+ a2 = compare_map.get(k, {}).get("answer", "1")
306
+ is_disputed = 0 if a1 != a2 else 1
307
+ return (is_disputed, lvl_rank.get(lvl, 3))
308
+ all_questions = sorted(all_questions, key=sort_key)
309
+ disputed_cnt = sum(
310
+ 1 for q in all_questions
311
+ if fallback_map.get(f"{q['_level'].lower()}_{q.get('subject','general')}_{q['q_no']}", {}).get("answer")
312
+ != compare_map.get(f"{q['_level'].lower()}_{q.get('subject','general')}_{q['q_no']}", {}).get("answer")
313
+ )
314
+ print(f"Priority-Disputed Mode ON: Processing {disputed_cnt} disputed questions first (Hard -> Medium -> Easy)!")
315
+
316
+ if max_questions and max_questions > 0:
317
+ all_questions = all_questions[:max_questions]
318
+ print(f"Limiting inference to first {len(all_questions)} questions as requested.")
319
+
320
+ output_path = Path(output_file)
321
+ output_path.parent.mkdir(parents=True, exist_ok=True)
322
+ merged_path = Path(merged_output)
323
+
324
+ existing_preds = {}
325
+ if resume and output_path.exists():
326
+ existing_preds = load_existing_checkpoint(output_path)
327
+ print(f"Resuming: Found {len(existing_preds)} existing predictions in '{output_file}'.")
328
+
329
+ predictions = []
330
+ completed_map = dict(existing_preds)
331
+
332
+ if mock:
333
+ print("Running in MOCK mode (generating valid random predictions)...")
334
+ for q in all_questions:
335
+ q_no = q["q_no"]
336
+ subj = q.get("subject", "general")
337
+ lvl = q["_level"].lower()
338
+ q_key = f"{lvl}_{subj}_{q_no}"
339
+ if resume and q_key in existing_preds:
340
+ predictions.append(existing_preds[q_key])
341
+ continue
342
+ pred_record = {
343
+ "q_no": q_no,
344
+ "subject": subj,
345
+ "category": q.get("category", "general"),
346
+ "level": lvl,
347
+ "answer": str(random.randint(1, 4))
348
+ }
349
+ predictions.append(pred_record)
350
+ completed_map[q_key] = pred_record
351
+ elif engine == "ollama":
352
+ print(f"Running inference with local Ollama model: '{model_name}' via /api/chat (think={think}, cot={cot})...")
353
+ if think:
354
+ sys_prompt = SYSTEM_THINK_PROMPT
355
+ elif cot:
356
+ sys_prompt = SYSTEM_COT_PROMPT
357
+ else:
358
+ sys_prompt = SYSTEM_EXAM_PROMPT
359
+
360
+ for i, q in enumerate(all_questions, 1):
361
+ q_no = q["q_no"]
362
+ subj = q.get("subject", "general")
363
+ cat = q.get("category", "general")
364
+ lvl = q["_level"].lower()
365
+
366
+ q_key = f"{lvl}_{subj}_{q_no}"
367
+ if resume and q_key in existing_preds:
368
+ predictions.append(existing_preds[q_key])
369
+ continue
370
+
371
+ if think:
372
+ prompt = build_think_user_prompt(q)
373
+ else:
374
+ prompt = build_prompt(q)
375
+ if cot:
376
+ prompt += "\nAnalysis:"
377
+ raw = ""
378
+ try:
379
+ raw, ans_digit = query_ollama_chat(model_name, sys_prompt, prompt, think=think, cot=cot)
380
+ except Exception as e:
381
+ print(f"[{i}/{len(all_questions)}] Ollama error on Q#{q_no} ({subj}): {e}. Using fallback 1.")
382
+ ans_digit = fallback_map.get(q_key, {}).get("answer", "1")
383
+
384
+ record = {
385
+ "q_no": q_no,
386
+ "subject": subj,
387
+ "category": cat,
388
+ "level": lvl,
389
+ "answer": str(ans_digit)
390
+ }
391
+ predictions.append(record)
392
+ completed_map[q_key] = record
393
+
394
+ if i % 10 == 0 or i == len(all_questions):
395
+ print(f"Progress: {i}/{len(all_questions)} processed (Total solved={len(completed_map)}). Latest ({lvl}/{subj} Q#{q_no}): => {ans_digit}")
396
+ with open(output_path, "w", encoding="utf-8") as fp:
397
+ for p in predictions:
398
+ fp.write(json.dumps(p, ensure_ascii=False) + "\n")
399
+ if not val_only and fallback_map:
400
+ save_merged_full_predictions(canonical_questions, completed_map, fallback_map, merged_path)
401
+ else:
402
+ print(f"Unsupported engine: {engine}")
403
+ sys.exit(1)
404
+
405
+ # Write final predictions
406
+ with open(output_path, "w", encoding="utf-8") as fp:
407
+ for p in predictions:
408
+ fp.write(json.dumps(p, ensure_ascii=False) + "\n")
409
+
410
+ if not val_only and fallback_map:
411
+ save_merged_full_predictions(canonical_questions, completed_map, fallback_map, merged_path)
412
+ print(f"Complete 2,238-line merged file updated at: {merged_output}")
413
+
414
+ print(f"\nDONE! {len(predictions)} predictions written to {output_file}")
415
+ if not val_only:
416
+ target_sub = merged_output if (priority_disputed and fallback_map) else output_file
417
+ print(f"To package and validate for Codabench at any time, run:")
418
+ print(f" python3 src/package_submission.py {target_sub} submission_gemma4_think.zip\n")
419
+
420
+
421
+ def main():
422
+ parser = argparse.ArgumentParser(description="Sinhala MMLU Baseline Runner")
423
+ parser.add_argument("--data_dir", default="data", help="Path to data directory containing easy, medium, hard")
424
+ parser.add_argument("--output", default="data/predictions.jsonl", help="Output predictions path")
425
+ parser.add_argument("--engine", choices=["ollama"], default="ollama", help="Inference engine")
426
+ parser.add_argument("--model", default="qwen3.5:4b", help="Model name in Ollama")
427
+ parser.add_argument("--mock", action="store_true", help="Generate fast mock predictions to test pipeline")
428
+ parser.add_argument("--max_questions", type=int, default=None, help="Process only first N questions")
429
+ parser.add_argument("--no_resume", action="store_true", help="Do not resume from existing checkpoint")
430
+ parser.add_argument("--val_only", action="store_true", help="Run only on the 41-question local gold benchmark")
431
+ parser.add_argument("--gold_val_file", default="data/gold_val_41.jsonl", help="Gold validation benchmark file")
432
+ parser.add_argument("--think", action="store_true", help="Enable native thinking mode (72.82%% val accuracy on gemma4:e4b)")
433
+ parser.add_argument("--cot", action="store_true", help="Enable concise Cross-Lingual Translate-and-Reason CoT mode")
434
+ parser.add_argument("--priority_disputed", action="store_true", help="Solve disputed questions first and continuously update 2238-line merged output")
435
+ parser.add_argument("--merged_output", default="data/predictions_gemma4_think_full.jsonl", help="Path for continuously updated 2238-line full submission file")
436
+ args = parser.parse_args()
437
+
438
+ run_inference(
439
+ args.data_dir,
440
+ args.output,
441
+ args.engine,
442
+ args.model,
443
+ args.mock,
444
+ args.max_questions,
445
+ resume=not args.no_resume,
446
+ val_only=args.val_only,
447
+ gold_val_file=args.gold_val_file,
448
+ think=args.think,
449
+ cot=args.cot,
450
+ priority_disputed=args.priority_disputed,
451
+ merged_output=args.merged_output
452
+ )
453
+
454
+
455
+ if __name__ == "__main__":
456
+ main()
training/src/few_shot_prompts.py ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Historical source snapshot. Comments about accuracy, data origin, or compliance
2
+ # are author claims, not verification; see training/README.md and REPRODUCIBILITY.md.
3
+ """
4
+ SinhalaMMLU Few-Shot (In-Context Learning) Prompt Builder
5
+ Derived from the EMNLP 2025 benchmark paper:
6
+ 'SinhalaMMLU: A Comprehensive Benchmark for Evaluating Multitask Language Understanding in Sinhala'
7
+
8
+ Features:
9
+ - 100% external Sri Lankan curriculum exemplars (zero overlap with test questions, strictly abiding by Rule #04)
10
+ - Balanced exemplars covering Humanities, Social Sciences, STEM, Language, and Other
11
+ - Non-sequential balanced gold answer order (2, 4, 1, 3) to prevent ascending 1->2->3->4->1 continuation bias
12
+ - Supports Direct Mode, English Cross-Lingual CoT (--cot), and Tamil Cross-Lingual CoT (--cot --cot_lang ta)
13
+ """
14
+
15
+ # Exact task-849 (57.78% overall, 73.33% Hard) exemplars ordered (2, 4, 1, 3)
16
+ EXEMPLARS_BY_DOMAIN = {
17
+ "humanities": [
18
+ {
19
+ "question": "අනුරාධපුර රාජධානියේ පළමු රජු ලෙස සැලකෙන්නේ කවුරුන්ද?",
20
+ "choices": ["දේවානම්පියතිස්ස රජු", "පණ්ඩුකාභය රජු", "දුටුගැමුණු රජු", "වළගම්බා රජු"],
21
+ "analysis": "The question asks who is considered the first king of the Anuradhapura Kingdom. Options: (1) Devanampiyatissa, (2) Pandukabhaya, (3) Dutugemunu, (4) Valagamba. King Pandukabhaya founded Anuradhapura as the capital and was its first king.",
22
+ "analysis_ta": "வினா: அனுராதபுர இராச்சியத்தின் முதல் மன்னராகக் கருதப்படுபவர் யார்? தெரிவுகள்: (1) தேவநம்பியதிஸ்ஸ, (2) பண்டுகாபய, (3) துட்டகைமுனு, (4) வலகம்பா. அனுராதபுரத்தைத் தலைநகராகக் கொண்டு ஆட்சி செய்த முதல் மன்னன் பண்டுகாபய ஆவார்.",
23
+ "answer": "2"
24
+ },
25
+ {
26
+ "question": "මහාචාර්ය එදිරිවීර සරච්චන්ද්‍රයන් විසින් රචිත ප්‍රකට ශෛලිගත නාට්‍යය කුමක්ද?",
27
+ "choices": ["කැලණි පාලම", "හුණුවටයේ කතාව", "සුබ සහ යස", "මනමේ"],
28
+ "analysis": "The question asks for the famous stylized drama written by Prof. Ediriweera Sarachchandra. Options: (1) Kelani Palama, (2) Hunuwataye Kathawa, (3) Suba saha Yasa, (4) Maname. Maname (1956) is Sarachchandra's iconic stylized drama.",
29
+ "analysis_ta": "வினா: பேராசிரியர் எதிரிவீர சரச்சந்திரவால் எழுதப்பட்ட புகழ்பெற்ற நாடகம் எது? தெரிவுகள்: (1) களனி பாலம, (2) ஹுனுவட்டயே கதாவ, (3) சுப சஹ யச, (4) மனமே. 'மனமே' (1956) சரச்சந்திரவின் புகழ்பெற்ற நாடகமாகும்.",
30
+ "answer": "4"
31
+ },
32
+ {
33
+ "question": "සිදුහත් කුමරු ගිහිගෙය හැර යාමේ සිදුවීම බෞද්ධ සාහිත්‍යයේ හඳුන්වනු ලබන්නේ කුමන නමකින්ද?",
34
+ "choices": ["මහාභිනිෂ්ක්‍රමණය", "ධම්මචක්කප්පවත්තනය", "මහා පරිනිර්වාණය", "සම්බෝධිය"],
35
+ "analysis": "The question asks how Prince Siddhartha's renunciation of worldly life is known in Buddhist literature. Options: (1) Mahabinishkramanaya (Great Renunciation), (2) Dhammacakkappavattana, (3) Maha Parinirvana, (4) Sambodhi. Renunciation is Mahabinishkramanaya.",
36
+ "analysis_ta": "வினா: சித்தார்த்த இளவரசர் இல்லற வாழ்வைத் துறந்த நிகழ்வு பௌத்த இலக்கியத்தில் எவ்வாறு அழைக்கப்படுகிறது? தெரிவுகள்: (1) மஹாபினிஷ்கிரமணய (மகா துறவு), (2) தம்மசக்கப்பவத்தன, (3) மகா பரிநிர்வாணம், (4) சம்போதி. இல்லறத் துறவு மஹாபினிஷ்கிரமணய எனப்படும்.",
37
+ "answer": "1"
38
+ },
39
+ {
40
+ "question": "උඩරට නර්තන සම්ප්‍රදායේ ප්‍රධානතම අවනද්ධ භාණ්ඩය කුමක්ද?",
41
+ "choices": ["දවුල", "තම්මැට්ටම", "ගැට බෙරය", "යක් බෙරය"],
42
+ "analysis": "The question asks for the main percussion drum of the Kandyan (Udarata) dance tradition. Options: (1) Dawula, (2) Thammattama, (3) Geta Beraya, (4) Yak Beraya. Geta Beraya is the primary drum of Kandyan dance.",
43
+ "analysis_ta": "வினா: கண்டிய (உடரட்ட) நடன மரபின் முக்கிய தோற்கருவி எது? தெரிவுகள்: (1) தவுல, (2) தம்மட்டம, (3) கெட்ட பெரய, (4) யக் பெரய. கண்டிய நடனத்தின் பிரதான மேளம் கெட்ட பெரய ஆகும்.",
44
+ "answer": "3"
45
+ }
46
+ ],
47
+ "stem": [
48
+ {
49
+ "question": "ශාක ප්‍රභාසංශ්ලේෂණ ක්‍රියාවලියේදී අතුරු ඵලයක් ලෙස පරිසරයට නිදහස් වන වායුව කුමක්ද?",
50
+ "choices": ["කාබන් ඩයොක්සයිඩ්", "ඔක්සිජන්", "නයිට්‍රජන්", "හයිඩ්‍රජන්"],
51
+ "analysis": "The question asks which gas is released as a byproduct of plant photosynthesis. Options: (1) Carbon dioxide, (2) Oxygen, (3) Nitrogen, (4) Hydrogen. Photosynthesis absorbs CO2 and releases Oxygen.",
52
+ "analysis_ta": "வினா: தாவர ஒளித்தொகுப்பின் போது பக்க விளைபொருளாகச் சூழலுக்கு விடுவிக்கப்படும் வாயு எது? தெரிவுகள்: (1) காபீரனீரொட்சைட்டு, (2) ஒட்சிசன், (3) நைதரசன், (4) ஐதரசன். ஒளித்தொகுப்பின் போது ஒட்சிசன் வாயு வெளியேற்றப்படுகிறது.",
53
+ "answer": "2"
54
+ },
55
+ {
56
+ "question": "විද්‍යුත් ධාරාව මැනීම සඳහා භාවිත කරන ජාත්‍යන්තර සම්මත (SI) ඒකකය කුමක්ද?",
57
+ "choices": ["වෝල්ට් (V)", "ඕම් (Ω)", "වොට් (W)", "ඇම්පියර් (A)"],
58
+ "analysis": "The question asks for the SI unit used to measure electric current. Options: (1) Volt, (2) Ohm, (3) Watt, (4) Ampere. Electric current is measured in Amperes (A).",
59
+ "analysis_ta": "வினா: மின்னோட்டத்தை அளவிடப் பயன்படும் சர்வதேச நியம (SI) அலகு யாது? தெரிவுகள்: (1) வோல்ட் (V), (2) ஓம் (Ω), (3) வாட் (W), (4) அம்பியர் (A). மின்னோட்டத்தின் SI அலகு அம்பியர் (A) ஆகும்.",
60
+ "answer": "4"
61
+ },
62
+ {
63
+ "question": "ජලයේ රසායනික සූත්‍රය නිවැරදිව දක්වා ඇත්තේ කවරේද?",
64
+ "choices": ["H2O", "CO2", "NaCl", "CH4"],
65
+ "analysis": "The question asks for the chemical formula of water. Options: (1) H2O, (2) CO2, (3) NaCl, (4) CH4. Water is H2O.",
66
+ "analysis_ta": "வினா: நீரின் இரசாயனச் சூத்திரம் எது? தெரிவுகள்: (1) H2O, (2) CO2, (3) NaCl, (4) CH4. நீரின் இரசாயனச் சூத்திரம் H2O ஆகும்.",
67
+ "answer": "1"
68
+ },
69
+ {
70
+ "question": "දිග මැනීම සඳහා භාවිත වන ජාත්‍යන්තර සම්මත (SI) ඒකකය කුමක්ද?",
71
+ "choices": ["මිලිමීටර්", "සෙන්ටිමීටර්", "මීටර්", "කිලෝමීටර්"],
72
+ "analysis": "The question asks for the SI base unit of length. Options: (1) millimeter, (2) centimeter, (3) meter, (4) kilometer. The SI base unit of length is the meter.",
73
+ "analysis_ta": "வினா: நீளத்தை அளவிடப் பயன்படும் சர்வதேச நியம (SI) அலகு எது? தெரிவுகள்: (1) மில்லிமீற்றர், (2) சென்ரிமீற்றர், (3) மீற்றர், (4) கிலோமீற்றர். நீளத்தின் SI அடிப்படை அலகு மீற்றர் ஆகும்.",
74
+ "answer": "3"
75
+ }
76
+ ],
77
+ "social_science": [
78
+ {
79
+ "question": "ශ්‍රී ලංකාවේ මුදල් නෝට්ටු නිකුත් කිරීමේ නිල බලය හිමි ආයතන�� කුමක්ද?",
80
+ "choices": ["මුදල් අමාත්‍යාංශය", "ශ්‍රී ලංකා මහ බැංකුව", "ලංකා බැංකුව", "මහා භාණ්ඩාගාරය"],
81
+ "analysis": "The question asks which institution has official authority to issue currency notes in Sri Lanka. Options: (1) Ministry of Finance, (2) Central Bank of Sri Lanka, (3) Bank of Ceylon, (4) General Treasury. The Central Bank of Sri Lanka issues currency.",
82
+ "analysis_ta": "வினா: இலங்கையில் நாணயத்தாள்களை வெளியிடும் அதிகாரம் கொண்ட நிறுவனம் எது? தெரிவுகள்: (1) நிதி அமைச்சு, (2) இலங்கை மத்திய வங்கி, (3) இலங்கை வங்கி, (4) மகா திறைசேரி. இலங்கை மத்திய வங்கியே நாணயத்தாள்களை வெளியிடுகிறது.",
83
+ "answer": "2"
84
+ },
85
+ {
86
+ "question": "නිෂ්පාදන සාධක සතරට අයත් නොවන සාධකය තෝරන්න.",
87
+ "choices": ["භූමිය", "ශ්‍රමය", "ප්‍රාග්ධනය", "උද්ධමනය"],
88
+ "analysis": "The question asks which item does NOT belong to the four factors of production. Options: (1) Land, (2) Labor, (3) Capital, (4) Inflation. Land, labor, capital, and entrepreneurship are factors of production; inflation is not.",
89
+ "analysis_ta": "வினா: நான்கு உற்பத்திக் காரணிகளில் அடங்காத ஒன்றைத் தெரிவு செய்க. தெரிவுகள்: (1) நிலம், (2) உழைப்பு, (3) மூலதனம், (4) பணவீக்கம். நிலம், உழைப்பு, மூலதனம், முயற்சியாண்மை என்பன உற்பத்திக் காரணிகள்; பணவீக்கம் உற்பத்திக் காரணி அல்ல.",
90
+ "answer": "4"
91
+ },
92
+ {
93
+ "question": "ශ්‍රී ලංකාවේ දිගම ගංගාව කුමක්ද?",
94
+ "choices": ["මහවැලි ගඟ", "කැලණි ගඟ", "කළු ගඟ", "වලවේ ගඟ"],
95
+ "analysis": "The question asks for the longest river in Sri Lanka. Options: (1) Mahaweli River, (2) Kelani River, (3) Kalu River, (4) Walawe River. Mahaweli River (335 km) is the longest.",
96
+ "analysis_ta": "வினா: இலங்கையின் மிக நீளமான ஆறு எது? தெரிவுகள்: (1) மகாவலி கங்கை, (2) களனி கங்கை, (3) களு கங்கை, (4) வளவை கங்கை. மகாவலி கங்கை (335 கி.மீ) இலங்கையின் மிக நீளமான ஆறாகும்.",
97
+ "answer": "1"
98
+ },
99
+ {
100
+ "question": "ශ්‍රී ලංකාවේ භූමි ප්‍රමාණය අනුව විශාලතම පළාත කුමක්ද?",
101
+ "choices": ["බස්නාහිර පළාත", "වයඹ පළාත", "උතුරු මැද පළාත", "දකුණු පළාත"],
102
+ "analysis": "The question asks for the largest province in Sri Lanka by land area. Options: (1) Western, (2) North Western, (3) North Central, (4) Southern. North Central Province is the largest by area.",
103
+ "analysis_ta": "வினா: நிலப்பரப்பின் அடிப்படையில் இலங்கையின் மிகப்பெரிய மாகாணம் எது? தெரிவுகள்: (1) மேல் மாகாணம், (2) வயம்ப மாகாணம், (3) வடமத்திய மாகாணம், (4) தென் மாகாணம். வடமத்திய மாகாணமே நிலப்பரப்பில் மிகப்பெரியது.",
104
+ "answer": "3"
105
+ }
106
+ ],
107
+ "language": [
108
+ {
109
+ "question": "'ගම්පෙරළිය' නවකතාව රචනා කළ ලේඛකයා කවුරුන්ද?",
110
+ "choices": ["කුමාරතුංග මුනිදාස", "මාර්ටින් වික්‍රමසිංහ", "ඩබ්ලියු. ඒ. සිල්වා", "පියදාස සිරිසේන"],
111
+ "analysis": "The question asks who wrote the Sinhala novel 'Gamperaliya'. Options: (1) Kumaratunga Munidasa, (2) Martin Wickramasinghe, (3) W. A. Silva, (4) Piyadasa Sirisena. Gamperaliya was written by Martin Wickramasinghe.",
112
+ "analysis_ta": "வினா: 'கம்பெரலிய' நாவ���ை எழுதிய ஆசிரியர் யார்? தெரிவுகள்: (1) குமாரதுங்க முனிதாச, (2) மார்ட்டின் விக்கிரமசிங்க, (3) டபிள்யூ. ஏ. சில்வா, (4) பியதாச சிறிசேன. கம்பெரலிய நாவலை எழுதியவர் மார்ட்டின் விக்கிரமசிங்க ஆவார்.",
113
+ "answer": "2"
114
+ },
115
+ {
116
+ "question": "සිංහල ව්‍යාකරණයට අනුව උක්ත ආඛ්‍යාත සම්බන්ධය නිවැරදි වාක්‍යය තෝරන්න.",
117
+ "choices": ["ළමයි පොත් කියවයි.", "මම පාසල් ගියෝය.", "අපි ගීත ගයති.", "ගොවියෝ කුඹුරු කොටති."],
118
+ "analysis": "The question asks for the grammatically correct Sinhala subject-verb agreement. Options 1, 2, 3 mismatch plural/first-person subjects with third-person singular/plural verbs. Option 4 ('ගොවියෝ කුඹුරු කොටති') correctly pairs plural animate subject 'ගොවියෝ' with plural verb 'කොටති'.",
119
+ "analysis_ta": "வினா: சிங்கள இலக்கணத்தின்படி எழுவாய்-பயனிலை இயைபு சரியாக உள்ள வாக்கியத்தைத் தெரிவு செய்க. 4-வது தெரிவு ('ගොවියෝ කුඹුරු කොටති') பன்மை எழுவாயுடன் ('ගොවියෝ') பன்மை வினைமுற்றை ('කොටති') சரியாக இணைக்கிறது.",
120
+ "answer": "4"
121
+ },
122
+ {
123
+ "question": "නූතන සම්මත සිංහල වර්ණ මාලාවේ අඩංගු මුළු අක්ෂර ගණන කීයද?",
124
+ "choices": ["60 කි.", "54 කි.", "36 කි.", "42 කි."],
125
+ "analysis": "The question asks for the total number of letters in the modern standard Sinhala alphabet (Nuthana Sinhala Varnamalawa). It contains 60 letters.",
126
+ "analysis_ta": "வினா: நவீன நியம சிங்கள நெடுங்கணக்கில் உள்ள மொத்த எழுத்துக்களின் எண்ணிக்கை யாது? தெரிவுகள்: (1) 60, (2) 54, (3) 36, (4) 42. நவீன சிங்கள நெடுங்கணக்கில் மொத்தம் 60 எழுத்துக்கள் உள்ளன.",
127
+ "answer": "1"
128
+ },
129
+ {
130
+ "question": "'හිරු' යන පදයට සමානාර්ථ පදයක් නොවන්නේ කුමක්ද?",
131
+ "choices": ["සූර්යයා", "දිනකර", "නිශාකර", "රවි"],
132
+ "analysis": "The question asks which word is NOT a synonym for 'Hiru' (Sun). Options: (1) Suryaya (Sun), (2) Dinakara (Sun), (3) Nishakara (Moon - night maker), (4) Ravi (Sun). Nishakara means Moon, not Sun.",
133
+ "analysis_ta": "வினா: 'ஹிரு' (சூரியன்) என்ற சொல்லுக்கு ஒத்த கருத்துச் சொல் அல்லாதது எது? தெரிவுகள்: (1) சூர்யயா (சூரியன்), (2) தினகர (சூரியன்), (3) நிஷாகர (சந்திரன்), (4) ரவி (சூரியன்). நிஷாகர என்பது சந்திரனைக் குறிக்கும்.",
134
+ "answer": "3"
135
+ }
136
+ ],
137
+ "other": [
138
+ {
139
+ "question": "මිනිස් සිරුරේ වර්ධනයට සහ පටක අලුත්වැඩියාවට ප්‍රධාන වශයෙන් අවශ්‍ය වන පෝෂකය කුමක්ද?",
140
+ "choices": ["කාබෝහයිඩ්‍රේට්", "ප්‍රෝටීන්", "ලිපිඩ", "ඛනිජ ලවණ"],
141
+ "analysis": "The question asks which nutrient is primarily needed for human body growth and tissue repair. Options: (1) Carbohydrates, (2) Proteins, (3) Lipids, (4) Minerals. Proteins are responsible for growth and tissue repair.",
142
+ "analysis_ta": "வினா: மனித உடல் வளர்ச்சிக்கும் இழையங்களைப் பழுதுபார்த்தலுக்கும் பிரதானமாகத் தேவைப்படும் போசணைப் பொருள் எது? தெரிவுகள்: (1) காபோவைதரேற்று, (2) புரதம், (3) இலிப்பிட்டு, (4) கனியுப்பு. புரதமே உடல�� வளர்ச்சிக்குப் பிரதானமாகத் தேவைப்படுகிறது.",
143
+ "answer": "2"
144
+ },
145
+ {
146
+ "question": "සමබල ආහාර වේලක අඩංගු විය යුතු සංඝටකයක් නොවන්නේ කුමක්ද?",
147
+ "choices": ["විටමින්", "ප්‍රෝටීන්", "ජලය", "කෘත්‍රිම වර්ණක"],
148
+ "analysis": "The question asks what is NOT an essential component of a balanced diet. Options: (1) Vitamins, (2) Proteins, (3) Water, (4) Artificial colorings. Artificial colorings are not part of a healthy balanced diet.",
149
+ "analysis_ta": "வினா: சமநிலை உணவில் அடங்கக்கூடாத கூறு எது? தெரிவுகள்: (1) விற்றமின், (2) புரதம், (3) நீர், (4) செயற்கை நிறமூட்டிகள். செயற்கை நிறமூட்டிகள் சமநிலை உணவின் கூறு அல்ல.",
150
+ "answer": "4"
151
+ },
152
+ {
153
+ "question": "පරිගණකයක මධ්‍ය සැකසුම් ඒකකය හඳුන්වන කෙටි නාමය කුමක්ද?",
154
+ "choices": ["CPU", "RAM", "ROM", "USB"],
155
+ "analysis": "The question asks for the abbreviation of a computer's Central Processing Unit. It is CPU.",
156
+ "analysis_ta": "வினா: கணினியின் மையச் செயற்பாட்டு அலகைக் குறிக்கும் சுருக்கப் பெயர் யாது? அது CPU ஆகும்.",
157
+ "answer": "1"
158
+ },
159
+ {
160
+ "question": "ශාක වර්ධනය සඳහා අත්‍යවශ්‍ය මහා පෝෂක තුන වන්නේ,",
161
+ "choices": ["යකඩ, තඹ, සින්ක්", "කැල්සියම්, මැග්නීසියම්, ගෙන්දගම්", "නයිට්‍රජන්, පොස්පරස්, පොටෑසියම්", "බෝරෝන්, මැංගනීස්, ක්ලෝරීන්"],
162
+ "analysis": "The question asks for the three primary macronutrients essential for plant growth. Options: (3) Nitrogen, Phosphorus, Potassium (NPK). NPK are the three primary macronutrients.",
163
+ "analysis_ta": "வினா: தாவர வளர்ச்சிக்கு அத்தியாவசியமான மூன்று மாபோசணைப் பதார்த்தங்கள் யாவை? தெரிவு (3) நைதரசன், பொசுபரசு, பொட்டாசியம் (NPK) ஆகும்.",
164
+ "answer": "3"
165
+ }
166
+ ]
167
+ }
168
+
169
+ # Standard 4 balanced exemplars ordered (2, 4, 1, 3) to break sequential bias
170
+ GLOBAL_BALANCED_EXEMPLARS = [
171
+ EXEMPLARS_BY_DOMAIN["humanities"][0], # answer: 2
172
+ EXEMPLARS_BY_DOMAIN["social_science"][1],# answer: 4
173
+ EXEMPLARS_BY_DOMAIN["stem"][2], # answer: 1
174
+ EXEMPLARS_BY_DOMAIN["language"][3], # answer: 3
175
+ ]
176
+
177
+
178
+ def normalize_category(raw_category: str) -> str:
179
+ """Normalizes dataset category strings (e.g., 'Social_science', 'social science', 'Humanities')."""
180
+ cat = (raw_category or "").strip().lower().replace(" ", "_")
181
+ if cat in EXEMPLARS_BY_DOMAIN:
182
+ return cat
183
+ return "other"
184
+
185
+
186
+ def build_few_shot_prompt(question_dict: dict, num_shots: int = 4, cot: bool = False, cot_lang: str = "en") -> str:
187
+ """
188
+ Constructs a few-shot prompt with strictly balanced (2, 4, 1, 3) exemplars
189
+ followed by the target question.
190
+ If cot=True, includes a concise 1-line translation & fact-check Analysis (in English or Tamil) before Answer.
191
+ """
192
+ subject = question_dict.get("subject", "සාමාන්‍ය දැනීම")
193
+ category = normalize_category(question_dict.get("category", ""))
194
+
195
+ if cot and cot_lang == "ta":
196
+ prompt_parts = [
197
+ f"Subject: {subject} (இலங்கைப் பாடத்திட்டம் - சிங்கள மூலம்).\n"
198
+ f"ஒவ்வொரு வினாவிற்கும் சிங்கள வினாவையும் தெரிவுகளையும் தமிழில் சுருக்கமாக மொழிபெயர்த்து ('Analysis:'), "
199
+ f"சரியான விடையைத் தீர்மானித்து 'Answer: <digit>' (1, 2, 3, or 4) என எழுதுக.\n"
200
+ ]
201
+ elif cot:
202
+ prompt_parts = [
203
+ f"Subject: {subject} (Sri Lankan School Curriculum - Sinhala Medium).\n"
204
+ f"For each question, briefly translate the Sinhala question and options into English in 1-2 sentences ('Analysis:'), "
205
+ f"verify the curriculum fact, and output 'Answer: <digit>' (1, 2, 3, or 4).\n"
206
+ ]
207
+ else:
208
+ prompt_parts = [
209
+ f"මෙය {subject} විෂයට අදාළ බහුවරණ ප්‍රශ්නයකි. පහත උදාහරණ පරිදි නිවැරදි පිළිතුරේ අංකය (1, 2, 3, හෝ 4) පමණක් තෝරන්න.\n"
210
+ ]
211
+
212
+ # Select exemplars: domain specific if available, else global balanced
213
+ exemplars = GLOBAL_BALANCED_EXEMPLARS[:num_shots]
214
+ if category in EXEMPLARS_BY_DOMAIN and len(EXEMPLARS_BY_DOMAIN[category]) >= num_shots:
215
+ exemplars = EXEMPLARS_BY_DOMAIN[category][:num_shots]
216
+
217
+ for ex in exemplars:
218
+ opts_formatted = "\n".join([f"{idx+1}. {c}" for idx, c in enumerate(ex["choices"])])
219
+ if cot:
220
+ analysis_text = ex.get("analysis_ta", ex["analysis"]) if cot_lang == "ta" else ex["analysis"]
221
+ ex_block = (
222
+ f"ප්‍රශ්නය: {ex['question']}\n{opts_formatted}\n"
223
+ f"Analysis: {analysis_text}\n"
224
+ f"Answer: {ex['answer']}\n"
225
+ )
226
+ else:
227
+ ex_block = f"ප්‍රශ්නය: {ex['question']}\n{opts_formatted}\nපිළිතුර: {ex['answer']}\n"
228
+ prompt_parts.append(ex_block)
229
+
230
+ # Now the target question
231
+ q_text = question_dict.get("question", "").strip()
232
+ choices = question_dict.get("choices")
233
+ if choices is None:
234
+ choices = question_dict.get("options", [])
235
+ if isinstance(choices, dict):
236
+ keys = sorted(choices.keys(), key=lambda x: str(x))
237
+ opt_list = [choices[k] for k in keys]
238
+ elif isinstance(choices, list):
239
+ opt_list = choices
240
+ else:
241
+ opt_list = []
242
+
243
+ target_opts = "\n".join([f"{idx+1}. {c}" for idx, c in enumerate(opt_list)])
244
+ if cot:
245
+ target_block = f"ප්‍රශ්නය: {q_text}\n{target_opts}\nAnalysis:"
246
+ else:
247
+ target_block = f"දැන් මෙම ප්‍රශ්නයට පිළිතුරු දෙන්න:\nප්‍රශ්නය: {q_text}\n{target_opts}\nපිළිතුර: "
248
+ prompt_parts.append(target_block)
249
+
250
+ return "\n".join(prompt_parts)
training/src/few_shot_runner.py ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ # Historical source snapshot. Comments about accuracy, data origin, or compliance
3
+ # are author claims, not verification; see training/README.md and REPRODUCIBILITY.md.
4
+ """
5
+ Few-Shot In-Context Inference Runner for Sinhala MMLU Shared Task
6
+ Uses 100% external, balanced exemplars (2, 4, 1, 3) to eliminate position bias and ground the LLM.
7
+ Supports:
8
+ - Rapid local evaluation on the gold validation set (--val_only)
9
+ - Cross-Lingual Translate-and-Reason CoT mode (--cot) in English (--cot_lang en) or Tamil (--cot_lang ta)
10
+ - Thinking mode control (--think / default think=False) for Qwen 3 / 3.5 models
11
+ - Cyclic option-permutation debiasing (--passes 1, 2, or 4)
12
+ - Reliable checkpoint resuming
13
+ """
14
+
15
+ import json
16
+ import argparse
17
+ import sys
18
+ from collections import Counter
19
+ from pathlib import Path
20
+
21
+ # Add src to sys.path
22
+ sys.path.insert(0, str(Path(__file__).parent))
23
+ from few_shot_prompts import build_few_shot_prompt
24
+ from baseline_runner import (
25
+ extract_answer_digit,
26
+ load_all_questions,
27
+ load_val_questions,
28
+ load_existing_checkpoint,
29
+ query_ollama_chat,
30
+ SYSTEM_EXAM_PROMPT,
31
+ SYSTEM_COT_PROMPT,
32
+ )
33
+
34
+ SYSTEM_COT_TA_PROMPT = (
35
+ "You are an expert examiner for the Sri Lankan school curriculum (Sinhala & Tamil medium). "
36
+ "For each multiple-choice question, write a concise 1-2 sentence Tamil translation and fact-check ('Analysis:'), "
37
+ "then end on a new line with strictly 'Answer: <digit>' (where <digit> is 1, 2, 3, or 4)."
38
+ )
39
+
40
+
41
+ def get_choices_list(q: dict) -> list:
42
+ choices = q.get("choices")
43
+ if choices is None:
44
+ choices = q.get("options", [])
45
+ if isinstance(choices, dict):
46
+ keys = sorted(choices.keys(), key=lambda x: str(x))
47
+ return [choices[k] for k in keys]
48
+ elif isinstance(choices, list):
49
+ return list(choices)
50
+ return []
51
+
52
+
53
+ def predict_single_or_debiased(
54
+ q: dict,
55
+ model_name: str,
56
+ num_shots: int = 4,
57
+ think: bool = False,
58
+ cot: bool = False,
59
+ cot_lang: str = "en",
60
+ passes: int = 1
61
+ ) -> tuple[str, str]:
62
+ """
63
+ Runs 1-pass or multi-pass cyclic option-permutation inference on question q.
64
+ Returns (raw_debug_str, chosen_original_digit).
65
+ """
66
+ if cot:
67
+ sys_prompt = SYSTEM_COT_TA_PROMPT if cot_lang == "ta" else SYSTEM_COT_PROMPT
68
+ else:
69
+ sys_prompt = SYSTEM_EXAM_PROMPT
70
+
71
+ orig_choices = get_choices_list(q)
72
+ if passes <= 1 or len(orig_choices) != 4:
73
+ prompt = build_few_shot_prompt(q, num_shots=num_shots, cot=cot, cot_lang=cot_lang)
74
+ raw, ans_digit = query_ollama_chat(model_name, sys_prompt, prompt, think=think, cot=cot)
75
+ return raw, ans_digit
76
+
77
+ # Multi-pass cyclic permutation debiasing
78
+ shifts = [0, 2] if passes == 2 else [0, 1, 2, 3][:passes]
79
+ votes = []
80
+ raw_logs = []
81
+
82
+ for s in shifts:
83
+ rotated_choices = orig_choices[s:] + orig_choices[:s]
84
+ q_rot = dict(q)
85
+ q_rot["choices"] = rotated_choices
86
+ prompt = build_few_shot_prompt(q_rot, num_shots=num_shots, cot=cot, cot_lang=cot_lang)
87
+ raw, rot_digit = query_ollama_chat(model_name, sys_prompt, prompt, think=think, cot=cot)
88
+ rot_idx = int(rot_digit) - 1 if rot_digit in {"1", "2", "3", "4"} else 0
89
+ orig_idx = (rot_idx + s) % 4
90
+ orig_digit = str(orig_idx + 1)
91
+ votes.append(orig_digit)
92
+ raw_logs.append(f"s{s}:{rot_digit}->orig={orig_digit}")
93
+
94
+ counts = Counter(votes)
95
+ best_digit = counts.most_common(1)[0][0]
96
+ return ",".join(raw_logs), best_digit
97
+
98
+
99
+ def run_few_shot(
100
+ data_dir: str,
101
+ output_file: str,
102
+ model_name: str,
103
+ num_shots: int = 4,
104
+ val_only: bool = False,
105
+ gold_val_file: str = "data/gold_val_41.jsonl",
106
+ resume: bool = True,
107
+ think: bool = False,
108
+ cot: bool = False,
109
+ cot_lang: str = "en",
110
+ passes: int = 1
111
+ ):
112
+ output_path = Path(output_file)
113
+ output_path.parent.mkdir(parents=True, exist_ok=True)
114
+
115
+ if val_only:
116
+ val_path = Path(gold_val_file)
117
+ if not val_path.exists():
118
+ print(f"Error: Gold validation file '{gold_val_file}' not found!")
119
+ sys.exit(1)
120
+ questions = load_val_questions(val_path)
121
+ print(f"Loaded {len(questions)} validation questions for rapid local benchmark.")
122
+ else:
123
+ questions = load_all_questions(Path(data_dir))
124
+ print(f"Loaded {len(questions)} full exam questions across easy, medium, and hard.")
125
+
126
+ existing_preds = {}
127
+ if resume and output_path.exists():
128
+ existing_preds = load_existing_checkpoint(output_path)
129
+ print(f"Resuming: Found {len(existing_preds)} existing predictions in '{output_file}'.")
130
+
131
+ predictions = []
132
+
133
+ print(f"Running {num_shots}-Shot inference with Ollama model: '{model_name}' (think={think}, cot={cot}, cot_lang={cot_lang}, passes={passes})...")
134
+
135
+ for i, q in enumerate(questions, 1):
136
+ q_no = q["q_no"]
137
+ subj = q.get("subject", "general")
138
+ cat = q.get("category", "general")
139
+ lvl = q.get("_level", "medium").lower()
140
+
141
+ q_key = f"{lvl}_{subj}_{q_no}"
142
+ if resume and q_key in existing_preds:
143
+ predictions.append(existing_preds[q_key])
144
+ continue
145
+
146
+ raw_info = ""
147
+ try:
148
+ raw_info, ans_digit = predict_single_or_debiased(
149
+ q, model_name=model_name, num_shots=num_shots, think=think, cot=cot, cot_lang=cot_lang, passes=passes
150
+ )
151
+ except Exception as e:
152
+ print(f"[{i}/{len(questions)}] Error on Q#{q_no} ({subj}): {e}. Using fallback 1.")
153
+ ans_digit = "1"
154
+
155
+ record = {
156
+ "q_no": q_no,
157
+ "subject": subj,
158
+ "category": cat,
159
+ "level": lvl,
160
+ "answer": str(ans_digit)
161
+ }
162
+ predictions.append(record)
163
+
164
+ if i % 10 == 0 or i == len(questions):
165
+ snippet = raw_info.strip().replace("\n", " ")[-60:]
166
+ print(f"Progress: {i}/{len(questions)} | Q#{q_no} ({subj}) [{snippet}] => {ans_digit}")
167
+ with open(output_path, "w", encoding="utf-8") as fp:
168
+ for p in predictions:
169
+ fp.write(json.dumps(p, ensure_ascii=False) + "\n")
170
+
171
+ with open(output_path, "w", encoding="utf-8") as fp:
172
+ for p in predictions:
173
+ fp.write(json.dumps(p, ensure_ascii=False) + "\n")
174
+
175
+ print(f"\nDone! {len(predictions)} predictions written to {output_file}")
176
+
177
+
178
+ def main():
179
+ parser = argparse.ArgumentParser(description="Sinhala MMLU Few-Shot Runner")
180
+ parser.add_argument("--data_dir", default="data", help="Path to data directory")
181
+ parser.add_argument("--output", default="data/predictions_few_shot.jsonl", help="Output path")
182
+ parser.add_argument("--model", default="qwen3.5:4b", help="Model name in Ollama")
183
+ parser.add_argument("--shots", type=int, default=4, help="Number of in-context exemplars (e.g. 4)")
184
+ parser.add_argument("--val_only", action="store_true", help="Run only on the 41-question local gold benchmark")
185
+ parser.add_argument("--gold_val_file", default="data/gold_val_41.jsonl", help="Gold validation benchmark file")
186
+ parser.add_argument("--no_resume", action="store_true", help="Overwrite existing output file")
187
+ parser.add_argument("--think", action="store_true", help="Enable <think> reasoning mode for Qwen 3 / 3.5 models")
188
+ parser.add_argument("--cot", action="store_true", help="Enable concise Cross-Lingual Translate-and-Reason CoT mode")
189
+ parser.add_argument("--cot_lang", default="en", choices=["en", "ta"], help="Target bridge language for CoT ('en' or 'ta')")
190
+ parser.add_argument("--passes", type=int, default=1, choices=[1, 2, 4], help="Cyclic option-permutation passes (1, 2, or 4)")
191
+ args = parser.parse_args()
192
+
193
+ run_few_shot(
194
+ args.data_dir,
195
+ args.output,
196
+ args.model,
197
+ num_shots=args.shots,
198
+ val_only=args.val_only,
199
+ gold_val_file=args.gold_val_file,
200
+ resume=not args.no_resume,
201
+ think=args.think,
202
+ cot=args.cot,
203
+ cot_lang=args.cot_lang,
204
+ passes=args.passes
205
+ )
206
+
207
+
208
+ if __name__ == "__main__":
209
+ main()
training/src/package_submission.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Historical source snapshot. Comments about accuracy, data origin, or compliance
2
+ # are author claims, not verification; see training/README.md and REPRODUCIBILITY.md.
3
+ """
4
+ Submission Packager and Validator for Sinhala MMLU Shared Task
5
+ Ensures predictions match Codabench format requirements:
6
+ - Valid JSON on each line
7
+ - Required keys: 'q_no', 'subject', 'category', 'level', 'answer'
8
+ - Answer must be non-empty string index ('1', '2', '3', '4', '5')
9
+ - Creates predictions.zip containing predictions.jsonl
10
+ """
11
+
12
+ import json
13
+ import zipfile
14
+ import sys
15
+ from pathlib import Path
16
+
17
+
18
+ def validate_and_package(predictions_file: str, output_zip: str = None) -> bool:
19
+ pred_path = Path(predictions_file)
20
+ if not pred_path.exists():
21
+ print(f"Error: {predictions_file} does not exist!")
22
+ return False
23
+
24
+ if output_zip is None:
25
+ output_zip = pred_path.parent / "predictions.zip"
26
+ else:
27
+ output_zip = Path(output_zip)
28
+
29
+ required_keys = {"q_no", "subject", "category", "level", "answer"}
30
+ total_lines = 0
31
+ valid_lines = 0
32
+ errors = []
33
+
34
+ with open(pred_path, "r", encoding="utf-8") as f:
35
+ for idx, line in enumerate(f, 1):
36
+ line = line.strip()
37
+ if not line:
38
+ continue
39
+ total_lines += 1
40
+ try:
41
+ record = json.loads(line)
42
+ except json.JSONDecodeError as e:
43
+ errors.append(f"Line {idx}: Malformed JSON ({e})")
44
+ continue
45
+
46
+ missing = required_keys - set(record.keys())
47
+ if missing:
48
+ errors.append(f"Line {idx}: Missing keys {missing}")
49
+ continue
50
+
51
+ ans = str(record["answer"]).strip()
52
+ if not ans:
53
+ errors.append(f"Line {idx}: Empty answer")
54
+ continue
55
+
56
+ valid_lines += 1
57
+
58
+ print(f"Validated {valid_lines}/{total_lines} prediction records.")
59
+ if errors:
60
+ print(f"Found {len(errors)} validation errors:")
61
+ for err in errors[:10]:
62
+ print(" -", err)
63
+ if len(errors) > 10:
64
+ print(f" ... and {len(errors) - 10} more errors.")
65
+ return False
66
+
67
+ print(f"Packing {pred_path} into {output_zip}...")
68
+ with zipfile.ZipFile(output_zip, "w", zipfile.ZIP_DEFLATED) as z:
69
+ # Note: Codabench requires the file inside the zip to be named predictions.jsonl
70
+ z.write(pred_path, arcname="predictions.jsonl")
71
+
72
+ print(f"SUCCESS: Submission ready at {output_zip}")
73
+ print("Ready to upload to Codabench (up to 3 submissions/day).")
74
+ return True
75
+
76
+
77
+ if __name__ == "__main__":
78
+ if len(sys.argv) < 2:
79
+ print("Usage: python package_submission.py <path/to/predictions.jsonl> [path/to/output.zip]")
80
+ sys.exit(1)
81
+
82
+ input_file = sys.argv[1]
83
+ out_file = sys.argv[2] if len(sys.argv) > 2 else None
84
+ success = validate_and_package(input_file, out_file)
85
+ sys.exit(0 if success else 1)
training/src/prompts.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Historical source snapshot. Comments about accuracy, data origin, or compliance
2
+ # are author claims, not verification; see training/README.md and REPRODUCIBILITY.md.
3
+ """
4
+ SinhalaMMLU Official Prompt Templates
5
+ Derived from the EMNLP 2025 benchmark paper:
6
+ 'SinhalaMMLU: A Comprehensive Benchmark for Evaluating Multitask Language Understanding in Sinhala'
7
+ (Pramodya et al., 2025)
8
+ """
9
+
10
+ SINHALA_PROMPT_4OPT = """මෙය {subject} විෂයට අදාළ බහුවරණ ප්‍රශ්නයකි. පහත ප්‍රශ්නයට 1, 2, 3, 4 යන පිළිතුරු වලින් නිවැරදි හෝ ඉතාමත් ගැළපෙන පිළිතුර තෝරන්න.
11
+ ප්‍රශ්නය: {question}
12
+ 1. {opt1}
13
+ 2. {opt2}
14
+ 3. {opt3}
15
+ 4. {opt4}
16
+ පිළිතුර: """
17
+
18
+ SINHALA_PROMPT_5OPT = """මෙය {subject} විෂයට අදාළ බහුවරණ ප්‍රශ්නයකි. පහත ප්‍රශ්නයට 1, 2, 3, 4, 5 යන පිළිතුරු වලින් නිවැරදි හෝ ඉතාමත් ගැළපෙන පිළිතුර තෝරන්න.
19
+ ප්‍රශ්නය: {question}
20
+ 1. {opt1}
21
+ 2. {opt2}
22
+ 3. {opt3}
23
+ 4. {opt4}
24
+ 5. {opt5}
25
+ පිළිතුර: """
26
+
27
+
28
+ def build_prompt(question_dict: dict) -> str:
29
+ """
30
+ Builds the standardized Sinhala prompt based on question dictionary.
31
+ Handles 'choices' (list) and 'options' (dict or list).
32
+ """
33
+ subject = question_dict.get("subject", "").strip()
34
+ question = question_dict.get("question", "").strip()
35
+
36
+ # The dataset uses 'choices', but support 'options' as well
37
+ choices = question_dict.get("choices")
38
+ if choices is None:
39
+ choices = question_dict.get("options", [])
40
+
41
+ if isinstance(choices, dict):
42
+ keys = sorted(choices.keys(), key=lambda x: str(x))
43
+ opt_list = [choices[k] for k in keys]
44
+ elif isinstance(choices, list):
45
+ opt_list = choices
46
+ else:
47
+ opt_list = []
48
+
49
+ if len(opt_list) >= 5:
50
+ return SINHALA_PROMPT_5OPT.format(
51
+ subject=subject or "සාමාන්‍ය",
52
+ question=question,
53
+ opt1=opt_list[0],
54
+ opt2=opt_list[1],
55
+ opt3=opt_list[2],
56
+ opt4=opt_list[3],
57
+ opt5=opt_list[4],
58
+ )
59
+ elif len(opt_list) >= 4:
60
+ return SINHALA_PROMPT_4OPT.format(
61
+ subject=subject or "සාමාන්‍ය",
62
+ question=question,
63
+ opt1=opt_list[0],
64
+ opt2=opt_list[1],
65
+ opt3=opt_list[2],
66
+ opt4=opt_list[3],
67
+ )
68
+ else:
69
+ opts_formatted = "\n".join([f"{i+1}. {opt}" for i, opt in enumerate(opt_list)])
70
+ return f"ප්‍රශ්නය: {question}\n{opts_formatted}\nපිළිතුර: "
verify_submission.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Audit historical artifacts without calling a model or using gold answers."""
2
+ import argparse
3
+ import ast
4
+ import hashlib
5
+ import importlib.util
6
+ import json
7
+ from pathlib import Path
8
+
9
+ HERE = Path(__file__).resolve().parent
10
+
11
+
12
+ def load_module(name, path):
13
+ spec = importlib.util.spec_from_file_location(name, path)
14
+ m = importlib.util.module_from_spec(spec)
15
+ spec.loader.exec_module(m)
16
+ return m
17
+
18
+
19
+ def check(condition, message):
20
+ if not condition:
21
+ raise ValueError(message)
22
+
23
+
24
+ def audit(data=None):
25
+ merger = load_module('v9_merge', HERE / 'training/ensemble_v9.py')
26
+ runner = load_module('v9_runner', HERE / 'inference.py')
27
+ manifest = json.loads((HERE / 'submission_manifest.json').read_text())
28
+ submitted = (HERE / 'predictions.jsonl').read_bytes()
29
+ check(hashlib.sha256(submitted).hexdigest() == manifest['predictions_sha256'], 'Submitted prediction hash changed')
30
+ maps = {}
31
+ for name, entry in manifest['passes'].items():
32
+ path = HERE / entry['file']
33
+ check(hashlib.sha256(path.read_bytes()).hexdigest() == entry['sha256'], f'Pass hash changed: {name}')
34
+ maps[name] = merger.load_map(path)
35
+ check(len(maps[name]) == entry['rows'], f'Pass row count changed: {name}')
36
+ records = [json.loads(line) for line in submitted.splitlines() if line.strip()]
37
+ keys = [merger.key_of(r) for r in records]
38
+ check(len(keys) == len(set(keys)), 'Duplicate submitted key')
39
+ check(all(r['answer'] in {'1','2','3','4'} for r in records), 'Invalid submitted answer')
40
+ check(set(keys) == set(maps['p1']), 'Pass 1 and submission keys differ')
41
+ check(all(set(m) <= set(keys) for m in maps.values()), 'Unknown key in a pass')
42
+ pos = {tuple(k) for k in json.loads((HERE / 'training/passes/positional_option_keys.json').read_text())}
43
+ check(pos <= set(keys), 'Unknown positional key')
44
+ rebuilt = ''.join(json.dumps({**r, 'answer': merger.merge_one(merger.key_of(r), pos, **maps)}, ensure_ascii=False)+'\n' for r in records).encode()
45
+ check(rebuilt == submitted, 'Archival vote does not reproduce submitted bytes')
46
+ check(all(runner.merge_one(k, pos, **maps) == merger.merge_one(k, pos, **maps) for k in keys), 'Runner and archive merger disagree')
47
+ result = {'submission_id': manifest['codabench_submission_id'], 'rows':len(records), 'sha256':manifest['predictions_sha256'],
48
+ 'saved_pass_merge_byte_identical':True, 'pass_counts':{k:len(v) for k,v in maps.items()},
49
+ 'fresh_model_inference_verified':False, 'rules_compliance_certified':False}
50
+ if data:
51
+ qs = runner.prepare(runner.load_questions('', local_data=data))
52
+ check({runner.kof(q) for q in qs} == set(keys), 'Dataset key set differs')
53
+ actual_pos = {runner.kof(q) for q in qs if runner.POS_RE.search(' '.join(map(str,q['choices'])))}
54
+ check(actual_pos == pos, 'Recorded positional filter differs from input text')
55
+ priority = runner.priority_order(qs, maps['cot'], maps['dr'])
56
+ t2 = {runner.kof(q) for q in priority if q['_level']=='hard' or maps['cot'][runner.kof(q)] != maps['dr'][runner.kof(q)]}
57
+ t3 = {runner.kof(q) for q in qs if (maps['p1'][runner.kof(q)] != maps['p2'][runner.kof(q)] if runner.kof(q) in maps['p2'] else maps['p1'][runner.kof(q)] != maps['cot'][runner.kof(q)] or maps['p1'][runner.kof(q)] != maps['dr'][runner.kof(q)])}
58
+ check(t2 == set(maps['p2']), 'Pass 2 target rule mismatch')
59
+ check(t3 == set(maps['p3']), 'Pass 3 target rule mismatch')
60
+ mac_rows = [json.loads(l) for l in (HERE / manifest['passes']['mac']['file']).read_text().splitlines() if l.strip()]
61
+ check([merger.key_of(r) for r in mac_rows] == [runner.kof(q) for q in priority[:len(mac_rows)]], 'Mac prefix does not match original scheduler')
62
+ source = ast.parse((HERE / 'training/evidence/original_cell5_pass4_pass5.py').read_text())
63
+ literal = None
64
+ for node in source.body:
65
+ if isinstance(node, ast.Assign) and any(isinstance(t, ast.Name) and t.id=='TARGET_IDX' for t in node.targets):
66
+ literal = next(n.value for n in ast.walk(node.value) if isinstance(n,ast.Constant) and isinstance(n.value,str) and ',' in n.value and len(n.value) > 10)
67
+ check(literal is not None, 'Original target indices not found')
68
+ indices = {int(v.strip()) for v in literal.split(',') if v.strip()}
69
+ canonical = sorted(qs, key=lambda q:(runner.LEVEL_RANK[q['_level']],q['_file']))
70
+ check({runner.kof(q) for j,q in enumerate(canonical) if j in indices} == t3, 'Original literal target set differs')
71
+ t45 = t3 - pos
72
+ for n in ['p4','p5']:
73
+ check(set(maps[n]) <= t45, f'Unexpected {n} key')
74
+ examples = json.loads((HERE / 'data/few_shot_examples.json').read_text())
75
+ qtexts = {' '.join(q['question'].split()) for q in qs}
76
+ overlap = [{'category':cat,'index':j} for cat,exs in examples.items() for j,ex in enumerate(exs) if ' '.join(ex['question'].split()) in qtexts]
77
+ result['input_checks'] = {'pass2_targets':len(t2),'pass3_targets':len(t3),'literal_notebook_targets_match':True,
78
+ 'pass45_targets':len(t45),'mac_priority_prefix_match':True,
79
+ 'omitted_keys':{n:sorted([list(k) for k in t45-set(maps[n])],key=str) for n in ['p4','p5']},
80
+ 'few_shot_exact_text_overlaps':overlap,
81
+ 'overlap_check_limit':'Exact normalized question text only; not semantic overlap or contamination certification.'}
82
+ return result
83
+
84
+
85
+ def main():
86
+ ap = argparse.ArgumentParser(description=__doc__)
87
+ ap.add_argument('--data', help='optional local folder containing easy/medium/hard question JSON')
88
+ ap.add_argument('--report', help='optional JSON report path')
89
+ args = ap.parse_args()
90
+ result = audit(args.data)
91
+ text = json.dumps(result, ensure_ascii=False, indent=2)+'\n'
92
+ if args.report:
93
+ Path(args.report).write_text(text)
94
+ print(text)
95
+
96
+
97
+ if __name__ == '__main__':
98
+ main()