Spaces:
Paused
Paused
File size: 2,146 Bytes
23599de |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
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.")
|