{
  "id": "gen-1789692419-NZGCOE6wdLTV0RErvZUO",
  "model": "openai/gpt-6-astra",
  "created": 1789692419,
  "usage": {
    "prompt_tokens": 968,
    "completion_tokens": 2473,
    "total_tokens": 3441,
    "cost": 0.13333,
    "is_byok": false,
    "prompt_tokens_details": {
      "cached_tokens": 0,
      "cache_write_tokens": 0,
      "audio_tokens": 0,
      "video_tokens": 0
    },
    "cost_details": {
      "upstream_inference_cost": 0.13333,
      "upstream_inference_prompt_cost": 0.00968,
      "upstream_inference_completions_cost": 0.12365
    },
    "completion_tokens_details": {
      "reasoning_tokens": 2013,
      "image_tokens": 0,
      "audio_tokens": 0
    }
  },
  "schema": "tank.cup-strategies/v1",
  "funding": "Development Orbio account",
  "mode": "recorded-strategies",
  "notice": "Generated once during development. Demo strategy allocations do not pay for a new model call.",
  "plans": [
    {
      "course": "sunlit",
      "fish": "tide",
      "routes": [
        1,
        0,
        2
      ],
      "paces": [
        0,
        1,
        2
      ],
      "reason": "I glide through open water, cruise the reef bend, then burst with the following tide."
    },
    {
      "course": "sunlit",
      "fish": "ember",
      "routes": [
        1,
        0,
        2
      ],
      "paces": [
        1,
        0,
        2
      ],
      "reason": "I cruise the open start, glide nimbly around the coral, then burst down the current channel."
    },
    {
      "course": "sunlit",
      "fish": "comet",
      "routes": [
        1,
        0,
        2
      ],
      "paces": [
        0,
        1,
        2
      ],
      "reason": "I save energy in the open start, cruise the reef bend, then burst with the final current."
    },
    {
      "course": "grotto",
      "fish": "tide",
      "routes": [
        0,
        1,
        0
      ],
      "paces": [
        0,
        1,
        2
      ],
      "reason": "I glide along the sheltered reef, cruise the open hollow, then burst along the reef through the crosscurrent."
    },
    {
      "course": "grotto",
      "fish": "ember",
      "routes": [
        0,
        0,
        0
      ],
      "paces": [
        0,
        1,
        2
      ],
      "reason": "I use my nimble turns to hug the reef throughout, building from a glide to a burst at the crosscurrent."
    },
    {
      "course": "grotto",
      "fish": "comet",
      "routes": [
        0,
        1,
        0
      ],
      "paces": [
        0,
        1,
        2
      ],
      "reason": "I glide beside the reef, cruise the open hollow, and save my burst for the reef-side crosscurrent."
    },
    {
      "course": "blue",
      "fish": "tide",
      "routes": [
        2,
        1,
        0
      ],
      "paces": [
        0,
        1,
        2
      ],
      "reason": "I glide with the first current, cruise the open straight, then use my stamina to burst along the closing reef."
    },
    {
      "course": "blue",
      "fish": "ember",
      "routes": [
        2,
        1,
        0
      ],
      "paces": [
        0,
        1,
        2
      ],
      "reason": "I glide down the current channel, cruise the open straight, then burst through the reef turns."
    },
    {
      "course": "blue",
      "fish": "comet",
      "routes": [
        2,
        1,
        0
      ],
      "paces": [
        0,
        1,
        2
      ],
      "reason": "I conserve energy in the first current, cruise the open straight, then spend my burst on the coral finish."
    }
  ],
  "prompt": "Create nine race strategies for a playable TANK reef race. Return JSON ONLY: {\"plans\":[{\"course\":\"sunlit\",\"fish\":\"tide\",\"routes\":[0,1,2],\"paces\":[0,1,2],\"reason\":\"short first-person strategy, max120characters\"},...]}. All 3 courses x all3 fish, exactly9. Routes0reefedge1openwater2currentchannel. Paces0glide1cruise2burst; sum paces MUST3. Race section mean speed = fish.speed + current[route] + (fish.agility-100)*turns[route]/12 + (pace-1)*16 + (fish.agility-100)*course.terrain[sectionIndex]/12 + sectionIndex*(fish.endurance-100)*course.fatigue - cumulativePriorPace*3. Each section equal length, so minimize sum inverse mean speed. Random speed variation is not known before race, never promise victory. Reason explains course-specific choice naturally without technical equations. These are actual archived Orbio strategy decisions used by a public demo, not live race calls. Catalogue follows:\nexport const ENTRY='250000', STRATEGY='50000', BONUS='250000', INITIAL_TIDE='2000000';\nexport const FISH=Object.freeze([\n {id:'tide',name:'Tide',species:5,color:'#66d7ed',speed:104,agility:96,endurance:108,description:'A strong finish. Best in long currents.'},\n {id:'ember',name:'Ember',species:4,color:'#ffb180',speed:103,agility:114,endurance:98,description:'Quick turns. At home among the coral.'},\n {id:'comet',name:'Comet',species:1,color:'#e4d287',speed:108,agility:98,endurance:96,description:'Fast in open water. Needs to save energy.'},\n]);\n// Each section has three routes: reef edge, open water, current channel.\nexport const COURSES=Object.freeze([\n {id:'sunlit',name:'Sunlit sprint',description:'Open water, coral turns, then a following current.',terrain:[0,3,1],fatigue:0.25,sections:[\n  {name:'Open water',current:[-4,9,3],turns:[8,0,3]},\n  {name:'Coral bend',current:[6,0,-3],turns:[13,4,0]},\n  {name:'Following tide',current:[0,3,12],turns:[4,0,6]},\n ]},\n {id:'grotto',name:'Grotto passage',description:'Sheltered turns and a difficult final crosscurrent.',terrain:[6,8,10],fatigue:0.25,sections:[\n  {name:'The narrow',current:[8,-4,0],turns:[15,0,5]},\n  {name:'Quiet hollow',current:[3,6,-6],turns:[6,2,0]},\n  {name:'Crosscurrent',current:[8,-8,4],turns:[10,0,6]},\n ]},\n {id:'blue',name:'Blue-water dash',description:'Two fast straights before the reef closes in.',terrain:[0,0,2],fatigue:0.5,sections:[\n  {name:'First current',current:[-2,6,10],turns:[4,0,5]},\n  {name:'Blue straight',current:[-3,12,5],turns:[5,0,2]},\n  {name:'Coral finish',current:[9,-4,2],turns:[14,0,5]},\n ]},\n]);\nexport const ROUTES=['Reef edge','Open water','Current channel'];\nexport const PACES=['Glide','Cruise','Burst'];\nexport const INSTINCT=Object.freeze({routes:[1,1,1],paces:[1,1,1],reason:'Hold open water and keep a steady pace.'});\nexport function checkPlan(plan){\n if(!plan||!Array.isArray(plan.routes)||!Array.isArray(plan.paces)||plan.routes.length!==3||plan.paces.length!==3||![...plan.routes,...plan.paces].every(n=>Number.isInteger(n)&&n>=0&&n<=2)||plan.paces.reduce((a,b)=>a+b,0)!==3||typeof plan.reason!=='string'||plan.reason.length>240)throw Error('invalid-cup-plan');\n return {routes:[...plan.routes],paces:[...plan.paces],reason:plan.reason};\n}\n"
}
