npc0's picture
Update app.py
3ff13bb verified
raw
history blame
2.39 kB
import os
import streamlit as st
import pandas as pd
from pandasai import Agent
from langchain_groq import ChatGroq
llm = ChatGroq(
model=os.environ['MODEL_NAME'],
temperature=0,
max_retries=2,
)
# Initialize session state for URL and DataFrame
if 'pre_url' not in st.session_state:
st.session_state['pre_url'] = ''
if 'df' not in st.session_state:
st.session_state['df'] = None
# Streamlit app
st.title("Conversation Analysis")
# Introduction and Explanation
st.markdown("""
## Go beyond static visualizations!
This app lets you directly ask for the insights you need from Polis conversation data.
Instead of being limited to a standard PCA chart, you can request custom plots and analyses using natural language.
> :bulb: For example, try asking for: "**Show me a pie chart of the most common sentiment expressed in these comments.**"
""")
# Step 1: Choose conversation
opendata_options = [
'15-per-hour-seattle', 'american-assembly.bowling-green', 'brexit-consensus',
'canadian-electoral-reform', 'football-concussions', 'march-on.operation-marchin-orders',
'scoop-hivemind.affordable-housing', 'scoop-hivemind.biodiversity',
'scoop-hivemind.freshwater', 'scoop-hivemind.taxes', 'scoop-hivemind.ubi',
'ssis.land-bank-farmland.2rumnecbeh.2021-08-01', 'vtaiwan.uberx'
]
selected_option = st.selectbox("Choose conversation", opendata_options)
url = (
f"https://raw.githubusercontent.com/compdemocracy/openData/master/{selected_option}/comments.csv"
)
# Load data only if URL changes
if st.session_state['pre_url'] != url:
agent = Agent(
pd.read_csv(url, index_col=0),
config={"llm": llm}
)
st.session_state['agent'] = agent
st.session_state['pre_url'] = url
# Step 2: Request for analysis or chart
with st.form('Analyze'):
request = st.text_input(
"Enter your analysis request:",
"Plot a histogram about the distribution of agree, disagree and neutral comments against the topic")
submit_button = st.form_submit_button(label="Analyze")
# Execute chat and display results
if submit_button:
if st.session_state['agent'] is not None:
file = st.session_state['agent'].chat(request)
if os.path.exists(file):
st.image(file)
else:
st.info(file)
else:
st.warning("Please select a conversation and load data first.")