Skip to content

render

render

Jinja2 report rendering for evaluation results.

Loads HTML/Jinja templates from the assets/ directory and renders an EvaluationReport into a self-contained HTML file.

Functions:

Name Description
maybe_render_report

Render the evaluation report if one is provided, otherwise return None.

render_report

Render an evaluation report to HTML using a Jinja2 template.

maybe_render_report(evaluation_report, template_name='multi_modal_report.j2', output_path=None, workdir=None)

Render the evaluation report if one is provided, otherwise return None.

Source code in src/nemo_safe_synthesizer/evaluation/render.py
def maybe_render_report(
    evaluation_report: EvaluationReport | None,
    template_name: str = "multi_modal_report.j2",
    output_path: str | Path | None = None,
    workdir: "Workdir | None" = None,
) -> str | None:
    """Render the evaluation report if one is provided, otherwise return ``None``."""
    if not evaluation_report:
        return None
    return render_report(evaluation_report, template_name=template_name, output_path=output_path, workdir=workdir)

render_report(evaluation_report, template_name='multi_modal_report.j2', output_path=None, workdir=None)

Render an evaluation report to HTML using a Jinja2 template.

Parameters:

Name Type Description Default
evaluation_report EvaluationReport

The completed evaluation report to render.

required
template_name str

Jinja2 template filename relative to assets/jinja/reports/.

'multi_modal_report.j2'
output_path str | Path | None

File path to write the rendered HTML. If None and workdir is provided, falls back to workdir.evaluation_report.

None
workdir Workdir | None

Working directory structure for output path resolution.

None

Returns:

Type Description
str | None

The rendered HTML string, or None if rendering fails.

Source code in src/nemo_safe_synthesizer/evaluation/render.py
def render_report(
    evaluation_report: EvaluationReport,
    template_name: str = "multi_modal_report.j2",
    output_path: str | Path | None = None,
    workdir: "Workdir | None" = None,
) -> str | None:
    """Render an evaluation report to HTML using a Jinja2 template.

    Args:
        evaluation_report: The completed evaluation report to render.
        template_name: Jinja2 template filename relative to ``assets/jinja/reports/``.
        output_path: File path to write the rendered HTML. If ``None`` and
            ``workdir`` is provided, falls back to ``workdir.evaluation_report``.
        workdir: Working directory structure for output path resolution.

    Returns:
        The rendered HTML string, or ``None`` if rendering fails.
    """
    # Resolve output path from workdir if not explicitly provided
    if output_path is None and workdir is not None:
        output_path = workdir.evaluation_report

    env = Environment(
        loader=FunctionLoader(_get_template),
        autoescape=select_autoescape(["html", "xml"]),
    )
    template = env.get_template("jinja/reports/" + template_name)
    template.globals["now"] = datetime.datetime.now(datetime.timezone.utc)

    output = None
    try:
        ctx = evaluation_report.jinja_context
        output = template.render(ctx=ctx)
        if output_path:
            with open(output_path, "w") as f:
                f.write(output)
        else:
            return output
    except Exception:
        logger.exception("Failed to render report.")
    return output