|
|
|
import gradio as gr |
|
from simulator_interface import VirtualRobot |
|
from typing import Optional |
|
import logging |
|
|
|
logging.basicConfig(level=logging.INFO) |
|
|
|
class RoboSageInterface: |
|
"""Main application interface with lifecycle management.""" |
|
|
|
def __init__(self): |
|
self.robot = VirtualRobot() |
|
self.interface = self._create_interface() |
|
|
|
def _robot_response(self, user_input: str) -> str: |
|
"""Process user input with error handling.""" |
|
if not user_input or not isinstance(user_input, str): |
|
logging.warning("Invalid input received") |
|
return "β Please enter valid text" |
|
|
|
try: |
|
logging.info("Processing input: %s", user_input) |
|
return self.robot.perform_action(user_input) |
|
except Exception as e: |
|
logging.error("Response generation failed: %s", str(e)) |
|
return f"β System error: {str(e)}" |
|
|
|
def _create_interface(self) -> gr.Blocks: |
|
"""Build Gradio interface with proper component binding.""" |
|
with gr.Blocks( |
|
title="RoboSage", |
|
css=".gradio-container {max-width: 600px !important}" |
|
) as interface: |
|
|
|
|
|
gr.Markdown(""" |
|
# π€ RoboSage |
|
### Your personal virtual assistant |
|
""") |
|
|
|
|
|
with gr.Row(): |
|
with gr.Column(scale=4): |
|
self.input_box = gr.Textbox( |
|
label="Command Input", |
|
placeholder="Try 'hello' or 'say something'...", |
|
max_lines=3 |
|
) |
|
with gr.Column(scale=1): |
|
self.submit_btn = gr.Button( |
|
"Send", |
|
variant="primary", |
|
size="lg" |
|
) |
|
|
|
|
|
self.output_box = gr.Textbox( |
|
label="Robot Response", |
|
interactive=False, |
|
lines=5 |
|
) |
|
|
|
|
|
with gr.Accordion("Session History", open=False): |
|
self.history = gr.JSON( |
|
label="Command History", |
|
value={"commands": []} |
|
) |
|
|
|
|
|
self.submit_btn.click( |
|
fn=self._robot_response, |
|
inputs=self.input_box, |
|
outputs=self.output_box |
|
) |
|
|
|
self.input_box.submit( |
|
fn=self._robot_response, |
|
inputs=self.input_box, |
|
outputs=self.output_box |
|
) |
|
|
|
return interface |
|
|
|
def launch_application() -> gr.Blocks: |
|
"""Initialize and return the application interface.""" |
|
try: |
|
logging.info("Initializing RoboSage application") |
|
app = RoboSageInterface() |
|
return app.interface |
|
except Exception as e: |
|
logging.critical("Application failed to initialize: %s", str(e)) |
|
raise |
|
|
|
if __name__ == "__main__": |
|
|
|
app = launch_application() |
|
app.launch( |
|
server_name="0.0.0.0", |
|
server_port=7860, |
|
share=False, |
|
favicon_path=None, |
|
auth=None, |
|
ssl_verify=True, |
|
debug=False |
|
) |