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 (
{message.content}
{message.timestamp}