deepeval 3.6.9__py3-none-any.whl → 3.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. deepeval/_version.py +1 -1
  2. deepeval/anthropic/__init__.py +19 -0
  3. deepeval/anthropic/extractors.py +94 -0
  4. deepeval/anthropic/patch.py +169 -0
  5. deepeval/anthropic/utils.py +225 -0
  6. deepeval/benchmarks/drop/drop.py +40 -14
  7. deepeval/benchmarks/ifeval/ifeval.py +2 -2
  8. deepeval/confident/types.py +4 -2
  9. deepeval/config/settings.py +154 -11
  10. deepeval/config/settings_manager.py +4 -0
  11. deepeval/integrations/crewai/handler.py +36 -0
  12. deepeval/integrations/langchain/callback.py +27 -2
  13. deepeval/integrations/llama_index/handler.py +58 -4
  14. deepeval/integrations/llama_index/utils.py +24 -0
  15. deepeval/metrics/__init__.py +5 -0
  16. deepeval/metrics/exact_match/__init__.py +0 -0
  17. deepeval/metrics/exact_match/exact_match.py +94 -0
  18. deepeval/metrics/pattern_match/__init__.py +0 -0
  19. deepeval/metrics/pattern_match/pattern_match.py +103 -0
  20. deepeval/metrics/task_completion/task_completion.py +9 -2
  21. deepeval/model_integrations/__init__.py +0 -0
  22. deepeval/model_integrations/utils.py +116 -0
  23. deepeval/models/base_model.py +3 -1
  24. deepeval/openai/__init__.py +3 -1
  25. deepeval/openai/extractors.py +2 -2
  26. deepeval/openai/utils.py +7 -31
  27. deepeval/prompt/api.py +11 -10
  28. deepeval/prompt/prompt.py +5 -4
  29. deepeval/telemetry.py +3 -3
  30. deepeval/test_case/llm_test_case.py +3 -2
  31. deepeval/test_run/api.py +3 -2
  32. deepeval/test_run/cache.py +4 -3
  33. deepeval/test_run/test_run.py +24 -5
  34. deepeval/tracing/api.py +11 -10
  35. deepeval/tracing/otel/exporter.py +11 -0
  36. deepeval/tracing/patchers.py +102 -1
  37. deepeval/tracing/trace_context.py +13 -4
  38. deepeval/tracing/tracing.py +10 -1
  39. deepeval/tracing/types.py +8 -8
  40. deepeval/tracing/utils.py +9 -0
  41. deepeval/utils.py +44 -2
  42. {deepeval-3.6.9.dist-info → deepeval-3.7.0.dist-info}/METADATA +2 -2
  43. {deepeval-3.6.9.dist-info → deepeval-3.7.0.dist-info}/RECORD +47 -37
  44. /deepeval/{openai → model_integrations}/types.py +0 -0
  45. {deepeval-3.6.9.dist-info → deepeval-3.7.0.dist-info}/LICENSE.md +0 -0
  46. {deepeval-3.6.9.dist-info → deepeval-3.7.0.dist-info}/WHEEL +0 -0
  47. {deepeval-3.6.9.dist-info → deepeval-3.7.0.dist-info}/entry_points.txt +0 -0
@@ -493,6 +493,17 @@ class ConfidentSpanExporter(SpanExporter):
493
493
  output_token_count = span.attributes.get(
494
494
  "confident.llm.output_token_count"
495
495
  )
496
+
497
+ # fallback to gen ai attributes if not found in confident attributes
498
+ if not input_token_count:
499
+ input_token_count = span.attributes.get(
500
+ "gen_ai.usage.input_tokens"
501
+ )
502
+ if not output_token_count:
503
+ output_token_count = span.attributes.get(
504
+ "gen_ai.usage.output_tokens"
505
+ )
506
+
496
507
  cost_per_input_token = span.attributes.get(
497
508
  "confident.llm.cost_per_input_token"
498
509
  )
@@ -1,6 +1,8 @@
1
- from openai import OpenAI
2
1
  import functools
3
2
 
3
+ from anthropic import Anthropic
4
+ from openai import OpenAI
5
+
4
6
  from deepeval.tracing.context import update_current_span, update_llm_span
5
7
  from deepeval.tracing.context import current_span_context
6
8
  from deepeval.tracing.types import LlmSpan
@@ -82,3 +84,102 @@ def patch_openai_client(client: OpenAI):
82
84
  return response
83
85
 
84
86
  setattr(current_obj, method_name, wrapped_method)
87
+
88
+
89
+ def patch_anthropic_client(client: Anthropic):
90
+ """
91
+ Patch an Anthropic client instance to add tracing capabilities.
92
+
93
+ Args:
94
+ client: An instance of Anthropic client to patch
95
+ """
96
+ original_methods = {}
97
+
98
+ methods_to_patch = [
99
+ "messages.create",
100
+ ]
101
+
102
+ for method_path in methods_to_patch:
103
+ parts = method_path.split(".")
104
+ current_obj = client
105
+
106
+ for part in parts[:-1]:
107
+ if not hasattr(current_obj, part):
108
+ print(f"Warning: Cannot find {part} in the path {method_path}")
109
+ continue
110
+ current_obj = getattr(current_obj, part)
111
+
112
+ method_name = parts[-1]
113
+ if not hasattr(current_obj, method_name):
114
+ print(
115
+ f"Warning: Cannot find method {method_name} in the path {method_path}"
116
+ )
117
+ continue
118
+
119
+ method = getattr(current_obj, method_name)
120
+
121
+ if callable(method) and not isinstance(method, type):
122
+ original_methods[method_path] = method
123
+
124
+ @functools.wraps(method)
125
+ def wrapped_method(*args, original_method=method, **kwargs):
126
+ current_span = current_span_context.get()
127
+ response = original_method(*args, **kwargs)
128
+
129
+ if isinstance(current_span, LlmSpan):
130
+ model = kwargs.get("model", None)
131
+ if model is None:
132
+ raise ValueError("model not found in client")
133
+
134
+ current_span.model = model
135
+
136
+ output = None
137
+ try:
138
+ if (
139
+ hasattr(response, "content")
140
+ and response.content
141
+ and len(response.content) > 0
142
+ ):
143
+ for block in response.content:
144
+ if hasattr(block, "text"):
145
+ output = block.text
146
+ break
147
+ except Exception:
148
+ pass
149
+
150
+ input_token_count = None
151
+ output_token_count = None
152
+ try:
153
+ if hasattr(response, "usage"):
154
+ usage = response.usage
155
+ # usage can be a dict or an object with attributes
156
+ if isinstance(usage, dict):
157
+ input_token_count = usage.get(
158
+ "input_tokens", None
159
+ )
160
+ output_token_count = usage.get(
161
+ "output_tokens", None
162
+ )
163
+ else:
164
+ input_token_count = getattr(
165
+ usage, "input_tokens", None
166
+ )
167
+ output_token_count = getattr(
168
+ usage, "output_tokens", None
169
+ )
170
+ except Exception:
171
+ pass
172
+
173
+ update_current_span(
174
+ input=kwargs.get("messages", "INPUT_MESSAGE_NOT_FOUND"),
175
+ output=output if output else "OUTPUT_MESSAGE_NOT_FOUND",
176
+ )
177
+ update_llm_span(
178
+ input_token_count=input_token_count,
179
+ output_token_count=output_token_count,
180
+ )
181
+ return response
182
+
183
+ setattr(current_obj, method_name, wrapped_method)
184
+
185
+ return original_methods
@@ -1,13 +1,15 @@
1
- from typing import Optional, List, Dict, Any
2
1
  from contextvars import ContextVar
