File size: 1,875 Bytes
fed5c73 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import os
from src.models.base import BaseModel
from src.models.duckling import DucklingHTTPModel
from src.models.t5_ner_extractor import T5NERModel
from src.models.duckling_operator import (
DucklingHTTPOperatorModel,
BaseOperatorModel,
BertOperatorModel,
FasttextOperatorModel,
)
from src.misc.settings import ApiSettings
from src.enum import ModelTypes, DucklingDimensionTypes, OperatorModelTypes
from src.misc.exceptions import ModelTypeError
class ModelBuilder:
@staticmethod
def build_model(settings: ApiSettings) -> BaseModel:
if settings.model_type == ModelTypes.DUCKLING:
return DucklingHTTPModel(
duckling_host=settings.duckling_host,
duckling_port=settings.duckling_port,
dim_types=[
DucklingDimensionTypes.AMOUNT_OF_MONEY,
],
)
elif settings.model_type == ModelTypes.T5_NER:
return T5NERModel(
model_ckpt_dir=os.path.join("ckpt", "ner_model"),
device=settings.device,
)
elif settings.model_type == ModelTypes.DUCKLING_OPERATOR:
operator_model: BaseOperatorModel | None = None
if settings.operator_model_type == OperatorModelTypes.BERT:
operator_model = BertOperatorModel()
elif settings.operator_model_type == OperatorModelTypes.FASTTEXT:
operator_model = FasttextOperatorModel()
return DucklingHTTPOperatorModel(
duckling_host=settings.duckling_host,
duckling_port=settings.duckling_port,
dim_types=[
DucklingDimensionTypes.AMOUNT_OF_MONEY,
],
operator_model=operator_model,
)
else:
raise ModelTypeError("model type is not registered")
|