File size: 1,203 Bytes
0f166dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
from jinja2 import Environment, FileSystemLoader
import pandas as pd
from ..utils.tracing import Tracer

class ReportTool:
    def __init__(self, cfg, tracer: Tracer):
        self.cfg = cfg
        self.tracer = tracer
        self.env = Environment(loader=FileSystemLoader("templates"))

    def render_and_save(self, user_query: str, sql_preview: pd.DataFrame | None, predict_preview: pd.DataFrame | None, explain_images: dict, plan: dict):
        tmpl = self.env.get_template("report_template.md")
        html = tmpl.render(
            user_query=user_query,
            plan=plan,
            sql_preview=sql_preview.to_markdown(index=False) if sql_preview is not None else "",
            predict_preview=predict_preview.to_markdown(index=False) if predict_preview is not None else "",
            explain_images=explain_images,
        )
        out_path = f"report_{pd.Timestamp.utcnow().strftime('%Y%m%d_%H%M%S')}.html"
        with open(out_path, "w", encoding="utf-8") as f:
            f.write("<link rel=\"stylesheet\" href=\"templates/report_styles.css\">\n" + html)
        self.tracer.trace_event("report", {"path": out_path})
        return out_path