#!/usr/bin/env python3
"""A-1 을 **프로덕션만** 다시 잰다.

★앞선 실측이 오염됐다 — 같은 시간창에 내가 돌린 측정 도구
(`op:canary_judge__*` · `op:shot_selection_compare` · `op:state_support__*` …)가
같은 Opik 프로젝트에 남는다. 그것까지 세면 「기록이 평평하다」가 실제보다
훨씬 나빠 보인다.

가르는 법: trace/span 에 `step:` 태그가 있으면 프로덕션 파이프라인,
`op:` 만 있고 `step:` 이 없으면 내 도구다(도구는 step scope 를 안 연다).
"""
import sys
from collections import Counter

sys.path.insert(0, "/Users/manta/Documents/Projects/TheRoad-I1/scratchpad")
from _opik_env import opik_target  # noqa: E402
from tools.opik_prompt_audit.audit.fetch import (  # noqa: E402
    fetch_spans, fetch_trace_index)

BASE, WS, PROJ = opik_target()
SINCE, UNTIL = "2026-08-28T03:20:00", "2026-08-28T06:10:00"

spans = fetch_spans(BASE, WS, PROJ, SINCE, UNTIL)
traces = fetch_trace_index(BASE, WS, PROJ, SINCE, UNTIL)


def has_step(x) -> bool:
    return any(t.startswith("step:") for t in (x.get("tags") or []))


def is_tool(x) -> bool:
    tags = x.get("tags") or []
    return any(t.startswith("op:") for t in tags) and not has_step(x)


prod_t = [t for t in traces.values() if not is_tool(t)]
tool_t = [t for t in traces.values() if is_tool(t)]
prod_s = [s for s in spans if not is_tool(s)]
tool_s = [s for s in spans if is_tool(s)]

print(f"trace {len(traces)} = 프로덕션 {len(prod_t)} + 내 도구 {len(tool_t)}")
print(f"span  {len(spans)} = 프로덕션 {len(prod_s)} + 내 도구 {len(tool_s)}\n")

flat = [t for t in prod_t if (t.get("name") or "") == "chat.completion"]
print(f"② 프로덕션 trace 중 이름이 `chat.completion`(계층 없음): "
      f"{len(flat)} / {len(prod_t)}")
tg = Counter()
for t in flat:
    for x in (t.get("tags") or []):
        if x.startswith("step:"):
            tg[x] += 1
print("   그 평평한 trace 가 어느 스텝인가:")
for k, v in tg.most_common(20):
    print(f"     {v:>4}  {k}")
if not tg:
    print("     (step 태그 없음)")

ns = [s for s in prod_s if not has_step(s)]
print(f"\n① 프로덕션 span 중 스텝 태그 없음: {len(ns)} / {len(prod_s)}")
for k, v in Counter(s.get("model") or "(모델없음)" for s in ns).most_common():
    print(f"     {v:>4}  {k}")

print("\n── 프로덕션 trace 이름별 ──")
for k, v in Counter(t.get("name") or "(이름없음)"
                    for t in prod_t).most_common(15):
    print(f"  {v:>4}  {k}")
