File size: 4,923 Bytes
6866239 |
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
import logging
import streamlit as st
import os
from dotenv import load_dotenv
from file_handler import FileHandler
from chat_handler import ChatHandler
# Initialize Milvus connection
from pymilvus import connections
# Load environment variables
load_dotenv()
# Static credentials for login
USERNAME = os.environ.get("USERNAME")
PASSWORD = os.environ.get("PASSWORD")
# Configure logging
LOG_PATH = os.environ.get("LOG_PATH")
os.makedirs(LOG_PATH, exist_ok=True)
LOG_FILE = os.path.join(LOG_PATH, "chatbot.log")
logging.basicConfig(
filename=LOG_FILE,
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)
logger = logging.getLogger("AI_Connect")
# Initialize Handlers
MILVUS_HOST = os.environ.get("MILVUS_HOST")
MILVUS_PORT = os.environ.get("MILVUS_PORT")
HUGGINGFACE_API_TOKEN = os.environ.get("HUGGINGFACE_API_TOKEN")
GROQ_API_KEY_TOKEN = os.environ.get("GROQ_API_KEY")
connections.connect("default", host=MILVUS_HOST, port=MILVUS_PORT)
file_handler = FileHandler(HUGGINGFACE_API_TOKEN,logger)
chat_handler = ChatHandler(HUGGINGFACE_API_TOKEN,GROQ_API_KEY_TOKEN,logger)
# Streamlit UI
st.set_page_config(layout="wide", page_title="AI Connect - Smarter Network Planning for the Future")
# Session state to track login status
if "logged_in" not in st.session_state:
st.session_state["logged_in"] = False
# Login page
# Refined Login Page
if not st.session_state["logged_in"]:
# Customize page title
st.markdown(
"""
<style>
.title {
font-size: 2.5rem;
color: #1f77b4;
font-weight: bold;
text-align: center;
margin-bottom: 10px;
}
.subtitle {
font-size: 1.2rem;
color: #555;
text-align: center;
margin-bottom: 20px;
}
.login-box {
margin: auto;
width: 50%;
padding: 20px;
background: #f9f9f9;
border: 1px solid #ddd;
border-radius: 10px;
}
.login-box input {
margin-bottom: 10px;
}
</style>
<div>
<div class="title">Welcome to AI Connect</div>
<div class="subtitle">Smarter Network Planning for the Future</div>
</div>
""",
unsafe_allow_html=True,
)
# Centered Login Box
st.subheader("Login to Continue")
username = st.text_input("Username")
password = st.text_input("Password", type="password")
if st.button("Login"):
if username == USERNAME and password == PASSWORD:
st.session_state["logged_in"] = True
st.success("Login successful!")
logger.info("User Logged Successfully")
st.rerun()
else:
st.error("Invalid username or password.")
st.markdown("</div>", unsafe_allow_html=True)
else:
# Main app (Chat Interface)
st.title("Chatbot - Smarter Network Planning for the Future")
st.sidebar.header("Upload Documents")
uploaded_file = st.sidebar.file_uploader("Upload PDF, Excel, Docx, or Txt", type=["pdf", "xlsx", "docx", "txt", "csv"])
document_name = st.sidebar.text_input("Document Name", "")
document_description = st.sidebar.text_area("Document Description", "")
if st.sidebar.button("Process File"):
if uploaded_file:
with st.spinner("Processing your file..."):
response = file_handler.handle_file_upload(
file=uploaded_file,
document_name=document_name,
document_description=document_description,
)
st.sidebar.success(f"File processed: {response['message']}")
else:
st.sidebar.warning("Please upload a file before processing.")
# Chat Interface
if "messages" not in st.session_state:
st.session_state["messages"] = []
# Display chat messages from history
for message in st.session_state["messages"]:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Accept user input
if prompt := st.chat_input("Type your question here..."):
with st.chat_message("user"):
st.markdown(prompt)
st.session_state["messages"].append({"role": "user", "content": prompt})
with st.spinner("Processing your question..."):
response = chat_handler.answer_question(prompt)
with st.chat_message("assistant"):
st.markdown(response)
st.session_state["messages"].append({"role": "assistant", "content": response})
# Logout button
if st.session_state["logged_in"]:
if st.sidebar.button("Logout"):
st.session_state["logged_in"] = False
st.rerun()
|