deepeval 3.5.0__tar.gz → 3.5.2__tar.gz

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 (471) hide show
  1. {deepeval-3.5.0 → deepeval-3.5.2}/PKG-INFO +1 -1
  2. deepeval-3.5.2/deepeval/_version.py +1 -0
  3. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/confident/api.py +2 -0
  4. deepeval-3.5.2/deepeval/integrations/langchain/__init__.py +4 -0
  5. deepeval-3.5.2/deepeval/integrations/langchain/callback.py +345 -0
  6. deepeval-3.5.2/deepeval/integrations/langchain/patch.py +43 -0
  7. deepeval-3.5.2/deepeval/integrations/langchain/utils.py +314 -0
  8. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/pydantic_ai/patcher.py +220 -185
  9. deepeval-3.5.2/deepeval/integrations/pydantic_ai/utils.py +86 -0
  10. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/__init__.py +1 -1
  11. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/answer_relevancy/template.py +13 -38
  12. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversational_g_eval/conversational_g_eval.py +1 -0
  13. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/faithfulness/template.py +17 -27
  14. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/embedding_models/local_embedding_model.py +2 -2
  15. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/prompt/api.py +24 -2
  16. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/prompt/prompt.py +141 -17
  17. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/synthesizer.py +17 -9
  18. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/api.py +3 -0
  19. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/context.py +3 -1
  20. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/tracing.py +12 -2
  21. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/types.py +3 -0
  22. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/utils.py +6 -2
  23. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/utils.py +12 -0
  24. {deepeval-3.5.0 → deepeval-3.5.2}/pyproject.toml +1 -1
  25. deepeval-3.5.0/deepeval/_version.py +0 -1
  26. deepeval-3.5.0/deepeval/integrations/langchain/__init__.py +0 -5
  27. deepeval-3.5.0/deepeval/integrations/langchain/callback.py +0 -499
  28. deepeval-3.5.0/deepeval/integrations/langchain/patch.py +0 -32
  29. deepeval-3.5.0/deepeval/integrations/langchain/utils.py +0 -112
  30. {deepeval-3.5.0 → deepeval-3.5.2}/LICENSE.md +0 -0
  31. {deepeval-3.5.0 → deepeval-3.5.2}/README.md +0 -0
  32. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/__init__.py +0 -0
  33. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/annotation/__init__.py +0 -0
  34. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/annotation/annotation.py +0 -0
  35. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/annotation/api.py +0 -0
  36. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/__init__.py +0 -0
  37. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/arc/__init__.py +0 -0
  38. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/arc/arc.py +0 -0
  39. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/arc/mode.py +0 -0
  40. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/arc/template.py +0 -0
  41. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/base_benchmark.py +0 -0
  42. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/bbq/__init__.py +0 -0
  43. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/bbq/bbq.py +0 -0
  44. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/bbq/task.py +0 -0
  45. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/bbq/template.py +0 -0
  46. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/__init__.py +0 -0
  47. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/big_bench_hard.py +0 -0
  48. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/__init__.py +0 -0
  49. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/boolean_expressions.txt +0 -0
  50. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/causal_judgement.txt +0 -0
  51. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/date_understanding.txt +0 -0
  52. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/disambiguation_qa.txt +0 -0
  53. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/dyck_languages.txt +0 -0
  54. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/formal_fallacies.txt +0 -0
  55. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/geometric_shapes.txt +0 -0
  56. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/hyperbaton.txt +0 -0
  57. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/logical_deduction_five_objects.txt +0 -0
  58. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/logical_deduction_seven_objects.txt +0 -0
  59. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/logical_deduction_three_objects.txt +0 -0
  60. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/movie_recommendation.txt +0 -0
  61. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/multistep_arithmetic_two.txt +0 -0
  62. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/navigate.txt +0 -0
  63. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/object_counting.txt +0 -0
  64. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/penguins_in_a_table.txt +0 -0
  65. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/reasoning_about_colored_objects.txt +0 -0
  66. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/ruin_names.txt +0 -0
  67. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/salient_translation_error_detection.txt +0 -0
  68. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/snarks.txt +0 -0
  69. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/sports_understanding.txt +0 -0
  70. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/temporal_sequences.txt +0 -0
  71. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/tracking_shuffled_objects_five_objects.txt +0 -0
  72. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/tracking_shuffled_objects_seven_objects.txt +0 -0
  73. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/tracking_shuffled_objects_three_objects.txt +0 -0
  74. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/web_of_lies.txt +0 -0
  75. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/cot_prompts/word_sorting.txt +0 -0
  76. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/__init__.py +0 -0
  77. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/boolean_expressions.txt +0 -0
  78. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/causal_judgement.txt +0 -0
  79. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/date_understanding.txt +0 -0
  80. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/disambiguation_qa.txt +0 -0
  81. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/dyck_languages.txt +0 -0
  82. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/formal_fallacies.txt +0 -0
  83. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/geometric_shapes.txt +0 -0
  84. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/hyperbaton.txt +0 -0
  85. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/logical_deduction_five_objects.txt +0 -0
  86. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/logical_deduction_seven_objects.txt +0 -0
  87. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/logical_deduction_three_objects.txt +0 -0
  88. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/movie_recommendation.txt +0 -0
  89. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/multistep_arithmetic_two.txt +0 -0
  90. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/navigate.txt +0 -0
  91. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/object_counting.txt +0 -0
  92. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/penguins_in_a_table.txt +0 -0
  93. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/reasoning_about_colored_objects.txt +0 -0
  94. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/ruin_names.txt +0 -0
  95. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/salient_translation_error_detection.txt +0 -0
  96. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/snarks.txt +0 -0
  97. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/sports_understanding.txt +0 -0
  98. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/temporal_sequences.txt +0 -0
  99. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/tracking_shuffled_objects_five_objects.txt +0 -0
  100. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/tracking_shuffled_objects_seven_objects.txt +0 -0
  101. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/tracking_shuffled_objects_three_objects.txt +0 -0
  102. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/web_of_lies.txt +0 -0
  103. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/shot_prompts/word_sorting.txt +0 -0
  104. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/task.py +0 -0
  105. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/big_bench_hard/template.py +0 -0
  106. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/bool_q/__init__.py +0 -0
  107. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/bool_q/bool_q.py +0 -0
  108. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/bool_q/template.py +0 -0
  109. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/drop/__init__.py +0 -0
  110. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/drop/drop.py +0 -0
  111. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/drop/task.py +0 -0
  112. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/drop/template.py +0 -0
  113. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/equity_med_qa/__init__.py +0 -0
  114. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/equity_med_qa/equity_med_qa.py +0 -0
  115. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/equity_med_qa/task.py +0 -0
  116. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/equity_med_qa/template.py +0 -0
  117. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/gsm8k/__init__.py +0 -0
  118. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/gsm8k/gsm8k.py +0 -0
  119. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/gsm8k/template.py +0 -0
  120. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/hellaswag/__init__.py +0 -0
  121. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/hellaswag/hellaswag.py +0 -0
  122. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/hellaswag/task.py +0 -0
  123. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/hellaswag/template.py +0 -0
  124. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/human_eval/__init__.py +0 -0
  125. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/human_eval/human_eval.py +0 -0
  126. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/human_eval/task.py +0 -0
  127. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/human_eval/template.py +0 -0
  128. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/ifeval/__init__.py +0 -0
  129. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/ifeval/ifeval.py +0 -0
  130. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/ifeval/template.py +0 -0
  131. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/lambada/__init__.py +0 -0
  132. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/lambada/lambada.py +0 -0
  133. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/lambada/template.py +0 -0
  134. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/logi_qa/__init__.py +0 -0
  135. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/logi_qa/logi_qa.py +0 -0
  136. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/logi_qa/task.py +0 -0
  137. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/logi_qa/template.py +0 -0
  138. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/math_qa/__init__.py +0 -0
  139. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/math_qa/math_qa.py +0 -0
  140. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/math_qa/task.py +0 -0
  141. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/math_qa/template.py +0 -0
  142. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/mmlu/__init__.py +0 -0
  143. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/mmlu/mmlu.py +0 -0
  144. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/mmlu/task.py +0 -0
  145. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/mmlu/template.py +0 -0
  146. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/modes/__init__.py +0 -0
  147. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/results.py +0 -0
  148. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/schema.py +0 -0
  149. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/squad/__init__.py +0 -0
  150. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/squad/squad.py +0 -0
  151. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/squad/task.py +0 -0
  152. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/squad/template.py +0 -0
  153. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/tasks/__init__.py +0 -0
  154. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/truthful_qa/__init__.py +0 -0
  155. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/truthful_qa/mode.py +0 -0
  156. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/truthful_qa/task.py +0 -0
  157. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/truthful_qa/template.py +0 -0
  158. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/truthful_qa/truthful_qa.py +0 -0
  159. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/utils.py +0 -0
  160. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/winogrande/__init__.py +0 -0
  161. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/winogrande/template.py +0 -0
  162. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/benchmarks/winogrande/winogrande.py +0 -0
  163. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/cli/__init__.py +0 -0
  164. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/cli/dotenv_handler.py +0 -0
  165. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/cli/main.py +0 -0
  166. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/cli/server.py +0 -0
  167. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/cli/test.py +0 -0
  168. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/cli/types.py +0 -0
  169. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/cli/utils.py +0 -0
  170. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/confident/__init__.py +0 -0
  171. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/confident/types.py +0 -0
  172. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/config/__init__.py +0 -0
  173. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/config/settings.py +0 -0
  174. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/config/settings_manager.py +0 -0
  175. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/config/utils.py +0 -0
  176. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/constants.py +0 -0
  177. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/dataset/__init__.py +0 -0
  178. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/dataset/api.py +0 -0
  179. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/dataset/dataset.py +0 -0
  180. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/dataset/golden.py +0 -0
  181. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/dataset/test_run_tracer.py +0 -0
  182. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/dataset/types.py +0 -0
  183. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/dataset/utils.py +0 -0
  184. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/errors.py +0 -0
  185. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/evaluate/__init__.py +0 -0
  186. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/evaluate/api.py +0 -0
  187. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/evaluate/compare.py +0 -0
  188. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/evaluate/configs.py +0 -0
  189. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/evaluate/evaluate.py +0 -0
  190. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/evaluate/execute.py +0 -0
  191. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/evaluate/types.py +0 -0
  192. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/evaluate/utils.py +0 -0
  193. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/__init__.py +0 -0
  194. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/crewai/__init__.py +0 -0
  195. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/crewai/agent.py +0 -0
  196. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/crewai/handler.py +0 -0
  197. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/crewai/patch.py +0 -0
  198. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/hugging_face/__init__.py +0 -0
  199. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/hugging_face/callback.py +0 -0
  200. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/hugging_face/rich_manager.py +0 -0
  201. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/hugging_face/tests/test_callbacks.py +0 -0
  202. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/hugging_face/utils.py +0 -0
  203. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/llama_index/__init__.py +0 -0
  204. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/llama_index/agent/patched.py +0 -0
  205. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/llama_index/handler.py +0 -0
  206. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/llama_index/utils.py +0 -0
  207. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/pydantic_ai/__init__.py +0 -0
  208. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/integrations/pydantic_ai/otel.py +0 -0
  209. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/key_handler.py +0 -0
  210. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/answer_relevancy/__init__.py +0 -0
  211. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/answer_relevancy/answer_relevancy.py +0 -0
  212. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/answer_relevancy/schema.py +0 -0
  213. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/arena_g_eval/__init__.py +0 -0
  214. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/arena_g_eval/arena_g_eval.py +0 -0
  215. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/arena_g_eval/schema.py +0 -0
  216. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/arena_g_eval/template.py +0 -0
  217. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/arena_g_eval/utils.py +0 -0
  218. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/argument_correctness/__init__.py +0 -0
  219. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/argument_correctness/argument_correctness.py +0 -0
  220. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/argument_correctness/schema.py +0 -0
  221. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/argument_correctness/template.py +0 -0
  222. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/base_metric.py +0 -0
  223. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/bias/__init__.py +0 -0
  224. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/bias/bias.py +0 -0
  225. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/bias/schema.py +0 -0
  226. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/bias/template.py +0 -0
  227. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_precision/__init__.py +0 -0
  228. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_precision/contextual_precision.py +0 -0
  229. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_precision/schema.py +0 -0
  230. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_precision/template.py +0 -0
  231. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_recall/__init__.py +0 -0
  232. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_recall/contextual_recall.py +0 -0
  233. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_recall/schema.py +0 -0
  234. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_recall/template.py +0 -0
  235. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_relevancy/__init__.py +0 -0
  236. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_relevancy/contextual_relevancy.py +0 -0
  237. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_relevancy/schema.py +0 -0
  238. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/contextual_relevancy/template.py +0 -0
  239. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversation_completeness/__init__.py +0 -0
  240. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversation_completeness/conversation_completeness.py +0 -0
  241. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversation_completeness/schema.py +0 -0
  242. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversation_completeness/template.py +0 -0
  243. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversational_dag/__init__.py +0 -0
  244. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversational_dag/conversational_dag.py +0 -0
  245. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversational_dag/nodes.py +0 -0
  246. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversational_dag/templates.py +0 -0
  247. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversational_g_eval/__init__.py +0 -0
  248. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversational_g_eval/schema.py +0 -0
  249. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/conversational_g_eval/template.py +0 -0
  250. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/dag/__init__.py +0 -0
  251. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/dag/dag.py +0 -0
  252. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/dag/graph.py +0 -0
  253. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/dag/nodes.py +0 -0
  254. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/dag/schema.py +0 -0
  255. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/dag/templates.py +0 -0
  256. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/dag/utils.py +0 -0
  257. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/faithfulness/__init__.py +0 -0
  258. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/faithfulness/faithfulness.py +0 -0
  259. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/faithfulness/schema.py +0 -0
  260. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/g_eval/__init__.py +0 -0
  261. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/g_eval/g_eval.py +0 -0
  262. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/g_eval/schema.py +0 -0
  263. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/g_eval/template.py +0 -0
  264. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/g_eval/utils.py +0 -0
  265. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/hallucination/__init__.py +0 -0
  266. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/hallucination/hallucination.py +0 -0
  267. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/hallucination/schema.py +0 -0
  268. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/hallucination/template.py +0 -0
  269. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/indicator.py +0 -0
  270. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/json_correctness/__init__.py +0 -0
  271. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/json_correctness/json_correctness.py +0 -0
  272. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/json_correctness/schema.py +0 -0
  273. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/json_correctness/template.py +0 -0
  274. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/knowledge_retention/__init__.py +0 -0
  275. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/knowledge_retention/knowledge_retention.py +0 -0
  276. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/knowledge_retention/schema.py +0 -0
  277. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/knowledge_retention/template.py +0 -0
  278. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp/__init__.py +0 -0
  279. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp/mcp_task_completion.py +0 -0
  280. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp/multi_turn_mcp_use_metric.py +0 -0
  281. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp/schema.py +0 -0
  282. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp/template.py +0 -0
  283. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp_use_metric/__init__.py +0 -0
  284. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp_use_metric/mcp_use_metric.py +0 -0
  285. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp_use_metric/schema.py +0 -0
  286. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/mcp_use_metric/template.py +0 -0
  287. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/misuse/__init__.py +0 -0
  288. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/misuse/misuse.py +0 -0
  289. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/misuse/schema.py +0 -0
  290. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/misuse/template.py +0 -0
  291. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/__init__.py +0 -0
  292. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_coherence/__init__.py +0 -0
  293. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_coherence/image_coherence.py +0 -0
  294. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_coherence/schema.py +0 -0
  295. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_coherence/template.py +0 -0
  296. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_editing/__init__.py +0 -0
  297. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_editing/image_editing.py +0 -0
  298. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_editing/schema.py +0 -0
  299. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_editing/template.py +0 -0
  300. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_helpfulness/__init__.py +0 -0
  301. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_helpfulness/image_helpfulness.py +0 -0
  302. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_helpfulness/schema.py +0 -0
  303. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_helpfulness/template.py +0 -0
  304. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_reference/__init__.py +0 -0
  305. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_reference/image_reference.py +0 -0
  306. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_reference/schema.py +0 -0
  307. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/image_reference/template.py +0 -0
  308. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_answer_relevancy/__init__.py +0 -0
  309. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_answer_relevancy/multimodal_answer_relevancy.py +0 -0
  310. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_answer_relevancy/schema.py +0 -0
  311. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_answer_relevancy/template.py +0 -0
  312. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_precision/__init__.py +0 -0
  313. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_precision/multimodal_contextual_precision.py +0 -0
  314. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_precision/schema.py +0 -0
  315. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_precision/template.py +0 -0
  316. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_recall/__init__.py +0 -0
  317. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_recall/multimodal_contextual_recall.py +0 -0
  318. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_recall/schema.py +0 -0
  319. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_recall/template.py +0 -0
  320. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_relevancy/__init__.py +0 -0
  321. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_relevancy/multimodal_contextual_relevancy.py +0 -0
  322. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_relevancy/schema.py +0 -0
  323. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_contextual_relevancy/template.py +0 -0
  324. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_faithfulness/__init__.py +0 -0
  325. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_faithfulness/multimodal_faithfulness.py +0 -0
  326. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_faithfulness/schema.py +0 -0
  327. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_faithfulness/template.py +0 -0
  328. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_g_eval/__init__.py +0 -0
  329. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_g_eval/multimodal_g_eval.py +0 -0
  330. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_g_eval/schema.py +0 -0
  331. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_g_eval/template.py +0 -0
  332. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_g_eval/utils.py +0 -0
  333. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_tool_correctness/__init__.py +0 -0
  334. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/multimodal_tool_correctness/multimodal_tool_correctness.py +0 -0
  335. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/text_to_image/__init__.py +0 -0
  336. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/text_to_image/schema.py +0 -0
  337. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/text_to_image/template.py +0 -0
  338. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/multimodal_metrics/text_to_image/text_to_image.py +0 -0
  339. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/non_advice/__init__.py +0 -0
  340. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/non_advice/non_advice.py +0 -0
  341. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/non_advice/schema.py +0 -0
  342. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/non_advice/template.py +0 -0
  343. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/pii_leakage/__init__.py +0 -0
  344. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/pii_leakage/pii_leakage.py +0 -0
  345. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/pii_leakage/schema.py +0 -0
  346. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/pii_leakage/template.py +0 -0
  347. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/prompt_alignment/__init__.py +0 -0
  348. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/prompt_alignment/prompt_alignment.py +0 -0
  349. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/prompt_alignment/schema.py +0 -0
  350. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/prompt_alignment/template.py +0 -0
  351. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/ragas.py +0 -0
  352. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/role_adherence/__init__.py +0 -0
  353. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/role_adherence/role_adherence.py +0 -0
  354. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/role_adherence/schema.py +0 -0
  355. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/role_adherence/template.py +0 -0
  356. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/role_violation/__init__.py +0 -0
  357. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/role_violation/role_violation.py +0 -0
  358. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/role_violation/schema.py +0 -0
  359. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/role_violation/template.py +0 -0
  360. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/summarization/__init__.py +0 -0
  361. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/summarization/schema.py +0 -0
  362. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/summarization/summarization.py +0 -0
  363. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/summarization/template.py +0 -0
  364. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/task_completion/__init__.py +0 -0
  365. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/task_completion/schema.py +0 -0
  366. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/task_completion/task_completion.py +0 -0
  367. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/task_completion/template.py +0 -0
  368. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/tool_correctness/__init__.py +0 -0
  369. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/tool_correctness/tool_correctness.py +0 -0
  370. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/toxicity/__init__.py +0 -0
  371. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/toxicity/schema.py +0 -0
  372. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/toxicity/template.py +0 -0
  373. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/toxicity/toxicity.py +0 -0
  374. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/turn_relevancy/__init__.py +0 -0
  375. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/turn_relevancy/schema.py +0 -0
  376. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/turn_relevancy/template.py +0 -0
  377. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/turn_relevancy/turn_relevancy.py +0 -0
  378. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/metrics/utils.py +0 -0
  379. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/__init__.py +0 -0
  380. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/_summac_model.py +0 -0
  381. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/answer_relevancy_model.py +0 -0
  382. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/base_model.py +0 -0
  383. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/detoxify_model.py +0 -0
  384. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/embedding_models/__init__.py +0 -0
  385. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/embedding_models/azure_embedding_model.py +0 -0
  386. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/embedding_models/ollama_embedding_model.py +0 -0
  387. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/embedding_models/openai_embedding_model.py +0 -0
  388. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/hallucination_model.py +0 -0
  389. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/__init__.py +0 -0
  390. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/amazon_bedrock_model.py +0 -0
  391. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/anthropic_model.py +0 -0
  392. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/azure_model.py +0 -0
  393. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/deepseek_model.py +0 -0
  394. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/gemini_model.py +0 -0
  395. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/grok_model.py +0 -0
  396. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/kimi_model.py +0 -0
  397. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/litellm_model.py +0 -0
  398. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/local_model.py +0 -0
  399. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/ollama_model.py +0 -0
  400. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/openai_model.py +0 -0
  401. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/llms/utils.py +0 -0
  402. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/mlllms/__init__.py +0 -0
  403. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/mlllms/gemini_model.py +0 -0
  404. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/mlllms/ollama_model.py +0 -0
  405. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/mlllms/openai_model.py +0 -0
  406. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/retry_policy.py +0 -0
  407. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/summac_model.py +0 -0
  408. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/unbias_model.py +0 -0
  409. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/models/utils.py +0 -0
  410. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai/__init__.py +0 -0
  411. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai/extractors.py +0 -0
  412. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai/patch.py +0 -0
  413. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai/utils.py +0 -0
  414. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai_agents/__init__.py +0 -0
  415. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai_agents/agent.py +0 -0
  416. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai_agents/callback_handler.py +0 -0
  417. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai_agents/extractors.py +0 -0
  418. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai_agents/patch.py +0 -0
  419. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/openai_agents/runner.py +0 -0
  420. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/plugins/__init__.py +0 -0
  421. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/plugins/plugin.py +0 -0
  422. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/progress_context.py +0 -0
  423. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/prompt/__init__.py +0 -0
  424. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/prompt/utils.py +0 -0
  425. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/py.typed +0 -0
  426. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/red_teaming/README.md +0 -0
  427. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/scorer/__init__.py +0 -0
  428. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/scorer/scorer.py +0 -0
  429. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/simulator/__init__.py +0 -0
  430. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/simulator/conversation_simulator.py +0 -0
  431. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/simulator/schema.py +0 -0
  432. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/simulator/template.py +0 -0
  433. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/singleton.py +0 -0
  434. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/__init__.py +0 -0
  435. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/base_synthesizer.py +0 -0
  436. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/chunking/__init__.py +0 -0
  437. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/chunking/context_generator.py +0 -0
  438. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/chunking/doc_chunker.py +0 -0
  439. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/config.py +0 -0
  440. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/schema.py +0 -0
  441. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/templates/__init__.py +0 -0
  442. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/templates/template.py +0 -0
  443. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/templates/template_extraction.py +0 -0
  444. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/templates/template_prompt.py +0 -0
  445. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/types.py +0 -0
  446. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/synthesizer/utils.py +0 -0
  447. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/telemetry.py +0 -0
  448. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_case/__init__.py +0 -0
  449. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_case/arena_test_case.py +0 -0
  450. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_case/conversational_test_case.py +0 -0
  451. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_case/llm_test_case.py +0 -0
  452. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_case/mcp.py +0 -0
  453. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_case/mllm_test_case.py +0 -0
  454. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_case/utils.py +0 -0
  455. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_run/__init__.py +0 -0
  456. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_run/api.py +0 -0
  457. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_run/cache.py +0 -0
  458. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_run/hooks.py +0 -0
  459. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_run/hyperparameters.py +0 -0
  460. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/test_run/test_run.py +0 -0
  461. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/__init__.py +0 -0
  462. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/offline_evals/__init__.py +0 -0
  463. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/offline_evals/api.py +0 -0
  464. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/offline_evals/span.py +0 -0
  465. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/offline_evals/thread.py +0 -0
  466. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/offline_evals/trace.py +0 -0
  467. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/otel/__init__.py +0 -0
  468. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/otel/exporter.py +0 -0
  469. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/otel/utils.py +0 -0
  470. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/patchers.py +0 -0
  471. {deepeval-3.5.0 → deepeval-3.5.2}/deepeval/tracing/perf_epoch_bridge.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepeval
