|
|
""" |
|
|
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 = [] |
|
|
|
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
|
|
|
gr.HTML(""" |
|
|
<div style='text-align: center; padding: 20px; background: linear-gradient(90deg, #4facfe 0%, #00f2fe 100%); color: white; border-radius: 10px;'> |
|
|
<h1 style='margin: 0; font-size: 2.5em;'>π₯ Consumer Agent</h1> |
|
|
<p style='margin: 10px 0; font-size: 1.2em;'>Your Personal Concierge & Travel Assistant</p> |
|
|
<p style='margin: 0; opacity: 0.8;'>π Secure AI Agents Suite</p> |
|
|
</div> |
|
|
""") |
|
|
|
|
|
with gr.Row(): |
|
|
|
|
|
with gr.Column(scale=2): |
|
|
gr.HTML("<h3>π¬ Chat with Consumer Agent</h3>") |
|
|
|
|
|
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") |
|
|
|
|
|
|
|
|
with gr.Column(scale=1): |
|
|
gr.HTML("<h3>π οΈ Available Services</h3>") |
|
|
|
|
|
tools_info = gr.HTML(""" |
|
|
<div class="tool-card"> |
|
|
<h4>βοΈ Trip Planning</h4> |
|
|
<p>β’ Plan complete itineraries<br>β’ Search flights and hotels<br>β’ Create travel budgets</p> |
|
|
</div> |
|
|
<div class="tool-card"> |
|
|
<h4>β° Reminders & Scheduling</h4> |
|
|
<p>β’ Set personalized alerts<br>β’ Track upcoming events<br>β’ Manage to-do lists</p> |
|
|
</div> |
|
|
<div class="tool-card"> |
|
|
<h4>π Document Helper</h4> |
|
|
<p>β’ Summarize documents<br>β’ Extract key information<br>β’ Organize important papers</p> |
|
|
</div> |
|
|
<div class="tool-card"> |
|
|
<h4>π€οΈ Travel Assistant</h4> |
|
|
<p>β’ Check weather conditions<br>β’ Track expenses<br>β’ Plan activities</p> |
|
|
</div> |
|
|
""") |
|
|
|
|
|
gr.HTML("<h3>π System Status</h3>") |
|
|
status_display = gr.HTML() |
|
|
|
|
|
|
|
|
def user(user_message, history): |
|
|
"""Handle user input.""" |
|
|
if not user_message.strip(): |
|
|
return 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 |
|
|
|
|
|
|
|
|
response = await self.agent.handle_user_input(user_message) |
|
|
|
|
|
|
|
|
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""" |
|
|
<div class="status-card" style="padding: 15px; border-radius: 8px;"> |
|
|
<h4>β
System Status</h4> |
|
|
<p><strong>Agent:</strong> {status['name']}</p> |
|
|
<p><strong>Status:</strong> {status['status']}</p> |
|
|
<p><strong>Security:</strong> {'π‘οΈ Enabled' if status['security_enabled'] else 'β Disabled'}</p> |
|
|
<p><strong>Audit Logging:</strong> {'π Enabled' if status['audit_logging'] else 'β Disabled'}</p> |
|
|
<p><strong>Services:</strong> {', '.join(status['tools'][:3])}...</p> |
|
|
</div> |
|
|
""" |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
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_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() |