From 684bf33675fc567cd41b5ce09cc72714a175357b Mon Sep 17 00:00:00 2001 From: Dani Date: Sun, 27 Apr 2025 12:09:04 -0400 Subject: [PATCH] Fixed Reader so it does more lines Added a memory re-wirer updated the dream_replay --- main.py | 2 ++ model/dream_replay.py | 21 +++++++++++++++------ model/reweaver.py | 20 ++++++++++++++++++++ reader/reader.py | 17 ++++++++++++++++- 4 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 model/reweaver.py diff --git a/main.py b/main.py index bb18e03..6fe373c 100644 --- a/main.py +++ b/main.py @@ -9,6 +9,7 @@ from model.cleanup import full_cleanup from model.dream_replay import replay_dreams from model.rehearsal import simulate_conversation from model.scheduler import set_next_action +from model.reweaver import memory_reweaver_loop from reader.reader import read_books_forever from dashboard.dashboard import run_dashboard @@ -68,6 +69,7 @@ def start_brain_loops(): loop.create_task(dream_replay_loop()) loop.create_task(background_cleanup_loop()) loop.create_task(rehearsal_loop()) + loop.create_task(memory_reweaver_loop()) loop.run_forever() diff --git a/model/dream_replay.py b/model/dream_replay.py index 4f93380..afa5ae0 100644 --- a/model/dream_replay.py +++ b/model/dream_replay.py @@ -2,17 +2,26 @@ import random from model.memory import load_dreams from model.trainer import train_on_message from model.dynamic_expand import expand_model_if_needed +from context.context import load_context def replay_dreams(): expand_model_if_needed() dreams = load_dreams() - if not dreams: + context = load_context() + + if not dreams or not context: return - selected = random.sample(dreams, min(len(dreams), 5)) - for dream in selected: - text = dream["sentence"] - if text: - train_on_message(text) + selected_dreams = random.sample(dreams, min(len(dreams), 5)) + selected_contexts = random.sample(context, min(len(context), 5)) + + # Mix dreams and past contexts into a chaotic dream + all_sources = [d["sentence"] for d in selected_dreams] + [c["text"] for c in selected_contexts] + random.shuffle(all_sources) + + mixed_sentence = " ".join(random.sample(all_sources, min(len(all_sources), 3))) + + if mixed_sentence: + train_on_message(mixed_sentence, source="dream") diff --git a/model/reweaver.py b/model/reweaver.py new file mode 100644 index 0000000..4687bfb --- /dev/null +++ b/model/reweaver.py @@ -0,0 +1,20 @@ +import random +from context.context import load_context +from model.trainer import train_on_message +from model.dynamic_expand import expand_model_if_needed + + +async def memory_reweaver_loop(): + while True: + await asyncio.sleep(600) # every 10 minutes + expand_model_if_needed() + + context = load_context() + if not context: + return + + selected = random.sample(context, min(len(context), 10)) + combined_text = " ".join([s["text"] for s in selected]) + + if combined_text: + train_on_message(combined_text, source="reweaver") diff --git a/reader/reader.py b/reader/reader.py index d14f1cf..181c850 100644 --- a/reader/reader.py +++ b/reader/reader.py @@ -29,6 +29,8 @@ def save_progress(prog): async def read_books_forever(): books = get_books() progress = load_progress() + buffered_lines = [] + while True: for book in books: path = os.path.join(BOOK_DIR, book) @@ -46,6 +48,19 @@ async def read_books_forever(): save_progress(progress) if is_valid_line(line): - train_on_message(line, source="book") + buffered_lines.append(line) + + # If we have enough lines buffered, combine and train + if len(buffered_lines) >= 3: + combined_text = " ".join(buffered_lines) + train_on_message(combined_text, source="book") + buffered_lines.clear() + set_next_action(READ_DELAY, "Reading") await asyncio.sleep(READ_DELAY) + + # End of a book: train whatever lines are left buffered + if buffered_lines: + combined_text = " ".join(buffered_lines) + train_on_message(combined_text, source="book") + buffered_lines.clear()