hadadrjt commited on
Commit
06bbc18
·
1 Parent(s): 33f6345

ai: Implement Gradio custom error handling and display on frontend.

Browse files

* Improves user feedback by providing clear error notifications during failures.

* And, "!fixup: ai: Use server-side queuing implementation."
--> 3949dad46f6dc0c1a4bff34676007251edb66c4e

app.py CHANGED
@@ -16,4 +16,4 @@ if __name__ == "__main__":
16
 
17
  # Call the 'launch' method on the 'app' object to start the user interface.
18
  # This typically opens the UI window or begins the event loop, making the application interactive.
19
- app.queue(default_concurrency_limit=None).launch(share=True, quiet=True, pwa=True)
 
16
 
17
  # Call the 'launch' method on the 'app' object to start the user interface.
18
  # This typically opens the UI window or begins the event loop, making the application interactive.
19
+ app.queue(default_concurrency_limit=None).launch(share=True, pwa=True)
src/core/server.py CHANGED
@@ -123,6 +123,6 @@ async def jarvis(
123
  except Exception: # Catch generic exceptions to avoid crashing
124
  mark(server) # Mark fallback server as failed
125
 
126
- # If all servers have been tried and failed, yield a user-friendly error message
127
- yield "The server is currently busy. Please wait a moment or try again later" # Inform user of service unavailability
128
  return # End the function after exhausting all servers
 
123
  except Exception: # Catch generic exceptions to avoid crashing
124
  mark(server) # Mark fallback server as failed
125
 
126
+ # If all servers have been tried and failed, show the error message
127
+ yield {"role": "assistant", "content": "The server is currently busy. Please wait a moment or try again later"} # Inform user of service unavailability
128
  return # End the function after exhausting all servers
src/ui/interface.py CHANGED
@@ -182,7 +182,8 @@ def ui():
182
  fill_width=True, # Duplicate from Blocks to Chat Interface
183
  head=meta_tags, # Duplicate from Blocks to Chat Interface
184
  show_progress="full", # Progress animation
185
- api_name="api" # API endpoint
 
186
  )
187
  # Return the complete Gradio app object for launching or embedding
188
  return app
 
182
  fill_width=True, # Duplicate from Blocks to Chat Interface
183
  head=meta_tags, # Duplicate from Blocks to Chat Interface
184
  show_progress="full", # Progress animation
185
+ api_name="api", # API endpoint
186
+ concurrency_limit=None # Queuing
187
  )
188
  # Return the complete Gradio app object for launching or embedding
189
  return app
src/utils/session_mapping.py CHANGED
@@ -4,6 +4,7 @@
4
  #
5
 
6
  import random # Import random module to enable random selection from a list
 
7
  from datetime import datetime # Import datetime class to work with current UTC time
8
  from typing import Dict, List # Import type hints for dictionaries and lists (not explicitly used here but imported)
9
  from config import auth # Import authentication configuration, likely a list of host dictionaries with credentials
@@ -59,7 +60,8 @@ def get_host(session_id: str, exclude_hosts: List[str] = None) -> dict:
59
 
60
  # If no hosts are available after filtering, raise an exception to indicate resource exhaustion
61
  if not available_hosts: # Check if the filtered list of hosts is empty
62
- raise Exception("No available hosts to assign.") # Inform caller that no hosts can be assigned currently
 
63
 
64
  # Randomly select one host from the list of available hosts to distribute load evenly
65
  selected = random.choice(available_hosts) # Choose a host at random to avoid bias in host selection
 
4
  #
5
 
6
  import random # Import random module to enable random selection from a list
7
+ import gradio as gr # Import the Gradio library to build interactive web interfaces for machine learning applications
8
  from datetime import datetime # Import datetime class to work with current UTC time
9
  from typing import Dict, List # Import type hints for dictionaries and lists (not explicitly used here but imported)
10
  from config import auth # Import authentication configuration, likely a list of host dictionaries with credentials
 
60
 
61
  # If no hosts are available after filtering, raise an exception to indicate resource exhaustion
62
  if not available_hosts: # Check if the filtered list of hosts is empty
63
+ raise gr.Error("The server is currently busy. Please wait a moment or try again later", duration=5, title="INFO")
64
+ # Inform user of service unavailability
65
 
66
  # Randomly select one host from the list of available hosts to distribute load evenly
67
  selected = random.choice(available_hosts) # Choose a host at random to avoid bias in host selection
src/utils/tools.py CHANGED
@@ -4,6 +4,7 @@
4
  #
5
 
6
  import random # Import random module to enable random selection from a list
 
7
  from datetime import datetime # Import datetime class to work with current UTC time
8
  from config import auth # Import authentication configuration, likely a list of host dictionaries with credentials
9
  from src.utils.helper import busy, mark # Import 'busy' dictionary and 'mark' function to track and update host busy status
@@ -39,7 +40,8 @@ def initialize_tools():
39
 
40
  # Raise an exception if no hosts are currently available
41
  if not available:
42
- raise Exception("No available hosts to initialize tools.")
 
43
 
44
  # Randomly select one host from the available list
45
  selected = random.choice(available)
@@ -55,7 +57,8 @@ def initialize_tools():
55
 
56
  # Verify that all required tool endpoints are present, raise exception if any is missing
57
  if not tool_setup or not image_tool or not audio_tool or not poll_token:
58
- raise Exception("Selected host is missing required tool endpoints.")
 
59
 
60
  # Return the three tool endpoints as a tuple
61
  return tool_setup, image_tool, audio_tool, poll_token
 
4
  #
5
 
6
  import random # Import random module to enable random selection from a list
7
+ import gradio as gr # Import the Gradio library to build interactive web interfaces for machine learning applications
8
  from datetime import datetime # Import datetime class to work with current UTC time
9
  from config import auth # Import authentication configuration, likely a list of host dictionaries with credentials
10
  from src.utils.helper import busy, mark # Import 'busy' dictionary and 'mark' function to track and update host busy status
 
40
 
41
  # Raise an exception if no hosts are currently available
42
  if not available:
43
+ raise gr.Error("The server is currently busy. Please wait a moment or try again later", duration=5, title="INFO")
44
+ # Inform user of service unavailability
45
 
46
  # Randomly select one host from the available list
47
  selected = random.choice(available)
 
57
 
58
  # Verify that all required tool endpoints are present, raise exception if any is missing
59
  if not tool_setup or not image_tool or not audio_tool or not poll_token:
60
+ raise gr.Error("The server is currently busy. Please wait a moment or try again later", duration=5, title="INFO")
61
+ # Inform user of service unavailability
62
 
63
  # Return the three tool endpoints as a tuple
64
  return tool_setup, image_tool, audio_tool, poll_token