File size: 9,637 Bytes
2ec0d39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
"""
Creative Agent Gradio Application
Web interface for the Creative Agent - Content Creation Studio
"""

import gradio as gr
import asyncio
import logging
from .creative_agent import CreativeAgent


class CreativeApp:
    """Gradio web application for Creative Agent."""
    
    def __init__(self):
        self.agent = CreativeAgent()
        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="🎨 Creative Agent - Secure AI Suite",
            theme=gr.themes.Soft(
                primary_hue="purple",
                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; }
            .preview-box { border: 2px dashed #cbd5e0; padding: 20px; text-align: center; background: #f7fafc; }
            """
        ) 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;'>🎨 Creative Agent</h1>
                <p style='margin: 10px 0; font-size: 1.2em;'>Content Creation Studio & Bilingual Assets</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 Creative Agent</h3>")
                    
                    chatbot = gr.Chatbot(
                        label="Creative Content Assistant",
                        height=400,
                        elem_classes=["chatbot"],
                        avatar_images=(None, "🎨")
                    )
                    
                    with gr.Row():
                        msg_input = gr.Textbox(
                            placeholder="Ask me to create carousels, scripts, brand content, or bilingual materials...",
                            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 - Creative Tools and Preview
                with gr.Column(scale=1):
                    gr.HTML("<h3>πŸ› οΈ Creative Services</h3>")
                    
                    tools_info = gr.HTML("""
                    <div class="tool-card">
                        <h4>πŸ“± Content Carousels</h4>
                        <p>β€’ Bilingual presentations<br>β€’ Social media slides<br>β€’ Product showcases</p>
                    </div>
                    <div class="tool-card">
                        <h4>πŸ“ Script Writing</h4>
                        <p>β€’ Commercial scripts<br>β€’ Video narratives<br>β€’ Presentation content</p>
                    </div>
                    <div class="tool-card">
                        <h4>🏒 Brand Content</h4>
                        <p>β€’ Brand guidelines<br>β€’ Logo packages<br>β€’ Marketing materials</p>
                    </div>
                    <div class="tool-card">
                        <h4>🌐 Bilingual Support</h4>
                        <p>β€’ English ↔ Nepali<br>β€’ Cultural adaptation<br>β€’ Localized content</p>
                    </div>
                    """)
                    
                    gr.HTML("<h3>πŸ“Š System Status</h3>")
                    status_display = gr.HTML()
                    
                    gr.HTML("<h3>🎨 Creative Preview</h3>")
                    preview_box = gr.HTML("""
                    <div class="preview-box">
                        <h4>🎨 Latest Creation</h4>
                        <p>Ready to create your next masterpiece!</p>
                        <p><em>Content will appear here after generation</em></p>
                    </div>
                    """)
            
            # 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)
                
                # Update preview box with latest creation
                if "Created" in response or "Generated" in response or "Package" in response:
                    preview_html = f"""
                    <div class="preview-box">
                        <h4>🎨 Latest Creation</h4>
                        <div style="max-height: 200px; overflow-y: auto; font-size: 0.9em; margin-top: 10px;">
                        {response.replace(chr(10), '<br>')}
                        </div>
                    </div>
                    """
                    return history, preview_html
                
                return history, """<div class="preview-box"><h4>🎨 Ready for Creation</h4><p>Ask me to create content and I'll show you the results here!</p></div>"""
            
            def clear_conversation():
                """Clear conversation history."""
                return [], """<div class="preview-box"><h4>🎨 Canvas Clean</h4><p>Ready for your next creative project!</p></div>"""
            
            def update_status():
                """Update status display."""
                status = self.agent.get_status()
                return f"""
                <div class="status-card" style="padding: 15px; border-radius: 8px;">
                    <h4>βœ… Creative Status</h4>
                    <p><strong>Agent:</strong> {status['name']}</p>
                    <p><strong>Status:</strong> {status['status']}</p>
                    <p><strong>Languages:</strong> English, Nepali, Bilingual</p>
                    <p><strong>Services:</strong> Content, Scripts, Assets</p>
                    <p><strong>Security:</strong> {'πŸ›‘οΈ Enabled' if status['security_enabled'] else '❌ Disabled'}</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, preview_box]
            )
            
            msg_input.submit(
                user,
                inputs=[msg_input, chatbot],
                outputs=[chatbot, msg_input]
            ).then(
                bot_response,
                inputs=[chatbot, msg_input],
                outputs=[chatbot, preview_box]
            )
            
            clear_btn.click(clear_conversation, outputs=[chatbot, preview_box])
            
            # 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=7862,
            share=False,
            show_error=True,
            quiet=False,
            **kwargs
        )


# Example usage and quick commands
EXAMPLE_QUERIES = [
    "Create a 5-slide carousel about our new product in English and Nepali",
    "Write a 60-second commercial script for a tech startup",
    "Design brand guidelines for 'TechCorp Nepal'",
    "Translate 'Hello, welcome to our website' to Nepali",
    "Package logo assets in high resolution",
    "Create a content calendar for social media"
]


def main():
    """Main function to run the Creative Agent app."""
    print("🎨 Starting Creative Agent...")
    print("🎭 Loading content creation tools...")
    print("🌐 Initializing bilingual services...")
    print("πŸ“¦ Preparing asset generation...")
    
    app = CreativeApp()
    
    print("\n" + "="*60)
    print("🎨 CREATIVE AGENT - CONTENT CREATION STUDIO")
    print("="*60)
    print("\nπŸ’‘ Example creative 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:7862")
    print("\n" + "="*60)
    
    app.launch()


if __name__ == "__main__":
    main()