5a558eb09e
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
Lint Opik Helm Chart / render-equality (push) Has been cancelled
Opik Optimizer - Unit Tests / Opik Optimizer Unit Tests Python ${{matrix.python_version}} (push) Has been cancelled
Python BE E2E Tests / Python BE E2E (push) Has been cancelled
Python Backend Tests / run-python-backend-tests (push) Has been cancelled
Python SDK Unit Tests / Python SDK Unit Tests ${{matrix.python_version}} (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
SDK E2E Libraries Integration Tests / Check Secrets (push) Has been cancelled
SDK E2E Libraries Integration Tests / Missed OpenAI API Key Warning (push) Has been cancelled
SDK E2E Libraries Integration Tests / build-opik (push) Has been cancelled
SDK E2E Libraries Integration Tests / E2E Lib Integration Python ${{matrix.python_version}} (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-gemini) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-langchain) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-openai) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-otel) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-vercel) (push) Has been cancelled
TypeScript SDK Build & Publish / build-and-publish (push) Has been cancelled
TypeScript SDK Unit Tests / Test on Node ${{ matrix.node-version }} (push) Has been cancelled
Backend Tests / discover-tests (push) Has been cancelled
Backend Tests / ${{ matrix.name }} (push) Has been cancelled
Build and Publish SDK / build-and-publish (push) Has been cancelled
Build Opik Docker Images / set-version (push) Has been cancelled
Build Opik Docker Images / build-backend (push) Has been cancelled
Build Opik Docker Images / build-sandbox-executor-python (push) Has been cancelled
Build Opik Docker Images / build-python-backend (push) Has been cancelled
Build Opik Docker Images / build-frontend (push) Has been cancelled
Build Opik Docker Images / create-git-tag (push) Has been cancelled
ClickHouse Migration Cluster Check / validate-clickhouse-migrations (push) Has been cancelled
Docs - Publish / run (push) Has been cancelled
E2E Tests - Post Merge (v2) / 🧪 E2E v2 Tests (${{ github.event.inputs.tier || 't1' }}) (push) Has been cancelled
E2E Tests - Post Merge (v2) / 📢 Slack Notification (push) Has been cancelled
Frontend Unit Tests / Test on Node 20 (push) Has been cancelled
Guardrails E2E Tests / Select Python version matrix (push) Has been cancelled
Guardrails E2E Tests / Guardrails E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Guardrails E2E Tests / 📢 Slack Notification (push) Has been cancelled
Guardrails Backend Unit Tests / Guardrails Backend Unit Tests (push) Has been cancelled
Guardrails Backend Unit Tests / 📢 Slack Notification (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v3.21.0) (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v4.2.0) (push) Has been cancelled
Lint Opik Helm Chart / unittest-helm-chart (push) Has been cancelled
189 lines
6.9 KiB
Python
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")
|