-
Notifications
You must be signed in to change notification settings - Fork 429
Expand file tree
/
Copy pathtrace.py
More file actions
81 lines (55 loc) · 1.98 KB
/
trace.py
File metadata and controls
81 lines (55 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from __future__ import annotations
from datetime import datetime
from enum import Enum
from typing import Any
from a2a._base import A2ABaseModel
from a2a.extensions.base import Extension
class CallTypeEnum(str, Enum):
"""The type of the operation a step represents."""
AGENT = 'AGENT'
TOOL = 'TOOL'
class ToolInvocation(A2ABaseModel):
"""A tool invocation."""
tool_name: str
parameters: dict[str, Any]
class AgentInvocation(A2ABaseModel):
"""An agent invocation."""
agent_url: str
agent_name: str
requests: dict[str, Any]
response_trace: ResponseTrace | None = None
class StepAction(A2ABaseModel):
"""The action of a step."""
tool_invocation: ToolInvocation | None = None
agent_invocation: AgentInvocation | None = None
class Step(A2ABaseModel):
"""A single operation within a trace."""
step_id: str
trace_id: str
parent_step_id: str | None = None
call_type: CallTypeEnum
step_action: StepAction
cost: int | None = None
total_tokens: int | None = None
additional_attributes: dict[str, str] | None = None
latency: int | None = None
start_time: datetime
end_time: datetime
class ResponseTrace(A2ABaseModel):
"""A trace message that contains a collection of spans."""
trace_id: str
steps: list[Step]
class TraceExtension(Extension):
"""An extension for traceability."""
def on_client_message(self, message: Any) -> None:
"""Appends trace information to the message."""
# This is a placeholder implementation.
if message.metadata is None:
message.metadata = {}
message.metadata['trace'] = 'client-trace'
def on_server_message(self, message: Any) -> None:
"""Processes trace information from the message."""
# This is a placeholder implementation.
if hasattr(message, 'metadata') and 'trace' in message.metadata:
print(f"Received trace: {message.metadata['trace']}")
AgentInvocation.model_rebuild()