Skip to content
Astera Technology

Keep timed-out AI attempts visible in timing reports

Fast successful answers alone produce a misleading latency average.

Download complete case notes and answer keys ↓

Define the local evaluation task

A synthetic response ledger labels each attempt completed with safe integer milliseconds or timed-out at a safe integer deadline. Completed durations are summed with BigInt; a numerator above the safe integer range is returned as exact decimal text, while small existing results remain numeric. Completed durations must be nonnegative and no later than their deadline. A timeout must omit completion duration or supply null; a known duration contradicts this state. Report completed-only mean as a numerator/denominator plus timeout count and total attempts.

  1. Separate completion and timeout states
  2. Validate known duration bounds
  3. Report mean with completion coverage

Contradictory timestamps stop the timing report.

Use the filled cases

Original synthetic input and literal answer key
CaseSupplied inputExpected structured outputDecision and reason
One timeout beside two completions{"attempts":[{"status":"completed","durationMs":2000,"deadlineMs":10000},{"status":"completed","durationMs":4000,"deadlineMs":10000},{"status":"timeout","deadlineMs":10000}]}{"attempts":3,"completed":2,"timeouts":1,"completedMean":[6000,2]}Completed mean is 3000 ms; completion is 2/3 and the timeout remains visible.
No completed duration{"attempts":[{"status":"timeout","deadlineMs":10000}]}{"attempts":1,"completed":0,"timeouts":1,"completedMean":null}The deadline is not a known completion duration, so the mean is unknown.
Timeout carries a known completion time{"attempts":[{"status":"timeout","durationMs":9000,"deadlineMs":10000}]}{"error":"duration-ledger"}A known completion at 9000ms cannot be censored as no completion by the 10000ms deadline.
Safe inputs with a larger exact aggregate{"attempts":[{"status":"completed","durationMs":9007199254740991,"deadlineMs":9007199254740991},{"status":"completed","durationMs":9007199254740991,"deadlineMs":9007199254740991},{"status":"completed","durationMs":1,"deadlineMs":1}]}{"attempts":3,"completed":3,"timeouts":0,"completedMean":["18014398509481983",3]}The exact numerator is 18014398509481983 milliseconds; retain decimal text instead of the rounded 18014398509481984.
Completion contradicts deadline{"attempts":[{"status":"completed","durationMs":11000,"deadlineMs":10000}]}{"error":"duration-ledger"}This attempt cannot be labelled completed under the supplied deadline model.
Download editable CSV ↓

Work the completed-after-deadline case. Which output is required, and why?

Show the worked answer

{"error":"duration-ledger"} — This attempt cannot be labelled completed under the supplied deadline model.

Run the self-contained evaluator

Save as .mjs and run with Node.js; supplied fixtures only
import assert from 'node:assert/strict';

function evaluate(x){
 const completed=x.attempts.filter(a=>a.status==='completed');if(x.attempts.some(a=>!Number.isSafeInteger(a.deadlineMs)||a.deadlineMs<0||!['completed','timeout'].includes(a.status)||(a.status==='timeout'&&Object.hasOwn(a,'durationMs')&&a.durationMs!==null)||(a.status==='completed'&&(!Number.isSafeInteger(a.durationMs)||a.durationMs<0||a.durationMs>a.deadlineMs))))return {error:'duration-ledger'};
 const sum=completed.reduce((s,a)=>s+BigInt(a.durationMs),0n),numerator=sum<=BigInt(Number.MAX_SAFE_INTEGER)?Number(sum):sum.toString();
 return {attempts:x.attempts.length,completed:completed.length,timeouts:x.attempts.filter(a=>a.status==='timeout').length,completedMean:completed.length?[numerator,completed.length]:null};
}

const cases = [
  {
    "id": "one-timeout",
    "input": {
      "attempts": [
        {
          "status": "completed",
          "durationMs": 2000,
          "deadlineMs": 10000
        },
        {
          "status": "completed",
          "durationMs": 4000,
          "deadlineMs": 10000
        },
        {
          "status": "timeout",
          "deadlineMs": 10000
        }
      ]
    },
    "expected": {
      "attempts": 3,
      "completed": 2,
      "timeouts": 1,
      "completedMean": [
        6000,
        2
      ]
    }
  },
  {
    "id": "all-timeout",
    "input": {
      "attempts": [
        {
          "status": "timeout",
          "deadlineMs": 10000
        }
      ]
    },
    "expected": {
      "attempts": 1,
      "completed": 0,
      "timeouts": 1,
      "completedMean": null
    }
  },
  {
    "id": "timeout-known-duration",
    "input": {
      "attempts": [
        {
          "status": "timeout",
          "durationMs": 9000,
          "deadlineMs": 10000
        }
      ]
    },
    "expected": {
      "error": "duration-ledger"
    }
  },
  {
    "id": "exact-large-aggregate",
    "input": {
      "attempts": [
        {
          "status": "completed",
          "durationMs": 9007199254740991,
          "deadlineMs": 9007199254740991
        },
        {
          "status": "completed",
          "durationMs": 9007199254740991,
          "deadlineMs": 9007199254740991
        },
        {
          "status": "completed",
          "durationMs": 1,
          "deadlineMs": 1
        }
      ]
    },
    "expected": {
      "attempts": 3,
      "completed": 3,
      "timeouts": 0,
      "completedMean": [
        "18014398509481983",
        3
      ]
    }
  },
  {
    "id": "completed-after-deadline",
    "input": {
      "attempts": [
        {
          "status": "completed",
          "durationMs": 11000,
          "deadlineMs": 10000
        }
      ]
    },
    "expected": {
      "error": "duration-ledger"
    }
  }
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
Download runnable example ↓

Keep timeouts in the attempt denominator. The completed-only mean describes this invented ledger and is not a latency promise or an estimate of when timed-out attempts would finish.

Related resources