Summary
The scenario label reported by agentops eval analyze disagrees with the scenario table published in the Evaluation docs. A Foundry hosted agent target with a dataset containing only input / expected is reported as model quality, but the docs define Model quality as requiring a model:<deployment> target.
Version: agentops-accelerator 0.8.1
What the docs say
From Datasets and scenarios on https://azure.github.io/agentops/evaluation/:
| Scenario |
Signal in the row |
| Model quality |
model:<deployment> target plus expected |
| Conversational |
input plus expected |
By that table, a hosted-agent target with input + expected rows should be classified as Conversational.
What the code does
agentops/services/eval_analysis.py, _scenario_hint() (around line 410) only inspects dataset column names. It never receives or consults the resolved target kind:
def _scenario_hint(dataset_columns: Set[str], text: str) -> str:
if {"tool_calls", "tool_definitions"} & dataset_columns:
return "agent_workflow"
if "context" in dataset_columns:
return "rag"
if "conversation" in dataset_columns or "turns" in dataset_columns:
return "conversational"
if "expected" in dataset_columns:
return "model_quality"
...
Because the expected check precedes any target-kind consideration, every dataset with an expected column is labeled model_quality regardless of whether the target is a model deployment, a prompt agent, or a hosted agent. The conversational branch is only reachable via conversation / turns columns, which is a different signal than the one the docs advertise.
Reproduction
agentops.yaml:
version: 1
agent: https://<acct>.services.ai.azure.com/api/projects/<proj>/agents/<agent>/versions/11
dataset: .agentops/data/helpdesk-smoke.jsonl
protocol: responses
Dataset rows (columns: id, input, expected):
{"id": "1", "input": "Diagnose why the user cannot sign in.", "expected": "Explain that the token expired and tell the user to sign out and back in."}
Run:
Observed output:
Project: foundry_hosted evaluation setup (model quality)
Readiness
target Foundry hosted agent
scenario model quality
...
ok Scenario Likely scenario: model quality.
The same report correctly resolves target as Foundry hosted agent, so the target kind is known at that point. It just isn't used by the scenario heuristic.
Impact
Low, but non-zero.
Functionally this appears harmless: agentops/core/evaluators.py states in its module docstring that "There is no user-facing scenario concept," and evaluator auto-selection is driven by target kind plus dataset shape rather than by scenario_hint. The label does not change which evaluators run.
The cost is trust in the reporting surface. eval analyze is presented as the step you run to understand your setup before your first run, so a label that contradicts the published table sends readers looking for a misconfiguration that does not exist.
Suggested fix
Either of these would close the gap:
- Align the code with the docs. Pass the resolved target kind into
_scenario_hint() and gate the model_quality branch on a model-direct target, falling through to conversational for prompt/hosted agent targets with input + expected.
- Align the docs with the code. Update the Datasets and scenarios table to describe the actual precedence (column-only,
expected wins over the conversational case), and drop the model:<deployment> qualifier from the Model quality row.
Option 1 seems closer to the documented intent, since the analyze report already surfaces the target kind on the adjacent line.
Related, smaller gap
While tracing this, one behavior that is only discoverable in code is the per-target-kind evaluator split described in the core/evaluators.py docstring:
- Model-direct targets add
Similarity + F1Score
- Agent targets add
Similarity + ResponseCompleteness
The docs describe both as "answer-quality judges" without distinguishing them. Documenting the concrete default sets per target kind would make it easier to predict a run before executing it. Happy to split that into its own issue if you prefer to keep this one focused.
Summary
The scenario label reported by
agentops eval analyzedisagrees with the scenario table published in the Evaluation docs. A Foundry hosted agent target with a dataset containing onlyinput/expectedis reported asmodel quality, but the docs defineModel qualityas requiring amodel:<deployment>target.Version:
agentops-accelerator0.8.1What the docs say
From Datasets and scenarios on https://azure.github.io/agentops/evaluation/:
model:<deployment>target plusexpectedinputplusexpectedBy that table, a hosted-agent target with
input+expectedrows should be classified as Conversational.What the code does
agentops/services/eval_analysis.py,_scenario_hint()(around line 410) only inspects dataset column names. It never receives or consults the resolved target kind:Because the
expectedcheck precedes any target-kind consideration, every dataset with anexpectedcolumn is labeledmodel_qualityregardless of whether the target is a model deployment, a prompt agent, or a hosted agent. Theconversationalbranch is only reachable viaconversation/turnscolumns, which is a different signal than the one the docs advertise.Reproduction
agentops.yaml:Dataset rows (columns:
id,input,expected):{"id": "1", "input": "Diagnose why the user cannot sign in.", "expected": "Explain that the token expired and tell the user to sign out and back in."}Run:
Observed output:
The same report correctly resolves
targetasFoundry hosted agent, so the target kind is known at that point. It just isn't used by the scenario heuristic.Impact
Low, but non-zero.
Functionally this appears harmless:
agentops/core/evaluators.pystates in its module docstring that "There is no user-facingscenarioconcept," and evaluator auto-selection is driven by target kind plus dataset shape rather than byscenario_hint. The label does not change which evaluators run.The cost is trust in the reporting surface.
eval analyzeis presented as the step you run to understand your setup before your first run, so a label that contradicts the published table sends readers looking for a misconfiguration that does not exist.Suggested fix
Either of these would close the gap:
_scenario_hint()and gate themodel_qualitybranch on a model-direct target, falling through toconversationalfor prompt/hosted agent targets withinput+expected.expectedwins over the conversational case), and drop themodel:<deployment>qualifier from the Model quality row.Option 1 seems closer to the documented intent, since the analyze report already surfaces the target kind on the adjacent line.
Related, smaller gap
While tracing this, one behavior that is only discoverable in code is the per-target-kind evaluator split described in the
core/evaluators.pydocstring:Similarity+F1ScoreSimilarity+ResponseCompletenessThe docs describe both as "answer-quality judges" without distinguishing them. Documenting the concrete default sets per target kind would make it easier to predict a run before executing it. Happy to split that into its own issue if you prefer to keep this one focused.