Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import requests | |
| import os | |
| MODELS = [ | |
| "Qwen/Qwen2.5-1.5B-Instruct", | |
| "Qwen/Qwen2.5-0.5B-Instruct", | |
| "microsoft/phi-2", | |
| "TinyLlama/TinyLlama-1.1B-Chat-v1.0" | |
| ] | |
| def generate_flutter_code(prompt, api_token=None): | |
| if not api_token: | |
| api_token = os.getenv("HF_TOKEN") | |
| if not api_token: | |
| return "β Hugging Face API token is required." | |
| enhanced_prompt = f""" | |
| You are an expert Flutter/Dart developer. | |
| Task: | |
| Generate clean, production-ready Flutter/Dart code. | |
| Requirements: | |
| - Proper widget structure | |
| - Clear state management | |
| - Comments for complex logic | |
| - Error handling | |
| - Best practices | |
| User request: | |
| {prompt} | |
| Return ONLY Dart code. | |
| """ | |
| headers = { | |
| "Authorization": f"Bearer {api_token}", | |
| "Content-Type": "application/json" | |
| } | |
| payload = { | |
| "inputs": enhanced_prompt, | |
| "parameters": { | |
| "max_new_tokens": 1024, | |
| "temperature": 0.2, | |
| "top_p": 0.95, | |
| "do_sample": True | |
| } | |
| } | |
| for model_id in MODELS: | |
| try: | |
| api_url = f"https://api-inference.huggingface.co/models/{model_id}" | |
| response = requests.post(api_url, headers=headers, json=payload, timeout=40) | |
| if response.status_code == 200: | |
| data = response.json() | |
| if isinstance(data, list) and "generated_text" in data[0]: | |
| return data[0]["generated_text"].strip() | |
| elif response.status_code in (503, 504): | |
| continue # model loading β try next | |
| elif response.status_code == 429: | |
| return "β οΈ Rate limit reached. Try again later." | |
| except requests.exceptions.RequestException: | |
| continue | |
| return "β All models failed. Try again later." | |
| # Gradio interface | |
| def create_interface(): | |
| with gr.Blocks(title="Flutter Code Generator") as interface: | |
| gr.HTML(""" | |
| <div class="title">π Flutter Code Generator</div> | |
| <div class="subtitle">Transform your ideas into Flutter/Dart code using AI</div> | |
| """) | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| prompt_input = gr.Textbox( | |
| label="Describe your Flutter component or feature", | |
| placeholder="e.g., Create a login form with email and password fields, validation, and submit button...", | |
| lines=6 | |
| ) | |
| api_token_input = gr.Textbox( | |
| label="Hugging Face API Token (optional)", | |
| placeholder="Enter your HF token or set HF_TOKEN env variable", | |
| type="password" | |
| ) | |
| generate_btn = gr.Button( | |
| "Generate Flutter Code β¨", | |
| variant="primary", | |
| size="lg" | |
| ) | |
| with gr.Column(scale=3): | |
| output_code = gr.Code( | |
| label="Generated Flutter/Dart Code", | |
| lines=20 | |
| ) | |
| with gr.Accordion("How to use", open=False): | |
| gr.Markdown(""" | |
| ### Getting Started | |
| 1. **Describe your component**: Write a clear description of the Flutter component you want to create | |
| 2. **API Token**: Get your token from [Hugging Face](https://huggingface.co/settings/tokens) or set `HF_TOKEN` environment variable | |
| 3. **Generate**: Click the button to generate production-ready Flutter/Dart code | |
| ### Tips for Better Results | |
| - Be specific about the UI components, layout, and functionality | |
| - Mention state management needs (e.g., "using Provider" or "using setState") | |
| - Specify styling preferences (colors, themes, responsive design) | |
| - Include error handling requirements | |
| - Mention any specific Flutter packages to use | |
| ### Example Prompts | |
| - "Create a shopping cart component with add/remove items, quantity counter, and total price calculation" | |
| - "Build a weather app screen with current conditions, 7-day forecast, and location search using Riverpod" | |
| - "Design a user profile page with avatar, edit form, and save functionality" | |
| """) | |
| # Event handling | |
| generate_btn.click( | |
| fn=generate_flutter_code, | |
| inputs=[prompt_input, api_token_input], | |
| outputs=output_code, | |
| api_name="generate_code" | |
| ) | |
| # Examples | |
| gr.Examples( | |
| examples=[ | |
| ["Create a beautiful login screen with email/password fields, remember me checkbox, and social login buttons"], | |
| ["Build a product card widget with image, title, price, rating stars, and add to cart button"], | |
| ["Design a settings page with toggle switches, dropdown menus, and theme selector"], | |
| ["Create a chat message bubble component with sender info, timestamp, and message status"], | |
| ["Build a dashboard with statistics cards, charts, and navigation drawer"] | |
| ], | |
| inputs=prompt_input, | |
| label="Example prompts to try:" | |
| ) | |
| return interface | |
| # Launch the app | |
| if __name__ == "__main__": | |
| interface = create_interface() | |
| interface.queue(max_size=10) # Enable queuing for multiple users | |
| interface.launch( | |
| server_name="0.0.0.0", | |
| server_port=int(os.getenv("PORT", 7860)), | |
| show_error=True, | |
| share=False, # Set to True for public sharing on HF Spaces | |
| theme=gr.themes.Soft(), | |
| css=""" | |
| .gradio-container { | |
| max-width: 1200px; | |
| margin: auto; | |
| } | |
| .title { | |
| text-align: center; | |
| color: #2563eb; | |
| font-size: 2.5em; | |
| font-weight: bold; | |
| margin-bottom: 1em; | |
| } | |
| .subtitle { | |
| text-align: center; | |
| color: #64748b; | |
| font-size: 1.2em; | |
| margin-bottom: 2em; | |
| } | |
| """ | |
| ) | |