Spaces:
Sleeping
Sleeping
import logging | |
from fastapi import APIRouter | |
from aworld.trace.server import get_trace_server | |
from aworld.trace.constants import RunType | |
from aworld.trace.server.util import build_trace_tree | |
logger = logging.getLogger(__name__) | |
router = APIRouter() | |
prefix = "/api/trace" | |
async def list_traces(): | |
storage = get_trace_server().get_storage() | |
trace_data = [] | |
for trace_id in storage.get_all_traces(): | |
spans = storage.get_all_spans(trace_id) | |
spans_sorted = sorted(spans, key=lambda x: x.start_time) | |
trace_tree = build_trace_tree(spans_sorted) | |
trace_data.append({ | |
'trace_id': trace_id, | |
'root_span': trace_tree, | |
}) | |
return { | |
"data": trace_data | |
} | |
async def get_agent_trace(trace_id: str): | |
storage = get_trace_server().get_storage() | |
spans = storage.get_all_spans(trace_id) | |
spans_dict = {span.span_id: span.dict() for span in spans} | |
filtered_spans = {} | |
for span_id, span in spans_dict.items(): | |
if span.get('is_event', False) and span.get('run_type') == RunType.AGNET.value: | |
span['show_name'] = _get_agent_show_name(span) | |
filtered_spans[span_id] = span | |
for span in list(filtered_spans.values()): | |
parent_id = span['parent_id'] if span['parent_id'] else None | |
while parent_id and parent_id not in filtered_spans: | |
parent_span = spans_dict.get(parent_id) | |
parent_id = parent_span['parent_id'] if parent_span and parent_span['parent_id'] else None | |
if parent_id: | |
parent_span = filtered_spans.get(parent_id) | |
if not parent_span: | |
continue | |
if 'children' not in parent_span: | |
parent_span['children'] = [] | |
parent_span['children'].append(span) | |
root_spans = [span for span in filtered_spans.values() | |
if span['parent_id'] is None or span['parent_id'] not in filtered_spans] | |
return { | |
"data": root_spans | |
} | |
def _get_agent_show_name(span: dict): | |
agent_name_prefix = "agent_event_" | |
name = span.get("name") | |
if name and name.startswith(agent_name_prefix): | |
name = name[len(agent_name_prefix):] | |
return name | |