Spaces:
Paused
Paused
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.") | |