added hf
Browse files- app.py +43 -22
- requirements.txt +3 -1
app.py
CHANGED
|
@@ -5,10 +5,12 @@ import streamlit as st
|
|
| 5 |
|
| 6 |
from llama_index.llms.gemini import Gemini
|
| 7 |
from llama_index.llms.huggingface import HuggingFaceLLM
|
|
|
|
| 8 |
from llama_index.llms.mistralai import MistralAI
|
| 9 |
from llama_index.llms.openai import OpenAI
|
| 10 |
|
| 11 |
from llama_index.embeddings.openai import OpenAIEmbedding
|
|
|
|
| 12 |
|
| 13 |
from llama_index.core import (
|
| 14 |
VectorStoreIndex,
|
|
@@ -24,16 +26,6 @@ MAX_OUTPUT_TOKENS = 2048
|
|
| 24 |
def main():
|
| 25 |
with st.sidebar:
|
| 26 |
st.title('Document Summarization and QA System')
|
| 27 |
-
# st.markdown('''
|
| 28 |
-
# ## About this application
|
| 29 |
-
# Upload a pdf to ask questions about it. This retrieval-augmented generation (RAG) workflow uses:
|
| 30 |
-
# - [Streamlit](https://streamlit.io/)
|
| 31 |
-
# - [LlamaIndex](https://docs.llamaindex.ai/en/stable/)
|
| 32 |
-
# - [OpenAI](https://platform.openai.com/docs/models)
|
| 33 |
-
# ''')
|
| 34 |
-
|
| 35 |
-
# st.write('Made by ***Nate Mahynski***')
|
| 36 |
-
# st.write('nathan.mahynski@nist.gov')
|
| 37 |
|
| 38 |
# Select Provider
|
| 39 |
provider = st.selectbox(
|
|
@@ -54,11 +46,23 @@ def main():
|
|
| 54 |
else:
|
| 55 |
llm_list = []
|
| 56 |
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
# Temperature
|
| 64 |
temperature = st.slider(
|
|
@@ -78,7 +82,7 @@ def main():
|
|
| 78 |
# Enter LLM API Key
|
| 79 |
llm_key = st.text_input(
|
| 80 |
"Enter your LLM API Key",
|
| 81 |
-
value=None,
|
| 82 |
)
|
| 83 |
|
| 84 |
# Create LLM
|
|
@@ -94,11 +98,26 @@ def main():
|
|
| 94 |
)
|
| 95 |
Settings.tokenizer = tiktoken.encoding_for_model(llm_name).encode
|
| 96 |
Settings.num_output = MAX_OUTPUT_TOKENS
|
| 97 |
-
Settings.context_window = 4096 # max possible
|
| 98 |
Settings.embed_model = OpenAIEmbedding()
|
|
|
|
| 99 |
elif provider == 'huggingface':
|
| 100 |
-
|
| 101 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
else:
|
| 103 |
raise NotImplementedError(f"{provider} is not supported yet")
|
| 104 |
|
|
@@ -144,7 +163,7 @@ def main():
|
|
| 144 |
# Instructions
|
| 145 |
|
| 146 |
1. Obtain an [API Key](https://cloud.llamaindex.ai/api-key) from LlamaParse to parse your document.
|
| 147 |
-
2. Obtain a similar API Key from your preferred LLM provider.
|
| 148 |
3. Make selections at the left and upload a document to use as context.
|
| 149 |
4. Begin asking questions below!
|
| 150 |
"""
|
|
@@ -169,8 +188,10 @@ def main():
|
|
| 169 |
|
| 170 |
if __name__ == '__main__':
|
| 171 |
# Global configurations
|
| 172 |
-
from llama_index.core import set_global_handler
|
| 173 |
-
set_global_handler("langfuse")
|
|
|
|
|
|
|
| 174 |
st.set_page_config(layout="wide")
|
| 175 |
|
| 176 |
main()
|
|
|
|
| 5 |
|
| 6 |
from llama_index.llms.gemini import Gemini
|
| 7 |
from llama_index.llms.huggingface import HuggingFaceLLM
|
| 8 |
+
from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI
|
| 9 |
from llama_index.llms.mistralai import MistralAI
|
| 10 |
from llama_index.llms.openai import OpenAI
|
| 11 |
|
| 12 |
from llama_index.embeddings.openai import OpenAIEmbedding
|
| 13 |
+
from llama_index.embeddings.huggingface import HuggingFaceEmbedding, HuggingFaceInferenceAPIEmbedding
|
| 14 |
|
| 15 |
from llama_index.core import (
|
| 16 |
VectorStoreIndex,
|
|
|
|
| 26 |
def main():
|
| 27 |
with st.sidebar:
|
| 28 |
st.title('Document Summarization and QA System')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
|
| 30 |
# Select Provider
|
| 31 |
provider = st.selectbox(
|
|
|
|
| 46 |
else:
|
| 47 |
llm_list = []
|
| 48 |
|
| 49 |
+
if provider == 'huggingface':
|
| 50 |
+
llm_name = st.text_input(
|
| 51 |
+
"Model as 'namespace/model-name', e.g. google/gemma-2-9b",
|
| 52 |
+
value=None,
|
| 53 |
+
)
|
| 54 |
+
|
| 55 |
+
# Also give the user the option for different embedding models, too
|
| 56 |
+
embed_name = st.text_input(
|
| 57 |
+
label="Embedding model as 'namespace/model-name', e.g. BAAI/bge-small-en-v1.5",
|
| 58 |
+
value="BAAI/bge-small-en-v1.5",
|
| 59 |
+
)
|
| 60 |
+
else:
|
| 61 |
+
llm_name = st.selectbox(
|
| 62 |
+
label="Select LLM Model",
|
| 63 |
+
options=llm_list,
|
| 64 |
+
index=0
|
| 65 |
+
)
|
| 66 |
|
| 67 |
# Temperature
|
| 68 |
temperature = st.slider(
|
|
|
|
| 82 |
# Enter LLM API Key
|
| 83 |
llm_key = st.text_input(
|
| 84 |
"Enter your LLM API Key",
|
| 85 |
+
value="llx-uxxwLr1gZmDibaHTl99ISQJtpLSjjfhgDvnosGxu92RdRlb7", #None,
|
| 86 |
)
|
| 87 |
|
| 88 |
# Create LLM
|
|
|
|
| 98 |
)
|
| 99 |
Settings.tokenizer = tiktoken.encoding_for_model(llm_name).encode
|
| 100 |
Settings.num_output = MAX_OUTPUT_TOKENS
|
|
|
|
| 101 |
Settings.embed_model = OpenAIEmbedding()
|
| 102 |
+
Settings.context_window = 4096 # max possible
|
| 103 |
elif provider == 'huggingface':
|
| 104 |
+
if llm_name is not None and embed_name is not None:
|
| 105 |
+
os.environ['HFTOKEN'] = str(llm_key)
|
| 106 |
+
Settings.llm = HuggingFaceInferenceAPI(
|
| 107 |
+
model_name=llm_name,
|
| 108 |
+
token=os.environ.get("HFTOKEN"),
|
| 109 |
+
temperature=temperature,
|
| 110 |
+
max_tokens=MAX_OUTPUT_TOKENS
|
| 111 |
+
)
|
| 112 |
+
Settings.tokenizer = AutoTokenizer.from_pretrained(
|
| 113 |
+
llm_name,
|
| 114 |
+
token=os.environ.get("HFTOKEN"),
|
| 115 |
+
)
|
| 116 |
+
Settings.num_output = MAX_OUTPUT_TOKENS
|
| 117 |
+
Settings.embed_model = HuggingFaceInferenceAPIEmbedding(
|
| 118 |
+
model_name=embed_name
|
| 119 |
+
)
|
| 120 |
+
# Settings.context_window = 4096
|
| 121 |
else:
|
| 122 |
raise NotImplementedError(f"{provider} is not supported yet")
|
| 123 |
|
|
|
|
| 163 |
# Instructions
|
| 164 |
|
| 165 |
1. Obtain an [API Key](https://cloud.llamaindex.ai/api-key) from LlamaParse to parse your document.
|
| 166 |
+
2. Obtain a similar API Key from your preferred LLM provider. Note, if you are using [Hugging Face](https://huggingface.co/models) you may need to request access to a model if it is gated.
|
| 167 |
3. Make selections at the left and upload a document to use as context.
|
| 168 |
4. Begin asking questions below!
|
| 169 |
"""
|
|
|
|
| 188 |
|
| 189 |
if __name__ == '__main__':
|
| 190 |
# Global configurations
|
| 191 |
+
# from llama_index.core import set_global_handler
|
| 192 |
+
# set_global_handler("langfuse")
|
| 193 |
+
# Also add API Key for this if using
|
| 194 |
+
|
| 195 |
st.set_page_config(layout="wide")
|
| 196 |
|
| 197 |
main()
|
requirements.txt
CHANGED
|
@@ -8,4 +8,6 @@ llama-index-llms-mistralai
|
|
| 8 |
llama-index-llms-openai
|
| 9 |
tiktoken
|
| 10 |
llama-parse
|
| 11 |
-
llama-index-callbacks-langfuse
|
|
|
|
|
|
|
|
|
| 8 |
llama-index-llms-openai
|
| 9 |
tiktoken
|
| 10 |
llama-parse
|
| 11 |
+
llama-index-callbacks-langfuse
|
| 12 |
+
llama-index-llms-huggingface-api
|
| 13 |
+
llama-index-llms-huggingface
|