Spaces:
Sleeping
Sleeping
File size: 1,191 Bytes
6df89b0 | 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 | from __future__ import annotations
from dataclasses import dataclass, field
from time import perf_counter
from typing import Any
from uuid import uuid4
@dataclass(frozen=True)
class ContextItem:
source: str
title: str
body: str
kind: str = "note"
people: tuple[str, ...] = ()
tags: tuple[str, ...] = ()
created_at: str = ""
app: str = "local"
@dataclass(frozen=True)
class ToolResult:
name: str
ok: bool
content: str
data: dict[str, Any] = field(default_factory=dict)
@dataclass
class RequestTrace:
request_id: str = field(default_factory=lambda: str(uuid4()))
marks: list[tuple[str, float]] = field(default_factory=list)
started: float = field(default_factory=perf_counter)
def mark(self, label: str) -> None:
self.marks.append((label, perf_counter()))
def timings_ms(self) -> dict[str, float]:
previous = self.started
timings: dict[str, float] = {}
for label, timestamp in self.marks:
timings[label] = round((timestamp - previous) * 1000, 2)
previous = timestamp
timings["total"] = round((previous - self.started) * 1000, 2)
return timings
|