Files
comet-ml--opik/sdks/python/examples/trajectory_accuracy_evaluation.py
wehub-resource-sync 5a558eb09e
Backend Tests / discover-tests (push) Waiting to run
Backend Tests / ${{ matrix.name }} (push) Blocked by required conditions
Build and Publish SDK / build-and-publish (push) Waiting to run
Build Opik Docker Images / set-version (push) Waiting to run
Build Opik Docker Images / build-backend (push) Blocked by required conditions
Build Opik Docker Images / build-sandbox-executor-python (push) Blocked by required conditions
Build Opik Docker Images / build-python-backend (push) Blocked by required conditions
Build Opik Docker Images / build-frontend (push) Blocked by required conditions
Build Opik Docker Images / create-git-tag (push) Blocked by required conditions
ClickHouse Migration Cluster Check / validate-clickhouse-migrations (push) Waiting to run
Docs - Publish / run (push) Waiting to run
E2E Tests - Post Merge (v2) / 🧪 E2E v2 Tests (${{ github.event.inputs.tier || 't1' }}) (push) Waiting to run
E2E Tests - Post Merge (v2) / 📢 Slack Notification (push) Blocked by required conditions
Frontend Unit Tests / Test on Node 20 (push) Waiting to run
Guardrails E2E Tests / Select Python version matrix (push) Waiting to run
Guardrails E2E Tests / Guardrails E2E Tests ${{matrix.python_version}} (push) Blocked by required conditions
Guardrails E2E Tests / 📢 Slack Notification (push) Blocked by required conditions
Guardrails Backend Unit Tests / Guardrails Backend Unit Tests (push) Waiting to run
Guardrails Backend Unit Tests / 📢 Slack Notification (push) Blocked by required conditions
Lint Opik Helm Chart / lint-helm-chart (Helm v3.21.0) (push) Waiting to run
Lint Opik Helm Chart / lint-helm-chart (Helm v4.2.0) (push) Waiting to run
Lint Opik Helm Chart / unittest-helm-chart (push) Waiting to run
Lint Opik Helm Chart / render-equality (push) Waiting to run
Opik Optimizer - Unit Tests / Opik Optimizer Unit Tests Python ${{matrix.python_version}} (push) Waiting to run
Python BE E2E Tests / Python BE E2E (push) Waiting to run
Python Backend Tests / run-python-backend-tests (push) Waiting to run
Python SDK Unit Tests / Python SDK Unit Tests ${{matrix.python_version}} (push) Waiting to run
Release Drafter / update_release_draft (push) Waiting to run
SDK E2E Libraries Integration Tests / Check Secrets (push) Waiting to run
SDK E2E Libraries Integration Tests / Missed OpenAI API Key Warning (push) Blocked by required conditions
SDK E2E Libraries Integration Tests / build-opik (push) Blocked by required conditions
SDK E2E Libraries Integration Tests / E2E Lib Integration Python ${{matrix.python_version}} (push) Blocked by required conditions
TypeScript SDK Integration Build & Publish / build-and-publish (opik-gemini) (push) Waiting to run
TypeScript SDK Integration Build & Publish / build-and-publish (opik-langchain) (push) Waiting to run
TypeScript SDK Integration Build & Publish / build-and-publish (opik-openai) (push) Waiting to run
TypeScript SDK Integration Build & Publish / build-and-publish (opik-otel) (push) Waiting to run
TypeScript SDK Integration Build & Publish / build-and-publish (opik-vercel) (push) Waiting to run
TypeScript SDK Build & Publish / build-and-publish (push) Waiting to run
TypeScript SDK Unit Tests / Test on Node ${{ matrix.node-version }} (push) Waiting to run
TypeScript SDK Compatibility V1.x E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / TypeScript SDK Compatibility V1.x E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
TypeScript SDK E2E Tests / TypeScript SDK E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
Python SDK E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK E2E Tests / Python SDK E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK E2E Tests / build-opik (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Python SDK Compatibility V1.x E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK E2E Tests / build-opik (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer E2E Tests Python ${{matrix.python_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer Integration Smoke Tests (push) Has been cancelled
🐙 Code Quality / detect (push) Has been cancelled
🐙 Code Quality / lint (${{ matrix.leg.name }}) (push) Has been cancelled
🐙 Code Quality / summary (push) Has been cancelled
TypeScript SDK Library Integration Tests / Check Secrets (push) Has been cancelled
TypeScript SDK Library Integration Tests / opik-vercel (Vercel AI SDK / eve) (push) Has been cancelled
SDK Library Integration Tests Runner / Check Secrets (push) Has been cancelled
SDK Library Integration Tests Runner / Missed OpenAI API Key Warning (push) Has been cancelled
SDK Library Integration Tests Runner / Build (push) Has been cancelled
SDK Library Integration Tests Runner / openai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_legacy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / llama_index_tests (push) Has been cancelled
SDK Library Integration Tests Runner / anthropic_tests (push) Has been cancelled
SDK Library Integration Tests Runner / mistral_tests (push) Has been cancelled
SDK Library Integration Tests Runner / groq_tests (push) Has been cancelled
SDK Library Integration Tests Runner / aisuite_tests (push) Has been cancelled
SDK Library Integration Tests Runner / haystack_tests (push) Has been cancelled
SDK Library Integration Tests Runner / dspy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v1_tests (push) Has been cancelled
SDK Library Integration Tests Runner / genai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_legacy_1_3_0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / evaluation_metrics_tests (push) Has been cancelled
SDK Library Integration Tests Runner / bedrock_tests (push) Has been cancelled
SDK Library Integration Tests Runner / litellm_tests (push) Has been cancelled
SDK Library Integration Tests Runner / harbor_tests (push) Has been cancelled
SDK Library Integration Tests Runner / Slack Notification (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:25:44 +08:00

189 lines
6.9 KiB
Python

#!/usr/bin/env python3
"""
Trajectory Accuracy Evaluation Example
This example demonstrates how to use Opik's TrajectoryAccuracy metric
to evaluate ReAct-style agent trajectories within the evaluation framework.
"""
from typing import Dict, Any
from opik.evaluation.metrics import TrajectoryAccuracy
from opik.evaluation import evaluate
from opik import Opik, track
import json
def create_trajectory_dataset():
"""Create a dataset with ReAct-style trajectories for evaluation."""
client = Opik()
dataset = client.get_or_create_dataset(
name="trajectory_evaluation_dataset",
description="Dataset for evaluating ReAct-style agent trajectories",
)
# Sample trajectory data
trajectory_data = [
{
"trajectory_input": {
"goal": "Find the weather in Paris",
"trajectory": [
{
"thought": "I need to search for weather information in Paris",
"action": "search_weather(location='Paris')",
"observation": "Found weather data for Paris: 22°C, sunny",
},
{
"thought": "I have the weather data, now I should summarize it",
"action": "summarize_result()",
"observation": "Summary created: The weather in Paris is 22°C and sunny",
},
],
"final_result": "The weather in Paris is 22°C and sunny",
}
},
{
"trajectory_input": {
"goal": "Calculate the sum of 15 and 27",
"trajectory": [
{
"thought": "I need to add 15 and 27 together",
"action": "calculate(15 + 27)",
"observation": "Result: 42",
}
],
"final_result": "The sum of 15 and 27 is 42",
}
},
{
"trajectory_input": {
"goal": "Find the capital of France",
"trajectory": [
{
"thought": "I need to find France's capital",
"action": "search('weather in France')", # Poor action choice
"observation": "Found weather information for various French cities",
},
{
"thought": "This doesn't help, let me try something else",
"action": "search('French cuisine')", # Still poor choice
"observation": "Found information about French food",
},
],
"final_result": "Paris is the capital of France", # Result doesn't match trajectory
}
},
{
"trajectory_input": {
"goal": "Research the population of Tokyo",
"trajectory": [
{
"thought": "I need to search for Tokyo population data",
"action": "search('Tokyo population 2024')",
"observation": "Tokyo has approximately 14 million people in the city, 37 million in metro area",
},
{
"thought": "I found the data, let me verify with another source",
"action": "search('Tokyo metropolitan area population')",
"observation": "Confirmed: Tokyo metro area has about 37-38 million residents",
},
{
"thought": "Now I should summarize this information clearly",
"action": "summarize_findings()",
"observation": "Summary prepared with population figures",
},
],
"final_result": "Tokyo city has about 14 million people, while the greater Tokyo metropolitan area has approximately 37-38 million residents, making it the world's largest urban agglomeration.",
}
},
]
# Insert data into dataset
dataset.insert_from_json(
json_array=json.dumps(trajectory_data),
keys_mapping={"trajectory_input": "input"},
)
return dataset
@track()
def trajectory_evaluation_task(item: Dict[str, Any]) -> Dict[str, Any]:
"""
Task that simulates evaluating an agent trajectory.
In practice, this would be where your agent generates the trajectory.
"""
# Extract the trajectory components
trajectory_data = item["input"]
# For this example, we're just passing through the pre-made trajectory
# In a real scenario, this is where your agent would generate the trajectory
return {
"goal": trajectory_data["goal"],
"trajectory": trajectory_data["trajectory"],
"final_result": trajectory_data["final_result"],
"metadata": {
"trajectory_steps": len(trajectory_data["trajectory"]),
"evaluation_type": "react_agent_trajectory",
},
}
def main():
"""Run the trajectory accuracy evaluation example."""
print("🚀 Starting Trajectory Accuracy Evaluation with Opik")
print("=" * 60)
# Create dataset
print("📊 Creating trajectory dataset...")
dataset = create_trajectory_dataset()
print(f"✅ Dataset '{dataset.name}' created with trajectory examples")
# Create trajectory accuracy metric
trajectory_metric = TrajectoryAccuracy(
name="trajectory_accuracy_evaluation", track=True
)
print("\n🎯 Running evaluation...")
# Run evaluation
evaluation_result = evaluate(
experiment_name="trajectory_accuracy_experiment",
dataset=dataset,
task=trajectory_evaluation_task,
scoring_metrics=[trajectory_metric],
experiment_config={
"model": "gpt-4o-mini", # Following user rules
"evaluation_type": "react_agent_trajectory",
"metric": "trajectory_accuracy",
},
)
print("\n✅ Evaluation completed!")
print(f"📊 Experiment: {evaluation_result.experiment_name}")
print("📈 Results available in Opik dashboard")
# Display summary
print("\n📋 Summary:")
print(f" Total test cases: {len(evaluation_result.test_results)}")
print(" Metric used: TrajectoryAccuracy")
print(
" Evaluation assesses: reasoning quality, action appropriateness, goal achievement"
)
return evaluation_result
if __name__ == "__main__":
try:
result = main()
print("\n🎉 Trajectory Accuracy evaluation completed successfully!")
print("📊 View detailed results in your Opik dashboard")
except Exception as e:
print(f"\n❌ Evaluation failed: {e}")
print("💡 Make sure you have:")
print(" - OPENAI_API_KEY set in environment")
print(" - Opik properly configured")
print(" - Network connectivity for LLM calls")