from typing import Any from .artifact import fetch_artifact from .llm_as_judge_constants import Criteria, CriteriaOption, CriteriaWithOptions from .operators import FieldOperator class LoadCriteriaWithOptions(FieldOperator): def process_value(self, text: Any) -> CriteriaWithOptions: return fetch_artifact(text)[0] class CreateCriteriaWithOptionsFromDict(FieldOperator): def process_value(self, criteria_dict: dict) -> Any: return CriteriaWithOptions.from_obj(criteria_dict) class CreateCriteriaWithOptionsFromJson(FieldOperator): def process_value(self, text: str) -> Any: return CriteriaWithOptions.from_jsons(text) class CreateYesNoCriteriaFromString(FieldOperator): def process_value(self, text: Any) -> Any: return CriteriaWithOptions( name=f"Unknown ({text[:20]}...)", description=text, options=[ CriteriaOption(name="Yes", description=""), CriteriaOption(name="No", description=""), ], option_map={ "Yes": 1.0, "No": 0.0, }, ) class CreateYesNoPartiallyCriteriaFromString(FieldOperator): def process_value(self, text: str) -> Any: return CriteriaWithOptions( name=f"Unknown ({text[:20]}...)", description=text, options=[ CriteriaOption(name="Yes", description=""), CriteriaOption(name="Partially", description=""), CriteriaOption(name="No", description=""), ], option_map={ "Yes": 1.0, "Partially": 0.5, "No": 0.0, }, ) class LoadCriteria(FieldOperator): def process_value(self, text: Any) -> Criteria: return fetch_artifact(text)[0] class CreateCriteriaFromDict(FieldOperator): def process_value(self, criteria_dict: dict) -> Any: return Criteria.from_obj(criteria_dict) class CreateCriteriaFromJson(FieldOperator): def process_value(self, text: str) -> Any: return Criteria.from_jsons(text) class CreateCriteriaFromString(FieldOperator): def process_value(self, text: str) -> Any: return Criteria( name=f"Unknown ({text[:20]}...)", description=text, )