Sentiment_Demo / app.py
Will Phoenix
changes
ef64add
# app.py
import gradio as gr
import joblib
import numpy as np
from pathlib import Path
# ---- find vectorizer in root or content ----
def find_file(name):
for p in [Path("."), Path("content")]:
f = p / name
if f.exists():
return f
raise FileNotFoundError(f"Can't find {name} in repo root or ./content")
VECTORIZER = joblib.load(find_file("vectorizer.joblib"))
# ---- discover models (exclude vectorizer) in root + content ----
models = {}
for folder in [Path("."), Path("content")]:
for p in folder.glob("*.joblib"):
if p.name == "vectorizer.joblib":
continue
try:
obj = joblib.load(p)
if hasattr(obj, "predict"):
models[p.stem] = obj
except Exception:
pass
if not models:
raise RuntimeError("No models found. Place your *.joblib next to app.py or in ./content")
def predict(text, model_name):
if not text.strip():
return ""
X = VECTORIZER.transform([text])
y = int(models[model_name].predict(X)[0])
return "Positive Feedback" if y == 1 else "Negative Feedback"
with gr.Blocks() as demo:
gr.Markdown("# Sentiment Demo")
with gr.Row():
with gr.Column():
txt = gr.Textbox(label="Review Comment", lines=6)
mdl = gr.Dropdown(choices=sorted(models.keys()),
value=sorted(models.keys())[0],
label="method")
btn = gr.Button("Submit")
with gr.Column():
out = gr.Textbox(label="Predicted Sentiment Class")
btn.click(predict, [txt, mdl], out)
if __name__ == "__main__":
demo.launch()