diff --git a/agent/agents.py b/agent/agents.py index 4ebcff5..4c777f6 100644 --- a/agent/agents.py +++ b/agent/agents.py @@ -2,10 +2,12 @@ import os from abc import ABC, abstractmethod from pathlib import Path +import logging from aider.coders import Coder from aider.models import Model from aider.io import InputOutput +from tenacity import retry, wait_exponential class Agents(ABC): @@ -23,6 +25,9 @@ def __init__(self, max_iteration: int, model_name: str): super().__init__(max_iteration) self.model = Model(model_name) + @retry( + wait=wait_exponential(multiplier=1, min=4, max=10), + ) def run( self, message: str, @@ -44,10 +49,33 @@ def run( log_dir.mkdir(parents=True, exist_ok=True) input_history_file = log_dir / ".aider.input.history" chat_history_file = log_dir / ".aider.chat.history.md" + print( f"check {os.path.abspath(chat_history_file)} for prompts and lm generations", file=sys.stderr, ) + # Set up logging + log_file = log_dir / "aider.log" + logging.basicConfig( + filename=log_file, + level=logging.INFO, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", + ) + + # Redirect print statements to the log file + sys.stdout = open(log_file, "a") + sys.stderr = open(log_file, "a") + + # Configure httpx logging + httpx_logger = logging.getLogger("httpx") + httpx_logger.setLevel(logging.INFO) + httpx_logger.propagate = False # Prevent propagation to root logger + httpx_handler = logging.FileHandler(log_file) + httpx_handler.setFormatter( + logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") + ) + httpx_logger.addHandler(httpx_handler) + io = InputOutput( yes=True, input_history_file=input_history_file, @@ -64,4 +92,13 @@ def run( ) coder.max_reflection = self.max_iteration coder.stream = False + + # Run the agent coder.run(message) + + # Close redirected stdout and stderr + sys.stdout.close() + sys.stderr.close() + # Restore original stdout and stderr + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ diff --git a/agent/run_agent.py b/agent/run_agent.py index 3d68eff..8227e1d 100644 --- a/agent/run_agent.py +++ b/agent/run_agent.py @@ -164,7 +164,7 @@ def run_agent(agent_config_file: str) -> None: with tqdm( total=len(filtered_dataset), smoothing=0, desc="Running Aider for repos" ) as pbar: - with multiprocessing.Pool(processes=10) as pool: + with multiprocessing.Pool(processes=2) as pool: results = [] # Use apply_async to submit jobs and add progress bar updates diff --git a/pyproject.toml b/pyproject.toml index 2bfc735..b9c0fd6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ dependencies = [ "aider-chat>=0.56.0", "modal>=0.64.95", "typer>=0.12.0", + "tenacity>=8.5.0", "datasets>=3.0.0", "docker>=7.1.0", "fastcore>=1.7.8", diff --git a/uv.lock b/uv.lock index 2dd75bf..1a28f88 100644 --- a/uv.lock +++ b/uv.lock @@ -435,6 +435,7 @@ dependencies = [ { name = "pymupdf" }, { name = "pytest" }, { name = "ruff" }, + { name = "tenacity" }, { name = "typer" }, ] @@ -451,6 +452,7 @@ requires-dist = [ { name = "pymupdf", specifier = ">=1.24.5" }, { name = "pytest", specifier = ">=8.3.3" }, { name = "ruff", specifier = ">=0.6.4" }, + { name = "tenacity", specifier = ">=8.5.0" }, { name = "typer", specifier = ">=0.12.0" }, ] @@ -2076,6 +2078,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0f/9c/3dde3ff3b79cc0a14239001f63e5304d0466c2041f3c4535fd39276cd258/synchronicity-0.7.6-py3-none-any.whl", hash = "sha256:c5bb60a0f39c5a161b5013d183cfe6229dc4ee6e3a09714f37da2905635cf983", size = 31312 }, ] +[[package]] +name = "tenacity" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/94/91fccdb4b8110642462e653d5dcb27e7b674742ad68efd146367da7bdb10/tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b", size = 47421 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/cb/b86984bed139586d01532a587464b5805f12e397594f19f931c4c2fbfa61/tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539", size = 28169 }, +] + [[package]] name = "tiktoken" version = "0.7.0"