22import os
33from abc import ABC , abstractmethod
44from pathlib import Path
5+ import logging
56
67from aider .coders import Coder
78from aider .models import Model
89from aider .io import InputOutput
10+ from tenacity import retry , wait_exponential
911
1012
1113class Agents (ABC ):
@@ -23,6 +25,9 @@ def __init__(self, max_iteration: int, model_name: str):
2325 super ().__init__ (max_iteration )
2426 self .model = Model (model_name )
2527
28+ @retry (
29+ wait = wait_exponential (multiplier = 1 , min = 4 , max = 10 ),
30+ )
2631 def run (
2732 self ,
2833 message : str ,
@@ -44,10 +49,33 @@ def run(
4449 log_dir .mkdir (parents = True , exist_ok = True )
4550 input_history_file = log_dir / ".aider.input.history"
4651 chat_history_file = log_dir / ".aider.chat.history.md"
52+
4753 print (
4854 f"check { os .path .abspath (chat_history_file )} for prompts and lm generations" ,
4955 file = sys .stderr ,
5056 )
57+ # Set up logging
58+ log_file = log_dir / "aider.log"
59+ logging .basicConfig (
60+ filename = log_file ,
61+ level = logging .INFO ,
62+ format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ,
63+ )
64+
65+ # Redirect print statements to the log file
66+ sys .stdout = open (log_file , "a" )
67+ sys .stderr = open (log_file , "a" )
68+
69+ # Configure httpx logging
70+ httpx_logger = logging .getLogger ("httpx" )
71+ httpx_logger .setLevel (logging .INFO )
72+ httpx_logger .propagate = False # Prevent propagation to root logger
73+ httpx_handler = logging .FileHandler (log_file )
74+ httpx_handler .setFormatter (
75+ logging .Formatter ("%(asctime)s - %(name)s - %(levelname)s - %(message)s" )
76+ )
77+ httpx_logger .addHandler (httpx_handler )
78+
5179 io = InputOutput (
5280 yes = True ,
5381 input_history_file = input_history_file ,
@@ -64,4 +92,13 @@ def run(
6492 )
6593 coder .max_reflection = self .max_iteration
6694 coder .stream = False
95+
96+ # Run the agent
6797 coder .run (message )
98+
99+ # Close redirected stdout and stderr
100+ sys .stdout .close ()
101+ sys .stderr .close ()
102+ # Restore original stdout and stderr
103+ sys .stdout = sys .__stdout__
104+ sys .stderr = sys .__stderr__
0 commit comments