hackagent 0.3.1__py3-none-any.whl

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 (183) hide show
  1. hackagent/__init__.py +12 -0
  2. hackagent/agent.py +214 -0
  3. hackagent/api/__init__.py +1 -0
  4. hackagent/api/agent/__init__.py +1 -0
  5. hackagent/api/agent/agent_create.py +347 -0
  6. hackagent/api/agent/agent_destroy.py +140 -0
  7. hackagent/api/agent/agent_list.py +242 -0
  8. hackagent/api/agent/agent_partial_update.py +361 -0
  9. hackagent/api/agent/agent_retrieve.py +235 -0
  10. hackagent/api/agent/agent_update.py +361 -0
  11. hackagent/api/apilogs/__init__.py +1 -0
  12. hackagent/api/apilogs/apilogs_list.py +170 -0
  13. hackagent/api/apilogs/apilogs_retrieve.py +162 -0
  14. hackagent/api/attack/__init__.py +1 -0
  15. hackagent/api/attack/attack_create.py +275 -0
  16. hackagent/api/attack/attack_destroy.py +146 -0
  17. hackagent/api/attack/attack_list.py +254 -0
  18. hackagent/api/attack/attack_partial_update.py +289 -0
  19. hackagent/api/attack/attack_retrieve.py +247 -0
  20. hackagent/api/attack/attack_update.py +289 -0
  21. hackagent/api/checkout/__init__.py +1 -0
  22. hackagent/api/checkout/checkout_create.py +225 -0
  23. hackagent/api/generate/__init__.py +1 -0
  24. hackagent/api/generate/generate_create.py +253 -0
  25. hackagent/api/judge/__init__.py +1 -0
  26. hackagent/api/judge/judge_create.py +253 -0
  27. hackagent/api/key/__init__.py +1 -0
  28. hackagent/api/key/key_create.py +179 -0
  29. hackagent/api/key/key_destroy.py +103 -0
  30. hackagent/api/key/key_list.py +170 -0
  31. hackagent/api/key/key_retrieve.py +162 -0
  32. hackagent/api/organization/__init__.py +1 -0
  33. hackagent/api/organization/organization_create.py +208 -0
  34. hackagent/api/organization/organization_destroy.py +104 -0
  35. hackagent/api/organization/organization_list.py +170 -0
  36. hackagent/api/organization/organization_me_retrieve.py +126 -0
  37. hackagent/api/organization/organization_partial_update.py +222 -0
  38. hackagent/api/organization/organization_retrieve.py +163 -0
  39. hackagent/api/organization/organization_update.py +222 -0
  40. hackagent/api/prompt/__init__.py +1 -0
  41. hackagent/api/prompt/prompt_create.py +171 -0
  42. hackagent/api/prompt/prompt_destroy.py +104 -0
  43. hackagent/api/prompt/prompt_list.py +185 -0
  44. hackagent/api/prompt/prompt_partial_update.py +185 -0
  45. hackagent/api/prompt/prompt_retrieve.py +163 -0
  46. hackagent/api/prompt/prompt_update.py +185 -0
  47. hackagent/api/result/__init__.py +1 -0
  48. hackagent/api/result/result_create.py +175 -0
  49. hackagent/api/result/result_destroy.py +106 -0
  50. hackagent/api/result/result_list.py +249 -0
  51. hackagent/api/result/result_partial_update.py +193 -0
  52. hackagent/api/result/result_retrieve.py +167 -0
  53. hackagent/api/result/result_trace_create.py +177 -0
  54. hackagent/api/result/result_update.py +189 -0
  55. hackagent/api/run/__init__.py +1 -0
  56. hackagent/api/run/run_create.py +187 -0
  57. hackagent/api/run/run_destroy.py +112 -0
  58. hackagent/api/run/run_list.py +291 -0
  59. hackagent/api/run/run_partial_update.py +201 -0
  60. hackagent/api/run/run_result_create.py +177 -0
  61. hackagent/api/run/run_retrieve.py +179 -0
  62. hackagent/api/run/run_run_tests_create.py +187 -0
  63. hackagent/api/run/run_update.py +201 -0
  64. hackagent/api/user/__init__.py +1 -0
  65. hackagent/api/user/user_create.py +212 -0
  66. hackagent/api/user/user_destroy.py +106 -0
  67. hackagent/api/user/user_list.py +174 -0
  68. hackagent/api/user/user_me_retrieve.py +126 -0
  69. hackagent/api/user/user_me_update.py +196 -0
  70. hackagent/api/user/user_partial_update.py +226 -0
  71. hackagent/api/user/user_retrieve.py +167 -0
  72. hackagent/api/user/user_update.py +226 -0
  73. hackagent/attacks/AdvPrefix/__init__.py +41 -0
  74. hackagent/attacks/AdvPrefix/completions.py +416 -0
  75. hackagent/attacks/AdvPrefix/config.py +259 -0
  76. hackagent/attacks/AdvPrefix/evaluation.py +745 -0
  77. hackagent/attacks/AdvPrefix/evaluators.py +564 -0
  78. hackagent/attacks/AdvPrefix/generate.py +711 -0
  79. hackagent/attacks/AdvPrefix/utils.py +307 -0
  80. hackagent/attacks/__init__.py +35 -0
  81. hackagent/attacks/advprefix.py +507 -0
  82. hackagent/attacks/base.py +106 -0
  83. hackagent/attacks/strategies.py +906 -0
  84. hackagent/cli/__init__.py +19 -0
  85. hackagent/cli/commands/__init__.py +20 -0
  86. hackagent/cli/commands/agent.py +100 -0
  87. hackagent/cli/commands/attack.py +417 -0
  88. hackagent/cli/commands/config.py +301 -0
  89. hackagent/cli/commands/results.py +327 -0
  90. hackagent/cli/config.py +249 -0
  91. hackagent/cli/main.py +515 -0
  92. hackagent/cli/tui/__init__.py +31 -0
  93. hackagent/cli/tui/actions_logger.py +200 -0
  94. hackagent/cli/tui/app.py +288 -0
  95. hackagent/cli/tui/base.py +137 -0
  96. hackagent/cli/tui/logger.py +318 -0
  97. hackagent/cli/tui/views/__init__.py +33 -0
  98. hackagent/cli/tui/views/agents.py +488 -0
  99. hackagent/cli/tui/views/attacks.py +624 -0
  100. hackagent/cli/tui/views/config.py +244 -0
  101. hackagent/cli/tui/views/dashboard.py +307 -0
  102. hackagent/cli/tui/views/results.py +1210 -0
  103. hackagent/cli/tui/widgets/__init__.py +24 -0
  104. hackagent/cli/tui/widgets/actions.py +346 -0
  105. hackagent/cli/tui/widgets/logs.py +435 -0
  106. hackagent/cli/utils.py +276 -0
  107. hackagent/client.py +286 -0
  108. hackagent/errors.py +37 -0
  109. hackagent/logger.py +83 -0
  110. hackagent/models/__init__.py +109 -0
  111. hackagent/models/agent.py +223 -0
  112. hackagent/models/agent_request.py +129 -0
  113. hackagent/models/api_token_log.py +184 -0
  114. hackagent/models/attack.py +154 -0
  115. hackagent/models/attack_request.py +82 -0
  116. hackagent/models/checkout_session_request_request.py +76 -0
  117. hackagent/models/checkout_session_response.py +59 -0
  118. hackagent/models/choice.py +81 -0
  119. hackagent/models/choice_message.py +67 -0
  120. hackagent/models/evaluation_status_enum.py +14 -0
  121. hackagent/models/generate_error_response.py +59 -0
  122. hackagent/models/generate_request_request.py +212 -0
  123. hackagent/models/generate_success_response.py +115 -0
  124. hackagent/models/generic_error_response.py +70 -0
  125. hackagent/models/message_request.py +67 -0
  126. hackagent/models/organization.py +102 -0
  127. hackagent/models/organization_minimal.py +68 -0
  128. hackagent/models/organization_request.py +71 -0
  129. hackagent/models/paginated_agent_list.py +123 -0
  130. hackagent/models/paginated_api_token_log_list.py +123 -0
  131. hackagent/models/paginated_attack_list.py +123 -0
  132. hackagent/models/paginated_organization_list.py +123 -0
  133. hackagent/models/paginated_prompt_list.py +123 -0
  134. hackagent/models/paginated_result_list.py +123 -0
  135. hackagent/models/paginated_run_list.py +123 -0
  136. hackagent/models/paginated_user_api_key_list.py +123 -0
  137. hackagent/models/paginated_user_profile_list.py +123 -0
  138. hackagent/models/patched_agent_request.py +128 -0
  139. hackagent/models/patched_attack_request.py +92 -0
  140. hackagent/models/patched_organization_request.py +71 -0
  141. hackagent/models/patched_prompt_request.py +125 -0
  142. hackagent/models/patched_result_request.py +237 -0
  143. hackagent/models/patched_run_request.py +138 -0
  144. hackagent/models/patched_user_profile_request.py +99 -0
  145. hackagent/models/prompt.py +220 -0
  146. hackagent/models/prompt_request.py +126 -0
  147. hackagent/models/result.py +294 -0
  148. hackagent/models/result_list_evaluation_status.py +14 -0
  149. hackagent/models/result_request.py +232 -0
  150. hackagent/models/run.py +233 -0
  151. hackagent/models/run_list_status.py +12 -0
  152. hackagent/models/run_request.py +133 -0
  153. hackagent/models/status_enum.py +12 -0
  154. hackagent/models/step_type_enum.py +14 -0
  155. hackagent/models/trace.py +121 -0
  156. hackagent/models/trace_request.py +94 -0
  157. hackagent/models/usage.py +75 -0
  158. hackagent/models/user_api_key.py +201 -0
  159. hackagent/models/user_api_key_request.py +73 -0
  160. hackagent/models/user_profile.py +135 -0
  161. hackagent/models/user_profile_minimal.py +76 -0
  162. hackagent/models/user_profile_request.py +99 -0
  163. hackagent/router/__init__.py +25 -0
  164. hackagent/router/adapters/__init__.py +20 -0
  165. hackagent/router/adapters/base.py +63 -0
  166. hackagent/router/adapters/google_adk.py +671 -0
  167. hackagent/router/adapters/litellm_adapter.py +524 -0
  168. hackagent/router/adapters/openai_adapter.py +426 -0
  169. hackagent/router/router.py +969 -0
  170. hackagent/router/types.py +54 -0
  171. hackagent/tracking/__init__.py +42 -0
  172. hackagent/tracking/context.py +163 -0
  173. hackagent/tracking/decorators.py +299 -0
  174. hackagent/tracking/tracker.py +441 -0
  175. hackagent/types.py +54 -0
  176. hackagent/utils.py +194 -0
  177. hackagent/vulnerabilities/__init__.py +13 -0
  178. hackagent/vulnerabilities/prompts.py +81 -0
  179. hackagent-0.3.1.dist-info/METADATA +122 -0
  180. hackagent-0.3.1.dist-info/RECORD +183 -0
  181. hackagent-0.3.1.dist-info/WHEEL +4 -0
  182. hackagent-0.3.1.dist-info/entry_points.txt +2 -0
  183. hackagent-0.3.1.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,253 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, Optional, Union
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.generate_error_response import GenerateErrorResponse
9
+ from ...models.generate_request_request import GenerateRequestRequest
10
+ from ...models.generate_success_response import GenerateSuccessResponse
11
+ from ...types import Response
12
+
13
+
14
+ def _get_kwargs(
15
+ *,
16
+ body: Union[
17
+ GenerateRequestRequest,
18
+ GenerateRequestRequest,
19
+ GenerateRequestRequest,
20
+ ],
21
+ ) -> dict[str, Any]:
22
+ headers: dict[str, Any] = {}
23
+
24
+ _kwargs: dict[str, Any] = {
25
+ "method": "post",
26
+ "url": "/generate",
27
+ }
28
+
29
+ if isinstance(body, GenerateRequestRequest):
30
+ _kwargs["json"] = body.to_dict()
31
+
32
+ headers["Content-Type"] = "application/json"
33
+ if isinstance(body, GenerateRequestRequest):
34
+ _kwargs["data"] = body.to_dict()
35
+
36
+ headers["Content-Type"] = "application/x-www-form-urlencoded"
37
+ if isinstance(body, GenerateRequestRequest):
38
+ _kwargs["files"] = body.to_multipart()
39
+
40
+ headers["Content-Type"] = "multipart/form-data"
41
+
42
+ _kwargs["headers"] = headers
43
+ return _kwargs
44
+
45
+
46
+ def _parse_response(
47
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
48
+ ) -> Optional[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
49
+ if response.status_code == 200:
50
+ response_200 = GenerateSuccessResponse.from_dict(response.json())
51
+
52
+ return response_200
53
+ if response.status_code == 400:
54
+ response_400 = GenerateErrorResponse.from_dict(response.json())
55
+
56
+ return response_400
57
+ if response.status_code == 402:
58
+ response_402 = GenerateErrorResponse.from_dict(response.json())
59
+
60
+ return response_402
61
+ if response.status_code == 403:
62
+ response_403 = GenerateErrorResponse.from_dict(response.json())
63
+
64
+ return response_403
65
+ if response.status_code == 500:
66
+ response_500 = GenerateErrorResponse.from_dict(response.json())
67
+
68
+ return response_500
69
+ if response.status_code == 502:
70
+ response_502 = GenerateErrorResponse.from_dict(response.json())
71
+
72
+ return response_502
73
+ if response.status_code == 504:
74
+ response_504 = GenerateErrorResponse.from_dict(response.json())
75
+
76
+ return response_504
77
+ if client.raise_on_unexpected_status:
78
+ raise errors.UnexpectedStatus(response.status_code, response.content)
79
+ else:
80
+ return None
81
+
82
+
83
+ def _build_response(
84
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
85
+ ) -> Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
86
+ return Response(
87
+ status_code=HTTPStatus(response.status_code),
88
+ content=response.content,
89
+ headers=response.headers,
90
+ parsed=_parse_response(client=client, response=response),
91
+ )
92
+
93
+
94
+ def sync_detailed(
95
+ *,
96
+ client: AuthenticatedClient,
97
+ body: Union[
98
+ GenerateRequestRequest,
99
+ GenerateRequestRequest,
100
+ GenerateRequestRequest,
101
+ ],
102
+ ) -> Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
103
+ """Generate text using AI Provider
104
+
105
+ Handles POST requests to generate text via a configured AI provider.
106
+ The request body should match the AI provider's chat completions (or similar) format,
107
+ though the 'model' field will be overridden by the server-configured generator model ID.
108
+ Billing and logging are handled internally.
109
+
110
+ SDK-primary endpoint - API Key authentication is recommended for programmatic access.
111
+ This is a core SDK operation for AI model generation in security tests.
112
+
113
+ Args:
114
+ body (GenerateRequestRequest):
115
+ body (GenerateRequestRequest):
116
+ body (GenerateRequestRequest):
117
+
118
+ Raises:
119
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
120
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
121
+
122
+ Returns:
123
+ Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]
124
+ """
125
+
126
+ kwargs = _get_kwargs(
127
+ body=body,
128
+ )
129
+
130
+ response = client.get_httpx_client().request(
131
+ **kwargs,
132
+ )
133
+
134
+ return _build_response(client=client, response=response)
135
+
136
+
137
+ def sync(
138
+ *,
139
+ client: AuthenticatedClient,
140
+ body: Union[
141
+ GenerateRequestRequest,
142
+ GenerateRequestRequest,
143
+ GenerateRequestRequest,
144
+ ],
145
+ ) -> Optional[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
146
+ """Generate text using AI Provider
147
+
148
+ Handles POST requests to generate text via a configured AI provider.
149
+ The request body should match the AI provider's chat completions (or similar) format,
150
+ though the 'model' field will be overridden by the server-configured generator model ID.
151
+ Billing and logging are handled internally.
152
+
153
+ SDK-primary endpoint - API Key authentication is recommended for programmatic access.
154
+ This is a core SDK operation for AI model generation in security tests.
155
+
156
+ Args:
157
+ body (GenerateRequestRequest):
158
+ body (GenerateRequestRequest):
159
+ body (GenerateRequestRequest):
160
+
161
+ Raises:
162
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
163
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
164
+
165
+ Returns:
166
+ Union[GenerateErrorResponse, GenerateSuccessResponse]
167
+ """
168
+
169
+ return sync_detailed(
170
+ client=client,
171
+ body=body,
172
+ ).parsed
173
+
174
+
175
+ async def asyncio_detailed(
176
+ *,
177
+ client: AuthenticatedClient,
178
+ body: Union[
179
+ GenerateRequestRequest,
180
+ GenerateRequestRequest,
181
+ GenerateRequestRequest,
182
+ ],
183
+ ) -> Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
184
+ """Generate text using AI Provider
185
+
186
+ Handles POST requests to generate text via a configured AI provider.
187
+ The request body should match the AI provider's chat completions (or similar) format,
188
+ though the 'model' field will be overridden by the server-configured generator model ID.
189
+ Billing and logging are handled internally.
190
+
191
+ SDK-primary endpoint - API Key authentication is recommended for programmatic access.
192
+ This is a core SDK operation for AI model generation in security tests.
193
+
194
+ Args:
195
+ body (GenerateRequestRequest):
196
+ body (GenerateRequestRequest):
197
+ body (GenerateRequestRequest):
198
+
199
+ Raises:
200
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
201
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
202
+
203
+ Returns:
204
+ Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]
205
+ """
206
+
207
+ kwargs = _get_kwargs(
208
+ body=body,
209
+ )
210
+
211
+ response = await client.get_async_httpx_client().request(**kwargs)
212
+
213
+ return _build_response(client=client, response=response)
214
+
215
+
216
+ async def asyncio(
217
+ *,
218
+ client: AuthenticatedClient,
219
+ body: Union[
220
+ GenerateRequestRequest,
221
+ GenerateRequestRequest,
222
+ GenerateRequestRequest,
223
+ ],
224
+ ) -> Optional[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
225
+ """Generate text using AI Provider
226
+
227
+ Handles POST requests to generate text via a configured AI provider.
228
+ The request body should match the AI provider's chat completions (or similar) format,
229
+ though the 'model' field will be overridden by the server-configured generator model ID.
230
+ Billing and logging are handled internally.
231
+
232
+ SDK-primary endpoint - API Key authentication is recommended for programmatic access.
233
+ This is a core SDK operation for AI model generation in security tests.
234
+
235
+ Args:
236
+ body (GenerateRequestRequest):
237
+ body (GenerateRequestRequest):
238
+ body (GenerateRequestRequest):
239
+
240
+ Raises:
241
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
242
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
243
+
244
+ Returns:
245
+ Union[GenerateErrorResponse, GenerateSuccessResponse]
246
+ """
247
+
248
+ return (
249
+ await asyncio_detailed(
250
+ client=client,
251
+ body=body,
252
+ )
253
+ ).parsed
@@ -0,0 +1 @@
1
+ """Contains endpoint functions for accessing the API"""
@@ -0,0 +1,253 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, Optional, Union
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.generate_error_response import GenerateErrorResponse
9
+ from ...models.generate_request_request import GenerateRequestRequest
10
+ from ...models.generate_success_response import GenerateSuccessResponse
11
+ from ...types import Response
12
+
13
+
14
+ def _get_kwargs(
15
+ *,
16
+ body: Union[
17
+ GenerateRequestRequest,
18
+ GenerateRequestRequest,
19
+ GenerateRequestRequest,
20
+ ],
21
+ ) -> dict[str, Any]:
22
+ headers: dict[str, Any] = {}
23
+
24
+ _kwargs: dict[str, Any] = {
25
+ "method": "post",
26
+ "url": "/judge",
27
+ }
28
+
29
+ if isinstance(body, GenerateRequestRequest):
30
+ _kwargs["json"] = body.to_dict()
31
+
32
+ headers["Content-Type"] = "application/json"
33
+ if isinstance(body, GenerateRequestRequest):
34
+ _kwargs["data"] = body.to_dict()
35
+
36
+ headers["Content-Type"] = "application/x-www-form-urlencoded"
37
+ if isinstance(body, GenerateRequestRequest):
38
+ _kwargs["files"] = body.to_multipart()
39
+
40
+ headers["Content-Type"] = "multipart/form-data"
41
+
42
+ _kwargs["headers"] = headers
43
+ return _kwargs
44
+
45
+
46
+ def _parse_response(
47
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
48
+ ) -> Optional[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
49
+ if response.status_code == 200:
50
+ response_200 = GenerateSuccessResponse.from_dict(response.json())
51
+
52
+ return response_200
53
+ if response.status_code == 400:
54
+ response_400 = GenerateErrorResponse.from_dict(response.json())
55
+
56
+ return response_400
57
+ if response.status_code == 402:
58
+ response_402 = GenerateErrorResponse.from_dict(response.json())
59
+
60
+ return response_402
61
+ if response.status_code == 403:
62
+ response_403 = GenerateErrorResponse.from_dict(response.json())
63
+
64
+ return response_403
65
+ if response.status_code == 500:
66
+ response_500 = GenerateErrorResponse.from_dict(response.json())
67
+
68
+ return response_500
69
+ if response.status_code == 502:
70
+ response_502 = GenerateErrorResponse.from_dict(response.json())
71
+
72
+ return response_502
73
+ if response.status_code == 504:
74
+ response_504 = GenerateErrorResponse.from_dict(response.json())
75
+
76
+ return response_504
77
+ if client.raise_on_unexpected_status:
78
+ raise errors.UnexpectedStatus(response.status_code, response.content)
79
+ else:
80
+ return None
81
+
82
+
83
+ def _build_response(
84
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
85
+ ) -> Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
86
+ return Response(
87
+ status_code=HTTPStatus(response.status_code),
88
+ content=response.content,
89
+ headers=response.headers,
90
+ parsed=_parse_response(client=client, response=response),
91
+ )
92
+
93
+
94
+ def sync_detailed(
95
+ *,
96
+ client: AuthenticatedClient,
97
+ body: Union[
98
+ GenerateRequestRequest,
99
+ GenerateRequestRequest,
100
+ GenerateRequestRequest,
101
+ ],
102
+ ) -> Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
103
+ """Judge text or assess content using an AI Provider
104
+
105
+ Handles POST requests to assess or judge content via a configured Judge AI provider.
106
+ The request body should match the AI provider's expected format (e.g. chat completions),
107
+ though the 'model' field will be overridden by the server-configured judge model ID.
108
+ Billing and logging are handled internally.
109
+
110
+ SDK-primary endpoint - API Key authentication is recommended for programmatic access.
111
+ This is a core SDK operation for AI-based evaluation in security tests.
112
+
113
+ Args:
114
+ body (GenerateRequestRequest):
115
+ body (GenerateRequestRequest):
116
+ body (GenerateRequestRequest):
117
+
118
+ Raises:
119
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
120
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
121
+
122
+ Returns:
123
+ Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]
124
+ """
125
+
126
+ kwargs = _get_kwargs(
127
+ body=body,
128
+ )
129
+
130
+ response = client.get_httpx_client().request(
131
+ **kwargs,
132
+ )
133
+
134
+ return _build_response(client=client, response=response)
135
+
136
+
137
+ def sync(
138
+ *,
139
+ client: AuthenticatedClient,
140
+ body: Union[
141
+ GenerateRequestRequest,
142
+ GenerateRequestRequest,
143
+ GenerateRequestRequest,
144
+ ],
145
+ ) -> Optional[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
146
+ """Judge text or assess content using an AI Provider
147
+
148
+ Handles POST requests to assess or judge content via a configured Judge AI provider.
149
+ The request body should match the AI provider's expected format (e.g. chat completions),
150
+ though the 'model' field will be overridden by the server-configured judge model ID.
151
+ Billing and logging are handled internally.
152
+
153
+ SDK-primary endpoint - API Key authentication is recommended for programmatic access.
154
+ This is a core SDK operation for AI-based evaluation in security tests.
155
+
156
+ Args:
157
+ body (GenerateRequestRequest):
158
+ body (GenerateRequestRequest):
159
+ body (GenerateRequestRequest):
160
+
161
+ Raises:
162
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
163
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
164
+
165
+ Returns:
166
+ Union[GenerateErrorResponse, GenerateSuccessResponse]
167
+ """
168
+
169
+ return sync_detailed(
170
+ client=client,
171
+ body=body,
172
+ ).parsed
173
+
174
+
175
+ async def asyncio_detailed(
176
+ *,
177
+ client: AuthenticatedClient,
178
+ body: Union[
179
+ GenerateRequestRequest,
180
+ GenerateRequestRequest,
181
+ GenerateRequestRequest,
182
+ ],
183
+ ) -> Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
184
+ """Judge text or assess content using an AI Provider
185
+
186
+ Handles POST requests to assess or judge content via a configured Judge AI provider.
187
+ The request body should match the AI provider's expected format (e.g. chat completions),
188
+ though the 'model' field will be overridden by the server-configured judge model ID.
189
+ Billing and logging are handled internally.
190
+
191
+ SDK-primary endpoint - API Key authentication is recommended for programmatic access.
192
+ This is a core SDK operation for AI-based evaluation in security tests.
193
+
194
+ Args:
195
+ body (GenerateRequestRequest):
196
+ body (GenerateRequestRequest):
197
+ body (GenerateRequestRequest):
198
+
199
+ Raises:
200
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
201
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
202
+
203
+ Returns:
204
+ Response[Union[GenerateErrorResponse, GenerateSuccessResponse]]
205
+ """
206
+
207
+ kwargs = _get_kwargs(
208
+ body=body,
209
+ )
210
+
211
+ response = await client.get_async_httpx_client().request(**kwargs)
212
+
213
+ return _build_response(client=client, response=response)
214
+
215
+
216
+ async def asyncio(
217
+ *,
218
+ client: AuthenticatedClient,
219
+ body: Union[
220
+ GenerateRequestRequest,
221
+ GenerateRequestRequest,
222
+ GenerateRequestRequest,
223
+ ],
224
+ ) -> Optional[Union[GenerateErrorResponse, GenerateSuccessResponse]]:
225
+ """Judge text or assess content using an AI Provider
226
+
227
+ Handles POST requests to assess or judge content via a configured Judge AI provider.
228
+ The request body should match the AI provider's expected format (e.g. chat completions),
229
+ though the 'model' field will be overridden by the server-configured judge model ID.
230
+ Billing and logging are handled internally.
231
+
232
+ SDK-primary endpoint - API Key authentication is recommended for programmatic access.
233
+ This is a core SDK operation for AI-based evaluation in security tests.
234
+
235
+ Args:
236
+ body (GenerateRequestRequest):
237
+ body (GenerateRequestRequest):
238
+ body (GenerateRequestRequest):
239
+
240
+ Raises:
241
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
242
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
243
+
244
+ Returns:
245
+ Union[GenerateErrorResponse, GenerateSuccessResponse]
246
+ """
247
+
248
+ return (
249
+ await asyncio_detailed(
250
+ client=client,
251
+ body=body,
252
+ )
253
+ ).parsed
@@ -0,0 +1 @@
1
+ """Contains endpoint functions for accessing the API"""
@@ -0,0 +1,179 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, Optional, Union
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.user_api_key import UserAPIKey
9
+ from ...models.user_api_key_request import UserAPIKeyRequest
10
+ from ...types import Response
11
+
12
+
13
+ def _get_kwargs(
14
+ *,
15
+ body: UserAPIKeyRequest,
16
+ ) -> dict[str, Any]:
17
+ headers: dict[str, Any] = {}
18
+
19
+ _kwargs: dict[str, Any] = {
20
+ "method": "post",
21
+ "url": "/key",
22
+ }
23
+
24
+ _kwargs["json"] = body.to_dict()
25
+
26
+ headers["Content-Type"] = "application/json"
27
+
28
+ _kwargs["headers"] = headers
29
+ return _kwargs
30
+
31
+
32
+ def _parse_response(
33
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
34
+ ) -> Optional[UserAPIKey]:
35
+ if response.status_code == 201:
36
+ response_201 = UserAPIKey.from_dict(response.json())
37
+
38
+ return response_201
39
+ if client.raise_on_unexpected_status:
40
+ raise errors.UnexpectedStatus(response.status_code, response.content)
41
+ else:
42
+ return None
43
+
44
+
45
+ def _build_response(
46
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
47
+ ) -> Response[UserAPIKey]:
48
+ return Response(
49
+ status_code=HTTPStatus(response.status_code),
50
+ content=response.content,
51
+ headers=response.headers,
52
+ parsed=_parse_response(client=client, response=response),
53
+ )
54
+
55
+
56
+ def sync_detailed(
57
+ *,
58
+ client: AuthenticatedClient,
59
+ body: UserAPIKeyRequest,
60
+ ) -> Response[UserAPIKey]:
61
+ """ViewSet for managing User API Keys.
62
+
63
+ Web-only endpoint - requires Auth0 authentication.
64
+ API keys cannot manage other API keys for security reasons.
65
+
66
+ Args:
67
+ body (UserAPIKeyRequest): Serializer for User API Keys.
68
+ Exposes read-only information about the key, including its prefix.
69
+ The full key is only shown once upon creation by the ViewSet.
70
+
71
+ Raises:
72
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
73
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
74
+
75
+ Returns:
76
+ Response[UserAPIKey]
77
+ """
78
+
79
+ kwargs = _get_kwargs(
80
+ body=body,
81
+ )
82
+
83
+ response = client.get_httpx_client().request(
84
+ **kwargs,
85
+ )
86
+
87
+ return _build_response(client=client, response=response)
88
+
89
+
90
+ def sync(
91
+ *,
92
+ client: AuthenticatedClient,
93
+ body: UserAPIKeyRequest,
94
+ ) -> Optional[UserAPIKey]:
95
+ """ViewSet for managing User API Keys.
96
+
97
+ Web-only endpoint - requires Auth0 authentication.
98
+ API keys cannot manage other API keys for security reasons.
99
+
100
+ Args:
101
+ body (UserAPIKeyRequest): Serializer for User API Keys.
102
+ Exposes read-only information about the key, including its prefix.
103
+ The full key is only shown once upon creation by the ViewSet.
104
+
105
+ Raises:
106
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
107
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
108
+
109
+ Returns:
110
+ UserAPIKey
111
+ """
112
+
113
+ return sync_detailed(
114
+ client=client,
115
+ body=body,
116
+ ).parsed
117
+
118
+
119
+ async def asyncio_detailed(
120
+ *,
121
+ client: AuthenticatedClient,
122
+ body: UserAPIKeyRequest,
123
+ ) -> Response[UserAPIKey]:
124
+ """ViewSet for managing User API Keys.
125
+
126
+ Web-only endpoint - requires Auth0 authentication.
127
+ API keys cannot manage other API keys for security reasons.
128
+
129
+ Args:
130
+ body (UserAPIKeyRequest): Serializer for User API Keys.
131
+ Exposes read-only information about the key, including its prefix.
132
+ The full key is only shown once upon creation by the ViewSet.
133
+
134
+ Raises:
135
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
136
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
137
+
138
+ Returns:
139
+ Response[UserAPIKey]
140
+ """
141
+
142
+ kwargs = _get_kwargs(
143
+ body=body,
144
+ )
145
+
146
+ response = await client.get_async_httpx_client().request(**kwargs)
147
+
148
+ return _build_response(client=client, response=response)
149
+
150
+
151
+ async def asyncio(
152
+ *,
153
+ client: AuthenticatedClient,
154
+ body: UserAPIKeyRequest,
155
+ ) -> Optional[UserAPIKey]:
156
+ """ViewSet for managing User API Keys.
157
+
158
+ Web-only endpoint - requires Auth0 authentication.
159
+ API keys cannot manage other API keys for security reasons.
160
+
161
+ Args:
162
+ body (UserAPIKeyRequest): Serializer for User API Keys.
163
+ Exposes read-only information about the key, including its prefix.
164
+ The full key is only shown once upon creation by the ViewSet.
165
+
166
+ Raises:
167
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
168
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
169
+
170
+ Returns:
171
+ UserAPIKey
172
+ """
173
+
174
+ return (
175
+ await asyncio_detailed(
176
+ client=client,
177
+ body=body,
178
+ )
179
+ ).parsed