MCPcopy Create free account
hub / github.com/AgentOps-AI/agentops / ToolEvent

Class ToolEvent

app/api/agentops/exporter/models.py:505–569  ·  view source on GitHub ↗

ToolEvent becomes a (child) Span

Source from the content-addressed store, hash-verified

503
504
505class ToolEvent(BaseModel):
506 """
507 ToolEvent becomes a (child) Span
508 """
509
510 id: UUID
511 session_id: Optional[UUID] = None
512 agent_id: Optional[UUID] = None
513 name: Optional[str] = None
514 logs: Optional[str] = None
515 params: Optional[Union[str, dict]] = None
516 returns: Optional[Union[dict, str]] = None
517 init_timestamp: Optional[datetime] = None
518 end_timestamp: Optional[datetime] = None
519
520 async def to_span(
521 self,
522 trace_id: Optional[str] = None,
523 parent_span_id: Optional[str] = None,
524 project_id: Optional[str] = None,
525 ) -> Span:
526 """Convert a ToolEvent to a Span"""
527 span_attributes = {
528 "tool.id": str(self.id),
529 "tool.name": self.name,
530 "session.id": str(self.session_id),
531 "agent.id": str(self.agent_id),
532 "gen_ai.tool.name": self.name,
533 }
534
535 if self.params:
536 if isinstance(self.params, dict):
537 span_attributes["tool.params"] = json.dumps(self.params)
538 else:
539 span_attributes["tool.params"] = str(self.params)
540
541 if self.returns:
542 if isinstance(self.returns, dict):
543 span_attributes["tool.returns"] = json.dumps(self.returns)
544 else:
545 span_attributes["tool.returns"] = str(self.returns)
546
547 init_timestamp_ns = datetime_to_ns(self.init_timestamp)
548 events = []
549 if self.logs:
550 events.append(
551 {"timestamp": init_timestamp_ns, "name": "logs", "attributes": {"log.message": self.logs}}
552 )
553
554 return Span(
555 name=f"tool:{self.name}",
556 trace_id=trace_id,
557 span_id=str(self.id),
558 parent_span_id=parent_span_id,
559 kind=SpanKind.INTERNAL,
560 start_time=init_timestamp_ns,
561 end_time=datetime_to_ns(self.end_timestamp),
562 project_id=project_id,

Callers 2

create_tool_eventFunction · 0.70
update_tool_eventFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…