azure-ai-evaluation 1.3.0__tar.gz → 1.5.0__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.

Potentially problematic release.


This version of azure-ai-evaluation might be problematic. Click here for more details.

Files changed (289) hide show
  1. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/CHANGELOG.md +61 -0
  2. {azure_ai_evaluation-1.3.0/azure_ai_evaluation.egg-info → azure_ai_evaluation-1.5.0}/PKG-INFO +73 -8
  3. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/README.md +4 -8
  4. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/TROUBLESHOOTING.md +0 -5
  5. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/__init__.py +27 -1
  6. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_azure/_models.py +6 -6
  7. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_common/constants.py +6 -2
  8. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_common/rai_service.py +39 -5
  9. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/__init__.py +34 -0
  10. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/_client.py +128 -0
  11. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/_configuration.py +87 -0
  12. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/_model_base.py +1235 -0
  13. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/_patch.py +20 -0
  14. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/_serialization.py +2050 -0
  15. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/_version.py +9 -0
  16. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/aio/__init__.py +29 -0
  17. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/aio/_client.py +130 -0
  18. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/aio/_configuration.py +87 -0
  19. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/aio/_patch.py +20 -0
  20. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/aio/operations/__init__.py +25 -0
  21. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/aio/operations/_operations.py +981 -0
  22. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/aio/operations/_patch.py +20 -0
  23. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/models/__init__.py +60 -0
  24. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/models/_enums.py +18 -0
  25. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/models/_models.py +651 -0
  26. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/models/_patch.py +20 -0
  27. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/operations/__init__.py +25 -0
  28. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/operations/_operations.py +1225 -0
  29. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/operations/_patch.py +20 -0
  30. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_common/raiclient/py.typed +1 -0
  31. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_common/utils.py +23 -3
  32. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_constants.py +7 -0
  33. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_converters/__init__.py +3 -0
  34. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_converters/_ai_services.py +804 -0
  35. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_converters/_models.py +302 -0
  36. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/_batch_run/__init__.py +10 -3
  37. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluate/_batch_run/_run_submitter_client.py +104 -0
  38. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluate/_batch_run/batch_clients.py +82 -0
  39. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/_batch_run/code_client.py +18 -12
  40. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/_batch_run/eval_run_context.py +9 -4
  41. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/_batch_run/proxy_client.py +42 -22
  42. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/_batch_run/target_run_context.py +1 -1
  43. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/_eval_run.py +2 -2
  44. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/_evaluate.py +109 -64
  45. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluate/_telemetry/__init__.py +95 -0
  46. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/_utils.py +3 -3
  47. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_bleu/_bleu.py +23 -3
  48. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_code_vulnerability/__init__.py +5 -0
  49. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_code_vulnerability/_code_vulnerability.py +120 -0
  50. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_coherence/_coherence.py +21 -2
  51. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_common/_base_eval.py +44 -4
  52. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_common/_base_multi_eval.py +4 -2
  53. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_common/_base_prompty_eval.py +44 -5
  54. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_common/_base_rai_svc_eval.py +16 -4
  55. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_content_safety/_content_safety.py +42 -5
  56. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_content_safety/_hate_unfairness.py +15 -0
  57. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_content_safety/_self_harm.py +15 -0
  58. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_content_safety/_sexual.py +15 -0
  59. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_content_safety/_violence.py +15 -0
  60. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_f1_score/_f1_score.py +28 -4
  61. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_fluency/_fluency.py +21 -2
  62. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_gleu/_gleu.py +26 -3
  63. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_groundedness/_groundedness.py +22 -4
  64. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_intent_resolution/__init__.py +7 -0
  65. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_intent_resolution/_intent_resolution.py +152 -0
  66. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_intent_resolution/intent_resolution.prompty +161 -0
  67. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_meteor/_meteor.py +26 -3
  68. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_qa/_qa.py +51 -7
  69. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_relevance/_relevance.py +26 -2
  70. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_response_completeness/__init__.py +7 -0
  71. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_response_completeness/_response_completeness.py +158 -0
  72. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_response_completeness/response_completeness.prompty +99 -0
  73. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_retrieval/_retrieval.py +21 -2
  74. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_rouge/_rouge.py +228 -0
  75. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_service_groundedness/_service_groundedness.py +23 -3
  76. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_similarity/_similarity.py +24 -5
  77. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_task_adherence/__init__.py +7 -0
  78. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_task_adherence/_task_adherence.py +148 -0
  79. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_task_adherence/task_adherence.prompty +117 -0
  80. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_tool_call_accuracy/__init__.py +9 -0
  81. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_tool_call_accuracy/_tool_call_accuracy.py +292 -0
  82. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_tool_call_accuracy/tool_call_accuracy.prompty +71 -0
  83. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_ungrounded_attributes/__init__.py +5 -0
  84. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_evaluators/_ungrounded_attributes/_ungrounded_attributes.py +103 -0
  85. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_xpia/xpia.py +2 -0
  86. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_exceptions.py +5 -0
  87. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/__init__.py +21 -0
  88. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/_configuration.py +45 -0
  89. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/_constants.py +10 -0
  90. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/_errors.py +29 -0
  91. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/_flows.py +28 -0
  92. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/_service.py +16 -0
  93. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/client.py +51 -0
  94. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/entities.py +26 -0
  95. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/tracing.py +28 -0
  96. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/types.py +15 -0
  97. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_adapters/utils.py +31 -0
  98. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/__init__.py +9 -0
  99. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_config.py +45 -0
  100. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_engine.py +368 -0
  101. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_exceptions.py +88 -0
  102. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_logging.py +292 -0
  103. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_openai_injector.py +23 -0
  104. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_result.py +99 -0
  105. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_run.py +121 -0
  106. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_run_storage.py +128 -0
  107. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_run_submitter.py +217 -0
  108. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_status.py +25 -0
  109. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_trace.py +105 -0
  110. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_utils.py +82 -0
  111. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/_batch_engine/_utils_deprecated.py +131 -0
  112. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/prompty/__init__.py +36 -0
  113. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/prompty/_connection.py +182 -0
  114. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/prompty/_exceptions.py +59 -0
  115. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/prompty/_prompty.py +313 -0
  116. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/prompty/_utils.py +545 -0
  117. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy/prompty/_yaml_utils.py +99 -0
  118. azure_ai_evaluation-1.5.0/azure/ai/evaluation/_safety_evaluation/__init__.py +3 -0
  119. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_safety_evaluation/_safety_evaluation.py +251 -150
  120. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_version.py +1 -1
  121. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/__init__.py +19 -0
  122. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_attack_objective_generator.py +195 -0
  123. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_attack_strategy.py +45 -0
  124. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_callback_chat_target.py +74 -0
  125. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_default_converter.py +21 -0
  126. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_red_team.py +1887 -0
  127. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_red_team_result.py +382 -0
  128. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_utils/__init__.py +3 -0
  129. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_utils/constants.py +65 -0
  130. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_utils/formatting_utils.py +165 -0
  131. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_utils/logging_utils.py +139 -0
  132. azure_ai_evaluation-1.5.0/azure/ai/evaluation/red_team/_utils/strategy_utils.py +192 -0
  133. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_adversarial_scenario.py +3 -1
  134. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_adversarial_simulator.py +54 -27
  135. azure_ai_evaluation-1.5.0/azure/ai/evaluation/simulator/_model_tools/_generated_rai_client.py +145 -0
  136. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_model_tools/_rai_client.py +71 -1
  137. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_simulator.py +1 -1
  138. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0/azure_ai_evaluation.egg-info}/PKG-INFO +73 -8
  139. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure_ai_evaluation.egg-info/SOURCES.txt +117 -3
  140. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure_ai_evaluation.egg-info/requires.txt +8 -0
  141. azure_ai_evaluation-1.5.0/samples/agent_evaluators/agent_evaluation.ipynb +329 -0
  142. azure_ai_evaluation-1.5.0/samples/agent_evaluators/instructions.md +40 -0
  143. azure_ai_evaluation-1.5.0/samples/agent_evaluators/intent_resolution.ipynb +452 -0
  144. azure_ai_evaluation-1.5.0/samples/agent_evaluators/response_completeness.ipynb +209 -0
  145. azure_ai_evaluation-1.5.0/samples/agent_evaluators/sample_synthetic_conversations.jsonl +90 -0
  146. azure_ai_evaluation-1.5.0/samples/agent_evaluators/task_adherence.ipynb +245 -0
  147. azure_ai_evaluation-1.5.0/samples/agent_evaluators/tool_call_accuracy.ipynb +365 -0
  148. azure_ai_evaluation-1.5.0/samples/agent_evaluators/user_functions.py +268 -0
  149. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/samples/evaluation_samples_evaluate.py +110 -4
  150. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/samples/evaluation_samples_safety_evaluation.py +49 -1
  151. azure_ai_evaluation-1.5.0/samples/evaluation_samples_threshold.py +367 -0
  152. azure_ai_evaluation-1.5.0/samples/red_team_samples.py +567 -0
  153. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/setup.py +15 -1
  154. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/conftest.py +84 -126
  155. azure_ai_evaluation-1.5.0/tests/converters/ai_agent_converter/serialization_helper.py +110 -0
  156. azure_ai_evaluation-1.5.0/tests/converters/ai_agent_converter/test_ai_agent_converter_internals.py +189 -0
  157. azure_ai_evaluation-1.5.0/tests/converters/ai_agent_converter/test_run_ids_from_conversation.py +35 -0
  158. azure_ai_evaluation-1.5.0/tests/e2etests/__init__.py +0 -0
  159. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/test_adv_simulator.py +159 -2
  160. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/test_builtin_evaluators.py +65 -0
  161. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/test_evaluate.py +1 -1
  162. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/test_lite_management_client.py +7 -1
  163. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/test_mass_evaluate.py +191 -65
  164. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/test_metrics_upload.py +10 -3
  165. azure_ai_evaluation-1.5.0/tests/e2etests/test_prompty_async.py +187 -0
  166. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/test_sim_and_eval.py +225 -7
  167. azure_ai_evaluation-1.5.0/tests/unittests/test_agent_evaluators.py +117 -0
  168. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_batch_run_context.py +6 -3
  169. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_built_in_evaluator.py +4 -2
  170. azure_ai_evaluation-1.5.0/tests/unittests/test_completeness_evaluator.py +92 -0
  171. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_eval_run.py +1 -0
  172. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_evaluate.py +7 -11
  173. azure_ai_evaluation-1.5.0/tests/unittests/test_evaluators/test_conversation_thresholds.py +215 -0
  174. azure_ai_evaluation-1.5.0/tests/unittests/test_evaluators/test_service_evaluator_thresholds.py +221 -0
  175. azure_ai_evaluation-1.5.0/tests/unittests/test_evaluators/test_threshold_behavior.py +221 -0
  176. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/__init__.py +3 -0
  177. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/test_attack_objective_generator.py +199 -0
  178. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/test_attack_strategy.py +82 -0
  179. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/test_callback_chat_target.py +143 -0
  180. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/test_constants.py +67 -0
  181. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/test_formatting_utils.py +247 -0
  182. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/test_red_team.py +1181 -0
  183. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/test_red_team_result.py +267 -0
  184. azure_ai_evaluation-1.5.0/tests/unittests/test_redteam/test_strategy_utils.py +223 -0
  185. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_safety_evaluation.py +81 -51
  186. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_save_eval.py +1 -1
  187. azure_ai_evaluation-1.3.0/azure/ai/evaluation/_evaluate/_telemetry/__init__.py +0 -179
  188. azure_ai_evaluation-1.3.0/azure/ai/evaluation/_evaluators/_rouge/_rouge.py +0 -119
  189. azure_ai_evaluation-1.3.0/azure/ai/evaluation/simulator/_tracing.py +0 -89
  190. azure_ai_evaluation-1.3.0/tests/unittests/test_evaluate_telemetry.py +0 -168
  191. azure_ai_evaluation-1.3.0/tests/unittests/test_evaluators/apology_dag/apology.py +0 -8
  192. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/MANIFEST.in +0 -0
  193. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/NOTICE.txt +0 -0
  194. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/__init__.py +0 -0
  195. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/__init__.py +0 -0
  196. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_azure/__init__.py +0 -0
  197. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_azure/_clients.py +0 -0
  198. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_azure/_token_manager.py +0 -0
  199. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_common/__init__.py +0 -0
  200. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_common/_experimental.py +0 -0
  201. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_common/math.py +0 -0
  202. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluate/__init__.py +0 -0
  203. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/__init__.py +0 -0
  204. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_bleu/__init__.py +0 -0
  205. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_coherence/__init__.py +0 -0
  206. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_coherence/coherence.prompty +0 -0
  207. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_common/__init__.py +0 -0
  208. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_common/_conversation_aggregators.py +0 -0
  209. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_content_safety/__init__.py +0 -0
  210. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_eci/__init__.py +0 -0
  211. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_eci/_eci.py +0 -0
  212. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_f1_score/__init__.py +0 -0
  213. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_fluency/__init__.py +0 -0
  214. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_fluency/fluency.prompty +0 -0
  215. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_gleu/__init__.py +0 -0
  216. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_groundedness/__init__.py +0 -0
  217. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_groundedness/groundedness_with_query.prompty +0 -0
  218. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_groundedness/groundedness_without_query.prompty +0 -0
  219. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_meteor/__init__.py +0 -0
  220. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_protected_material/__init__.py +0 -0
  221. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_protected_material/_protected_material.py +0 -0
  222. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_qa/__init__.py +0 -0
  223. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_relevance/__init__.py +0 -0
  224. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_relevance/relevance.prompty +0 -0
  225. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_retrieval/__init__.py +0 -0
  226. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_retrieval/retrieval.prompty +0 -0
  227. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_rouge/__init__.py +0 -0
  228. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_service_groundedness/__init__.py +0 -0
  229. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_similarity/__init__.py +0 -0
  230. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_similarity/similarity.prompty +0 -0
  231. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_evaluators/_xpia/__init__.py +0 -0
  232. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_http_utils.py +0 -0
  233. {azure_ai_evaluation-1.3.0/azure/ai/evaluation/_safety_evaluation → azure_ai_evaluation-1.5.0/azure/ai/evaluation/_legacy}/__init__.py +0 -0
  234. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_model_configurations.py +0 -0
  235. /azure_ai_evaluation-1.3.0/azure/ai/evaluation/py.typed → /azure_ai_evaluation-1.5.0/azure/ai/evaluation/_safety_evaluation/_generated_rai_client.py +0 -0
  236. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_user_agent.py +0 -0
  237. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_vendor/__init__.py +0 -0
  238. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_vendor/rouge_score/__init__.py +0 -0
  239. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_vendor/rouge_score/rouge_scorer.py +0 -0
  240. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_vendor/rouge_score/scoring.py +0 -0
  241. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_vendor/rouge_score/tokenize.py +0 -0
  242. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/_vendor/rouge_score/tokenizers.py +0 -0
  243. /azure_ai_evaluation-1.3.0/azure/ai/evaluation/simulator/_prompty/__init__.py → /azure_ai_evaluation-1.5.0/azure/ai/evaluation/py.typed +0 -0
  244. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/__init__.py +0 -0
  245. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_constants.py +0 -0
  246. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_conversation/__init__.py +0 -0
  247. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_conversation/_conversation.py +0 -0
  248. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_conversation/constants.py +0 -0
  249. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_data_sources/__init__.py +0 -0
  250. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_data_sources/grounding.json +0 -0
  251. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_direct_attack_simulator.py +0 -0
  252. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_helpers/__init__.py +0 -0
  253. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_helpers/_language_suffix_mapping.py +0 -0
  254. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_helpers/_simulator_data_classes.py +0 -0
  255. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_indirect_attack_simulator.py +0 -0
  256. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_model_tools/__init__.py +0 -0
  257. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_model_tools/_identity_manager.py +0 -0
  258. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_model_tools/_proxy_completion_model.py +0 -0
  259. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_model_tools/_template_handler.py +0 -0
  260. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_model_tools/models.py +0 -0
  261. {azure_ai_evaluation-1.3.0/tests → azure_ai_evaluation-1.5.0/azure/ai/evaluation/simulator/_prompty}/__init__.py +0 -0
  262. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_prompty/task_query_response.prompty +0 -0
  263. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_prompty/task_simulate.prompty +0 -0
  264. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure/ai/evaluation/simulator/_utils.py +0 -0
  265. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure_ai_evaluation.egg-info/dependency_links.txt +0 -0
  266. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure_ai_evaluation.egg-info/not-zip-safe +0 -0
  267. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/azure_ai_evaluation.egg-info/top_level.txt +0 -0
  268. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/migration_guide.md +0 -0
  269. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/pyproject.toml +0 -0
  270. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/samples/README.md +0 -0
  271. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/samples/data/evaluate_test_data.jsonl +0 -0
  272. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/samples/evaluation_samples_common.py +0 -0
  273. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/samples/evaluation_samples_simulate.py +0 -0
  274. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/setup.cfg +0 -0
  275. {azure_ai_evaluation-1.3.0/tests/e2etests → azure_ai_evaluation-1.5.0/tests}/__init__.py +0 -0
  276. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/__openai_patcher.py +0 -0
  277. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/custom_evaluators/answer_length_with_aggregation.py +0 -0
  278. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/e2etests/target_fn.py +0 -0
  279. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_content_safety_defect_rate.py +0 -0
  280. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_content_safety_rai_script.py +0 -0
  281. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_evaluate_performance.py +0 -0
  282. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_evaluators/slow_eval.py +0 -0
  283. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_evaluators/test_inputs_evaluators.py +0 -0
  284. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_jailbreak_simulator.py +0 -0
  285. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_non_adv_simulator.py +0 -0
  286. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_simulator.py +0 -0
  287. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_synthetic_callback_conv_bot.py +0 -0
  288. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_synthetic_conversation_bot.py +0 -0
  289. {azure_ai_evaluation-1.3.0 → azure_ai_evaluation-1.5.0}/tests/unittests/test_utils.py +0 -0
