File size: 1,694 Bytes
e7afcc5 |
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
from enum import Enum, EnumMeta
from typing import Union
class EnumMetaClass(Enum):
def __eq__(self, other):
if self.__class__ is other.__class__:
return self.value.upper() == other.value.upper()
return self.value == other
def __hash__(self):
return hash(self._name_)
def __str__(self):
return self.value
@classmethod
def get_enum(cls, value: str) -> Union[EnumMeta, None]:
return next(
(
enum_val
for enum_val in cls
if (enum_val.value == value)
or (
isinstance(value, str)
and isinstance(enum_val.value, str)
and (value.lower() == enum_val.value.lower() or value.upper() == enum_val.name.upper())
)
),
None,
)
@classmethod
def _missing_(cls, name):
for member in cls:
if isinstance(member.name, str) and isinstance(name, str) and member.name.lower() == name.lower():
return member
class EmbeddingTypes(EnumMetaClass):
NA = "NA"
OPENAI = "OpenAI"
HUGGING_FACE = "Hugging Face"
COHERE = "Cohere"
class TransformType(EnumMetaClass):
RecursiveTransform = "Recursive Text Splitter"
CharacterTransform = "Character Text Splitter"
SpacyTransform = "Spacy Text Splitter"
NLTKTransform = "NLTK Text Splitter"
class IndexerType(EnumMetaClass):
FAISS = "FAISS"
CHROMA = "Chroma"
ELASTICSEARCH = "Elastic Search"
class BotType(EnumMetaClass):
qna = "Question Answering Bot ❓"
conversational = "Chatbot 🤖"
|