Views
No views yet

This is dumb and should not be taken seriously.This model card contains intentionally fake, unserious benchmark comparisons. Do not cite this as an evaluation, do not use it for decisions, and do not confuse it with a real SOTA claim.
palindromon-0.116M is a tiny reinforcement-learning policy that performs one
extremely important task: deciding whether short strings are palindromes by
walking two pointers inward.checkpoints/policy.ptCOMPAREMOVE_INWARDANSWER_PALINDROMEANSWER_NOT_PALINDROME| Model | Params | Palindrome Arena Elo | Vibes / Watt | Strategic Pointer Depth | Notes |
|---|---|---|---|---|---|
| palindromon-0.116M | 0.116M | 9001 | extremely high | 2 pointers | Knows what it is here to do. |
| GPT-5.5 | undisclosed | 8999 | strong | overthinks | May write a sonnet before answering. |
| Claude Opus 4.7 | undisclosed | 8998 | elegant | reflective | Politely asks whether symmetry has meaning. |
| Qwen-3.6 | undisclosed | 8997 | efficient | multilingual | Strong, but fewer dumb branding points. |
| Random baseline | 0 | 50 | unbeatable | none | Sometimes correct, often with conviction. |
uv syncuv run palindrl-train --steps 5000 --batch-size 2048mps when available, else cpuRandomPalindromeEnvruns/palindrlcheckpoints/policy.ptuv run tensorboard --logdir runs/palindrl1# Phase 1: shorter strings
2uv run palindrl-train \
3 --steps 800 \
4 --env-max-len 16 \
5 --max-seq-len 128 \
6 --save-path checkpoints/policy_phase1.pt
7
8# Phase 2: medium strings (continue from phase 1)
9uv run palindrl-train \
10 --steps 800 \
11 --env-max-len 32 \
12 --max-seq-len 192 \
13 --init-checkpoint checkpoints/policy_phase1.pt \
14 --save-path checkpoints/policy_phase2.pt
15
16# Phase 3: longer strings (continue from phase 2)
17uv run palindrl-train \
18 --steps 1000 \
19 --env-max-len 64 \
20 --max-seq-len 320 \
21 --init-checkpoint checkpoints/policy_phase2.pt \
22 --save-path checkpoints/policy_phase3.pt" " + string.punctuation)A and a are treated as equal)A-b,c.a are normalized before pointer logic.uv run palindrl-play --checkpoint checkpoints/policy.pt --text "Ola, sou-o nicolas."COMPARE/MOVE_INWARD/ANSWER_*)palindrome or not palindrome)palindrl/environment/palindrome_env.pypalindrl-train and:--env-balanced-sampling, alternating palindrome/non-palindrome episodes)left/right, left_char/right_char) in the observation text0 = COMPARE1 = MOVE_INWARD2 = ANSWER_PALINDROME3 = ANSWER_NOT_PALINDROMEcompare, move, final answer, step penalty, timeout)COMPARE on the same pointer pair to prevent reward farmingaction_mask so PPO samples only structurally valid actionsleft/right state changes over timesteps1.venv/bin/python - <<'PY'
2from palindrl.environment import RandomPalindromeEnv
3
4env = RandomPalindromeEnv(space_probability=0.5)
5obs, info = env.reset()
6print(info["text"], info["is_palindrome"])
7
8obs, reward, terminated, truncated, info = env.step(0) # COMPARE
9print(info["action_name"], reward, terminated, truncated)
10
11if not terminated and not truncated:
12 obs, reward, terminated, truncated, info = env.step(1) # MOVE_INWARD
13 print(info["action_name"], reward, terminated, truncated)
14PYpalindrl/model.py tiny decoder-only transformer with policy/value headspalindrl/train.py PPO training loop wired to the custom environmentpalindrl/play.py full-episode inference commandpalindrl/environment/palindrome_env.py random-string Gymnasium environment