iarbel's picture
Add application file
4f7fb1b
raw
history blame
No virus
2.99 kB
import gradio as gr
import pandas as pd
from bs4 import BeautifulSoup
from typing import Tuple
import src.few_shot_funcs as fsf
import src.scrape as scrape
def asin_to_pdp(asin_or_url: str) -> dict:
if isinstance(asin_or_url, str) and len(asin_or_url) == 10:
asin_url = 'https://www.amazon.com/dp/' + asin_or_url
elif fsf.check_url_structure(asin_or_url):
asin_url = asin_or_url
else:
raise gr.Error('You must provide a valid ASIN (10 char code) or URL')
html = scrape.zyte_call(asin_url)
asin_pdp = scrape.get_asin_pdp(BeautifulSoup(html, features="lxml"))
return asin_pdp
def generate_bullets(title: str, tech_data: gr.DataFrame) -> str:
tech_str = fsf.format_tech_as_str(tech_data)
feature_bullets = fsf.generate_data(title=title, tech_process=tech_str,
few_shot_df=fsf.FS_DS, vector_db=fsf.DB)
return feature_bullets
def asin_comparison(asin_or_url: str) -> Tuple[str, str]:
asin_pdp = asin_to_pdp(asin_or_url)
input_title = asin_pdp.get('title')
tech_details = pd.DataFrame([(k, v) for k, v in asin_pdp.get('tech_data').items()])
feature_bullets = generate_bullets(input_title, tech_details)
comparison_bullets = "## Original Bullets\n- " + '\n- '.join(asin_pdp.get('feature_bullets'))
return feature_bullets, comparison_bullets
demo = gr.Blocks()
with demo:
gr.Markdown(
"""
### Generate Product Feature-Bullets!
Input ASIN or data below
"""
)
with gr.Tab("Input ASIN"):
with gr.Row():
asin_input = gr.Textbox(type="text", label="Enter Product ASIN / URL")
with gr.Row():
clear_button = gr.ClearButton(components=asin_input,
value='Clear', variant='primary')
gen_button = gr.Button("Generate!")
with gr.Row():
output = gr.Markdown()
comparison_output = gr.Markdown()
gen_button.click(fn=asin_comparison, inputs=asin_input,
outputs=[output, comparison_output], show_progress=True)
with gr.Tab("Input Data"):
with gr.Row():
title_input = gr.Textbox(type="text", label="Enter Product Title")
tech_input = gr.Dataframe(label='Enter Technical Details',
headers=["Feature", "Value"],
datatype=["str", "str"],
row_count=(2, "dynamic"),
col_count=(2, "static"),
)
with gr.Row():
clear_button = gr.ClearButton(components=[title_input, tech_input],
value='Clear', variant='primary')
gen_button = gr.Button("Generate!")
output = gr.Markdown()
gen_button.click(fn=generate_bullets, inputs=[title_input, tech_input], outputs=output,
show_progress=True)
demo.launch()