Instructions to use kongyo/Ketsudan-27B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Local Apps Settings
- Unsloth Desktop
Download code/heldout.py from kongyo/Ketsudan-27B: direct link, hf CLI and curl.
- Browser
- Download file 2.99 kB
-
https://huggingface.co/kongyo/Ketsudan-27B/resolve/main/code/heldout.py
- Command line
-
hf download hf://kongyo/Ketsudan-27B/code/heldout.py
-
curl -L -o heldout.py https://huggingface.co/kongyo/Ketsudan-27B/resolve/main/code/heldout.py
2.99 kB
| """Held-out evaluation rows that neither training stage sees: ANLI (test r1-r3) and WinoGrande (dev). | |
| Written once to /content/out/heldout_rows.jsonl in the typed-decisions layout | |
| (id, workflow, state, questions, gold), so our model and Jev answer identical requests. | |
| """ | |
| import json | |
| import random | |
| import sys | |
| from datasets import load_dataset | |
| NLI = ("entailment", "neutral", "contradiction") | |
| NLI_CRITERIA = { | |
| "entailment": "The premise shows the hypothesis is true.", | |
| "neutral": "The premise neither confirms nor rules out the hypothesis.", | |
| "contradiction": "The premise shows the hypothesis is false.", | |
| } | |
| def one_hot(keys, label): | |
| return {"label": label, "probabilities": {k: 1.0 if k == label else 0.0 for k in keys}} | |
| def anli(n, rng): | |
| rows = [] | |
| for split in ("test_r1", "test_r2", "test_r3"): | |
| for i, row in enumerate(load_dataset("facebook/anli", split = split)): | |
| if int(row["label"]) < 0: | |
| continue | |
| label = NLI[int(row["label"])] | |
| rows.append( | |
| { | |
| "id": f"anli_{split}_{i}", | |
| "workflow": "anli", | |
| "state": {"premise": row["premise"], "hypothesis": row["hypothesis"]}, | |
| "questions": { | |
| "relation": { | |
| "type": "choice", | |
| "instructions": "How does the premise relate to the hypothesis?", | |
| "criteria": dict(NLI_CRITERIA), | |
| } | |
| }, | |
| "gold": {"relation": one_hot(NLI, label)}, | |
| } | |
| ) | |
| rng.shuffle(rows) | |
| return rows[:n] | |
| def winogrande(n, rng): | |
| rows = [] | |
| for i, row in enumerate(load_dataset("allenai/winogrande", "winogrande_xl", split = "validation")): | |
| label = "option_1" if str(row["answer"]) == "1" else "option_2" | |
| rows.append( | |
| { | |
| "id": f"winogrande_dev_{i}", | |
| "workflow": "winogrande", | |
| "state": {"sentence": row["sentence"]}, | |
| "questions": { | |
| "blank": { | |
| "type": "choice", | |
| "instructions": "Which option correctly fills the blank (_) in the sentence?", | |
| "criteria": {"option_1": row["option1"], "option_2": row["option2"]}, | |
| } | |
| }, | |
| "gold": {"blank": one_hot(("option_1", "option_2"), label)}, | |
| } | |
| ) | |
| rng.shuffle(rows) | |
| return rows[:n] | |
| if __name__ == "__main__": | |
| out = sys.argv[1] if len(sys.argv) > 1 else "/content/out/heldout_rows.jsonl" | |
| n = int(sys.argv[2]) if len(sys.argv) > 2 else 400 | |
| rng = random.Random(0) | |
| rows = anli(n, rng) + winogrande(n, rng) | |
| with open(out, "w", encoding = "utf-8") as f: | |
| for row in rows: | |
| f.write(json.dumps(row) + "\n") | |
| print("HELDOUT_DONE", out, len(rows), flush = True) | |