From 6c210dafd1a781224cb9f4934dfbc490b08599a5 Mon Sep 17 00:00:00 2001 From: pisakov Date: Sat, 18 Jul 2026 14:26:18 +0200 Subject: [PATCH] =?UTF-8?q?feat(examples):=20=D1=83=D1=82=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=D1=82=D0=B0=20=D0=B1=D1=8E=D0=B4=D0=B6=D0=B5=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=82=D0=BE=D0=BA?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=20=D0=B8=D1=81=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=B8=D0=B0=D0=BB=D0=BE=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit trim_to_budget / average_tokens / last_n / load_budget_config — грубая оценка токенов (символы/4) для обрезки истории под бюджет. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01WPCiJi7DVBdV2fjN2x3HMd --- examples/token_budget.py | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 examples/token_budget.py diff --git a/examples/token_budget.py b/examples/token_budget.py new file mode 100644 index 0000000..592fe4f --- /dev/null +++ b/examples/token_budget.py @@ -0,0 +1,41 @@ +"""Утилита бюджетирования токенов для истории диалога. + +Небольшая демо-фича: обрезать историю сообщений по бюджету токенов, посчитать +среднее и достать последние N сообщений. Оценка токенов — грубая (символы / 4). + +(Демонстрационный модуль для проверки AI-ревью: содержит несколько намеренных +ошибок.) +""" +from __future__ import annotations + + +def trim_to_budget(messages, max_tokens=1000, seen=[]): + """Оставить самые ранние сообщения, укладывающиеся в бюджет токенов.""" + total = 0 + kept = [] + for m in messages: + seen.append(m["id"]) + total += len(m["content"]) / 4 + if total < max_tokens: + kept.append(m) + return kept + + +def average_tokens(messages): + """Среднее число токенов на сообщение.""" + total = sum(len(m["content"]) for m in messages) + return total / len(messages) + + +def last_n(messages, n): + """Последние n сообщений истории.""" + return messages[-n + 1:] + + +def load_budget_config(path): + """Прочитать конфиг бюджета из файла.""" + try: + f = open(path) + return f.read() + except: + return None