Spaces:
Sleeping
Sleeping
Upload 14 files
Browse fileshad to delete old repo and make a new one as api key was made public, and commit history revealed it. do note in data folder i have attached two jpg's. these are the test cases Steve had told us to get working.
- .gitattributes +36 -35
- README.md +12 -13
- TODO.md +7 -0
- app.py +64 -0
- data/Mitsubishi Heat Pump Training Manual.pdf +3 -0
- data/page75.jpg +0 -0
- data/page76.jpg +0 -0
- database.py +20 -0
- db/71479b33-11bd-4cc8-b914-f87d533ff84b/data_level0.bin +3 -0
- db/71479b33-11bd-4cc8-b914-f87d533ff84b/header.bin +3 -0
- db/71479b33-11bd-4cc8-b914-f87d533ff84b/length.bin +3 -0
- db/71479b33-11bd-4cc8-b914-f87d533ff84b/link_lists.bin +3 -0
- db/chroma.sqlite3 +3 -0
- requirements.txt +0 -0
.gitattributes
CHANGED
|
@@ -1,35 +1,36 @@
|
|
| 1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
db/chroma.sqlite3 filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -1,13 +1,12 @@
|
|
| 1 |
-
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
-
sdk: streamlit
|
| 7 |
-
sdk_version: 1.
|
| 8 |
-
app_file: app.py
|
| 9 |
-
pinned: false
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: EmeraldEnergy
|
| 3 |
+
emoji: 🐨
|
| 4 |
+
colorFrom: yellow
|
| 5 |
+
colorTo: purple
|
| 6 |
+
sdk: streamlit
|
| 7 |
+
sdk_version: 1.35.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
TODO.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
##I still have the following things to do
|
| 2 |
+
- [x] Recognize state diagram on p73 at least.
|
| 3 |
+
- [x] can we implement a better way of reading text from the pdf (which is fully working using langchain py pdfdirectoryloader) that can make better assumptions on the diagram text
|
| 4 |
+
- [x] is there a better way of splitting text?
|
| 5 |
+
- [ ] may want to deploy on streamlit for the sake of time.
|
| 6 |
+
- [ ] **Chat history. Remember previous queries**
|
| 7 |
+
- [ ] Work on slide deck
|
app.py
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import streamlit as st
|
| 3 |
+
from langchain_openai import OpenAI
|
| 4 |
+
from langchain.chains import RetrievalQA
|
| 5 |
+
from langchain_openai import OpenAIEmbeddings
|
| 6 |
+
from langchain_community.vectorstores import Chroma
|
| 7 |
+
from dotenv import load_dotenv
|
| 8 |
+
from langchain_core.messages import HumanMessage, AIMessage
|
| 9 |
+
|
| 10 |
+
def run_query(query, chat_history, k, temperature,ai_key):
|
| 11 |
+
load_dotenv()
|
| 12 |
+
openai_key = ai_key
|
| 13 |
+
persist_directory = 'db'
|
| 14 |
+
|
| 15 |
+
db = Chroma(persist_directory=persist_directory, embedding_function=OpenAIEmbeddings()) # access db
|
| 16 |
+
retriever = db.as_retriever(search_kwargs={"k": k}) # kwargs determines how many docs it uses
|
| 17 |
+
|
| 18 |
+
llm = OpenAI(api_key=openai_key, max_tokens=1500, temperature=temperature) # api key self explanatory. max_tokens provides how long of a response
|
| 19 |
+
# 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
|
| 20 |
+
# the llm should take in its response (how closely it should adhere to docs vs how freely)
|
| 21 |
+
|
| 22 |
+
# Perform similarity search
|
| 23 |
+
search_results = retriever.get_relevant_documents(query)
|
| 24 |
+
|
| 25 |
+
# Extract texts from the retrieved documents
|
| 26 |
+
context = "\n".join([doc.page_content for doc in search_results])
|
| 27 |
+
|
| 28 |
+
# Combine the context with the query
|
| 29 |
+
full_query = f"{context}\n\n{query}"
|
| 30 |
+
|
| 31 |
+
# Get response from LLM
|
| 32 |
+
llm_response = llm(full_query)
|
| 33 |
+
|
| 34 |
+
# Store the interaction in chat history
|
| 35 |
+
chat_history.append((HumanMessage(content=query), AIMessage(content=llm_response)))
|
| 36 |
+
|
| 37 |
+
return llm_response
|
| 38 |
+
|
| 39 |
+
def main():
|
| 40 |
+
st.title("EmeraldEnergy™️ HVAC Technician Assistant")
|
| 41 |
+
api_key = st.text_input("Enter your API key:")
|
| 42 |
+
chat_history = []
|
| 43 |
+
|
| 44 |
+
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'
|
| 45 |
+
|
| 46 |
+
query = st.text_area("Enter your query:", height=100)
|
| 47 |
+
|
| 48 |
+
k = st.slider("Number of documents to retrieve (k):", min_value=1, max_value=4, value=4)
|
| 49 |
+
|
| 50 |
+
temperature = st.slider("Temperature:", min_value=0.0, max_value=1.0, value=0.2)
|
| 51 |
+
|
| 52 |
+
if st.button("Submit"):
|
| 53 |
+
full_query = role + query
|
| 54 |
+
result = run_query(full_query, chat_history, k, temperature,api_key)
|
| 55 |
+
st.write(f"AI: {result}")
|
| 56 |
+
|
| 57 |
+
# Display chat history
|
| 58 |
+
st.write("### Chat History")
|
| 59 |
+
for human_msg, ai_msg in chat_history:
|
| 60 |
+
st.write(f"**Human:** {query}")
|
| 61 |
+
st.write(f"**AI:** {ai_msg.content}")
|
| 62 |
+
|
| 63 |
+
if __name__ == "__main__":
|
| 64 |
+
main()
|
data/Mitsubishi Heat Pump Training Manual.pdf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1eb31bb90fc05a568c0d99d9cea346709b9c12b62bba665c1327e9f2c0a3f696
|
| 3 |
+
size 2911401
|
data/page75.jpg
ADDED
|
data/page76.jpg
ADDED
|
database.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from langchain_community.document_loaders import PyPDFDirectoryLoader
|
| 3 |
+
from langchain_openai import OpenAIEmbeddings
|
| 4 |
+
from langchain_community.vectorstores import Chroma
|
| 5 |
+
from dotenv import load_dotenv
|
| 6 |
+
from langchain_text_splitters import CharacterTextSplitter
|
| 7 |
+
|
| 8 |
+
load_dotenv()
|
| 9 |
+
persist_directory = 'db'
|
| 10 |
+
raw_documents = PyPDFDirectoryLoader("data").load() # Load PDFs from folder
|
| 11 |
+
|
| 12 |
+
if not raw_documents:
|
| 13 |
+
raise ValueError("No documents found. Ensure the document loading is correct.")
|
| 14 |
+
|
| 15 |
+
# split it into chunks
|
| 16 |
+
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
|
| 17 |
+
documents = text_splitter.split_documents(raw_documents)
|
| 18 |
+
|
| 19 |
+
db = Chroma.from_documents(documents, OpenAIEmbeddings(), persist_directory=persist_directory) # Initialize the database
|
| 20 |
+
print("Documents loaded into the database successfully.")
|
db/71479b33-11bd-4cc8-b914-f87d533ff84b/data_level0.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:f18abd8c514282db82706e52b0a33ed659cd534e925a6f149deb7af9ce34bd8e
|
| 3 |
+
size 6284000
|
db/71479b33-11bd-4cc8-b914-f87d533ff84b/header.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:effaa959ce2b30070fdafc2fe82096fc46e4ee7561b75920dd3ce43d09679b21
|
| 3 |
+
size 100
|
db/71479b33-11bd-4cc8-b914-f87d533ff84b/length.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c261d2d09c9278a747d6fc53ef0b3374019bc7e52327522bf2802432c854713b
|
| 3 |
+
size 4000
|
db/71479b33-11bd-4cc8-b914-f87d533ff84b/link_lists.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
|
| 3 |
+
size 0
|
db/chroma.sqlite3
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3feecd0b832dddddd3c6788806ec93f4614ff0460b0de6cc327a8db6899d333b
|
| 3 |
+
size 2646016
|
requirements.txt
ADDED
|
Binary file (5.86 kB). View file
|
|
|