import streamlit as st from streamlit_chat import message from openai import OpenAI import time import datetime import os # Load secrets from Hugging Face environment generated_user = os.getenv("User") generated_password = os.getenv("Password") openai_key = os.getenv("openai_key") assistant_id = os.getenv("ASSISTANT_ID") # Streamlit page setup st.set_page_config(page_title="Carfind.co.za AI Assistant", layout="wide") st.markdown("

🚗 Carfind.co.za AI Assistant

", unsafe_allow_html=True) st.caption("Chat with Carfind.co.za and find your next car fast") # Light / Dark mode toggle dark_mode = st.toggle("🌙 Switch to Light Mode", value=True) # Custom styling for bubbles st.markdown(""" """, unsafe_allow_html=True) # Authentication if "authenticated" not in st.session_state: st.session_state.authenticated = False if not st.session_state.authenticated: st.subheader("🔑 Login") username = st.text_input("Username") password = st.text_input("Password", type="password") if username and password: if username == generated_user and password == generated_password: st.session_state.authenticated = True st.success("Login successful! Redirecting...") time.sleep(1) st.rerun() else: st.error("Incorrect username or password. Please try again.") # Chat UI after login else: st.divider() if "messages" not in st.session_state: st.session_state["messages"] = [] # Show chat history for msg in st.session_state["messages"]: if msg["role"] == "assistant": message(f"🚗 **Carfind Assistant:** {msg['content']}", is_user=False) else: message(msg["content"], is_user=True, avatar_style="adventurer") # Input and Clear Chat button input_col, clear_col = st.columns([8, 1]) with input_col: user_input = st.text_input("Type your message here...", key="chat_input") with clear_col: if st.button("🗑️", help="Clear Chat"): st.session_state.messages = [] st.success("Chat cleared.") st.rerun() if openai_key and assistant_id: client = OpenAI(api_key=openai_key) def save_transcript(messages): with open("chat_logs.txt", "a") as log: log.write(f"\n--- New Chat ({datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}) ---\n") for msg in messages: log.write(f"{msg['role'].capitalize()}: {msg['content']}\n") log.write("--- End Chat ---\n") if user_input: st.session_state.messages.append({"role": "user", "content": user_input}) message(user_input, is_user=True, avatar_style="adventurer") try: with st.spinner("Thinking and typing... 💭"): thread = client.beta.threads.create() client.beta.threads.messages.create(thread_id=thread.id, role="user", content=user_input) run = client.beta.threads.runs.create(thread_id=thread.id, assistant_id=assistant_id) 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) assistant_reply = client.beta.threads.messages.list(thread_id=thread.id).data[0].content[0].text.value st.session_state.messages.append({"role": "assistant", "content": assistant_reply}) message(f"🚗 **Carfind Assistant:** {assistant_reply}", is_user=False) save_transcript(st.session_state.messages) except Exception as e: st.error(f"An error occurred: {str(e)}") else: st.error("⚠️ OpenAI key or Assistant ID not found. Please ensure both are set as Hugging Face secrets.")