File size: 2,923 Bytes
7ec874f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
91
92
93
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# Load the Phi-3.5-mini-instruct model and tokenizer
model_name = "phi-3.5-mini-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Simple HTML template for the website
simple_website_template = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Personalized Website</title>
    <style>
        body {{
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            color: #333;
            padding: 20px;
        }}
        h1 {{
            color: {title_color};
        }}
        p {{
            font-size: {font_size}px;
        }}
    </style>
</head>
<body>
    <h1>{title}</h1>
    <p>{content}</p>
</body>
</html>
"""

# Function to generate personalized content using Phi-3.5-mini-instruct
def personalize_website_llm(persona_text):
    # Create a prompt for the model
    prompt = f"Generate personalized website content for the following persona: {persona_text}. Provide a title and main content."
    
    # Tokenize and generate output
    inputs = tokenizer(prompt, return_tensors="pt")
    outputs = model.generate(inputs.input_ids, max_length=150)
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    
    # Split the response into a title and content
    title, content = generated_text.split('\n', 1)
    
    # Set the title color and font size based on simple heuristics
    title_color = "#333"
    font_size = 16

    if "young" in persona_text.lower():
        title_color = "#ff5733"
        font_size = 18

    if "professional" in persona_text.lower():
        title_color = "#1c1c1c"
        font_size = 14

    # Create the personalized website HTML
    personalized_website = simple_website_template.format(
        title_color=title_color,
        font_size=font_size,
        title=title.strip(),
        content=content.strip()
    )
    
    return personalized_website

# Create the Gradio interface
with gr.Blocks() as demo:
    with gr.Row():
        with gr.Column():
            gr.HTML('<h3>Original Simple Website</h3>')
            gr.HTML(simple_website_template.format(title_color="#333", font_size=16, title="Welcome to Our Website!", content="We are glad to have you here."))
        
        with gr.Column():
            persona_input = gr.Textbox(label="Define Persona", placeholder="Describe the persona here...")
            generate_button = gr.Button("Generate Personalized Website")
        
        with gr.Column():
            personalized_output = gr.HTML(label="Personalized Website Output")
    
    generate_button.click(personalize_website_llm, inputs=persona_input, outputs=personalized_output)

# Launch the app
demo.launch()