Spaces:
No application file
No application file
| import os | |
| import streamlit as st | |
| from dotenv import load_dotenv | |
| from langchain_groq import ChatGroq | |
| from langchain_classic.chains import ConversationalRetrievalChain | |
| from langchain_classic.memory import ConversationBufferMemory | |
| from langchain_community.vectorstores import FAISS | |
| from langchain_huggingface import HuggingFaceEmbeddings | |
| # Load environment variables | |
| load_dotenv() | |
| # Read Groq API Key | |
| GROQ_API_KEY = os.getenv("GROQ_API_KEY") | |
| st.set_page_config( | |
| page_title="SQL Mentor AI", | |
| page_icon="🤖" | |
| ) | |
| st.title("🤖 SQL Mentor AI") | |
| def load_vectorstore(): | |
| embeddings = HuggingFaceEmbeddings( | |
| model_name="sentence-transformers/all-MiniLM-L6-v2" | |
| ) | |
| db = FAISS.load_local( | |
| "vectorstore", | |
| embeddings, | |
| allow_dangerous_deserialization=True | |
| ) | |
| return db | |
| db = load_vectorstore() | |
| retriever = db.as_retriever( | |
| search_kwargs={"k": 4} | |
| ) | |
| llm = ChatGroq( | |
| groq_api_key=GROQ_API_KEY, | |
| model_name="llama-3.3-70b-versatile", | |
| temperature=0.2 | |
| ) | |
| if "messages" not in st.session_state: | |
| st.session_state.messages = [] | |
| for message in st.session_state.messages: | |
| with st.chat_message(message["role"]): | |
| st.markdown(message["content"]) | |
| question = st.chat_input( | |
| "Ask SQL Questions..." | |
| ) | |
| if question: | |
| st.session_state.messages.append( | |
| { | |
| "role": "user", | |
| "content": question | |
| } | |
| ) | |
| with st.chat_message("user"): | |
| st.markdown(question) | |
| docs = retriever.invoke(question) | |
| context = "\n\n".join( | |
| [doc.page_content for doc in docs] | |
| ) | |
| prompt = f""" | |
| You are an SQL Tutor. | |
| Answer the question using the context. | |
| Context: | |
| {context} | |
| Question: | |
| {question} | |
| If the questions is out of context just say I can't answer this question instead of generating | |
| answers | |
| """ | |
| response = llm.invoke(prompt) | |
| answer = response.content | |
| st.session_state.messages.append( | |
| { | |
| "role": "assistant", | |
| "content": answer | |
| } | |
| ) | |
| with st.chat_message("assistant"): | |
| st.markdown(answer) |