2
2
import os
3
3
from abc import ABC , abstractmethod
4
4
from pathlib import Path
5
+ import logging
5
6
6
7
from aider .coders import Coder
7
8
from aider .models import Model
8
9
from aider .io import InputOutput
10
+ from tenacity import retry , wait_exponential
9
11
10
12
11
13
class Agents (ABC ):
@@ -23,6 +25,9 @@ def __init__(self, max_iteration: int, model_name: str):
23
25
super ().__init__ (max_iteration )
24
26
self .model = Model (model_name )
25
27
28
+ @retry (
29
+ wait = wait_exponential (multiplier = 1 , min = 4 , max = 10 ),
30
+ )
26
31
def run (
27
32
self ,
28
33
message : str ,
@@ -44,10 +49,33 @@ def run(
44
49
log_dir .mkdir (parents = True , exist_ok = True )
45
50
input_history_file = log_dir / ".aider.input.history"
46
51
chat_history_file = log_dir / ".aider.chat.history.md"
52
+
47
53
print (
48
54
f"check { os .path .abspath (chat_history_file )} for prompts and lm generations" ,
49
55
file = sys .stderr ,
50
56
)
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
+
51
79
io = InputOutput (
52
80
yes = True ,
53
81
input_history_file = input_history_file ,
@@ -64,4 +92,13 @@ def run(
64
92
)
65
93
coder .max_reflection = self .max_iteration
66
94
coder .stream = False
95
+
96
+ # Run the agent
67
97
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