|
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 🤖" |
|
|