Spaces:
Sleeping
Sleeping
File size: 10,022 Bytes
d3d0e0e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 | # Phase 1 Baseline Evaluation Harness - Usage Guide
## Overview
This Phase 1 integration enables evaluation of baseline ReAct agent runs using a standardized evaluation pipeline. The system adapts baseline traces to a canonical schema and computes metrics compatible with future multi-agent systems.
## Quick Start
### Run Baseline Evaluation
```bash
cd /data3/dataFAIR/kdd-dev/public
# Evaluate a baseline run
dabench eval-baseline <run_id>
# Example:
dabench eval-baseline 20260613T114457Z
```
### Output
The evaluation generates three files in `<run_dir>/baseline_evaluation/`:
```
baseline_evaluation/
├── task_results.csv # Per-task metrics
├── summary_metrics.json # Aggregated statistics
└── evaluation_report.md # Scientific analysis
```
## Command Options
```bash
dabench eval-baseline <run_id> [OPTIONS]
Arguments:
run_id Run ID (directory name under artifacts/runs/)
Options:
--task-root PATH Root directory containing task metadata
Default: /data3/dataFAIR/kdd-dev/public/input_full
--gold-root PATH Root directory containing gold answer files
Default: /data3/dataFAIR/kdd-dev/public/output
--output-dir PATH Output directory for evaluation results
Default: <run_dir>/baseline_evaluation
```
## Architecture
### Components
1. **Canonical Evaluation Schema** (`src/data_agent_baseline/evaluation/__init__.py`)
- Unified trace representation for all agent types
- Compatible with baseline and LangGraph traces
- Extensible for future agent architectures
2. **Baseline Trace Adapter** (`src/data_agent_baseline/evaluation/baseline_adapter.py`)
- Converts baseline traces to canonical schema
- Enriches traces with task metadata
- Computes derivable metrics from steps
3. **Phase 1 Evaluator** (`src/data_agent_baseline/evaluation/phase1_evaluator.py`)
- Computes baseline-compatible metrics
- Scores predictions against gold answers
- Classifies failures and buckets
4. **Report Generator** (`src/data_agent_baseline/evaluation/report_generator.py`)
- Generates CSV, JSON, and Markdown reports
- Computes summary statistics
- Creates scientific evaluation reports
### Data Flow
```
Baseline Trace (trace.json)
↓
BaselineTraceAdapter.normalize()
↓
CanonicalTrace (normalized schema)
↓
Phase1Evaluator.evaluate_task()
↓
EvaluationResult (computed metrics)
↓
Phase1ReportGenerator.generate_all_reports()
↓
Output Files (CSV, JSON, MD)
```
## Metrics
### Phase 1 Metrics (Available)
✅ **Accuracy Metrics:**
- Overall accuracy
- Per-difficulty accuracy (Easy/Medium/Hard/Extreme)
- Answer precision, recall, F1
- Column precision, recall, F1
- Row precision, recall, F1
✅ **Efficiency Metrics:**
- Average steps per task
- Average tool calls per task
- Average runtime per task
- Tool diversity (unique tools / total calls)
- Tool efficiency (1 - failures / total)
✅ **Reliability Metrics:**
- Success rate
- Execution failure rate
- Timeout rate
- Tool error rate
✅ **Failure Classification:**
- Failure categories (timeout, planning, execution, wrong_answer)
- Failure stages (execution, answer_generation)
- Root causes (timeout, insufficient_steps, filter_logic, etc.)
- Recoverability assessment
✅ **Bucket Distribution:**
- perfect (score >= 0.999)
- wrong_row_count
- wrong_col_count
- partial_correct (score > 0.5)
- mostly_wrong (score > 0.0)
- completely_wrong
- no_gold (no gold answer available)
### Phase 1 Limitations (Not Available)
❌ **Token Metrics:**
- Total tokens
- Prompt tokens
- Completion tokens
- Estimated cost
❌ **Phase-Specific Metrics:**
- Explore phase timing
- Planner phase timing
- Execute phase timing
- Critic phase timing
❌ **Advanced Metrics:**
- Confidence scores
- Confidence calibration
- Replan counts
- Recovery attempts
- Self-correction loops
**Why?** Baseline traces don't include:
- Token usage tracking
- Phase labels on steps
- Confidence scores
- Recovery/replan signals
These will be available in future phases with enhanced agents.
## Output Format
### task_results.csv
Per-task metrics in CSV format:
```csv
run_id,task_id,agent_type,difficulty,execution_success,execution_time,final_score,
answer_f1,column_f1,row_f1,trajectory_length,tool_calls,tool_failures,
tool_efficiency,unique_tools_used,tool_diversity,total_tokens,llm_calls,
timeout_occurred,failure_category,failure_stage,root_cause,bucket,
pred_rows,pred_cols,gold_rows,gold_cols
```
### summary_metrics.json
Aggregated statistics:
```json
{
"overall": {
"total_tasks": 10,
"successful_tasks": 9,
"success_rate": 0.9,
"perfect_rate": 0.7,
"average_score": 0.85,
"average_trajectory_length": 8.5,
"average_tool_calls": 6.2,
"average_execution_time": 15.3,
"tool_error_rate": 0.05,
"timeout_rate": 0.0,
"execution_failure_rate": 0.1
},
"by_difficulty": {
"Easy": {...},
"Medium": {...},
"Hard": {...}
},
"failure_analysis": {
"failure_categories": {...},
"failure_stages": {...},
"root_causes": {...}
},
"bucket_distribution": {
"perfect": 7,
"wrong_row_count": 2,
"no_gold": 1
}
}
```
### evaluation_report.md
Scientific evaluation report with:
- Experimental setup
- Overall results table
- Performance by difficulty
- Reliability analysis
- Failure analysis (top categories and causes)
- Efficiency analysis
- Phase 1 limitations
- Recommendations for improvement
## Comparing Baseline vs Multi-Agent
The canonical schema enables direct comparison:
```python
from data_agent_baseline.evaluation.baseline_adapter import BaselineTraceAdapter
from data_agent_baseline.evaluation.phase1_evaluator import Phase1Evaluator
# Evaluate baseline run
baseline_adapter = BaselineTraceAdapter(task_root=task_root)
baseline_traces = baseline_adapter.normalize_run(baseline_run_path, run_id="baseline")
# Evaluate LangGraph run (future)
langgraph_adapter = LangGraphTraceAdapter(task_root=task_root)
langgraph_traces = langgraph_adapter.normalize_run(langgraph_run_path, run_id="langgraph")
# Compare using same evaluator
evaluator = Phase1Evaluator(gold_root=gold_root)
baseline_results = evaluator.evaluate_run(baseline_traces)
langgraph_results = evaluator.evaluate_run(langgraph_traces)
# Generate comparison report
compare_agents(baseline_results, langgraph_results)
```
## Extending to New Agent Types
To add a new agent type:
1. **Create an adapter** implementing:
```python
class NewAgentAdapter:
def normalize(self, trace_path: Path, run_id: str) -> CanonicalTrace:
# Convert agent-specific trace to canonical schema
pass
```
2. **Register agent type** in canonical schema:
```python
AgentType = Literal["baseline_react", "langgraph_agent", "new_agent"]
```
3. **Evaluate using existing pipeline**:
```python
adapter = NewAgentAdapter(task_root=task_root)
traces = adapter.normalize_run(run_path, run_id)
evaluator = Phase1Evaluator(gold_root=gold_root)
results = evaluator.evaluate_run(traces)
```
## Programmatic Usage
```python
from pathlib import Path
from data_agent_baseline.evaluation.baseline_adapter import BaselineTraceAdapter
from data_agent_baseline.evaluation.phase1_evaluator import Phase1Evaluator
from data_agent_baseline.evaluation.report_generator import Phase1ReportGenerator
# Setup paths
run_path = Path("/data3/dataFAIR/kdd-dev/public/artifacts/runs/20260613T114457Z")
task_root = Path("/data3/dataFAIR/kdd-dev/public/input_full")
gold_root = Path("/data3/dataFAIR/kdd-dev/public/output")
output_dir = run_path / "baseline_evaluation"
# Normalize traces
adapter = BaselineTraceAdapter(task_root=task_root)
canonical_traces = adapter.normalize_run(run_path, run_id="20260613T114457Z")
# Evaluate
evaluator = Phase1Evaluator(gold_root=gold_root)
results = evaluator.evaluate_run(canonical_traces)
# Generate reports
generator = Phase1ReportGenerator(output_dir=output_dir)
outputs = generator.generate_all_reports(results, run_id="20260613T114457Z")
print(f"Task results: {outputs['task_results']}")
print(f"Summary: {outputs['summary_metrics']}")
print(f"Report: {outputs['evaluation_report']}")
```
## Troubleshooting
### "Trace file not found"
Ensure the run directory contains task subdirectories with `trace.json` files:
```
<run_id>/
├── task_11/
│ └── trace.json
├── task_22/
│ └── trace.json
└── ...
```
### "No gold answer" / bucket="no_gold"
The gold answer file is missing. Ensure `<gold_root>/<task_id>/gold.csv` exists.
This is not an error - tasks without gold answers are still evaluated for execution metrics.
### "Error normalizing traces"
Check that trace.json is valid JSON with expected fields:
- task_id
- answer (optional)
- steps (array)
- succeeded
- e2e_elapsed_seconds
### Score is 0.0 but execution succeeded
This usually means:
1. No gold answer available (bucket="no_gold"), OR
2. Prediction doesn't match gold at all (bucket="completely_wrong")
Check the bucket classification in task_results.csv.
## Future Enhancements
### Phase 2: Multi-Agent Support
- Add LangGraph trace adapter
- Compare baseline vs multi-agent performance
- Measure planning efficiency
### Phase 3: Token Tracking
- Instrument baseline with token counting
- Compute cost metrics
- Optimize for cost/performance tradeoff
### Phase 4: Confidence Calibration
- Add confidence scores to baseline
- Measure calibration accuracy
- Implement uncertainty quantification
### Phase 5: Human-in-the-Loop
- Track human interventions
- Measure autonomy score
- Analyze when help is needed
## References
- **Baseline architecture**: `BASELINE_ARCHITECTURE.md`
- **Canonical schema**: `src/data_agent_baseline/evaluation/__init__.py`
- **Existing evaluation**: `src/data_agent_baseline/langgraph_agent/eval_v2.py`
- **Scoring function**: `src/data_agent_baseline/langgraph_agent/evaluator.py`
|