pangea-sdk 5.3.0__py3-none-any.whl → 5.4.0b1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
pangea/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "5.3.0"
1
+ __version__ = "5.4.0beta1"
2
2
 
3
3
  from pangea.asyncio.request import PangeaRequestAsync
4
4
  from pangea.config import PangeaConfig
pangea/asyncio/request.py CHANGED
@@ -5,11 +5,12 @@ from __future__ import annotations
5
5
  import asyncio
6
6
  import json
7
7
  import time
8
- from typing import Any, Dict, List, Optional, Sequence, Tuple, Type, Union
8
+ from typing import Dict, List, Optional, Sequence, Tuple, Type, Union, cast
9
9
 
10
10
  import aiohttp
11
11
  from aiohttp import FormData
12
12
  from pydantic import BaseModel
13
+ from pydantic_core import to_jsonable_python
13
14
  from typing_extensions import Any, TypeVar
14
15
 
15
16
  import pangea.exceptions as pe
@@ -55,17 +56,20 @@ class PangeaRequestAsync(PangeaRequestBase):
55
56
  if data is None:
56
57
  data = {}
57
58
 
59
+ # Normalize.
60
+ data = cast(dict[str, Any], to_jsonable_python(data))
61
+
58
62
  if url is None:
59
63
  url = self._url(endpoint)
60
64
 
61
65
  # Set config ID if available
62
- if self.config_id and data.get("config_id", None) is None: # type: ignore[union-attr]
63
- data["config_id"] = self.config_id # type: ignore[index]
66
+ if self.config_id and data.get("config_id", None) is None:
67
+ data["config_id"] = self.config_id
64
68
 
65
69
  self.logger.debug(
66
70
  json.dumps({"service": self.service, "action": "post", "url": url, "data": data}, default=default_encoder)
67
71
  )
68
- transfer_method = data.get("transfer_method", None) # type: ignore[union-attr]
72
+ transfer_method = data.get("transfer_method", None)
69
73
 
70
74
  if files and type(data) is dict and (transfer_method == TransferMethod.POST_URL.value):
