import os import logging import json import openai import streamlit as st # Set up the page, enable logging from dotenv import load_dotenv,find_dotenv load_dotenv(find_dotenv(),override=True) def load_sidebar(config_file, index_data_file, vector_databases=False, embeddings=False, rag_type=False, index_name=False, llm=False, model_options=False, secret_keys=False): """ Sets up the sidebar based no toggled options. Returns variables with options. """ sb_out={} with open(config_file, 'r') as f: config = json.load(f) databases = {db['name']: db for db in config['databases']} llms = {m['name']: m for m in config['llms']} logging.info('Loaded: '+config_file) with open(index_data_file, 'r') as f: index_data = json.load(f) logging.info('Loaded: '+index_data_file) if vector_databases: # Vector databases st.sidebar.title('Vector database') sb_out['index_type']=st.sidebar.selectbox('Index type', list(databases.keys()), index=1) logging.info('Index type: '+sb_out['index_type']) if embeddings: # Embeddings st.sidebar.title('Embeddings') if sb_out['index_type']=='RAGatouille': # Default to selecting hugging face model for RAGatouille, otherwise select alternates sb_out['query_model']=st.sidebar.selectbox('Hugging face rag models', databases[sb_out['index_type']]['hf_rag_models'], index=0) else: sb_out['query_model']=st.sidebar.selectbox('Embedding models', databases[sb_out['index_type']]['embedding_models'], index=0) if sb_out['query_model']=='Openai': sb_out['embedding_name']='text-embedding-ada-002' elif sb_out['query_model']=='Voyage': sb_out['embedding_name']='voyage-02' logging.info('Query type: '+sb_out['query_model']) if 'embedding_name' in locals() or 'embedding_name' in globals(): logging.info('Embedding name: '+sb_out['embedding_name']) if rag_type: if sb_out['index_type']!='RAGatouille': # RAGatouille doesn't have a rag_type # RAG Type st.sidebar.title('RAG Type') sb_out['rag_type']=st.sidebar.selectbox('RAG type', config['rag_types'], index=0) sb_out['smart_agent']=st.sidebar.checkbox('Smart agent?') logging.info('RAG type: '+sb_out['rag_type']) logging.info('Smart agent: '+str(sb_out['smart_agent'])) if index_name: # Index Name st.sidebar.title('Index Name') sb_out['index_name']=index_data[sb_out['index_type']][sb_out['query_model']] st.sidebar.markdown('Index name: '+sb_out['index_name']) logging.info('Index name: '+sb_out['index_name']) if llm: # LLM st.sidebar.title('LLM') sb_out['llm_source']=st.sidebar.selectbox('LLM model', list(llms.keys()), index=0) logging.info('LLM source: '+sb_out['llm_source']) if sb_out['llm_source']=='OpenAI': sb_out['llm_model']=st.sidebar.selectbox('OpenAI model', llms[sb_out['llm_source']]['models'], index=0) if sb_out['llm_source']=='Hugging Face': sb_out['llm_model']=st.sidebar.selectbox('Hugging Face model', llms[sb_out['llm_source']]['models'], index=0) if model_options: # Add input fields in the sidebar st.sidebar.title('LLM Options') temperature = st.sidebar.slider('Temperature', min_value=0.0, max_value=2.0, value=0.0, step=0.1) output_level = st.sidebar.selectbox('Level of Output', ['Concise', 'Detailed'], index=1) st.sidebar.title('Retrieval Options') k = st.sidebar.number_input('Number of items per prompt', min_value=1, step=1, value=4) if sb_out['index_type']!='RAGatouille': search_type = st.sidebar.selectbox('Search Type', ['similarity', 'mmr'], index=0) sb_out['model_options']={'output_level':output_level, 'k':k, 'search_type':search_type, 'temperature':temperature} else: sb_out['model_options']={'output_level':output_level, 'k':k, 'temperature':temperature} logging.info('Model options: '+str(sb_out['model_options'])) if secret_keys: # Add a section for secret keys st.sidebar.title('Secret keys') st.sidebar.markdown('If .env file is in directory, will use that first.') sb_out['keys']={} if 'llm_source' in sb_out and sb_out['llm_source'] == 'OpenAI': sb_out['keys']['OPENAI_API_KEY'] = st.sidebar.text_input('OpenAI API Key', type='password') elif 'query_model' in sb_out and sb_out['query_model'] == 'Openai': sb_out['keys']['OPENAI_API_KEY'] = st.sidebar.text_input('OpenAI API Key', type='password') if 'llm_source' in sb_out and sb_out['llm_source']=='Hugging Face': sb_out['keys']['HUGGINGFACEHUB_API_TOKEN'] = st.sidebar.text_input('Hugging Face API Key', type='password') if 'query_model' in sb_out and sb_out['query_model']=='Voyage': sb_out['keys']['VOYAGE_API_KEY'] = st.sidebar.text_input('Voyage API Key', type='password') if 'index_type' in sb_out and sb_out['index_type']=='Pinecone': sb_out['keys']['PINECONE_API_KEY']=st.sidebar.text_input('Pinecone API Key',type='password') return sb_out def set_secrets(sb): """ Sets secrets from environment file, or from sidebar if not available. """ secrets={} secrets['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY') openai.api_key = secrets['OPENAI_API_KEY'] if not secrets['OPENAI_API_KEY']: secrets['OPENAI_API_KEY'] = sb['keys']['OPENAI_API_KEY'] os.environ['OPENAI_API_KEY'] = secrets['OPENAI_API_KEY'] openai.api_key = secrets['OPENAI_API_KEY'] secrets['VOYAGE_API_KEY'] = os.getenv('VOYAGE_API_KEY') if not secrets['VOYAGE_API_KEY']: secrets['VOYAGE_API_KEY'] = sb['keys']['VOYAGE_API_KEY'] os.environ['VOYAGE_API_KEY'] = secrets['VOYAGE_API_KEY'] secrets['PINECONE_API_KEY'] = os.getenv('PINECONE_API_KEY') if not secrets['PINECONE_API_KEY']: secrets['PINECONE_API_KEY'] = sb['keys']['PINECONE_API_KEY'] os.environ['PINECONE_API_KEY'] = secrets['PINECONE_API_KEY'] secrets['HUGGINGFACEHUB_API_TOKEN'] = os.getenv('HUGGINGFACEHUB_API_TOKEN') if not secrets['HUGGINGFACEHUB_API_TOKEN']: secrets['HUGGINGFACEHUB_API_TOKEN'] = sb['keys']['HUGGINGFACEHUB_API_TOKEN'] os.environ['HUGGINGFACEHUB_API_TOKEN'] = secrets['HUGGINGFACEHUB_API_TOKEN'] return secrets