> ## Documentation Index
> Fetch the complete documentation index at: https://docs.evidentlyai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Core eval workflow using the Evidently library at a glance.

## Define and run the eval

<Tip>
  To log the evaluation results to the Evidently Platform, first connect to [Evidently Cloud](/docs/setup/cloud) or your [local workspace](/docs/setup/self-hosting) and [create a Project](/docs/platform/projects_manage). It's optional: you can also run evals locally in Python.
</Tip>

<Steps>
  <Step title="Prepare the input data">
    Get your data in a table like a `pandas.DataFrame`. More on [data requirements](/docs/library/overview#dataset). You can also [load data](/docs/platform/datasets_workflow) from Evidently Platform, like tracing data you captured or synthetic datasets.
  </Step>

  <Step title="Create a Dataset object">
    Create a Dataset object with `DataDefinition()` that specifies column role and types. You can also use default type detection. [How to set Data Definition](/docs/library/data_definition).

    ```python theme={null}
    eval_data = Dataset.from_pandas(
        source_df,
        data_definition=DataDefinition()
    )
    ```
  </Step>

  <Step title="(Optional) Add descriptors">
    For LLM and text evals, define row-level `descriptors` to compute. Here, you can use a variety of methods, from deterministic to LLM judges. Optionally, add row-level tests to get explicit pass/fail outcomes on set conditions. [How to use Descriptors](/docs/library/descriptors).

    ```python theme={null}
    eval_data.add_descriptors(descriptors=[
        TextLength("Question", alias="Length"),
        Sentiment("Answer", alias="Sentiment")
    ])
    ```
  </Step>

  <Step title="Configure Report">
    For dataset-level evals (classification, data drift) or to summarize descriptors, create a `Report` with chosen `metrics`  or `presets`. How to [configure Reports](/docs/library/report).

    ```python theme={null}
    report = Report([
        DataSummaryPreset()
    ])
    ```
  </Step>

  <Step title="(Optional) Add Test conditions">
    Add dataset-level Pass/Fail conditions, like to check if all texts in the dataset are in \< 100 symbols length. How to [configure Tests](/docs/library/tests).

    ```python theme={null}
    report = Report([
        DataSummaryPreset(),
        MaxValue(column="Length", tests=[lt(100)]),
    ])
    ```
  </Step>

  <Step title="(Optional) Add Tags and Timestamps">
    Add `tags` or `metadata` to identify specific evaluation runs or datasets, or override the default `timestamp `. [How to add metadata](/docs/library/tags_metadata).
  </Step>

  <Step title="Run the Report">
    To execute the eval, `run`the Report on the `Dataset` (or two).

    ```python theme={null}
    my_eval = report.run(eval_data, None)
    ```
  </Step>

  <Step title="Explore the results">
    * To upload to the Evidently Platform. [How to upload results](/docs/platform/evals_api).

    ```python theme={null}
    ws.add_run(project.id, my_eval, include_data=True)
    ```

    * To view locally. [All output formats](/docs/library/output_formats).

    ```python theme={null}
    my_eval
    ##my_eval.json()
    ```
  </Step>
</Steps>

## Quickstarts

Check for end-to-end examples:

<CardGroup cols={2}>
  <Card title="LLM quickstart" icon="comment-text" href="/quickstart_llm">
    Evaluate the quality of text outputs.
  </Card>

  <Card title="ML quickstart" icon="table" href="/quickstart_ml">
    Test tabular data quality and data drift.
  </Card>
</CardGroup>
