Repository navigation
EVA ↔ EvalPort adapter — portable scenario/metric interop? #215
adhabnr-ux
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hi — I maintain EvalPort, an open interchange spec for portable LLM eval data (
TestCase/Grader/Result/ResultSet/GraderResult, with a Python SDK —pip install evalport-sdk,import openeval— and a TS one). I read throughsrc/eva/models/record.py,results.py, andmetrics/base.pyand think there's a fairly mechanical mapping worth discussing before I write any code, per CONTRIBUTING.md's guidance to raise larger changes here first.The mapping, as I read it:
EvaluationRecord(id,user_goal,scenario_context,ground_truth.expected_scenario_db,category)TestCase(id,input,expected_output,metadata)MetricScore(name,score,normalized_score,error,skipped)GraderResult(grader_id,score,passed,reason)RecordMetrics(record_id,metrics: dict[str, MetricScore])Result(test_case_id,grader_results)aggregate_metrics(EVA-A/EVA-X/EVA-overall)ResultSet.summaryBaseMetric.metric_typemaps reasonably onto EvalPort's gradertypeenum for two of three cases, and genuinely doesn't for the third:TEXT_JUDGE(e.g.faithfulness) →llm_judge, clean fit.AUDIO_JUDGE(speech_fidelity, scoring the mixed audio directly) → no analog. EvalPort's grader types are all text/structure graders; there's no "grades raw audio" type. I'd rather flag that as an open spec question than silently drop those scores on export.CODE(task_completion) → doesn't cleanly fit EvalPort'scodetype either, which the spec describes as a sandboxed custom function.task_completionis actually a deterministic hash/diff comparison againstexpected_scenario_db— closer to a structured-state equality check than executable code. Might map better asjson_path/json_schemaagainst a serialized DB state, or need its own semantics.Concrete sketch, following the
to_openeval()/from_openeval()shape used byadapters/autogen-openeval-adapter— the pattern EvalPort's README points to as the reference shape to copy:Nothing here touches EVA internals — it'd be a standalone package like the AutoGen one, validated against
openeval.validate.validate_suite()/validate_result_set().Two questions before I'd invest time in a PR:
— Sahi, independent contributor (not affiliated with this project)
All reactions