v0.0.34: вывод токенов и времени LLM в UI (суммарно за прогон)
Deploy drhider / validate (push) Canceled after 0s

This commit is contained in:
“Naeel”
2026-08-19 09:00:40 +04:00
parent 53a1fb40d2
commit 02d9592eb5
5 changed files with 88 additions and 7 deletions
+25 -2
View File
@@ -23,8 +23,21 @@ class LLMClient:
"""
def __init__(self):
"""Инициализировать клиент. httpx импортируется лениво."""
"""Инициализировать клиент. httpx импортируется лениво.
Ведёт кумулятивные счётчики за всё время жизни клиента:
tokens_prompt — суммарные входные токены
tokens_completion — суммарные выходные токены
llm_sec — суммарное время LLM-запросов (сек)
"""
self._httpx = httpx
self.tokens_prompt = 0
self.tokens_completion = 0
self.llm_sec = 0.0
@property
def tokens_total(self) -> int:
return self.tokens_prompt + self.tokens_completion
def complete(self, prompt: str) -> str:
"""Отправить промпт в LLM и вернуть текст ответа.
@@ -61,4 +74,14 @@ class LLMClient:
timeout=120,
)
r.raise_for_status()
return r.json()["choices"][0]["message"]["content"]
# Время запроса (реальное время HTTP-вызова LLM)
self.llm_sec += r.elapsed.total_seconds()
data = r.json()
# Счётчики токенов из usage (могут отсутствовать у некоторых прокси)
usage = data.get("usage", {}) or {}
self.tokens_prompt += int(usage.get("prompt_tokens", 0) or 0)
self.tokens_completion += int(usage.get("completion_tokens", 0) or 0)
return data["choices"][0]["message"]["content"]