ToolEvent becomes a (child) Span
| 503 | |
| 504 | |
| 505 | class 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, |
no outgoing calls
no test coverage detected
searching dependent graphs…