pangea-sdk 6.2.0b2__py3-none-any.whl → 6.4.0__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.
- pangea/__init__.py +1 -1
- pangea/asyncio/request.py +25 -154
- pangea/asyncio/services/__init__.py +0 -1
- pangea/asyncio/services/ai_guard.py +40 -130
- pangea/asyncio/services/audit.py +1 -301
- pangea/asyncio/services/authn.py +7 -9
- pangea/asyncio/services/authz.py +45 -11
- pangea/asyncio/services/intel.py +20 -26
- pangea/asyncio/services/prompt_guard.py +2 -112
- pangea/asyncio/services/redact.py +4 -265
- pangea/asyncio/services/vault.py +52 -40
- pangea/request.py +30 -167
- pangea/response.py +6 -6
- pangea/services/__init__.py +0 -1
- pangea/services/ai_guard.py +96 -542
- pangea/services/audit/audit.py +2 -301
- pangea/services/audit/models.py +65 -307
- pangea/services/authn/authn.py +6 -8
- pangea/services/authn/models.py +183 -151
- pangea/services/authz.py +101 -57
- pangea/services/base.py +2 -3
- pangea/services/intel.py +32 -19
- pangea/services/prompt_guard.py +2 -193
- pangea/services/redact.py +7 -473
- pangea/services/vault/models/common.py +11 -12
- pangea/services/vault/models/keys.py +4 -9
- pangea/services/vault/models/secret.py +3 -8
- pangea/services/vault/vault.py +52 -40
- {pangea_sdk-6.2.0b2.dist-info → pangea_sdk-6.4.0.dist-info}/METADATA +34 -15
- pangea_sdk-6.4.0.dist-info/RECORD +60 -0
- pangea/asyncio/services/management.py +0 -576
- pangea/services/management.py +0 -720
- pangea_sdk-6.2.0b2.dist-info/RECORD +0 -62
- {pangea_sdk-6.2.0b2.dist-info → pangea_sdk-6.4.0.dist-info}/WHEEL +0 -0
@@ -1,18 +1,10 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from
|
4
|
-
from typing import TYPE_CHECKING, Literal
|
3
|
+
from typing import TYPE_CHECKING
|
5
4
|
|
6
5
|
from pangea.asyncio.services.base import ServiceBaseAsync
|
7
6
|
from pangea.config import PangeaConfig
|
8
|
-
from pangea.
|
9
|
-
from pangea.services.prompt_guard import (
|
10
|
-
AuditDataActivityConfig,
|
11
|
-
GuardResult,
|
12
|
-
Message,
|
13
|
-
ServiceConfigFilter,
|
14
|
-
ServiceConfigsPage,
|
15
|
-
)
|
7
|
+
from pangea.services.prompt_guard import GuardResult, Message
|
16
8
|
|
17
9
|
if TYPE_CHECKING:
|
18
10
|
from collections.abc import Iterable
|
@@ -90,105 +82,3 @@ class PromptGuardAsync(ServiceBaseAsync):
|
|
90
82
|
GuardResult,
|
91
83
|
data={"messages": messages, "analyzers": analyzers, "classify": classify},
|
92
84
|
)
|
93
|
-
|
94
|
-
async def get_service_config(
|
95
|
-
self,
|
96
|
-
*,
|
97
|
-
id: str | None = None,
|
98
|
-
version: str | None = None,
|
99
|
-
analyzers: Mapping[str, bool] | None = None,
|
100
|
-
malicious_detection_threshold: float | None = None,
|
101
|
-
benign_detection_threshold: float | None = None,
|
102
|
-
audit_data_activity: AuditDataActivityConfig | None = None,
|
103
|
-
) -> PangeaResponse[PangeaResponseResult]:
|
104
|
-
"""
|
105
|
-
OperationId: prompt_guard_post_v1beta_config
|
106
|
-
"""
|
107
|
-
return await self.request.post(
|
108
|
-
"v1beta/config",
|
109
|
-
data={
|
110
|
-
"id": id,
|
111
|
-
"version": version,
|
112
|
-
"analyzers": analyzers,
|
113
|
-
"malicious_detection_threshold": malicious_detection_threshold,
|
114
|
-
"benign_detection_threshold": benign_detection_threshold,
|
115
|
-
"audit_data_activity": audit_data_activity,
|
116
|
-
},
|
117
|
-
result_class=PangeaResponseResult,
|
118
|
-
)
|
119
|
-
|
120
|
-
async def create_service_config(
|
121
|
-
self,
|
122
|
-
*,
|
123
|
-
id: str | None = None,
|
124
|
-
version: str | None = None,
|
125
|
-
analyzers: Mapping[str, bool] | None = None,
|
126
|
-
malicious_detection_threshold: float | None = None,
|
127
|
-
benign_detection_threshold: float | None = None,
|
128
|
-
audit_data_activity: AuditDataActivityConfig | None = None,
|
129
|
-
) -> PangeaResponse[PangeaResponseResult]:
|
130
|
-
"""
|
131
|
-
OperationId: prompt_guard_post_v1beta_config_create
|
132
|
-
"""
|
133
|
-
return await self.request.post(
|
134
|
-
"v1beta/config/create",
|
135
|
-
data={
|
136
|
-
"id": id,
|
137
|
-
"version": version,
|
138
|
-
"analyzers": analyzers,
|
139
|
-
"malicious_detection_threshold": malicious_detection_threshold,
|
140
|
-
"benign_detection_threshold": benign_detection_threshold,
|
141
|
-
"audit_data_activity": audit_data_activity,
|
142
|
-
},
|
143
|
-
result_class=PangeaResponseResult,
|
144
|
-
)
|
145
|
-
|
146
|
-
async def update_service_config(
|
147
|
-
self,
|
148
|
-
*,
|
149
|
-
id: str | None = None,
|
150
|
-
version: str | None = None,
|
151
|
-
analyzers: Mapping[str, bool] | None = None,
|
152
|
-
malicious_detection_threshold: float | None = None,
|
153
|
-
benign_detection_threshold: float | None = None,
|
154
|
-
audit_data_activity: AuditDataActivityConfig | None = None,
|
155
|
-
) -> PangeaResponse[PangeaResponseResult]:
|
156
|
-
"""
|
157
|
-
OperationId: prompt_guard_post_v1beta_config_update
|
158
|
-
"""
|
159
|
-
return await self.request.post(
|
160
|
-
"v1beta/config/update",
|
161
|
-
data={
|
162
|
-
"id": id,
|
163
|
-
"version": version,
|
164
|
-
"analyzers": analyzers,
|
165
|
-
"malicious_detection_threshold": malicious_detection_threshold,
|
166
|
-
"benign_detection_threshold": benign_detection_threshold,
|
167
|
-
"audit_data_activity": audit_data_activity,
|
168
|
-
},
|
169
|
-
result_class=PangeaResponseResult,
|
170
|
-
)
|
171
|
-
|
172
|
-
async def delete_service_config(self, id: str) -> PangeaResponse[PangeaResponseResult]:
|
173
|
-
"""
|
174
|
-
OperationId: prompt_guard_post_v1beta_config_delete
|
175
|
-
"""
|
176
|
-
return await self.request.post("v1beta/config/delete", data={"id": id}, result_class=PangeaResponseResult)
|
177
|
-
|
178
|
-
async def list_service_configs(
|
179
|
-
self,
|
180
|
-
*,
|
181
|
-
filter: ServiceConfigFilter | None = None,
|
182
|
-
last: str | None = None,
|
183
|
-
order: Literal["asc", "desc"] | None = None,
|
184
|
-
order_by: Literal["id", "created_at", "updated_at"] | None = None,
|
185
|
-
size: int | None = None,
|
186
|
-
) -> PangeaResponse[ServiceConfigsPage]:
|
187
|
-
"""
|
188
|
-
OperationId: prompt_guard_post_v1beta_config_list
|
189
|
-
"""
|
190
|
-
return await self.request.post(
|
191
|
-
"v1beta/config/list",
|
192
|
-
data={"filter": filter, "last": last, "order": order, "order_by": order_by, "size": size},
|
193
|
-
result_class=ServiceConfigsPage,
|
194
|
-
)
|
@@ -6,15 +6,12 @@
|
|
6
6
|
|
7
7
|
from __future__ import annotations
|
8
8
|
|
9
|
-
from
|
10
|
-
from typing import Dict, List, Literal, Optional, Union, cast, overload
|
11
|
-
|
12
|
-
from pydantic import TypeAdapter
|
9
|
+
from typing import Dict, List, Optional, Union
|
13
10
|
|
14
11
|
import pangea.services.redact as m
|
15
12
|
from pangea.asyncio.services.base import ServiceBaseAsync
|
16
13
|
from pangea.config import PangeaConfig
|
17
|
-
from pangea.response import PangeaResponse
|
14
|
+
from pangea.response import PangeaResponse
|
18
15
|
|
19
16
|
|
20
17
|
class RedactAsync(ServiceBaseAsync):
|
@@ -71,7 +68,7 @@ class RedactAsync(ServiceBaseAsync):
|
|
71
68
|
rules: Optional[List[str]] = None,
|
72
69
|
rulesets: Optional[List[str]] = None,
|
73
70
|
return_result: Optional[bool] = None,
|
74
|
-
redaction_method_overrides:
|
71
|
+
redaction_method_overrides: Optional[m.RedactionMethodOverrides] = None,
|
75
72
|
llm_request: Optional[bool] = None,
|
76
73
|
vault_parameters: Optional[m.VaultParameters] = None,
|
77
74
|
) -> PangeaResponse[m.RedactResult]:
|
@@ -126,7 +123,7 @@ class RedactAsync(ServiceBaseAsync):
|
|
126
123
|
rules: Optional[List[str]] = None,
|
127
124
|
rulesets: Optional[List[str]] = None,
|
128
125
|
return_result: Optional[bool] = None,
|
129
|
-
redaction_method_overrides:
|
126
|
+
redaction_method_overrides: Optional[m.RedactionMethodOverrides] = None,
|
130
127
|
llm_request: bool | None = None,
|
131
128
|
vault_parameters: m.VaultParameters | None = None,
|
132
129
|
) -> PangeaResponse[m.StructuredResult]:
|
@@ -207,261 +204,3 @@ class RedactAsync(ServiceBaseAsync):
|
|
207
204
|
"""
|
208
205
|
input = m.UnredactRequest(redacted_data=redacted_data, fpe_context=fpe_context)
|
209
206
|
return await self.request.post("v1/unredact", m.UnredactResult, data=input.model_dump(exclude_none=True))
|
210
|
-
|
211
|
-
async def get_service_config(self, config_id: str) -> PangeaResponse[m.ServiceConfigResult]:
|
212
|
-
"""
|
213
|
-
Get a service config.
|
214
|
-
|
215
|
-
|
216
|
-
OperationId: redact_post_v1beta_config
|
217
|
-
"""
|
218
|
-
response = await self.request.post("v1beta/config", PangeaResponseResult, data={"id": config_id})
|
219
|
-
response.result = TypeAdapter(m.ServiceConfigResult).validate_python(response.json["result"])
|
220
|
-
return cast(PangeaResponse[m.ServiceConfigResult], response)
|
221
|
-
|
222
|
-
@overload
|
223
|
-
async def create_service_config(
|
224
|
-
self,
|
225
|
-
name: str,
|
226
|
-
*,
|
227
|
-
version: Literal["1.0.0"],
|
228
|
-
enabled_rules: Sequence[str] | None = None,
|
229
|
-
redactions: Mapping[str, m.Redaction] | None = None,
|
230
|
-
vault_service_config_id: str | None = None,
|
231
|
-
salt_vault_secret_id: str | None = None,
|
232
|
-
rules: Mapping[str, m.RuleV1] | None = None,
|
233
|
-
rulesets: Mapping[str, m.RulesetV1] | None = None,
|
234
|
-
supported_languages: Sequence[Literal["en"]] | None = None,
|
235
|
-
) -> PangeaResponse[m.ServiceConfigResult]:
|
236
|
-
"""
|
237
|
-
Create a v1.0.0 service config.
|
238
|
-
|
239
|
-
OperationId: redact_post_v1beta_config_create
|
240
|
-
|
241
|
-
Args:
|
242
|
-
vault_service_config_id: Service config used to create the secret
|
243
|
-
salt_vault_secret_id: Pangea only allows hashing to be done using a salt value to prevent brute-force attacks.
|
244
|
-
"""
|
245
|
-
|
246
|
-
@overload
|
247
|
-
async def create_service_config(
|
248
|
-
self,
|
249
|
-
name: str,
|
250
|
-
*,
|
251
|
-
version: Literal["2.0.0"] | None = None,
|
252
|
-
enabled_rules: Sequence[str] | None = None,
|
253
|
-
enforce_enabled_rules: bool | None = None,
|
254
|
-
redactions: Mapping[str, m.Redaction] | None = None,
|
255
|
-
vault_service_config_id: str | None = None,
|
256
|
-
salt_vault_secret_id: str | None = None,
|
257
|
-
fpe_vault_secret_id: str | None = None,
|
258
|
-
rules: Mapping[str, m.RuleV2] | None = None,
|
259
|
-
rulesets: Mapping[str, m.RulesetV2] | None = None,
|
260
|
-
supported_languages: Sequence[Literal["en"]] | None = None,
|
261
|
-
) -> PangeaResponse[m.ServiceConfigResult]:
|
262
|
-
"""
|
263
|
-
Create a v2.0.0 service config.
|
264
|
-
|
265
|
-
OperationId: redact_post_v1beta_config_create
|
266
|
-
|
267
|
-
Args:
|
268
|
-
enforce_enabled_rules: Always run service config enabled rules across all redact calls regardless of flags?
|
269
|
-
vault_service_config_id: Service config used to create the secret
|
270
|
-
salt_vault_secret_id: Pangea only allows hashing to be done using a salt value to prevent brute-force attacks.
|
271
|
-
fpe_vault_secret_id: The ID of the key used by FF3 Encryption algorithms for FPE.
|
272
|
-
"""
|
273
|
-
|
274
|
-
async def create_service_config(
|
275
|
-
self,
|
276
|
-
name: str,
|
277
|
-
*,
|
278
|
-
version: Literal["1.0.0", "2.0.0"] | None = None,
|
279
|
-
enabled_rules: Sequence[str] | None = None,
|
280
|
-
enforce_enabled_rules: bool | None = None,
|
281
|
-
fpe_vault_secret_id: str | None = None,
|
282
|
-
redactions: Mapping[str, m.Redaction] | None = None,
|
283
|
-
rules: Mapping[str, m.RuleV1 | m.RuleV2] | None = None,
|
284
|
-
rulesets: Mapping[str, m.RulesetV1 | m.RulesetV2] | None = None,
|
285
|
-
salt_vault_secret_id: str | None = None,
|
286
|
-
supported_languages: Sequence[Literal["en"]] | None = None,
|
287
|
-
vault_service_config_id: str | None = None,
|
288
|
-
) -> PangeaResponse[m.ServiceConfigResult]:
|
289
|
-
"""
|
290
|
-
Create a service config.
|
291
|
-
|
292
|
-
OperationId: redact_post_v1beta_config_create
|
293
|
-
|
294
|
-
Args:
|
295
|
-
enforce_enabled_rules: Always run service config enabled rules across all redact calls regardless of flags?
|
296
|
-
fpe_vault_secret_id: The ID of the key used by FF3 Encryption algorithms for FPE.
|
297
|
-
salt_vault_secret_id: Pangea only allows hashing to be done using a salt value to prevent brute-force attacks.
|
298
|
-
vault_service_config_id: Service config used to create the secret
|
299
|
-
"""
|
300
|
-
|
301
|
-
response = await self.request.post(
|
302
|
-
"v1beta/config/create",
|
303
|
-
PangeaResponseResult,
|
304
|
-
data={
|
305
|
-
"name": name,
|
306
|
-
"version": version,
|
307
|
-
"enabled_rules": enabled_rules,
|
308
|
-
"enforce_enabled_rules": enforce_enabled_rules,
|
309
|
-
"fpe_vault_secret_id": fpe_vault_secret_id,
|
310
|
-
"redactions": redactions,
|
311
|
-
"rules": rules,
|
312
|
-
"rulesets": rulesets,
|
313
|
-
"salt_vault_secret_id": salt_vault_secret_id,
|
314
|
-
"supported_languages": supported_languages,
|
315
|
-
"vault_service_config_id": vault_service_config_id,
|
316
|
-
},
|
317
|
-
)
|
318
|
-
response.result = TypeAdapter(m.ServiceConfigResult).validate_python(response.json["result"])
|
319
|
-
return cast(PangeaResponse[m.ServiceConfigResult], response)
|
320
|
-
|
321
|
-
@overload
|
322
|
-
async def update_service_config(
|
323
|
-
self,
|
324
|
-
config_id: str,
|
325
|
-
*,
|
326
|
-
version: Literal["1.0.0"],
|
327
|
-
name: str,
|
328
|
-
updated_at: str,
|
329
|
-
enabled_rules: Sequence[str] | None = None,
|
330
|
-
redactions: Mapping[str, m.Redaction] | None = None,
|
331
|
-
vault_service_config_id: str | None = None,
|
332
|
-
salt_vault_secret_id: str | None = None,
|
333
|
-
rules: Mapping[str, m.RuleV1] | None = None,
|
334
|
-
rulesets: Mapping[str, m.RulesetV1] | None = None,
|
335
|
-
supported_languages: Sequence[Literal["en"]] | None = None,
|
336
|
-
) -> PangeaResponse[m.ServiceConfigResult]:
|
337
|
-
"""
|
338
|
-
Update a v1.0.0 service config.
|
339
|
-
|
340
|
-
OperationId: redact_post_v1beta_config_update
|
341
|
-
|
342
|
-
Args:
|
343
|
-
vault_service_config_id: Service config used to create the secret
|
344
|
-
salt_vault_secret_id: Pangea only allows hashing to be done using a salt value to prevent brute-force attacks.
|
345
|
-
"""
|
346
|
-
|
347
|
-
@overload
|
348
|
-
async def update_service_config(
|
349
|
-
self,
|
350
|
-
config_id: str,
|
351
|
-
*,
|
352
|
-
version: Literal["2.0.0"] | None = None,
|
353
|
-
name: str,
|
354
|
-
updated_at: str,
|
355
|
-
enabled_rules: Sequence[str] | None = None,
|
356
|
-
enforce_enabled_rules: bool | None = None,
|
357
|
-
redactions: Mapping[str, m.Redaction] | None = None,
|
358
|
-
vault_service_config_id: str | None = None,
|
359
|
-
salt_vault_secret_id: str | None = None,
|
360
|
-
fpe_vault_secret_id: str | None = None,
|
361
|
-
rules: Mapping[str, m.RuleV2] | None = None,
|
362
|
-
rulesets: Mapping[str, m.RulesetV2] | None = None,
|
363
|
-
supported_languages: Sequence[Literal["en"]] | None = None,
|
364
|
-
) -> PangeaResponse[m.ServiceConfigResult]:
|
365
|
-
"""
|
366
|
-
Update a v2.0.0 service config.
|
367
|
-
|
368
|
-
OperationId: redact_post_v1beta_config_update
|
369
|
-
|
370
|
-
Args:
|
371
|
-
enforce_enabled_rules: Always run service config enabled rules across all redact calls regardless of flags?
|
372
|
-
vault_service_config_id: Service config used to create the secret
|
373
|
-
salt_vault_secret_id: Pangea only allows hashing to be done using a salt value to prevent brute-force attacks.
|
374
|
-
fpe_vault_secret_id: The ID of the key used by FF3 Encryption algorithms for FPE.
|
375
|
-
"""
|
376
|
-
|
377
|
-
async def update_service_config(
|
378
|
-
self,
|
379
|
-
config_id: str,
|
380
|
-
*,
|
381
|
-
version: Literal["1.0.0", "2.0.0"] | None = None,
|
382
|
-
name: str,
|
383
|
-
updated_at: str,
|
384
|
-
enabled_rules: Sequence[str] | None = None,
|
385
|
-
enforce_enabled_rules: bool | None = None,
|
386
|
-
fpe_vault_secret_id: str | None = None,
|
387
|
-
redactions: Mapping[str, m.Redaction] | None = None,
|
388
|
-
rules: Mapping[str, m.RuleV1 | m.RuleV2] | None = None,
|
389
|
-
rulesets: Mapping[str, m.RulesetV1 | m.RulesetV2] | None = None,
|
390
|
-
salt_vault_secret_id: str | None = None,
|
391
|
-
supported_languages: Sequence[Literal["en"]] | None = None,
|
392
|
-
vault_service_config_id: str | None = None,
|
393
|
-
) -> PangeaResponse[m.ServiceConfigResult]:
|
394
|
-
"""
|
395
|
-
Update a service config.
|
396
|
-
|
397
|
-
OperationId: redact_post_v1beta_config_update
|
398
|
-
|
399
|
-
Args:
|
400
|
-
enforce_enabled_rules: Always run service config enabled rules across all redact calls regardless of flags?
|
401
|
-
fpe_vault_secret_id: The ID of the key used by FF3 Encryption algorithms for FPE.
|
402
|
-
salt_vault_secret_id: Pangea only allows hashing to be done using a salt value to prevent brute-force attacks.
|
403
|
-
vault_service_config_id: Service config used to create the secret
|
404
|
-
"""
|
405
|
-
|
406
|
-
response = await self.request.post(
|
407
|
-
"v1beta/config/update",
|
408
|
-
PangeaResponseResult,
|
409
|
-
data={
|
410
|
-
"id": config_id,
|
411
|
-
"updated_at": updated_at,
|
412
|
-
"name": name,
|
413
|
-
"version": version,
|
414
|
-
"enabled_rules": enabled_rules,
|
415
|
-
"enforce_enabled_rules": enforce_enabled_rules,
|
416
|
-
"fpe_vault_secret_id": fpe_vault_secret_id,
|
417
|
-
"redactions": redactions,
|
418
|
-
"rules": rules,
|
419
|
-
"rulesets": rulesets,
|
420
|
-
"salt_vault_secret_id": salt_vault_secret_id,
|
421
|
-
"supported_languages": supported_languages,
|
422
|
-
"vault_service_config_id": vault_service_config_id,
|
423
|
-
},
|
424
|
-
)
|
425
|
-
response.result = TypeAdapter(m.ServiceConfigResult).validate_python(response.json["result"])
|
426
|
-
return cast(PangeaResponse[m.ServiceConfigResult], response)
|
427
|
-
|
428
|
-
async def delete_service_config(self, config_id: str) -> PangeaResponse[m.ServiceConfigResult]:
|
429
|
-
"""
|
430
|
-
Delete a service config.
|
431
|
-
|
432
|
-
OperationId: redact_post_v1beta_config_delete
|
433
|
-
|
434
|
-
Args:
|
435
|
-
config_id: An ID for a service config
|
436
|
-
"""
|
437
|
-
|
438
|
-
response = await self.request.post("v1beta/config/delete", PangeaResponseResult, data={"id": config_id})
|
439
|
-
response.result = TypeAdapter(m.ServiceConfigResult).validate_python(response.json["result"])
|
440
|
-
return cast(PangeaResponse[m.ServiceConfigResult], response)
|
441
|
-
|
442
|
-
async def list_service_configs(
|
443
|
-
self,
|
444
|
-
*,
|
445
|
-
filter: m.ServiceConfigFilter | None = None,
|
446
|
-
last: str | None = None,
|
447
|
-
order: Literal["asc", "desc"] | None = None,
|
448
|
-
order_by: Literal["id", "created_at", "updated_at"] | None = None,
|
449
|
-
size: int | None = None,
|
450
|
-
) -> PangeaResponse[m.ServiceConfigListResult]:
|
451
|
-
"""
|
452
|
-
List service configs.
|
453
|
-
|
454
|
-
OperationId: redact_post_v1beta_config_list
|
455
|
-
|
456
|
-
Args:
|
457
|
-
last: Reflected value from a previous response to obtain the next page of results.
|
458
|
-
order: Order results asc(ending) or desc(ending).
|
459
|
-
order_by: Which field to order results by.
|
460
|
-
size: Maximum results to include in the response.
|
461
|
-
"""
|
462
|
-
|
463
|
-
return await self.request.post(
|
464
|
-
"v1beta/config/list",
|
465
|
-
m.ServiceConfigListResult,
|
466
|
-
data={"filter": filter, "last": last, "order": order, "order_by": order_by, "size": size},
|
467
|
-
)
|