mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-30 09:14:59 +00:00
refactor: improve URL handling and error reporting in base coder
This commit is contained in:
parent
1d3d6a589f
commit
9a37c0491d
1 changed files with 15 additions and 12 deletions
|
@ -790,12 +790,15 @@ class Coder:
|
||||||
self.num_reflections += 1
|
self.num_reflections += 1
|
||||||
message = self.reflected_message
|
message = self.reflected_message
|
||||||
|
|
||||||
def check_and_offer_urls(self, text: str) -> List[str]:
|
def check_and_open_urls(self, text: str) -> List[str]:
|
||||||
"""Check text for URLs and offer to open them in a browser."""
|
"""Check text for URLs and offer to open them in a browser."""
|
||||||
url_pattern = re.compile(r"(https?://[^\s/$.?#].[^\s]*[^\s,.])")
|
|
||||||
|
url_pattern = re.compile(r"(https?://[^\s/$.?#].[^\s]*)")
|
||||||
|
#ai strip trailing . or ' from the url!
|
||||||
|
|
||||||
urls = list(set(url_pattern.findall(text))) # Use set to remove duplicates
|
urls = list(set(url_pattern.findall(text))) # Use set to remove duplicates
|
||||||
for url in urls:
|
for url in urls:
|
||||||
if self.io.confirm_ask("View this URL?", subject=url):
|
if self.io.confirm_ask("Open URL for more info about this error?", subject=url):
|
||||||
webbrowser.open(url)
|
webbrowser.open(url)
|
||||||
return urls
|
return urls
|
||||||
|
|
||||||
|
@ -1149,15 +1152,15 @@ class Coder:
|
||||||
except retry_exceptions() as err:
|
except retry_exceptions() as err:
|
||||||
# Print the error and its base classes
|
# Print the error and its base classes
|
||||||
err_msg = str(err)
|
err_msg = str(err)
|
||||||
base_classes = []
|
#base_classes = []
|
||||||
for cls in err.__class__.__mro__[1:]: # Skip the class itself
|
#for cls in err.__class__.__mro__: # Skip the class itself
|
||||||
base_classes.append(cls.__name__)
|
# base_classes.append(cls.__name__)
|
||||||
if base_classes:
|
#if base_classes:
|
||||||
err_msg += f"\nBase classes: {' -> '.join(base_classes)}"
|
# err_msg += f"\nBase classes: {' -> '.join(base_classes)}"
|
||||||
self.io.tool_warning(err_msg)
|
self.io.tool_error(err_msg)
|
||||||
retry_delay *= 2
|
retry_delay *= 2
|
||||||
if retry_delay > RETRY_TIMEOUT:
|
if retry_delay > RETRY_TIMEOUT:
|
||||||
self.check_and_offer_urls(str(err))
|
self.check_and_open_urls(err_msg)
|
||||||
break
|
break
|
||||||
self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...")
|
self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...")
|
||||||
time.sleep(retry_delay)
|
time.sleep(retry_delay)
|
||||||
|
@ -1187,8 +1190,8 @@ class Coder:
|
||||||
dict(role="assistant", content=self.multi_response_content, prefix=True)
|
dict(role="assistant", content=self.multi_response_content, prefix=True)
|
||||||
)
|
)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
self.check_and_offer_urls(str(err))
|
self.io.tool_error(str(err))
|
||||||
self.io.tool_error(f"Unexpected error: {err}")
|
self.check_and_open_urls(str(err))
|
||||||
lines = traceback.format_exception(type(err), err, err.__traceback__)
|
lines = traceback.format_exception(type(err), err, err.__traceback__)
|
||||||
self.io.tool_error("".join(lines))
|
self.io.tool_error("".join(lines))
|
||||||
return
|
return
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue