Convert a ToolEvent to a Span
(
self,
trace_id: Optional[str] = None,
parent_span_id: Optional[str] = None,
project_id: Optional[str] = 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, |
| 563 | service_name=DEFAULT_SERVICE_NAME, |
| 564 | scope_name=f"{DEFAULT_SCOPE_NAME}.tool", |
| 565 | scope_version=DEFAULT_VERSION, |
| 566 | resource_attributes={}, |
| 567 | span_attributes=span_attributes, |
| 568 | events=events, |
| 569 | ) |
| 570 | |
| 571 | |
| 572 | class ErrorEvent(BaseModel): |
no test coverage detected