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""" data:image/png;base64,{img_str} 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()