"""
title: Myzer - token minimiser
author: mgscox
author_url:
funding_url:
version: 1.0
"""
from pydantic import BaseModel, Field
from typing import Optional
import time
import re
class Filter:
class Valves(BaseModel):
CONCISE_MYZER: bool = Field(
default=False, description="Automatically request a concise answer."
)
pass
def __init__(self):
# Indicates custom file handling logic. This flag helps disengage default routines in favor of custom
# implementations, informing the WebUI to defer file-related operations to designated methods within this class.
# Alternatively, you can remove the files directly from the body in from the inlet hook
# self.file_handler = True
# Initialize 'valves' with specific configurations. Using 'Valves' instance helps encapsulate settings,
# which ensures settings are managed cohesively and not confused with operational flags like 'file_handler'.
self.valves = self.Valves()
pass
def inlet(self, body: dict, __user__: Optional[dict] = None) -> dict:
# Modify the request body or validate it before processing by the chat completion API.
# This function is the pre-processor for the API where various checks on the input can be performed.
# It can also modify the request before sending it to the API.
print(f"inlet:{__name__}")
print(f"inlet:body:{body}")
print(f"inlet:user:{__user__}")
if __user__.get("role", "admin") in ["user", "admin"]:
start_time = time.time()
# List of common words to strip from input
# Do not include words which might change the meaning of the request if not proesent
COMMON_WORDS = set(
"""a,an,the,is,are,was,were,can,am,has,been,be,of,and,it,in,to,for,on,at,by,as,or,if,but,so,yet""".split(
","
)
)
messages = body.get("messages", [])
for message in messages:
if message.get("role") == "user":
if self.valves.CONCISE_MYZER:
message[
"content"
] += ". Be concise. Do NOT provide any explanation."
message["content"] = " ".join(
[
word
for word in message["content"].split()
if word.lower() not in COMMON_WORDS
]
)
message["content"] = re.sub(
r"\s+", " ", re.sub(r"[^\w\s.!?]", "", message["content"])
).strip()
print(f"Myzer processed in: {time.time() - start_time:.6f}s")
return body
def outlet(self, body: dict, __user__: Optional[dict] = None) -> dict:
# Modify or analyze the response body after processing by the API.
# This function is the post-processor for the API, which can be used to modify the response
# or perform additional checks and analytics.
print(f"outlet:{__name__}")
print(f"outlet:body:{body}")
print(f"outlet:user:{__user__}")
return body