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.
Proposal summary
Add
to_openeval()/from_openeval()support for Opik'sDataset/Experimentobjects, 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.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-adapterpackage 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.