Peopulse / app.py
sdbrgo's picture
Update app.py
e5f687b verified
import gradio as gr
from phase.ingestion import ingest_feedback, ingest_adoption
from phase.sentiment_modeling import transform_sentiments, compute_sentiment_metrics
from phase.compute import ParticipationAdoptionIndex
from phase.interpret import assign_typology
def run_app(feedback_file, attendance_file, num_participants, target_population):
# Step 1: Ingest data
df, feedback_volume = ingest_feedback(feedback_file)
participants_by_group = ingest_adoption(attendance_file)
# Step 2: Sentiment modeling
processed_df = transform_sentiments(df)
sentiment_metrics = compute_sentiment_metrics(processed_df, feedback_volume)
# Step 3: Compute Participation Adoption Index (PAI)
pai_calculator = ParticipationAdoptionIndex(
num_participants=num_participants,
target_population=target_population,
feedback_volume=feedback_volume
)
pai_1, pai_2 = pai_calculator.compute_pai(participants_by_group)
# Step 4: Interpret results
typology = assign_typology(pai_1)
return sentiment_metrics, typology, pai_2
# ========== GRADIO INTERFACE ==========
with gr.Blocks() as demo:
gr.Markdown("# 🏙️📊Peopulse: Citizen Feedback Intelligence System")
# ----- INPUTS -----
with gr.Row():
feedback_file_input = gr.File(label="Upload Feedback Data (CSV)")
attendance_file_input = gr.File(label="Upload Attendance Data (CSV)")
with gr.Row():
num_participants_input = gr.Number(
label="Number of Participants",
value=1000,
minimum=0,
maximum=1e9,
step=1,
precision=0
)
target_population_input = gr.Number(
label="Target Population Size",
value=10000,
minimum=1,
maximum=1e10,
step=1,
precision=0
)
btn = gr.Button("Run Diagnostics")
# ----- OUTPUTS -----
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("## 🗨️📈Public Sentiment Analytics")
sentiment_metrics_output = gr.JSON()
gr.Markdown("## 📃🩺Reach & Equity")
pai_2_output = gr.JSON()
with gr.Column(scale=1):
gr.Markdown("## 📃🩺Participation Dynamics")
typology_output = gr.JSON()
btn.click(
fn=run_app,
inputs=[feedback_file_input, attendance_file_input, num_participants_input, target_population_input],
outputs=[sentiment_metrics_output, typology_output, pai_2_output]
)
demo.launch()