Files
rea/experiments/analysis-efficiency/native-inventory-costs.py
gensokyo-devandKaoru0822 2538214e2c feat(analysis-view): add native inventory summaries and pages (#5378)
Add opt-in summaries and stable selected-field pages for native inventories through the shared CLI/MCP Evidence layer. Preserve complete source access, row identity, provenance, string qualifications and unknown discovery coverage.

Record real true/jq workflows and portable old-Evidence checks, including tokenizer proxy reductions, additional call/schema costs and observed latency/memory regressions.

Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
2026-10-20 07:59:43 +00:00

116 lines
5.2 KiB
Python

"""Count recorded native-inventory delivery, including errors and file recovery.
Requires tiktoken==0.12.0 in the experiment environment. These are serialization
proxies, not model usage or a claim about a host's schema injection/rendering.
"""
import argparse
import json
from pathlib import Path
import sys
import tiktoken
def compact(value):
return json.dumps(value, ensure_ascii=False, separators=(",", ":"), allow_nan=False)
def inspect_case(path, encoding):
report = json.loads((path / "report.json").read_text())
transcript = json.loads((path / "transcript.json").read_text())
catalog_text = (path / "catalog.json").read_text()
catalog = json.loads(catalog_text)
scope = next(
json.loads(line)
for line in reversed(path.with_suffix(".log").read_text().splitlines())
if line.startswith('{"resource_scope":')
)
observation = scope.get("payload_resource_observation") or {}
count = lambda value: len(encoding.encode(value, disallowed_special=()))
input_projection = [
{key: tool[key] for key in ["name", "description", "inputSchema"]}
for tool in catalog["tools"]
]
rpc = [event for event in transcript if "reply" in event or "failure" in event]
local = [event for event in transcript if event["name"] == "local-bundle-projection"]
arguments = sum(count(compact({"name": event["name"], "arguments": event["input"]})) for event in rpc)
text = sum(
count(item["text"])
for event in rpc
for item in event.get("reply", {}).get("content", [])
if item["type"] == "text"
)
full_replies = sum(count(compact(event["reply"])) for event in rpc if "reply" in event)
local_output = sum(count(compact(event["projection"])) for event in local)
schemas = count(compact(input_projection))
completed = (
report["status"] == "passed"
and len(report["tasks"]) == 2
and not report["cleanup_failures"]
and not report["receipt_failures"]
and scope["abort"] is None
and scope.get("payload_resource_observation_verified") is True
and observation.get("payload_exit_code") == 0
and observation.get("payload_cleanup_verified") is True
)
return {
"recording": path.name,
"status": report["status"],
"completed_with_verified_cleanup": completed,
"mode": report["mode"],
"catalog_tools": len(catalog["tools"]),
"catalog_bytes": len(catalog_text.encode()),
"rpc_calls": len(rpc),
"rpc_errors_or_rejections": sum(event.get("reply", {}).get("isError") is True or "failure" in event for event in rpc),
"rpc_argument_bytes": sum(len(compact({"name": event["name"], "arguments": event["input"]}).encode()) for event in rpc),
"rpc_reply_bytes": sum(call["reply_bytes"] or 0 for call in report["calls"]),
"local_recoveries": report.get("local_recoveries", []),
"token_estimates": {
"catalog_full_json": count(catalog_text),
"catalog_input_facing_projection": schemas,
"rpc_name_and_argument_json": arguments,
"rpc_text_content": text,
"rpc_complete_result_json": full_replies,
"local_projection_output_json": local_output,
"input_facing_catalog_plus_arguments_text_and_local_output": schemas + arguments + text + local_output,
},
"whole_scope_wall_seconds": scope["elapsed_seconds"],
"payload_family_cpu_seconds": observation["cpu_stat"]["usage_usec"] / 1_000_000 if observation.get("cpu_stat", {}).get("usage_usec") is not None else None,
"kernel_family_peak_bytes_including_file_cache": observation.get("memory_peak_bytes"),
"payload_exit_observation_verified": scope.get("payload_resource_observation_verified"),
"observed_resource_events": observation.get("resource_events"),
"final_whole_scope_events": scope.get("resource_events_final"),
"tasks": [{"phase": task["phase"], "elapsed_ms": task["elapsed_ms"]} for task in report["tasks"]],
"facts_sha256": report.get("facts_sha256"),
"sources_sha256": report.get("sources_sha256"),
}
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--output", type=Path, required=True)
parser.add_argument("cases", type=Path, nargs="+")
args = parser.parse_args()
encoding = tiktoken.get_encoding("cl100k_base")
result = {
"python": sys.version,
"tiktoken": tiktoken.__version__,
"encoding": encoding.name,
"actual_model_usage": None,
"unmeasured": [
"model-host schema selection, wrapping and rendering",
"system prompts, local filesystem tool schema/program generation and follow-up reasoning",
"model input/cached/uncached/output usage",
"initialization and JSON-RPC wire framing",
"isolated correctness-oracle CPU and memory overhead",
],
"samples": [inspect_case(path, encoding) for path in args.cases],
}
args.output.write_text(json.dumps(result, indent=2) + "\n")
print(json.dumps({"samples": len(result["samples"]), "encoding": encoding.name, "actual_model_usage": None}))
if __name__ == "__main__":
main()