diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index e64971f47..eb28f4097 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -4,6 +4,7 @@ import hashlib import json import os import sys +import threading import time import traceback from json.decoder import JSONDecodeError @@ -205,6 +206,8 @@ class Coder: self.repo.add_new_files(fname for fname in fnames if not Path(fname).is_dir()) self.summarizer = ChatSummary(self.main_model.name) + self.summarizer_thread = None + self.summarized_done_messages = None # validate the functions jsonschema if self.functions: @@ -358,11 +361,33 @@ class Coder: self.last_keyboard_interrupt = now + def summarize_end(self): + if self.summarizer_thread is None: + return + + self.summarizer_thread.join() + self.summarizer_thread = None + + self.done_messages = self.summarized_done_messages + self.summarized_done_messages = None + + def summarize_start(self): + if not self.summarizer.too_big(self.done_messages): + return + + assert self.summarizer_thread is None + assert self.summarized_done_messages is None + self.summarizer_thread = threading.Thread(target=self.summarize_worker) + + def summarize_worker(self): + print("working!") + self.summarized_done_messages = self.summarizer.summarize(self.done_messages) + print("done!") + def move_back_cur_messages(self, message): + self.summarize_end() self.done_messages += self.cur_messages - if self.summarizer.too_big(self.done_messages): - self.io.tool_output("Summarizing chat history...") - self.done_messages = self.summarizer.summarize(self.done_messages) + self.summarize_start() if message: self.done_messages += [ diff --git a/aider/history.py b/aider/history.py index 425579e8e..732a6c9bc 100644 --- a/aider/history.py +++ b/aider/history.py @@ -9,7 +9,7 @@ from aider.sendchat import simple_send_with_retries class ChatSummary: - def __init__(self, model=models.GPT35.name, max_tokens=1024): + def __init__(self, model=models.GPT35.name, max_tokens=128): self.tokenizer = tiktoken.encoding_for_model(model) self.max_tokens = max_tokens