3
2
  from contextlib import contextmanager
4
3
  from dataclasses import dataclass
4
+ from typing import Optional, List, Dict, Any
5
5
 
6
- from .tracing import trace_manager
7
- from .context import current_trace_context, update_current_trace
8
- from deepeval.prompt import Prompt
9
6
  from deepeval.metrics import BaseMetric
7
+ from deepeval.prompt import Prompt
10
8
  from deepeval.test_case.llm_test_case import ToolCall
9
+ from deepeval.tracing.context import current_trace_context, update_current_trace
10
+ from deepeval.tracing.tracing import trace_manager
11
+ from deepeval.tracing.types import TraceWorkerStatus
12
+ from deepeval.tracing.utils import is_async_context
11
13
 
12
14
 
13
15
  @dataclass
@@ -59,6 +61,13 @@ def trace(
59
61
  metrics: Optional[List[BaseMetric]] = None,
60
62
  metric_collection: Optional[str] = None,
61
63
  ):
64
+ if is_async_context():
65
+ trace_manager._print_trace_status(
66
+ message="Warning: Detected use of the synchronous 'trace' context manager within an async method",
67
+ trace_worker_status=TraceWorkerStatus.WARNING,
68
+ description="Wrapping an async method with the synchronous 'trace' context manager may lead to unexpected behavior.",
69
+ )
70
+
62
71
  current_trace = current_trace_context.get()
63
72
 
64
73
  if not current_trace:
@@ -19,6 +19,7 @@ import random
19
19
  import atexit
20
20
  import queue
21
21
  import uuid
22
+ from anthropic import Anthropic
22
23
  from openai import OpenAI
23
24
  from rich.console import Console
24
25
  from rich.progress import Progress
@@ -38,7 +39,10 @@ from deepeval.tracing.api import (
38
39
  TraceSpanApiStatus,
39
40
  )
40
41
  from deepeval.telemetry import capture_send_trace
41
- from deepeval.tracing.patchers import patch_openai_client
42
+ from deepeval.tracing.patchers import (
43
+ patch_anthropic_client,
44
+ patch_openai_client,
45
+ )
42
46
  from deepeval.tracing.types import (
43
47
  AgentSpan,
44
48
  BaseSpan,
@@ -111,6 +115,7 @@ class TraceManager:
111
115
 
112
116
  self.sampling_rate = settings.CONFIDENT_TRACE_SAMPLE_RATE
113
117
  validate_sampling_rate(self.sampling_rate)
118
+ self.anthropic_client = None
114
119
  self.openai_client = None
115
120
  self.tracing_enabled = True
116
121
 
@@ -149,6 +154,7 @@ class TraceManager:
149
154
  environment: Optional[str] = None,
150
155
  sampling_rate: Optional[float] = None,
151
156
  confident_api_key: Optional[str] = None,
157
+ anthropic_client: Optional[Anthropic] = None,
152
158
  openai_client: Optional[OpenAI] = None,
153
159
  tracing_enabled: Optional[bool] = None,
154
160
  ) -> None:
@@ -165,6 +171,9 @@ class TraceManager:
165
171
  if openai_client is not None:
166
172
  self.openai_client = openai_client
167
173
  patch_openai_client(openai_client)
174
+ if anthropic_client is not None:
175
+ self.anthropic_client = anthropic_client
176
+ patch_anthropic_client(anthropic_client)
168
177
  if tracing_enabled is not None:
169
178
  self.tracing_enabled = tracing_enabled
170
179
 
deepeval/tracing/types.py CHANGED
@@ -1,9 +1,11 @@
1
1
  from enum import Enum
2
2
  from dataclasses import dataclass, field
3
- from pydantic import BaseModel, Field
3
+ from pydantic import BaseModel, Field, ConfigDict
4
4
  from typing import Any, Dict, List, Optional, Union, Literal
5
5
  from rich.progress import Progress
6
6
 
7
+ from deepeval.utils import make_model_config
8
+
7
9
  from deepeval.prompt.prompt import Prompt
8
10
  from deepeval.test_case.llm_test_case import ToolCall
9
11
  from deepeval.test_case import LLMTestCase
@@ -55,6 +57,8 @@ class LlmOutput(BaseModel):
55
57
 
56
58
 
57
59
  class BaseSpan(BaseModel):
60
+ model_config = make_model_config(arbitrary_types_allowed=True)
61
+
58
62
  uuid: str
59
63
  status: TraceSpanStatus
60
64
  children: List["BaseSpan"] = Field(default_factory=list)
@@ -90,9 +94,6 @@ class BaseSpan(BaseModel):
90
94
  None, serialization_alias="expectedTools"
91
95
  )
92
96
 
93
- class Config:
94
- arbitrary_types_allowed = True
95
-
96
97
 
97
98
  class AgentSpan(BaseSpan):
98
99
  name: str
@@ -125,7 +126,7 @@ class LlmSpan(BaseSpan):
125
126
  # output_metadata: Optional[Dict[str, Any]] = Field(None, serialization_alias="outputMetadata")
126
127
 
127
128
  # for serializing `prompt`
128
- model_config = {"arbitrary_types_allowed": True}
129
+ model_config = make_model_config(arbitrary_types_allowed=True)
129
130
 
130
131
 
131
132
  class RetrieverSpan(BaseSpan):
@@ -140,6 +141,8 @@ class ToolSpan(BaseSpan):
140
141
 
