from enum import Enum class PromptType(Enum): custom = -1 plain = 0 instruct = 1 quality = 2 human_bot = 3 dai_faq = 4 summarize = 5 simple_instruct = 6 instruct_vicuna = 7 instruct_with_end = 8 human_bot_orig = 9 prompt_answer = 10 open_assistant = 11 wizard_lm = 12 wizard_mega = 13 instruct_vicuna2 = 14 instruct_vicuna3 = 15 wizard2 = 16 wizard3 = 17 instruct_simple = 18 wizard_vicuna = 19 openai = 20 openai_chat = 21 gptj = 22 prompt_answer_openllama = 23 vicuna11 = 24 mptinstruct = 25 mptchat = 26 falcon = 27 guanaco = 28 llama2 = 29 beluga = 30 wizard3nospace = 31 one_shot = 32 falcon_chat = 33 class DocumentSubset(Enum): Relevant = 0 RelSources = 1 TopKSources = 2 non_query_commands = [ DocumentSubset.RelSources.name, DocumentSubset.TopKSources.name ] class DocumentChoice(Enum): ALL = 'All' class LangChainMode(Enum): """LangChain mode""" DISABLED = "Disabled" LLM = "LLM" WIKI = "wiki" WIKI_FULL = "wiki_full" USER_DATA = "UserData" MY_DATA = "MyData" GITHUB_H2OGPT = "github h2oGPT" H2O_DAI_DOCS = "DriverlessAI docs" class LangChainTypes(Enum): SHARED = 'shared' PERSONAL = 'personal' EITHER = 'either' # used when user did not pass which one, so need to try both # modes should not be removed from visible list or added by name langchain_modes_intrinsic = [LangChainMode.DISABLED.value, LangChainMode.LLM.value, LangChainMode.MY_DATA.value] langchain_modes_non_db = [LangChainMode.DISABLED.value, LangChainMode.LLM.value] class LangChainAction(Enum): """LangChain action""" QUERY = "Query" # WIP: # SUMMARIZE_MAP = "Summarize_map_reduce" SUMMARIZE_MAP = "Summarize" SUMMARIZE_ALL = "Summarize_all" SUMMARIZE_REFINE = "Summarize_refine" class LangChainAgent(Enum): """LangChain agents""" SEARCH = "Search" COLLECTION = "Collection" PYTHON = "Python" CSV = "CSV" PANDAS = "Pandas" JSON = 'JSON' no_server_str = no_lora_str = no_model_str = '[None/Remove]' # from site-packages/langchain/llms/openai.py # but needed since ChatOpenAI doesn't have this information model_token_mapping = { "gpt-4": 8192, "gpt-4-0314": 8192, "gpt-4-32k": 32768, "gpt-4-32k-0314": 32768, "gpt-3.5-turbo": 4096, "gpt-3.5-turbo-16k": 16 * 1024, "gpt-3.5-turbo-0301": 4096, "text-ada-001": 2049, "ada": 2049, "text-babbage-001": 2040, "babbage": 2049, "text-curie-001": 2049, "curie": 2049, "davinci": 2049, "text-davinci-003": 4097, "text-davinci-002": 4097, "code-davinci-002": 8001, "code-davinci-001": 8001, "code-cushman-002": 2048, "code-cushman-001": 2048, } font_size = 2 head_acc = 40 # 40 for 6-way source_prefix = "Sources [Score | Link]:" source_postfix = "End Sources

" super_source_prefix = f"""

SourcesSources [Score | Link]:""" super_source_postfix = f"""End Sources

""" def t5_type(model_name): return 't5' == model_name.lower() or \ 't5-' in model_name.lower() or \ 'flan-' in model_name.lower() or \ 'fastchat-t5' in model_name.lower() def get_langchain_prompts(pre_prompt_query, prompt_query, pre_prompt_summary, prompt_summary, model_name, inference_server, model_path_llama): if model_name and ('falcon' in model_name or 'Llama-2'.lower() in model_name.lower() or model_path_llama and 'llama-2' in model_path_llama.lower()) or \ model_name in [None, '']: # use when no model, like no --base_model pre_prompt_query1 = "Pay attention and remember the information below, which will help to answer the question or imperative after the context ends.\n" prompt_query1 = "According to only the information in the document sources provided within the context above, " elif inference_server and inference_server.startswith('openai'): pre_prompt_query1 = "Pay attention and remember the information below, which will help to answer the question or imperative after the context ends. If the answer cannot be primarily obtained from information within the context, then respond that the answer does not appear in the context of the documents.\n" prompt_query1 = "According to (primarily) the information in the document sources provided within context above, " else: pre_prompt_query1 = "" prompt_query1 = "" pre_prompt_summary1 = """In order to write a concise single-paragraph or bulleted list summary, pay attention to the following text\n""" prompt_summary1 = "Using only the information in the document sources above, write a condensed and concise summary of key results (preferably as bullet points):\n" if pre_prompt_query is None: pre_prompt_query = pre_prompt_query1 if prompt_query is None: prompt_query = prompt_query1 if pre_prompt_summary is None: pre_prompt_summary = pre_prompt_summary1 if prompt_summary is None: prompt_summary = prompt_summary1 return pre_prompt_query, prompt_query, pre_prompt_summary, prompt_summary def gr_to_lg(image_loaders, pdf_loaders, url_loaders, **kwargs, ): if image_loaders is None: image_loaders = kwargs['image_loaders_options0'] if pdf_loaders is None: pdf_loaders = kwargs['pdf_loaders_options0'] if url_loaders is None: url_loaders = kwargs['url_loaders_options0'] # translate: # 'auto' wouldn't be used here ret = dict( # urls use_unstructured='Unstructured' in url_loaders, use_playwright='PlayWright' in url_loaders, use_selenium='Selenium' in url_loaders, # pdfs use_pymupdf='on' if 'PyMuPDF' in pdf_loaders else 'off', use_unstructured_pdf='on' if 'Unstructured' in pdf_loaders else 'off', use_pypdf='on' if 'PyPDF' in pdf_loaders else 'off', enable_pdf_ocr='on' if 'OCR' in pdf_loaders else 'off', enable_pdf_doctr='on' if 'DocTR' in pdf_loaders else 'off', try_pdf_as_html='on' if 'TryHTML' in pdf_loaders else 'off', # images enable_ocr='OCR' in image_loaders, enable_doctr='DocTR' in image_loaders, enable_pix2struct='Pix2Struct' in image_loaders, enable_captions='Caption' in image_loaders or 'CaptionBlip2' in image_loaders, ) if 'CaptionBlip2' in image_loaders: # just override, don't actually do both even if user chose both captions_model = "Salesforce/blip2-flan-t5-xl" else: captions_model = kwargs['captions_model'] return ret, captions_model invalid_key_msg = 'Invalid Access Key, request access key from sales@h2o.ai or jon.mckinney@h2o.ai' docs_ordering_types = ['best_first', 'best_near_prompt', 'reverse_ucurve_sort']