Shadatsh's picture
Update app.py
18aea7d verified
import streamlit as st
import pandas as pd
import openai
import os
from dotenv import load_dotenv
from datetime import datetime, timedelta
load_dotenv()
# Set OpenAI API key
openai.api_key = os.getenv("OPENAI_API_KEY")
# Load CSV file
df = pd.read_csv("forecastData.csv")
df['Date'] = pd.to_datetime(df['Date']) # Ensure Date is in datetime format
# Streamlit UI
st.set_page_config(page_title="Sales Forecast Chatbot")
st.title("Sales Forecast Chatbot")
st.markdown("Ask for sales forecast by day, week, or month.")
# User input for period
period = st.selectbox("Select Forecast Period", ["Day", "Week", "Month"])
start_date = None
end_date = None
# Handle date selection and period logic
if period == "Day":
selected_date = st.date_input("Select Date")
start_date = datetime.combine(selected_date, datetime.min.time())
end_date = start_date + timedelta(days=1) # Include full day
elif period == "Week":
selected_date = st.date_input("Select Start Date of Week")
start_date = datetime.combine(selected_date, datetime.min.time())
end_date = start_date + timedelta(days=7) # 7-day period
elif period == "Month":
selected_date = st.date_input("Select Start Date for Monthly Forecast")
start_date = datetime.combine(selected_date, datetime.min.time())
end_date = start_date + timedelta(days=30)
# When user clicks the button
if st.button("Get Forecast"):
filtered = df[(df['Date'] >= start_date) & (df['Date'] < end_date)]
if not filtered.empty:
total_sales = filtered['Forecasted_Sales'].sum()
formatted_total = f"{total_sales:,.2f}"
st.success(f"🧾 Total Forecasted Sales from {start_date.date()} to {end_date.date()}: {formatted_total}")
# Generate GPT suggestion
prompt = f"The total forecasted sales from {start_date.date()} to {end_date.date()} is {formatted_total}. Provide a brief suggestion for improving sales or maintaining performance."
with st.spinner("Generating GPT suggestion..."):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", # or gpt-4 if you have access
messages=[
{"role": "user", "content": prompt}
]
)
gpt_reply = response['choices'][0]['message']['content']
st.markdown("**GPT Suggestion:**")
st.write(gpt_reply)
else:
st.warning(" No forecast data found for selected period.")