import os from collections import namedtuple MODEL_DICT = { "gpt-3.5-turbo": "OpenAI", "gpt-4": "OpenAI", "gpt-4-turbo-preview": "OpenAI", "gpt-4-1106-preview": "OpenAI", # "claude-instant-1": "Anthropic", # "claude-instant-1.2": "Anthropic", # "claude-2": "Anthropic", # "claude-2.1": "Anthropic", # "meta-llama/Llama-2-7b-chat-hf": "Anyscale Endpoints", # "meta-llama/Llama-2-13b-chat-hf": "Anyscale Endpoints", # "meta-llama/Llama-2-70b-chat-hf": "Anyscale Endpoints", # "codellama/CodeLlama-34b-Instruct-hf": "Anyscale Endpoints", # "mistralai/Mistral-7B-Instruct-v0.1": "Anyscale Endpoints", # "HuggingFaceH4/zephyr-7b-beta": "Anyscale Endpoints", # "Azure OpenAI": "Azure OpenAI", } SUPPORTED_MODELS = list(MODEL_DICT.keys()) DEFAULT_MODEL = os.environ.get("DEFAULT_MODEL", "gpt-4-turbo-preview") DEFAULT_SYSTEM_PROMPT = os.environ.get( "DEFAULT_SYSTEM_PROMPT", # "You are a helpful chatbot. Do not rush. Always plan, think, and act in a step-by-step manner.", """Comportati come un operatore di call center di Poste Assicurazioni. Ti vengono rivolte domande su polizze, prestazioni, autorizzazioni, rimborsi. Hai accesso a tutte le informazioni necessarie per rispondere alle domande dei clienti tramite il tool 'user-document-chat'. Usa sempre il 'user-document-chat' per trovare le informazioni necessarie a formulare la risposta. Rispondi sempre in maniera specifica e dettagliata rispetto alla polizza di Poste Assicurazioni accessibile tramite il tool 'user-document-chat'. Se il tool 'user-document-chat' possiede informazioni dirette, ignora la sua risposta, rispondi che questa informazione non è a tua disposizione e offri di connettere il cliente con un operatore umano. Se non sai rispondere ad una domanda, chiedi all'utente le informazioni mancanti oppure rispondi che non hai la risposta e offri di connettere il cliente con un operatore umano. Se non sei sicuro di aver trovato con i tool la risposta corretta, non inventare risposte. Non consigliare mai di leggere la polizza o di cercare informazioni altrove. Rispondi in italiano, usando uno stile amichevole ma formale, sii preciso e conciso nelle risposte.""", ) MIN_TEMP = float(os.environ.get("MIN_TEMPERATURE", 0.0)) MAX_TEMP = float(os.environ.get("MAX_TEMPERATURE", 1.0)) DEFAULT_TEMP = float(os.environ.get("DEFAULT_TEMPERATURE", 0.0)) MIN_MAX_TOKENS = int(os.environ.get("MIN_MAX_TOKENS", 1)) MAX_MAX_TOKENS = int(os.environ.get("MAX_MAX_TOKENS", 1000)) DEFAULT_MAX_TOKENS = int(os.environ.get("DEFAULT_MAX_TOKENS", 1000)) DEFAULT_LANGSMITH_PROJECT = os.environ.get("LANGCHAIN_PROJECT") TEST_QUESTIONS = [ "Come posso ottenerle le credenziali di accesso all'area riservata?", "Quali prestazioni sono presenti nel checkup?", "La risonanza magnetica è coperta dalla polizza?", "Le visite odontoiatriche sono coperte dalla polizza?", "Come posso richiedere il checkup?", "Come posso trovare struttura convenzionata che faccia le risonanze magnetiche?", "Come chiedere autorizzazione per fare una risonanza magnetica?", "Come chiedere un rimborso per una risonanza magnetica?", "Quali prestazioni sono incluse nel pacchetto maternità?", "Come chiedere autorizzazione per prestazioni incluse mel pacchetto maternità?", "Come devo procedere per fare l'estensione della copertura al nucleo familiare?", ] OLD_TEST_QUESTIONS = [ "non ho ricevuto le credenziali di accesso all'area riservata: dove posso trovarle?", "vorrei informazioni relativamente alle prestazioni presenti nel checkup", "la risonanza magnetica è coperta dalla polizza?", "le visite odontoiatriche sono coperte dalla polizza?", "vorrei informazioni su come richiedere il checkup", "vorrei informazioni su come trovare struttura convenzionata che faccia le risonanze magnetiche", "come chiede autorizzazione per fare una risonanza magnetica?", "come chiedere rimborso per una risonanza magnetica?", "quali prestazioni sono incluse nel pacchetto maternità?", "come chiedere autorizzazione per prestazione del pacchetto maternità?", "come devo procedere per fare l'estensione della copertura al nucleo familiare?", "Altro", ] # AZURE_VARS = [ # "AZURE_OPENAI_BASE_URL", # "AZURE_OPENAI_API_VERSION", # "AZURE_OPENAI_DEPLOYMENT_NAME", # "AZURE_OPENAI_EMB_DEPLOYMENT_NAME", # "AZURE_OPENAI_API_KEY", # "AZURE_OPENAI_MODEL_VERSION", # ] # AZURE_DICT = {v: os.environ.get(v, "") for v in AZURE_VARS} SHOW_LANGSMITH_OPTIONS = ( os.environ.get("SHOW_LANGSMITH_OPTIONS", "false").lower() == "true" ) SHOW_AZURE_OPTIONS = os.environ.get("SHOW_AZURE_OPTIONS", "true").lower() == "true" PROVIDER_KEY_DICT = { "OpenAI": os.environ.get("OPENAI_API_KEY", ""), "Anthropic": os.environ.get("ANTHROPIC_API_KEY", ""), "Anyscale Endpoints": os.environ.get("ANYSCALE_API_KEY", ""), "LANGSMITH": os.environ.get("LANGCHAIN_API_KEY", ""), } OPENAI_API_KEY = PROVIDER_KEY_DICT["OpenAI"] MIN_CHUNK_SIZE = 1 MAX_CHUNK_SIZE = 10000 DEFAULT_CHUNK_SIZE = 1000 MIN_CHUNK_OVERLAP = 0 MAX_CHUNK_OVERLAP = 10000 DEFAULT_CHUNK_OVERLAP = 100 DEFAULT_RETRIEVER_K = 5 DEFAULT_VALUES = namedtuple( "DEFAULT_VALUES", [ "MODEL_DICT", "SUPPORTED_MODELS", "DEFAULT_MODEL", "DEFAULT_SYSTEM_PROMPT", "MIN_TEMP", "MAX_TEMP", "DEFAULT_TEMP", "MIN_MAX_TOKENS", "MAX_MAX_TOKENS", "DEFAULT_MAX_TOKENS", "DEFAULT_LANGSMITH_PROJECT", # "AZURE_VARS", # "AZURE_DICT", "PROVIDER_KEY_DICT", "OPENAI_API_KEY", "MIN_CHUNK_SIZE", "MAX_CHUNK_SIZE", "DEFAULT_CHUNK_SIZE", "MIN_CHUNK_OVERLAP", "MAX_CHUNK_OVERLAP", "DEFAULT_CHUNK_OVERLAP", "DEFAULT_RETRIEVER_K", "SHOW_LANGSMITH_OPTIONS", "SHOW_AZURE_OPTIONS", "TEST_QUESTIONS", ], ) default_values = DEFAULT_VALUES( MODEL_DICT, SUPPORTED_MODELS, DEFAULT_MODEL, DEFAULT_SYSTEM_PROMPT, MIN_TEMP, MAX_TEMP, DEFAULT_TEMP, MIN_MAX_TOKENS, MAX_MAX_TOKENS, DEFAULT_MAX_TOKENS, DEFAULT_LANGSMITH_PROJECT, # AZURE_VARS, # AZURE_DICT, PROVIDER_KEY_DICT, OPENAI_API_KEY, MIN_CHUNK_SIZE, MAX_CHUNK_SIZE, DEFAULT_CHUNK_SIZE, MIN_CHUNK_OVERLAP, MAX_CHUNK_OVERLAP, DEFAULT_CHUNK_OVERLAP, DEFAULT_RETRIEVER_K, SHOW_LANGSMITH_OPTIONS, SHOW_AZURE_OPTIONS, TEST_QUESTIONS, )