FlyingNunchucks commited on
Commit
c647f51
·
verified ·
1 Parent(s): ae7e98a

Sync from GitHub via hub-sync

Browse files
Files changed (1) hide show
  1. src/schemas.py +36 -5
src/schemas.py CHANGED
@@ -6,19 +6,28 @@ from pydantic import BaseModel, Field
6
 
7
 
8
  class ToolCall(BaseModel):
9
- """A validated request to execute one approved tool."""
10
 
11
  call_id: str = Field(default_factory=lambda: str(uuid4()))
12
  tool_name: str
13
  arguments: Dict[str, Any] = Field(default_factory=dict)
14
 
15
 
 
 
 
 
 
 
 
 
 
16
  class ToolResult(BaseModel):
17
- """Normalized result returned by every tool."""
18
 
19
  call_id: str
20
  tool_name: str
21
- status: Literal["success", "error"]
22
  output: Optional[Any] = None
23
  error: Optional[str] = None
24
  started_at: datetime
@@ -27,7 +36,7 @@ class ToolResult(BaseModel):
27
 
28
 
29
  class AuditRecord(BaseModel):
30
- """Persistent record of one tool execution."""
31
 
32
  timestamp: datetime = Field(
33
  default_factory=lambda: datetime.now(timezone.utc)
@@ -42,4 +51,26 @@ class AgentRunResult(BaseModel):
42
  user_request: str
43
  final_answer: str
44
  tool_calls: List[ToolCall] = Field(default_factory=list)
45
- tool_results: List[ToolResult] = Field(default_factory=list)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
 
8
  class ToolCall(BaseModel):
9
+ """A structured request from the model to use one tool."""
10
 
11
  call_id: str = Field(default_factory=lambda: str(uuid4()))
12
  tool_name: str
13
  arguments: Dict[str, Any] = Field(default_factory=dict)
14
 
15
 
16
+ class ToolAuthorization(BaseModel):
17
+ """Application-owned decision about whether a tool call may execute."""
18
+
19
+ call_id: str
20
+ tool_name: str
21
+ status: Literal["approved", "blocked"]
22
+ reason: str
23
+
24
+
25
  class ToolResult(BaseModel):
26
+ """Normalized result returned by the controlled execution layer."""
27
 
28
  call_id: str
29
  tool_name: str
30
+ status: Literal["success", "blocked", "error"]
31
  output: Optional[Any] = None
32
  error: Optional[str] = None
33
  started_at: datetime
 
36
 
37
 
38
  class AuditRecord(BaseModel):
39
+ """Persistent record of one requested tool execution."""
40
 
41
  timestamp: datetime = Field(
42
  default_factory=lambda: datetime.now(timezone.utc)
 
51
  user_request: str
52
  final_answer: str
53
  tool_calls: List[ToolCall] = Field(default_factory=list)
54
+ tool_results: List[ToolResult] = Field(default_factory=list)
55
+
56
+
57
+ class AgentRunEvent(BaseModel):
58
+ """Observable event emitted while a tool-using agent request is running."""
59
+
60
+ event: Literal[
61
+ "run_started",
62
+ "model_thinking",
63
+ "tool_requested",
64
+ "tool_approved",
65
+ "tool_blocked",
66
+ "tool_succeeded",
67
+ "tool_failed",
68
+ "final_answer",
69
+ "max_rounds_reached",
70
+ ]
71
+ round_index: Optional[int] = None
72
+ message: str
73
+ call: Optional[ToolCall] = None
74
+ authorization: Optional[ToolAuthorization] = None
75
+ result: Optional[ToolResult] = None
76
+ final_result: Optional[AgentRunResult] = None