drietsch's picture
Update app.py
43775ca verified
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
# Set the random seed for reproducibility
torch.random.manual_seed(0)
# Load the model and tokenizer with pinned revision
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3.5-mini-instruct",
device_map="auto",
torch_dtype="auto",
trust_remote_code=True,
revision="main", # Pin the revision for stability
attn_implementation="eager" # Use eager attention implementation if flash-attention is not installed
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3.5-mini-instruct")
# Set up the pipeline
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
)
# Define the generation arguments
generation_args = {
"max_new_tokens": 150,
"return_full_text": False,
"temperature": 0.7,
"do_sample": False,
}
# 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):
# Construct the conversation history
messages = [
{"role": "system", "content": "You are a helpful AI assistant that personalizes content for websites."},
{"role": "user", "content": f"Persona: {persona_text}. Generate a personalized website content including a title and a paragraph."},
]
# Generate content using the pipeline
output = pipe(messages, **generation_args)
generated_text = output[0]['generated_text'].strip()
# Simple heuristic to split title and content
lines = generated_text.split('\n')
title = lines[0]
content = "\n".join(lines[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,
content=content
)
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()