snip-0.4m-base / source /grpo_data.py
ARotting's picture
Publish 397K parameter causal transformer pretrained from scratch
24ebd71 verified
Raw
History Blame Contribute Delete
1.91 kB
from __future__ import annotations
from collections import Counter
def build_logic_tasks() -> tuple[list[dict], list[dict]]:
examples: list[dict] = []
for number in range(100):
examples.append(
{
"task": "parity",
"prompt": (
"Output 1 if the number is even, otherwise output 0. "
f"Number: {number}. Answer:"
),
"answer": int(number % 2 == 0),
"key": number,
}
)
for left in range(20):
for right in range(20):
if left == right:
continue
examples.append(
{
"task": "less_than",
"prompt": (
"Output 1 if the first number is less than the second, "
f"otherwise output 0. First: {left}. Second: {right}. Answer:"
),
"answer": int(left < right),
"key": left * 23 + right * 7,
}
)
examples.append(
{
"task": "sum_at_least_20",
"prompt": (
"Output 1 if the sum is at least 20, otherwise output 0. "
f"Numbers: {left} and {right}. Answer:"
),
"answer": int(left + right >= 20),
"key": left * 31 + right * 11,
}
)
train = [
example for example in examples if (example["key"] + len(example["task"])) % 5 != 0
]
evaluation = [
example for example in examples if (example["key"] + len(example["task"])) % 5 == 0
]
return train, evaluation
def class_counts(examples: list[dict]) -> dict[int, int]:
return dict(Counter(example["answer"] for example in examples))