iarbel's picture
emoji code
7de12b3
raw
history blame contribute delete
No virus
3.4 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, 'html.parser'))
if not asin_pdp:
raise gr.Error('Input URL not found (404)')
elif not asin_pdp.get('title') or not asin_pdp.get('tech_data'):
raise gr.Error("Couldn't fetch title or technical details from input URL")
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 an Amazon ASIN or product URL (amazon.com URL only), or you can input your own data - a short title and techincal details\n
- Hit "Generate" and watch the AI engine do its magic 🪄 🪄
"""
)
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()