Spaces:
Sleeping
Sleeping
| import os | |
| import streamlit as st | |
| from langchain_openai import OpenAI | |
| from langchain.chains import RetrievalQA | |
| from langchain_openai import OpenAIEmbeddings | |
| from langchain_community.vectorstores import Chroma | |
| from dotenv import load_dotenv | |
| from langchain_core.messages import HumanMessage, AIMessage | |
| def run_query(query, chat_history, k, temperature,openai_api_key): | |
| load_dotenv() | |
| persist_directory = 'db' | |
| db = Chroma(persist_directory=persist_directory, embedding_function=OpenAIEmbeddings(openai_api_key=openai_api_key)) # access db | |
| retriever = db.as_retriever(search_kwargs={"k": k}) # kwargs determines how many docs it uses | |
| llm = OpenAI(api_key=openai_api_key, max_tokens=1500, temperature=temperature) # api key self explanatory. max_tokens provides how long of a response | |
| # we get from the llm (do note the llm has a cap of 4097.) and temperature provides a scale form 0.0 to 1.0 of how much freedom | |
| # the llm should take in its response (how closely it should adhere to docs vs how freely) | |
| # Perform similarity search | |
| search_results = retriever.get_relevant_documents(query) | |
| # Extract texts from the retrieved documents | |
| context = "\n".join([doc.page_content for doc in search_results]) | |
| # Combine the context with the query | |
| full_query = f"{context}\n\n{query}" | |
| # Get response from LLM | |
| llm_response = llm(full_query) | |
| # Store the interaction in chat history | |
| chat_history.append((HumanMessage(content=query), AIMessage(content=llm_response))) | |
| return llm_response | |
| def main(): | |
| st.title("EmeraldEnergy™️ AI Copilot") | |
| api_key = st.text_input("Enter your OpenAI API key:") | |
| chat_history = [] | |
| role = 'Pretend I am an HVAC technician installing a Mitsubishi heat pump. I do not have access to the manual. Help me install this using your knowledge of the mitsubishi heatpump. Please consider the section under instruction of troubleshooting. If you can not help me, then provide generalized guidance. Please ask for which model of the product we are using at the end. \n' | |
| query = st.text_area("How can I help you today?:", height=100) | |
| k = st.slider("Number of documents to retrieve (k):", min_value=1, max_value=4, value=4) | |
| temperature = st.slider("Temperature:", min_value=0.0, max_value=1.0, value=0.2) | |
| if st.button("Submit"): | |
| full_query = role + query | |
| result = run_query(full_query, chat_history, k, temperature,api_key) | |
| st.write(f"AI: {result}") | |
| # Display chat history | |
| st.write("### Chat History") | |
| for human_msg, ai_msg in chat_history: | |
| st.write(f"**Human:** {query}") | |
| st.write(f"**AI:** {ai_msg.content}") | |
| if __name__ == "__main__": | |
| main() | |