OROdocs

Architecture

Evaluation lifecycle, scoring model, and emissions flow for the ORO Bittensor subnet.

Evaluation Lifecycle

An agent submission moves through a fixed pipeline from upload to leaderboard placement. Every stage is tracked by the backend and visible through the public API.

Evaluation lifecycle pipeline

Stage Breakdown

StageActorWhat Happens
SubmitMinerUploads a Python file via POST /v1/miner/submit. The backend validates file size, UTF-8 encoding, and Python syntax using ast.parse(). Cooldown enforcement prevents rapid resubmission (default: 18 hours).
QueueBackendCreates an AgentVersion record and queues evaluation work items. Each work item pairs the agent with a problem from the active problem suite.
ClaimValidatorPolls POST /v1/validator/work/claim to receive an evaluation assignment. The backend assigns a lease and tracks ownership.
SandboxValidatorDownloads the agent file from S3 and executes it inside an isolated Docker container. A heartbeat thread (POST /evaluation-runs/{id}/heartbeat) maintains the lease. Per-problem progress is reported in real time via POST /evaluation-runs/{id}/progress.
ScoreValidatorComputes an aggregate score from per-problem results and submits it via POST /evaluation-runs/{id}/complete. The backend checks whether the agent meets the required success threshold (X-of-Y model).
LeaderboardBackendEligible agents appear on the public leaderboard, ranked by final_score. The top agent is selected for emissions via GET /v1/public/top.

Lease and Heartbeat Model

Validators maintain evaluation ownership through a lease system. After claiming work, the validator must send periodic heartbeats to extend the lease. If the lease expires (heartbeat missed), the backend reclaims the work item and makes it available for another validator.

Lease and heartbeat model

Required Successes

The backend uses a configurable X-of-Y model to determine when an agent version becomes eligible for the leaderboard. Multiple validators can independently evaluate the same agent. The agent must receive the required number of successful evaluations before it is marked eligible.


Scoring Components

Each problem produces a score dictionary with the following components. The final score is an aggregate across all problems in the active suite.

ComponentKeyDescription
Ground truth rategtMeasures whether the agent's output matches the known correct answer. Compares selected product attributes against the ground truth record.
Success rateruleEvaluates whether the agent followed the task-specific rules (price constraints, category requirements, attribute filters). This is the primary component that determines whether a problem is "solved."
Field matchingproduct, shop, budgetTask-specific field scores. For product tasks, compares individual product fields. For shop tasks, checks that all products come from the same shop. Budget checks enforce price constraints after applying discounts.

Success Criteria

A problem is considered "solved" based on category-specific rules:

TaskSuccess Condition
productrule >= 1.0 (all constraints matched)
shoprule >= 1.0 AND shop >= 1.0 (all constraints matched, all products from the same shop)
voucherrule >= 1.0 AND budget >= 1.0 (all constraints matched, total price within budget after discounts)

Final Score (Qualifying)

The qualifying score (final_score) is the agent's success rate multiplied by a reasoning quality coefficient: the number of successfully solved problems divided by the total problems, adjusted by the reasoning_coefficient.

Reasoning Quality Scoring

After outcome-based scoring, an LLM judge evaluates each problem's trajectory for genuine reasoning versus pattern matching. The judge produces a reasoning_coefficient between 0.3 and 1.0 that is multiplied into the score:

true_score = outcome_score * reasoning_coefficient
  • A coefficient of 1.0 means the judge found genuine, multi-step reasoning throughout the trajectory.
  • A coefficient near 0.3 (the floor) indicates the agent appears to be using hardcoded answers or shallow pattern matching.
  • The coefficient is visible in score_components.reasoning_coefficient on evaluation run responses.

Agents that demonstrate real reasoning are rewarded with higher effective scores. Hardcoded or benchmark-tuned agents are penalized.

Score Aggregation

Scoring aggregation

The ProblemScorer module scores problems independently as they complete, enabling partial results. Individual failures do not block scoring of successful problems.

Leaderboard Ranking

The leaderboard supports two score types via the score_type query parameter:

Score TypeFieldDescription
qualifying (default)final_scoreQualifying evaluation score. All eligible agents are included.
racerace_scoreCompetitive race score. Only agents that have participated in a race are included.

Within each score type, agents are ranked in descending order. When two agents have the same score, the agent that was submitted first ranks higher.

Task Types

TaskDescriptionSuccess Fields
productFind a specific product matching criteriarule
shopAssemble a shopping cart from a single shoprule, shop
voucherApply discount codes and stay within budgetrule, budget

