Action becomes a (child) Span
| 290 | |
| 291 | |
| 292 | class ActionEvent(BaseModel): |
| 293 | """ |
| 294 | Action becomes a (child) Span |
| 295 | """ |
| 296 | |
| 297 | id: UUID |
| 298 | session_id: Optional[UUID] = None |
| 299 | agent_id: Optional[UUID] = None |
| 300 | action_type: Optional[str] = None |
| 301 | logs: Optional[str] = None |
| 302 | screenshot: Optional[str] = None |
| 303 | params: Optional[str] = None |
| 304 | returns: Optional[str] = None |
| 305 | init_timestamp: Optional[datetime] = None |
| 306 | end_timestamp: Optional[datetime] = None |
| 307 | |
| 308 | async def to_span( |
| 309 | self, |
| 310 | trace_id: Optional[str] = None, |
| 311 | parent_span_id: Optional[str] = None, |
| 312 | project_id: Optional[str] = None, |
| 313 | ) -> Span: |
| 314 | """Convert an ActionEvent to a Span""" |
| 315 | span_attributes = { |
| 316 | "action.id": str(self.id), |
| 317 | "action.type": self.action_type or "", |
| 318 | "session.id": str(self.session_id), |
| 319 | "agent.id": str(self.agent_id), |
| 320 | } |
| 321 | |
| 322 | if self.params: |
| 323 | if isinstance(self.params, dict): |
| 324 | span_attributes["action.params"] = json.dumps(self.params) |
| 325 | else: |
| 326 | span_attributes["action.params"] = str(self.params) |
| 327 | |
| 328 | if self.returns: |
| 329 | if isinstance(self.returns, dict): |
| 330 | span_attributes["action.returns"] = json.dumps(self.returns) |
| 331 | else: |
| 332 | span_attributes["action.returns"] = str(self.returns) |
| 333 | |
| 334 | if self.screenshot: |
| 335 | span_attributes["action.screenshot"] = self.screenshot |
| 336 | |
| 337 | init_timestamp_ns = datetime_to_ns(self.init_timestamp) |
| 338 | events = [] |
| 339 | if self.logs: |
| 340 | events.append( |
| 341 | {"timestamp": init_timestamp_ns, "name": "logs", "attributes": {"log.message": self.logs}} |
| 342 | ) |
| 343 | |
| 344 | return Span( |
| 345 | name=f"action:{self.action_type or 'unknown'}", |
| 346 | trace_id=trace_id, |
| 347 | span_id=str(self.id), |
| 348 | parent_span_id=parent_span_id, |
| 349 | kind=SpanKind.INTERNAL, |
no outgoing calls
no test coverage detected
searching dependent graphs…