import pathlib from functools import lru_cache import pandas as pd from openai import AsyncOpenAI from environs import Env import faiss env = Env() env.read_env() class BaseConfig: BASE_DIR: pathlib.Path = pathlib.Path(__file__).parent.parent OPENAI_CLIENT = AsyncOpenAI(api_key=env('OPENAI_API_KEY')) FAISS_INDEX = faiss.read_index(str(BASE_DIR / 'project' / 'bot' / 'search_tools' / 'products_faiss.index')) SEARCH_RADIUS = 1.2 PRODUCT_PROMPT = "Je bent de virtuele assistent van de Malu Haarlemse winkel. Uw taak is om het product " \ "zeer kort en bondig aan de gebruiker te presenteren. De gebruiker zal vragen om voedsel " \ "te bestellen in de winkel, en u, met behulp van uw vorige antwoord als kennis van " \ "productinformatie, moet kort vertellen over het product, de prijs en aanbieden om het toe " EMPTY_PRODUCT_PROMPT = "Je bent de virtuele assistent van de Malu Haarlemse winkel. Uw taak is om de gebruiker heel kort en bondig te vragen om informatie over het voedsel in meer detail te verstrekken." ANALYZER_PROMPT = """ Je bent een model voor classificatie. Analyseer de boodschap van de assistent en het antwoord van de gebruiker. Je taak is om hun dialoog te classificeren naar een van de antwoordcategorieën "search", "product_list", "purchase". search - wanneer de gebruiker voedselkenmerken, naam, prijs opsomt. De gebruiker zal vragen om een specifiek product te vinden product_list - wanneer de gebruiker vraagt om alle producten die aan de winkelwagen zijn toegevoegd, weer te geven. Of alle producten die hij van plan is te bestellen. purchase - wanneer de assistent voorstelt om een product aan de winkelwagen toe te voegen en de gebruiker akkoord gaat. Dus je antwoord moet slechts één woord bevatten - de categorie waartoe de dialoog van de assistent en de gebruiker behoort (search, product_list of purchase). """ ADD_TO_CART_PROMPT = "Je bent de virtuele assistent van de Malu Haarlemse winkel. Uw taak is om heel kort en bondig te reageren op het verzoek van de gebruiker om voedsel aan het winkelwagentje toe te voegen. Stel bijvoorbeeld dat het gevraagde product aan de winkelwagen is toegevoegd en bied aan om iets anders te kopen" PRODUCT_LIST_PROMPT = "Je bent de virtuele assistent van de Malu Haarlemse winkel. Uw taak, op verzoek van de gebruiker, is om een lijst van alle producten toegevoegd aan de winkelwagen en vertellen de totale kosten. Analyseer de geschiedenis van de dialoog om te begrijpen welke producten de gebruiker aan de winkelwagen heeft toegevoegd" class DevelopmentConfig(BaseConfig): pass class ProductionConfig(BaseConfig): ORIGINS = ["http://127.0.0.1:8000", "http://localhost:8000", 'https://alcolm.com/', 'https://help.alcolm.com/' ] def __init__(self): self.products_dataset = pd.read_csv( str(self.BASE_DIR / 'project' / 'bot' / 'search_tools' / 'cleaned_products.csv')) class TestConfig(BaseConfig): pass @lru_cache() def get_settings() -> DevelopmentConfig | ProductionConfig | TestConfig: config_cls_dict = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'testing': TestConfig } config_name = env('FASTAPI_CONFIG', default='production') config_cls = config_cls_dict[config_name] return config_cls() settings = get_settings()