@@ -1,5 +1,66 @@
1
1
  # Release History
2
2
 
3
+ ## 1.5.0 (2025-04-04)
4
+
5
+ ### Features Added
6
+
7
+ - New `RedTeam` agent functionality to assess the safety and resilience of AI systems against adversarial prompt attacks
8
+
9
+ ## 1.4.0 (2025-03-27)
10
+
11
+ ### Features Added
12
+ - Enhanced binary evaluation results with customizable thresholds
13
+ - Added threshold support for QA and ContentSafety evaluators
14
+ - Evaluation results now include both the score and threshold values
15
+ - Configurable threshold parameter allows custom binary classification boundaries
16
+ - Default thresholds provided for backward compatibility
17
+ - Quality evaluators use "higher is better" scoring (score ≥ threshold is positive)
18
+ - Content safety evaluators use "lower is better" scoring (score ≤ threshold is positive)
19
+ - New Built-in evaluator called CodeVulnerabilityEvaluator is added.
20
+ - It provides capabilities to identify the following code vulnerabilities.
21
+ - path-injection
22
+ - sql-injection
23
+ - code-injection
24
+ - stack-trace-exposure
25
+ - incomplete-url-substring-sanitization
26
+ - flask-debug
27
+ - clear-text-logging-sensitive-data
28
+ - incomplete-hostname-regexp
29
+ - server-side-unvalidated-url-redirection
30
+ - weak-cryptographic-algorithm
31
+ - full-ssrf
32
+ - bind-socket-all-network-interfaces
33
+ - client-side-unvalidated-url-redirection
34
+ - likely-bugs
35
+ - reflected-xss
36
+ - clear-text-storage-sensitive-data
37
+ - tarslip
38
+ - hardcoded-credentials
39
+ - insecure-randomness
40
+ - It also supports multiple coding languages such as (Python, Java, C++, C#, Go, Javascript, SQL)
41
+
42
+ - New Built-in evaluator called UngroundedAttributesEvaluator is added.
43
+ - It evaluates ungrounded inference of human attributes for a given query, response, and context for a single-turn evaluation only,
44
+ - where query represents the user query and response represents the AI system response given the provided context.
45
+
46
+ - Ungrounded Attributes checks for whether a response is first, ungrounded, and checks if it contains information about protected class
47
+ - or emotional state of a person.
48
+
49
+ - It identifies the following attributes:
50
+
51
+ - emotional_state
52
+ - protected_class
53
+ - groundedness
54
+ - New Built-in evaluators for Agent Evaluation (Preview)
55
+ - IntentResolutionEvaluator - Evaluates the intent resolution of an agent's response to a user query.
56
+ - ResponseCompletenessEvaluator - Evaluates the response completeness of an agent's response to a user query.
57
+ - TaskAdherenceEvaluator - Evaluates the task adherence of an agent's response to a user query.
58
+ - ToolCallAccuracyEvaluator - Evaluates the accuracy of tool calls made by an agent in response to a user query.
59
+
60
+ ### Bugs Fixed
61
+ - Fixed error in `GroundednessProEvaluator` when handling non-numeric values like "n/a" returned from the service.
62
+ - Uploading local evaluation results from `evaluate` with the same run name will no longer result in each online run sharing (and bashing) result files.
63
+
3
64
  ## 1.3.0 (2025-02-28)
4
65
 
5
66
  ### Breaking Changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: azure-ai-evaluation
3
- Version: 1.3.0
3
+ Version: 1.5.0
4
4
  Summary: Microsoft Azure Evaluation Library for Python
5
5
  Home-page: https://github.com/Azure/azure-sdk-for-python
6
6
  Author: Microsoft Corporation
@@ -28,6 +28,13 @@ Requires-Dist: azure-identity>=1.16.0
28
28
  Requires-Dist: azure-core>=1.30.2
29
29
  Requires-Dist: nltk>=3.9.1
30
30
  Requires-Dist: azure-storage-blob>=12.10.0
31
+ Requires-Dist: httpx>=0.25.1
32
+ Requires-Dist: pandas<3.0.0,>=2.1.2
33
+ Requires-Dist: openai>=1.40.0
34
+ Requires-Dist: ruamel.yaml<1.0.0,>=0.17.10
35
+ Requires-Dist: msrest>=0.6.21
36
+ Provides-Extra: redteam
37
+ Requires-Dist: pyrit==0.8.1; extra == "redteam"
31
38
 
32
39
  # Azure AI Evaluation client library for Python
33
40
 
@@ -54,7 +61,7 @@ Azure AI SDK provides following to evaluate Generative AI Applications:
54
61
  ### Prerequisites
55
62
 
56
63
  - Python 3.9 or later is required to use this package.
57
- - [Optional] You must have [Azure AI Project][ai_project] or [Azure Open AI][azure_openai] to use AI-assisted evaluators
64
+ - [Optional] You must have [Azure AI Foundry Project][ai_project] or [Azure Open AI][azure_openai] to use AI-assisted evaluators
58
65
 
59
66
  ### Install the package
60
67
 
@@ -63,10 +70,6 @@ Install the Azure AI Evaluation SDK for Python with [pip][pip_link]:
63
70
  ```bash
64
71
  pip install azure-ai-evaluation
65
72
  ```
66
- If you want to track results in [AI Studio][ai_studio], install `remote` extra:
67
- ```python
68
- pip install azure-ai-evaluation[remote]
69
- ```
70
73
 
71
74
  ## Key concepts
72
75
 
@@ -175,9 +178,9 @@ result = evaluate(
175
178
  }
176
179
  }
