Repository navigation
Portable test suites for evaluating Agent orchestrations (GroupChatOrchestration, etc.) — EvalPort interop? #14322
Replies: 4 comments 2 replies
|
This is a legitimate gap in the agent ecosystem. Right now, most teams end up building ad-hoc harness scripts or tying themselves into proprietary eval platforms that assume a single prompt-response LLM rather than a multi-agent state machine. Having a portable, schema-driven spec like EvalPort for orchestrations would be very useful, especially when teams want to benchmark whether migrating a workflow from AutoGen/LangGraph to Semantic Kernel introduces regression. A couple of architectural observations from running multi-agent evals in production: 1. Terminal Output vs. Trajectory GradersFor simple single-turn tasks, In Semantic Kernel, you can extract the full message history from the orchestration result: # Extract the full conversation trajectory for multi-step grading
messages = await res.get_messages()
trajectory = [
{"role": m.role.value, "author": m.name, "content": m.content, "tool_calls": len(m.items)}
for m in messages
]If EvalPort's
2. Async Streaming / Cancellation SupportProduction agent runs can stall or exceed timeouts. When wrapping 3. Packaging StrategyKeeping it in a standalone external package (e.g. |
|
The I’d add a normalized trace slot to |
|
Portable suites for this are worth having, and I'd add one requirement that I only learned by Concretely, three ways my own orchestration checks passed while being wrong:
On the One last distinction I'd bake into ResultSet if you can: FAILED ("provably didn't happen", The launcher/judgement scripts behind the above are MIT, in case a reference implementation of |
|
Both of these are worth real answers rather than a thank-you and silence, so sorting by what actually changes vs. what's already covered: Harlock (@capitaharlock) — normalized trace slot + run metadata + Improvement/Neutral/Regression grader mode. The trace slot and run metadata (model/version/seed) are exactly what The Improvement/Neutral/Regression grading mode is different in kind, though: that's a comparison against a baseline ResultSet, which is a consumer-side operation over two documents, not a property of one solim (@soul-sol) — this one actually exposed a real gap, and I don't want to paper over it with I don't want to bolt this onto a reply here — this project's own process is a proper two-week Discussion before anything gets implemented, the same path #45 and #47 went through. I'll open one on EvalPort specifically for the FAILED/UNVERIFIED terminal-state distinction, credit your Will link back here once that Discussion is up. |
Uh oh!
There was an error while loading. Please reload this page.
Hi SK community,
Looking through
python/samples/getting_started_with_agents/multi_agent_orchestration/step3_group_chat.py, the orchestration pattern is clean: build aGroupChatOrchestrationfrom a list ofChatCompletionAgents and aRoundRobinGroupChatManager,runtime.start(),await group_chat_orchestration.invoke(task=..., runtime=runtime), thenawait orchestration_result.get()for the final value. That's a nice, uniform shape — any orchestration (group chat, sequential, or your other managers) takes a task string in and produces a result out.That uniformity made me wonder about testing it at scale: has anyone here wanted a portable way to define "given this task, the orchestration's output should satisfy X" test suites — the kind you'd want to run against an SK agent orchestration, and separately also run against a LangChain/AutoGen/raw-API pipeline doing the same job, to compare apples to apples?
I maintain EvalPort (https://github.com/adhabnr-ux/evalport), a small open spec (JSON Schemas under
spec/schemas/forTestSuite/TestCase/ResultSet/Grader, plus Python/TS SDKs) aimed at exactly that — not another eval runner, just a portable format so a test suite isn't locked to one framework's dataset shape.Rough sketch of what an adapter over
GroupChatOrchestrationcould look like:Given your CONTRIBUTING guidance that plugins/connectors are best hosted outside the SK repo, I'd build and host this as its own small package rather than proposing it land in
semantic_kernel/. Posting here first (per COMMUNITY.md) to check whether this is actually a gap for anyone, before spending time on it. Spec for reference: https://github.com/adhabnr-ux/evalport/blob/main/SPEC.mdNo pressure either way — genuinely just gauging interest.
All reactions