Spaces:
Build error
Build error
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() | |