177
180
  }
178
- # Optionally provide your AI Studio project information to track your evaluation results in your Azure AI Studio project
181
+ # Optionally provide your AI Foundry project information to track your evaluation results in your Azure AI Foundry project
179
182
  azure_ai_project = azure_ai_project,
180
- # Optionally provide an output path to dump a json of metric summary, row level data and metric and studio URL
183
+ # Optionally provide an output path to dump a json of metric summary, row level data and metric and AI Foundry URL
181
184
  output_path="./evaluation_results.json"
182
185
  )
183
186
  ```
@@ -375,8 +378,70 @@ This project has adopted the [Microsoft Open Source Code of Conduct][code_of_con
375
378
  [simulate_with_conversation_starter]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/Simulators/Simulate_Context-Relevant_Data/Simulate_From_Conversation_Starter
376
379
  [adversarial_jailbreak]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/simulator-interaction-data#simulating-jailbreak-attacks
377
380
 
381
+
378
382
  # Release History
379
383
 
384
+ ## 1.5.0 (2025-04-04)
385
+
386
+ ### Features Added
387
+
388
+ - New `RedTeam` agent functionality to assess the safety and resilience of AI systems against adversarial prompt attacks
389
+
390
+ ## 1.4.0 (2025-03-27)
391
+
392
+ ### Features Added
393
+ - Enhanced binary evaluation results with customizable thresholds
394
+ - Added threshold support for QA and ContentSafety evaluators
395
+ - Evaluation results now include both the score and threshold values
396
+ - Configurable threshold parameter allows custom binary classification boundaries
397
+ - Default thresholds provided for backward compatibility
398
+ - Quality evaluators use "higher is better" scoring (score ≥ threshold is positive)
399
+ - Content safety evaluators use "lower is better" scoring (score ≤ threshold is positive)
400
+ - New Built-in evaluator called CodeVulnerabilityEvaluator is added.
401
+ - It provides capabilities to identify the following code vulnerabilities.
402
+ - path-injection
403
+ - sql-injection
404
+ - code-injection
405
+ - stack-trace-exposure
406
+ - incomplete-url-substring-sanitization
407
+ - flask-debug
408
+ - clear-text-logging-sensitive-data
409
+ - incomplete-hostname-regexp
410
+ - server-side-unvalidated-url-redirection
411
+ - weak-cryptographic-algorithm
412
+ - full-ssrf
413
+ - bind-socket-all-network-interfaces
414
+ - client-side-unvalidated-url-redirection
415
+ - likely-bugs
416
+ - reflected-xss
417
+ - clear-text-storage-sensitive-data
418
+ - tarslip
419
+ - hardcoded-credentials
420
+ - insecure-randomness
421
+ - It also supports multiple coding languages such as (Python, Java, C++, C#, Go, Javascript, SQL)
422
+
423
+ - New Built-in evaluator called UngroundedAttributesEvaluator is added.
424
+ - It evaluates ungrounded inference of human attributes for a given query, response, and context for a single-turn evaluation only,
425
+ - where query represents the user query and response represents the AI system response given the provided context.
426
+
427
+ - Ungrounded Attributes checks for whether a response is first, ungrounded, and checks if it contains information about protected class
428
+ - or emotional state of a person.
429
+
430
+ - It identifies the following attributes:
431
+
432
+ - emotional_state
433
+ - protected_class
434
+ - groundedness
435
+ - New Built-in evaluators for Agent Evaluation (Preview)
436
+ - IntentResolutionEvaluator - Evaluates the intent resolution of an agent's response to a user query.
437
+ - ResponseCompletenessEvaluator - Evaluates the response completeness of an agent's response to a user query.
438
+ - TaskAdherenceEvaluator - Evaluates the task adherence of an agent's response to a user query.
439
+ - ToolCallAccuracyEvaluator - Evaluates the accuracy of tool calls made by an agent in response to a user query.
440
+
441
+ ### Bugs Fixed
442
+ - Fixed error in `GroundednessProEvaluator` when handling non-numeric values like "n/a" returned from the service.
443
+ - Uploading local evaluation results from `evaluate` with the same run name will no longer result in each online run sharing (and bashing) result files.
444
+
380
445
  ## 1.3.0 (2025-02-28)
381
446
 
382
447
  ### Breaking Changes
@@ -23,7 +23,7 @@ Azure AI SDK provides following to evaluate Generative AI Applications:
23
23
  ### Prerequisites
24
24
 
25
25
  - Python 3.9 or later is required to use this package.
26
- - [Optional] You must have [Azure AI Project][ai_project] or [Azure Open AI][azure_openai] to use AI-assisted evaluators
26
+ - [Optional] You must have [Azure AI Foundry Project][ai_project] or [Azure Open AI][azure_openai] to use AI-assisted evaluators
27
27
 
28
28
  ### Install the package
29
29
 
@@ -32,10 +32,6 @@ Install the Azure AI Evaluation SDK for Python with [pip][pip_link]:
32
32
  ```bash
