|
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 |
|
|
|
|
|
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: |
|
|
|
if isinstance(image, np.ndarray): |
|
image = Image.fromarray(image.astype('uint8'), 'RGB') |
|
|
|
|
|
buffered = BytesIO() |
|
image.save(buffered, format="PNG") |
|
img_str = base64.b64encode(buffered.getvalue()).decode() |
|
|
|
|
|
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} |
|
] |
|
|
|
|
|
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, |
|
) |
|
|
|
|
|
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() |