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("\n" + html) self.tracer.trace_event("report", {"path": out_path}) return out_path