File size: 2,794 Bytes
7efd637
ca8dc25
 
 
 
7efd637
ca8dc25
 
 
7efd637
ca8dc25
 
 
 
 
5e6f5c8
ca8dc25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5e6f5c8
 
 
 
7efd637
5e6f5c8
 
 
ca8dc25
5e6f5c8
 
ca8dc25
 
5e6f5c8
 
 
 
7efd637
ca8dc25
7efd637
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
import gradio as gr
import os
from together import Together
import base64
from io import BytesIO

# 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_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 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 React 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 React code with Tailwind CSS classes that could recreate the main elements seen in the image."}
            ]}
        ]
        
        # Make the API call
        response = client.chat.completions.create(
            model="meta-llama/Llama-2-70b-chat",
            messages=messages,
            max_tokens=1024,
            temperature=0.7,
            top_p=0.7,
            top_k=50,
            repetition_penalty=1,
            stop=["<|im_end|>"]
        )
        
        # Extract the generated code from the response
        generated_code = response.choices[0].message.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 an app")
    gr.Markdown("Upload an image of your website design and we'll build it for you with React + Tailwind.")
    
    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 2 70B Vision"],
                value="Llama 2 70B Vision",
                label="AI Model"
            )
            
            generate_button = gr.Button("Generate app", variant="primary")
    
    code_output = gr.Code(language="javascript", label="Generated React Code", lines=10)
    
    generate_button.click(
        fn=generate_app,
        inputs=[image_input],
        outputs=[code_output]
    )

demo.launch()