trace-agent-server 0.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,549 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import datetime
4
+ from typing import Any, Literal
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+
8
+
9
+ class ToolDefinition(BaseModel):
10
+ name: str
11
+ description: str
12
+ input_schema: dict[str, Any] = Field(default_factory=dict)
13
+ redact_fields: list[str] = Field(default_factory=list)
14
+
15
+
16
+ class ArtifactInput(BaseModel):
17
+ kind: str
18
+ label: str
19
+ summary: str
20
+ metadata: dict[str, Any] = Field(default_factory=dict)
21
+
22
+
23
+ class RunCreateRequest(BaseModel):
24
+ agent_name: str
25
+ goal: str
26
+ metadata: dict[str, Any] = Field(default_factory=dict)
27
+
28
+
29
+ class RunCreateResponse(BaseModel):
30
+ run_id: str
31
+ status: str
32
+
33
+
34
+ class TurnCreateRequest(BaseModel):
35
+ provider: str = "openai"
36
+ model: str
37
+ messages: list[dict[str, Any]]
38
+ tools: list[ToolDefinition] = Field(default_factory=list)
39
+ tool_choice: str | dict[str, Any] = "auto"
40
+
41
+
42
+ class ToolCall(BaseModel):
43
+ id: str
44
+ name: str
45
+ arguments: dict[str, Any] = Field(default_factory=dict)
46
+ step_id: str
47
+ parent_step_id: str | None = None
48
+
49
+
50
+ class TurnCreateResponse(BaseModel):
51
+ status: Literal["message", "requires_action"]
52
+ assistant_message: dict[str, Any] | None = None
53
+ tool_calls: list[ToolCall] = Field(default_factory=list)
54
+
55
+
56
+ class ToolResultInput(BaseModel):
57
+ call_id: str
58
+ name: str
59
+ step_id: str
60
+ status: Literal["succeeded", "failed"]
61
+ args: dict[str, Any] = Field(default_factory=dict)
62
+ output_summary: str | None = None
63
+ output_hash: str | None = None
64
+ error_code: str | None = None
65
+ error_summary: str | None = None
66
+ duration_ms: int | None = None
67
+ artifacts: list[ArtifactInput] = Field(default_factory=list)
68
+
69
+
70
+ class ToolResultsRequest(BaseModel):
71
+ results: list[ToolResultInput]
72
+
73
+
74
+ class ObservationInput(BaseModel):
75
+ kind: Literal[
76
+ "command",
77
+ "file_read",
78
+ "file_write",
79
+ "patch",
80
+ "artifact",
81
+ "chain_step",
82
+ "llm_call",
83
+ "tool_call",
84
+ "retriever_query",
85
+ "agent_action",
86
+ ]
87
+ step_id: str | None = None
88
+ parent_step_id: str | None = None
89
+ status: Literal["running", "succeeded", "failed"] | None = None
90
+ duration_ms: int | None = None
91
+ error_code: str | None = None
92
+ error_summary: str | None = None
93
+ command_id: str | None = None
94
+ command: str | None = None
95
+ cwd: str | None = None
96
+ exit_code: int | None = None
97
+ output_summary: str | None = None
98
+ stdout_summary: str | None = None
99
+ stderr_summary: str | None = None
100
+ path: str | None = None
101
+ change_type: Literal["create", "update", "delete"] | None = None
102
+ before_hash: str | None = None
103
+ after_hash: str | None = None
104
+ content_hash: str | None = None
105
+ diff_summary: str | None = None
106
+ line_additions: int | None = None
107
+ line_deletions: int | None = None
108
+ extension: str | None = None
109
+ size_bytes: int | None = None
110
+ tool_name: str | None = None
111
+ model: str | None = None
112
+ provider: str | None = None
113
+ input_summary: str | None = None
114
+ artifact: ArtifactInput | None = None
115
+ metadata: dict[str, Any] = Field(default_factory=dict)
116
+
117
+
118
+ class ObservationsRequest(BaseModel):
119
+ observations: list[ObservationInput]
120
+
121
+
122
+ class FinishRunRequest(BaseModel):
123
+ final_output: Any | None = None
124
+ artifacts: list[ArtifactInput] = Field(default_factory=list)
125
+
126
+
127
+ class FailRunRequest(BaseModel):
128
+ error_code: str
129
+ error_summary: str
130
+
131
+
132
+ class EventOut(BaseModel):
133
+ id: int
134
+ seq: int
135
+ timestamp: datetime
136
+ turn_id: str | None = None
137
+ step_id: str | None
138
+ parent_step_id: str | None
139
+ actor: str
140
+ type: str
141
+ summary: str
142
+ status: str | None
143
+ duration_ms: int | None
144
+ provider: str | None
145
+ model: str | None
146
+ tool_name: str | None
147
+ artifact_refs: list[Any]
148
+ error_code: str | None
149
+ payload_hash: str | None
150
+ payload_full: dict[str, Any] | None
151
+ metadata: dict[str, Any]
152
+
153
+ model_config = ConfigDict(from_attributes=True)
154
+
155
+
156
+ class DecisionOut(BaseModel):
157
+ id: str
158
+ seq: int
159
+ kind: str
160
+ label: str
161
+ chosen_action: str
162
+ rationale_summary: str
163
+ trigger_event_ids: list[int]
164
+ evidence_event_ids: list[int]
165
+ alternatives: list[Any]
166
+ outcome: str | None
167
+ metadata: dict[str, Any]
168
+
169
+ model_config = ConfigDict(from_attributes=True)
170
+
171
+
172
+ class ArtifactOut(BaseModel):
173
+ id: str
174
+ kind: str
175
+ label: str
176
+ summary: str
177
+ metadata: dict[str, Any]
178
+ source_event_id: int | None
179
+ created_at: datetime
180
+
181
+ model_config = ConfigDict(from_attributes=True)
182
+
183
+
184
+ class NarrativeItem(BaseModel):
185
+ text: str
186
+ evidence_event_ids: list[int] = Field(default_factory=list)
187
+
188
+
189
+ class TurnOut(BaseModel):
190
+ id: str
191
+ run_id: str
192
+ seq: int
193
+ provider: str | None
194
+ model: str | None
195
+ messages: list[dict[str, Any]]
196
+ assistant_message: dict[str, Any] | None
197
+ tool_calls: list[dict[str, Any]]
198
+ prompt_tokens: int | None
199
+ completion_tokens: int | None
200
+ total_tokens: int | None
201
+ reasoning_tokens: int | None
202
+ finish_reason: str | None
203
+ response_id: str | None
204
+ created_at: datetime
205
+
206
+ model_config = ConfigDict(from_attributes=True)
207
+
208
+
209
+ class TokenUsageSummary(BaseModel):
210
+ prompt_tokens: int = 0
211
+ completion_tokens: int = 0
212
+ total_tokens: int = 0
213
+ reasoning_tokens: int = 0
214
+
215
+
216
+ class ExecutionMetadata(BaseModel):
217
+ duration_ms: int | None
218
+ total_event_count: int
219
+ model_turn_count: int
220
+ assistant_turn_count: int
221
+ tool_request_count: int
222
+ tool_success_count: int
223
+ tool_failure_count: int
224
+ command_count: int
225
+ command_failure_count: int
226
+ file_read_count: int
227
+ file_write_count: int
228
+ patch_count: int
229
+ registered_tool_count: int
230
+ current_state: str
231
+ last_event_type: str | None
232
+ last_event_actor: str | None
233
+ last_event_at: datetime | None
234
+ token_usage: TokenUsageSummary = Field(default_factory=TokenUsageSummary)
235
+
236
+
237
+ class ToolChainItem(BaseModel):
238
+ call_id: str | None = None
239
+ step_id: str
240
+ parent_step_id: str | None = None
241
+ tool_name: str
242
+ status: str
243
+ event_ids: list[int] = Field(default_factory=list)
244
+ requested_at: datetime | None = None
245
+ started_at: datetime | None = None
246
+ completed_at: datetime | None = None
247
+ duration_ms: int | None = None
248
+ provider: str | None = None
249
+ model: str | None = None
250
+ args_summary: str | None = None
251
+ output_summary: str | None = None
252
+ error_summary: str | None = None
253
+ error_code: str | None = None
254
+ artifact_count: int = 0
255
+
256
+
257
+ class CommandChainItem(BaseModel):
258
+ command_id: str | None = None
259
+ step_id: str
260
+ parent_step_id: str | None = None
261
+ command: str
262
+ status: str
263
+ event_ids: list[int] = Field(default_factory=list)
264
+ started_at: datetime | None = None
265
+ completed_at: datetime | None = None
266
+ duration_ms: int | None = None
267
+ cwd: str | None = None
268
+ exit_code: int | None = None
269
+ output_summary: str | None = None
270
+ stdout_summary: str | None = None
271
+ stderr_summary: str | None = None
272
+ error_summary: str | None = None
273
+ error_code: str | None = None
274
+
275
+
276
+ class FileActivityItem(BaseModel):
277
+ step_id: str
278
+ parent_step_id: str | None = None
279
+ event_id: int
280
+ event_type: Literal["file.read", "file.written"]
281
+ path: str
282
+ status: str
283
+ change_type: str | None = None
284
+ summary: str
285
+ content_hash: str | None = None
286
+ before_hash: str | None = None
287
+ after_hash: str | None = None
288
+ diff_summary: str | None = None
289
+ line_additions: int | None = None
290
+ line_deletions: int | None = None
291
+ extension: str | None = None
292
+ size_bytes: int | None = None
293
+ timestamp: datetime
294
+
295
+
296
+ class PatchActivityItem(BaseModel):
297
+ step_id: str
298
+ parent_step_id: str | None = None
299
+ event_id: int
300
+ path: str
301
+ status: str
302
+ summary: str
303
+ before_hash: str | None = None
304
+ after_hash: str | None = None
305
+ diff_summary: str | None = None
306
+ line_additions: int | None = None
307
+ line_deletions: int | None = None
308
+ timestamp: datetime
309
+
310
+
311
+ class RunOverview(BaseModel):
312
+ id: str
313
+ agent_name: str
314
+ goal: str
315
+ status: str
316
+ provider: str | None
317
+ model: str | None
318
+ redaction_level: str
319
+ tool_count: int
320
+ error_count: int
321
+ retry_count: int
322
+ artifact_count: int
323
+ total_prompt_tokens: int
324
+ total_completion_tokens: int
325
+ started_at: datetime
326
+ ended_at: datetime | None
327
+ metadata: dict[str, Any]
328
+ final_output_summary: str | None
329
+ flags: list[dict[str, Any]] = Field(default_factory=list)
330
+ execution: ExecutionMetadata
331
+ tool_chain: list[ToolChainItem] = Field(default_factory=list)
332
+ command_chain: list[CommandChainItem] = Field(default_factory=list)
333
+ file_activity: list[FileActivityItem] = Field(default_factory=list)
334
+ patch_activity: list[PatchActivityItem] = Field(default_factory=list)
335
+
336
+ model_config = ConfigDict(from_attributes=True)
337
+
338
+
339
+ class TimelineGroup(BaseModel):
340
+ step_id: str
341
+ label: str
342
+ status: str
343
+ step_type: str
344
+ tool_name: str | None
345
+ call_id: str | None
346
+ parent_step_id: str | None
347
+ event_count: int
348
+ started_at: datetime
349
+ ended_at: datetime
350
+ duration_ms: int | None
351
+ events: list[EventOut]
352
+
353
+
354
+ class TimelineResponse(BaseModel):
355
+ run_id: str
356
+ groups: list[TimelineGroup]
357
+
358
+
359
+ class GraphNode(BaseModel):
360
+ id: str
361
+ type: str
362
+ label: str
363
+ position: dict[str, float]
364
+ data: dict[str, Any] = Field(default_factory=dict)
365
+
366
+
367
+ class GraphEdge(BaseModel):
368
+ id: str
369
+ source: str
370
+ target: str
371
+ label: str | None = None
372
+ animated: bool = False
373
+
374
+
375
+ class GraphResponse(BaseModel):
376
+ run_id: str
377
+ view: Literal["execution", "decisions", "tool_chain"]
378
+ nodes: list[GraphNode]
379
+ edges: list[GraphEdge]
380
+
381
+
382
+ class ToolMetricOut(BaseModel):
383
+ tool_name: str
384
+ call_count: int
385
+ success_count: int
386
+ failure_count: int
387
+ total_duration_ms: int
388
+ avg_duration_ms: int
389
+ max_duration_ms: int
390
+ artifact_count: int
391
+ attributed_prompt_tokens: int
392
+ attributed_completion_tokens: int
393
+ attributed_total_tokens: int
394
+ estimated_cost_usd: float | None = None
395
+ providers: list[str] = Field(default_factory=list)
396
+ models: list[str] = Field(default_factory=list)
397
+
398
+
399
+ class SimilarRunOut(BaseModel):
400
+ run_id: str
401
+ agent_name: str
402
+ goal: str
403
+ status: str
404
+ started_at: datetime
405
+ ended_at: datetime | None
406
+ duration_ms: int | None
407
+ tool_count: int
408
+ error_count: int
409
+ retry_count: int
410
+ provider: str | None
411
+ model: str | None
412
+ similarity_score: float
413
+ shared_tools: list[str] = Field(default_factory=list)
414
+ reason: str
415
+
416
+
417
+ class RunAnalyticsResponse(BaseModel):
418
+ run_id: str
419
+ tool_graph: GraphResponse
420
+ tool_metrics: list[ToolMetricOut]
421
+ similar_runs: list[SimilarRunOut]
422
+
423
+
424
+ class DiffTargetOut(BaseModel):
425
+ label: str
426
+ status: str | None = None
427
+ summary: str | None = None
428
+ event_ids: list[int] = Field(default_factory=list)
429
+ step_id: str | None = None
430
+ duration_ms: int | None = None
431
+ metadata: dict[str, Any] = Field(default_factory=dict)
432
+
433
+
434
+ class DiffPairOut(BaseModel):
435
+ relation: Literal["shared", "left_only", "right_only", "different"]
436
+ kind: str
437
+ summary: str
438
+ left: DiffTargetOut | None = None
439
+ right: DiffTargetOut | None = None
440
+
441
+
442
+ class OverviewDiffOut(BaseModel):
443
+ tool_count_delta: int
444
+ command_count_delta: int
445
+ error_count_delta: int
446
+ retry_count_delta: int
447
+ artifact_count_delta: int
448
+ token_total_delta: int
449
+ duration_ms_delta: int | None = None
450
+
451
+
452
+ class DivergenceOut(BaseModel):
453
+ first_mismatch_kind: str
454
+ left_event_ids: list[int] = Field(default_factory=list)
455
+ right_event_ids: list[int] = Field(default_factory=list)
456
+ summary: str
457
+
458
+
459
+ class RootCauseOut(BaseModel):
460
+ label: str
461
+ summary: str
462
+ first_causal_event_left: int | None = None
463
+ first_causal_event_right: int | None = None
464
+ supporting_event_ids: dict[str, list[int]] = Field(default_factory=dict)
465
+ impact_summary: str
466
+ confidence: Literal["high", "medium", "low"]
467
+
468
+
469
+ class RunCompareResponse(BaseModel):
470
+ left_run: RunOverview
471
+ right_run: RunOverview
472
+ overview_diff: OverviewDiffOut
473
+ divergence: DivergenceOut | None = None
474
+ aligned_timeline: list[DiffPairOut] = Field(default_factory=list)
475
+ tool_diff: list[DiffPairOut] = Field(default_factory=list)
476
+ command_diff: list[DiffPairOut] = Field(default_factory=list)
477
+ file_diff: list[DiffPairOut] = Field(default_factory=list)
478
+ artifact_diff: list[DiffPairOut] = Field(default_factory=list)
479
+ decision_diff: list[DiffPairOut] = Field(default_factory=list)
480
+ root_cause: RootCauseOut
481
+ evidence: dict[str, dict[str, EventOut]] = Field(default_factory=dict)
482
+
483
+
484
+ class ExplanationResponse(BaseModel):
485
+ run_id: str
486
+ narrative: list[NarrativeItem]
487
+ decisions: list[DecisionOut]
488
+ flags: list[dict[str, Any]]
489
+ evidence: dict[str, EventOut]
490
+
491
+
492
+ class RunListItem(BaseModel):
493
+ id: str
494
+ agent_name: str
495
+ goal: str
496
+ status: str
497
+ started_at: datetime
498
+ ended_at: datetime | None
499
+ tool_count: int
500
+ error_count: int
501
+ retry_count: int
502
+ artifact_count: int
503
+ total_prompt_tokens: int
504
+ total_completion_tokens: int
505
+ model: str | None
506
+ provider: str | None
507
+
508
+ model_config = ConfigDict(from_attributes=True)
509
+
510
+
511
+ class DashboardStats(BaseModel):
512
+ total_runs: int
513
+ completed_runs: int
514
+ failed_runs: int
515
+ running_runs: int
516
+ total_errors: int
517
+ total_tools: int
518
+ total_artifacts: int
519
+ avg_duration_ms: int | None
520
+ total_prompt_tokens: int
521
+ total_completion_tokens: int
522
+ total_tokens: int
523
+
524
+
525
+ class DashboardTrendItem(BaseModel):
526
+ date: str
527
+ runs: int
528
+ completed: int
529
+ failed: int
530
+
531
+
532
+ class DashboardTopTool(BaseModel):
533
+ tool_name: str
534
+ call_count: int
535
+ avg_duration_ms: int
536
+
537
+
538
+ class DashboardTopError(BaseModel):
539
+ error_code: str
540
+ count: int
541
+
542
+
543
+ class DashboardResponse(BaseModel):
544
+ stats: DashboardStats
545
+ trend: list[DashboardTrendItem]
546
+ top_tools: list[DashboardTopTool]
547
+ top_errors: list[DashboardTopError]
548
+ provider_distribution: list[dict[str, Any]]
549
+ model_distribution: list[dict[str, Any]]
@@ -0,0 +1 @@
1
+