File size: 1,009 Bytes
1315cad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

import time
class RuntimeLogger:
    def __init__(self, enabled: bool) -> None:
        self.enabled = enabled
        self.start_time = time.perf_counter()
        self.last_time = self.start_time
        self.last_step = 0

    def event(self, message: str) -> None:
        if self.enabled:
            print(f"[dia2] {message}")

    def progress(self, step: int, total: Optional[int] = None) -> None:
        if not self.enabled:
            return
        now = time.perf_counter()
        delta_t = max(now - self.last_time, 1e-6)
        delta_steps = max(step - self.last_step, 1)
        speed = delta_steps / delta_t
        if total is None:
            self.event(f"step {step} :: {speed:.1f} toks/s")
        else:
            self.event(f"step {step}/{total} :: {speed:.1f} toks/s")
        self.last_time = now
        self.last_step = step

    def elapsed(self) -> float:
        return time.perf_counter() - self.start_time


__all__ = ["RuntimeLogger"]