slopmark

benchmark challenges

fixed, revisitable model-vs-model sessions — niche task mixes saved forever in sqlite + committed json.

related: aiml api testing · zero context mode · realshot tasks · api


what you get

  • manifestdata/challenges/{slug}/manifest.json defines tasks + models
  • resultsdata/challenges/{slug}/results.json (committed for devlog / deploy revisit)
  • sqlitedata/local.db tables challenges, challenge_runs (local forever)
  • ui/challenge/{slug} infographic + per-model drill-down
  • apiGET /api/challenges, GET /api/challenges/{slug}

niche sprint v1

slugniche-sprint-v1
models6 low-tier AIML models (verified via /v1/models)
tasks10 mixed: procedural, extract, html, constraint, json, regex
harnesszero_context (see zero context)
view/challenge/niche-sprint-v1
devlog asset/challenges/niche-sprint-v1-infographic.png

run it

# needs AIMLAPI_KEY in .env.local
npm run challenge
# or
npx tsx scripts/run-challenge.ts niche-sprint-v1

smoke-tests every model first, then runs all task×model combos (~60 API calls).

latest results (june 2026)

rankmodelpass rate
1Gemini 2.5 Flash90%
2DeepSeek V370%
3GPT-4o Mini60%
3Llama 3.1 8B60%
5Ministral 3B50%
5Qwen 2.5 7B50%

every model failed the ANSWER: 8 words constraint burst (partial credit only).


adding a new challenge

  1. create data/challenges/my-challenge/manifest.json
  2. run npx tsx scripts/run-challenge.ts my-challenge
  3. commit manifest.json + results.json
  4. open /challenge/my-challenge

manifest shape:

{
  "slug": "my-challenge",
  "title": "My Challenge",
  "subtitle": "…",
  "description": "…",
  "harness_mode": "zero_context",
  "tasks": [{ "id": "proc-sequence-5", "label": "…", "category": "procedural" }],
  "models": [{ "slug": "aiml/openai/gpt-4o-mini", "label": "GPT-4o Mini" }]
}

task ids can be procedural (proc-*), realshot (rs-*), or domain tasks (json-01, etc.).


storage

layerpath / tablepurpose
sqlitechallenges, challenge_runslocal query + forever persistence
json exportdata/challenges/{slug}/results.jsongit-tracked revisit without db
supabasesupabase/schema.sqlproduction postgres when linked

api prefers committed json for public deploys; sqlite is for local CLI runs.


drawing contest v1

slugdrawing-contest-v1
models5 Fireworks serverless (fireworks/ slugs)
tasks10 SVG drawing contracts
harnesszero_context, 4000 max tokens
view/challenge/drawing-contest-v1 (gallery renders every drawing)

top scores: GPT-OSS 120B + GLM 5.1 at 100%; GLM 5.2 / DeepSeek V4 Pro / Kimi K2.6 at 90% (rocket flame color). see drawing docs.


game night v1

sluggame-night-v1
models5 Fireworks serverless (same lineup as drawing contest)
tasks10 party-game instruction contracts (ins-game-*)
harnesszero_context
view/challenge/game-night-v1

scoreboard

rankmodelpass rate
1GPT-OSS 120B90% (9/10)
2DeepSeek V4 Pro60%
3Kimi K2.630%
4GLM 5.220%
5GLM 5.110%

unlike drawing contest (~90–100% across the board), game night spreads hard — models leak chain-of-thought into answers under zero context (one-word / ALL CAPS / haiku contracts expose narrators). GPT-OSS’s only miss: empty output on the no-letter-e pizza lipogram.

tasks live in data/tasks/instruction.json as ins-game-*.


slop chaos v1