141
142
 
142
143
  class Trace(BaseModel):
144
+ model_config = make_model_config(arbitrary_types_allowed=True)
145
+
143
146
  uuid: str = Field(serialization_alias="uuid")
144
147
  status: TraceSpanStatus
145
148
  root_spans: List[BaseSpan] = Field(serialization_alias="rootSpans")
@@ -174,9 +177,6 @@ class Trace(BaseModel):
174
177
  None, serialization_alias="expectedTools"
175
178
  )
176
179
 
177
- class Config:
178
- arbitrary_types_allowed = True
179
-
180
180
 
181
181
  class TraceAttributes(BaseModel):
182
182
  name: Optional[str] = None
deepeval/tracing/utils.py CHANGED
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import os
2
3
  from typing import Dict, Any
3
4
  from datetime import datetime, timezone
@@ -191,3 +192,11 @@ def prepare_tool_call_input_parameters(output: Any) -> Dict[str, Any]:
191
192
  if res and not isinstance(res, dict):
192
193
  res = {"output": res}
193
194
  return res
195
+
196
+
197
+ def is_async_context() -> bool:
198
+ try:
199
+ asyncio.get_running_loop()
200
+ return True
201
+ except RuntimeError:
202
+ return False
deepeval/utils.py CHANGED
@@ -21,7 +21,6 @@ from pydantic import BaseModel
21
21
  from rich.progress import Progress
22
22
  from rich.console import Console, Theme
23
23
 
24
- from deepeval.confident.api import set_confident_api_key
25
24
  from deepeval.config.settings import get_settings
