JaveaAI / project /config.py
brestok's picture
Update project/config.py
5b6122a verified
import os
import faiss
import pandas as pd
from openai import AsyncOpenAI
import pathlib
from functools import lru_cache
from environs import Env
from transformers import AutoModel, AutoTokenizer, AutoModelForTokenClassification
import torch
env = Env()
env.read_env()
class BaseConfig:
BASE_DIR: pathlib.Path = pathlib.Path(__file__).parent.parent
DATA_DIR: pathlib.Path = BASE_DIR / 'project' / 'data'
MODEL_NAME = 'sentence-transformers/paraphrase-multilingual-mpnet-base-v2'
INFO_MODEL = AutoModel.from_pretrained(MODEL_NAME)
INFO_TOKENIZER = AutoTokenizer.from_pretrained(MODEL_NAME)
OPENAI_CLIENT = AsyncOpenAI(api_key=os.getenv('OPENAI_API_KEY'))
FAISS_INDEX = faiss.read_index(str(BASE_DIR / 'faiss_javea.index'))
NLP_MODEL_NAME = 'Babelscape/wikineural-multilingual-ner'
NLP_TOKENIZER = AutoTokenizer.from_pretrained("Babelscape/wikineural-multilingual-ner")
NLP_MODEL = AutoModelForTokenClassification.from_pretrained("Babelscape/wikineural-multilingual-ner")
class DevelopmentConfig(BaseConfig):
pass
class ProductionConfig(BaseConfig):
DATABASE_URL = f"postgresql+asyncpg://{env('DATABASE_USER')}:" \
f"{env('DATABASE_PASSWORD')}@" \
f"{env('DATABASE_HOST')}:" \
f"{env('DATABASE_PORT')}/" \
f"{env('DATABASE_NAME')}"
PROMPT = "Jij bent een AI-expert in Jávea aan de Costa Blanca in Spanje, gespecialiseerd in het beantwoorden van " \
"vragen op basis van gegevens verzameld uit sociale media, met name Facebook-posts. Jouw doel is om " \
"gebruikers advies te geven dat gebaseerd is op de meest voorkomende aanbevelingen in deze gegevens. " \
"Wanneer er een vraag wordt gesteld, analyseer je de beschikbare informatie en geef je een beknopt " \
"antwoord op basis van jouw eerdere boodschappen. Als het advies herhaaldelijk door verschillende " \
"gebruikers wordt gegeven, benadruk dan dat dit als betrouwbaar en waardevol wordt beschouwd. Nooit " \
"vermelden dat jouw kennis afkomstig is van posts of opmerkingen. "
EMPTY_PROMPT = "Je bent een kunstmatige intelligentie, een expert in Jávea aan de Costa Blanca in Spanje, " \
"gespecialiseerd in het beantwoorden van vragen. Je taak is om mensen te helpen zich thuis te " \
"voelen in hun nieuwe stad. Wanneer een vraag wordt gesteld, dien je beleefd te melden dat er geen " \
"antwoord beschikbaar is in je kennisdatabank en de gebruiker aan te raden de benodigde informatie " \
"op internet te vinden. "
GOOGLE_PLACES_API_KEY = env('GOOGLE_PLACES_API_KEY')
def __init__(self):
if torch.cuda.is_available():
device = torch.device("cuda")
else:
device = torch.device("cpu")
self.device = device
self.INFO_MODEL.to(device)
self.products_dataset = pd.read_csv(self.BASE_DIR / 'chunks_javea.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='development')
config_cls = config_cls_dict[config_name]
return config_cls()
settings = get_settings()