7
7
from deepeval .utils import generate_uuid
8
8
9
9
10
- class BaseMetric :
10
+ class MetricMeta (type ):
11
+ def __new__ (cls , name , bases , attrs ):
12
+ # Create the new class
13
+ new_class = super ().__new__ (cls , name , bases , attrs )
14
+ # Assign new ContextVar instances with unique identifiers
15
+ new_class ._score = ContextVar (str (uuid .uuid4 ()), default = None )
16
+ new_class ._score_breakdown = ContextVar (str (uuid .uuid4 ()), default = None )
17
+ new_class ._reason = ContextVar (str (uuid .uuid4 ()), default = None )
18
+ new_class ._success = ContextVar (str (uuid .uuid4 ()), default = None )
19
+ new_class ._error = ContextVar (str (uuid .uuid4 ()), default = None )
20
+ return new_class
21
+
22
+
23
+ class BaseMetric (metaclass = MetricMeta ):
11
24
12
25
evaluation_model : Optional [str ] = None
13
26
strict_mode : bool = False
@@ -16,22 +29,6 @@ class BaseMetric:
16
29
include_reason : bool = False
17
30
evaluation_cost : Optional [float ] = None
18
31
19
- _score : ContextVar [Optional [float ]] = ContextVar (
20
- generate_uuid (), default = None
21
- )
22
- _score_breakdown : ContextVar [Optional [Dict ]] = ContextVar (
23
- generate_uuid (), default = None
24
- )
25
- _reason : ContextVar [Optional [str ]] = ContextVar (
26
- generate_uuid (), default = None
27
- )
28
- _success : ContextVar [Optional [bool ]] = ContextVar (
29
- generate_uuid (), default = None
30
- )
31
- _error : ContextVar [Optional [str ]] = ContextVar (
32
- generate_uuid (), default = None
33
- )
34
-
35
32
@property
36
33
def score (self ) -> Optional [float ]:
37
34
return self ._score .get ()
0 commit comments