File size: 2,469 Bytes
18aea7d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e563c54
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
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.")