dialogData / app.py
abdfajar707's picture
Rename streamlit_app.py to app.py
d600c3c verified
raw
history blame
2.15 kB
import os
import streamlit as st
from pandasai import SmartDataframe
from pandasai.callbacks import BaseCallback
from pandasai.llm import OpenAI
from pandasai.responses.response_parser import ResponseParser
from data import load_data
# Fungsi untuk mendapatkan daftar folder dalam direktori
def list_folders(directory):
return [name for name in os.listdir(directory) if os.path.isdir(os.path.join(directory, name))]
class StreamlitCallback(BaseCallback):
def __init__(self, container) -> None:
"""Initialize callback handler."""
self.container = container
def on_code(self, response: str):
self.container.code(response)
class StreamlitResponse(ResponseParser):
def __init__(self, context) -> None:
super().__init__(context)
def format_dataframe(self, result):
st.dataframe(result["value"])
return
def format_plot(self, result):
st.image(result["value"])
return
def format_other(self, result):
st.write(result["value"])
return
# Tampilkan judul aplikasi
st.write("# Chat with Tabular Dataframe πŸ¦™")
# Menentukan direktori asal
root_dir = "./data"
# Mendapatkan daftar folder
folders = list_folders(root_dir)
# Menampilkan kotak pemilihan folder
selected_folder = st.selectbox("Pilih folder data", folders)
# Memuat data berdasarkan folder yang dipilih
if selected_folder:
df = load_data(os.path.join(root_dir, selected_folder))
# Menampilkan preview data
with st.expander("πŸ”Ž Dataframe Preview"):
st.write(df.tail(3))
# Membuat input untuk query
query = st.text_area("πŸ—£οΈ Chat with Dataframe")
container = st.container()
# Eksekusi query jika ada input
if query:
llm = OpenAI(api_token=os.environ["BIT_OPENAI_API_KEY"])
query_engine = SmartDataframe(
df,
config={
"llm": llm,
"response_parser": StreamlitResponse,
# "callback": StreamlitCallback(container),
},
)
answer = query_engine.chat(query)
else:
st.write("Silakan pilih folder untuk memuat data.")