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