33
33
  pip install azure-ai-evaluation
34
34
  ```
35
- If you want to track results in [AI Studio][ai_studio], install `remote` extra:
36
- ```python
37
- pip install azure-ai-evaluation[remote]
38
- ```
39
35
 
40
36
  ## Key concepts
41
37
 
@@ -144,9 +140,9 @@ result = evaluate(
144
140
  }
145
141
  }
146
142
  }
147
- # Optionally provide your AI Studio project information to track your evaluation results in your Azure AI Studio project
143
+ # Optionally provide your AI Foundry project information to track your evaluation results in your Azure AI Foundry project
148
144
  azure_ai_project = azure_ai_project,
149
- # Optionally provide an output path to dump a json of metric summary, row level data and metric and studio URL
145
+ # Optionally provide an output path to dump a json of metric summary, row level data and metric and AI Foundry URL
150
146
  output_path="./evaluation_results.json"
151
147
  )
152
148
  ```
@@ -342,4 +338,4 @@ This project has adopted the [Microsoft Open Source Code of Conduct][code_of_con
342
338
  [adversarial_simulation_scenarios]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/simulator-interaction-data#supported-adversarial-simulation-scenarios
343
339
  [adversarial_simulation]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/Simulators/Simulate_Adversarial_Data
344
340
  [simulate_with_conversation_starter]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/Simulators/Simulate_Context-Relevant_Data/Simulate_From_Conversation_Starter
345
- [adversarial_jailbreak]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/simulator-interaction-data#simulating-jailbreak-attacks
341
+ [adversarial_jailbreak]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/simulator-interaction-data#simulating-jailbreak-attacks
@@ -17,11 +17,6 @@ This guide walks you through how to investigate failures, common errors in the `
17
17
  ### Troubleshoot Remote Tracking Issues
18
18
 
19
19
  - Before running `evaluate()`, to ensure that you can enable logging and tracing to your Azure AI project, make sure you are first logged in by running `az login`.
20
- - Then install the following sub-package:
21
-
22
- ```Shell
23
- pip install azure-ai-evaluation[remote]
24
- ```
25
20
 
26
21
  - Ensure that you assign the proper permissions to the storage account linked to your Azure AI Studio hub. This can be done with the following command. More information can be found [here](https://aka.ms/credentialleshub).
27
22
 
@@ -17,14 +17,20 @@ from ._evaluators._fluency import FluencyEvaluator
17
17
  from ._evaluators._gleu import GleuScoreEvaluator
18
18
  from ._evaluators._groundedness import GroundednessEvaluator
19
19
  from ._evaluators._service_groundedness import GroundednessProEvaluator
20
+ from ._evaluators._intent_resolution import IntentResolutionEvaluator
20
21
  from ._evaluators._meteor import MeteorScoreEvaluator
21
22
  from ._evaluators._protected_material import ProtectedMaterialEvaluator
22
23
  from ._evaluators._qa import QAEvaluator
24
+ from ._evaluators._response_completeness import ResponseCompletenessEvaluator
25
+ from ._evaluators._task_adherence import TaskAdherenceEvaluator
23
26
  from ._evaluators._relevance import RelevanceEvaluator
24
27
  from ._evaluators._retrieval import RetrievalEvaluator
25
28
  from ._evaluators._rouge import RougeScoreEvaluator, RougeType
26
29
  from ._evaluators._similarity import SimilarityEvaluator
27
30
  from ._evaluators._xpia import IndirectAttackEvaluator
31
+ from ._evaluators._code_vulnerability import CodeVulnerabilityEvaluator
32
+ from ._evaluators._ungrounded_attributes import UngroundedAttributesEvaluator
33
+ from ._evaluators._tool_call_accuracy import ToolCallAccuracyEvaluator
28
34
  from ._model_configurations import (
29
35
  AzureAIProject,
30
36
  AzureOpenAIModelConfiguration,
@@ -35,6 +41,18 @@ from ._model_configurations import (
35
41
  OpenAIModelConfiguration,
36
42
  )
37
43
 
44
+ _patch_all = []
45
+
46
+ # The converter from the AI service to the evaluator schema requires a dependency on
47
+ # ai.projects, but we also don't want to force users installing ai.evaluations to pull
48
+ # in ai.projects. So we only import it if it's available and the user has ai.projects.
49
+ try:
50
+ from ._converters._ai_services import AIAgentConverter
51
+ _patch_all.append("AIAgentConverter")
52
+ except ImportError:
53
+ print("[INFO] Could not import AIAgentConverter. Please install the dependency with `pip install azure-ai-projects`.")
54
+
55
+
38
56
  __all__ = [
39
57
  "evaluate",
40
58
  "CoherenceEvaluator",
@@ -42,6 +60,9 @@ __all__ = [
42
60
  "FluencyEvaluator",
43
61
  "GroundednessEvaluator",
44
62
  "GroundednessProEvaluator",
63
+ "ResponseCompletenessEvaluator",
64
+ "TaskAdherenceEvaluator",
65
+ "IntentResolutionEvaluator",
45
66
  "RelevanceEvaluator",
46
67
  "SimilarityEvaluator",
47
68
  "QAEvaluator",
@@ -64,5 +85,10 @@ __all__ = [
64
85
  "EvaluatorConfig",
65
86
  "Conversation",
66
87
  "Message",
67
- "EvaluationResult"
88
+ "EvaluationResult",
89
+ "CodeVulnerabilityEvaluator",
90
+ "UngroundedAttributesEvaluator",
91
+ "ToolCallAccuracyEvaluator",
68
92
  ]
93
+
94
+ __all__.extend([p for p in _patch_all if p not in __all__])
@@ -52,7 +52,7 @@ class Workspace(Model):
52
52
  "agents_endpoint_uri": {"readonly": True},
53
53
  "ml_flow_tracking_uri": {"readonly": True},
54
54
  #'notebook_info': {'readonly': True},
55
- "private_endpoint_connections": {"readonly": True},
55
+ # "private_endpoint_connections": {"readonly": True},
56
56
  #'private_link_count': {'readonly': True},
57
57
  "provisioning_state": {"readonly": True},
58
58
  "service_provisioned_resource_group": {"readonly": True},
@@ -99,10 +99,10 @@ class Workspace(Model):
99
99
  #'network_acls': {'key': 'properties.networkAcls', 'type': 'NetworkAcls'},
100
100
  #'notebook_info': {'key': 'properties.notebookInfo', 'type': 'NotebookResourceInfo'},
101
101
  "primary_user_assigned_identity": {"key": "properties.primaryUserAssignedIdentity", "type": "str"},
102
- "private_endpoint_connections": {
103
- "key": "properties.privateEndpointConnections",
104
- "type": "[PrivateEndpointConnection]",
105
- },
102
+ # "private_endpoint_connections": {
103
+ # "key": "properties.privateEndpointConnections",
104
+ # "type": "[PrivateEndpointConnection]",
105
+ # },
106
106
  "private_link_count": {"key": "properties.privateLinkCount", "type": "int"},
107
107
  "provision_network_now": {"key": "properties.provisionNetworkNow", "type": "bool"},
108
108
  "provisioning_state": {"key": "properties.provisioningState", "type": "str"},
@@ -207,7 +207,7 @@ class Workspace(Model):
207
207
  # self.network_acls = network_acls
208
208
  # self.notebook_info = None
209
209
  self.primary_user_assigned_identity = primary_user_assigned_identity
210
- self.private_endpoint_connections = None
210
+ # self.private_endpoint_connections = None
211
211
  self.private_link_count = None
212
212
  self.provision_network_now = provision_network_now
213
213
  self.provisioning_state = None
@@ -5,8 +5,8 @@ from enum import Enum
5
5
 
6
6
  from azure.core import CaseInsensitiveEnumMeta
7
7
 
8
-
9
- PROMPT_BASED_REASON_EVALUATORS = ["coherence", "relevance", "retrieval", "groundedness", "fluency"]
8
+ PROMPT_BASED_REASON_EVALUATORS = ["coherence", "relevance", "retrieval", "groundedness", "fluency", "intent_resolution",
9
+ "tool_call_accurate", "response_completeness", "task_adherence"]
10
10
 
11
11
 
12
12
  class CommonConstants:
@@ -39,6 +39,8 @@ class Tasks:
39
39
  PROTECTED_MATERIAL = "protected material"
40
40
  XPIA = "xpia"
41
41
  GROUNDEDNESS = "groundedness"
42
+ CODE_VULNERABILITY = "code vulnerability"
43
+ UNGROUNDED_ATTRIBUTES = "inference sensitive attributes"
42
44
 
43
45
 
44
46
  class _InternalAnnotationTasks:
@@ -61,6 +63,8 @@ class EvaluationMetrics(str, Enum, metaclass=CaseInsensitiveEnumMeta):
61
63
  PROTECTED_MATERIAL = "protected_material"
62
64
  XPIA = "xpia"
63
65
  GROUNDEDNESS = "generic_groundedness"
66
+ CODE_VULNERABILITY = "code_vulnerability"
67
+ UNGROUNDED_ATTRIBUTES = "ungrounded_attributes"
64
68
 
65
69
 
66
70
  class _InternalEvaluationMetrics(str, Enum, metaclass=CaseInsensitiveEnumMeta):
@@ -15,7 +15,7 @@ from string import Template
15
15
 
16
16
  import jwt
17
17
 
18
- from promptflow.core._errors import MissingRequiredPackage
18
+ from azure.ai.evaluation._legacy._adapters._errors import MissingRequiredPackage
19
19
  from azure.ai.evaluation._exceptions import ErrorBlame, ErrorCategory, ErrorTarget, EvaluationException
20
20
  from azure.ai.evaluation._http_utils import AsyncHttpPipeline, get_async_http_client
21
21
  from azure.ai.evaluation._model_configurations import AzureAIProject
@@ -42,6 +42,7 @@ USER_TEXT_TEMPLATE_DICT: Dict[str, Template] = {
42
42
  "DEFAULT": Template("<Human>{$query}</><System>{$response}</>"),
43
43
  }
44
44
 
45
+ INFERENCE_OF_SENSITIVE_ATTRIBUTES = "inference_sensitive_attributes"
45
46
 
46
47
  def get_formatted_template(data: dict, annotation_task: str) -> str:
47
48
  """Given the task and input data, produce a formatted string that will serve as the main
@@ -64,6 +65,19 @@ def get_formatted_template(data: dict, annotation_task: str) -> str:
64
65
  "context": data.get("context", ""),
65
66
  }
66
67
  return json.dumps(as_dict)
68
+ if annotation_task == Tasks.CODE_VULNERABILITY:
69
+ as_dict = {
70
+ "context": data.get("query", ""),
71
+ "completion": data.get("response", "")
72
+ }
73
+ return json.dumps(as_dict)
74
+ if annotation_task == Tasks.UNGROUNDED_ATTRIBUTES:
75
+ as_dict = {
76
+ "query": data.get("query", ""),
77
+ "response": data.get("response", ""),
78
+ "context": data.get("context", "")
79
+ }
80
+ return json.dumps(as_dict)
67
81
  as_dict = {
68
82
  "query": html.escape(data.get("query", "")),
69
83
  "response": html.escape(data.get("response", "")),
@@ -160,6 +174,8 @@ def generate_payload(normalized_user_text: str, metric: str, annotation_task: st
160
174
  task = annotation_task
161
175
  if metric == EvaluationMetrics.PROTECTED_MATERIAL:
162
176
  include_metric = False
177
+ elif metric == EvaluationMetrics.UNGROUNDED_ATTRIBUTES:
178
+ include_metric = False
163
179
  elif metric == _InternalEvaluationMetrics.ECI:
164
180
  include_metric = False
165
181
  elif metric == EvaluationMetrics.XPIA:
@@ -251,7 +267,6 @@ async def fetch_result(operation_id: str, rai_svc_url: str, credential: TokenCre
251
267
  sleep_time = RAIService.SLEEP_TIME**request_count
252
268
  await asyncio.sleep(sleep_time)
253
269
 
254
-
255
270
  def parse_response( # pylint: disable=too-many-branches,too-many-statements
256
271
  batch_response: List[Dict], metric_name: str, metric_display_name: Optional[str] = None
257
272
  ) -> Dict[str, Union[str, float]]:
@@ -274,10 +289,16 @@ def parse_response( # pylint: disable=too-many-branches,too-many-statements
274
289
  EvaluationMetrics.PROTECTED_MATERIAL,
275
290
  _InternalEvaluationMetrics.ECI,
276
291
  EvaluationMetrics.XPIA,
292
+ EvaluationMetrics.CODE_VULNERABILITY,
293
+ EvaluationMetrics.UNGROUNDED_ATTRIBUTES,
277
294
  }:
278
295
  result = {}
279
296
  if not batch_response or len(batch_response[0]) == 0:
280
297
  return {}
298
+ if metric_name == EvaluationMetrics.UNGROUNDED_ATTRIBUTES and INFERENCE_OF_SENSITIVE_ATTRIBUTES in batch_response[0]:
299
+ batch_response[0] = {
300
+ EvaluationMetrics.UNGROUNDED_ATTRIBUTES: batch_response[0][INFERENCE_OF_SENSITIVE_ATTRIBUTES]
301
+ }
281
302
  if metric_name == EvaluationMetrics.PROTECTED_MATERIAL and metric_name not in batch_response[0]:
282
303
  pm_metric_names = {"artwork", "fictional_characters", "logos_and_brands"}
283
304
  for pm_metric_name in pm_metric_names:
@@ -313,6 +334,13 @@ def parse_response( # pylint: disable=too-many-branches,too-many-statements
313
334
  result[metric_display_name + "_information_gathering"] = (
314
335
  parsed_response["information_gathering"] if "information_gathering" in parsed_response else math.nan
315
336
  )
337
+ if metric_name == EvaluationMetrics.CODE_VULNERABILITY or metric_name == EvaluationMetrics.UNGROUNDED_ATTRIBUTES:
338
+ # Add all attributes under the details.
339
+ details = {}
340
+ for key, value in parsed_response.items():
341
+ if key not in {"label", "reasoning", "version"}:
342
+ details[key.replace("-", "_")] = value
343
+ result[metric_display_name + "_details"] = details
316
344
  return result
317
345
  return _parse_content_harm_response(batch_response, metric_name, metric_display_name)
318
346
 
@@ -359,7 +387,14 @@ def _parse_content_harm_response(
359
387
 
360
388
  # get content harm metric_value
361
389
  if "label" in harm_response:
362
- metric_value = float(harm_response["label"])
390
+ try:
391
+ # Handle "n/a" or other non-numeric values
392
+ if isinstance(harm_response["label"], str) and harm_response["label"].strip().lower() == "n/a":
393
+ metric_value = math.nan
394
+ else:
395
+ metric_value = float(harm_response["label"])
396
+ except (ValueError, TypeError):
397
+ metric_value = math.nan
363
398
  elif "valid" in harm_response:
364
399
  metric_value = 0 if harm_response["valid"] else math.nan
365
400
  else:
@@ -390,8 +425,7 @@ def _parse_content_harm_response(
390
425
  reason = ""
391
426
 
392
427
  harm_score = metric_value
393
- if metric_value == "n/a":
394
- return result
428
+ # We've already handled the "n/a" case by converting to math.nan
395
429
  if not math.isnan(metric_value):
396
430
  # int(math.nan) causes a value error, and math.nan is already handled
397
431
  # by get_harm_severity_level
@@ -0,0 +1,34 @@
1
+ # coding=utf-8
2
+ # --------------------------------------------------------------------------
3
+ # Copyright (c) Microsoft Corporation. All rights reserved.
4
+ # Licensed under the MIT License. See License.txt in the project root for license information.
5
+ # Code generated by Microsoft (R) Python Code Generator.
6
+ # Changes may cause incorrect behavior and will be lost if the code is regenerated.
7
+ # --------------------------------------------------------------------------
8
+ # pylint: disable=wrong-import-position
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from ._patch import * # pylint: disable=unused-wildcard-import
14
+
15
+ from ._client import MachineLearningServicesClient # type: ignore
16
+ from ._version import VERSION
17
+
18
+ __version__ = VERSION
19
+
20
+ try:
21
+ from ._patch import __all__ as _patch_all
22
+ from ._patch import *
23
+ except ImportError:
24
+ _patch_all = []
25
+ from ._patch import patch_sdk as _patch_sdk
26
+
27
+ # Export GeneratedRAIClient as alias of MachineLearningServicesClient for backward compatibility
28
+
29
+ __all__ = [
30
+ "MachineLearningServicesClient",
31
+ ]
32
+ __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore
33
+
34
+ _patch_sdk()
@@ -0,0 +1,128 @@
1
+ # pylint: disable=line-too-long,useless-suppression
2
+ # coding=utf-8
3
+ # --------------------------------------------------------------------------
4
+ # Copyright (c) Microsoft Corporation. All rights reserved.
5
+ # Licensed under the MIT License. See License.txt in the project root for license information.
6
+ # Code generated by Microsoft (R) Python Code Generator.
7
+ # Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
+ # --------------------------------------------------------------------------
9
+
10
+ from copy import deepcopy
11
+ from typing import Any, TYPE_CHECKING
12
+ from typing_extensions import Self
13
+
14
+ from azure.core import PipelineClient
15
+ from azure.core.pipeline import policies
16
+ from azure.core.rest import HttpRequest, HttpResponse
17
+
18
+ from ._configuration import MachineLearningServicesClientConfiguration
19
+ from ._serialization import Deserializer, Serializer
20
+ from .operations import RAISvcOperations
21
+
22
+ if TYPE_CHECKING:
23
+ from azure.core.credentials import TokenCredential
24
+
25
+
26
+ class MachineLearningServicesClient:
27
+ """MachineLearningServicesClient.
28
+
29
+ :ivar rai_svc: RAISvcOperations operations
30
+ :vartype rai_svc: raiclient.operations.RAISvcOperations
31
+ :param endpoint: Supported Azure-AI endpoints. Required.
32
+ :type endpoint: str
33
+ :param subscription_id: The ID of the target subscription. Required.
34
+ :type subscription_id: str
35
+ :param resource_group_name: The name of the Resource Group. Required.
36
+ :type resource_group_name: str
37
+ :param workspace_name: The name of the AzureML workspace or AI project. Required.
38
+ :type workspace_name: str
39
+ :param credential: Credential used to authenticate requests to the service. Required.
40
+ :type credential: ~azure.core.credentials.TokenCredential
41
+ :keyword api_version: The API version to use for this operation. Default value is
42
+ "2022-11-01-preview". Note that overriding this default value may result in unsupported
43
+ behavior.
44
+ :paramtype api_version: str
45
+ """
46
+
47
+ def __init__(
48
+ self,
49
+ endpoint: str,
50
+ subscription_id: str,
51
+ resource_group_name: str,
52
+ workspace_name: str,
53
+ credential: "TokenCredential",
54
+ **kwargs: Any
55
+ ) -> None:
56
+ _endpoint = "{endpoint}/raisvc/v1.0/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.MachineLearningServices/workspaces/{workspaceName}"
57
+ self._config = MachineLearningServicesClientConfiguration(
58
+ endpoint=endpoint,
59
+ subscription_id=subscription_id,
60
+ resource_group_name=resource_group_name,
61
+ workspace_name=workspace_name,
62
+ credential=credential,
63
+ **kwargs
64
+ )
65
+ _policies = kwargs.pop("policies", None)
66
+ if _policies is None:
67
+ _policies = [
68
+ policies.RequestIdPolicy(**kwargs),
69
+ self._config.headers_policy,
70
+ self._config.user_agent_policy,
71
+ self._config.proxy_policy,
72
+ policies.ContentDecodePolicy(**kwargs),
73
+ self._config.redirect_policy,
74
+ self._config.retry_policy,
75
+ self._config.authentication_policy,
76
+ self._config.custom_hook_policy,
77
+ self._config.logging_policy,
78
+ policies.DistributedTracingPolicy(**kwargs),
79
+ policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None,
80
+ self._config.http_logging_policy,
81
+ ]
82
+ self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs)
83
+
84
+ self._serialize = Serializer()
85
+ self._deserialize = Deserializer()
86
+ self._serialize.client_side_validation = False
87
+ self.rai_svc = RAISvcOperations(self._client, self._config, self._serialize, self._deserialize)
88
+
89
+ def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse:
90
+ """Runs the network request through the client's chained policies.
91
+
92
+ >>> from azure.core.rest import HttpRequest
93
+ >>> request = HttpRequest("GET", "https://www.example.org/")
94
+ <HttpRequest [GET], url: 'https://www.example.org/'>
95
+ >>> response = client.send_request(request)
96
+ <HttpResponse: 200 OK>
97
+
98
+ For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request
99
+
100
+ :param request: The network request you want to make. Required.
101
+ :type request: ~azure.core.rest.HttpRequest
102
+ :keyword bool stream: Whether the response payload will be streamed. Defaults to False.
103
+ :return: The response of your network call. Does not do error handling on your response.
104
+ :rtype: ~azure.core.rest.HttpResponse
105
+ """
106
+
107
+ request_copy = deepcopy(request)
108
+ path_format_arguments = {
109
+ "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True),
110
+ "subscriptionId": self._serialize.url("self._config.subscription_id", self._config.subscription_id, "str"),
111
+ "resourceGroupName": self._serialize.url(
112
+ "self._config.resource_group_name", self._config.resource_group_name, "str"
113
+ ),
114
+ "workspaceName": self._serialize.url("self._config.workspace_name", self._config.workspace_name, "str"),
115
+ }
116
+
117
+ request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments)
118
+ return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore
119
+
120
+ def close(self) -> None:
121
+ self._client.close()
122
+
123
+ def __enter__(self) -> Self:
124
+ self._client.__enter__()
125
+ return self
126
+
127
+ def __exit__(self, *exc_details: Any) -> None:
128
+ self._client.__exit__(*exc_details)