Skip to content

[FR]: EvalPort import/export for Datasets and Experiments #7798

Description

@adhabnr-ux

Proposal summary

Add to_openeval() / from_openeval() support for Opik's Dataset/Experiment objects, converting to and from EvalPort — an open interchange format (Apache 2.0) for portable LLM evaluation datasets (test cases, graders, eval suites, result sets as plain JSON). It's already integrated with UK AISI's Inspect AI (PR approved) and has standalone adapter packages for AutoGen, CrewAI, Ragas, LangSmith, Braintrust, and MLflow — Opik would join that list.

from opik import Opik
from opik_openeval_adapter import to_openeval, from_openeval

client = Opik()
dataset = client.get_dataset("my-dataset")
experiment_items = client.get_experiment_by_name("my-experiment").get_items()

# Export a dataset + its experiment results to an EvalPort suite
suite = to_openeval(dataset, experiment_items=experiment_items)

from openeval.validate import validate_suite
assert validate_suite(suite).valid

# ...and the other direction: load an EvalPort suite as a fresh Opik dataset
items = from_openeval(suite)
dataset = client.create_dataset(name="from-evalport")
dataset.insert(items)

Each Opik metric attached to an experiment item (Hallucination, AnswerRelevance, ContextPrecision, heuristic metrics, or a custom metric) would map to its own EvalPort grader, and the already-computed scores would be preserved per test case — so an experiment run exported to EvalPort keeps its results, not just its inputs.

Motivation

What problem are you trying to solve? Moving a dataset (and its already-computed experiment results) between Opik and another eval tool today means hand-translating it — there's no shared format. That matters when a team wants to compare Opik's LLM-as-a-judge metrics against another framework's graders on the exact same test cases, or wants to reuse an Opik-built dataset in a tool that doesn't speak Opik's format, or vice versa.

How are you currently solving this problem? Manually re-authoring the dataset per tool, or writing one-off glue scripts per pair of tools — which doesn't scale past two or three frameworks.

What are the benefits of this feature? Opik already integrates with more frameworks than almost anyone in this space (the integrations table in the README is enormous) — an EvalPort adapter extends that same "framework-agnostic" positioning to the evaluation data itself, not just tracing. Teams evaluating across Opik plus one of the other EvalPort-speaking tools (Inspect AI, AutoGen, CrewAI, Ragas, LangSmith, Braintrust, MLflow) get a shared dataset/result format for free instead of custom glue per pair.

Happy to build this as a standalone opik-openeval-adapter package if that's the better fit, or contribute it in-repo if maintainers would rather it live alongside the other integrations — open to discussing the mapping (especially how to round-trip Opik's feedback-score definitions) before writing code.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions