Spaces:
Running
on
Zero
Running
on
Zero
| """ | |
| Enterprise Agent Gradio Application | |
| Web interface for the Enterprise Agent | |
| """ | |
| import gradio as gr | |
| import asyncio | |
| import logging | |
| from .enterprise_agent import EnterpriseAgent | |
| class EnterpriseApp: | |
| """Gradio web application for Enterprise Agent.""" | |
| def __init__(self): | |
| self.agent = EnterpriseAgent() | |
| 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="π’ Enterprise Agent - Secure AI Suite", | |
| theme=gr.themes.Soft( | |
| primary_hue="blue", | |
| secondary_hue="gray", | |
| neutral_hue="slate" | |
| ), | |
| css=""" | |
| .container { max-width: 1200px; margin: auto; } | |
| .chatbot { height: 500px; } | |
| .status-card { background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); color: white; } | |
| .tool-card { border: 2px solid #e2e8f0; border-radius: 8px; padding: 12px; margin: 8px 0; } | |
| """ | |
| ) as app: | |
| # Header | |
| gr.HTML(""" | |
| <div style='text-align: center; padding: 20px; background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); color: white; border-radius: 10px;'> | |
| <h1 style='margin: 0; font-size: 2.5em;'>π’ Enterprise Agent</h1> | |
| <p style='margin: 10px 0; font-size: 1.2em;'>Automate CRM, Tickets & Calendar with AI</p> | |
| <p style='margin: 0; opacity: 0.8;'>π Secure AI Agents Suite</p> | |
| </div> | |
| """) | |
| with gr.Row(): | |
| # Left column - Chat interface | |
| with gr.Column(scale=2): | |
| gr.HTML("<h3>π¬ Chat with Enterprise Agent</h3>") | |
| chatbot = gr.Chatbot( | |
| label="Enterprise Assistant", | |
| height=400, | |
| elem_classes=["chatbot"], | |
| avatar_images=(None, "π’") | |
| ) | |
| with gr.Row(): | |
| msg_input = gr.Textbox( | |
| placeholder="Ask me about CRM updates, ticket creation, or calendar scheduling...", | |
| 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 Status | |
| with gr.Column(scale=1): | |
| gr.HTML("<h3>π οΈ Available Tools</h3>") | |
| tools_info = gr.HTML(""" | |
| <div class="tool-card"> | |
| <h4>ποΈ CRM Operations</h4> | |
| <p>β’ Update customer information<br>β’ Search contacts and accounts<br>β’ Modify customer records</p> | |
| </div> | |
| <div class="tool-card"> | |
| <h4>π« Support Tickets</h4> | |
| <p>β’ Create support tickets<br>β’ Set priority levels<br>β’ Categorize issues</p> | |
| </div> | |
| <div class="tool-card"> | |
| <h4>π Calendar Management</h4> | |
| <p>β’ Schedule meetings<br>β’ Manage appointments<br>β’ View calendar events</p> | |
| </div> | |
| """) | |
| gr.HTML("<h3>π System Status</h3>") | |
| 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""" | |
| <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>Tools:</strong> {', '.join(status['tools'])}</p> | |
| </div> | |
| """ | |
| # 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=7860, | |
| share=False, | |
| show_error=True, | |
| quiet=False, | |
| **kwargs | |
| ) | |
| # Example usage and quick commands | |
| EXAMPLE_QUERIES = [ | |
| "Update customer 001 email to newemail@company.com", | |
| "Create ticket about login issues - high priority", | |
| "Schedule team meeting for tomorrow at 2 PM", | |
| "Search for john contacts", | |
| "Show calendar events for today", | |
| "Check system status" | |
| ] | |
| def main(): | |
| """Main function to run the Enterprise Agent app.""" | |
| print("π’ Starting Enterprise Agent...") | |
| print("π‘ Connecting to MCP servers...") | |
| print("π‘οΈ Security middleware initialized") | |
| print("π§ Available tools: CRM, Tickets, Calendar") | |
| app = EnterpriseApp() | |
| print("\n" + "="*60) | |
| print("π’ ENTERPRISE AGENT - SECURE AI SUITE") | |
| print("="*60) | |
| print("\nπ‘ Example queries 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:7860") | |
| print("\n" + "="*60) | |
| app.launch() | |
| if __name__ == "__main__": | |
| main() |