abdalasabry / app.py
abdullah2's picture
Update app.py
e960744 verified
# -*- coding: utf-8 -*-
"""Untitled31 (2).ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1jx1zW74zl2vFolee01ukC1b11uyTJDZ4
"""
import os
from datasets import load_dataset
# download dataset
dataset = load_dataset("neuralwork/fashion-style-instruct")
print(dataset)
# print a sample triplet
print(dataset["train"][0])
def format_instruction(sample):
return f"""You are a personal stylist recommending fashion advice and clothing combinations. Use the self body and style description below, combined with the event described in the context to generate 5 self-contained and complete outfit combinations.
### Input:
{sample["input"]}
### Context:
{sample["context"]}
### Response:
{sample["completion"]}
"""
sample = dataset["train"][0]
print(format_instruction(sample))
import os
import random
import torch
import gradio as gr
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
events = [
"nature retreat",
"work / office event",
"wedding as a guest",
"tropical vacation",
"conference",
"sports event",
"winter vacation",
"beach",
"play / concert",
"picnic",
"night club",
"national parks",
"music festival",
"job interview",
"city tour",
"halloween party",
"graduation",
"gala / exhibition opening",
"fancy date",
"cruise",
"casual gathering",
"concert",
"cocktail party",
"casual date",
"business meeting",
"camping / hiking",
"birthday party",
"bar",
"business lunch",
"bachelorette / bachelor party",
"semi-casual event",
]
def format_instruction(input, context):
return f"""You are a personal stylist recommending fashion advice and clothing combinations. Use the self body and style description below, combined with the event described in the context to generate 5 self-contained and complete outfit combinations.
### Input:
{input}
### Context:
I'm going to a {context}.
### Response:
"""
def main():
# load base LLM model, LoRA params and tokenizer
model = AutoPeftModelForCausalLM.from_pretrained(
"neuralwork/mistral-7b-style-instruct",
low_cpu_mem_usage=True,
torch_dtype=torch.float16,
load_in_4bit=True,
)
tokenizer = AutoTokenizer.from_pretrained("neuralwork/mistral-7b-style-instruct")
def postprocess(outputs, prompt):
outputs = outputs.detach().cpu().numpy()
output = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
output = output[len(prompt) :]
return output
def generate(
prompt: str,
event: str,
):
torch.manual_seed(1347)
prompt = format_instruction(str(prompt), str(event))
input_ids = tokenizer(
prompt, return_tensors="pt", truncation=True
).input_ids.cuda()
with torch.inference_mode():
outputs = model.generate(
input_ids=input_ids,
max_new_tokens=1500,
min_new_tokens=10,
do_sample=True,
top_p=0.9,
temperature=.9,
)
output = postprocess(outputs, prompt)
return output
with gr.Blocks() as demo:
gr.HTML(
"""
<h1 style="font-weight: 900; margin-bottom: 7px;">
Instruct Fine-tune Mistral-7B-v0
</h1>
<p>Mistral-7B-v0 fine-tuned on the <a href="https://huggingface.co/datasets/neuralwork/fashion-style-instruct">neuralwork/style-instruct</a> dataset.
To use the model, simply describe your body type and personal style and select the type of event you're planning to go.
<br/>
See our <a href="https://neuralwork.ai/">blog post</a> for a detailed tutorial to fine-tune Mistral on your own dataset.
<p/>"""
)
with gr.Row():
with gr.Column(scale=1):
prompt = gr.Textbox(
lines=4,
label="Style prompt, describe your body type and fashion style.",
interactive=True,
value="I'm an above average height athletic woman with slightly of broad shoulders and a medium sized bust. I generally prefer a casual but sleek look with dark colors and jeans.",
)
event = gr.Dropdown(
choices=events, value="semi-casual event", label="Event type"
)
generate_button = gr.Button("Get outfit suggestions")
with gr.Column(scale=2):
response = gr.Textbox(
lines=6, label="Outfit suggestions", interactive=False
)
gr.Markdown("From [neuralwork](https://neuralwork.ai/) with :heart:")
generate_button.click(
fn=generate,
inputs=[
prompt,
event,
],
outputs=response,
)
demo.launch(share=True)
if __name__ == "__main__":
main()