from enum import Enum
from typing import Optional, Union
from labelbox.schema.media_type import MediaType
[docs]class OntologyKind(Enum):
"""
OntologyKind is an enum that represents the different types of ontologies
"""
ModelEvaluation = "MODEL_EVALUATION"
ResponseCreation = "RESPONSE_CREATION"
Missing = None
@classmethod
def is_supported(cls, value):
return isinstance(value, cls)
@classmethod
def get_ontology_kind_validation_error(cls, ontology_kind):
return TypeError(f"{ontology_kind}: is not a valid ontology kind. Use"
f" any of {OntologyKind.__members__.items()}"
" from OntologyKind.")
@staticmethod
def evaluate_ontology_kind_with_media_type(ontology_kind,
media_type: Optional[MediaType]) -> Union[MediaType, None]:
ontology_to_media = {
OntologyKind.ModelEvaluation: (MediaType.Conversational, "For chat evaluation, media_type must be Conversational."),
OntologyKind.ResponseCreation: (MediaType.Text, "For response creation, media_type must be Text.")
}
if ontology_kind in ontology_to_media:
expected_media_type, error_message = ontology_to_media[ontology_kind]
if media_type is None or media_type == expected_media_type:
media_type = expected_media_type
else:
raise ValueError(error_message)
return media_type
class EditorTaskType(Enum):
ModelChatEvaluation = "MODEL_CHAT_EVALUATION"
ResponseCreation = "RESPONSE_CREATION"
OfflineModelChatEvaluation = "OFFLINE_MODEL_CHAT_EVALUATION"
Missing = None
@classmethod
def is_supported(cls, value):
return isinstance(value, cls)
@classmethod
def _missing_(cls, value) -> 'EditorTaskType':
"""Handle missing null new task types
Handle upper case names for compatibility with
the GraphQL"""
if value is None:
return cls.Missing
for name, member in cls.__members__.items():
if value == name.upper():
return member
return cls.Missing
class EditorTaskTypeMapper:
@staticmethod
def to_editor_task_type(ontology_kind: OntologyKind,
media_type: MediaType) -> EditorTaskType:
if ontology_kind and OntologyKind.is_supported(
ontology_kind) and media_type and MediaType.is_supported(
media_type):
editor_task_type = EditorTaskTypeMapper.map_to_editor_task_type(
ontology_kind, media_type)
else:
editor_task_type = EditorTaskType.Missing
return editor_task_type
@staticmethod
def map_to_editor_task_type(onotology_kind: OntologyKind,
media_type: MediaType) -> EditorTaskType:
if onotology_kind == OntologyKind.ModelEvaluation and media_type == MediaType.Conversational:
return EditorTaskType.ModelChatEvaluation
elif onotology_kind == OntologyKind.ResponseCreation and media_type == MediaType.Text:
return EditorTaskType.ResponseCreation
else:
return EditorTaskType.Missing
[docs]class UploadType(Enum):
Auto = 'AUTO',
Manual = 'MANUAL',
Missing = None
@classmethod
def is_supported(cls, value):
return isinstance(value, cls)
@classmethod
def _missing_(cls, value: object) -> 'UploadType':
if value is None:
return cls.Missing
for name, member in cls.__members__.items():
if value == name.upper():
return member
return cls.Missing