"""
Consumer Agent Gradio Application
Web interface for the Consumer Agent - Personal Concierge
"""
import gradio as gr
import asyncio
import logging
from .consumer_agent import ConsumerAgent
class ConsumerApp:
"""Gradio web application for Consumer Agent."""
def __init__(self):
self.agent = ConsumerAgent()
self.conversation_history = []
# Set up logging
logging.basicConfig(level=logging.INFO)
# Create the interface
self.interface = self._create_interface()
def _create_interface(self):
"""Create the Gradio interface."""
with gr.Blocks(
title="π₯ Consumer Agent - Secure AI Suite",
theme=gr.themes.Soft(
primary_hue="green",
secondary_hue="gray",
neutral_hue="slate"
),
css="""
.container { max-width: 1200px; margin: auto; }
.chatbot { height: 500px; }
.status-card { background: linear-gradient(90deg, #4facfe 0%, #00f2fe 100%); color: white; }
.tool-card { border: 2px solid #e2e8f0; border-radius: 8px; padding: 12px; margin: 8px 0; }
"""
) as app:
# Header
gr.HTML("""
π₯ Consumer Agent
Your Personal Concierge & Travel Assistant
π Secure AI Agents Suite
""")
with gr.Row():
# Left column - Chat interface
with gr.Column(scale=2):
gr.HTML("π¬ Chat with Consumer Agent
")
chatbot = gr.Chatbot(
label="Personal Concierge Assistant",
height=400,
elem_classes=["chatbot"],
avatar_images=(None, "π₯")
)
with gr.Row():
msg_input = gr.Textbox(
placeholder="Ask me about trip planning, reminders, document summaries...",
lines=3,
max_lines=5,
label="Your Message"
)
with gr.Column(scale=0):
send_btn = gr.Button("Send", variant="primary")
clear_btn = gr.Button("Clear", variant="secondary")
# Right column - Tools and Quick Actions
with gr.Column(scale=1):
gr.HTML("π οΈ Available Services
")
tools_info = gr.HTML("""
""")
gr.HTML("π System Status
")
status_display = gr.HTML()
# Event handlers
def user(user_message, history):
"""Handle user input."""
if not user_message.strip():
return history, ""
# Add user message to history
history.append((user_message, None))
return history, ""
async def bot_response(history, user_message):
"""Generate bot response."""
if not user_message.strip():
return history
# Get response from agent
response = await self.agent.handle_user_input(user_message)
# Add bot response to history
history[-1] = (user_message, response)
return history
def clear_conversation():
"""Clear conversation history."""
return []
def update_status():
"""Update status display."""
status = self.agent.get_status()
return f"""
β
System Status
Agent: {status['name']}
Status: {status['status']}
Security: {'π‘οΈ Enabled' if status['security_enabled'] else 'β Disabled'}
Audit Logging: {'π Enabled' if status['audit_logging'] else 'β Disabled'}
Services: {', '.join(status['tools'][:3])}...
"""
# Connect events
send_btn.click(
user,
inputs=[msg_input, chatbot],
outputs=[chatbot, msg_input]
).then(
bot_response,
inputs=[chatbot, msg_input],
outputs=[chatbot]
)
msg_input.submit(
user,
inputs=[msg_input, chatbot],
outputs=[chatbot, msg_input]
).then(
bot_response,
inputs=[chatbot, msg_input],
outputs=[chatbot]
)
clear_btn.click(clear_conversation, outputs=chatbot)
# Initial status update
app.load(update_status, outputs=status_display)
return app
def launch(self, **kwargs):
"""Launch the Gradio application."""
self.interface.launch(
server_name="0.0.0.0",
server_port=7861,
share=False,
show_error=True,
quiet=False,
**kwargs
)
# Example usage and quick commands
EXAMPLE_QUERIES = [
"Plan a trip to Pokhara next week with medium budget",
"Remind me to call mom tomorrow at 3 PM",
"Summarize this email about project deadlines",
"What's the weather like in Kathmandu?",
"Search for hotels in Delhi for December",
"Show my travel itinerary for TRP001"
]
def main():
"""Main function to run the Consumer Agent app."""
print("π₯ Starting Consumer Agent...")
print("πΊοΈ Loading trip planning services...")
print("β° Setting up reminder system...")
print("π Initializing document processor...")
app = ConsumerApp()
print("\n" + "="*60)
print("π₯ CONSUMER AGENT - PERSONAL CONCIERGE")
print("="*60)
print("\nπ‘ Example requests you can try:")
for i, query in enumerate(EXAMPLE_QUERIES, 1):
print(f" {i}. {query}")
print("\nπ Starting Gradio server...")
print("π Open your browser to: http://localhost:7861")
print("\n" + "="*60)
app.launch()
if __name__ == "__main__":
main()