# Share a Ragas Evaluation Report — RAG Scores at a URL

Canonical: https://commareports.com/agents/share-ragas-eval-report
Published: 2026-09-12

> Ragas gives you faithfulness, answer relevancy and context precision as a DataFrame. Export it to HTML and publish it to Comma so the team can argue about the low-scoring rows at one link.

# Share a Ragas evaluation report

`evaluate()` returns an object. You print it, get four means, and the four
means are the least interesting thing about the run — the question is always
_which sample_ scored 0.3 on faithfulness and why.

That answer lives in a DataFrame, in your process, and dies when the kernel
restarts.

## Export the per-sample table

```python
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision

result = evaluate(dataset, metrics=[faithfulness, answer_relevancy, context_precision])
df = result.to_pandas()

df.to_html("ragas.html", index=False, float_format="%.3f")
```

Drag `ragas.html` into [the app](https://commareports.com/), or publish it
from the same job that ran the eval:

```bash
curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html ragas.html \
        --arg title "RAG eval — $GIT_SHA" '{title: $title, html: $html}')"
```

Sort the frame by the metric you gate on before exporting. The reviewer's
attention goes to the top of the table whether you earned it or not.

## Why review beats a score

A faithfulness score of 0.62 is not a bug report. It becomes one when someone
reads the retrieved context next to the generated answer and says _the
chunker split the table header off the rows_. So put the disagreement on the
row:

- **Anchored threads** — the objection sits on the sample, not in a thread in
  Slack that loses which row it meant. See
  [commenting on HTML](/comment-on-html).
- **Revisions** — one report id per suite. Change the retriever, PATCH again,
  and the URL carries both runs.
- **Access per report** — eval sets are usually built from real customer
  questions. Keep the report private, team-only, or domain-gated; see the
  [sharing model](/docs/sharing).

## Close the loop with the agent

If an agent is the thing editing your retrieval config, it can read the
comments back through [the MCP server](/docs/mcp) and act on them — see
[let an agent respond to comments](/agents/let-an-agent-respond-to-comments).
A [routine](/features/routines/daily-claude-eval-refresh) can re-run the suite
nightly so the link is never showing last week's index.

## Limits

- **Entry HTML: 5 MB.** A large eval with full retrieved contexts per row gets
  there fast — truncate the context column, or split by metric.
- **Assets: 25 MB per file, 250 MB and 500 files per report.**
- **60 requests/minute per token.**

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision
history.

**[Publish a Ragas report →](https://commareports.com/)**

### Related

- [Share an LLM eval report](/agents/share-llm-eval-report) · [Share a DeepEval report](/agents/share-deepeval-report)
- [Share a promptfoo report](/share-promptfoo-report) · [Share a LangSmith eval report](/agents/share-langsmith-eval-report)
- [Share a pandas DataFrame as HTML](/share-pandas-dataframe-html) · [Publish from CI](/docs/ci)
