import os
import uuid
import base64
import tempfile
from typing import Dict, List, Optional, Tuple
import gradio as gr
# Import from our modularized files
from config import (
AVAILABLE_MODELS, DEFAULT_MODEL, THEME_CONFIGS, DEMO_LIST,
HTML_SYSTEM_PROMPT, get_saved_theme, save_theme_preference
)
from utils import (
get_inference_client, remove_code_block, extract_text_from_file,
create_multimodal_message, apply_search_replace_changes,
cleanup_all_temp_media, reap_old_media, get_gradio_language
)
from web_utils import extract_website_content, enhance_query_with_search
from media_generation import (
generate_image_with_qwen, generate_image_to_image, generate_video_from_image,
generate_video_from_text, generate_music_from_text
)
from code_processing import (
is_streamlit_code, is_gradio_code, extract_html_document,
parse_transformers_js_output, format_transformers_js_output, build_transformers_inline_html,
parse_svelte_output, format_svelte_output,
parse_multipage_html_output, format_multipage_output,
validate_and_autofix_files, inline_multipage_into_single_preview,
apply_generated_media_to_html
)
from sandbox import send_to_sandbox, send_streamlit_to_stlite, send_gradio_to_lite
from generation_engine import generation_code
# Initialize theme
current_theme_name = get_saved_theme()
current_theme = THEME_CONFIGS[current_theme_name]["theme"]
# =============================================================================
# PROFESSIONAL UI FUNCTIONS
# =============================================================================
def get_model_info_html(model):
"""Generate HTML for model information"""
vision_badge = '👁️ Vision' if model.get('supports_vision') else ''
category_color = {
'General': '#3b82f6',
'Code Specialist': '#10b981',
'Vision-Language': '#f59e0b',
'Premium': '#8b5cf6'
}.get(model.get('category', 'General'), '#6b7280')
return f"""
{model['name']}
{model.get('category', 'General')}
{model.get('description', '')}
{vision_badge}
🚀 Latest
"""
def generate_code_stats(code, language):
"""Generate code statistics HTML"""
if not code:
return "
No code generated
"
try:
lines = len(code.split('\n'))
chars = len(code)
words = len(code.split())
# Language-specific analysis
if language == "html":
tags = len([m for m in code.split('<') if m.strip()])
stats_content = f"""
""")
with gr.Column(scale=1, min_width=200):
with gr.Row():
login_button = gr.LoginButton(scale=1, size="sm")
# Main interface
with gr.Row():
# Left sidebar - Controls
with gr.Column(scale=1, elem_classes=["sidebar"]):
# Model Selection
with gr.Group(elem_classes=["control-group"]):
gr.HTML('
🤖 AI Model
')
model_dropdown = gr.Dropdown(
choices=[f"{model['name']} ({model['category']})" for model in AVAILABLE_MODELS],
value=f"{DEFAULT_MODEL['name']} ({DEFAULT_MODEL['category']})",
label="Select Model",
container=False
)
model_info = gr.HTML(get_model_info_html(DEFAULT_MODEL))
# Project Configuration
with gr.Group(elem_classes=["control-group"]):
gr.HTML('
⚙️ Project Settings
')
language_dropdown = gr.Dropdown(
choices=[
"html", "streamlit", "gradio", "python",
"transformers.js", "svelte", "javascript", "css"
],
value="html",
label="Project Type",
container=False
)
search_toggle = gr.Checkbox(
label="🔍 Enable Web Search",
value=False,
info="Include web search for current information",
container=False
)
# Media Generation Controls
with gr.Group(elem_classes=["control-group"]):
gr.HTML('
')
quick_start_buttons = []
for i, demo in enumerate(DEMO_LIST):
btn = gr.Button(
demo["title"],
variant="secondary",
size="sm",
elem_classes=["quick-start-btn"]
)
quick_start_buttons.append(btn)
# Main content area
with gr.Column(scale=3, elem_classes=["main-content"]):
# Input area
with gr.Group(elem_classes=["input-group"]):
input_textbox = gr.Textbox(
label="What would you like to build?",
placeholder="Describe your application in detail... (e.g., 'Create a modern dashboard with charts and user management')",
lines=4,
container=False,
elem_classes=["main-input"]
)
with gr.Row():
generate_btn = gr.Button(
"🚀 Generate Application",
variant="primary",
scale=3,
size="lg",
elem_classes=["generate-btn"]
)
clear_btn = gr.Button(
"🗑️ Clear",
variant="secondary",
scale=1,
size="lg"
)
# Output area with professional tabs
with gr.Tabs(elem_classes=["output-tabs"]):
# Preview Tab
with gr.Tab("🖥️ Live Preview"):
preview_controls = gr.HTML("""