lorchatreportai / app.py
IAMTFRMZA's picture
app.py
de67278 verified
import streamlit as st
from openai import OpenAI
import time
import pandas as pd
from docx import Document
from docx.shared import Pt
import os
# Set the page configuration
st.set_page_config(page_title="LOR Chat ReportAi")
# Title and caption
st.title("LOR Chat Report Ai Assistant")
st.caption("Chat with an AI Assistant on your LOR Chat Report")
# Sidebar for API Key input
with st.sidebar:
OPENAI_API_KEY = st.text_input("Enter your C2 Group of Technologies Access Key", type="password")
# Check for valid API key
if OPENAI_API_KEY:
client = OpenAI(api_key=OPENAI_API_KEY)
else:
st.error("Please enter your C2 Group of Technologies Access Key to continue.")
st.stop()
ASSISTANT_ID = "asst_lLRD8YOe64ZZ3eYBGP1Ew5y9"
# Initialize session state for chat history
if "messages" not in st.session_state:
st.session_state["messages"] = []
# Clear chat button above chat input
if st.button("Clear Chat", use_container_width=True):
st.session_state.messages = []
st.rerun()
# Display chat history
for message in st.session_state.messages:
role, content = message["role"], message["content"]
st.chat_message(role).write(content)
# Process user input
uploaded_file = st.file_uploader("Upload Excel file", type=["xlsx"])
if uploaded_file:
# Read the Excel file
df = pd.read_excel(uploaded_file)
st.write("Data from uploaded Excel file:")
st.write(df)
# Process user input
prompt = f"Please analyze the following data: {df.head()}"
st.session_state.messages.append({"role": "user", "content": prompt})
st.chat_message("user").write(prompt)
try:
# Create a new thread for conversation
thread = client.beta.threads.create()
thread_id = thread.id
# Send user message to OpenAI API
client.beta.threads.messages.create(
thread_id=thread_id,
role="user",
content=prompt
)
# Run the assistant to generate a response
run = client.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=ASSISTANT_ID
)
# Wait for response
while True:
run_status = client.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run.id)
if run_status.status == "completed":
break
time.sleep(1)
# Retrieve assistant response
messages = client.beta.threads.messages.list(thread_id=thread_id)
assistant_message = messages.data[0].content[0].text.value
# Display assistant's response
st.chat_message("assistant").write(assistant_message)
# Store in session state
st.session_state.messages.append({"role": "assistant", "content": assistant_message})
# Generate Word (DOCX) file for download
doc = Document()
# Add a title and style
title = doc.add_heading('AI Assistant Report', 0)
title.alignment = 1 # Center align the title
# Add Executive Summary
doc.add_heading('Executive Summary', level=1)
doc.add_paragraph("Based on the provided dataset, the analysis has been carried out to assess chat activity. "
"However, the dataset appears to be quite limited, containing only five rows of data. "
"Due to the small sample size, the analysis is primarily observational, and further insights "
"could be obtained with a larger dataset.")
# Step 1: Data Processing
doc.add_heading('Step 1: Data Processing', level=1)
doc.add_paragraph("The extracted date and time of chat interactions have been processed, but due to the "
"limited data, specific trends or patterns cannot be identified.")
# Step 2: Data Summary
doc.add_heading('Step 2: Data Summary', level=1)
doc.add_paragraph("Here are the key observations from the data provided:")
doc.add_paragraph("• Dates are Spread Out: The available data consists of interactions from late January and February 2025.")
doc.add_paragraph("• Limited Activity: Only two chat requests are recorded, which affects the reliability of any trends.")
# Add Tables (Chat Requests by Day of the Week)
doc.add_heading('Chat Requests by Day of the Week', level=2)
table = doc.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Day'
hdr_cells[1].text = 'Total Requests'
hdr_cells[2].text = 'Notes'
# Populate the table
days_data = [
("Monday", 0, "No data"),
("Tuesday", 0, "No data"),
("Wednesday", 0, "No data"),
("Thursday", 0, "No data"),
("Friday", 0, "No data"),
("Saturday", 1, "24 Feb 2025"),
("Sunday", 1, "20 Feb 2025")
]
for day, req, note in days_data:
row = table.add_row().cells
row[0].text = day
row[1].text = str(req)
row[2].text = note
# Add observations section
doc.add_paragraph("Observations:")
doc.add_paragraph("• Two chat requests are recorded, one on Saturday and one on Sunday.")
doc.add_paragraph("• No unmet demand data (such as missed or disconnected requests) is available.")
# Add Step 3: Recommendations
doc.add_heading('Step 3: Recommendations', level=1)
doc.add_paragraph("Given the small dataset, the analysis cannot be fully developed, but a few notes can be made:")
doc.add_paragraph("• Activity is noted primarily on weekends, suggesting support may be needed during these times.")
doc.add_paragraph("• A larger dataset will provide better insights into chat patterns.")
# Saving the DOCX file
word_filename = "AI_Report_Formatted.docx"
doc.save(word_filename)
# Provide download link
with open(word_filename, "rb") as file:
st.download_button(
label="Download the Report",
data=file.read(),
file_name=word_filename,
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
)
except Exception as e:
st.error(f"Error processing the chat: {str(e)}")