slugslop-chaos-v1
modelsFireworks panel: Kimi K3, Kimi K2.6, GLM 5.2, DeepSeek V4 Pro, GPT-OSS 120B (fireworks/* slugs). Runner falls back to OpenRouter twins if FIREWORKS_API_KEY is unset.
tasks10 cursed constraint traps (ins-slop-* + json-slop-mayo-1) — haunted toaster recalls, racoon lipograms, goose HR ALL CAPS, mayonnaise JSON, classic F-count
harnesszero_context
view/challenge/slop-chaos-v1
runnpm run challenge:slop-chaos

designed to show where “frontend kings” like Kimi K3 still trip on stupid, simultaneous formatting contracts. no vibes scoring — rule parser only.

seed prompts also live in data/tasks/slop_chaos.json (merged into instruction/json pools for the harness).

scoreboard (jul 29 2026)

ran via OpenRouter twins (FIREWORKS_API_KEY was not in local .env.local). re-run with Fireworks when the key is present: npm run challenge:slop-chaos.

rankmodelpass rate
1Kimi K360% (6/10)
1Kimi K2.660% (6/10)
3GPT-OSS 120B40%
4GLM 5.230%
4DeepSeek V4 Pro30%

universal fails (0/5): haunted toaster (banned glue words + exact count), racoon lipogram (no letter e), shoe-tying questions with taboo words.

universal passes (5/5): meme math 21 meme, yes/no/maybe-later paragraphs.

Kimi K3 still loses hard on multi-constraint lipogram / glue-word bans — the “frontend” model is not a constraint model.

challenge receipt pages (/challenge/[slug]) lead with a shareable receipt hero: top pass %, universal wipeout/clear chips, one specimen fail (prompt + verifier line + output), copy-link / share-card, and an Open Graph image. task briefing + per-run verifier chips sit below; json/csv export is tucked at the bottom.


trap season v2

slugtrap-season-v2
modelsFireworks frontier: classic curse panel (Kimi K3 / K2.6, GLM 5.2, DeepSeek V4 Pro, GPT-OSS 120B) plus Kimi K2.7 Code, DeepSeek V4 Flash, Minimax M3, Qwen3.7 Plus
tasks10 new cursed office / seasonal traps (ins-trap-* + json-trap-cactus-1) — elevator pitch glue bans, owl lipogram (no a), microwave dash lines, whisper lowercase, Zig/Zag maze, vowel count, south wins meme, alien wifi taboo, TICK/TOCK ALL CAPS, cactus JSON
harnesszero_context
view/challenge/trap-season-v2
runnpm run challenge:trap-season · append new models: npm run challenge:trap-season-extras

second pack in the Trap Season cadence — same “stupid simultaneous contracts” mold as Slop Chaos, new jokes. seed prompts live in data/tasks/trap_season.json and are merged into instruction.json / json.json for the harness.

scoreboard (jul 30 2026)

ran on Fireworks serverless. classic 5-model panel first, then appended frontier extras (npm run challenge:trap-season-extras).

rankmodelpass rate
1GPT-OSS 120B90% (9/10)
2Kimi K380% (8/10)
2Kimi K2.7 Code80% (8/10)
4DeepSeek V4 Pro60%
4DeepSeek V4 Flash60%
4Minimax M360%
7Kimi K2.630%
7GLM 5.230%
7Qwen3.7 Plus30%

hardest trap: cursed HR SaaS elevator pitch — only Kimi K2.7 Code cleared it (100%); everyone else scraped 20% partial.

universal clears (9/9): vowel count [7], south wins meme, cactus JSON schema.

/bench does not expose Fireworks — that key is ops-only for publishing committed receipts. public host path stays OpenRouter free (+ BYOK / AIML when configured).


production (vercel)

deployed api routes read from committed json via lib/challenges/store-json.ts — no sqlite on serverless. see deploy.


phase 2 — BYOK bench (live)

/bench now has a use my own API key toggle. keys stay in sessionStorage — sent per request only.

POST /api/eval/run accepts optional provider:

{
  "taskId": "json-01",
  "provider": {
    "name": "my model",
    "baseURL": "https://api.aimlapi.com/v1",
    "apiKey": "…",
    "model": "openai/gpt-4o-mini"
  },
  "harnessMode": "zero_context"
}

POST /api/eval/suite also accepts provider for full-domain BYOK sweeps.

test connection uses the same pong smoke as realshot (PUT /api/realshot/duel).


phase 3 — build your own sprint (ad-hoc)

/challenges/new — pick preset tasks, add 1–6 BYOK models, run, get the same infographic inline.

POST /api/challenges/run — ad-hoc challenge (max 15 tasks × 6 models). returns full ChallengeResults json. download from the ui — not persisted on vercel unless you commit json locally.


roadmap

phasefeature
2BYOK solo eval on /bench via optional provider in POST /api/eval/run
3challenge builder + POST /api/challenges + supabase persistence
4background jobs + redis rate limits