3
- Version: 3.5.0
3
+ Version: 3.5.2
4
4
  Summary: The LLM Evaluation Framework
5
5
  Home-page: https://github.com/confident-ai/deepeval
6
6
  License: Apache-2.0
@@ -0,0 +1 @@
1
+ __version__: str = "3.5.2"
@@ -89,7 +89,9 @@ class Endpoints(Enum):
89
89
  TEST_RUN_ENDPOINT = "/v1/test-run"
90
90
  TRACES_ENDPOINT = "/v1/traces"
91
91
  ANNOTATIONS_ENDPOINT = "/v1/annotations"
92
+ PROMPTS_VERSION_ID_ENDPOINT = "/v1/prompts/:alias/versions/:versionId"
92
93
  PROMPTS_ENDPOINT = "/v1/prompts"
94
+ PROMPTS_VERSIONS_ENDPOINT = "/v1/prompts/:alias/versions"
93
95
  SIMULATE_ENDPOINT = "/v1/simulate"
94
96
  EVALUATE_ENDPOINT = "/v1/evaluate"
95
97
 
@@ -0,0 +1,4 @@
1
+ from .callback import CallbackHandler, tool
2
+
3
+
4
+ __all__ = ["CallbackHandler", "tool"]
@@ -0,0 +1,345 @@
1
+ from typing import Any, Optional, List, Dict
2
+ from uuid import UUID
3
+ from time import perf_counter
4
+ from deepeval.tracing.context import current_trace_context
5
+ from deepeval.tracing.types import (
6
+ LlmOutput,
7
+ LlmToolCall,
8
+ )
9
+ from deepeval.metrics import BaseMetric
10
+
11
+ try:
12
+ from langchain_core.callbacks.base import BaseCallbackHandler
13
+ from langchain_core.outputs import LLMResult
14
+ from langchain_core.outputs import ChatGeneration
15
+ from langchain_core.messages import AIMessage
16
+
17
+ # contains langchain imports
18
+ from deepeval.integrations.langchain.utils import (
19
+ parse_prompts_to_messages,
20
+ extract_name,
21
+ safe_extract_model_name,
22
+ safe_extract_token_usage,
23
+ enter_current_context,
24
+ exit_current_context,
25
+ )
26
+ from deepeval.integrations.langchain.patch import tool
27
+
28
+ langchain_installed = True
29
+ except:
30
+ langchain_installed = False
31
+
32
+
33
+ def is_langchain_installed():
34
+ if not langchain_installed:
35
+ raise ImportError(
36
+ "LangChain is not installed. Please install it with `pip install langchain`."
37
+ )
38
+
39
+
40
+ from deepeval.tracing import trace_manager
41
+ from deepeval.tracing.types import (
42
+ LlmSpan,
43
+ RetrieverSpan,
44
+ TraceSpanStatus,
45
+ ToolSpan,
46
+ )
47
+ from deepeval.telemetry import capture_tracing_integration
48
+
49
+
50
+ class CallbackHandler(BaseCallbackHandler):
51
+
52
+ def __init__(
53
+ self,
54
+ name: Optional[str] = None,
55
+ tags: Optional[List[str]] = None,
56
+ metadata: Optional[Dict[str, Any]] = None,
57
+ thread_id: Optional[str] = None,
58
+ user_id: Optional[str] = None,
59
+ metrics: Optional[List[BaseMetric]] = None,
60
+ metric_collection: Optional[str] = None,
61
+ ):
62
+ is_langchain_installed()
63
+ with capture_tracing_integration("langchain.callback.CallbackHandler"):
64
+ trace = trace_manager.start_new_trace()
65
+
66
+ self.trace_uuid = trace.uuid
67
+
68
+ trace.name = name
69
+ trace.tags = tags
70
+ trace.metadata = metadata
71
+ trace.thread_id = thread_id
72
+ trace.user_id = user_id
73
+ self.metrics = metrics
74
+ self.metric_collection = metric_collection
75
+ current_trace_context.set(trace)
76
+ super().__init__()
77
+
78
+ def on_chain_start(
79
+ self,
80
+ serialized: dict[str, Any],
81
+ inputs: dict[str, Any],
82
+ *,
83
+ run_id: UUID,
84
+ parent_run_id: Optional[UUID] = None,
85
+ tags: Optional[list[str]] = None,
86
+ metadata: Optional[dict[str, Any]] = None,
87
+ **kwargs: Any,
88
+ ) -> Any:
89
+ if parent_run_id is None:
90
+ uuid_str = str(run_id)
91
+ base_span = enter_current_context(
92
+ uuid_str=uuid_str,
93
+ span_type="custom",
94
+ func_name=extract_name(serialized, **kwargs),
95
+ )
96
+ base_span.input = inputs
97
+ current_trace_context.get().input = inputs
98
+ base_span.metrics = self.metrics
99
+ base_span.metric_collection = self.metric_collection
100
+
101
+ def on_chain_end(
102
+ self,
103
+ output: Any,
104
+ *,
105
+ run_id: UUID,
106
+ parent_run_id: Optional[UUID] = None,
107
+ **kwargs: Any,
108
+ ) -> Any:
109
+ uuid_str = str(run_id)
110
+ base_span = trace_manager.get_span_by_uuid(uuid_str)
111
+ if base_span:
112
+ base_span.output = output
113
+ current_trace_context.get().output = output
114
+ exit_current_context(uuid_str=uuid_str)
115
+
116
+ def on_llm_start(
117
+ self,
118
+ serialized: dict[str, Any],
119
+ prompts: list[str],
120
+ *,
121
+ run_id: UUID,
122
+ parent_run_id: Optional[UUID] = None,
123
+ tags: Optional[list[str]] = None,
124
+ metadata: Optional[dict[str, Any]] = None,
125
+ **kwargs: Any,
126
+ ) -> Any:
127
+ uuid_str = str(run_id)
128
+ input_messages = parse_prompts_to_messages(prompts, **kwargs)
129
+ model = safe_extract_model_name(metadata, **kwargs)
130
+
131
+ llm_span: LlmSpan = enter_current_context(
132
+ uuid_str=uuid_str,
133
+ span_type="llm",
134
+ func_name=extract_name(serialized, **kwargs),
135
+ )
136
+
137
+ llm_span.input = input_messages
138
+ llm_span.model = model
139
+ metrics = metadata.pop("metrics", None)
140
+ metric_collection = metadata.pop("metric_collection", None)
141
+ prompt = metadata.pop("prompt", None)
142
+ llm_span.metrics = metrics
143
+ llm_span.metric_collection = metric_collection
144
+ llm_span.prompt = prompt
145
+
146
+ def on_llm_end(
147
+ self,
148
+ response: LLMResult,
149
+ *,
150
+ run_id: UUID,
151
+ parent_run_id: Optional[UUID] = None,
152
+ **kwargs: Any, # un-logged kwargs
153
+ ) -> Any:
154
+ uuid_str = str(run_id)
155
+ llm_span: LlmSpan = trace_manager.get_span_by_uuid(uuid_str)
156
+
157
+ output = ""
158
+ total_input_tokens = 0
159
+ total_output_tokens = 0
160
+ model = None
161
+
162
+ for generation in response.generations:
163
+ for gen in generation:
164
+ if isinstance(gen, ChatGeneration):
165
+ if gen.message.response_metadata and isinstance(
166
+ gen.message.response_metadata, dict
167
+ ):
168
+ # extract model name from response_metadata
169
+ model = gen.message.response_metadata.get("model_name")
170
+
171
+ # extract input and output token
172
+ input_tokens, output_tokens = safe_extract_token_usage(
173
+ gen.message.response_metadata
174
+ )
175
+ total_input_tokens += input_tokens
176
+ total_output_tokens += output_tokens
177
+
178
+ if isinstance(gen.message, AIMessage):
179
+ ai_message = gen.message
180
+ tool_calls = []
181
+ for tool_call in ai_message.tool_calls:
182
+ tool_calls.append(
183
+ LlmToolCall(
184
+ name=tool_call["name"],
185
+ args=tool_call["args"],
186
+ id=tool_call["id"],
187
+ )
188
+ )
189
+ output = LlmOutput(
190
+ role="AI",
191
+ content=ai_message.content,
192
+ tool_calls=tool_calls,
193
+ )
194
+
195
+ llm_span.model = model if model else llm_span.model
196
+ llm_span.input = llm_span.input
197
+ llm_span.output = output
198
+ llm_span.input_token_count = (
199
+ total_input_tokens if total_input_tokens > 0 else None
200
+ )
201
+ llm_span.output_token_count = (
202
+ total_output_tokens if total_output_tokens > 0 else None
203
+ )
204
+
205
+ exit_current_context(uuid_str=uuid_str)
206
+
207
+ def on_llm_error(
208
+ self,
209
+ error: BaseException,
210
+ *,
211
+ run_id: UUID,
212
+ parent_run_id: Optional[UUID] = None,
213
+ **kwargs: Any,
214
+ ) -> Any:
215
+ uuid_str = str(run_id)
216
+ llm_span: LlmSpan = trace_manager.get_span_by_uuid(uuid_str)
217
+ llm_span.status = TraceSpanStatus.ERRORED
218
+ llm_span.error = str(error)
219
+ exit_current_context(uuid_str=uuid_str)
220
+
221
+ def on_llm_new_token(
222
+ self,
223
+ token: str,
224
+ *,
225
+ chunk,
226
+ run_id: UUID,
227
+ parent_run_id: Optional[UUID] = None,
228
+ tags: Optional[list[str]] = None,
229
+ **kwargs: Any,
230
+ ):
231
+ uuid_str = str(run_id)
232
+ llm_span: LlmSpan = trace_manager.get_span_by_uuid(uuid_str)
233
+ if llm_span.token_intervals is None:
234
+ llm_span.token_intervals = {perf_counter(): token}
235
+ else:
236
+ llm_span.token_intervals[perf_counter()] = token
237
+
238
+ def on_tool_start(
239
+ self,
240
+ serialized: dict[str, Any],
241
+ input_str: str,
242
+ *,
243
+ run_id: UUID,
244
+ parent_run_id: Optional[UUID] = None,
245
+ tags: Optional[list[str]] = None,
246
+ metadata: Optional[dict[str, Any]] = None,
247
+ inputs: Optional[dict[str, Any]] = None,
248
+ **kwargs: Any,
249
+ ) -> Any:
250
+ uuid_str = str(run_id)
251
+
252
+ tool_span = enter_current_context(
253
+ uuid_str=uuid_str,
254
+ span_type="tool",
255
+ func_name=extract_name(
256
+ serialized, **kwargs
257
+ ), # ignored when setting the input
258
+ )
259
+ tool_span.input = inputs
260
+
261
+ def on_tool_end(
262
+ self,
263
+ output: Any,
264
+ *,
265
+ run_id: UUID,
266
+ parent_run_id: Optional[UUID] = None,
267
+ **kwargs: Any, # un-logged kwargs
268
+ ) -> Any:
269
+
270
+ uuid_str = str(run_id)
271
+ tool_span: ToolSpan = trace_manager.get_span_by_uuid(uuid_str)
272
+ tool_span.output = output
273
+ exit_current_context(uuid_str=uuid_str)
274
+
275
+ def on_tool_error(
276
+ self,
277
+ error: BaseException,
278
+ *,
279
+ run_id: UUID,
280
+ parent_run_id: Optional[UUID] = None,
281
+ **kwargs: Any, # un-logged kwargs
282
+ ) -> Any:
283
+ uuid_str = str(run_id)
284
+ tool_span: ToolSpan = trace_manager.get_span_by_uuid(uuid_str)
285
+ tool_span.status = TraceSpanStatus.ERRORED
286
+ tool_span.error = str(error)
287
+ exit_current_context(uuid_str=uuid_str)
288
+
289
+ def on_retriever_start(
290
+ self,
291
+ serialized: dict[str, Any],
292
+ query: str,
293
+ *,
294
+ run_id: UUID,
295
+ parent_run_id: Optional[UUID] = None,
296
+ tags: Optional[list[str]] = None,
297
+ metadata: Optional[dict[str, Any]] = None,
298
+ **kwargs: Any, # un-logged kwargs
299
+ ) -> Any:
300
+ uuid_str = str(run_id)
301
+ retriever_span = enter_current_context(
302
+ uuid_str=uuid_str,
303
+ span_type="retriever",
304
+ func_name=extract_name(serialized, **kwargs),
305
+ observe_kwargs={
306
+ "embedder": metadata.get("ls_embedding_provider", "unknown"),
307
+ },
308
+ )
309
+ retriever_span.input = query
310
+
311
+ def on_retriever_end(
312
+ self,
313
+ output: Any,
314
+ *,
315
+ run_id: UUID,
316
+ parent_run_id: Optional[UUID] = None,
317
+ **kwargs: Any, # un-logged kwargs
318
+ ) -> Any:
319
+ uuid_str = str(run_id)
320
+ retriever_span: RetrieverSpan = trace_manager.get_span_by_uuid(uuid_str)
321
+
322
+ # prepare output
323
+ output_list = []
324
+ if isinstance(output, list):
325
+ for item in output:
326
+ output_list.append(str(item))
327
+ else:
328
+ output_list.append(str(output))
329
+
330
+ retriever_span.output = output_list
331
+ exit_current_context(uuid_str=uuid_str)
332
+
333
+ def on_retriever_error(
334
+ self,
335
+ error: BaseException,
336
+ *,
337
+ run_id: UUID,
338
+ parent_run_id: Optional[UUID] = None,
339
+ **kwargs: Any, # un-logged kwargs
340
+ ) -> Any:
341
+ uuid_str = str(run_id)
342
+ retriever_span: RetrieverSpan = trace_manager.get_span_by_uuid(uuid_str)
343
+ retriever_span.status = TraceSpanStatus.ERRORED
344
+ retriever_span.error = str(error)
345
+ exit_current_context(uuid_str=uuid_str)
@@ -0,0 +1,43 @@
1
+ import functools
2
+ from deepeval.metrics import BaseMetric
3
+ from deepeval.tracing.context import current_span_context
4
+ from typing import List, Optional, Callable
5
+ from langchain_core.tools import tool as original_tool, BaseTool
6
+
7
+
8
+ def tool(
9
+ *args,
10
+ metrics: Optional[List[BaseMetric]] = None,
11
+ metric_collection: Optional[str] = None,
12
+ **kwargs
13
+ ):
14
+ """
15
+ Patched version of langchain_core.tools.tool that prints inputs and outputs
16
+ """
17
+
18
+ # original_tool returns a decorator function, so we need to return a decorator
19
+ def decorator(func: Callable) -> BaseTool:
20
+ func = _patch_tool_decorator(func, metrics, metric_collection)
21
+ tool_instance = original_tool(*args, **kwargs)(func)
22
+ return tool_instance
23
+
24
+ return decorator
25
+
26
+
27
+ def _patch_tool_decorator(
28
+ func: Callable,
29
+ metrics: Optional[List[BaseMetric]] = None,
30
+ metric_collection: Optional[str] = None,
31
+ ):
32
+ original_func = func
33
+
34
+ @functools.wraps(original_func)
35
+ def wrapper(*args, **kwargs):
36
+ current_span = current_span_context.get()
37
+ current_span.metrics = metrics
38
+ current_span.metric_collection = metric_collection
39
+ res = original_func(*args, **kwargs)
40
+ return res
41
+
42
+ tool = wrapper
43
+ return tool