Spaces:
Runtime error
Runtime error
import time | |
from io import BytesIO | |
from langchain.llms import OpenAI | |
from dotenv import load_dotenv | |
import os | |
import streamlit as st | |
import pandas as pd | |
# Set the page configuration here | |
st.set_page_config(page_title="Insightly") | |
def main(): | |
load_dotenv() | |
# Load the OpenAI API key from the environment variable | |
api_key = os.getenv("OPENAI_API_KEY") | |
if api_key is None or api_key == "": | |
st.error("OPENAI_API_KEY is not set") | |
return | |
st.sidebar.image("https://i.ibb.co/bX6GdqG/insightly-wbg.png", use_column_width=True) | |
st.title("Column Analysis π¬") | |
csv_files = st.file_uploader("Upload CSV files", type="csv", accept_multiple_files=True) | |
if csv_files: | |
llm = OpenAI(temperature=0) | |
user_input = st.text_input("Question here:") | |
# Read the CSV file and get the column names | |
for csv_file in csv_files: | |
try: | |
df = pd.read_csv(csv_file) | |
except pd.errors.EmptyDataError: | |
st.error(f"Empty CSV file uploaded: {csv_file.name}") | |
continue | |
if df.empty: | |
st.error(f"Empty CSV file uploaded: {csv_file.name}") | |
continue | |
column_names = df.columns.tolist() | |
# Dropdown to select the column for prompts | |
column_for_prompt = st.selectbox("Select the column for prompts:", [None] + column_names) | |
if column_for_prompt is not None: | |
# Create a list to store the responses and original rows for each CSV file | |
responses_list = [] | |
original_rows_list = [] | |
# Check if the specified column for prompts exists in the DataFrame | |
if column_for_prompt not in df.columns: | |
st.error(f"The column '{column_for_prompt}' does not exist in the CSV file: {csv_file.name}") | |
continue | |
# Example: Accessing columns from the DataFrame | |
column_data = df[column_for_prompt] | |
# Loop through each row in the specified column and pass the user input as prompt | |
for row_value in column_data: | |
# Convert the row value to a string to handle missing or NaN values | |
row_value_str = str(row_value) | |
original_rows_list.append(row_value_str) | |
# Example: Using the preprocessed data with the OpenAI API | |
llm_response = llm.predict(row_value_str + " " + user_input) | |
responses_list.append(llm_response) | |
# Introduce a delay of 1 second between API calls to reduce the rate of requests | |
time.sleep(1) | |
# Create a new DataFrame containing the original rows and responses | |
response_df = pd.DataFrame({ | |
"Original Rows": original_rows_list, | |
"Responses": responses_list | |
}) | |
# Add bold formatting to the "Responses" column | |
response_df["Responses"] = response_df["Responses"].apply(lambda x: f"**{x}**") | |
# Offer the option to download the responses as a CSV file | |
if st.button("Download Responses as CSV"): | |
with BytesIO() as output_file: | |
response_df.to_csv(output_file, index=False) | |
st.download_button( | |
label="Download CSV", | |
data=output_file.getvalue(), | |
file_name="responses.csv", | |
mime="text/csv", | |
) | |
if __name__ == "__main__": | |
main() |