File size: 2,084 Bytes
a76c39e | 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | """
title: Token Saver Filter
author: nerdur
version: 0.1
description: Štedi tokene tako što ograničava dužinu istorije razgovora.
"""
from pydantic import BaseModel
from typing import Optional
class Filter:
class Valves(BaseModel):
max_chars: int = 8000
keep_last_messages: int = 4
enabled: bool = True
def __init__(self):
self.valves = self.Valves()
def inlet(self, body: dict, __user__: Optional[dict] = None) -> dict:
if not self.valves.enabled:
return body
messages = body.get("messages", [])
if len(messages) <= self.valves.keep_last_messages + 1:
return body
# Uvijek zadrži sistemski prompt (obično prva poruka)
system_message = None
if messages and messages[0].get("role") == "system":
system_message = messages[0]
other_messages = messages[1:]
else:
other_messages = messages
# Ako je ukupna dužina prevelika, skrati sredinu
total_chars = sum(len(m.get("content", "")) for m in other_messages)
if total_chars > self.valves.max_chars:
# Zadrži zadnjih N poruka
last_msgs = other_messages[-self.valves.keep_last_messages:]
# Zadrži prvu poruku (obično početak konteksta)
first_msg = other_messages[0] if other_messages else None
new_messages = []
if system_message:
new_messages.append(system_message)
if first_msg and first_msg not in last_msgs:
new_messages.append(first_msg)
new_messages.append({"role": "system", "content": "...[Stariji dio razgovora je uklonjen radi uštede tokena]..."})
new_messages.extend(last_msgs)
body["messages"] = new_messages
print(f"Token Saver: Skraćeno sa {len(messages)} na {len(new_messages)} poruka.")
return body
def outlet(self, body: dict, __user__: Optional[dict] = None) -> dict:
return body
|