26
25
  from deepeval.config.utils import (
27
26
  get_env_bool,
@@ -29,6 +28,48 @@ from deepeval.config.utils import (
29
28
  )
30
29
 
31
30
 
31
+ #####################
32
+ # Pydantic Compat #
33
+ #####################
34
+
35
+ import pydantic
36
+
37
+ PYDANTIC_V2 = pydantic.VERSION.startswith("2")
38
+
39
+
40
+ def make_model_config(**kwargs):
41
+ """
42
+ Create a model configuration that works with both Pydantic v1 and v2.
43
+
44
+ Usage in a model (Pydantic v2 style):
45
+ class MyModel(BaseModel):
46
+ model_config = make_model_config(arbitrary_types_allowed=True)
47
+ field: str
48
+
49
+ This will work correctly in both v1 and v2:
50
+ - In v2: Returns ConfigDict(**kwargs)
51
+ - In v1: Returns a Config class with the attributes set
52
+
53
+ Args:
54
+ **kwargs: Configuration options (e.g., use_enum_values=True, arbitrary_types_allowed=True)
55
+
56
+ Returns:
57
+ ConfigDict (v2) or Config class (v1)
58
+ """
59
+ if PYDANTIC_V2:
60
+ from pydantic import ConfigDict
61
+
62
+ return ConfigDict(**kwargs)
63
+ else:
64
+ # For Pydantic v1, create an inner Config class
65
+ class Config:
66
+ pass
67
+
68
+ for key, value in kwargs.items():
69
+ setattr(Config, key, value)
70
+ return Config
71
+
72
+
32
73
  ###############
33
74
  # Local Types #
34
75
  ###############
@@ -232,6 +273,7 @@ def login(api_key: str):
232
273
  raise ValueError("Unable to login, please provide a non-empty api key.")
233
274
 
234
275
  from rich import print
276
+ from deepeval.confident.api import set_confident_api_key
235
277
 
236
278
  set_confident_api_key(api_key)
237
279
  print(
@@ -751,7 +793,7 @@ custom_console = Console(theme=my_theme)
751
793
 
752
794
 
753
795
  def format_error_text(
754
- exc: BaseException, *, with_stack: bool | None = None
796
+ exc: BaseException, *, with_stack: Optional[bool] = None
755
797
  ) -> str:
756
798
  if with_stack is None:
757
799
  with_stack = logging.getLogger("deepeval").isEnabledFor(logging.DEBUG)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepeval
3
- Version: 3.6.9
3
+ Version: 3.7.0
4
4
  Summary: The LLM Evaluation Framework
5
5
  Home-page: https://github.com/confident-ai/deepeval
6
6
  License: Apache-2.0
@@ -25,7 +25,7 @@ Requires-Dist: opentelemetry-api (>=1.24.0,<2.0.0)
25
25
  Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (>=1.24.0,<2.0.0)
26
26
  Requires-Dist: opentelemetry-sdk (>=1.24.0,<2.0.0)
27
27
  Requires-Dist: portalocker
28
- Requires-Dist: posthog (>=6.3.0,<7.0.0)
28
+ Requires-Dist: posthog (>=5.4.0,<6.0.0)
29
29
  Requires-Dist: pydantic (>=2.11.7,<3.0.0)
30
30
  Requires-Dist: pydantic-settings (>=2.10.1,<3.0.0)
31
31
  Requires-Dist: pyfiglet
@@ -1,8 +1,12 @@
1
1
  deepeval/__init__.py,sha256=IqShG98ALpA1gm_qL2Jq56AJoafAHpcUTSvpgH4HpZM,3062
2
- deepeval/_version.py,sha256=WydMbWwXQz50U1Fi-HlskQWK159gVx6D6BKpIHCo2A8,27
2
+ deepeval/_version.py,sha256=bPhKx4EQ2NERTgvbEyhCN4T_xM09gnHtx-cpi5u28n4,27
3
3
  deepeval/annotation/__init__.py,sha256=ZFhUVNNuH_YgQSZJ-m5E9iUb9TkAkEV33a6ouMDZ8EI,111
4
4
  deepeval/annotation/annotation.py,sha256=3j3-syeJepAcEj3u3e4T_BeRDzNr7yXGDIoNQGMKpwQ,2298
5
5
  deepeval/annotation/api.py,sha256=EYN33ACVzVxsFleRYm60KB4Exvff3rPJKt1VBuuX970,2147
6
+ deepeval/anthropic/__init__.py,sha256=D-ZcS8ifsHftChpoZaiCTCBr5oh7jHAP0SrufJx6rCU,595
7
+ deepeval/anthropic/extractors.py,sha256=BKw8oVoyE3vxjO9IlZ2AeJ_CSM7viaCTFOqgu-4Vqik,2892
8
+ deepeval/anthropic/patch.py,sha256=rt7cfM_-tO2hUqviCjbg6TzM-T0nSF-MHwdyXoWfrfU,5184
9
+ deepeval/anthropic/utils.py,sha256=3utMDJx1qUniRg1ciD_109A3Utp2wnkRHLZPDmBt9kM,8460
6
10
  deepeval/benchmarks/__init__.py,sha256=pLVwayKpbS0atJ_fIx2GRV9O5Z9ahLgInqydQvMDfvg,901
7
11
  deepeval/benchmarks/arc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
12
  deepeval/benchmarks/arc/arc.py,sha256=GOp6I9PhmHIj4eoximHzLHm4O3Af1YihjAaHDhlWXfc,6317
@@ -77,7 +81,7 @@ deepeval/benchmarks/bool_q/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
77
81
  deepeval/benchmarks/bool_q/bool_q.py,sha256=wJM4-wSybT8EwgDJVB4p3QYXGNzLD3tdrpGE1cNEz_E,5507
78
82
  deepeval/benchmarks/bool_q/template.py,sha256=pgNj4RR6-4VJDDySwnKt-MpghBCjVlZ7fPKY6PltllQ,4055
79
83
  deepeval/benchmarks/drop/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- deepeval/benchmarks/drop/drop.py,sha256=rGcqd79-IfQ2tvPuAL6wrON4R0hBiVGBy1OtDRmertE,12042
84
+ deepeval/benchmarks/drop/drop.py,sha256=IL-6L9lfavclKYYVlmJji8dxGqeN2-oSpYGo6szE_DM,13341
81
85
  deepeval/benchmarks/drop/task.py,sha256=RV7DEXF192IOsY-yIVdlGb_y-A_sS5APPn8PGOPn5yU,17950
82
86
  deepeval/benchmarks/drop/template.py,sha256=1P0mx_71Bxr9juIA8nGpVRIrP8NSoDILkIicjWvqE94,1376
83
87
  deepeval/benchmarks/equity_med_qa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -96,7 +100,7 @@ deepeval/benchmarks/human_eval/human_eval.py,sha256=cx4x5OAeCrTjuUdQI7gjeSY_pUL3
96
100
  deepeval/benchmarks/human_eval/task.py,sha256=lEHJpEiRbw5cXUKA_id0J5gQwae1G1T1JCJAeeTpXGg,5412
97
101
  deepeval/benchmarks/human_eval/template.py,sha256=rcCHSb0wP_FS9DQPaoBn-iwgicI1OyEdFCkZLQ1vxPk,647
98
102
  deepeval/benchmarks/ifeval/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
99
- deepeval/benchmarks/ifeval/ifeval.py,sha256=MH1jqyzojQS5e357_fGRj-WT4pMRVkfU2U00mbn3HU8,22273
103
+ deepeval/benchmarks/ifeval/ifeval.py,sha256=xz_23g_cSJrKXxtQYTXScAXZtGiqy5vjuINWhmopb1g,22286
100
104
  deepeval/benchmarks/ifeval/template.py,sha256=lt_TNYlfcAm7JTmWvbqdmay62Qq_RFtj0ugIChqwVnU,5023
101
105
  deepeval/benchmarks/lambada/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
106
  deepeval/benchmarks/lambada/lambada.py,sha256=FExZLpDBgQfYe9o-MBS0LEy0-i4jHGeFHo8XCbMW_io,5556
@@ -139,11 +143,11 @@ deepeval/cli/types.py,sha256=_7KdthstHNc-JKCWrfpDQCf_j8h9PMxh0qJCHmVXJr0,310
139
143
  deepeval/cli/utils.py,sha256=F4-yuONzk4ojDoSLjI9RYERB7HOD412iZ2lNlSCq4wk,5601
140
144
  deepeval/confident/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
141
145
  deepeval/confident/api.py,sha256=V3TaJzbc7SEf9ZZCKyiSbK7rI6hzv2D7ojD54aVrvq4,8564
142
- deepeval/confident/types.py,sha256=-slFhDof_1maMgpLxqDRZv6kz6ZVY2hP_0uj_aveJKU,533
146
+ deepeval/confident/types.py,sha256=9bgePDaU31yY7JGwCLZcc7pev9VGtNDZLbjsVpCLVdc,574
143
147
  deepeval/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
148
  deepeval/config/logging.py,sha256=ivqmhOSB-oHOOU3MvnhImrZwkkxzxKJgoKxesnWfHjg,1314
145
- deepeval/config/settings.py,sha256=FT9BtRQGMYrvI5-gV3a5HaNSZi0vEWqp2xi_gl56JQU,30920
146
- deepeval/config/settings_manager.py,sha256=enahSZN8krRu7-L94OBCt99fwUIqQtMRL97PlzsuKEY,4021
149
+ deepeval/config/settings.py,sha256=k--thAcgGcDu8hBgQGcNk9Rfh7jUejcZnvQpBC3ScWI,36435
150
+ deepeval/config/settings_manager.py,sha256=Ynebm2BKDrzajc6DEq2eYIwyRAAtUQOkTnl46albxLk,4187
147
151
  deepeval/config/utils.py,sha256=bWeXj3fhGnLHIr_GuYaTp30x_PUOSAWJeS3lbZ4i3R8,3972
148
152
  deepeval/constants.py,sha256=J5rNXGsMKTFYJ_9Wi49qchZXuUityZjnvuy3I3TO5zk,1667
149
153
  deepeval/contextvars.py,sha256=oqXtuYiKd4Zvc1rNoR1gcRBxzZYCGTMVn7XostwvkRI,524
@@ -165,7 +169,7 @@ deepeval/evaluate/types.py,sha256=6w-0v8Rh10-qceP4iWe0yMTlee4J3immWAuqDS8LF2o,93
165
169
  deepeval/evaluate/utils.py,sha256=RRU6TOeRBq8jTfR1rgikybsMu4t8UZiDj2yqNQLhp8w,20631
166
170
  deepeval/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
171
  deepeval/integrations/crewai/__init__.py,sha256=Uu7-MNV6uXnDoXlZJzt69Y73thJXlMM4xfQdv3mrlHw,227
168
- deepeval/integrations/crewai/handler.py,sha256=jizbwsMayqv1FNXo7BrycFNWewzYJt9Lg2WiusgDpRM,6478
172
+ deepeval/integrations/crewai/handler.py,sha256=SbwosamuRQXOSmKPKKV7MMQ9vn-sDFiufCIHw-xxYKk,7882
169
173
  deepeval/integrations/crewai/subs.py,sha256=UP6aY8Nrl_lHDwxG84aRMNjxzP-X2QWTtOu9DgXMabM,1477
170
174
  deepeval/integrations/crewai/tool.py,sha256=6Uw3XuJO0STDq3YAL6bp_xh5ZJcza0L4kkuotFYj79s,2558
171
175
  deepeval/integrations/crewai/wrapper.py,sha256=r4szLNUz1O7U9eMps7czMbHyIEEQ4lfPdBb417gYPfc,3726
@@ -175,19 +179,19 @@ deepeval/integrations/hugging_face/rich_manager.py,sha256=WvFtPGpPmGeg2Ftsnojga6
175
179
  deepeval/integrations/hugging_face/tests/test_callbacks.py,sha256=88Wyg-aDaXujj9jHeGdFF3ITSl2-y7eaJGWgSyvvDi8,4607
176
180
  deepeval/integrations/hugging_face/utils.py,sha256=HUKdQcTIb76Ct69AS737oPxmlVxk5fw2UbT2pLn-o8k,1817
177
181
  deepeval/integrations/langchain/__init__.py,sha256=G1Qey5WkKou2-PA34KwWgmayQ_TbvXqPyotTbzmD8tw,84
178
- deepeval/integrations/langchain/callback.py,sha256=CZuhUqxy5pZDDoW9VKge87HI6k7aA9sbdKOWT912sAk,11032
182
+ deepeval/integrations/langchain/callback.py,sha256=kN2AHdtvCL3XlmQTnwUQ8YEfklrpGciNGhqBpleoKQc,11938
179
183
  deepeval/integrations/langchain/patch.py,sha256=fCHfZXU9xX3IJ6SG8GEYzn3qrifyUkT0i_uUABTsmcs,1255
180
184
  deepeval/integrations/langchain/utils.py,sha256=6kuVsuepjPxj1sdlq1QgBeGhMByyXuNmb_FFflLVMhc,10070
181
185
  deepeval/integrations/llama_index/__init__.py,sha256=Ujs9ZBJFkuCWUDBJOF88UbM1Y-S6QFQhxSo0oQnEWNw,90
182
- deepeval/integrations/llama_index/handler.py,sha256=oVqX0m5ESZcuR8h7Fq8P7d1BlPx4ZzR-Pr-VYeVXqmc,8813
183
- deepeval/integrations/llama_index/utils.py,sha256=mxW71-3PjvBvJpLIU0kNWuTzCidy5l_-roLt8ZyWYA0,2599
186
+ deepeval/integrations/llama_index/handler.py,sha256=uTvNXmAF4xBh8t9bBm5sBFX6ETp8SrkOZlFlE_GWdmM,10771
187
+ deepeval/integrations/llama_index/utils.py,sha256=onmmo1vpn6cpOY5EhfTc0Uui7X6l1M0HD3sq-KVAesg,3380
184
188
  deepeval/integrations/pydantic_ai/__init__.py,sha256=UIkXn_g6h9LTQXG1PaWu1eCFkCssIwG48WSvN46UWgU,202
185
189
  deepeval/integrations/pydantic_ai/agent.py,sha256=4wRV25O1tC-txH2j3TNJWry6gDNBqqThj7zgFKBxJpw,606
186
190
  deepeval/integrations/pydantic_ai/instrumentator.py,sha256=BJJkavaQkGelIFLAGeZFnvT1DFi5DGeos6H9AkzIl3I,10886
187
191
  deepeval/integrations/pydantic_ai/otel.py,sha256=0OuIpmaMtEt1dFWFZtYAiZ9hVCWweEWr1TRHYcDb4I8,1918
188
192
  deepeval/integrations/pydantic_ai/test_instrumentator.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
193
  deepeval/key_handler.py,sha256=damdQEBLGy4IVk5DR5-E3blIZdLbcMtyeGAFn_4_SG4,6505
190
- deepeval/metrics/__init__.py,sha256=w6QnIHyvhwEAKnFxcFbWqv0OMkEbeCzxwqsHmFOA35c,4547
194
+ deepeval/metrics/__init__.py,sha256=q0yC5KkwZ9p1Mzl2VRdCZ4St3SKYaXUv3KbWe0aI494,4733
191
195
  deepeval/metrics/answer_relevancy/__init__.py,sha256=WbZUpoSg2GQoqJ4VIRirVVQ1JDx5xwT-RskwqNKfWGM,46
192
196
  deepeval/metrics/answer_relevancy/answer_relevancy.py,sha256=bkh7_1YoV3BsGzERujzWg4UDDYkWpI1K1z_7mltTve8,11500
193
197
  deepeval/metrics/answer_relevancy/schema.py,sha256=N8wIBh4qwk4-BZOEyPJM-MB2_0dbkqXHv0aCfsIkROo,405
@@ -238,6 +242,8 @@ deepeval/metrics/dag/nodes.py,sha256=tlVOySeflRHiM5j6vIyIP0hD0dsfySUvHnZrJ1TH5Lw
238
242
  deepeval/metrics/dag/schema.py,sha256=9C3CCqR1D9cdM_XiElKmen_ihxNECaxO11QC_4B4v8Q,366
239
243
  deepeval/metrics/dag/templates.py,sha256=rJjjTeHqOcm9mZKchuuLsjxbuXbqEyowVgpS1h7udT4,2148
240
244
  deepeval/metrics/dag/utils.py,sha256=66D88fpjIUdVwZvYV8a1L9TlX1wvbCVuE6Y8BFTbpkE,6069
245
+ deepeval/metrics/exact_match/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
246
+ deepeval/metrics/exact_match/exact_match.py,sha256=UjJPvOFeWPeCIRVnH-nvutl2uclSIjv0QB_SAjky2Mw,2866
241
247
  deepeval/metrics/faithfulness/__init__.py,sha256=RffAtTOSdtWO1gHVMnPI-imJahf3JENOoJRiNw-Xv4g,43
242
248
  deepeval/metrics/faithfulness/faithfulness.py,sha256=1dpbDoSDF0pYlDxuDOHw-HdtlUAA-OnNhtmacKVROhU,13751
243
249
  deepeval/metrics/faithfulness/schema.py,sha256=2dU9dwwmqpGJcWvY2webERWIfH_tn02xgLghHkAY_eM,437
@@ -329,6 +335,8 @@ deepeval/metrics/non_advice/__init__.py,sha256=GP55jVADpkODABIjzK0JX1MKpFNZ0bM7Q
329
335
  deepeval/metrics/non_advice/non_advice.py,sha256=9YrZEcYhaMBA49w1_Lyk7V1JY5t_DjmV2BBJtx6_9MY,11815
330
336
  deepeval/metrics/non_advice/schema.py,sha256=bODTV8jfjIYTwnYRHz32p47tqdXkTRqLXj_s5ZUxYAQ,299
331
337
  deepeval/metrics/non_advice/template.py,sha256=KiRoU_Re3JFHylKZ1O8hztZ3yEQf3vW_HWwHxQjDb6o,2864
338
+ deepeval/metrics/pattern_match/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
339
+ deepeval/metrics/pattern_match/pattern_match.py,sha256=_33G3dY1wfyIgG4weYAy2NiNvJBgmkHWK-iUeR_p5M8,3173
332
340
  deepeval/metrics/pii_leakage/__init__.py,sha256=tBc9OGp4gmgoYz6FA3ipr48fpsCMvq6WtlwOjMqhCD0,42
333
341
  deepeval/metrics/pii_leakage/pii_leakage.py,sha256=s-NAj1Lb0MiXIuQz0lxM120enSdMCVG_ktbR65d9-6U,11418
334
342
  deepeval/metrics/pii_leakage/schema.py,sha256=Jk9jdf4HAa76J237mnosWOCV71pBBNdLfaVhf-4dKEg,313
@@ -364,7 +372,7 @@ deepeval/metrics/summarization/summarization.py,sha256=rYghwnMED-JqM9eQ6GDXmnn0h
364
372
  deepeval/metrics/summarization/template.py,sha256=ItMcwgxgMIgHEIc1FoSsCtgPbhMY48ZzD7kfq7et6KY,5465
365
373
  deepeval/metrics/task_completion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
366
374
  deepeval/metrics/task_completion/schema.py,sha256=JfnZkbCh7skWvrESy65GEo6Rvo0FDJUqP6H1uyBCks4,241
367
- deepeval/metrics/task_completion/task_completion.py,sha256=t7nbkCHLWhLDMgCh2PLS_ho45tdQcJpcXMmW1De-pN4,9182
375
+ deepeval/metrics/task_completion/task_completion.py,sha256=fJJSPg8GRsrySEbXmOU6Y3FxeETMPTY62xFDe-uasjk,9375
368
376
  deepeval/metrics/task_completion/template.py,sha256=4xjTBcGrPQxInbf8iwJOZyok9SQex1aCkbxKmfkXoA4,10437
369
377
  deepeval/metrics/tool_correctness/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
370
378
  deepeval/metrics/tool_correctness/schema.py,sha256=N0fmpYfCZm0AHSUg9UZkYYpYohDyJLSBETH9oSp9Z1g,103
@@ -387,10 +395,13 @@ deepeval/metrics/turn_relevancy/schema.py,sha256=om0zFJcM6qu2GWS9aJTP3lUmuEXX8Kp
387
395
  deepeval/metrics/turn_relevancy/template.py,sha256=klZ10QI8jo4ekf-KgcWgRxS9E3AK4vgKDNzjwAYGl48,2797
388
396
  deepeval/metrics/turn_relevancy/turn_relevancy.py,sha256=cgMt0toBIwzDc8lE8Q3YztzQA_DqR4GfdDrlyX7ya6w,10385
389
397
  deepeval/metrics/utils.py,sha256=6WWbaRToILdzuy2F1PvT6FdOTF4TVZuz_3JttEPDv5c,18752
398
+ deepeval/model_integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
399
+ deepeval/model_integrations/types.py,sha256=rbVMhC_2yWwD6JqzkRO9D7aMVC_KtXN686G_S7de7S8,630
400
+ deepeval/model_integrations/utils.py,sha256=Zt9SYPgTxlGsQFZgpZvh_a5fWuL8mmIFVSe6uoQywZ4,3562
390
401
  deepeval/models/__init__.py,sha256=0x4EsoqtSf7sLOg28DoOoInL_D5fKPWCakkE2gJa2pM,1195
391
402
  deepeval/models/_summac_model.py,sha256=xflanxl_IBuzuainlYCVX7UvjHCnAckKSvNR2NwZI6k,19750
392
403
  deepeval/models/answer_relevancy_model.py,sha256=SLOA6uUImNOuxpPGfTg2AH7MIkf9QsotYixvI1jcVC8,2197
393
- deepeval/models/base_model.py,sha256=P7L7RAix7lxpUhYLMPdnmnkMeWspMuaTeZy175ZtdSk,4033
404
+ deepeval/models/base_model.py,sha256=owmHhVBppPe5Zt6GK9p87dE31hoqtn5_8F9TWr97aRE,4112
394
405
  deepeval/models/detoxify_model.py,sha256=UY67y-3aL_ojY06aZEhD_dW9TEaV5LJ_GVDyP0_2fyQ,991
395
406
  deepeval/models/embedding_models/__init__.py,sha256=5nsvahw_sZj_8WTInPYyGJEQrxNYBhDf6lkYQMKlgRw,230
396
407
  deepeval/models/embedding_models/azure_embedding_model.py,sha256=2tMlRh5k0BJkAesC5zXg3gyNcZ5N_yzN8fBLHXzTVdc,3917
@@ -419,11 +430,10 @@ deepeval/models/retry_policy.py,sha256=sCluLDM0kshOhGwQzeA80dDXXc2Oc8TXyWMCG1kEU
419
430
  deepeval/models/summac_model.py,sha256=wKeH7pWQRXrTlzlIw_r1YCb8b7jUhWq6jUz9FiNUCSg,1992
420
431
  deepeval/models/unbias_model.py,sha256=umOMhQLTmnD7uOuhiQufEl4Wlti4q2s3EtKOpds7zhs,597
421
432
  deepeval/models/utils.py,sha256=-3XDgg1U7PZ0jpLFiYXxqdBhp7idvlo7RPZv5SoD8lc,1130
422
- deepeval/openai/__init__.py,sha256=8v_Xj790M5PwPc5hiwIp0cuVFMknwtnhq0twRoD-85Y,440
423
- deepeval/openai/extractors.py,sha256=Ov0agbl61C-Vvw4RBL1yiMrH1uKqmLyDu5OhXfod1T8,6048
433
+ deepeval/openai/__init__.py,sha256=YamU9-x8Ep1hfW6TuLX1nVBfiU7tglNQm84OSkJIP4o,555
434
+ deepeval/openai/extractors.py,sha256=82pB3J4RbRI7qJqjDJNOEeFAK4PjfQUBx7KhsWcD7sg,6018
424
435
  deepeval/openai/patch.py,sha256=yAreqmE3BTK2gih-4Ek6Adsakai85akvhlVvkrBWrz8,9332
425
- deepeval/openai/types.py,sha256=rbVMhC_2yWwD6JqzkRO9D7aMVC_KtXN686G_S7de7S8,630
426
- deepeval/openai/utils.py,sha256=Pw09BhZNmMJgjCJl38WsCR2-ClEgdQGxOnv6OPar3Rs,7565
436
+ deepeval/openai/utils.py,sha256=Hh4_i_ZcdyxIH8X9s4UIPI0fSwIktMk7LKYF7mBMgCY,7024
427
437
  deepeval/openai_agents/__init__.py,sha256=F4c6MtsdV7LWj0YamQcMGs4_u5sOYZJXWOQP8kV5xUg,314
428
438
  deepeval/openai_agents/agent.py,sha256=_SQdd0JzZK-ZvpP7yPEi22Y7fVk16PC00ROahdDQdCQ,951
429
439
  deepeval/openai_agents/callback_handler.py,sha256=4Tt2OAGfYd35C5LBMekxz0SDivYryKGm3lxls1WT7cY,4842
@@ -434,8 +444,8 @@ deepeval/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
434
444
  deepeval/plugins/plugin.py,sha256=_dwsdx4Dg9DbXxK3f7zJY4QWTJQWc7QE1HmIg2Zjjag,1515
435
445
  deepeval/progress_context.py,sha256=ZSKpxrE9sdgt9G3REKnVeXAv7GJXHHVGgLynpG1Pudw,3557
436
446
  deepeval/prompt/__init__.py,sha256=rDU99KjydxDRKhuQJCBs_bpDJrWb2mpHtvyv6AEwFC8,367
437
- deepeval/prompt/api.py,sha256=8EwWu4r44IUFOYqkQQiwyjAFFzmll11VnfXIF4n0rbc,6188
438
- deepeval/prompt/prompt.py,sha256=hHZu4qywRoNHIvNcfGvWZ9X8QbetiOM_D6CmhKID6fg,31079
447
+ deepeval/prompt/api.py,sha256=JLQFJFKsJSadCnp7vLvapmPoCoVyBbEsXZrxPAolpiA,6329
448
+ deepeval/prompt/prompt.py,sha256=jSycLAgpVYEd9sjiG1E9Wxkqt4qJy_EMk8-tYHABY7A,31147
439
449
  deepeval/prompt/utils.py,sha256=knjgPU2066OtYWMb3NqMPChr9zQgKfXo_QTLTtSkmYg,7620
440
450
  deepeval/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
441
451
  deepeval/red_teaming/README.md,sha256=BY5rAdpp3-sMMToEKwq0Nsd9ivkGDzPE16DeDb8GY7U,154
@@ -460,23 +470,23 @@ deepeval/synthesizer/templates/template_extraction.py,sha256=NkpzP-MkoefokVJBZn9
460
470
  deepeval/synthesizer/templates/template_prompt.py,sha256=cqtG3X2DQIs7NaaQeJrNcS4zdwgDn_l8go8ZeVHRdgI,12531
461
471
  deepeval/synthesizer/types.py,sha256=wUZntvCAE29sM9K8hk9RPwUpkTip1ObOCExyMEo3sME,493
462
472
  deepeval/synthesizer/utils.py,sha256=o-9z5gApQcHqDqusgrD0LagXWAju17LVc27BxtaA7og,1018
463
- deepeval/telemetry.py,sha256=JPZw1VBJ5dGiS8k-dzWs5OhMbNlr65QgVretTy33WCg,21704
473
+ deepeval/telemetry.py,sha256=0k6oVhRBi1Ap6JC6SNe_9-nBnlG-uReUoS3KTrPayhk,21716
464
474
  deepeval/test_case/__init__.py,sha256=hLkHxGH0-FFhx4MlJwIbzNHL4pgyLGquh8l0qD-z_cQ,731
465
475
  deepeval/test_case/api.py,sha256=aPghn6TFTR6TfsUSoY0WUZgLSnJtWkQuzqm_cKt08mc,4418
466
476
  deepeval/test_case/arena_test_case.py,sha256=PcfDxadlc4yW4AEDdvN32AeUpx2Sms1jvnbX31Xu65o,957
467
477
  deepeval/test_case/conversational_test_case.py,sha256=lF0V1yCGCInQetggm2wbXx-MkuMRs2ScwqIXCSwb1Fs,7534
468
- deepeval/test_case/llm_test_case.py,sha256=AJ3xRZ_vp64rbXpWE838vvbKluFbs1pwdVJ46Ju9jUA,12280
478
+ deepeval/test_case/llm_test_case.py,sha256=Ktz0ws43_sVQg6QvRMU40TAozy2J2ZNpRlARZNLVY_4,12317
469
479
  deepeval/test_case/mcp.py,sha256=Z625NLvz0E_UJpbyfyuAi_4nsqKH6DByBf0rfKd70xU,1879
470
480
  deepeval/test_case/mllm_test_case.py,sha256=8a0YoE72geX_fLI6yk_cObSxCPddwW-DOb-5OPE1-W8,5414
471
481
  deepeval/test_case/utils.py,sha256=5lT7QmhItsQHt44-qQfspuktilcrEyvl2cS0cgUJxds,809
472
482
  deepeval/test_run/__init__.py,sha256=cwH9sqz821ifdcviZiO3EajsYbh7GaUxA4LFur8g2ms,787
473
- deepeval/test_run/api.py,sha256=s8q2wBsE8rgOn_1GU84a8aFRjyDxMm6qQJmpl5CorCM,5484
474
- deepeval/test_run/cache.py,sha256=2bKXQ4GvHe2xowFGz4ekoheLno1Yv7O6PfuanFkWnA4,12786
483
+ deepeval/test_run/api.py,sha256=AQApwrodHLJbr3qHJrqfeDOgIGaYOzjHHuCNKAKh--M,5524
484
+ deepeval/test_run/cache.py,sha256=43jx2bBbOnqP_9D2re0OxbYjf0E4O2_UesLuz4TaXpU,12842
475
485
  deepeval/test_run/hooks.py,sha256=Qnd06bk9RJN4WmFUzJrBAi3Xj261hzyzI2iRmG8wbKw,375
476
486
  deepeval/test_run/hyperparameters.py,sha256=JKuKLilfrzgmkS7UBugsyZeHeb53DreISae6FIfy1mE,3762
477
- deepeval/test_run/test_run.py,sha256=LQmyLdPgnYkKw4r5zjiOSRoRYsxRSiQRqugtGFaq5ac,40012
487
+ deepeval/test_run/test_run.py,sha256=Mu3G_yUdAjNGKVwolAoTlizLDbsP6pOMSvUbp5eaj74,40789
478
488
  deepeval/tracing/__init__.py,sha256=aSOk_ZgL-K7CZzcyiaIa5peAiaPViDST5GhpHA3Adc8,614
479
- deepeval/tracing/api.py,sha256=VWs0M0wHk7Y8ReVOl9fo2ZDfVPVD08FlswvAlIKDZac,4926
489
+ deepeval/tracing/api.py,sha256=GbtpUDdGpchl6rPXtZT6IBKjAhwux6qOlKLdP3dRVHU,4996
480
490
  deepeval/tracing/context.py,sha256=rzm42zYzP7jmQJO08AV-Qmw86ik45qRfF4UQNpGcmJw,5338
481
491
  deepeval/tracing/offline_evals/__init__.py,sha256=bEniJAl7PmS9u2ksiOTfHtlCPJ9_CJV5R6umrUOX5MM,102
482
492
  deepeval/tracing/offline_evals/api.py,sha256=eBfqh2uWyeRkIeGhjrN1bTQzAEow-XPubs-42WEZ2QQ,510
@@ -484,19 +494,19 @@ deepeval/tracing/offline_evals/span.py,sha256=pXqTVXs-WnjRVpCYYEbNe0zSM6Wz9GsKHs
484
494
  deepeval/tracing/offline_evals/thread.py,sha256=bcSGFcZJKnszArOLIlWvnCyt0zSmsd7Xsw5rl4RTVFg,1981
485
495
  deepeval/tracing/offline_evals/trace.py,sha256=vTflaTKysKRiYvKA-Nx6PUJ3J6NrRLXiIdWieVcm90E,1868
486
496
  deepeval/tracing/otel/__init__.py,sha256=HQsaF5yLPwyW5qg8AOV81_nG_7pFHnatOTHi9Wx3HEk,88
487
- deepeval/tracing/otel/exporter.py,sha256=zXkM79kMzdmEr0DGifDgzm5U_OkMO5dD2yjzYAabcKs,28634
497
+ deepeval/tracing/otel/exporter.py,sha256=Yh6v-NBxqEqS_ht_Xb4fmTuzNXCyCIQ1UOpx6AU0LEw,29042
488
498
  deepeval/tracing/otel/test_exporter.py,sha256=bezihPGWJpwUEF3ZghxqhhorocVFTO2b43jRM-JHYMU,1076
489
499
  deepeval/tracing/otel/utils.py,sha256=NVMN07JtxuvVPtdyTW7KFdTqQL3TpoCO-JdZeghQJBY,17859
490
- deepeval/tracing/patchers.py,sha256=DAPNkhrDtoeyJIVeQDUMhTz-xGcXu00eqjQZmov8FiU,3096
500
+ deepeval/tracing/patchers.py,sha256=c-8Fjc5VIWB5VD9ONKq735ypW6O1pZIFQWsHR3lRh0E,6832
491
501
  deepeval/tracing/perf_epoch_bridge.py,sha256=iyAPddB6Op7NpMtPHJ29lDm53Btz9yLaN6xSCfTRQm4,1825
492
- deepeval/tracing/trace_context.py,sha256=QGKUO5LzP8sLSb3DH8GAQeAq0X25kmRZXduzunzlBZw,3050
502
+ deepeval/tracing/trace_context.py,sha256=Z0n0Cu1A5g9dXiZnzTFO5TzeOYHKeNuO6v3_EU_Gi_c,3568
493
503
  deepeval/tracing/trace_test_manager.py,sha256=wt4y7EWTRc4Bw938-UFFtXHkdFFOrnx6JaIk7J5Iulw,555
494
- deepeval/tracing/tracing.py,sha256=iMpi5Q8e1VYuTLshzWEHuZC7ysuNFYwRCVBn1jX-qUg,45681
495
- deepeval/tracing/types.py,sha256=QZdINiuLCT2oqaCoiaClOtL6m3Wzi8mN-ajZd09XHqw,5948
496
- deepeval/tracing/utils.py,sha256=pW_UJMzyeR1PWYZuZrPeVGGYiL6FRpFE3Ehbz9uhw_M,5525
497
- deepeval/utils.py,sha256=g4vO7E6xvdKtp1x84NXXX5Ifm3c0OMIA0IaiP2U5a-s,22079
498
- deepeval-3.6.9.dist-info/LICENSE.md,sha256=0ATkuLv6QgsJTBODUHC5Rak_PArA6gv2t7inJzNTP38,11352
499
- deepeval-3.6.9.dist-info/METADATA,sha256=u-OgJTHDKHRn88hnnDfdkT_swHC4tJRc3S3crwFIiss,18754
500
- deepeval-3.6.9.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
501
- deepeval-3.6.9.dist-info/entry_points.txt,sha256=fVr8UphXTfJe9I2rObmUtfU3gkSrYeM0pLy-NbJYg10,94
502
- deepeval-3.6.9.dist-info/RECORD,,
504
+ deepeval/tracing/tracing.py,sha256=FC9nDWs-7s_e_Le97rEYZz2oZyXZlcbsijc0rUBbLiM,45988
505
+ deepeval/tracing/types.py,sha256=WhnxefUc5I8jcAOBQ-tsZ8_zVZfGqSvCWHD5XUN6Ggw,6040
506
+ deepeval/tracing/utils.py,sha256=mdvhYAxDNsdnusaEXJd-c-_O2Jn6S3xSuzRvLO1Jz4U,5684
507
+ deepeval/utils.py,sha256=22h0mxijAb0NBKQ1cbfyOWuzfKwl_a6mkGfrTxXs6TY,23146
508
+ deepeval-3.7.0.dist-info/LICENSE.md,sha256=0ATkuLv6QgsJTBODUHC5Rak_PArA6gv2t7inJzNTP38,11352
509
+ deepeval-3.7.0.dist-info/METADATA,sha256=-2wsknTbODZydmGcJYHES-jdzdT8dgJWid2z20EuTJk,18754
510
+ deepeval-3.7.0.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
511
+ deepeval-3.7.0.dist-info/entry_points.txt,sha256=fVr8UphXTfJe9I2rObmUtfU3gkSrYeM0pLy-NbJYg10,94
512
+ deepeval-3.7.0.dist-info/RECORD,,
File without changes