Skip to content

Commit 1d03799

Browse files
.
1 parent 739cc2b commit 1d03799

3 files changed

Lines changed: 68 additions & 18 deletions

File tree

deepeval/openai_agents/callback_handler.py

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
from deepeval.tracing.tracing import (
22
Observer,
33
current_span_context,
4+
trace_manager,
45
)
56
from deepeval.openai_agents.extractors import *
67
from deepeval.tracing.context import current_trace_context
8+
from deepeval.tracing.utils import make_json_serializable
9+
from time import perf_counter
10+
from deepeval.tracing.types import TraceSpanStatus
711

812
try:
913
from agents.tracing import Span, Trace, TracingProcessor
@@ -33,14 +37,44 @@ def _check_openai_agents_available():
3337
class DeepEvalTracingProcessor(TracingProcessor):
3438
def __init__(self) -> None:
3539
_check_openai_agents_available()
36-
self.root_span_observers: dict[str, Observer] = {}
3740
self.span_observers: dict[str, Observer] = {}
3841

3942
def on_trace_start(self, trace: "Trace") -> None:
40-
pass
43+
trace_dict = trace.export()
44+
_trace_uuid = trace_dict.get("id")
45+
_thread_id = trace_dict.get("group_id")
46+
_trace_name = trace_dict.get("workflow_name")
47+
_trace_metadata = trace_dict.get("metadata")
48+
49+
if _thread_id or _trace_metadata:
50+
_trace = trace_manager.start_new_trace(trace_uuid=_trace_uuid)
51+
_trace.thread_id = str(_thread_id)
52+
_trace.name = str(_trace_name)
53+
_trace.metadata = make_json_serializable(_trace_metadata)
54+
current_trace_context.set(_trace)
55+
56+
trace_manager.add_span( # adds a dummy root span
57+
BaseSpan(
58+
uuid=_trace_uuid,
59+
trace_uuid=_trace_uuid,
60+
parent_uuid=None,
61+
start_time=perf_counter(),
62+
name=_trace_name,
63+
status=TraceSpanStatus.IN_PROGRESS,
64+
children=[],
65+
)
66+
)
4167

4268
def on_trace_end(self, trace: "Trace") -> None:
43-
pass
69+
trace_dict = trace.export()
70+
_trace_uuid = trace_dict.get("id")
71+
_thread_id = trace_dict.get("group_id")
72+
_trace_name = trace_dict.get("workflow_name")
73+
_trace_metadata = trace_dict.get("metadata")
74+
75+
if _thread_id or _trace_metadata:
76+
trace_manager.remove_span(_trace_uuid) # removing the dummy root span
77+
trace_manager.end_trace(_trace_uuid)
4478

4579
def on_span_start(self, span: "Span") -> None:
4680
if not span.started_at:

tests/test_integrations/test_openai_agents/agents_app.py

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,24 +98,40 @@ async def run_weather_agent(user_input: str):
9898
weather_agent,
9999
user_input,
100100
metric_collection="test_collection_1",
101-
name="test_name_1",
102-
user_id="test_user_id_1",
103-
thread_id="test_thread_id_1",
104-
tags=["test_tag_1"],
105-
metadata={"test_metadata_1": "test_metadata_1"},
101+
# name="test_name_1",
102+
# user_id="test_user_id_1",
103+
# thread_id="test_thread_id_1",
104+
# tags=["test_tag_1"],
105+
# metadata={"test_metadata_1": "test_metadata_1"},
106106
)
107107
return result.final_output
108108

109-
110-
# Usage example
111-
async def main():
109+
from agents import trace
110+
from multi_agents import triage_agent
111+
# with trace (group_id and metadata)
112+
async def main1():
113+
with trace(workflow_name="test_workflow_1", group_id="test_group_id_1", metadata={"test_metadata_1": "test_metadata_1"}):
114+
user_query = "What's the weather like in London today?"
115+
response_2 = await Runner.run(weather_agent, user_query, metric_collection="test_collection_1")
116+
response_1 = await Runner.run(triage_agent, "Hola, ¿cómo estás?", metric_collection="test_collection_1", thread_id="test")
117+
118+
# without trace (group_id and metadata not present)
119+
async def main2():
112120
user_query = "What's the weather like in London today?"
113-
response = await run_weather_agent(user_query)
114-
print(f"Agent Response: {response}")
121+
response_2 = await Runner.run(weather_agent, user_query, metric_collection="test_collection_1")
122+
response_1 = await Runner.run(triage_agent, "Hola, ¿cómo estás?", metric_collection="test_collection_1", thread_id="test")
115123

124+
async def main3():
125+
user_query = "What's the weather like in London today?"
126+
with trace(workflow_name="test_workflow_1", group_id="test_group_id_1", metadata={"test_metadata_1": "test_metadata_1"}):
127+
response_2 = await Runner.run(weather_agent, user_query, metric_collection="test_collection_1")
128+
with trace(workflow_name="test_workflow_2", group_id="test_group_id_2", metadata={"test_metadata_2": "test_metadata_2"}):
129+
response_1 = await Runner.run(triage_agent, "Hola, ¿cómo estás?", metric_collection="test_collection_1", thread_id="test")
116130

117131
def execute_agent():
118-
return asyncio.run(main())
132+
asyncio.run(main1())
133+
asyncio.run(main2())
134+
asyncio.run(main3())
119135

120136

121-
execute_agent()
137+
# execute_agent()

tests/test_integrations/test_openai_agents/multi_agents.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import asyncio
22
from deepeval.openai_agents import Agent, Runner
33
from deepeval.prompt import Prompt
4-
from deepeval.openai_agents import DeepEvalTracingProcessor
4+
# from deepeval.openai_agents import DeepEvalTracingProcessor
55

6-
from agents import add_trace_processor
6+
# from agents import add_trace_processor
77

8-
add_trace_processor(DeepEvalTracingProcessor())
8+
# add_trace_processor(DeepEvalTracingProcessor())
99

1010
prompt = Prompt(alias="asd")
1111
prompt.pull(version="00.00.01")

0 commit comments

Comments
 (0)