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() | |