hiddenlayer-sdk 3.4.0__tar.gz → 3.6.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.4.0 → hiddenlayer_sdk-3.6.0}/.gitignore +1 -0
- hiddenlayer_sdk-3.6.0/.release-please-manifest.json +3 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/CHANGELOG.md +84 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/CONTRIBUTING.md +0 -7
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/PKG-INFO +9 -2
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/README.md +7 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/api.md +99 -7
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/pyproject.toml +3 -2
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/__init__.py +10 -1
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_base_client.py +4 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_client.py +21 -5
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_compat.py +9 -2
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_qs.py +4 -1
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_response.py +3 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_streaming.py +8 -3
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/__init__.py +1 -0
- hiddenlayer_sdk-3.6.0/src/hiddenlayer/_utils/_path.py +127 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_utils.py +3 -2
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_version.py +1 -1
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/lib/__init__.py +4 -0
- hiddenlayer_sdk-3.6.0/src/hiddenlayer/lib/_beta.py +45 -0
- hiddenlayer_sdk-3.6.0/src/hiddenlayer/lib/_beta_endpoints.py +11 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/lib/community_scan.py +11 -4
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/lib/model_scan.py +10 -3
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/lib/red_team_session.py +17 -35
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/lib/scan_utils.py +20 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/evaluations/red_team.py +53 -19
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/models/models.py +5 -4
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/scans/jobs.py +3 -5
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/scans/results.py +3 -2
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/scans/upload/file.py +24 -13
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/scans/upload/upload.py +3 -3
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/sensors.py +7 -7
- hiddenlayer_sdk-3.6.0/src/hiddenlayer/types/evaluations/red_team_retrieve_evaluation_results_response.py +48 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/evaluations/red_team_retrieve_status_response.py +0 -6
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/interaction_analyze_params.py +3 -6
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/models/card_list_response.py +9 -1
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/job_list_response.py +1 -1
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/job_request_params.py +1 -1
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/scan_job.py +1 -1
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/scan_report.py +5 -2
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/evaluations/test_red_team.py +48 -48
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/models/test_cards.py +8 -8
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/scans/test_jobs.py +26 -26
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/scans/test_results.py +8 -8
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/scans/test_upload.py +16 -16
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/scans/upload/test_file.py +36 -22
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/test_interactions.py +8 -8
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/test_models.py +16 -16
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/test_prompt_analyzer.py +8 -8
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/test_sensors.py +42 -42
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/conftest.py +21 -1
- hiddenlayer_sdk-3.6.0/tests/test_beta.py +62 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_client.py +64 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_extract_files.py +9 -0
- hiddenlayer_sdk-3.6.0/tests/test_utils/test_path.py +89 -0
- hiddenlayer_sdk-3.4.0/.release-please-manifest.json +0 -3
- hiddenlayer_sdk-3.4.0/src/hiddenlayer/types/evaluations/red_team_retrieve_evaluation_results_response.py +0 -20
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/CODE_OF_CONDUCT.md +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/LICENSE +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/SECURITY.md +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/bin/check-release-environment +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/bin/publish-jfrog +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/bin/publish-pypi +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/examples/.keep +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/examples/demo.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/noxfile.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/release-please-config.json +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/requirements-dev.lock +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/requirements.lock +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_constants.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_exceptions.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_files.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_models.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_oauth2.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_resource.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_types.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_compat.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_datetime_parse.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_json.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_logs.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_proxy.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_reflection.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_resources_proxy.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_streams.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_sync.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_transform.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/_utils/_typing.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/lib/.keep +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/lib/evaluation_sessions.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/lib/red_team_exceptions.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/pagination.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/py.typed +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/evaluations/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/evaluations/evaluations.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/interactions.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/models/cards.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/prompt_analyzer.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/scans/scans.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/resources/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/evaluations/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/evaluations/red_team_create_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/evaluations/red_team_create_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/evaluations/red_team_retrieve_next_action_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/evaluations/red_team_submit_target_response_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/evaluations/red_team_submit_target_response_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/interaction_analyze_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/model_retrieve_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/models/card_list_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/prompt_analyzer_create_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/prompt_analyzer_create_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/job_list_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/job_retrieve_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/result_sarif_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/upload/file_add_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/upload/file_complete_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/upload_complete_all_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/upload_start_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/scans/upload_start_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/sensor_create_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/sensor_create_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/sensor_query_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/sensor_query_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/sensor_retrieve_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/sensor_update_params.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/src/hiddenlayer/types/sensor_update_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/evaluations/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/models/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/scans/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/api_resources/scans/upload/__init__.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/sample_file.txt +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_community_scan.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_deepcopy.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_files.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_model_scan.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_models.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_qs.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_red_team_session.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_required_args.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_response.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_streaming.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_transform.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_utils/test_json.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_utils/test_proxy.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/test_utils/test_typing.py +0 -0
- {hiddenlayer_sdk-3.4.0 → hiddenlayer_sdk-3.6.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,89 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.6.0 (2026-04-14)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v3.5.0...v3.6.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.5.0...v3.6.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* add beta instability warnings for unstable SDK methods ([#186](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/issues/186)) ([e56488a](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e56488a532201b4f6cc46c5a0be68a45614b1734))
|
|
10
|
+
* **api:** add runtime security evaluations endpoints ([2433787](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/2433787d248b222da7a077b2ef1efd54f5116f7e))
|
|
11
|
+
* **api:** api update ([6b894b8](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/6b894b89ab4cef087e0fc7df4a62913c4b1b1710))
|
|
12
|
+
* **api:** api update ([dd91242](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/dd912420f1d2e8574454cdfa754f4817b7a2423e))
|
|
13
|
+
* **api:** api update ([825a274](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/825a2742d0b674b392e37c99be54c576ff9be34c))
|
|
14
|
+
* **api:** api update ([c43deaa](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/c43deaa74339cc7f3f70cb4b5e26c027fe975896))
|
|
15
|
+
* **api:** api update ([716c68c](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/716c68cef3e9ae8d15631d417335c3f387bedc72))
|
|
16
|
+
* **api:** api update ([98a52fa](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/98a52fad11b3e42b9b576738601743f59ad8752d))
|
|
17
|
+
* **api:** finalize runtime security endpoints ([e83726c](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e83726c4a62ede87be9222e1f3acbbd0c27e1f99))
|
|
18
|
+
* **internal:** implement indices array format for query and form serialization ([05135c2](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/05135c262a3688319bfd7508452b1c101d9901c4))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **beta:** harden CI tests against codegen churn ([#191](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/issues/191)) ([8f85aec](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/8f85aec226a6a7278aa388d30f74d7735031b9cb))
|
|
24
|
+
* **client:** preserve hardcoded query params when merging with user params ([90ad63a](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/90ad63ae4aea92158416a5e1101a3d0496a20646))
|
|
25
|
+
* correct async method indentation in beta warning patcher ([2af3e63](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/2af3e6358565aaca1a3b3069868f2af090db7f92))
|
|
26
|
+
* **deps:** bump minimum typing-extensions version ([53b0b0e](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/53b0b0edfaf7a7dea0b097333fac0ecdc9a16bcb))
|
|
27
|
+
* ensure file data are only sent as 1 parameter ([1ea7561](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/1ea756124f32f0f49ba9d73bcdc2c4d63931c649))
|
|
28
|
+
* **pydantic:** do not pass `by_alias` unless set ([86f9db3](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/86f9db32c94ff8358bf294f14a54a460d1d7444b))
|
|
29
|
+
* sanitize endpoint path params ([ea53526](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/ea5352653b0708eaa5f495a598cdf19935d26fac))
|
|
30
|
+
* **tests:** correct setup of OAuth 2 Client Credentials tests ([b3887a1](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/b3887a1e39f05e01d5e16c768ef96ac6ca6e98ed))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Chores
|
|
34
|
+
|
|
35
|
+
* **ci:** skip lint on metadata-only changes ([803a48b](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/803a48bed50ae657bfe8efdbfce86969d57ac96d))
|
|
36
|
+
* **ci:** skip uploading artifacts on stainless-internal branches ([e901a9f](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e901a9f5a6af3b5650d0002b9dd18b7ba954c38d))
|
|
37
|
+
* **deps:** bump actions/setup-node from 4 to 6 ([5abc090](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/5abc090fa35bc1efd1422cd8455aa369fed72fc4))
|
|
38
|
+
* **deps:** bump github/codeql-action from 4.32.6 to 4.35.1 ([6715471](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/67154712c4497ee3d90fea9aa9632d2ad6fa763d))
|
|
39
|
+
* **deps:** bump step-security/harden-runner from 2.15.1 to 2.16.1 ([58738e5](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/58738e54c1dd7cfe4b710e0cc75a246598c6b9f7))
|
|
40
|
+
* **internal:** codegen related update ([e2b17fd](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e2b17fd099188441b0d296a1a745a930f9953665))
|
|
41
|
+
* **internal:** tweak CI branches ([535faac](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/535faacf763992576b28266f92e226be1f07fb09))
|
|
42
|
+
* **internal:** update gitignore ([bf2dcbe](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/bf2dcbe99c112ab5869ecff719ae66c93cacfc15))
|
|
43
|
+
* patch beta warnings [skip ci] ([ff2ae92](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/ff2ae92be61ae0838e24d28632e38aa024ad28cb))
|
|
44
|
+
* regenerate beta endpoint registry [skip ci] ([5aded1f](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/5aded1f3c1b0aa3bc4ae76137faf6987a71c0db2))
|
|
45
|
+
* regenerate beta endpoint registry [skip ci] ([126b13e](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/126b13ea66294a7c1a2d31e8edfcd336552b245e))
|
|
46
|
+
* regenerate beta endpoint registry [skip ci] ([24d568e](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/24d568e9fc74b6a0c044ea9a74120e4504fe1b16))
|
|
47
|
+
* remove stale version comments from SHA-pinned actions ([#184](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/issues/184)) ([cf07e32](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/cf07e322e7b4674fe3ef622e491278b0346e5e7e))
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
### Documentation
|
|
51
|
+
|
|
52
|
+
* **readme:** add Beta APIs section ([#185](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/issues/185)) ([b1381e3](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/b1381e389f6e7ee59ba51ff00ce84b4a43f97c35))
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### Refactors
|
|
56
|
+
|
|
57
|
+
* **client:** move beta warnings to _prepare_options interceptor ([#190](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/issues/190)) ([893ee22](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/893ee22fdda949ebab80d66d70b99accb79aded2))
|
|
58
|
+
* **types:** use `extra_items` from PEP 728 ([e5ee89f](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/e5ee89fccbefe680538b8b3b06871dfba90d1474))
|
|
59
|
+
|
|
60
|
+
## 3.5.0 (2026-03-03)
|
|
61
|
+
|
|
62
|
+
Full Changelog: [v3.4.0...v3.5.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.4.0...v3.5.0)
|
|
63
|
+
|
|
64
|
+
### Features
|
|
65
|
+
|
|
66
|
+
* **api:** api update ([9eea54c](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/9eea54c2eb2727e95426a560d3df0835f7b7111c))
|
|
67
|
+
* **api:** api update ([f141896](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/f141896accb0dd56c58ee9d1cc4f81efd30d25d0))
|
|
68
|
+
* **api:** api update ([92f2618](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/92f26183853e9a3e540c10647520955e9d5908f0))
|
|
69
|
+
* **api:** api update ([16f2a69](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/16f2a6965558821b0a15448aa53b0feb49098b0c))
|
|
70
|
+
* **api:** api update ([b98638e](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/b98638ef2650e5f5562fc04d7a441005a10d4486))
|
|
71
|
+
* **api:** api update ([f08f968](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/f08f968be5fe2be22924a77d7ccf61c65e6f1ccb))
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
### Chores
|
|
75
|
+
|
|
76
|
+
* **internal:** add request options to SSE classes ([33b7597](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/33b7597bc7a36847f70dc26ebc2dfcccd6a3d15c))
|
|
77
|
+
* **internal:** make `test_proxy_environment_variables` more resilient ([5d82965](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/5d82965da2550879002ffacc2b116ae9e241de3f))
|
|
78
|
+
* **internal:** make `test_proxy_environment_variables` more resilient to env ([31ee619](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/31ee61956ce172605b9fe9a386b4123fca590b78))
|
|
79
|
+
* **internal:** remove mock server code ([9579dbc](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/9579dbc6e8d484a84b628c2513b8d5cc12bfc19b))
|
|
80
|
+
* update mock server docs ([5af4adc](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/commit/5af4adc0dba02208929639010a9513da98d45339))
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
### Documentation
|
|
84
|
+
|
|
85
|
+
* 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))
|
|
86
|
+
|
|
3
87
|
## 3.4.0 (2026-02-14)
|
|
4
88
|
|
|
5
89
|
Full Changelog: [v3.3.0...v3.4.0](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/compare/v3.3.0...v3.4.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.6.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
|
|
@@ -30,7 +30,7 @@ Requires-Dist: requests-auth>=8.0.0
|
|
|
30
30
|
Requires-Dist: requests>=2.32.4
|
|
31
31
|
Requires-Dist: sniffio
|
|
32
32
|
Requires-Dist: types-requests>=2.32.0.20241016
|
|
33
|
-
Requires-Dist: typing-extensions<5,>=4.
|
|
33
|
+
Requires-Dist: typing-extensions<5,>=4.14
|
|
34
34
|
Provides-Extra: aiohttp
|
|
35
35
|
Requires-Dist: aiohttp; extra == 'aiohttp'
|
|
36
36
|
Requires-Dist: httpx-aiohttp>=0.1.9; extra == 'aiohttp'
|
|
@@ -51,6 +51,13 @@ It is generated with [Stainless](https://www.stainless.com/).
|
|
|
51
51
|
|
|
52
52
|
The REST API documentation can be found on [dev.hiddenlayer.ai](https://dev.hiddenlayer.ai). The full API of this library can be found in [api.md](https://github.com/hiddenlayerai/hiddenlayer-sdk-python/tree/main/api.md).
|
|
53
53
|
|
|
54
|
+
## Beta APIs
|
|
55
|
+
|
|
56
|
+
Some HiddenLayer APIs are marked as **Beta**, meaning they are not yet generally available (GA) or production ready. Beta APIs can be used in a production environment, but at your own risk and discretion. For full details, see the [Beta API Guidelines](https://dev.hiddenlayer.ai/docs/beta-api-faq) on the developer portal.
|
|
57
|
+
|
|
58
|
+
- HiddenLayer does not provide compatibility guarantees for Beta APIs. Breaking changes may occur at any time.
|
|
59
|
+
- SDK functions and types associated with Beta APIs are excluded when determining semver release versions.
|
|
60
|
+
|
|
54
61
|
## Installation
|
|
55
62
|
|
|
56
63
|
```sh
|
|
@@ -13,6 +13,13 @@ It is generated with [Stainless](https://www.stainless.com/).
|
|
|
13
13
|
|
|
14
14
|
The REST API documentation can be found on [dev.hiddenlayer.ai](https://dev.hiddenlayer.ai). The full API of this library can be found in [api.md](api.md).
|
|
15
15
|
|
|
16
|
+
## Beta APIs
|
|
17
|
+
|
|
18
|
+
Some HiddenLayer APIs are marked as **Beta**, meaning they are not yet generally available (GA) or production ready. Beta APIs can be used in a production environment, but at your own risk and discretion. For full details, see the [Beta API Guidelines](https://dev.hiddenlayer.ai/docs/beta-api-faq) on the developer portal.
|
|
19
|
+
|
|
20
|
+
- HiddenLayer does not provide compatibility guarantees for Beta APIs. Breaking changes may occur at any time.
|
|
21
|
+
- SDK functions and types associated with Beta APIs are excluded when determining semver release versions.
|
|
22
|
+
|
|
16
23
|
## Installation
|
|
17
24
|
|
|
18
25
|
```sh
|
|
@@ -43,19 +43,19 @@ from hiddenlayer.types.evaluations import (
|
|
|
43
43
|
|
|
44
44
|
Methods:
|
|
45
45
|
|
|
46
|
-
- <code title="post /evaluations/v1
|
|
47
|
-
- <code title="get /evaluations/v1
|
|
48
|
-
- <code title="get /evaluations/v1
|
|
49
|
-
- <code title="get /evaluations/v1
|
|
50
|
-
- <code title="post /evaluations/v1
|
|
51
|
-
- <code title="post /evaluations/v1
|
|
46
|
+
- <code title="post /evaluations/v1/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/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/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/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/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/jobs/{workflow_id}/termination">client.evaluations.red_team.<a href="./src/hiddenlayer/resources/evaluations/red_team.py">terminate</a>(workflow_id) -> None</code>
|
|
52
52
|
|
|
53
53
|
# PromptAnalyzer
|
|
54
54
|
|
|
55
55
|
Types:
|
|
56
56
|
|
|
57
57
|
```python
|
|
58
|
-
from hiddenlayer.types import PromptAnalyzerCreateResponse
|
|
58
|
+
from hiddenlayer.types import PromptAnalyzerCreateResponse
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
Methods:
|
|
@@ -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.6.0"
|
|
4
4
|
description = "The official Python library for the hiddenlayer API"
|
|
5
5
|
dynamic = ["readme"]
|
|
6
6
|
license = {text = "Apache-2.0"}
|
|
@@ -11,7 +11,7 @@ authors = [
|
|
|
11
11
|
dependencies = [
|
|
12
12
|
"httpx>=0.23.0, <1",
|
|
13
13
|
"pydantic>=1.9.0, <3",
|
|
14
|
-
"typing-extensions>=4.
|
|
14
|
+
"typing-extensions>=4.14, <5",
|
|
15
15
|
"anyio>=3.5.0, <5",
|
|
16
16
|
"distro>=1.7.0, <2",
|
|
17
17
|
"sniffio",
|
|
@@ -140,6 +140,7 @@ xfail_strict = true
|
|
|
140
140
|
asyncio_mode = "auto"
|
|
141
141
|
asyncio_default_fixture_loop_scope = "session"
|
|
142
142
|
filterwarnings = [
|
|
143
|
+
"default::hiddenlayer.lib._beta.BetaWarning",
|
|
143
144
|
"error"
|
|
144
145
|
]
|
|
145
146
|
|
|
@@ -3,7 +3,14 @@
|
|
|
3
3
|
import typing as _t
|
|
4
4
|
|
|
5
5
|
from . import types
|
|
6
|
-
from .lib import
|
|
6
|
+
from .lib import (
|
|
7
|
+
BetaWarning,
|
|
8
|
+
ModelScanner,
|
|
9
|
+
CommunityScanner,
|
|
10
|
+
AsyncModelScanner,
|
|
11
|
+
AsyncCommunityScanner,
|
|
12
|
+
warn_beta,
|
|
13
|
+
)
|
|
7
14
|
from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes, omit, not_given
|
|
8
15
|
from ._utils import file_from_path
|
|
9
16
|
from ._client import (
|
|
@@ -46,6 +53,8 @@ __all__ = [
|
|
|
46
53
|
"__version__",
|
|
47
54
|
"__title__",
|
|
48
55
|
"NoneType",
|
|
56
|
+
"BetaWarning",
|
|
57
|
+
"warn_beta",
|
|
49
58
|
"CommunityScanner",
|
|
50
59
|
"AsyncCommunityScanner",
|
|
51
60
|
"ModelScanner",
|
|
@@ -540,6 +540,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
540
540
|
files = cast(HttpxRequestFiles, ForceMultipartDict())
|
|
541
541
|
|
|
542
542
|
prepared_url = self._prepare_url(options.url)
|
|
543
|
+
# preserve hard-coded query params from the url
|
|
544
|
+
if params and prepared_url.query:
|
|
545
|
+
params = {**dict(prepared_url.params.items()), **params}
|
|
546
|
+
prepared_url = prepared_url.copy_with(raw_path=prepared_url.raw_path.split(b"?", 1)[0])
|
|
543
547
|
if "_" in prepared_url.host:
|
|
544
548
|
# work around https://github.com/encode/httpx/discussions/2880
|
|
545
549
|
kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
|
|
@@ -21,6 +21,7 @@ from ._types import (
|
|
|
21
21
|
)
|
|
22
22
|
from ._utils import is_given, get_async_library
|
|
23
23
|
from ._compat import cached_property
|
|
24
|
+
from ._models import FinalRequestOptions
|
|
24
25
|
from ._oauth2 import OAuth2ClientCredentials, make_oauth2
|
|
25
26
|
from ._version import __version__
|
|
26
27
|
from ._streaming import Stream as Stream, AsyncStream as AsyncStream
|
|
@@ -33,16 +34,18 @@ from ._base_client import (
|
|
|
33
34
|
|
|
34
35
|
if TYPE_CHECKING:
|
|
35
36
|
from .resources import scans, models, sensors, evaluations, interactions, prompt_analyzer
|
|
36
|
-
from .lib.model_scan import ModelScanner, AsyncModelScanner
|
|
37
37
|
from .resources.sensors import SensorsResource, AsyncSensorsResource
|
|
38
|
-
from .lib.community_scan import CommunityScanner, AsyncCommunityScanner
|
|
39
38
|
from .resources.scans.scans import ScansResource, AsyncScansResource
|
|
40
39
|
from .resources.interactions import InteractionsResource, AsyncInteractionsResource
|
|
41
|
-
from .lib.evaluation_sessions import EvaluationSessionsResource, AsyncEvaluationSessionsResource
|
|
42
40
|
from .resources.models.models import ModelsResource, AsyncModelsResource
|
|
43
41
|
from .resources.prompt_analyzer import PromptAnalyzerResource, AsyncPromptAnalyzerResource
|
|
44
42
|
from .resources.evaluations.evaluations import EvaluationsResource, AsyncEvaluationsResource
|
|
45
43
|
|
|
44
|
+
if TYPE_CHECKING:
|
|
45
|
+
from .lib.model_scan import ModelScanner, AsyncModelScanner
|
|
46
|
+
from .lib.community_scan import CommunityScanner, AsyncCommunityScanner
|
|
47
|
+
from .lib.evaluation_sessions import EvaluationSessionsResource, AsyncEvaluationSessionsResource
|
|
48
|
+
|
|
46
49
|
__all__ = [
|
|
47
50
|
"ENVIRONMENTS",
|
|
48
51
|
"Timeout",
|
|
@@ -233,7 +236,7 @@ class HiddenLayer(SyncAPIClient):
|
|
|
233
236
|
return make_oauth2(
|
|
234
237
|
client_id=self.client_id,
|
|
235
238
|
client_secret=self.client_secret,
|
|
236
|
-
token_url=self._prepare_url("/oauth2/token
|
|
239
|
+
token_url=self._prepare_url("/oauth2/token"),
|
|
237
240
|
header="Authorization",
|
|
238
241
|
)
|
|
239
242
|
return None
|
|
@@ -256,6 +259,12 @@ class HiddenLayer(SyncAPIClient):
|
|
|
256
259
|
return True
|
|
257
260
|
return super()._should_retry(response)
|
|
258
261
|
|
|
262
|
+
@override
|
|
263
|
+
def _prepare_options(self, options: FinalRequestOptions) -> FinalRequestOptions:
|
|
264
|
+
from .lib._beta import check_beta_endpoint
|
|
265
|
+
|
|
266
|
+
check_beta_endpoint(options.url)
|
|
267
|
+
return options
|
|
259
268
|
|
|
260
269
|
def copy(
|
|
261
270
|
self,
|
|
@@ -520,7 +529,7 @@ class AsyncHiddenLayer(AsyncAPIClient):
|
|
|
520
529
|
return make_oauth2(
|
|
521
530
|
client_id=self.client_id,
|
|
522
531
|
client_secret=self.client_secret,
|
|
523
|
-
token_url=self._prepare_url("/oauth2/token
|
|
532
|
+
token_url=self._prepare_url("/oauth2/token"),
|
|
524
533
|
header="Authorization",
|
|
525
534
|
)
|
|
526
535
|
return None
|
|
@@ -543,6 +552,13 @@ class AsyncHiddenLayer(AsyncAPIClient):
|
|
|
543
552
|
return True
|
|
544
553
|
return super()._should_retry(response)
|
|
545
554
|
|
|
555
|
+
@override
|
|
556
|
+
async def _prepare_options(self, options: FinalRequestOptions) -> FinalRequestOptions:
|
|
557
|
+
from .lib._beta import check_beta_endpoint
|
|
558
|
+
|
|
559
|
+
check_beta_endpoint(options.url)
|
|
560
|
+
return options
|
|
561
|
+
|
|
546
562
|
def copy(
|
|
547
563
|
self,
|
|
548
564
|
*,
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any, Union, Generic, TypeVar, Callable, cast, overload
|
|
4
4
|
from datetime import date, datetime
|
|
5
|
-
from typing_extensions import Self, Literal
|
|
5
|
+
from typing_extensions import Self, Literal, TypedDict
|
|
6
6
|
|
|
7
7
|
import pydantic
|
|
8
8
|
from pydantic.fields import FieldInfo
|
|
@@ -131,6 +131,10 @@ def model_json(model: pydantic.BaseModel, *, indent: int | None = None) -> str:
|
|
|
131
131
|
return model.model_dump_json(indent=indent)
|
|
132
132
|
|
|
133
133
|
|
|
134
|
+
class _ModelDumpKwargs(TypedDict, total=False):
|
|
135
|
+
by_alias: bool
|
|
136
|
+
|
|
137
|
+
|
|
134
138
|
def model_dump(
|
|
135
139
|
model: pydantic.BaseModel,
|
|
136
140
|
*,
|
|
@@ -142,6 +146,9 @@ def model_dump(
|
|
|
142
146
|
by_alias: bool | None = None,
|
|
143
147
|
) -> dict[str, Any]:
|
|
144
148
|
if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
|
|
149
|
+
kwargs: _ModelDumpKwargs = {}
|
|
150
|
+
if by_alias is not None:
|
|
151
|
+
kwargs["by_alias"] = by_alias
|
|
145
152
|
return model.model_dump(
|
|
146
153
|
mode=mode,
|
|
147
154
|
exclude=exclude,
|
|
@@ -149,7 +156,7 @@ def model_dump(
|
|
|
149
156
|
exclude_defaults=exclude_defaults,
|
|
150
157
|
# warnings are not supported in Pydantic v1
|
|
151
158
|
warnings=True if PYDANTIC_V1 else warnings,
|
|
152
|
-
|
|
159
|
+
**kwargs,
|
|
153
160
|
)
|
|
154
161
|
return cast(
|
|
155
162
|
"dict[str, Any]",
|
|
@@ -101,7 +101,10 @@ class Querystring:
|
|
|
101
101
|
items.extend(self._stringify_item(key, item, opts))
|
|
102
102
|
return items
|
|
103
103
|
elif array_format == "indices":
|
|
104
|
-
|
|
104
|
+
items = []
|
|
105
|
+
for i, item in enumerate(value):
|
|
106
|
+
items.extend(self._stringify_item(f"{key}[{i}]", item, opts))
|
|
107
|
+
return items
|
|
105
108
|
elif array_format == "brackets":
|
|
106
109
|
items = []
|
|
107
110
|
key = key + "[]"
|
|
@@ -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
|
|