71
75
  requests_response = await self._full_post_presigned_url(
@@ -1,9 +1,11 @@
1
+ from .ai_guard import AIGuardAsync
1
2
  from .audit import AuditAsync
2
3
  from .authn import AuthNAsync
3
4
  from .authz import AuthZAsync
4
5
  from .embargo import EmbargoAsync
5
6
  from .file_scan import FileScanAsync
6
7
  from .intel import DomainIntelAsync, FileIntelAsync, IpIntelAsync, UrlIntelAsync, UserIntelAsync
8
+ from .prompt_guard import PromptGuardAsync
7
9
  from .redact import RedactAsync
8
10
  from .sanitize import SanitizeAsync
9
11
  from .share import ShareAsync
@@ -0,0 +1,75 @@
1
+ from __future__ import annotations
2
+
3
+ from pangea.asyncio.services.base import ServiceBaseAsync
4
+ from pangea.config import PangeaConfig
5
+ from pangea.response import PangeaResponse
6
+ from pangea.services.ai_guard import TextGuardResult
7
+
8
+
9
+ class AIGuardAsync(ServiceBaseAsync):
10
+ """AI Guard service client.
11
+
12
+ Provides methods to interact with Pangea's AI Guard service.
13
+
14
+ Examples:
15
+ from pangea import PangeaConfig
16
+ from pangea.asyncio.services import AIGuardAsync
17
+
18
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
19
+ ai_guard = AIGuardAsync(token="pangea_token", config=config)
20
+ """
21
+
22
+ service_name = "ai-guard"
23
+
24
+ def __init__(
25
+ self, token: str, config: PangeaConfig | None = None, logger_name: str = "pangea", config_id: str | None = None
26
+ ) -> None:
27
+ """
28
+ AI Guard service client.
29
+
30
+ Initializes a new AI Guard client.
31
+
32
+ Args:
33
+ token: Pangea API token.
34
+ config: Pangea service configuration.
35
+ logger_name: Logger name.
36
+ config_id: Configuration ID.
37
+
38
+ Examples:
39
+ from pangea import PangeaConfig
40
+ from pangea.asyncio.services import AIGuardAsync
41
+
42
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
43
+ ai_guard = AIGuardAsync(token="pangea_token", config=config)
44
+ """
45
+
46
+ super().__init__(token, config, logger_name, config_id)
47
+
48
+ async def guard_text(
49
+ self,
50
+ text: str,
51
+ *,
52
+ recipe: str = "pangea_prompt_guard",
53
+ debug: bool = False,
54
+ ) -> PangeaResponse[TextGuardResult]:
55
+ """
56
+ Text guard (Beta)
57
+
58
+ Guard text.
59
+
60
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
61
+
62
+ OperationId: ai_guard_post_v1beta_text_guard
63
+
64
+ Args:
65
+ text: Text.
66
+ recipe: Recipe.
67
+ debug: Debug.
68
+
69
+ Examples:
70
+ response = await ai_guard.guard_text("text")
71
+ """
72
+
73
+ return await self.request.post(
74
+ "v1beta/text/guard", TextGuardResult, data={"text": text, "recipe": recipe, "debug": debug}
75
+ )
@@ -0,0 +1,73 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from pangea.asyncio.services.base import ServiceBaseAsync
6
+ from pangea.config import PangeaConfig
7
+ from pangea.services.prompt_guard import GuardResult, Message
8
+
9
+ if TYPE_CHECKING:
10
+ from collections.abc import Iterable
11
+
12
+ from pangea.response import PangeaResponse
13
+
14
+
15
+ class PromptGuardAsync(ServiceBaseAsync):
16
+ """Prompt Guard service client.
17
+
18
+ Provides methods to interact with Pangea's Prompt Guard service.
19
+
20
+ Examples:
21
+ from pangea import PangeaConfig
22
+ from pangea.asyncio.services import PromptGuardAsync
23
+
24
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
25
+ prompt_guard = PromptGuardAsync(token="pangea_token", config=config)
26
+ """
27
+
28
+ service_name = "prompt-guard"
29
+
30
+ def __init__(
31
+ self, token: str, config: PangeaConfig | None = None, logger_name: str = "pangea", config_id: str | None = None
32
+ ) -> None:
33
+ """
34
+ Prompt Guard service client.
35
+
36
+ Initializes a new Prompt Guard client.
37
+
38
+ Args:
39
+ token: Pangea API token.
40
+ config: Pangea service configuration.
41
+ logger_name: Logger name.
42
+ config_id: Configuration ID.
43
+
44
+ Examples:
45
+ from pangea import PangeaConfig
46
+ from pangea.asyncio.services import PromptGuardAsync
47
+
48
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
49
+ prompt_guard = PromptGuardAsync(token="pangea_token", config=config)
50
+ """
51
+
52
+ super().__init__(token, config, logger_name, config_id)
53
+
54
+ async def guard(self, messages: Iterable[Message]) -> PangeaResponse[GuardResult]:
55
+ """
56
+ Guard (Beta)
57
+
58
+ Guard messages.
59
+
60
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
61
+
62
+ OperationId: prompt_guard_post_v1beta_guard
63
+
64
+ Args:
65
+ messages: Messages.
66
+
67
+ Examples:
68
+ from pangea.asyncio.services.prompt_guard import Message
69
+
70
+ response = await prompt_guard.guard([Message(role="user", content="hello world")])
71
+ """
72
+
73
+ return await self.request.post("v1beta/guard", GuardResult, data={"messages": messages})
@@ -97,7 +97,7 @@ class SanitizeAsync(ServiceBaseAsync):
97
97
  performed.
98
98
 
99
99
  Examples:
100
- with open("/path/to/file.pdf", "rb") as f:
100
+ with open("/path/to/file.txt", "rb") as f:
101
101
  response = await sanitize.sanitize(
102
102
  file=f,
103
103
  transfer_method=TransferMethod.POST_URL,
pangea/request.py CHANGED
@@ -6,10 +6,11 @@ import copy
6
6
  import json
7
7
  import logging
8
8
  import time
9
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Type, Union
9
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Type, Union, cast
10
10
 
11
11
  import requests
12
12
  from pydantic import BaseModel
13
+ from pydantic_core import to_jsonable_python
13
14
  from requests.adapters import HTTPAdapter, Retry
14
15
  from requests_toolbelt import MultipartDecoder # type: ignore[import-untyped]
15
16
  from typing_extensions import TypeVar
@@ -232,6 +233,9 @@ class PangeaRequest(PangeaRequestBase):
232
233
  if data is None:
233
234
  data = {}
234
235
 
236
+ # Normalize.
237
+ data = cast(dict[str, Any], to_jsonable_python(data))
238
+
235
239
  if url is None:
236
240
  url = self._url(endpoint)
237
241
 
@@ -1,9 +1,11 @@
1
+ from .ai_guard import AIGuard
1
2
  from .audit.audit import Audit
2
3
  from .authn.authn import AuthN
3
4
  from .authz import AuthZ
4
5
  from .embargo import Embargo
5
6
  from .file_scan import FileScan
6
7
  from .intel import DomainIntel, FileIntel, IpIntel, UrlIntel, UserIntel
8
+ from .prompt_guard import PromptGuard
7
9
  from .redact import Redact
8
10
  from .sanitize import Sanitize
9
11
  from .share.share import Share
@@ -0,0 +1,128 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict, Generic, List, Optional, TypeVar
4
+
5
+ from pangea.config import PangeaConfig
6
+ from pangea.response import APIResponseModel, PangeaResponse, PangeaResponseResult
7
+ from pangea.services.base import ServiceBase
8
+
9
+
10
+ class AnalyzerResponse(APIResponseModel):
11
+ analyzer: str
12
+ confidence: float
13
+
14
+
15
+ class PromptInjectionResult(APIResponseModel):
16
+ analyzer_responses: List[AnalyzerResponse]
17
+ """Triggered prompt injection analyzers."""
18
+
19
+
20
+ class PiiEntity(APIResponseModel):
21
+ type: str
22
+ value: str
23
+ redacted: bool
24
+ start_pos: Optional[int] = None
25
+
26
+
27
+ class PiiEntityResult(APIResponseModel):
28
+ entities: List[PiiEntity]
29
+
30
+
31
+ class MaliciousEntity(APIResponseModel):
32
+ type: str
33
+ value: str
34
+ redacted: Optional[bool] = None
35
+ start_pos: Optional[int] = None
36
+ raw: Optional[Dict[str, Any]] = None
37
+
38
+
39
+ class MaliciousEntityResult(APIResponseModel):
40
+ entities: List[MaliciousEntity]
41
+
42
+
43
+ T = TypeVar("T")
44
+
45
+
46
+ class TextGuardDetector(APIResponseModel, Generic[T]):
47
+ detected: bool
48
+ data: Optional[T] = None
49
+
50
+
51
+ class TextGuardDetectors(APIResponseModel):
52
+ prompt_injection: Optional[TextGuardDetector[PromptInjectionResult]] = None
53
+ pii_entity: Optional[TextGuardDetector[PiiEntityResult]] = None
54
+ malicious_entity: Optional[TextGuardDetector[MaliciousEntityResult]] = None
55
+
56
+
57
+ class TextGuardResult(PangeaResponseResult):
58
+ detectors: TextGuardDetectors
59
+ prompt: str
60
+
61
+
62
+ class AIGuard(ServiceBase):
63
+ """AI Guard service client.
64
+
65
+ Provides methods to interact with Pangea's AI Guard service.
66
+
67
+ Examples:
68
+ from pangea import PangeaConfig
69
+ from pangea.services import AIGuard
70
+
71
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
72
+ ai_guard = AIGuard(token="pangea_token", config=config)
73
+ """
74
+
75
+ service_name = "ai-guard"
76
+
77
+ def __init__(
78
+ self, token: str, config: PangeaConfig | None = None, logger_name: str = "pangea", config_id: str | None = None
79
+ ) -> None:
80
+ """
81
+ AI Guard service client.
82
+
83
+ Initializes a new AI Guard client.
84
+
85
+ Args:
86
+ token: Pangea API token.
87
+ config: Pangea service configuration.
88
+ logger_name: Logger name.
89
+ config_id: Configuration ID.
90
+
91
+ Examples:
92
+ from pangea import PangeaConfig
93
+ from pangea.services import AIGuard
94
+
95
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
96
+ ai_guard = AIGuard(token="pangea_token", config=config)
97
+ """
98
+
99
+ super().__init__(token, config, logger_name, config_id)
100
+
101
+ def guard_text(
102
+ self,
103
+ text: str,
104
+ *,
105
+ recipe: str = "pangea_prompt_guard",
106
+ debug: bool = False,
107
+ ) -> PangeaResponse[TextGuardResult]:
108
+ """
109
+ Text guard (Beta)
110
+
111
+ Guard text.
112
+
113
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
114
+
115
+ OperationId: ai_guard_post_v1beta_text_guard
116
+
117
+ Args:
118
+ text: Text.
119
+ recipe: Recipe.
120
+ debug: Debug.
121
+
122
+ Examples:
123
+ response = ai_guard.guard_text("text")
124
+ """
125
+
126
+ return self.request.post(
127
+ "v1beta/text/guard", TextGuardResult, data={"text": text, "recipe": recipe, "debug": debug}
128
+ )
@@ -0,0 +1,83 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Optional
4
+
5
+ from pangea.config import PangeaConfig
6
+ from pangea.response import APIRequestModel, PangeaResponse, PangeaResponseResult
7
+ from pangea.services.base import ServiceBase
8
+
9
+ if TYPE_CHECKING:
10
+ from collections.abc import Iterable
11
+
12
+
13
+ class Message(APIRequestModel):
14
+ role: str
15
+ content: str
16
+
17
+
18
+ class GuardResult(PangeaResponseResult):
19
+ detected: bool
20
+ type: Optional[str] = None
21
+ detector: Optional[str] = None
22
+ confidence: int
23
+
24
+
25
+ class PromptGuard(ServiceBase):
26
+ """Prompt Guard service client.
27
+
28
+ Provides methods to interact with Pangea's Prompt Guard service.
29
+
30
+ Examples:
31
+ from pangea import PangeaConfig
32
+ from pangea.services import PromptGuard
33
+
34
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
35
+ prompt_guard = PromptGuard(token="pangea_token", config=config)
36
+ """
37
+
38
+ service_name = "prompt-guard"
39
+
40
+ def __init__(
41
+ self, token: str, config: PangeaConfig | None = None, logger_name: str = "pangea", config_id: str | None = None
42
+ ) -> None:
43
+ """
44
+ Prompt Guard service client.
45
+
46
+ Initializes a new Prompt Guard client.
47
+
48
+ Args:
49
+ token: Pangea API token.
50
+ config: Pangea service configuration.
51
+ logger_name: Logger name.
52
+ config_id: Configuration ID.
53
+
54
+ Examples:
55
+ from pangea import PangeaConfig
56
+ from pangea.services import PromptGuard
57
+
58
+ config = PangeaConfig(domain="aws.us.pangea.cloud")
59
+ prompt_guard = PromptGuard(token="pangea_token", config=config)
60
+ """
61
+
62
+ super().__init__(token, config, logger_name, config_id)
63
+
64
+ def guard(self, messages: Iterable[Message]) -> PangeaResponse[GuardResult]:
65
+ """
66
+ Guard (Beta)
67
+
68
+ Guard messages.
69
+
70
+ How to install a [Beta release](https://pangea.cloud/docs/sdk/python/#beta-releases).
71
+
72
+ OperationId: prompt_guard_post_v1beta_guard
73
+
74
+ Args:
75
+ messages: Messages.
76
+
77
+ Examples:
78
+ from pangea.services.prompt_guard import Message
79
+
80
+ response = prompt_guard.guard([Message(role="user", content="hello world")])
81
+ """
82
+
83
+ return self.request.post("v1beta/guard", GuardResult, data={"messages": messages})
@@ -46,12 +46,6 @@ class SanitizeContent(APIRequestModel):
46
46
  analysis engine results. Only works if redact is enabled.
47
47
  """
48
48
 
49
- remove_attachments: Optional[bool] = None
50
- """Remove file attachments (PDF only)."""
51
-
52
- remove_interactive: Optional[bool] = None
53
- """Remove interactive content (PDF only)."""
54
-
55
49
 
56
50
  class SanitizeShareOutput(APIRequestModel):
57
51
  enabled: Optional[bool] = None
@@ -144,14 +138,6 @@ class RedactData(PangeaResponseResult):
144
138
  """The scoring result of a set of rules."""
145
139
 
146
140
 
147
- class CDR(PangeaResponseResult):
148
- file_attachments_removed: Optional[int] = None
149
- """Number of file attachments removed."""
150
-
151
- interactive_contents_removed: Optional[int] = None
152
- """Number of interactive content items removed."""
153
-
154
-
155
141
  class SanitizeData(PangeaResponseResult):
156
142
  defang: Optional[DefangData] = None
157
143
  """Defang."""
@@ -162,9 +148,6 @@ class SanitizeData(PangeaResponseResult):
162
148
  malicious_file: Optional[bool] = None
163
149
  """If the file scanned was malicious."""
164
150
 
165
- cdr: Optional[CDR] = None
166
- """Content Disarm and Reconstruction."""
167
-
168
151
 
169
152
  class SanitizeResult(PangeaResponseResult):
170
153
  dest_url: Optional[str] = None
@@ -265,7 +248,7 @@ class Sanitize(ServiceBase):
265
248
  performed.
266
249
 
267
250
  Examples:
268
- with open("/path/to/file.pdf", "rb") as f:
251
+ with open("/path/to/file.txt", "rb") as f:
269
252
  response = sanitize.sanitize(
270
253
  file=f,
271
254
  transfer_method=TransferMethod.POST_URL,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pangea-sdk
3
- Version: 5.3.0
3
+ Version: 5.4.0b1
4
4
  Summary: Pangea API SDK
5
5
  License: MIT
6
6
  Keywords: Pangea,SDK,Audit
@@ -63,13 +63,13 @@ the same compatibility guarantees as stable releases.
63
63
  Via pip:
64
64
 
65
65
  ```bash
66
- $ pip3 install pangea-sdk==5.2.0b2
66
+ $ pip3 install pangea-sdk==5.4.0b1
67
67
  ```
68
68
 
69
69
  Via poetry:
70
70
 
71
71
  ```bash
72
- $ poetry add pangea-sdk==5.2.0b2
72
+ $ poetry add pangea-sdk==5.4.0b1
73
73
  ```
74
74
 
75
75
  ## Usage
@@ -1,8 +1,9 @@
1
- pangea/__init__.py,sha256=IBK25tmy5e9IF8Y4ALg8Sp7LAyP2pyGwdDY08xeEuss,246
1
+ pangea/__init__.py,sha256=5GVWxTAjdvD4yfQsWwkX4JBF9NJnedj3Xos107reJy0,251
2
2
  pangea/asyncio/__init__.py,sha256=kjEMkqMQ521LlMSu5jn3_WgweyArwVZ2C-s3x7mR6Pk,45
3
3
  pangea/asyncio/file_uploader.py,sha256=wI7epib7Rc5jtZw4eJ1L1SlmutDG6CPv59C8N2UPhtY,1436
4
- pangea/asyncio/request.py,sha256=BREsLY8_MCxGSplHbdKFZTzr4TX5ya0-BsXLffZhsco,17849
5
- pangea/asyncio/services/__init__.py,sha256=3IkiTqY_RtFndI7aoDTrb1yLv8xos_cKhmGS1TULcmw,386
4
+ pangea/asyncio/request.py,sha256=e-_wpOGsOLGlC4BXI6WBa_MFzkUoaMQEqYgXWaqoXQk,17900
5
+ pangea/asyncio/services/__init__.py,sha256=L6Tdhjfx_ZECHskhLMPaCcOefi-r-imw6q_zlU4j-FY,464
6
+ pangea/asyncio/services/ai_guard.py,sha256=FxO8GRBztfOhpd7Kzj4-jWAiG0kb89-jVWL_AnbEou8,2142
6
7
  pangea/asyncio/services/audit.py,sha256=rPaCx4cMzj-g9WFMRIysFCJAz6Btp6YrhcKe_exky8k,26283
7
8
  pangea/asyncio/services/authn.py,sha256=rPeLJweL8mYH_t4ebcQn4n_Wglr3kClKNnCXNCimZU4,46622
8
9
  pangea/asyncio/services/authz.py,sha256=B_0_nhDMJcjNpjpCx3Vi2LDRhlmfV9325GKbUZ8reos,10025
@@ -10,8 +11,9 @@ pangea/asyncio/services/base.py,sha256=vRFVcO_uEAGJte3OUUBLD43RoiiFB1vC7SPyN6yEM
10
11
  pangea/asyncio/services/embargo.py,sha256=ctzj3kip6xos-Eu3JuOskrCGYC8T3JlsgAopZHiPSXM,3068
11
12
  pangea/asyncio/services/file_scan.py,sha256=PLG1O-PL4Yk9uY9D6NbMrZ5LHg70Z311s7bFe46UMZA,7108
12
13
  pangea/asyncio/services/intel.py,sha256=BcxGKSoZ1nJiEHyZM9yOwKSSPJUrB6ibJ19KR27VlgQ,40261
14
+ pangea/asyncio/services/prompt_guard.py,sha256=gRh7Z-ZS21EN8vXXnK1OJ5kYvmOWxKppia8tZYeuhmM,2202
13
15
  pangea/asyncio/services/redact.py,sha256=JPJcmeKFloMZRpkjAHAZbpZJpO993WsTfEwA-S5ov18,7951
14
- pangea/asyncio/services/sanitize.py,sha256=4pRWBH595kFUXBkmu8euyk6H7F1M_-xXB2Qxnz6St6c,8627
16
+ pangea/asyncio/services/sanitize.py,sha256=EbSdq_v9yZWce9xEYWvZharE9bJcxw8cg5Pv8LVxdxc,8627
15
17
  pangea/asyncio/services/share.py,sha256=AXXtFtmbXud0dAAom7qqHVOK9zBfX5S10MFS_1DQvio,30767
16
18
  pangea/asyncio/services/vault.py,sha256=VqrJGSEdq6MlZRI6cJpkthhIsqLClSQdgVxwYCbIwEk,77079
17
19
  pangea/audit_logger.py,sha256=gRkCfUUT5LDNaycwxkhZUySgY47jDfn1ZeKOul4XCQI,3842
@@ -23,9 +25,10 @@ pangea/dump_audit.py,sha256=IevqaUUh7GDepdIW7slSxeZbkPrWIVbcX3sr4DgpJXI,7090
23
25
  pangea/exceptions.py,sha256=OBtzUECpNa6vNp8ySkHC-tm4QjFRCOAHBkMHqzAlOu8,5656
24
26
  pangea/file_uploader.py,sha256=4RQ44xt-faApC61nn2PlwHT7XYrJ4GeQA8Ug4tySEAg,1227
25
27
  pangea/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- pangea/request.py,sha256=zxFvqbeGYtxN29nS8SPPZKlcGCqdUtenxaq84pQ4cxs,24807
28
+ pangea/request.py,sha256=Xv2aWAmDBZ3oasIEMCHulsnXjAGzqubYTf3vRCcX2es,24942
27
29
  pangea/response.py,sha256=lPAcYsF9Xg166CiyhCofVmQA-W4jevh0MQXxUa8Re68,7737
28
- pangea/services/__init__.py,sha256=-QsZxRzRq_V1x1lmS_mu4310MNm0DkM4r6g6rfVGnOc,340
30
+ pangea/services/__init__.py,sha256=h36HzyIGaI5kO6l3UCwKHx_Kd-m_9mYVwn5MLRVzblI,408
31
+ pangea/services/ai_guard.py,sha256=-Ztyf9WUo1EB-gRzVH--OU62xzPoeVQ7BiFMTGUK5fI,3303
29
32
  pangea/services/audit/audit.py,sha256=7-c9l7jyGtpG7SqRUMpqsAzcUDhMZ5izgPalxHXsUvM,39320
30
33
  pangea/services/audit/exceptions.py,sha256=bhVuYe4ammacOVxwg98CChxvwZf5FKgR2DcgqILOcwc,471
31
34
  pangea/services/audit/models.py,sha256=1h1B9eSYQMYG3f8WNi1UcDX2-impRrET_ErjJYUnj7M,14678
@@ -38,8 +41,9 @@ pangea/services/base.py,sha256=43pWQcR9CeT4sGzgctF3Sy4M_h7DaUzkuZD2Z7CcDUU,3845
38
41
  pangea/services/embargo.py,sha256=9Wfku4td5ORaIENKmnGmS5jxJJIRfWp6Q51L36Jsy0I,3897
39
42
  pangea/services/file_scan.py,sha256=QiO80uKqB_BnAOiYQKznXfxpa5j40qqETE3-zBRT_QE,7813
40
43
  pangea/services/intel.py,sha256=y1EX2ctYIxQc52lmHp6-Q_UIDM--t3fOpXDssWiRPfo,56474
44
+ pangea/services/prompt_guard.py,sha256=baaYbYW_HoZJNB8NCIxxFjvJelqrl9UOtWa10-N1jgg,2312
41
45
  pangea/services/redact.py,sha256=ovIcT0jkXe57O7keGzSClWNCic8y-4NZoemXoSKjjww,12913
42
- pangea/services/sanitize.py,sha256=D_R_XIe9FvRCX40b8b_3gouhAGduDdxI9bT2w-kiVHU,13444
46
+ pangea/services/sanitize.py,sha256=eAN1HhObiKqygy6HHcfl0NmxYfPMvqSKepwEAVVIIEE,12936
43
47
  pangea/services/share/file_format.py,sha256=1svO1ee_aenA9zoO_AaU-Rk5Ulp7kcPOc_KwNoluyQE,2797
44
48
  pangea/services/share/share.py,sha256=b1Iuuog0XWXaI6rImoj0OeEx3DXbYqLWsLbCC_Zp6eg,52343
45
49
  pangea/services/vault/models/asymmetric.py,sha256=vspijmEvHm5WXri_fjOWfQc4maYyZfhDkLuaTM8-PZo,4991
@@ -51,6 +55,6 @@ pangea/services/vault/vault.py,sha256=ow-Zm7PYzfWIfUcA4UNnpeL2DHfZM4C7inRDmNR3zQ
51
55
  pangea/tools.py,sha256=2-Y4SAHWFv6Ocj42J_bWrVy27M5G3wi7a8LJn0dabHc,6427
52
56
  pangea/utils.py,sha256=dZ6MwFVEWXUgXvvDg-k6JnvVfsgslvtaBd7ez7afrqk,4983
53
57
  pangea/verify_audit.py,sha256=nSP17OzoSPdvezRExwfcf45H8ZPZnxZu-CbEp3qFJO0,17354
54
- pangea_sdk-5.3.0.dist-info/METADATA,sha256=2e69L19p5TJULmYohdKvrfSduUAO3UQGGJUt8jcwaQ4,6841
55
- pangea_sdk-5.3.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
56
- pangea_sdk-5.3.0.dist-info/RECORD,,
58
+ pangea_sdk-5.4.0b1.dist-info/METADATA,sha256=7kHpv2AVDGKa_KQJSTv5dZa1TlvM4VC1_bpddpL5o1M,6843
59
+ pangea_sdk-5.4.0b1.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
60
+ pangea_sdk-5.4.0b1.dist-info/RECORD,,