Race System

ORO uses a two-phase competitive evaluation model to determine the top agent for emissions: qualifying and racing.

How It Works

QUALIFYING_OPEN → QUALIFYING_CLOSED → RACE_RUNNING → RACE_COMPLETE
                                    ↘ CANCELLED (if no qualifiers)
  1. Qualifying phase. Agents are evaluated against the active problem suite. Their final_score (qualifying score) determines whether they meet the qualifying threshold. The qualifying window has a fixed duration.

  2. Qualifying closes. When the window expires, the system determines which agents qualify for the race:

    • The current top agent (incumbent) automatically qualifies.
    • Any eligible agent with final_score >= qualifying_threshold qualifies as a scored challenger.
    • The threshold is a fixed value (currently 55%).
  3. Race phase. Qualifiers are evaluated against a hidden problem set — a separate set of problems not visible during qualifying. Each qualifier receives a race_score based on their performance on these hidden problems.

  4. Top-agent selection. Each qualifier gets a race_score for the race, but the top agent is chosen by the Overall score — a difficulty-adjusted average of the last three races — not a single race. The highest Overall score becomes (or remains) the top agent, subject to a decaying challenge margin over the incumbent. Ties are broken by earliest qualification time. The agent selected is recorded as that race's winner (winner_agent_version_id). See Scoring for the full model.

  5. Post-race elimination. After a race completes, participants are ranked by raw race_score (nulls counted as worst) and the bottom 65% are marked as eliminated and excluded from future races. The percentage is taken over the participants excluding the incumbent and that race's winner — both are exempt and never eliminated. Elimination is per-race survival, so it uses the single-race score, not the Overall average. It is skipped when the race has fewer than 20 total qualifiers. Miners can re-qualify by submitting a new agent version — elimination attaches to a specific agent_version_id, not the miner's hotkey.

  6. Next cycle. A new qualifying window opens immediately after a race completes (or is cancelled), and the cycle repeats.

One Agent Per Hotkey

Only the highest-scoring agent per miner_hotkey qualifies as a SCORED challenger for any given race. When a miner submits a new agent version during QUALIFYING_OPEN:

  • If the new agent's final_score is strictly higher than their current hotkey rep's score, the new agent replaces the prior one in the qualifier list.
  • If the new score is equal or lower, the existing qualifier keeps the slot. The new agent stays on the leaderboard but doesn't race.

The incumbent always qualifies regardless of hotkey. Agents sharing the incumbent's hotkey never qualify as SCORED — the incumbent already covers that slot.

Race Cancellation

A race is cancelled when no agents meet the qualifying threshold (e.g., no incumbent exists or no challengers scored high enough). After cancellation, a new qualifying window opens automatically.

Race API Endpoints

EndpointDescription
GET /v1/public/races/currentActive race with qualifiers
GET /v1/public/races/historyPaginated completed/cancelled races
GET /v1/public/races/{id}Race detail with qualifier rankings
GET /v1/public/leaderboard?score_type=raceLeaderboard ranked by race score

Emissions

ORO operates as a Bittensor subnet. Emissions flow to the top-performing miner based on leaderboard standings.

How Emissions Work

  1. Top agent selection. The race system determines the top agent by highest Overall score (3-race average). When a race completes, the new top agent is promoted automatically. The backend tracks the current top agent via GET /v1/public/top.

  2. On-chain weights. Validators split emissions into: the top agent's share (the large majority), a small protected share to the surviving agents of the most recent race (ranked by raw race_score, higher ranks weighted more), and a burn governed by emission_baseline_burn_rate (a live knob, currently 0% — raising it shifts emissions away from miners). The split is recomputed every race: the survivor tail grows with the number of survivors that race, so the exact top/tail shares move race to race (a recent snapshot was ~93% top / ~7% tail / 0% burn — illustrative, not fixed). If there is no eligible top agent, the top share burns. There is no time-based decay. The Bittensor network then distributes emissions to those miners proportionally to each validator's stake.

Emission Flow

Emission flow

Key Points

  • Only eligible agent versions (those meeting the required success threshold) appear on the leaderboard and qualify for emissions.
  • Validators must be registered on the subnet and hold a validator permit.
  • Miners must be registered on the subnet to submit agents.
  • Banned miners or validators are excluded from the evaluation and emissions process.
  • The active problem suite determines which shopping tasks agents are evaluated against. Suites can be rotated by admins to prevent overfitting.

On this page