import gradio as gr import modelscope_studio.components.antd as antd import modelscope_studio.components.base as ms import modelscope_studio.components.pro as pro with gr.Blocks() as demo, ms.Application(), antd.ConfigProvider(): pro.WebSandbox(value={ "./index.tsx": """import Demo from './demo.tsx' import "@tailwindcss/browser" export default Demo """, "./demo.tsx": """import { useState, useEffect } from 'react'; export default function App() { const [messages, setMessages] = useState([ { id: 1, sender: 'ai', content: 'Hello! I am your AI assistant. How can I help you today?', timestamp: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) }, ]); const [inputValue, setInputValue] = useState(''); const [isTyping, setIsTyping] = useState(false); const [darkMode, setDarkMode] = useState(false); // Simulate AI typing effect const handleSendMessage = () => { if (inputValue.trim() === '') return; const userMessage = { id: messages.length + 1, sender: 'user', content: inputValue, timestamp: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }), }; setMessages((prev) => [...prev, userMessage]); setInputValue(''); setIsTyping(true); // Simulate AI response after delay setTimeout(() => { const aiResponse = { id: messages.length + 2, sender: 'ai', content: 'I am processing your request and will respond shortly.', timestamp: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }), }; setMessages((prev) => [...prev, aiResponse]); setIsTyping(false); }, 1500); }; // Handle Enter key press const handleKeyPress = (e) => { if (e.key === 'Enter') { handleSendMessage(); } }; // Toggle dark mode const toggleDarkMode = () => { setDarkMode(!darkMode); }; useEffect(() => { const app = document.documentElement; if (darkMode) { app.classList.add('dark'); } else { app.classList.remove('dark'); } }, [darkMode]); return (
{/* Header */}

Chatbot

{/* Chat Area */}
{messages.map((message) => (

{message.content}

{message.timestamp}
))} {isTyping && (
)}
{/* Input Area */}
setInputValue(e.target.value)} onKeyPress={handleKeyPress} placeholder="Type a message..." className={"flex-1 px-4 py-2 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 " + (darkMode ? 'bg-gray-700 text-white placeholder-gray-400' : 'bg-gray-100 text-gray-900 placeholder-gray-500') } />
); }""" }, height=600, template="react", imports={ "@tailwindcss/browser": "https://esm.sh/@tailwindcss/browser", }) if __name__ == "__main__": demo.queue().launch()