Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import os | |
| from together import Together | |
| import base64 | |
| from io import BytesIO | |
| from PIL import Image | |
| import numpy as np | |
| import json | |
| # Initialize the Together client | |
| api_key = os.environ.get('TOGETHER_API_KEY') | |
| client = None | |
| if api_key: | |
| try: | |
| client = Together(api_key=api_key) | |
| except Exception as e: | |
| print(f"Error initializing Together client: {e}") | |
| def generate_gradio_app(image): | |
| if not api_key or not client: | |
| return "Error: TOGETHER_API_KEY not set or client initialization failed. Please check your API key." | |
| try: | |
| # Convert numpy array to PIL Image | |
| if isinstance(image, np.ndarray): | |
| image = Image.fromarray(image.astype('uint8'), 'RGB') | |
| # Convert the image to base64 | |
| buffered = BytesIO() | |
| image.save(buffered, format="PNG") | |
| img_str = base64.b64encode(buffered.getvalue()).decode() | |
| # Prepare the messages for the API call | |
| system_message = "You are an AI assistant that can analyze wireframe images and generate detailed Gradio code based on their content." | |
| user_message = f""" | |
| <image> | |
| data:image/png;base64,{img_str} | |
| </image> | |
| Analyze this wireframe image and generate a complete Python code using Gradio that recreates all the main elements seen in the image. Provide a complete, runnable Gradio application. | |
| """ | |
| messages = [ | |
| {"role": "system", "content": system_message}, | |
| {"role": "user", "content": user_message} | |
| ] | |
| # Make the API call | |
| response = client.chat.completions.create( | |
| model="meta-llama/Llama-Vision-Free", | |
| messages=messages, | |
| max_tokens=5000, | |
| temperature=0.7, | |
| top_p=0.7, | |
| top_k=50, | |
| repetition_penalty=1, | |
| ) | |
| # Extract the generated code from the response | |
| generated_code = response.choices[0].message.content | |
| return generated_code | |
| except Exception as e: | |
| error_message = str(e) | |
| if "400" in error_message: | |
| return "Error 400: Bad Request. The API request was invalid. Please check your input and try again." | |
| elif "401" in error_message: | |
| return "Error 401: Unauthorized. Please check your API key and ensure it's correctly set." | |
| elif "429" in error_message: | |
| return "Error 429: Too Many Requests. Please wait a moment and try again." | |
| elif "500" in error_message: | |
| return "Error 500: Internal Server Error. There's an issue with the API service. Please try again later." | |
| else: | |
| return f"An unexpected error occurred: {error_message}\nPlease try again or contact support if the issue persists." | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Turn your wireframe into a Gradio app") | |
| gr.Markdown("Upload an image of your UI design and we'll build a Gradio app for you.") | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| image_input = gr.Image(label="Upload a screenshot", elem_id="image_upload") | |
| generate_button = gr.Button("Generate Gradio app", variant="primary") | |
| with gr.Column(scale=2): | |
| code_output = gr.Code(language="python", label="Generated Gradio Code", lines=30) | |
| generate_button.click( | |
| fn=generate_gradio_app, | |
| inputs=[image_input], | |
| outputs=[code_output] | |
| ) | |
| demo.launch() |