GroupA4-fixed / app.py
Matteo08's picture
Update app.py
81d6790 verified
import gradio as gr
import pandas as pd
import matplotlib
matplotlib.use("Agg")
import requests
# Charger les artifacts si présents
try:
df_pricing = pd.read_csv("artifacts/pricing_decisions.csv")
ARTIFACTS_OK = True
except Exception:
df_pricing = pd.DataFrame()
ARTIFACTS_OK = False
def analyze_book(title, reviews_text, avg_units_sold):
if not title or not reviews_text:
return "Please enter a title and at least one review.", "", None
url = "https://matteoadam.app.n8n.cloud/webhook-test/price-decider"
payload = {
"title": title,
"reviews": reviews_text,
"avg_units_sold": avg_units_sold,
}
try:
response = requests.post(url, json=payload, timeout=30)
try:
data = response.json()
except Exception:
return (
f"Status code: {response.status_code}\nRaw response:\n{response.text}",
"Non-JSON response",
None,
)
return (
f"Status code: {response.status_code}\nParsed JSON:\n{data}",
f"Type: {type(data).__name__}",
None,
)
except Exception as e:
return f"Error: {str(e)}", "Request failed", None
with gr.Blocks(title="Book Price Decider") as app:
gr.Markdown("# Book Price Decider — Group A4")
gr.Markdown("Sentiment analysis + pricing recommendation")
with gr.Tabs():
with gr.Tab("Dashboard"):
if ARTIFACTS_OK:
gr.Dataframe(value=df_pricing, label="Pricing Decisions Table")
else:
gr.Markdown("No artifacts found yet.")
with gr.Tab("Analyze a New Book"):
title_input = gr.Textbox(label="Book Title")
units_input = gr.Number(label="Avg Monthly Units Sold", value=100)
reviews_input = gr.Textbox(label="Reviews (one per line)", lines=6)
analyze_btn = gr.Button("Analyze")
summary_output = gr.Textbox(label="Summary", lines=6)
details_output = gr.Textbox(label="Details", lines=2)
chart_output = gr.Plot(label="Chart")
analyze_btn.click(
fn=analyze_book,
inputs=[title_input, reviews_input, units_input],
outputs=[summary_output, details_output, chart_output],
)
with gr.Tab("About"):
gr.Markdown("AI for Big Data Management project app.")
app.launch()