Shipped: vertexai-openeval-adapter — EvalPort import/export for vertexai.evaluation results
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 10/100
- Issue type
- Feature
- Clarity
- Needs clarification
- Activity status
- Quiet
- Tech stack
- python
- Domain
- machine-learning
Research direction
This issue describes the external vertexai-openeval-adapter package rather than a change to python-aiplatform. Start with the linked adapter README and package path to understand its Vertex AI and EvalPort mappings. There is no in-repository entry point, test target, or acceptance criterion for a contributor to complete.
Written by the indexing model from the issue text.
Description
Built and shipped a standalone adapter that converts vertexai.evaluation metrics and EvalResults to and from EvalPort (Apache 2.0) — an open interchange format for portable LLM evaluation datasets (test cases, graders, suites, and result sets as plain JSON). It's already integrated with UK AISI's Inspect AI (PR merged) and has standalone adapter packages for a dozen+ eval/observability frameworks (Ragas, LangSmith, MLflow, Braintrust, DeepEval-adjacent tools aside — AutoGen, CrewAI, Langfuse, Evidently, TruLens, Opik, Giskard, Argilla), so a Vertex AI Gen AI Evaluation Service adapter puts it in company with the rest of that ecosystem.
import pandas as pd
from vertexai.evaluation import EvalTask, PointwiseMetric, PointwiseMetricPromptTemplate
from vertexai_openeval_adapter import to_openeval, from_openeval, eval_result_to_openeval
dataset = pd.DataFrame({"prompt": ["What is the capital of France?"], "reference": ["Paris"]})
suite = to_openeval(dataset, input_column="prompt", expected_output_column="reference", suite_id="geo_quiz")
from openeval.validate import validate_suite
assert validate_suite(suite).valid
quality_metric = PointwiseMetric(
metric="quality",
metric_prompt_template=PointwiseMetricPromptTemplate(
criteria="Is the response factually correct?", metric_definition="Factual accuracy"
),
)
eval_task = EvalTask(dataset=dataset, metrics=[quality_metric])
result = eval_task.evaluate()
result_set = eval_result_to_openeval(result, suite_id="geo_quiz", run_id="run-1", started_at="2026-08-16T00:00:00Z")
assert validate_result_set(result_set).valid
The metric-mapping is the part I'd flag as genuinely interesting rather than routine: PointwiseMetric maps to EvalPort's llm_judge grader with the actual rendered prompt template preserved verbatim in the grader's params.prompt_template (read directly from PointwiseMetricPromptTemplate's own rendering, not reconstructed or guessed) — so a suite exported from Vertex AI carries the real judge instructions, not a placeholder. CustomMetric and PairwiseMetric are exported as custom-typed graders (execution-only, not reconstructed on import) since both compute client-side per Vertex's own docstrings and have no portable representation. Raw string metric names ("rouge_1", "bleu", etc.) are explicitly rejected with a TypeError rather than silently guessed at, since their scoring logic isn't introspectable from the SDK's own objects. The adapter reads EvalResult.metrics_table using Vertex's own column convention (f"{metric_name}/score"), verified directly against vertexai/evaluation/_evaluation.py source rather than assumed.
Tested against the real google-cloud-aiplatform[evaluation] package (not mocks) and the real openeval.validate.validate_suite()/validate_result_set(). Full README with the complete mapping table and round-trip notes: https://github.com/adhabnr-ux/evalport/tree/main/adapters/vertexai-openeval-adapter#readme
No action needed here — this lives entirely as an external package (pip install vertexai-openeval-adapter), zero footprint on google-cloud-aiplatform itself. Flagging mainly so it's discoverable; happy to adjust the mapping if the evaluation module's public API shifts.
- Dominant language
- Python
- Stars
- 907
- Forks
- 467
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 40
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from googleapis/python-aiplatform
-
api: vertex-ai
Difficulty 1/5 Under an hour Newbie friendliness 85/100
googleapis/python-aiplatform#7132 ·
-
api: vertex-ai
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
googleapis/python-aiplatform#7097 ·
-
CustomContainerTrainingJob.run drops max_wait_duration=0 instead of requesting indefinite DWS wait Openapi: vertex-ai
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
googleapis/python-aiplatform#7067 · 1 comment ·
-
api: vertex-ai
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
googleapis/python-aiplatform#6877 ·
-
api: vertex-ai
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
googleapis/python-aiplatform#6865 · 1 comment ·
All issues in googleapis/python-aiplatform
Similar issues
-
area: harness bug status: needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Human-Agent-Society/reef#625 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
-
Difficulty 1/5 Under an hour Newbie friendliness 80/100
learningequality/kolibri#15351 · 2 comments ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Name consistency Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
eellak/triplestore#65 · 1 comment ·