Skip to content

Deterministic topology

By default, infer / run classify each event from structured Polymarket fields before any LLM call. Covered events skip LLM chunking entirely and are recorded as deterministic (or verified/corrected variants) in inference_report.json.

On WC2026 data this covers roughly 91% of events and cuts estimated LLM chunk volume by about 15×.

Templates

Template Example event_title Extracted topology
Match Brazil vs. Morocco - Exact Score TEAM ×2, MATCH, PARTICIPATES_IN
Group winner World Cup Group D Winner TEAM, GROUP, PARTICIPATES_IN
Stage of elimination World Cup: Portugal Stage of Elimination TEAM, STAGE, QUALIFIES_FOR
Tournament winner World Cup Winner TEAM, STAGE(Champion), QUALIFIES_FOR

Team canonicalization

Team names are canonicalized via oddsgraph/data/team_name_aliases.json (for example Korea RepublicSouth Korea, IR IranIran) so group membership and match nodes merge cleanly.

FIFA / Polymarket team codes live in oddsgraph/data/team_codes.json. Note that Polymarket WC2026 slugs use kor for Curaçao and kr for South Korea.

Player props

Player-prop markets (soccer_player_*) still get MARKET / OUTCOME nodes, but add no extra topology beyond the match pairing. Unrecognized events (for example Golden Ball or fun props) continue through the chunked LLM path.

Escape hatch

oddsgraph infer --no-deterministic-topology

Optional LLM confirm/patch over deterministic output:

oddsgraph infer --verify-deterministic

Verified artifacts land at build/fragments/<event_id>__verified.json with a sidecar __verify_manifest.json that fingerprints the template candidate. With --resume (default), verified files are reused only when that fingerprint still matches the current template; otherwise verification runs again. If verification fails, stale __verified.json / manifest files for that event are deleted so build cannot prefer them. On build, verified topology is loaded only when --resume is on and the manifest status is deterministic_verified or deterministic_corrected, and it replaces template topology for that event (EVENT/MARKET/OUTCOME base nodes remain deterministic). --no-resume skips loading __verified.json entirely.

See also