halfacupoftea commited on
Commit
450bb0a
·
1 Parent(s): 501e2ad

Add dynamic detailed error messages in the UI

Browse files
Files changed (3) hide show
  1. app.py +16 -8
  2. tools/github_tools.py +3 -3
  3. tools/utils.py +4 -4
app.py CHANGED
@@ -3,17 +3,25 @@ from agent.core import run_agent
3
 
4
  async def respond_to_issue(issue_url, branch_name):
5
  logs = []
6
- async for log_msg in run_agent(issue_url, branch_name):
7
- logs.append(str(log_msg))
 
8
 
9
- collapsible_logs = "<details><summary>Click to view agent's used tool logs</summary>\n\n"
10
- for log in logs:
11
- collapsible_logs += f"- {log}\n"
12
- collapsible_logs += "</details>\n\n"
13
 
14
- final_message = f"{collapsible_logs} Agent has successfully processed the issue and posted an update in the comments. Check the GitHub issue for updates."
 
 
 
 
 
 
 
 
15
 
16
- return [{"role": "assistant", "content": final_message}]
17
 
18
  theme = gr.themes.Soft(
19
  primary_hue="orange",
 
3
 
4
  async def respond_to_issue(issue_url, branch_name):
5
  logs = []
6
+ try:
7
+ async for log_msg in run_agent(issue_url, branch_name):
8
+ logs.append(str(log_msg))
9
 
10
+ collapsible_logs = "<details><summary>Click to view agent's used tool logs</summary>\n\n"
11
+ for log in logs:
12
+ collapsible_logs += f"- {log}\n"
13
+ collapsible_logs += "</details>\n\n"
14
 
15
+ final_message = f"{collapsible_logs} Agent has successfully processed the issue and posted an update in the comments. Check the GitHub issue for updates."
16
+
17
+ return [{"role": "assistant", "content": final_message}]
18
+ except Exception as e:
19
+ error_message = str(e).lower()
20
+ if "429" in error_message:
21
+ return [{"role": "assistant", "content": f"🚫 Too many requests at the moment. Please try again after some time."}]
22
+ else:
23
+ return [{"role": "assistant", "content": f"🚫 Error: {str(e)}"}]
24
 
 
25
 
26
  theme = gr.themes.Soft(
27
  primary_hue="orange",
tools/github_tools.py CHANGED
@@ -10,7 +10,7 @@ def fetch_github_issue(issue_url):
10
  issue_num = path_parts[3]
11
  return owner, repo, issue_num
12
  else:
13
- raise ValueError("Invalid GitHub Issue URL")
14
 
15
 
16
  def get_issue_details(owner, repo, issue_num):
@@ -25,7 +25,7 @@ def get_issue_details(owner, repo, issue_num):
25
  if response.status_code == 200:
26
  return response.json().get("body")
27
  else:
28
- raise Exception(f"Failed to fetch issue: {response.status_code} {response.text}")
29
 
30
 
31
  def post_comment(owner, repo, issue_num, comment_body):
@@ -41,4 +41,4 @@ def post_comment(owner, repo, issue_num, comment_body):
41
  if response.status_code == 201:
42
  return response.json()
43
  else:
44
- raise Exception(f"Failed to post comment: {response.status_code} {response.text}")
 
10
  issue_num = path_parts[3]
11
  return owner, repo, issue_num
12
  else:
13
+ raise ValueError("Invalid GitHub Issue URL. Please provide a valid URL and try again.")
14
 
15
 
16
  def get_issue_details(owner, repo, issue_num):
 
25
  if response.status_code == 200:
26
  return response.json().get("body")
27
  else:
28
+ raise Exception(f"Failed to fetch issue: {response.status_code}. The issue either doesn't exist or the URL is incorrect.")
29
 
30
 
31
  def post_comment(owner, repo, issue_num, comment_body):
 
41
  if response.status_code == 201:
42
  return response.json()
43
  else:
44
+ raise Exception(f"Failed to post comment: {response.status_code}. The issue either doesn't exist or the URL is incorrect.")
tools/utils.py CHANGED
@@ -68,8 +68,8 @@ def get_installation_id(owner, repo):
68
  data = response.json()
69
  return data["id"]
70
  else:
71
- raise Exception(f"Failed to get installation ID for {owner}/{repo}: {response.status_code} {response.text}")
72
-
73
 
74
  def get_installation_token(installation_id):
75
  """Return a valid installation token, fetch new if expired or missing."""
@@ -81,7 +81,7 @@ def get_installation_token(installation_id):
81
  url = f"https://api.github.com/app/installations/{installation_id}/access_tokens"
82
  response = github_request("POST", url)
83
  if response.status_code != 201:
84
- raise Exception(f"Failed to fetch installation token: {response.status_code} {response.text}")
85
 
86
  token_data = response.json()
87
  token = token_data["token"]
@@ -106,7 +106,7 @@ async def fetch_repo_files(owner: str, repo: str, ref: str = "main") -> List[str
106
 
107
  response = await asyncio.to_thread(github_request, "GET", url, headers=headers)
108
  if response.status_code != 200:
109
- raise Exception(f"Failed to list repository files: {response.status_code} {response.text}")
110
 
111
  tree = response.json().get("tree", [])
112
  file_paths = [item["path"] for item in tree if item["type"] == "blob"]
 
68
  data = response.json()
69
  return data["id"]
70
  else:
71
+ raise Exception(f"Failed to get installation ID for {owner}/{repo}: {response.status_code}. Please [install the GitHub App](https://github.com/apps/opensorus) on this repository before using the agent.")
72
+
73
 
74
  def get_installation_token(installation_id):
75
  """Return a valid installation token, fetch new if expired or missing."""
 
81
  url = f"https://api.github.com/app/installations/{installation_id}/access_tokens"
82
  response = github_request("POST", url)
83
  if response.status_code != 201:
84
+ raise Exception(f"Failed to fetch installation token: {response.status_code}. Please [install the GitHub App](https://github.com/apps/opensorus) on this repository before using the agent.")
85
 
86
  token_data = response.json()
87
  token = token_data["token"]
 
106
 
107
  response = await asyncio.to_thread(github_request, "GET", url, headers=headers)
108
  if response.status_code != 200:
109
+ raise Exception(f"Failed to fetch repository files: {response.status_code}. Please ensure the branch name is correct and files exist in this branch.")
110
 
111
  tree = response.json().get("tree", [])
112
  file_paths = [item["path"] for item in tree if item["type"] == "blob"]