File size: 1,718 Bytes
2d79471
 
 
 
 
 
 
 
59afc96
2d79471
 
 
 
 
 
 
 
 
 
 
 
 
59afc96
2d79471
 
 
 
 
 
59afc96
 
 
 
2d79471
 
 
59afc96
2d79471
 
 
 
 
 
 
 
 
 
59afc96
2d79471
59afc96
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from __future__ import annotations

import json
from pathlib import Path

import pandas as pd
from openai import OpenAI

from analysis.llm_analyzer import analyze_with_llm
from report.diagnostic_report import generate_report_with_openai


def load_jsonl(path: Path):
    rows = []
    with path.open("r", encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            if line:
                rows.append(json.loads(line))
    return rows


def main(run_id: str, runs_dir: str = "runs", model: str = "gpt-4.1-mini"):
    run_dir = Path(runs_dir) / run_id

    df_align = pd.DataFrame(load_jsonl(run_dir / "aligned.jsonl"))
    df_events = pd.read_parquet(run_dir / "events.parquet") if (run_dir / "events.parquet").exists() else pd.DataFrame()
    summary = json.loads((run_dir / "summary.json").read_text(encoding="utf-8")) if (run_dir / "summary.json").exists() else {}

    client = OpenAI()
    llm_diagnosis = analyze_with_llm(df_align, df_events, summary, model=model, client=client)
    (run_dir / "llm_diagnosis.json").write_text(
        json.dumps(llm_diagnosis, ensure_ascii=False, indent=2),
        encoding="utf-8"
    )

    report = generate_report_with_openai(llm_diagnosis, summary, client, model=model)
    (run_dir / "diagnostic_report.md").write_text(report, encoding="utf-8")

    print(f"Diagnostic report written to: {run_dir / 'diagnostic_report.md'}")


if __name__ == "__main__":
    import argparse
    ap = argparse.ArgumentParser()
    ap.add_argument("--run_id", required=True)
    ap.add_argument("--runs_dir", default="runs")
    ap.add_argument("--model", default="gpt-4.1-mini")
    args = ap.parse_args()
    main(args.run_id, args.runs_dir, args.model)