File size: 2,737 Bytes
c6e3f99
 
 
 
 
 
 
 
 
 
 
 
 
4da3ef0
c6e3f99
 
1dac261
c6e3f99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5113b44
21db1ee
c6e3f99
 
 
 
5113b44
c6e3f99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()