diff --git a/app.py b/app.py index 429bf82..4399404 100644 --- a/app.py +++ b/app.py @@ -21,6 +21,7 @@ from utils import ( authenticate, delete_uploaded_file, generate_response, + handle_advanced_options, logger, save_uploaded_file, update_chain, @@ -108,55 +109,7 @@ with st.sidebar: # Advanced Options if ENABLE_ADVANCED_OPTIONS: - advanced_options = st.checkbox( - "Advanced Options", help="Caution! This may break things!" - ) - if advanced_options: - with st.form("advanced_options"): - temperature = st.slider( - "temperature", - min_value=0.0, - max_value=1.0, - value=TEMPERATURE, - help="Controls the randomness of the language model output", - ) - col1, col2 = st.columns(2) - fetch_k = col1.number_input( - "k_fetch", - min_value=1, - max_value=100, - value=FETCH_K, - help="The number of documents to pull from the vector database", - ) - k = col2.number_input( - "k", - min_value=1, - max_value=100, - value=K, - help="The number of most similar documents returned from the vector store", - ) - chunk_size = col1.number_input( - "chunk_size", - min_value=1, - max_value=100000, - value=CHUNK_SIZE, - help="The size at which the text is divided into smaller chunks before being embedded", - ) - max_tokens = col2.number_input( - "max_tokens", - min_value=1, - max_value=4069, - value=MAX_TOKENS, - help="Limits the documents returned from database based on tokens", - ) - applied = st.form_submit_button("Apply") - if applied: - st.session_state["k"] = k - st.session_state["fetch_k"] = fetch_k - st.session_state["chunk_size"] = chunk_size - st.session_state["temperature"] = temperature - st.session_state["max_tokens"] = max_tokens - update_chain() + handle_advanced_options() # the chain can only be initialized after authentication is OK diff --git a/constants.py b/constants.py index 7d16520..409cb6a 100644 --- a/constants.py +++ b/constants.py @@ -22,6 +22,12 @@ The keys are neither exposed nor made visible or stored permanently in any way.\ Feel free to check out [the code base]({REPO_URL}) to validate how things work. """ +USAGE_HELP = f""" +These are the accumulated OpenAI API usage metrics.\n +The app uses '{MODEL}' for chat and 'text-embedding-ada-002' for embeddings.\n +Learn more about OpenAI's pricing [here](https://openai.com/pricing#language-models) +""" + OPENAI_HELP = """ You can sign-up for OpenAI's API [here](https://openai.com/blog/openai-api).\n Once you are logged in, you find the API keys [here](https://platform.openai.com/account/api-keys) @@ -32,9 +38,3 @@ You can create an ActiveLoops account (including 500GB of free database storage) Once you are logged in, you find the API token [here](https://app.activeloop.ai/profile/gustavz/apitoken).\n The organisation name is your username, or you can create new organisations [here](https://app.activeloop.ai/organization/new/create) """ - -USAGE_HELP = f""" -These are the accumulated OpenAI API usage metrics.\n -The app uses '{MODEL}' for chat and 'text-embedding-ada-002' for embeddings.\n -Learn more about OpenAI's pricing [here](https://openai.com/pricing#language-models) -""" diff --git a/utils.py b/utils.py index a3cc05b..644c4e6 100644 --- a/utils.py +++ b/utils.py @@ -110,6 +110,63 @@ def authenticate(openai_api_key, activeloop_token, activeloop_org_name): logger.info("Authentification successful!") +def handle_advanced_options(): + # Input Form that takes advanced options and rebuilds chain with them + advanced_options = st.checkbox( + "Advanced Options", help="Caution! This may break things!" + ) + if advanced_options: + with st.form("advanced_options"): + temperature = st.slider( + "temperature", + min_value=0.0, + max_value=1.0, + value=TEMPERATURE, + help="Controls the randomness of the language model output", + ) + col1, col2 = st.columns(2) + fetch_k = col1.number_input( + "k_fetch", + min_value=1, + max_value=100, + value=FETCH_K, + help="The number of documents to pull from the vector database", + ) + k = col2.number_input( + "k", + min_value=1, + max_value=100, + value=K, + help="The number of most similar documents to build the context from", + ) + chunk_size = col1.number_input( + "chunk_size", + min_value=1, + max_value=100000, + value=CHUNK_SIZE, + help=( + "The size at which the text is divided into smaller chunks " + "before being embedded.\n\nChanging this parameter makes re-embedding " + "and re-uploading the data to the database necessary " + ), + ) + max_tokens = col2.number_input( + "max_tokens", + min_value=1, + max_value=4069, + value=MAX_TOKENS, + help="Limits the documents returned from database based on number of tokens", + ) + applied = st.form_submit_button("Apply") + if applied: + st.session_state["k"] = k + st.session_state["fetch_k"] = fetch_k + st.session_state["chunk_size"] = chunk_size + st.session_state["temperature"] = temperature + st.session_state["max_tokens"] = max_tokens + update_chain() + + def save_uploaded_file(uploaded_file): # streamlit uploaded files need to be stored locally # before embedded and uploaded to the hub