Skip to content

Python: [Feature]: Document a third-party Python evaluator that preserves evidence metadata #8217

Description

@roli-lpci

Context: Agent Framework 1.17.0 and Hermes Rubric 1.2.1 on Python 3.10. Filing this before code or a PR, per the contribution guidance.

Description

Agent Framework already defines an experimental, provider-neutral Python Evaluator protocol and structured EvalResults, EvalItemResult, and EvalScoreResult types. I could not find a third-party example showing how to preserve additional provenance—evidence citations, assessed coverage, and a run receipt—without reducing the result to an unexplained number.

Proposed scope

A thin optional-dependency example or integration implementing the current protocol exactly:

async def evaluate(
    self,
    items: Sequence[EvalItem],
    *,
    eval_name: str,
) -> EvalResults:
    ...

It would invoke Hermes Rubric through assess_async(..., rubric=caller_rubric, backend=caller_backend), then map:

  • aggregate score to EvalScoreResult.score;
  • per-dimension scores to RubricScore;
  • evidence citations, coverage, limitations, and receipt to EvalScoreResult.sample or EvalItemResult.metadata, as maintainers prefer;
  • Hermes AssessmentError to item status="error" with error_code and error_message, with no numeric fallback.

It would provide no default rubric, backend, threshold, or pass predicate. Hermes FeedbackPolicy, if supplied, would only generate deterministic post-assessment feedback; it would not be treated as a pass/fail policy.

Decision needed

EvalScoreResult.passed may be None, while documented EvalItemResult.status values are pass, fail, or error. Before implementation, should this adapter:

  1. require a caller-supplied pass predicate so item status is defined, or
  2. remain an external example until maintainers specify the supported non-gating mapping?

If wanted, should it live under python/samples or remain an external package referencing the protocol?

Tests

  • pinned imports with Agent Framework 1.17.0 and Hermes Rubric 1.2.1 on Python 3.10;
  • evidence, dimensions, coverage, and receipt preserved;
  • partial coverage remains explicit;
  • malformed/provider failures become explicit errors without numeric fallback;
  • missing optional dependency fails clearly.

Limitations

This is one evaluator option, not a Foundry replacement or parity claim. Results depend on the caller’s rubric and backend and remain advisory. Python only; no adoption, certification, correctness, or safety claim.

I will not open a PR until a maintainer confirms the route and the required item-status mapping.

Activity

  1. added
    pythonUsage: [Issues, PRs], Target: Python
    triageUsage: [Issues], Target: All issues that still need to be triaged
    on Sep 10, 2026
  2. changed the title [-][Feature]: Document a third-party Python evaluator that preserves evidence metadata[/-] [+]Python: [Feature]: Document a third-party Python evaluator that preserves evidence metadata[/+] on Sep 10, 2026
  3. removed
    triageUsage: [Issues], Target: All issues that still need to be triaged
    on Sep 10, 2026
  4. eavanvalkenburg commented on Oct 27, 2026

    @eavanvalkenburg
    Member

    /plan Investigate the supported contract and appropriate ownership route for this proposal before implementation.

    Please assess current main, rather than assuming the reported package versions still define the contract:

    • Confirm how a third-party Evaluator can preserve aggregate and dimension scores, evidence citations, coverage, limitations and receipts using existing EvalScoreResult.sample and EvalItemResult.metadata. Identify any actual framework gap separately from vendor-specific mapping.
    • Resolve the non-gating case explicitly: per-score passed=None is available, but documented item statuses are pass/fail/error. Compare requiring an explicit caller-supplied pass predicate with a genuinely provider-neutral non-gating result contract. Explain effects on item helpers, aggregate counts/rates, partial results and error handling; do not silently classify an ungated assessment as passed or invent an undocumented status.
    • Recommend external/community integration versus a reusable in-repo sample based on audience and maintenance cost. Explain whether any core change is needed by evaluator providers generally, not just this adapter. Keep optional dependencies optional, use caller-owned rubric/backend/policy, and do not conflate feedback generation with pass/fail policy.
    • Define focused coverage for protocol compatibility, provenance/dimensions/partial coverage, explicit provider/item errors without numeric fallback, absent optional dependencies, and any proposed status/aggregation changes.

    This requests investigation and a proposed plan, not acceptance of a vendor integration, a new core result status, or a particular sample location. Please identify decisions requiring explicit maintainer agreement before an implementing PR. No implementation or timing commitment is made.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

agentsUsage: [Issues, PRs], Target: Single agentpythonUsage: [Issues, PRs], Target: Python

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions