Spaces:
Build error
Build error
| import streamlit as st | |
| from langchain_openai import ChatOpenAI | |
| from langchain_utils import invoke_chain | |
| from langchain_community.callbacks import get_openai_callback | |
| def init_session_state(): | |
| if "messages" not in st.session_state: | |
| st.session_state.messages = [] | |
| if "connected" not in st.session_state: | |
| st.session_state.connected = False | |
| def create_sidebar(): | |
| with st.sidebar: | |
| st.title("Postgres Credentials") | |
| st.subheader("Enter your Credentials & Connect") | |
| # Database credentials | |
| host = st.text_input("Host", value="localhost") | |
| port = st.text_input("Port", value="5432") | |
| user = st.text_input("User", value="postgres") | |
| password = st.text_input("Password", type="password") | |
| database = st.text_input("Database") | |
| # OpenAI API key | |
| api_key = st.text_input("OpenAI API Key", type="password") | |
| # Connect button | |
| if st.button("Connect", use_container_width=True): | |
| try: | |
| # Store credentials in session state | |
| st.session_state.db_credentials = { | |
| "host": host, | |
| "port": port, | |
| "user": user, | |
| "password": password, | |
| "database": database | |
| } | |
| st.session_state.api_key = api_key | |
| st.session_state.connected = True | |
| st.success("Successfully connected!") | |
| except Exception as e: | |
| st.error(f"Connection failed: {str(e)}") | |
| st.session_state.connected = False | |
| def main(): | |
| init_session_state() | |
| create_sidebar() | |
| st.title("Chat with Postgres DB") | |
| if not st.session_state.connected: | |
| st.info("Please enter your credentials in the sidebar and connect first.") | |
| return | |
| # Display the welcome message with the database icon using markdown | |
| st.markdown(""" | |
| <div style='display: flex; align-items: center; gap: 10px;'> | |
| <span style='font-size: 24px;'>🗄️</span> | |
| <span>Hello! I'm a QualityKiosk's SQL assistant. Ask me anything about your database.</span> | |
| </div> | |
| """, unsafe_allow_html=True) | |
| # Display chat messages | |
| for message in st.session_state.messages: | |
| with st.chat_message(message["role"]): | |
| st.markdown(message["content"]) | |
| # Chat input | |
| if prompt := st.chat_input("Type a message..."): | |
| st.session_state.messages.append({"role": "user", "content": prompt}) | |
| with st.chat_message("user"): | |
| st.markdown(prompt) | |
| with st.chat_message("assistant"): | |
| with st.spinner("Thinking..."): | |
| with get_openai_callback() as cb: | |
| response = invoke_chain( | |
| prompt, | |
| st.session_state.messages, | |
| st.session_state.db_credentials, | |
| st.session_state.api_key | |
| ) | |
| print(f"OpenAI Stats: {cb}") | |
| st.markdown(response) | |
| st.session_state.messages.append({"role": "assistant", "content": response}) | |
| if __name__ == "__main__": | |
| # Set dark theme and wide layout | |
| st.set_page_config( | |
| page_title="Chat with Postgres DB", | |
| layout="wide", | |
| initial_sidebar_state="expanded", | |
| # Optional: Add a custom theme | |
| menu_items={ | |
| 'Get Help': 'https://www.qualitykiosk.com', | |
| 'About': "# Chat with Postgres DB\nA QualityKiosk's SQL Assistant" | |
| } | |
| ) | |
| # Add custom CSS for dark theme and styling | |
| st.markdown(""" | |
| <style> | |
| .stApp { | |
| background-color: #1E1E1E; | |
| color: #FFFFFF; | |
| } | |
| .stSidebar { | |
| background-color: #262626; | |
| } | |
| .stButton>button { | |
| background-color: #0E86D4; | |
| color: white; | |
| } | |
| .stTextInput>div>div>input { | |
| background-color: #333333; | |
| color: white; | |
| } | |
| .stMarkdown { | |
| color: white; | |
| } | |
| </style> | |
| """, unsafe_allow_html=True) | |
| main() |