11import dataclasses
22import inspect
3+ from collections .abc import Callable , Iterable , Mapping
34from dataclasses import dataclass
45from enum import Enum
56from functools import partial
6- from typing import Any , Callable , Dict , Iterable , List , Mapping , Optional , Type
7+ from typing import Any
78
89from deepeval .evaluate .types import TestResult
910from deepeval .metrics import (
@@ -83,8 +84,8 @@ class MetricResult:
8384 """
8485
8586 name : str
86- score : Optional [ float ] = None
87- explanation : Optional [ str ] = None
87+ score : float | None = None
88+ explanation : str | None = None
8889
8990 def to_dict (self ):
9091 return dataclasses .asdict (self )
@@ -112,21 +113,21 @@ class MetricDescriptor:
112113 """
113114
114115 metric : DeepEvalMetric
115- backend : Type [BaseMetric ]
116- input_parameters : Dict [str , Type ]
116+ backend : type [BaseMetric ]
117+ input_parameters : dict [str , type ]
117118 input_converter : Callable [[Any ], Iterable [LLMTestCase ]]
118- output_converter : Callable [[TestResult ], List [MetricResult ]]
119- init_parameters : Optional [ Mapping [str , Type ]] = None
119+ output_converter : Callable [[TestResult ], list [MetricResult ]]
120+ init_parameters : Mapping [str , type ] | None = None
120121
121122 @classmethod
122123 def new (
123124 cls ,
124125 metric : DeepEvalMetric ,
125- backend : Type [BaseMetric ],
126+ backend : type [BaseMetric ],
126127 input_converter : Callable [[Any ], Iterable [LLMTestCase ]],
127- output_converter : Optional [ Callable [[TestResult ], List [MetricResult ]]] = None ,
128+ output_converter : Callable [[TestResult ], list [MetricResult ]] | None = None ,
128129 * ,
129- init_parameters : Optional [ Mapping [str , Type ]] = None ,
130+ init_parameters : Mapping [str , type ] | None = None ,
130131 ) -> "MetricDescriptor" :
131132 input_converter_signature = inspect .signature (input_converter )
132133 input_parameters = {}
@@ -175,27 +176,27 @@ def _validate_input_elements(**kwargs):
175176 raise ValueError (msg )
176177
177178 @staticmethod
178- def validate_input_parameters (metric : DeepEvalMetric , expected : Dict [str , Any ], received : Dict [str , Any ]) -> None :
179+ def validate_input_parameters (metric : DeepEvalMetric , expected : dict [str , Any ], received : dict [str , Any ]) -> None :
179180 for param , _ in expected .items ():
180181 if param not in received :
181182 msg = f"DeepEval evaluator expected input parameter '{ param } ' for metric '{ metric } '"
182183 raise ValueError (msg )
183184
184185 @staticmethod
185186 def question_context_response (
186- questions : List [str ], contexts : List [ List [str ]], responses : List [str ]
187+ questions : list [str ], contexts : list [ list [str ]], responses : list [str ]
187188 ) -> Iterable [LLMTestCase ]:
188189 InputConverters ._validate_input_elements (questions = questions , contexts = contexts , responses = responses )
189- for q , c , r in zip (questions , contexts , responses ): # type: ignore
190+ for q , c , r in zip (questions , contexts , responses , strict = True ): # type: ignore
190191 test_case = LLMTestCase (input = q , actual_output = r , retrieval_context = c )
191192 yield test_case
192193
193194 @staticmethod
194195 def question_context_response_ground_truth (
195- questions : List [str ], contexts : List [ List [str ]], responses : List [str ], ground_truths : List [str ]
196+ questions : list [str ], contexts : list [ list [str ]], responses : list [str ], ground_truths : list [str ]
196197 ) -> Iterable [LLMTestCase ]:
197198 InputConverters ._validate_input_elements (questions = questions , contexts = contexts , responses = responses )
198- for q , c , r , gt in zip (questions , contexts , responses , ground_truths ): # type: ignore
199+ for q , c , r , gt in zip (questions , contexts , responses , ground_truths , strict = True ): # type: ignore
199200 test_case = LLMTestCase (input = q , actual_output = r , retrieval_context = c , expected_output = gt )
200201 yield test_case
201202
@@ -210,8 +211,8 @@ class OutputConverters:
210211 @staticmethod
211212 def default (
212213 metric : DeepEvalMetric ,
213- ) -> Callable [[TestResult ], List [MetricResult ]]:
214- def inner (output : TestResult , metric : DeepEvalMetric ) -> List [MetricResult ]:
214+ ) -> Callable [[TestResult ], list [MetricResult ]]:
215+ def inner (output : TestResult , metric : DeepEvalMetric ) -> list [MetricResult ]:
215216 metric_name = str (metric )
216217 assert output .metrics_data
217218 assert len (output .metrics_data ) == 1
@@ -227,30 +228,30 @@ def inner(output: TestResult, metric: DeepEvalMetric) -> List[MetricResult]:
227228 DeepEvalMetric .ANSWER_RELEVANCY ,
228229 AnswerRelevancyMetric ,
229230 InputConverters .question_context_response , # type: ignore
230- init_parameters = {"model" : Optional [ str ] }, # type: ignore
231+ init_parameters = {"model" : str | None }, # type: ignore
231232 ),
232233 DeepEvalMetric .FAITHFULNESS : MetricDescriptor .new (
233234 DeepEvalMetric .FAITHFULNESS ,
234235 FaithfulnessMetric ,
235236 InputConverters .question_context_response , # type: ignore
236- init_parameters = {"model" : Optional [ str ] }, # type: ignore
237+ init_parameters = {"model" : str | None }, # type: ignore
237238 ),
238239 DeepEvalMetric .CONTEXTUAL_PRECISION : MetricDescriptor .new (
239240 DeepEvalMetric .CONTEXTUAL_PRECISION ,
240241 ContextualPrecisionMetric ,
241242 InputConverters .question_context_response_ground_truth , # type: ignore
242- init_parameters = {"model" : Optional [ str ] }, # type: ignore
243+ init_parameters = {"model" : str | None }, # type: ignore
243244 ),
244245 DeepEvalMetric .CONTEXTUAL_RECALL : MetricDescriptor .new (
245246 DeepEvalMetric .CONTEXTUAL_RECALL ,
246247 ContextualRecallMetric ,
247248 InputConverters .question_context_response_ground_truth , # type: ignore
248- init_parameters = {"model" : Optional [ str ] }, # type: ignore
249+ init_parameters = {"model" : str | None }, # type: ignore
249250 ),
250251 DeepEvalMetric .CONTEXTUAL_RELEVANCE : MetricDescriptor .new (
251252 DeepEvalMetric .CONTEXTUAL_RELEVANCE ,
252253 ContextualRelevancyMetric ,
253254 InputConverters .question_context_response , # type: ignore
254- init_parameters = {"model" : Optional [ str ] }, # type: ignore
255+ init_parameters = {"model" : str | None }, # type: ignore
255256 ),
256257}
0 commit comments