hiddenlayer-sdk 3.2.2__tar.gz → 3.4.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.
Files changed (151) hide show
  1. hiddenlayer_sdk-3.4.0/.release-please-manifest.json +3 -0
  2. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/CHANGELOG.md +45 -0
  3. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/PKG-INFO +1 -1
  4. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/api.md +25 -0
  5. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/pyproject.toml +2 -2
  6. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/requirements-dev.lock +10 -10
  7. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/requirements.lock +4 -4
  8. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_base_client.py +5 -2
  9. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_client.py +51 -1
  10. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_compat.py +3 -3
  11. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_oauth2.py +5 -2
  12. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_compat.py +1 -1
  13. hiddenlayer_sdk-3.4.0/src/hiddenlayer/_utils/_json.py +35 -0
  14. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_version.py +1 -1
  15. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/lib/__init__.py +3 -1
  16. hiddenlayer_sdk-3.4.0/src/hiddenlayer/lib/evaluation_sessions.py +18 -0
  17. hiddenlayer_sdk-3.4.0/src/hiddenlayer/lib/red_team_exceptions.py +17 -0
  18. hiddenlayer_sdk-3.4.0/src/hiddenlayer/lib/red_team_session.py +973 -0
  19. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/__init__.py +14 -0
  20. hiddenlayer_sdk-3.4.0/src/hiddenlayer/resources/evaluations/__init__.py +33 -0
  21. hiddenlayer_sdk-3.4.0/src/hiddenlayer/resources/evaluations/evaluations.py +102 -0
  22. hiddenlayer_sdk-3.4.0/src/hiddenlayer/resources/evaluations/red_team.py +763 -0
  23. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/models/cards.py +4 -0
  24. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/sensors.py +101 -50
  25. hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/__init__.py +19 -0
  26. hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/red_team_create_params.py +59 -0
  27. hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/red_team_create_response.py +15 -0
  28. hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/red_team_retrieve_evaluation_results_response.py +20 -0
  29. hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/red_team_retrieve_next_action_response.py +38 -0
  30. hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/red_team_retrieve_status_response.py +68 -0
  31. hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/red_team_submit_target_response_params.py +15 -0
  32. hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/red_team_submit_target_response_response.py +20 -0
  33. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/models/card_list_params.py +2 -0
  34. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/models/card_list_response.py +6 -0
  35. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/job_list_response.py +6 -0
  36. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/job_request_params.py +6 -0
  37. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/scan_job.py +6 -0
  38. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/scan_report.py +53 -0
  39. hiddenlayer_sdk-3.4.0/tests/api_resources/evaluations/test_red_team.py +586 -0
  40. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/models/test_cards.py +2 -0
  41. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/scans/test_jobs.py +2 -0
  42. hiddenlayer_sdk-3.4.0/tests/api_resources/scans/upload/__init__.py +1 -0
  43. hiddenlayer_sdk-3.4.0/tests/api_resources/test_sensors.py +550 -0
  44. hiddenlayer_sdk-3.4.0/tests/test_red_team_session.py +1603 -0
  45. hiddenlayer_sdk-3.4.0/tests/test_utils/test_json.py +126 -0
  46. hiddenlayer_sdk-3.2.2/.release-please-manifest.json +0 -3
  47. hiddenlayer_sdk-3.2.2/tests/api_resources/test_sensors.py +0 -490
  48. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/.gitignore +0 -0
  49. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/CODE_OF_CONDUCT.md +0 -0
  50. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/CONTRIBUTING.md +0 -0
  51. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/LICENSE +0 -0
  52. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/README.md +0 -0
  53. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/SECURITY.md +0 -0
  54. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/bin/check-release-environment +0 -0
  55. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/bin/publish-jfrog +0 -0
  56. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/bin/publish-pypi +0 -0
  57. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/examples/.keep +0 -0
  58. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/examples/demo.py +0 -0
  59. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/noxfile.py +0 -0
  60. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/release-please-config.json +0 -0
  61. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/__init__.py +0 -0
  62. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_constants.py +0 -0
  63. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_exceptions.py +0 -0
  64. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_files.py +0 -0
  65. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_models.py +0 -0
  66. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_qs.py +0 -0
  67. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_resource.py +0 -0
  68. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_response.py +0 -0
  69. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_streaming.py +0 -0
  70. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_types.py +0 -0
  71. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/__init__.py +0 -0
  72. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_datetime_parse.py +0 -0
  73. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_logs.py +0 -0
  74. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_proxy.py +0 -0
  75. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_reflection.py +0 -0
  76. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_resources_proxy.py +0 -0
  77. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_streams.py +0 -0
  78. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_sync.py +0 -0
  79. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_transform.py +0 -0
  80. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_typing.py +0 -0
  81. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/_utils/_utils.py +0 -0
  82. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/lib/.keep +0 -0
  83. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/lib/community_scan.py +0 -0
  84. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/lib/model_scan.py +0 -0
  85. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/lib/scan_utils.py +0 -0
  86. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/pagination.py +0 -0
  87. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/py.typed +0 -0
  88. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/interactions.py +0 -0
  89. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/models/__init__.py +0 -0
  90. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/models/models.py +0 -0
  91. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/prompt_analyzer.py +0 -0
  92. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/scans/__init__.py +0 -0
  93. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/scans/jobs.py +0 -0
  94. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/scans/results.py +0 -0
  95. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/scans/scans.py +0 -0
  96. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/scans/upload/__init__.py +0 -0
  97. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/scans/upload/file.py +0 -0
  98. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/resources/scans/upload/upload.py +0 -0
  99. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/__init__.py +0 -0
  100. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/interaction_analyze_params.py +0 -0
  101. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/interaction_analyze_response.py +0 -0
  102. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/model_retrieve_response.py +0 -0
  103. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/models/__init__.py +0 -0
  104. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/prompt_analyzer_create_params.py +0 -0
  105. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/prompt_analyzer_create_response.py +0 -0
  106. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/__init__.py +0 -0
  107. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/job_list_params.py +0 -0
  108. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/job_retrieve_params.py +0 -0
  109. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/result_sarif_response.py +0 -0
  110. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/upload/__init__.py +0 -0
  111. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/upload/file_add_response.py +0 -0
  112. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/upload/file_complete_response.py +0 -0
  113. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/upload_complete_all_response.py +0 -0
  114. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/upload_start_params.py +0 -0
  115. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/scans/upload_start_response.py +0 -0
  116. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/sensor_create_params.py +0 -0
  117. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/sensor_create_response.py +0 -0
  118. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/sensor_query_params.py +0 -0
  119. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/sensor_query_response.py +0 -0
  120. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/sensor_retrieve_response.py +0 -0
  121. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/sensor_update_params.py +0 -0
  122. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/src/hiddenlayer/types/sensor_update_response.py +0 -0
  123. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/__init__.py +0 -0
  124. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/__init__.py +0 -0
  125. {hiddenlayer_sdk-3.2.2/tests/api_resources/models → hiddenlayer_sdk-3.4.0/tests/api_resources/evaluations}/__init__.py +0 -0
  126. {hiddenlayer_sdk-3.2.2/tests/api_resources/scans → hiddenlayer_sdk-3.4.0/tests/api_resources/models}/__init__.py +0 -0
  127. {hiddenlayer_sdk-3.2.2/tests/api_resources/scans/upload → hiddenlayer_sdk-3.4.0/tests/api_resources/scans}/__init__.py +0 -0
  128. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/scans/test_results.py +0 -0
  129. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/scans/test_upload.py +0 -0
  130. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/scans/upload/test_file.py +0 -0
  131. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/test_interactions.py +0 -0
  132. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/test_models.py +0 -0
  133. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/api_resources/test_prompt_analyzer.py +0 -0
  134. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/conftest.py +0 -0
  135. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/sample_file.txt +0 -0
  136. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_client.py +0 -0
  137. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_community_scan.py +0 -0
  138. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_deepcopy.py +0 -0
  139. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_extract_files.py +0 -0
  140. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_files.py +0 -0
  141. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_model_scan.py +0 -0
  142. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_models.py +0 -0
  143. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_qs.py +0 -0
  144. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_required_args.py +0 -0
  145. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_response.py +0 -0
  146. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_streaming.py +0 -0
  147. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_transform.py +0 -0
  148. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_utils/test_datetime_parse.py +0 -0
  149. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_utils/test_proxy.py +0 -0
  150. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/test_utils/test_typing.py +0 -0
  151. {hiddenlayer_sdk-3.2.2 → hiddenlayer_sdk-3.4.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "3.4.0"
3
+ }
@@ -1,5 +1,50 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.4.0 (2026-02-14)
4
+
5
+ Full Changelog: [v3.3.0...v3.4.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.3.0...v3.4.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([a1c0278](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/a1c0278363b3be694895f157bab4da233de753bb))
10
+ * **api:** api update ([4b1ef5b](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/4b1ef5b5c16dd67e5a7756acf871acae5f11512a))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **client/oauth:** send grant_type in request body per RFC 6749 ([#173](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/issues/173)) ([2b4c58d](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/2b4c58dc1fb3ad586e9a8fab90f3b900f59446c0))
16
+
17
+
18
+ ### Chores
19
+
20
+ * format all `api.md` files ([829c616](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/829c616b17455c59641976e0c29702dfbba50e8e))
21
+ * **internal:** bump dependencies ([bfb6489](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/bfb6489bb4b627f40fcf62c8ff06bd5946882b5b))
22
+ * **internal:** fix lint error on Python 3.14 ([e83496c](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e83496cc463b59eabd0e415d657fed751365b9f4))
23
+
24
+ ## 3.3.0 (2026-02-04)
25
+
26
+ Full Changelog: [v3.2.2...v3.3.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.2.2...v3.3.0)
27
+
28
+ ### Features
29
+
30
+ * **api:** api update ([06710f4](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/06710f478124281d55a4eb64af67b8de21610872))
31
+ * **api:** api update ([231de87](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/231de87241982efa3ea2ba7b9a9c784c79f8028a))
32
+ * **api:** api update ([6fba9a3](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/6fba9a328358bf0d2b8d3f33d8dc4051cd38d878))
33
+ * **api:** api update ([c9f395b](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/c9f395b31376da8d2799bf5bcaa785065e821f18))
34
+ * **client:** add custom JSON encoder for extended type support ([e108e39](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e108e39cbf807e7d690f1c72ac32229b2269962a))
35
+
36
+
37
+ ### Bug Fixes
38
+
39
+ * **client/oauth:** send grant_type in the right location ([b9898e2](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/b9898e2e643c4725178c7fbb0cac4baabc96d0bd))
40
+
41
+
42
+ ### Chores
43
+
44
+ * **ci:** upgrade `actions/github-script` ([3b4df21](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/3b4df21b705214ad6246aa0be2fcc75d8e7e5a7f))
45
+ * configure Dependabot to target next branch ([#165](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/issues/165)) ([71dc626](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/71dc626806e43c668f112ff65dc21a47676bc8cb))
46
+ * **internal:** update `actions/checkout` version ([4aaddb5](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/4aaddb537aa2187a7ef0388ea43e61042ab61f29))
47
+
3
48
  ## 3.2.2 (2026-01-14)
4
49
 
5
50
  Full Changelog: [v3.2.1...v3.2.2](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.2.1...v3.2.2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: hiddenlayer-sdk
3
- Version: 3.2.2
3
+ Version: 3.4.0
4
4
  Summary: The official Python library for the hiddenlayer API
5
5
  Project-URL: Homepage, https://github.com/hiddenlayerai/hiddenlayer-sdk-python
6
6
  Project-URL: Repository, https://github.com/hiddenlayerai/hiddenlayer-sdk-python
@@ -25,6 +25,31 @@ Methods:
25
25
 
26
26
  - <code title="get /models/v4/cards">client.models.cards.<a href="./src/hiddenlayer/resources/models/cards.py">list</a>(\*\*<a href="src/hiddenlayer/types/models/card_list_params.py">params</a>) -> <a href="./src/hiddenlayer/types/models/card_list_response.py">SyncOffsetPage[CardListResponse]</a></code>
27
27
 
28
+ # Evaluations
29
+
30
+ ## RedTeam
31
+
32
+ Types:
33
+
34
+ ```python
35
+ from hiddenlayer.types.evaluations import (
36
+ RedTeamCreateResponse,
37
+ RedTeamRetrieveEvaluationResultsResponse,
38
+ RedTeamRetrieveNextActionResponse,
39
+ RedTeamRetrieveStatusResponse,
40
+ RedTeamSubmitTargetResponseResponse,
41
+ )
42
+ ```
43
+
44
+ Methods:
45
+
46
+ - <code title="post /evaluations/v1-beta/red-team">client.evaluations.red_team.<a href="./src/hiddenlayer/resources/evaluations/red_team.py">create</a>(\*\*<a href="src/hiddenlayer/types/evaluations/red_team_create_params.py">params</a>) -> <a href="./src/hiddenlayer/types/evaluations/red_team_create_response.py">RedTeamCreateResponse</a></code>
47
+ - <code title="get /evaluations/v1-beta/red-team/{workflow_id}">client.evaluations.red_team.<a href="./src/hiddenlayer/resources/evaluations/red_team.py">retrieve_evaluation_results</a>(workflow_id) -> <a href="./src/hiddenlayer/types/evaluations/red_team_retrieve_evaluation_results_response.py">RedTeamRetrieveEvaluationResultsResponse</a></code>
48
+ - <code title="get /evaluations/v1-beta/red-team/{workflow_id}/next-action">client.evaluations.red_team.<a href="./src/hiddenlayer/resources/evaluations/red_team.py">retrieve_next_action</a>(workflow_id) -> <a href="./src/hiddenlayer/types/evaluations/red_team_retrieve_next_action_response.py">RedTeamRetrieveNextActionResponse</a></code>
49
+ - <code title="get /evaluations/v1-beta/red-team/{workflow_id}/status">client.evaluations.red_team.<a href="./src/hiddenlayer/resources/evaluations/red_team.py">retrieve_status</a>(workflow_id) -> <a href="./src/hiddenlayer/types/evaluations/red_team_retrieve_status_response.py">RedTeamRetrieveStatusResponse</a></code>
50
+ - <code title="post /evaluations/v1-beta/red-team/{workflow_id}/target-response">client.evaluations.red_team.<a href="./src/hiddenlayer/resources/evaluations/red_team.py">submit_target_response</a>(workflow_id, \*\*<a href="src/hiddenlayer/types/evaluations/red_team_submit_target_response_params.py">params</a>) -> <a href="./src/hiddenlayer/types/evaluations/red_team_submit_target_response_response.py">RedTeamSubmitTargetResponseResponse</a></code>
51
+ - <code title="post /evaluations/v1-beta/red-team/terminations/{workflow_id}">client.evaluations.red_team.<a href="./src/hiddenlayer/resources/evaluations/red_team.py">terminate</a>(workflow_id) -> None</code>
52
+
28
53
  # PromptAnalyzer
29
54
 
30
55
  Types:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "hiddenlayer-sdk"
3
- version = "3.2.2"
3
+ version = "3.4.0"
4
4
  description = "The official Python library for the hiddenlayer API"
5
5
  dynamic = ["readme"]
6
6
  license = {text = "Apache-2.0"}
@@ -72,7 +72,7 @@ format = { chain = [
72
72
  # run formatting again to fix any inconsistencies when imports are stripped
73
73
  "format:ruff",
74
74
  ]}
75
- "format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
75
+ "format:docs" = "bash -c 'python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md)'"
76
76
  "format:ruff" = "ruff format"
77
77
 
78
78
  "lint" = { chain = [
@@ -12,14 +12,14 @@
12
12
  -e file:.
13
13
  aiohappyeyeballs==2.6.1
14
14
  # via aiohttp
15
- aiohttp==3.13.2
15
+ aiohttp==3.13.3
16
16
  # via hiddenlayer-sdk
17
17
  # via httpx-aiohttp
18
18
  aiosignal==1.4.0
19
19
  # via aiohttp
20
20
  annotated-types==0.7.0
21
21
  # via pydantic
22
- anyio==4.12.0
22
+ anyio==4.12.1
23
23
  # via hiddenlayer-sdk
24
24
  # via httpx
25
25
  argcomplete==3.6.3
@@ -31,7 +31,7 @@ attrs==25.4.0
31
31
  # via nox
32
32
  backports-asyncio-runner==1.2.0
33
33
  # via pytest-asyncio
34
- certifi==2025.11.12
34
+ certifi==2026.1.4
35
35
  # via httpcore
36
36
  # via httpx
37
37
  colorlog==6.10.1
@@ -63,7 +63,7 @@ httpx==0.28.1
63
63
  # via hiddenlayer-sdk
64
64
  # via httpx-aiohttp
65
65
  # via respx
66
- httpx-aiohttp==0.1.9
66
+ httpx-aiohttp==0.1.12
67
67
  # via hiddenlayer-sdk
68
68
  humanize==4.13.0
69
69
  # via nox
@@ -72,7 +72,7 @@ idna==3.11
72
72
  # via httpx
73
73
  # via requests
74
74
  # via yarl
75
- importlib-metadata==8.7.0
75
+ importlib-metadata==8.7.1
76
76
  iniconfig==2.1.0
77
77
  # via pytest
78
78
  markdown-it-py==3.0.0
@@ -85,14 +85,14 @@ multidict==6.7.0
85
85
  mypy==1.17.0
86
86
  mypy-extensions==1.1.0
87
87
  # via mypy
88
- nodeenv==1.9.1
88
+ nodeenv==1.10.0
89
89
  # via pyright
90
90
  nox==2025.11.12
91
91
  packaging==25.0
92
92
  # via dependency-groups
93
93
  # via nox
94
94
  # via pytest
95
- pathspec==0.12.1
95
+ pathspec==1.0.3
96
96
  # via mypy
97
97
  platformdirs==4.4.0
98
98
  # via virtualenv
@@ -125,13 +125,13 @@ requests-auth==8.0.0
125
125
  # via hiddenlayer
126
126
  respx==0.22.0
127
127
  rich==14.2.0
128
- ruff==0.14.7
128
+ ruff==0.14.13
129
129
  six==1.17.0
130
130
  # via python-dateutil
131
131
  sniffio==1.3.1
132
132
  # via hiddenlayer-sdk
133
133
  time-machine==2.19.0
134
- tomli==2.3.0
134
+ tomli==2.4.0
135
135
  # via dependency-groups
136
136
  # via mypy
137
137
  # via nox
@@ -152,7 +152,7 @@ types-requests==2.32.4.20250611
152
152
  # via virtualenv
153
153
  typing-inspection==0.4.2
154
154
  # via pydantic
155
- virtualenv==20.35.4
155
+ virtualenv==20.36.1
156
156
  urllib3==2.5.0
157
157
  # via nox
158
158
  yarl==1.22.0
@@ -12,21 +12,21 @@
12
12
  -e file:.
13
13
  aiohappyeyeballs==2.6.1
14
14
  # via aiohttp
15
- aiohttp==3.13.2
15
+ aiohttp==3.13.3
16
16
  # via hiddenlayer-sdk
17
17
  # via httpx-aiohttp
18
18
  aiosignal==1.4.0
19
19
  # via aiohttp
20
20
  annotated-types==0.7.0
21
21
  # via pydantic
22
- anyio==4.12.0
22
+ anyio==4.12.1
23
23
  # via hiddenlayer-sdk
24
24
  # via httpx
25
25
  async-timeout==5.0.1
26
26
  # via aiohttp
27
27
  attrs==25.4.0
28
28
  # via aiohttp
29
- certifi==2025.11.12
29
+ certifi==2026.1.4
30
30
  # via httpcore
31
31
  # via httpx
32
32
  distro==1.9.0
@@ -45,7 +45,7 @@ httpcore==1.0.9
45
45
  httpx==0.28.1
46
46
  # via hiddenlayer-sdk
47
47
  # via httpx-aiohttp
48
- httpx-aiohttp==0.1.9
48
+ httpx-aiohttp==0.1.12
49
49
  # via hiddenlayer-sdk
50
50
  idna==3.11
51
51
  # via anyio
@@ -86,6 +86,7 @@ from ._exceptions import (
86
86
  APIConnectionError,
87
87
  APIResponseValidationError,
88
88
  )
89
+ from ._utils._json import openapi_dumps
89
90
 
90
91
  log: logging.Logger = logging.getLogger(__name__)
91
92
 
@@ -554,8 +555,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
554
555
  kwargs["content"] = options.content
555
556
  elif isinstance(json_data, bytes):
556
557
  kwargs["content"] = json_data
557
- else:
558
- kwargs["json"] = json_data if is_given(json_data) else None
558
+ elif not files:
559
+ # Don't set content when JSON is sent as multipart/form-data,
560
+ # since httpx's content param overrides other body arguments
561
+ kwargs["content"] = openapi_dumps(json_data) if is_given(json_data) and json_data is not None else None
559
562
  kwargs["files"] = files
560
563
  else:
561
564
  headers.pop("Content-Type", None)
@@ -32,14 +32,16 @@ from ._base_client import (
32
32
  )
33
33
 
34
34
  if TYPE_CHECKING:
35
- from .resources import scans, models, sensors, interactions, prompt_analyzer
35
+ from .resources import scans, models, sensors, evaluations, interactions, prompt_analyzer
36
36
  from .lib.model_scan import ModelScanner, AsyncModelScanner
37
37
  from .resources.sensors import SensorsResource, AsyncSensorsResource
38
38
  from .lib.community_scan import CommunityScanner, AsyncCommunityScanner
39
39
  from .resources.scans.scans import ScansResource, AsyncScansResource
40
40
  from .resources.interactions import InteractionsResource, AsyncInteractionsResource
41
+ from .lib.evaluation_sessions import EvaluationSessionsResource, AsyncEvaluationSessionsResource
41
42
  from .resources.models.models import ModelsResource, AsyncModelsResource
42
43
  from .resources.prompt_analyzer import PromptAnalyzerResource, AsyncPromptAnalyzerResource
44
+ from .resources.evaluations.evaluations import EvaluationsResource, AsyncEvaluationsResource
43
45
 
44
46
  __all__ = [
45
47
  "ENVIRONMENTS",
@@ -155,6 +157,18 @@ class HiddenLayer(SyncAPIClient):
155
157
 
156
158
  return ModelsResource(self)
157
159
 
160
+ @cached_property
161
+ def evaluations(self) -> EvaluationsResource:
162
+ from .resources.evaluations import EvaluationsResource
163
+
164
+ return EvaluationsResource(self)
165
+
166
+ @cached_property
167
+ def evaluation_sessions(self) -> EvaluationSessionsResource:
168
+ from .lib.evaluation_sessions import EvaluationSessionsResource
169
+
170
+ return EvaluationSessionsResource(self)
171
+
158
172
  @cached_property
159
173
  def prompt_analyzer(self) -> PromptAnalyzerResource:
160
174
  from .resources.prompt_analyzer import PromptAnalyzerResource
@@ -430,6 +444,18 @@ class AsyncHiddenLayer(AsyncAPIClient):
430
444
 
431
445
  return AsyncModelsResource(self)
432
446
 
447
+ @cached_property
448
+ def evaluations(self) -> AsyncEvaluationsResource:
449
+ from .resources.evaluations import AsyncEvaluationsResource
450
+
451
+ return AsyncEvaluationsResource(self)
452
+
453
+ @cached_property
454
+ def evaluation_sessions(self) -> AsyncEvaluationSessionsResource:
455
+ from .lib.evaluation_sessions import AsyncEvaluationSessionsResource
456
+
457
+ return AsyncEvaluationSessionsResource(self)
458
+
433
459
  @cached_property
434
460
  def prompt_analyzer(self) -> AsyncPromptAnalyzerResource:
435
461
  from .resources.prompt_analyzer import AsyncPromptAnalyzerResource
@@ -620,6 +646,12 @@ class HiddenLayerWithRawResponse:
620
646
 
621
647
  return ModelsResourceWithRawResponse(self._client.models)
622
648
 
649
+ @cached_property
650
+ def evaluations(self) -> evaluations.EvaluationsResourceWithRawResponse:
651
+ from .resources.evaluations import EvaluationsResourceWithRawResponse
652
+
653
+ return EvaluationsResourceWithRawResponse(self._client.evaluations)
654
+
623
655
  @cached_property
624
656
  def prompt_analyzer(self) -> prompt_analyzer.PromptAnalyzerResourceWithRawResponse:
625
657
  from .resources.prompt_analyzer import PromptAnalyzerResourceWithRawResponse
@@ -657,6 +689,12 @@ class AsyncHiddenLayerWithRawResponse:
657
689
 
658
690
  return AsyncModelsResourceWithRawResponse(self._client.models)
659
691
 
692
+ @cached_property
693
+ def evaluations(self) -> evaluations.AsyncEvaluationsResourceWithRawResponse:
694
+ from .resources.evaluations import AsyncEvaluationsResourceWithRawResponse
695
+
696
+ return AsyncEvaluationsResourceWithRawResponse(self._client.evaluations)
697
+
660
698
  @cached_property
661
699
  def prompt_analyzer(self) -> prompt_analyzer.AsyncPromptAnalyzerResourceWithRawResponse:
662
700
  from .resources.prompt_analyzer import AsyncPromptAnalyzerResourceWithRawResponse
@@ -694,6 +732,12 @@ class HiddenLayerWithStreamedResponse:
694
732
 
695
733
  return ModelsResourceWithStreamingResponse(self._client.models)
696
734
 
735
+ @cached_property
736
+ def evaluations(self) -> evaluations.EvaluationsResourceWithStreamingResponse:
737
+ from .resources.evaluations import EvaluationsResourceWithStreamingResponse
738
+
739
+ return EvaluationsResourceWithStreamingResponse(self._client.evaluations)
740
+
697
741
  @cached_property
698
742
  def prompt_analyzer(self) -> prompt_analyzer.PromptAnalyzerResourceWithStreamingResponse:
699
743
  from .resources.prompt_analyzer import PromptAnalyzerResourceWithStreamingResponse
@@ -731,6 +775,12 @@ class AsyncHiddenLayerWithStreamedResponse:
731
775
 
732
776
  return AsyncModelsResourceWithStreamingResponse(self._client.models)
733
777
 
778
+ @cached_property
779
+ def evaluations(self) -> evaluations.AsyncEvaluationsResourceWithStreamingResponse:
780
+ from .resources.evaluations import AsyncEvaluationsResourceWithStreamingResponse
781
+
782
+ return AsyncEvaluationsResourceWithStreamingResponse(self._client.evaluations)
783
+
734
784
  @cached_property
735
785
  def prompt_analyzer(self) -> prompt_analyzer.AsyncPromptAnalyzerResourceWithStreamingResponse:
736
786
  from .resources.prompt_analyzer import AsyncPromptAnalyzerResourceWithStreamingResponse
@@ -139,6 +139,7 @@ def model_dump(
139
139
  exclude_defaults: bool = False,
140
140
  warnings: bool = True,
141
141
  mode: Literal["json", "python"] = "python",
142
+ by_alias: bool | None = None,
142
143
  ) -> dict[str, Any]:
143
144
  if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
144
145
  return model.model_dump(
@@ -148,13 +149,12 @@ def model_dump(
148
149
  exclude_defaults=exclude_defaults,
149
150
  # warnings are not supported in Pydantic v1
150
151
  warnings=True if PYDANTIC_V1 else warnings,
152
+ by_alias=by_alias,
151
153
  )
152
154
  return cast(
153
155
  "dict[str, Any]",
154
156
  model.dict( # pyright: ignore[reportDeprecated, reportUnnecessaryCast]
155
- exclude=exclude,
156
- exclude_unset=exclude_unset,
157
- exclude_defaults=exclude_defaults,
157
+ exclude=exclude, exclude_unset=exclude_unset, exclude_defaults=exclude_defaults, by_alias=bool(by_alias)
158
158
  ),
159
159
  )
160
160
 
@@ -87,8 +87,11 @@ class OAuth2ClientCredentials(httpx.Auth):
87
87
  return httpx.Request(
88
88
  "POST",
89
89
  self._token_url,
90
- params={"grant_type": "client_credentials"},
91
- headers={"Authorization": f"Basic {encoded_credentials}"},
90
+ content=b"grant_type=client_credentials",
91
+ headers={
92
+ "Content-Type": "application/x-www-form-urlencoded",
93
+ "Authorization": f"Basic {encoded_credentials}",
94
+ },
92
95
  )
93
96
 
94
97
  def token_is_expired(self) -> bool:
@@ -26,7 +26,7 @@ def is_union(tp: Optional[Type[Any]]) -> bool:
26
26
  else:
27
27
  import types
28
28
 
29
- return tp is Union or tp is types.UnionType
29
+ return tp is Union or tp is types.UnionType # type: ignore[comparison-overlap]
30
30
 
31
31
 
32
32
  def is_typeddict(tp: Type[Any]) -> bool:
@@ -0,0 +1,35 @@
1
+ import json
2
+ from typing import Any
3
+ from datetime import datetime
4
+ from typing_extensions import override
5
+
6
+ import pydantic
7
+
8
+ from .._compat import model_dump
9
+
10
+
11
+ def openapi_dumps(obj: Any) -> bytes:
12
+ """
13
+ Serialize an object to UTF-8 encoded JSON bytes.
14
+
15
+ Extends the standard json.dumps with support for additional types
16
+ commonly used in the SDK, such as `datetime`, `pydantic.BaseModel`, etc.
17
+ """
18
+ return json.dumps(
19
+ obj,
20
+ cls=_CustomEncoder,
21
+ # Uses the same defaults as httpx's JSON serialization
22
+ ensure_ascii=False,
23
+ separators=(",", ":"),
24
+ allow_nan=False,
25
+ ).encode()
26
+
27
+
28
+ class _CustomEncoder(json.JSONEncoder):
29
+ @override
30
+ def default(self, o: Any) -> Any:
31
+ if isinstance(o, datetime):
32
+ return o.isoformat()
33
+ if isinstance(o, pydantic.BaseModel):
34
+ return model_dump(o, exclude_unset=True, mode="json", by_alias=True)
35
+ return super().default(o)
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "hiddenlayer"
4
- __version__ = "3.2.2" # x-release-please-version
4
+ __version__ = "3.4.0" # x-release-please-version
@@ -1,7 +1,7 @@
1
1
  # Custom extensions for HiddenLayer SDK
2
-
3
2
  from .model_scan import ModelScanner, AsyncModelScanner
4
3
  from .community_scan import CommunityScanner, CommunityScanSource, AsyncCommunityScanner
4
+ from .evaluation_sessions import EvaluationSessionsResource, AsyncEvaluationSessionsResource
5
5
 
6
6
  __all__ = [
7
7
  "CommunityScanner",
@@ -9,4 +9,6 @@ __all__ = [
9
9
  "ModelScanner",
10
10
  "AsyncModelScanner",
11
11
  "CommunityScanSource",
12
+ "EvaluationSessionsResource",
13
+ "AsyncEvaluationSessionsResource",
12
14
  ]
@@ -0,0 +1,18 @@
1
+ import logging
2
+
3
+ from .._compat import cached_property
4
+ from .._resource import SyncAPIResource, AsyncAPIResource
5
+ from .red_team_session import RedTeamSessionsResource, AsyncRedTeamSessionsResource
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ class EvaluationSessionsResource(SyncAPIResource):
10
+ @cached_property
11
+ def red_team(self) -> RedTeamSessionsResource:
12
+ return RedTeamSessionsResource(client=self._client)
13
+
14
+
15
+ class AsyncEvaluationSessionsResource(AsyncAPIResource):
16
+ @cached_property
17
+ def red_team(self) -> AsyncRedTeamSessionsResource:
18
+ return AsyncRedTeamSessionsResource(client=self._client)
@@ -0,0 +1,17 @@
1
+ """Exception classes for HiddenLayer AI Red Team SDK."""
2
+
3
+
4
+ class RedTeamSessionError(Exception):
5
+ """Base exception for red team session errors."""
6
+
7
+
8
+ class PollTimeoutError(RedTeamSessionError):
9
+ """Raised when polling times out."""
10
+
11
+
12
+ class WorkflowNotFoundError(RedTeamSessionError):
13
+ """Raised when workflow is not found."""
14
+
15
+
16
+ class InvalidSessionError(RedTeamSessionError):
17
+ """Raised when session ID is invalid."""