goober/modules/markovmemory.py

69 lines
2.1 KiB
Python
Raw Normal View History

2025-06-20 23:48:10 +02:00
import os
import json
import markovify
import pickle
from modules.globalvars import *
2025-07-09 15:05:06 +02:00
import logging
import modules.keys as k
from modules.settings import Settings as SettingsManager
settings_manager = SettingsManager()
settings = settings_manager.settings
2025-07-09 15:05:06 +02:00
logger = logging.getLogger("goober")
# Get file size and line count for a given file path
2025-06-20 23:48:10 +02:00
def get_file_info(file_path):
try:
file_size = os.path.getsize(file_path)
with open(file_path, "r") as f:
lines = f.readlines()
return {"file_size_bytes": file_size, "line_count": len(lines)}
except Exception as e:
return {"error": str(e)}
# Load memory data from file, or use default dataset if not loaded yet
2025-06-20 23:48:10 +02:00
def load_memory():
data = []
# Try to load data from MEMORY_FILE
2025-06-20 23:48:10 +02:00
try:
with open(settings["bot"]["active_memory"], "r") as f:
2025-06-20 23:48:10 +02:00
data = json.load(f)
except FileNotFoundError:
pass
return data
# Save memory data to MEMORY_FILE
2025-06-20 23:48:10 +02:00
def save_memory(memory):
with open(settings["bot"]["active_memory"], "w") as f:
2025-06-20 23:48:10 +02:00
json.dump(memory, f, indent=4)
def train_markov_model(memory, additional_data=None):
if not memory:
return None
2025-07-16 19:27:12 +02:00
filtered_memory = [line for line in memory if isinstance(line, str)]
2025-06-20 23:48:10 +02:00
if additional_data:
2025-07-16 19:27:12 +02:00
filtered_memory.extend(line for line in additional_data if isinstance(line, str))
if not filtered_memory:
return None
text = "\n".join(filtered_memory)
2025-06-20 23:48:10 +02:00
model = markovify.NewlineText(text, state_size=2)
return model
# Save the Markov model to a pickle file
2025-06-20 23:48:10 +02:00
def save_markov_model(model, filename='markov_model.pkl'):
with open(filename, 'wb') as f:
pickle.dump(model, f)
2025-07-09 15:05:06 +02:00
logger.info(f"Markov model saved to {filename}.")
2025-06-20 23:48:10 +02:00
# Load the Markov model from a pickle file
2025-06-20 23:48:10 +02:00
def load_markov_model(filename='markov_model.pkl'):
try:
with open(filename, 'rb') as f:
model = pickle.load(f)
logger.info(f"{k.model_loaded()} {filename}.{RESET}")
2025-06-20 23:48:10 +02:00
return model
except FileNotFoundError:
logger.error(f"{filename} {k.not_found()}{RESET}")
2025-06-20 23:48:10 +02:00
return None