Spaces:
Running
Running
File size: 3,211 Bytes
7efd637 ca8dc25 4c02c40 7efd637 ca8dc25 7efd637 ca8dc25 5e6f5c8 b13161d ca8dc25 4c02c40 ca8dc25 b13161d ca8dc25 b13161d ca8dc25 b13161d ca8dc25 b13161d ca8dc25 b13161d ca8dc25 b13161d ca8dc25 5e6f5c8 b13161d 7efd637 5e6f5c8 ca8dc25 5e6f5c8 b13161d 5e6f5c8 b13161d 7efd637 b13161d 7efd637 5e6f5c8 b13161d 5e6f5c8 ca8dc25 5e6f5c8 7efd637 5e6f5c8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import gradio as gr
import os
from together import Together
import base64
from io import BytesIO
from PIL import Image
import numpy as np
# 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
messages = [
{"role": "system", "content": "You are an AI assistant that can analyze wireframe images and generate Gradio code based on their content."},
{"role": "user", "content": [
{"type": "image_url", "image_url": f"data:image/png;base64,{img_str}"},
{"type": "text", "text": "Analyze this wireframe image and generate Python code using Gradio that could recreate the main elements seen in the image. Use Gradio components that best represent the UI elements in the wireframe."}
]}
]
# Make the API call
response = client.chat.completions.create(
model="meta-llama/Llama-Vision-Free",
messages=messages,
max_tokens=512,
temperature=0.7,
top_p=0.7,
top_k=50,
repetition_penalty=1,
stop=["<|eot_id|>", "<|eom_id|>"],
stream=True
)
# Collect the streamed response
generated_code = ""
for chunk in response:
if chunk.choices[0].delta.content is not None:
generated_code += chunk.choices[0].delta.content
return generated_code
except Exception as e:
return f"An error occurred: {str(e)}"
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():
image_input = gr.Image(label="Upload a screenshot", elem_id="image_upload")
example_link = gr.Markdown("Need an example image? [Try ours](https://example.com/wireframe.png).")
model_dropdown = gr.Dropdown(
choices=["Llama-Vision-Free"],
value="Llama-Vision-Free",
label="AI Model"
)
generate_button = gr.Button("Generate Gradio app", variant="primary")
code_output = gr.Code(language="python", label="Generated Gradio Code", lines=20)
generate_button.click(
fn=generate_gradio_app,
inputs=[image_input],
outputs=[code_output]
)
demo.launch() |