68 """Aggregate the current host and CPU count, excluding deliberate waits."""
69 func =
"timing_report"
70 _dbg(
"GENERAL", func,
"aggregate timing records", 3)
71 host, cpus = socket.gethostname(), os.cpu_count()
or 1
72 groups = defaultdict(list)
73 for row
in read_records(root):
74 value = row.get(
"wall_ms")
75 if row.get(
"host") == host
and row.get(
"cpus") == cpus
and row.get(
"kind") ==
"stage" and isinstance(row.get(
"stage"), str)
and type(value)
in (int, float)
and math.isfinite(value)
and value >= 0:
76 groups[row[
"stage"]].append(value)
78 entry = baseline[
"hosts"].get(host, {}).get(str(cpus))
79 timing = load_octrc_safe(root).get(
"timing")
80 tier_budgets = budgets_ms(timing.get(
"budgets_ms")
if isinstance(timing, dict)
else None)
82 for stage, values
in sorted(groups.items()):
85 reference = (entry
or {}).get(
"stages", {}).get(stage)
87 tolerance = reference.get(
"tolerance", (entry
or {}).get(
"tolerance", 25))
88 if numbers[
"median_ms"] > reference[
"median_ms"] * (1 + tolerance / 100):
89 notes.append(
"median exceeds baseline tolerance")
90 budget = (entry
or {}).get(
"budgets", baseline.get(
"budgets", {})).get(stage)
91 if budget
is not None and numbers[
"median_ms"] > budget:
92 notes.append(
"median exceeds budget")
93 tier_budget = budget_for(stage, tier_budgets)
94 stages[stage] = {**numbers,
"baseline_median_ms": reference[
"median_ms"]
if reference
else None,
"advisories": notes,
95 "tier": tier_for(stage),
"budget_ms": tier_budget,
96 "note":
"over budget" if tier_budget
is not None and numbers[
"median_ms"] > tier_budget
else ""}
97 return {
"host": host,
"cpus": cpus,
"last": last,
"baseline_status":
"matched" if entry
is not None else "no baseline for this host",
"stages": stages}
99def write_baseline(root: Path, report: dict, *, force_host: bool =
False) ->
None:
100 """Preserve all hosts; require acknowledgment before adding a foreign host."""
101 func =
"write_baseline"
103 hosts = baseline[
"hosts"]
104 host, cpus = report[
"host"], str(report[
"cpus"])
105 if hosts
and cpus
not in hosts.get(host, {})
and not force_host:
106 raise ValueError(
"baseline belongs to another host or CPU count; use --force-host")
107 entry = hosts.setdefault(host, {}).setdefault(cpus, {})
108 entry.setdefault(
"tolerance", 25)
109 entry[
"stages"] = {stage: {
"median_ms": values[
"median_ms"],
"count": values[
"count"]}
for stage, values
in report[
"stages"].items()}
110 path = root /
".option_c" /
"timing_baseline.json"
111 path.parent.mkdir(parents=
True, exist_ok=
True)
112 atomic_write_text(path, json.dumps(baseline, indent=2, sort_keys=
True) +
"\n", encoding=
"utf-8")
113 _dbg(
"GENERAL", func,
"wrote host timing baseline", 3)
116 """Pair calls by session and call ID and sum token samples per turn."""
117 func =
"session_report"
119 tools = defaultdict(list)
122 for line
in path.read_text(encoding=
"utf-8").splitlines():
124 event = json.loads(line)
125 if not isinstance(event, dict):
127 identity = event.get(
"event_id")
128 if identity
and identity
in seen:
132 payload = event.get(
"payload", {})
133 kind = event.get(
"kind")
134 key = (event.get(
"session_id"), event.get(
"tool_call_id")
or payload.get(
"tool_call_id"))
135 if kind ==
"tool_call_started":
136 starts[key] = (datetime.fromisoformat(event[
"ts"]), payload[
"tool_name"])
137 elif kind ==
"tool_call_completed" and key
in starts:
138 started, name = starts.pop(key)
139 elapsed = (datetime.fromisoformat(event[
"ts"]) - started).total_seconds() * 1000
141 tools[name].append(elapsed)
142 elif kind ==
"provider_budget_consumed":
143 turn = event.get(
"turn_id")
or "unknown"
144 numbers = turns.setdefault(turn, dict(input_tokens=0, output_tokens=0, total_tokens=0))
145 for field
in (
"input_tokens",
"output_tokens"):
146 value = payload.get(field, 0)
147 if type(value)
is int
and value >= 0:
148 numbers[field] += value
149 numbers[
"total_tokens"] += value
150 except (ValueError, KeyError, TypeError, AttributeError):
152 _dbg(
"GENERAL", func,
"VALIDATION_ERROR: invalid session timing row", 3)
153 return {
"tools": {name:
statistics(values)
for name, values
in sorted(tools.items())},
"turns": turns}