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
|
2025-07-22 19:32:19 +03:00
|
|
|
import modules.keys as k
|
2025-07-23 15:42:13 +03:00
|
|
|
from modules.settings import instance as settings_manager
|
2025-07-23 10:19:08 +03:00
|
|
|
|
2025-07-22 19:32:19 +03:00
|
|
|
settings = settings_manager.settings
|
|
|
|
|
|
|
|
|
2025-07-09 15:05:06 +02:00
|
|
|
logger = logging.getLogger("goober")
|
2025-07-23 10:19:08 +03:00
|
|
|
|
|
|
|
|
2025-06-22 19:07:41 +02:00
|
|
|
# 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)}
|
|
|
|
|
2025-07-23 10:19:08 +03:00
|
|
|
|
2025-06-22 19:07:41 +02:00
|
|
|
# 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 = []
|
|
|
|
|
2025-06-22 19:07:41 +02:00
|
|
|
# Try to load data from MEMORY_FILE
|
2025-06-20 23:48:10 +02:00
|
|
|
try:
|
2025-07-22 19:32:19 +03:00
|
|
|
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
|
|
|
|
|
2025-07-23 10:19:08 +03:00
|
|
|
|
2025-06-22 19:07:41 +02:00
|
|
|
# Save memory data to MEMORY_FILE
|
2025-06-20 23:48:10 +02:00
|
|
|
def save_memory(memory):
|
2025-07-22 19:32:19 +03:00
|
|
|
with open(settings["bot"]["active_memory"], "w") as f:
|
2025-06-20 23:48:10 +02:00
|
|
|
json.dump(memory, f, indent=4)
|
|
|
|
|
2025-07-23 10:19:08 +03:00
|
|
|
|
2025-07-23 14:51:57 +03:00
|
|
|
def train_markov_model(memory, additional_data=None) -> markovify.NewlineText | None:
|
2025-06-20 23:48:10 +02:00
|
|
|
if not memory:
|
|
|
|
return None
|
2025-07-23 14:51:57 +03:00
|
|
|
|
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-23 10:19:08 +03:00
|
|
|
filtered_memory.extend(
|
|
|
|
line for line in additional_data if isinstance(line, str)
|
|
|
|
)
|
2025-07-23 14:51:57 +03:00
|
|
|
|
2025-07-16 19:27:12 +02:00
|
|
|
if not filtered_memory:
|
|
|
|
return None
|
2025-07-23 14:51:57 +03:00
|
|
|
|
2025-07-16 19:27:12 +02:00
|
|
|
text = "\n".join(filtered_memory)
|
2025-06-20 23:48:10 +02:00
|
|
|
model = markovify.NewlineText(text, state_size=2)
|
|
|
|
return model
|
|
|
|
|
2025-07-23 10:19:08 +03:00
|
|
|
|
2025-06-22 19:07:41 +02:00
|
|
|
# Save the Markov model to a pickle file
|
2025-07-23 10:19:08 +03:00
|
|
|
def save_markov_model(model, filename="markov_model.pkl"):
|
|
|
|
with open(filename, "wb") as f:
|
2025-06-20 23:48:10 +02:00
|
|
|
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
|
|
|
|
2025-07-23 10:19:08 +03:00
|
|
|
|
2025-06-22 19:07:41 +02:00
|
|
|
# Load the Markov model from a pickle file
|
2025-07-23 10:19:08 +03:00
|
|
|
def load_markov_model(filename="markov_model.pkl"):
|
2025-06-20 23:48:10 +02:00
|
|
|
try:
|
2025-07-23 10:19:08 +03:00
|
|
|
with open(filename, "rb") as f:
|
2025-06-20 23:48:10 +02:00
|
|
|
model = pickle.load(f)
|
2025-07-22 19:32:19 +03:00
|
|
|
logger.info(f"{k.model_loaded()} {filename}.{RESET}")
|
2025-06-20 23:48:10 +02:00
|
|
|
return model
|
|
|
|
except FileNotFoundError:
|
2025-07-22 19:32:19 +03:00
|
|
|
logger.error(f"{filename} {k.not_found()}{RESET}")
|
2025-07-23 10:19:08 +03:00
|
|
|
return None
|