hiddenlayer-sdk 3.3.0__tar.gz → 3.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.
- hiddenlayer_sdk-3.5.0/.release-please-manifest.json +3 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/CHANGELOG.md +48 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/CONTRIBUTING.md +0 -7
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/PKG-INFO +1 -1
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/api.md +92 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/pyproject.toml +2 -2
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/requirements-dev.lock +10 -10
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/requirements.lock +4 -4
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_client.py +2 -2
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_oauth2.py +5 -2
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_response.py +3 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_streaming.py +8 -3
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_compat.py +1 -1
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_version.py +1 -1
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/lib/red_team_session.py +17 -35
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/models/cards.py +4 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/scans/upload/file.py +20 -9
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/models/card_list_params.py +2 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/models/card_list_response.py +14 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/job_list_response.py +6 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/job_request_params.py +6 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/scan_job.py +6 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/scan_report.py +56 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/evaluations/test_red_team.py +48 -48
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/models/test_cards.py +10 -8
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/scans/test_jobs.py +28 -26
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/scans/test_results.py +8 -8
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/scans/test_upload.py +16 -16
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/scans/upload/test_file.py +36 -22
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/test_interactions.py +8 -8
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/test_models.py +16 -16
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/test_prompt_analyzer.py +8 -8
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/test_sensors.py +42 -42
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_client.py +16 -0
- hiddenlayer_sdk-3.3.0/.release-please-manifest.json +0 -3
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/.gitignore +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/CODE_OF_CONDUCT.md +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/LICENSE +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/README.md +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/SECURITY.md +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/bin/check-release-environment +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/bin/publish-jfrog +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/bin/publish-pypi +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/examples/.keep +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/examples/demo.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/noxfile.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/release-please-config.json +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_base_client.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_compat.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_constants.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_exceptions.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_files.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_models.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_qs.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_resource.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_types.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_datetime_parse.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_json.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_logs.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_proxy.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_reflection.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_resources_proxy.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_streams.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_sync.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_transform.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_typing.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/_utils/_utils.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/lib/.keep +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/lib/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/lib/community_scan.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/lib/evaluation_sessions.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/lib/model_scan.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/lib/red_team_exceptions.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/lib/scan_utils.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/pagination.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/py.typed +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/evaluations/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/evaluations/evaluations.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/evaluations/red_team.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/interactions.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/models/models.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/prompt_analyzer.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/scans/jobs.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/scans/results.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/scans/scans.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/scans/upload/upload.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/sensors.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/evaluations/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/evaluations/red_team_create_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/evaluations/red_team_create_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/evaluations/red_team_retrieve_evaluation_results_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/evaluations/red_team_retrieve_next_action_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/evaluations/red_team_retrieve_status_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/evaluations/red_team_submit_target_response_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/evaluations/red_team_submit_target_response_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/interaction_analyze_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/interaction_analyze_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/model_retrieve_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/prompt_analyzer_create_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/prompt_analyzer_create_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/job_list_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/job_retrieve_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/result_sarif_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/upload/file_add_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/upload/file_complete_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/upload_complete_all_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/upload_start_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/scans/upload_start_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/sensor_create_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/sensor_create_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/sensor_query_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/sensor_query_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/sensor_retrieve_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/sensor_update_params.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/types/sensor_update_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/evaluations/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/api_resources/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/conftest.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/sample_file.txt +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_community_scan.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_deepcopy.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_extract_files.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_files.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_model_scan.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_models.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_qs.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_red_team_session.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_required_args.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_response.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_streaming.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_transform.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_utils/test_json.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_utils/test_proxy.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/test_utils/test_typing.py +0 -0
- {hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.5.0 (2026-03-03)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v3.4.0...v3.5.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.4.0...v3.5.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([9eea54c](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/9eea54c2eb2727e95426a560d3df0835f7b7111c))
|
|
10
|
+
* **api:** api update ([f141896](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/f141896accb0dd56c58ee9d1cc4f81efd30d25d0))
|
|
11
|
+
* **api:** api update ([92f2618](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/92f26183853e9a3e540c10647520955e9d5908f0))
|
|
12
|
+
* **api:** api update ([16f2a69](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/16f2a6965558821b0a15448aa53b0feb49098b0c))
|
|
13
|
+
* **api:** api update ([b98638e](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/b98638ef2650e5f5562fc04d7a441005a10d4486))
|
|
14
|
+
* **api:** api update ([f08f968](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/f08f968be5fe2be22924a77d7ccf61c65e6f1ccb))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Chores
|
|
18
|
+
|
|
19
|
+
* **internal:** add request options to SSE classes ([33b7597](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/33b7597bc7a36847f70dc26ebc2dfcccd6a3d15c))
|
|
20
|
+
* **internal:** make `test_proxy_environment_variables` more resilient ([5d82965](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/5d82965da2550879002ffacc2b116ae9e241de3f))
|
|
21
|
+
* **internal:** make `test_proxy_environment_variables` more resilient to env ([31ee619](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/31ee61956ce172605b9fe9a386b4123fca590b78))
|
|
22
|
+
* **internal:** remove mock server code ([9579dbc](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/9579dbc6e8d484a84b628c2513b8d5cc12bfc19b))
|
|
23
|
+
* update mock server docs ([5af4adc](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/5af4adc0dba02208929639010a9513da98d45339))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Documentation
|
|
27
|
+
|
|
28
|
+
* add RedTeamSessions to API reference ([#176](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/issues/176)) ([587ac08](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/587ac0868a82a6a25dc02a9639edd159fe2cb7e2))
|
|
29
|
+
|
|
30
|
+
## 3.4.0 (2026-02-14)
|
|
31
|
+
|
|
32
|
+
Full Changelog: [v3.3.0...v3.4.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.3.0...v3.4.0)
|
|
33
|
+
|
|
34
|
+
### Features
|
|
35
|
+
|
|
36
|
+
* **api:** api update ([a1c0278](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/a1c0278363b3be694895f157bab4da233de753bb))
|
|
37
|
+
* **api:** api update ([4b1ef5b](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/4b1ef5b5c16dd67e5a7756acf871acae5f11512a))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
* **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))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
### Chores
|
|
46
|
+
|
|
47
|
+
* format all `api.md` files ([829c616](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/829c616b17455c59641976e0c29702dfbba50e8e))
|
|
48
|
+
* **internal:** bump dependencies ([bfb6489](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/bfb6489bb4b627f40fcf62c8ff06bd5946882b5b))
|
|
49
|
+
* **internal:** fix lint error on Python 3.14 ([e83496c](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e83496cc463b59eabd0e415d657fed751365b9f4))
|
|
50
|
+
|
|
3
51
|
## 3.3.0 (2026-02-04)
|
|
4
52
|
|
|
5
53
|
Full Changelog: [v3.2.2...v3.3.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.2.2...v3.3.0)
|
|
@@ -85,13 +85,6 @@ $ pip install ./path-to-wheel-file.whl
|
|
|
85
85
|
|
|
86
86
|
## Running tests
|
|
87
87
|
|
|
88
|
-
Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
|
|
89
|
-
|
|
90
|
-
```sh
|
|
91
|
-
# you will need npm installed
|
|
92
|
-
$ npx prism mock path/to/your/openapi.yml
|
|
93
|
-
```
|
|
94
|
-
|
|
95
88
|
```sh
|
|
96
89
|
$ ./scripts/test
|
|
97
90
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: hiddenlayer-sdk
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.5.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
|
|
@@ -203,6 +203,98 @@ CommunityScanSource.GOOGLE_OAUTH = "GOOGLE_OAUTH"
|
|
|
203
203
|
CommunityScanSource.HUGGING_FACE = "HUGGING_FACE"
|
|
204
204
|
```
|
|
205
205
|
|
|
206
|
+
## RedTeamSessions
|
|
207
|
+
|
|
208
|
+
High-level session management for red team evaluations. Wraps the low-level `client.evaluations.red_team.*` API into a stateful session abstraction with polling, iteration, and callback-driven execution.
|
|
209
|
+
|
|
210
|
+
```python
|
|
211
|
+
from hiddenlayer.lib import EvaluationSessionsResource, AsyncEvaluationSessionsResource
|
|
212
|
+
from hiddenlayer.lib.red_team_exceptions import (
|
|
213
|
+
RedTeamSessionError,
|
|
214
|
+
PollTimeoutError,
|
|
215
|
+
WorkflowNotFoundError,
|
|
216
|
+
InvalidSessionError,
|
|
217
|
+
)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Session Manager
|
|
221
|
+
|
|
222
|
+
Accessed via `client.evaluation_sessions.red_team`.
|
|
223
|
+
|
|
224
|
+
Methods:
|
|
225
|
+
|
|
226
|
+
- **start_session(name, target_model, target_system_prompt="", max_turns=3, execution_strategy_type="random", attacker_max_generation_attempts=2, n_random_techniques=1, max_parallel_techniques=1, prompt_set_id="", hiddenlayer_project_id=None, poll_interval=2.0, poll_max_wait=None, sessions_per_technique=1) -> RedTeamSession**
|
|
227
|
+
Start a new red team session. Returns a `RedTeamSession` (sync) or `AsyncRedTeamSession` (async).
|
|
228
|
+
Uses adaptive multi-objective evaluation: each session runs to `max_turns` (no short-circuit),
|
|
229
|
+
tests all objectives, and maintains cross-session state for adaptive attacks.
|
|
230
|
+
`sessions_per_technique` controls how many sessions run per technique (default 1).
|
|
231
|
+
|
|
232
|
+
- **resume_session(workflow_id, poll_interval=2.0, poll_max_wait=None, max_parallel_techniques=None) -> RedTeamSession**
|
|
233
|
+
Reconnect to a previously started workflow by its ID.
|
|
234
|
+
|
|
235
|
+
- **terminate_session(workflow_id) -> None**
|
|
236
|
+
Stop a running workflow.
|
|
237
|
+
|
|
238
|
+
### Session Object
|
|
239
|
+
|
|
240
|
+
Returned by `start_session()` and `resume_session()`. Available as `RedTeamSession` (sync) and `AsyncRedTeamSession` (async).
|
|
241
|
+
|
|
242
|
+
Properties:
|
|
243
|
+
|
|
244
|
+
- **workflow_id -> str**
|
|
245
|
+
The workflow ID for this session.
|
|
246
|
+
|
|
247
|
+
- **name -> str**
|
|
248
|
+
The session name.
|
|
249
|
+
|
|
250
|
+
Methods:
|
|
251
|
+
|
|
252
|
+
- **get_next_action(block=True) -> RedTeamRetrieveNextActionResponse**
|
|
253
|
+
Poll the server for the next action. When `block=True`, waits until an action is ready.
|
|
254
|
+
|
|
255
|
+
- **wait_for_completion(poll_interval=3.0, max_wait=300.0, verbose=False) -> None**
|
|
256
|
+
Poll status until the workflow reaches a terminal state (COMPLETED, FAILED, CANCELLED, TERMINATED, or TIMED_OUT). Automatically called by `run_with_callback()` and `run_with_callback_parallel()`.
|
|
257
|
+
|
|
258
|
+
- **iterate_actions() -> Iterator[RedTeamRetrieveNextActionResponse]**
|
|
259
|
+
Yield `attack_task` actions until the workflow completes or fails. Use with `for`/`async for`.
|
|
260
|
+
|
|
261
|
+
- **run_with_callback(handler) -> None**
|
|
262
|
+
Drive the full session sequentially. The handler receives `(attack_prompt, history, session_id, target_system_prompt)` and returns the target model's response string. Waits for workflow completion before returning.
|
|
263
|
+
|
|
264
|
+
### Async-Only Session Methods
|
|
265
|
+
|
|
266
|
+
These methods are only available on `AsyncRedTeamSession`:
|
|
267
|
+
|
|
268
|
+
- **get_available_actions(max_actions=10) -> list[RedTeamRetrieveNextActionResponse]**
|
|
269
|
+
Non-blocking batch fetch of up to `max_actions` currently ready actions.
|
|
270
|
+
|
|
271
|
+
- **run_with_callback_parallel(handler, max_parallel=None, poll_batch_interval=0.5) -> None**
|
|
272
|
+
Drive the session with parallel action processing. When `max_parallel` is None, uses the `max_parallel_techniques` value from session config.
|
|
273
|
+
|
|
274
|
+
### Exceptions
|
|
275
|
+
|
|
276
|
+
```python
|
|
277
|
+
from hiddenlayer.lib.red_team_exceptions import (
|
|
278
|
+
RedTeamSessionError,
|
|
279
|
+
PollTimeoutError,
|
|
280
|
+
WorkflowNotFoundError,
|
|
281
|
+
InvalidSessionError,
|
|
282
|
+
)
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
- **RedTeamSessionError** -- Base exception for red team session errors.
|
|
286
|
+
- **PollTimeoutError** -- Raised when polling exceeds `max_wait`.
|
|
287
|
+
- **WorkflowNotFoundError** -- Raised when a workflow ID does not exist (HTTP 404).
|
|
288
|
+
- **InvalidSessionError** -- Raised when a session ID is invalid during response submission (HTTP 400).
|
|
289
|
+
|
|
290
|
+
### Execution Strategies
|
|
291
|
+
|
|
292
|
+
Available values for `start_session(execution_strategy_type=...)`:
|
|
293
|
+
|
|
294
|
+
- `"single"` -- Single technique execution
|
|
295
|
+
- `"random"` -- Random technique selection (default)
|
|
296
|
+
- `"static_prompt_set"` -- Static prompt set evaluation (requires `prompt_set_id`)
|
|
297
|
+
|
|
206
298
|
# Client Usage
|
|
207
299
|
|
|
208
300
|
## Authentication Methods
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "hiddenlayer-sdk"
|
|
3
|
-
version = "3.
|
|
3
|
+
version = "3.5.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.
|
|
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.
|
|
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==
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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==
|
|
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.
|
|
48
|
+
httpx-aiohttp==0.1.12
|
|
49
49
|
# via hiddenlayer-sdk
|
|
50
50
|
idna==3.11
|
|
51
51
|
# via anyio
|
|
@@ -233,7 +233,7 @@ class HiddenLayer(SyncAPIClient):
|
|
|
233
233
|
return make_oauth2(
|
|
234
234
|
client_id=self.client_id,
|
|
235
235
|
client_secret=self.client_secret,
|
|
236
|
-
token_url=self._prepare_url("/oauth2/token
|
|
236
|
+
token_url=self._prepare_url("/oauth2/token"),
|
|
237
237
|
header="Authorization",
|
|
238
238
|
)
|
|
239
239
|
return None
|
|
@@ -520,7 +520,7 @@ class AsyncHiddenLayer(AsyncAPIClient):
|
|
|
520
520
|
return make_oauth2(
|
|
521
521
|
client_id=self.client_id,
|
|
522
522
|
client_secret=self.client_secret,
|
|
523
|
-
token_url=self._prepare_url("/oauth2/token
|
|
523
|
+
token_url=self._prepare_url("/oauth2/token"),
|
|
524
524
|
header="Authorization",
|
|
525
525
|
)
|
|
526
526
|
return None
|
|
@@ -87,8 +87,11 @@ class OAuth2ClientCredentials(httpx.Auth):
|
|
|
87
87
|
return httpx.Request(
|
|
88
88
|
"POST",
|
|
89
89
|
self._token_url,
|
|
90
|
-
|
|
91
|
-
headers={
|
|
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:
|
|
@@ -152,6 +152,7 @@ class BaseAPIResponse(Generic[R]):
|
|
|
152
152
|
),
|
|
153
153
|
response=self.http_response,
|
|
154
154
|
client=cast(Any, self._client),
|
|
155
|
+
options=self._options,
|
|
155
156
|
),
|
|
156
157
|
)
|
|
157
158
|
|
|
@@ -162,6 +163,7 @@ class BaseAPIResponse(Generic[R]):
|
|
|
162
163
|
cast_to=extract_stream_chunk_type(self._stream_cls),
|
|
163
164
|
response=self.http_response,
|
|
164
165
|
client=cast(Any, self._client),
|
|
166
|
+
options=self._options,
|
|
165
167
|
),
|
|
166
168
|
)
|
|
167
169
|
|
|
@@ -175,6 +177,7 @@ class BaseAPIResponse(Generic[R]):
|
|
|
175
177
|
cast_to=cast_to,
|
|
176
178
|
response=self.http_response,
|
|
177
179
|
client=cast(Any, self._client),
|
|
180
|
+
options=self._options,
|
|
178
181
|
),
|
|
179
182
|
)
|
|
180
183
|
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
import json
|
|
5
5
|
import inspect
|
|
6
6
|
from types import TracebackType
|
|
7
|
-
from typing import TYPE_CHECKING, Any, Generic, TypeVar, Iterator, AsyncIterator, cast
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Generic, TypeVar, Iterator, Optional, AsyncIterator, cast
|
|
8
8
|
from typing_extensions import Self, Protocol, TypeGuard, override, get_origin, runtime_checkable
|
|
9
9
|
|
|
10
10
|
import httpx
|
|
@@ -13,6 +13,7 @@ from ._utils import extract_type_var_from_base
|
|
|
13
13
|
|
|
14
14
|
if TYPE_CHECKING:
|
|
15
15
|
from ._client import HiddenLayer, AsyncHiddenLayer
|
|
16
|
+
from ._models import FinalRequestOptions
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
_T = TypeVar("_T")
|
|
@@ -22,7 +23,7 @@ class Stream(Generic[_T]):
|
|
|
22
23
|
"""Provides the core interface to iterate over a synchronous stream response."""
|
|
23
24
|
|
|
24
25
|
response: httpx.Response
|
|
25
|
-
|
|
26
|
+
_options: Optional[FinalRequestOptions] = None
|
|
26
27
|
_decoder: SSEBytesDecoder
|
|
27
28
|
|
|
28
29
|
def __init__(
|
|
@@ -31,10 +32,12 @@ class Stream(Generic[_T]):
|
|
|
31
32
|
cast_to: type[_T],
|
|
32
33
|
response: httpx.Response,
|
|
33
34
|
client: HiddenLayer,
|
|
35
|
+
options: Optional[FinalRequestOptions] = None,
|
|
34
36
|
) -> None:
|
|
35
37
|
self.response = response
|
|
36
38
|
self._cast_to = cast_to
|
|
37
39
|
self._client = client
|
|
40
|
+
self._options = options
|
|
38
41
|
self._decoder = client._make_sse_decoder()
|
|
39
42
|
self._iterator = self.__stream__()
|
|
40
43
|
|
|
@@ -85,7 +88,7 @@ class AsyncStream(Generic[_T]):
|
|
|
85
88
|
"""Provides the core interface to iterate over an asynchronous stream response."""
|
|
86
89
|
|
|
87
90
|
response: httpx.Response
|
|
88
|
-
|
|
91
|
+
_options: Optional[FinalRequestOptions] = None
|
|
89
92
|
_decoder: SSEDecoder | SSEBytesDecoder
|
|
90
93
|
|
|
91
94
|
def __init__(
|
|
@@ -94,10 +97,12 @@ class AsyncStream(Generic[_T]):
|
|
|
94
97
|
cast_to: type[_T],
|
|
95
98
|
response: httpx.Response,
|
|
96
99
|
client: AsyncHiddenLayer,
|
|
100
|
+
options: Optional[FinalRequestOptions] = None,
|
|
97
101
|
) -> None:
|
|
98
102
|
self.response = response
|
|
99
103
|
self._cast_to = cast_to
|
|
100
104
|
self._client = client
|
|
105
|
+
self._options = options
|
|
101
106
|
self._decoder = client._make_sse_decoder()
|
|
102
107
|
self._iterator = self.__stream__()
|
|
103
108
|
|
|
@@ -253,23 +253,14 @@ class RedTeamSessionsResource(SyncAPIResource):
|
|
|
253
253
|
) -> RedTeamSession:
|
|
254
254
|
"""Start a new red team session.
|
|
255
255
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
- Provide objective_ids (required)
|
|
260
|
-
- Do not set sessions_per_technique
|
|
261
|
-
- Each session tests one objective and short-circuits on success
|
|
262
|
-
|
|
263
|
-
V2 Mode (objective-agnostic adaptive):
|
|
264
|
-
- Set sessions_per_technique (e.g., 3)
|
|
265
|
-
- objective_ids optional (defaults to all available)
|
|
266
|
-
- Each session tests all objectives, runs to max_turns
|
|
267
|
-
- Adaptive attacker with cross-session state
|
|
256
|
+
Uses adaptive multi-objective evaluation: each session runs to
|
|
257
|
+
max_turns (no short-circuit), tests all provided objectives, and
|
|
258
|
+
maintains cross-session state for adaptive attacks.
|
|
268
259
|
|
|
269
260
|
Args:
|
|
270
261
|
name: Session name
|
|
271
|
-
objective_ids: List of objective IDs to test (e.g., ["HLO.03"])
|
|
272
|
-
|
|
262
|
+
objective_ids: List of objective IDs to test (e.g., ["HLO.03"]).
|
|
263
|
+
Optional; defaults to all available objectives.
|
|
273
264
|
target_model: Model identifier for the target being tested
|
|
274
265
|
target_system_prompt: System prompt for the target model
|
|
275
266
|
refusal_judge_model: Model to use for refusal judging
|
|
@@ -288,13 +279,13 @@ class RedTeamSessionsResource(SyncAPIResource):
|
|
|
288
279
|
hiddenlayer_project_id: Optional HiddenLayer project ID
|
|
289
280
|
poll_interval: How often to poll for actions (seconds, default: 2.0s)
|
|
290
281
|
poll_max_wait: Maximum time to wait for actions (seconds)
|
|
291
|
-
sessions_per_technique: Number of sessions to run per technique
|
|
282
|
+
sessions_per_technique: Number of sessions to run per technique
|
|
292
283
|
|
|
293
284
|
Returns:
|
|
294
|
-
|
|
285
|
+
RedTeamSession instance
|
|
295
286
|
|
|
296
287
|
Raises:
|
|
297
|
-
ValueError: If
|
|
288
|
+
ValueError: If execution_strategy_type is invalid
|
|
298
289
|
"""
|
|
299
290
|
# Use defaults if not provided
|
|
300
291
|
refusal_judge_model = refusal_judge_model or self._default_refusal_judge_model
|
|
@@ -302,7 +293,7 @@ class RedTeamSessionsResource(SyncAPIResource):
|
|
|
302
293
|
attacker_model = attacker_model or self._default_attacker_model
|
|
303
294
|
evaluation_report_model = evaluation_report_model or self._default_evaluation_report_model
|
|
304
295
|
|
|
305
|
-
#
|
|
296
|
+
# Default to all available objectives if not specified
|
|
306
297
|
if objective_ids is None:
|
|
307
298
|
objective_ids = self._available_objective_ids.copy()
|
|
308
299
|
|
|
@@ -791,23 +782,14 @@ class AsyncRedTeamSessionsResource(AsyncAPIResource):
|
|
|
791
782
|
) -> AsyncRedTeamSession:
|
|
792
783
|
"""Start a new red team session.
|
|
793
784
|
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
- Provide objective_ids (required)
|
|
798
|
-
- Do not set sessions_per_technique
|
|
799
|
-
- Each session tests one objective and short-circuits on success
|
|
800
|
-
|
|
801
|
-
V2 Mode (objective-agnostic adaptive):
|
|
802
|
-
- Set sessions_per_technique (e.g., 3)
|
|
803
|
-
- objective_ids optional (defaults to all available)
|
|
804
|
-
- Each session tests all objectives, runs to max_turns
|
|
805
|
-
- Adaptive attacker with cross-session state
|
|
785
|
+
Uses adaptive multi-objective evaluation: each session runs to
|
|
786
|
+
max_turns (no short-circuit), tests all provided objectives, and
|
|
787
|
+
maintains cross-session state for adaptive attacks.
|
|
806
788
|
|
|
807
789
|
Args:
|
|
808
790
|
name: Session name
|
|
809
|
-
objective_ids: List of objective IDs to test (e.g., ["HLO.03"])
|
|
810
|
-
|
|
791
|
+
objective_ids: List of objective IDs to test (e.g., ["HLO.03"]).
|
|
792
|
+
Optional; defaults to all available objectives.
|
|
811
793
|
target_model: Model identifier for the target being tested
|
|
812
794
|
target_system_prompt: System prompt for the target model
|
|
813
795
|
refusal_judge_model: Model to use for refusal judging
|
|
@@ -826,13 +808,13 @@ class AsyncRedTeamSessionsResource(AsyncAPIResource):
|
|
|
826
808
|
hiddenlayer_project_id: Optional HiddenLayer project ID
|
|
827
809
|
poll_interval: How often to poll for actions (seconds, default: 2.0s)
|
|
828
810
|
poll_max_wait: Maximum time to wait for actions (seconds)
|
|
829
|
-
sessions_per_technique: Number of sessions to run per technique
|
|
811
|
+
sessions_per_technique: Number of sessions to run per technique
|
|
830
812
|
|
|
831
813
|
Returns:
|
|
832
814
|
AsyncRedTeamSession instance
|
|
833
815
|
|
|
834
816
|
Raises:
|
|
835
|
-
ValueError: If
|
|
817
|
+
ValueError: If execution_strategy_type is invalid
|
|
836
818
|
"""
|
|
837
819
|
# Use defaults if not provided
|
|
838
820
|
refusal_judge_model = refusal_judge_model or self._default_refusal_judge_model
|
|
@@ -840,7 +822,7 @@ class AsyncRedTeamSessionsResource(AsyncAPIResource):
|
|
|
840
822
|
attacker_model = attacker_model or self._default_attacker_model
|
|
841
823
|
evaluation_report_model = evaluation_report_model or self._default_evaluation_report_model
|
|
842
824
|
|
|
843
|
-
#
|
|
825
|
+
# Default to all available objectives if not specified
|
|
844
826
|
if objective_ids is None:
|
|
845
827
|
objective_ids = self._available_objective_ids.copy()
|
|
846
828
|
|
|
@@ -71,6 +71,7 @@ class CardsResource(SyncAPIResource):
|
|
|
71
71
|
| Omit = omit,
|
|
72
72
|
modscan_status: Literal["ENABLED", "DISABLED", "ANY"] | Omit = omit,
|
|
73
73
|
offset: int | Omit = omit,
|
|
74
|
+
policy_status: List[Literal["COMPLIANT", "NONCOMPLIANT"]] | Omit = omit,
|
|
74
75
|
provider: List[Literal["AZURE", "ADHOC"]] | Omit = omit,
|
|
75
76
|
sort: str | Omit = omit,
|
|
76
77
|
source: card_list_params.Source | Omit = omit,
|
|
@@ -128,6 +129,7 @@ class CardsResource(SyncAPIResource):
|
|
|
128
129
|
"modscan_severity": modscan_severity,
|
|
129
130
|
"modscan_status": modscan_status,
|
|
130
131
|
"offset": offset,
|
|
132
|
+
"policy_status": policy_status,
|
|
131
133
|
"provider": provider,
|
|
132
134
|
"sort": sort,
|
|
133
135
|
"source": source,
|
|
@@ -185,6 +187,7 @@ class AsyncCardsResource(AsyncAPIResource):
|
|
|
185
187
|
| Omit = omit,
|
|
186
188
|
modscan_status: Literal["ENABLED", "DISABLED", "ANY"] | Omit = omit,
|
|
187
189
|
offset: int | Omit = omit,
|
|
190
|
+
policy_status: List[Literal["COMPLIANT", "NONCOMPLIANT"]] | Omit = omit,
|
|
188
191
|
provider: List[Literal["AZURE", "ADHOC"]] | Omit = omit,
|
|
189
192
|
sort: str | Omit = omit,
|
|
190
193
|
source: card_list_params.Source | Omit = omit,
|
|
@@ -242,6 +245,7 @@ class AsyncCardsResource(AsyncAPIResource):
|
|
|
242
245
|
"modscan_severity": modscan_severity,
|
|
243
246
|
"modscan_status": modscan_status,
|
|
244
247
|
"offset": offset,
|
|
248
|
+
"policy_status": policy_status,
|
|
245
249
|
"provider": provider,
|
|
246
250
|
"sort": sort,
|
|
247
251
|
"source": source,
|
{hiddenlayer_sdk-3.3.0 → hiddenlayer_sdk-3.5.0}/src/hiddenlayer/resources/scans/upload/file.py
RENAMED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from urllib.parse import quote
|
|
6
|
-
|
|
7
5
|
import httpx
|
|
8
6
|
|
|
9
|
-
from ...._types import Body, Query, Headers, NotGiven, not_given
|
|
7
|
+
from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
|
|
8
|
+
from ...._utils import strip_not_given
|
|
10
9
|
from ...._compat import cached_property
|
|
11
10
|
from ...._resource import SyncAPIResource, AsyncAPIResource
|
|
12
11
|
from ...._response import (
|
|
@@ -47,7 +46,8 @@ class FileResource(SyncAPIResource):
|
|
|
47
46
|
scan_id: str,
|
|
48
47
|
*,
|
|
49
48
|
file_content_length: int,
|
|
50
|
-
file_name: str,
|
|
49
|
+
file_name: str | Omit = omit,
|
|
50
|
+
file_name_base64: str | Omit = omit,
|
|
51
51
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
52
52
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
53
53
|
extra_headers: Headers | None = None,
|
|
@@ -70,8 +70,13 @@ class FileResource(SyncAPIResource):
|
|
|
70
70
|
if not scan_id:
|
|
71
71
|
raise ValueError(f"Expected a non-empty value for `scan_id` but received {scan_id!r}")
|
|
72
72
|
extra_headers = {
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
**strip_not_given(
|
|
74
|
+
{
|
|
75
|
+
"file-content-length": str(file_content_length),
|
|
76
|
+
"file-name": file_name,
|
|
77
|
+
"file-name-base64": file_name_base64,
|
|
78
|
+
}
|
|
79
|
+
),
|
|
75
80
|
**(extra_headers or {}),
|
|
76
81
|
}
|
|
77
82
|
return self._post(
|
|
@@ -144,7 +149,8 @@ class AsyncFileResource(AsyncAPIResource):
|
|
|
144
149
|
scan_id: str,
|
|
145
150
|
*,
|
|
146
151
|
file_content_length: int,
|
|
147
|
-
file_name: str,
|
|
152
|
+
file_name: str | Omit = omit,
|
|
153
|
+
file_name_base64: str | Omit = omit,
|
|
148
154
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
149
155
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
150
156
|
extra_headers: Headers | None = None,
|
|
@@ -167,8 +173,13 @@ class AsyncFileResource(AsyncAPIResource):
|
|
|
167
173
|
if not scan_id:
|
|
168
174
|
raise ValueError(f"Expected a non-empty value for `scan_id` but received {scan_id!r}")
|
|
169
175
|
extra_headers = {
|
|
170
|
-
|
|
171
|
-
|
|
176
|
+
**strip_not_given(
|
|
177
|
+
{
|
|
178
|
+
"file-content-length": str(file_content_length),
|
|
179
|
+
"file-name": file_name,
|
|
180
|
+
"file-name-base64": file_name_base64,
|
|
181
|
+
}
|
|
182
|
+
),
|
|
172
183
|
**(extra_headers or {}),
|
|
173
184
|
}
|
|
174
185
|
return await self._post(
|