logpt-demo / cli /processor.py
Dhruv Panicker
Initial deploy: LoGPT log analyzer
c2bceac
Raw
History Blame Contribute Delete
1.71 kB
from logpt.tokenizer import Tokenizer
'Split a log file into model-sized chunks'
class LogProcessor:
def __init__(self, max_seq_len: int = 1024, response_reserve: int = 256):
self.max_seq_len = max_seq_len
self.response_reserve = response_reserve
self.tokenizer = Tokenizer()
# prompt template tokens
self.prompt_overhead = 80
self.num_chunks = max_seq_len - response_reserve - self.prompt_overhead
#Function that will split log content chunks that fit into the model's context window
def chunk(self, log_content: str):
if not log_content.strip():
return ["(empty log content)"]
lines = log_content.splitlines()
chunks = []
current_line = []
current_tokens = 0
for line in lines:
line_tokens = len(self.tokenizer.encode(line))
#if adding this current chunk exceeds model limit then finalize current chunk and start a new one
if current_tokens + line_tokens > self.num_chunks and current_line:
chunks.append("\n".join(current_line))
current_line = []
current_tokens = 0
#if a single line exceeds the limit, truncate it
if line_tokens > self.num_chunks:
tokens = self.tokenizer.encode(line)[:self.num_chunks]
line = self.tokenizer.decode(tokens)
line_tokens = self.num_chunks
current_line.append(line)
current_tokens += line_tokens
#add any remaining lines as a final chunk
if current_line:
chunks.append("\n".join(current_line))
return chunks