pangea-sdk 6.6.0__py3-none-any.whl → 6.8.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/services/ai_guard.py +81 -1
 - pangea/asyncio/services/prompt_guard.py +2 -1
 - pangea/services/ai_guard.py +218 -17
 - pangea/services/prompt_guard.py +9 -7
 - {pangea_sdk-6.6.0.dist-info → pangea_sdk-6.8.0.dist-info}/METADATA +5 -5
 - {pangea_sdk-6.6.0.dist-info → pangea_sdk-6.8.0.dist-info}/RECORD +8 -8
 - {pangea_sdk-6.6.0.dist-info → pangea_sdk-6.8.0.dist-info}/WHEEL +1 -1
 
    
        pangea/__init__.py
    CHANGED
    
    
| 
         @@ -1,12 +1,16 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            from __future__ import annotations
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            from collections.abc import Sequence
         
     | 
| 
      
 3 
     | 
    
         
            +
            from collections.abc import Mapping, Sequence
         
     | 
| 
       4 
4 
     | 
    
         
             
            from typing import overload
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
      
 6 
     | 
    
         
            +
            from typing_extensions import Any, Literal
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       6 
8 
     | 
    
         
             
            from pangea.asyncio.services.base import ServiceBaseAsync
         
     | 
| 
       7 
9 
     | 
    
         
             
            from pangea.config import PangeaConfig
         
     | 
| 
       8 
10 
     | 
    
         
             
            from pangea.response import PangeaResponse
         
     | 
| 
       9 
11 
     | 
    
         
             
            from pangea.services.ai_guard import (
         
     | 
| 
      
 12 
     | 
    
         
            +
                ExtraInfo,
         
     | 
| 
      
 13 
     | 
    
         
            +
                GuardResult,
         
     | 
| 
       10 
14 
     | 
    
         
             
                LogFields,
         
     | 
| 
       11 
15 
     | 
    
         
             
                McpToolsMessage,
         
     | 
| 
       12 
16 
     | 
    
         
             
                Message,
         
     | 
| 
         @@ -194,3 +198,79 @@ class AIGuardAsync(ServiceBaseAsync): 
     | 
|
| 
       194 
198 
     | 
    
         
             
                        )  # type: ignore[assignment]
         
     | 
| 
       195 
199 
     | 
    
         | 
| 
       196 
200 
     | 
    
         
             
                    return response
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
                async def guard(
         
     | 
| 
      
 203 
     | 
    
         
            +
                    self,
         
     | 
| 
      
 204 
     | 
    
         
            +
                    input: Mapping[str, Any],
         
     | 
| 
      
 205 
     | 
    
         
            +
                    *,
         
     | 
| 
      
 206 
     | 
    
         
            +
                    recipe: str | None = None,
         
     | 
| 
      
 207 
     | 
    
         
            +
                    debug: bool | None = None,
         
     | 
| 
      
 208 
     | 
    
         
            +
                    overrides: Overrides | None = None,
         
     | 
| 
      
 209 
     | 
    
         
            +
                    app_id: str | None = None,
         
     | 
| 
      
 210 
     | 
    
         
            +
                    actor_id: str | None = None,
         
     | 
| 
      
 211 
     | 
    
         
            +
                    llm_provider: str | None = None,
         
     | 
| 
      
 212 
     | 
    
         
            +
                    model: str | None = None,
         
     | 
| 
      
 213 
     | 
    
         
            +
                    model_version: str | None = None,
         
     | 
| 
      
 214 
     | 
    
         
            +
                    request_token_count: int | None = None,
         
     | 
| 
      
 215 
     | 
    
         
            +
                    response_token_count: int | None = None,
         
     | 
| 
      
 216 
     | 
    
         
            +
                    source_ip: str | None = None,
         
     | 
| 
      
 217 
     | 
    
         
            +
                    source_location: str | None = None,
         
     | 
| 
      
 218 
     | 
    
         
            +
                    tenant_id: str | None = None,
         
     | 
| 
      
 219 
     | 
    
         
            +
                    event_type: Literal["input", "output", "tool_input", "tool_output", "tool_listing"] | None = None,
         
     | 
| 
      
 220 
     | 
    
         
            +
                    collector_instance_id: str | None = None,
         
     | 
| 
      
 221 
     | 
    
         
            +
                    extra_info: ExtraInfo | None = None,
         
     | 
| 
      
 222 
     | 
    
         
            +
                    count_tokens: bool | None = None,
         
     | 
| 
      
 223 
     | 
    
         
            +
                ) -> PangeaResponse[GuardResult]:
         
     | 
| 
      
 224 
     | 
    
         
            +
                    """
         
     | 
| 
      
 225 
     | 
    
         
            +
                    Guard LLM input and output
         
     | 
| 
      
 226 
     | 
    
         
            +
             
     | 
| 
      
 227 
     | 
    
         
            +
                    Analyze and redact content to avoid manipulation of the model, addition
         
     | 
| 
      
 228 
     | 
    
         
            +
                    of malicious content, and other undesirable data transfers.
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
                    OperationId: ai_guard_post_v1_guard
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
                    Args:
         
     | 
| 
      
 233 
     | 
    
         
            +
                        input: 'messages' (required) contains Prompt content and role array
         
     | 
| 
      
 234 
     | 
    
         
            +
                            in JSON format. The `content` is the multimodal text or image
         
     | 
| 
      
 235 
     | 
    
         
            +
                            input that will be analyzed. Additional properties such as
         
     | 
| 
      
 236 
     | 
    
         
            +
                            'tools' may be provided for analysis.
         
     | 
| 
      
 237 
     | 
    
         
            +
                        recipe: Recipe key of a configuration of data types and settings defined in the Pangea User Console. It specifies the rules that are to be applied to the text, such as defang malicious URLs.
         
     | 
| 
      
 238 
     | 
    
         
            +
                        debug: Setting this value to true will provide a detailed analysis of the text data
         
     | 
| 
      
 239 
     | 
    
         
            +
                        app_name: Name of source application.
         
     | 
| 
      
 240 
     | 
    
         
            +
                        llm_provider: Underlying LLM.  Example: 'OpenAI'.
         
     | 
| 
      
 241 
     | 
    
         
            +
                        model: Model used to perform the event. Example: 'gpt'.
         
     | 
| 
      
 242 
     | 
    
         
            +
                        model_version: Model version used to perform the event. Example: '3.5'.
         
     | 
| 
      
 243 
     | 
    
         
            +
                        request_token_count: Number of tokens in the request.
         
     | 
| 
      
 244 
     | 
    
         
            +
                        response_token_count: Number of tokens in the response.
         
     | 
| 
      
 245 
     | 
    
         
            +
                        source_ip: IP address of user or app or agent.
         
     | 
| 
      
 246 
     | 
    
         
            +
                        source_location: Location of user or app or agent.
         
     | 
| 
      
 247 
     | 
    
         
            +
                        tenant_id: For gateway-like integrations with multi-tenant support.
         
     | 
| 
      
 248 
     | 
    
         
            +
                        event_type: (AIDR) Event Type.
         
     | 
| 
      
 249 
     | 
    
         
            +
                        collector_instance_id: (AIDR) collector instance id.
         
     | 
| 
      
 250 
     | 
    
         
            +
                        extra_info: (AIDR) Logging schema.
         
     | 
| 
      
 251 
     | 
    
         
            +
                        count_tokens: Provide input and output token count.
         
     | 
| 
      
 252 
     | 
    
         
            +
                    """
         
     | 
| 
      
 253 
     | 
    
         
            +
                    return await self.request.post(
         
     | 
| 
      
 254 
     | 
    
         
            +
                        "v1/guard",
         
     | 
| 
      
 255 
     | 
    
         
            +
                        GuardResult,
         
     | 
| 
      
 256 
     | 
    
         
            +
                        data={
         
     | 
| 
      
 257 
     | 
    
         
            +
                            "input": input,
         
     | 
| 
      
 258 
     | 
    
         
            +
                            "recipe": recipe,
         
     | 
| 
      
 259 
     | 
    
         
            +
                            "debug": debug,
         
     | 
| 
      
 260 
     | 
    
         
            +
                            "overrides": overrides,
         
     | 
| 
      
 261 
     | 
    
         
            +
                            "app_id": app_id,
         
     | 
| 
      
 262 
     | 
    
         
            +
                            "actor_id": actor_id,
         
     | 
| 
      
 263 
     | 
    
         
            +
                            "llm_provider": llm_provider,
         
     | 
| 
      
 264 
     | 
    
         
            +
                            "model": model,
         
     | 
| 
      
 265 
     | 
    
         
            +
                            "model_version": model_version,
         
     | 
| 
      
 266 
     | 
    
         
            +
                            "request_token_count": request_token_count,
         
     | 
| 
      
 267 
     | 
    
         
            +
                            "response_token_count": response_token_count,
         
     | 
| 
      
 268 
     | 
    
         
            +
                            "source_ip": source_ip,
         
     | 
| 
      
 269 
     | 
    
         
            +
                            "source_location": source_location,
         
     | 
| 
      
 270 
     | 
    
         
            +
                            "tenant_id": tenant_id,
         
     | 
| 
      
 271 
     | 
    
         
            +
                            "event_type": event_type,
         
     | 
| 
      
 272 
     | 
    
         
            +
                            "collector_instance_id": collector_instance_id,
         
     | 
| 
      
 273 
     | 
    
         
            +
                            "extra_info": extra_info,
         
     | 
| 
      
 274 
     | 
    
         
            +
                            "count_tokens": count_tokens,
         
     | 
| 
      
 275 
     | 
    
         
            +
                        },
         
     | 
| 
      
 276 
     | 
    
         
            +
                    )
         
     | 
| 
         @@ -2,6 +2,7 @@ from __future__ import annotations 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            from typing import TYPE_CHECKING
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
            from pangea._typing import SequenceNotStr
         
     | 
| 
       5 
6 
     | 
    
         
             
            from pangea.asyncio.services.base import ServiceBaseAsync
         
     | 
| 
       6 
7 
     | 
    
         
             
            from pangea.config import PangeaConfig
         
     | 
| 
       7 
8 
     | 
    
         
             
            from pangea.services.prompt_guard import GuardResult, Message
         
     | 
| 
         @@ -58,7 +59,7 @@ class PromptGuardAsync(ServiceBaseAsync): 
     | 
|
| 
       58 
59 
     | 
    
         
             
                    self,
         
     | 
| 
       59 
60 
     | 
    
         
             
                    messages: Iterable[Message],
         
     | 
| 
       60 
61 
     | 
    
         
             
                    *,
         
     | 
| 
       61 
     | 
    
         
            -
                    analyzers:  
     | 
| 
      
 62 
     | 
    
         
            +
                    analyzers: SequenceNotStr[str] | None = None,
         
     | 
| 
       62 
63 
     | 
    
         
             
                    classify: bool | None = None,
         
     | 
| 
       63 
64 
     | 
    
         
             
                ) -> PangeaResponse[GuardResult]:
         
     | 
| 
       64 
65 
     | 
    
         
             
                    """
         
     | 
    
        pangea/services/ai_guard.py
    CHANGED
    
    | 
         @@ -1,7 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            from __future__ import annotations
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            from collections.abc import Sequence
         
     | 
| 
       4 
     | 
    
         
            -
            from typing import Any, Generic, Literal, Optional, overload
         
     | 
| 
      
 3 
     | 
    
         
            +
            from collections.abc import Mapping, Sequence
         
     | 
| 
      
 4 
     | 
    
         
            +
            from typing import Annotated, Any, Generic, Literal, Optional, overload
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            from pydantic import BaseModel, ConfigDict, Field, RootModel
         
     | 
| 
       5 
7 
     | 
    
         | 
| 
       6 
8 
     | 
    
         
             
            from pangea._typing import T
         
     | 
| 
       7 
9 
     | 
    
         
             
            from pangea.config import PangeaConfig
         
     | 
| 
         @@ -148,6 +150,13 @@ class SecretsDetectionOverride(APIRequestModel): 
     | 
|
| 
       148 
150 
     | 
    
         
             
                pangea_token: Optional[PiiEntityAction] = None
         
     | 
| 
       149 
151 
     | 
    
         | 
| 
       150 
152 
     | 
    
         | 
| 
      
 153 
     | 
    
         
            +
            class ImageDetectionItems(APIRequestModel):
         
     | 
| 
      
 154 
     | 
    
         
            +
                disabled: Optional[bool] = None
         
     | 
| 
      
 155 
     | 
    
         
            +
                action: Optional[Literal["", "report", "block"]] = ""
         
     | 
| 
      
 156 
     | 
    
         
            +
                topics: Optional[list[str]] = None
         
     | 
| 
      
 157 
     | 
    
         
            +
                threshold: Annotated[Optional[float], Field(ge=0.0, le=1.0, multiple_of=0.01)] = None
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
       151 
160 
     | 
    
         
             
            class Overrides(APIRequestModel):
         
     | 
| 
       152 
161 
     | 
    
         
             
                """Overrides flags."""
         
     | 
| 
       153 
162 
     | 
    
         | 
| 
         @@ -157,6 +166,7 @@ class Overrides(APIRequestModel): 
     | 
|
| 
       157 
166 
     | 
    
         
             
                code_detection: Optional[CodeDetectionOverride] = None
         
     | 
| 
       158 
167 
     | 
    
         
             
                competitors: Optional[CompetitorsOverride] = None
         
     | 
| 
       159 
168 
     | 
    
         
             
                gibberish: Optional[GibberishOverride] = None
         
     | 
| 
      
 169 
     | 
    
         
            +
                image: Optional[ImageDetectionItems] = None
         
     | 
| 
       160 
170 
     | 
    
         
             
                language_detection: Optional[LanguageDetectionOverride] = None
         
     | 
| 
       161 
171 
     | 
    
         
             
                malicious_entity: Optional[MaliciousEntityOverride] = None
         
     | 
| 
       162 
172 
     | 
    
         
             
                pii_entity: Optional[PiiEntityOverride] = None
         
     | 
| 
         @@ -280,26 +290,26 @@ class CodeDetectionResult(APIResponseModel): 
     | 
|
| 
       280 
290 
     | 
    
         
             
                """The action taken by this Detector"""
         
     | 
| 
       281 
291 
     | 
    
         | 
| 
       282 
292 
     | 
    
         | 
| 
       283 
     | 
    
         
            -
            class  
     | 
| 
      
 293 
     | 
    
         
            +
            class GuardDetector(APIResponseModel, Generic[T]):
         
     | 
| 
       284 
294 
     | 
    
         
             
                detected: Optional[bool] = None
         
     | 
| 
       285 
295 
     | 
    
         
             
                data: Optional[T] = None
         
     | 
| 
       286 
296 
     | 
    
         | 
| 
       287 
297 
     | 
    
         | 
| 
       288 
298 
     | 
    
         
             
            class TextGuardDetectors(APIResponseModel):
         
     | 
| 
       289 
     | 
    
         
            -
                code_detection: Optional[ 
     | 
| 
       290 
     | 
    
         
            -
                competitors: Optional[ 
     | 
| 
       291 
     | 
    
         
            -
                custom_entity: Optional[ 
     | 
| 
       292 
     | 
    
         
            -
                gibberish: Optional[ 
     | 
| 
       293 
     | 
    
         
            -
                hardening: Optional[ 
     | 
| 
       294 
     | 
    
         
            -
                language_detection: Optional[ 
     | 
| 
       295 
     | 
    
         
            -
                malicious_entity: Optional[ 
     | 
| 
       296 
     | 
    
         
            -
                pii_entity: Optional[ 
     | 
| 
       297 
     | 
    
         
            -
                profanity_and_toxicity: Optional[ 
     | 
| 
       298 
     | 
    
         
            -
                prompt_injection: Optional[ 
     | 
| 
       299 
     | 
    
         
            -
                secrets_detection: Optional[ 
     | 
| 
       300 
     | 
    
         
            -
                selfharm: Optional[ 
     | 
| 
       301 
     | 
    
         
            -
                sentiment: Optional[ 
     | 
| 
       302 
     | 
    
         
            -
                topic: Optional[ 
     | 
| 
      
 299 
     | 
    
         
            +
                code_detection: Optional[GuardDetector[CodeDetectionResult]] = None
         
     | 
| 
      
 300 
     | 
    
         
            +
                competitors: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 301 
     | 
    
         
            +
                custom_entity: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 302 
     | 
    
         
            +
                gibberish: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 303 
     | 
    
         
            +
                hardening: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 304 
     | 
    
         
            +
                language_detection: Optional[GuardDetector[LanguageDetectionResult]] = None
         
     | 
| 
      
 305 
     | 
    
         
            +
                malicious_entity: Optional[GuardDetector[MaliciousEntityResult]] = None
         
     | 
| 
      
 306 
     | 
    
         
            +
                pii_entity: Optional[GuardDetector[PiiEntityResult]] = None
         
     | 
| 
      
 307 
     | 
    
         
            +
                profanity_and_toxicity: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 308 
     | 
    
         
            +
                prompt_injection: Optional[GuardDetector[PromptInjectionResult]] = None
         
     | 
| 
      
 309 
     | 
    
         
            +
                secrets_detection: Optional[GuardDetector[SecretsEntityResult]] = None
         
     | 
| 
      
 310 
     | 
    
         
            +
                selfharm: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 311 
     | 
    
         
            +
                sentiment: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 312 
     | 
    
         
            +
                topic: Optional[GuardDetector[TopicDetectionResult]] = None
         
     | 
| 
       303 
313 
     | 
    
         | 
| 
       304 
314 
     | 
    
         | 
| 
       305 
315 
     | 
    
         
             
            class PromptMessage(APIResponseModel):
         
     | 
| 
         @@ -336,6 +346,121 @@ class TextGuardResult(PangeaResponseResult): 
     | 
|
| 
       336 
346 
     | 
    
         
             
                """Whether or not the original input was transformed."""
         
     | 
| 
       337 
347 
     | 
    
         | 
| 
       338 
348 
     | 
    
         | 
| 
      
 349 
     | 
    
         
            +
            class Tool(RootModel[str]):
         
     | 
| 
      
 350 
     | 
    
         
            +
                root: Annotated[str, Field(min_length=1)]
         
     | 
| 
      
 351 
     | 
    
         
            +
                """Tool name"""
         
     | 
| 
      
 352 
     | 
    
         
            +
             
     | 
| 
      
 353 
     | 
    
         
            +
             
     | 
| 
      
 354 
     | 
    
         
            +
            class McpTool(APIRequestModel):
         
     | 
| 
      
 355 
     | 
    
         
            +
                server_name: Annotated[str, Field(min_length=1)]
         
     | 
| 
      
 356 
     | 
    
         
            +
                """MCP server name"""
         
     | 
| 
      
 357 
     | 
    
         
            +
             
     | 
| 
      
 358 
     | 
    
         
            +
                tools: Annotated[list[Tool], Field(min_length=1)]
         
     | 
| 
      
 359 
     | 
    
         
            +
             
     | 
| 
      
 360 
     | 
    
         
            +
             
     | 
| 
      
 361 
     | 
    
         
            +
            class ExtraInfo(BaseModel):
         
     | 
| 
      
 362 
     | 
    
         
            +
                """(AIDR) Logging schema."""
         
     | 
| 
      
 363 
     | 
    
         
            +
             
     | 
| 
      
 364 
     | 
    
         
            +
                # Additional properties are allowed here.
         
     | 
| 
      
 365 
     | 
    
         
            +
                model_config = ConfigDict(extra="allow")
         
     | 
| 
      
 366 
     | 
    
         
            +
             
     | 
| 
      
 367 
     | 
    
         
            +
                app_name: Optional[str] = None
         
     | 
| 
      
 368 
     | 
    
         
            +
                """Name of source application/agent."""
         
     | 
| 
      
 369 
     | 
    
         
            +
             
     | 
| 
      
 370 
     | 
    
         
            +
                app_group: Optional[str] = None
         
     | 
| 
      
 371 
     | 
    
         
            +
                """The group of source application/agent."""
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
                app_version: Optional[str] = None
         
     | 
| 
      
 374 
     | 
    
         
            +
                """Version of the source application/agent."""
         
     | 
| 
      
 375 
     | 
    
         
            +
             
     | 
| 
      
 376 
     | 
    
         
            +
                actor_name: Optional[str] = None
         
     | 
| 
      
 377 
     | 
    
         
            +
                """Name of subject actor/service account."""
         
     | 
| 
      
 378 
     | 
    
         
            +
             
     | 
| 
      
 379 
     | 
    
         
            +
                actor_group: Optional[str] = None
         
     | 
| 
      
 380 
     | 
    
         
            +
                """The group of subject actor."""
         
     | 
| 
      
 381 
     | 
    
         
            +
             
     | 
| 
      
 382 
     | 
    
         
            +
                source_region: Optional[str] = None
         
     | 
| 
      
 383 
     | 
    
         
            +
                """Geographic region or data center."""
         
     | 
| 
      
 384 
     | 
    
         
            +
             
     | 
| 
      
 385 
     | 
    
         
            +
                sub_tenant: Optional[str] = None
         
     | 
| 
      
 386 
     | 
    
         
            +
                """Sub tenant of the user or organization"""
         
     | 
| 
      
 387 
     | 
    
         
            +
                mcp_tools: Optional[Sequence[McpTool]] = None
         
     | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
      
 389 
     | 
    
         
            +
                """Each item groups tools for a given MCP server."""
         
     | 
| 
      
 390 
     | 
    
         
            +
             
     | 
| 
      
 391 
     | 
    
         
            +
             
     | 
| 
      
 392 
     | 
    
         
            +
            class AccessRuleResult(APIResponseModel):
         
     | 
| 
      
 393 
     | 
    
         
            +
                """
         
     | 
| 
      
 394 
     | 
    
         
            +
                Details about the evaluation of a single rule, including whether it matched,
         
     | 
| 
      
 395 
     | 
    
         
            +
                the action to take, the rule name, and optional debugging information.
         
     | 
| 
      
 396 
     | 
    
         
            +
                """
         
     | 
| 
      
 397 
     | 
    
         
            +
             
     | 
| 
      
 398 
     | 
    
         
            +
                matched: bool
         
     | 
| 
      
 399 
     | 
    
         
            +
                """Whether this rule's logic evaluated to true for the input."""
         
     | 
| 
      
 400 
     | 
    
         
            +
             
     | 
| 
      
 401 
     | 
    
         
            +
                action: str
         
     | 
| 
      
 402 
     | 
    
         
            +
                """
         
     | 
| 
      
 403 
     | 
    
         
            +
                The action resulting from the rule evaluation. One of 'allowed', 'blocked',
         
     | 
| 
      
 404 
     | 
    
         
            +
                or 'reported'.
         
     | 
| 
      
 405 
     | 
    
         
            +
                """
         
     | 
| 
      
 406 
     | 
    
         
            +
             
     | 
| 
      
 407 
     | 
    
         
            +
                name: str
         
     | 
| 
      
 408 
     | 
    
         
            +
                """A human-readable name for the rule."""
         
     | 
| 
      
 409 
     | 
    
         
            +
             
     | 
| 
      
 410 
     | 
    
         
            +
                logic: Optional[dict[str, Any]] = None
         
     | 
| 
      
 411 
     | 
    
         
            +
                """The JSON logic expression evaluated for this rule."""
         
     | 
| 
      
 412 
     | 
    
         
            +
             
     | 
| 
      
 413 
     | 
    
         
            +
                attributes: Optional[dict[str, Any]] = None
         
     | 
| 
      
 414 
     | 
    
         
            +
                """The input attribute values that were available during rule evaluation."""
         
     | 
| 
      
 415 
     | 
    
         
            +
             
     | 
| 
      
 416 
     | 
    
         
            +
             
     | 
| 
      
 417 
     | 
    
         
            +
            class GuardDetectors(APIResponseModel):
         
     | 
| 
      
 418 
     | 
    
         
            +
                """Result of the recipe analyzing and input prompt."""
         
     | 
| 
      
 419 
     | 
    
         
            +
             
     | 
| 
      
 420 
     | 
    
         
            +
                code: Optional[GuardDetector[CodeDetectionResult]] = None
         
     | 
| 
      
 421 
     | 
    
         
            +
                competitors: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 422 
     | 
    
         
            +
                confidential_and_pii_entity: Optional[GuardDetector[PiiEntityResult]] = None
         
     | 
| 
      
 423 
     | 
    
         
            +
                custom_entity: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 424 
     | 
    
         
            +
                language: Optional[GuardDetector[LanguageDetectionResult]] = None
         
     | 
| 
      
 425 
     | 
    
         
            +
                malicious_entity: Optional[GuardDetector[MaliciousEntityResult]] = None
         
     | 
| 
      
 426 
     | 
    
         
            +
                malicious_prompt: Optional[GuardDetector[PromptInjectionResult]] = None
         
     | 
| 
      
 427 
     | 
    
         
            +
                prompt_hardening: Optional[GuardDetector[object]] = None
         
     | 
| 
      
 428 
     | 
    
         
            +
                secret_and_key_entity: Optional[GuardDetector[SecretsEntityResult]] = None
         
     | 
| 
      
 429 
     | 
    
         
            +
                topic: Optional[GuardDetector[TopicDetectionResult]] = None
         
     | 
| 
      
 430 
     | 
    
         
            +
             
     | 
| 
      
 431 
     | 
    
         
            +
             
     | 
| 
      
 432 
     | 
    
         
            +
            class GuardResult(PangeaResponseResult):
         
     | 
| 
      
 433 
     | 
    
         
            +
                output: Optional[dict[str, Any]] = None
         
     | 
| 
      
 434 
     | 
    
         
            +
                """Updated structured prompt."""
         
     | 
| 
      
 435 
     | 
    
         
            +
             
     | 
| 
      
 436 
     | 
    
         
            +
                blocked: Optional[bool] = None
         
     | 
| 
      
 437 
     | 
    
         
            +
                """Whether or not the prompt triggered a block detection."""
         
     | 
| 
      
 438 
     | 
    
         
            +
             
     | 
| 
      
 439 
     | 
    
         
            +
                transformed: Optional[bool] = None
         
     | 
| 
      
 440 
     | 
    
         
            +
                """Whether or not the original input was transformed."""
         
     | 
| 
      
 441 
     | 
    
         
            +
             
     | 
| 
      
 442 
     | 
    
         
            +
                recipe: Optional[str] = None
         
     | 
| 
      
 443 
     | 
    
         
            +
                """The Recipe that was used."""
         
     | 
| 
      
 444 
     | 
    
         
            +
             
     | 
| 
      
 445 
     | 
    
         
            +
                detectors: GuardDetectors
         
     | 
| 
      
 446 
     | 
    
         
            +
                """Result of the recipe analyzing and input prompt."""
         
     | 
| 
      
 447 
     | 
    
         
            +
             
     | 
| 
      
 448 
     | 
    
         
            +
                access_rules: Optional[dict[str, AccessRuleResult]] = None
         
     | 
| 
      
 449 
     | 
    
         
            +
                """Result of the recipe evaluating configured rules"""
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
                fpe_context: Optional[str] = None
         
     | 
| 
      
 452 
     | 
    
         
            +
                """
         
     | 
| 
      
 453 
     | 
    
         
            +
                If an FPE redaction method returned results, this will be the context passed
         
     | 
| 
      
 454 
     | 
    
         
            +
                to unredact.
         
     | 
| 
      
 455 
     | 
    
         
            +
                """
         
     | 
| 
      
 456 
     | 
    
         
            +
             
     | 
| 
      
 457 
     | 
    
         
            +
                input_token_count: Optional[float] = None
         
     | 
| 
      
 458 
     | 
    
         
            +
                """Number of tokens counted in the input"""
         
     | 
| 
      
 459 
     | 
    
         
            +
             
     | 
| 
      
 460 
     | 
    
         
            +
                output_token_count: Optional[float] = None
         
     | 
| 
      
 461 
     | 
    
         
            +
                """Number of tokens counted in the output"""
         
     | 
| 
      
 462 
     | 
    
         
            +
             
     | 
| 
      
 463 
     | 
    
         
            +
             
     | 
| 
       339 
464 
     | 
    
         
             
            class AIGuard(ServiceBase):
         
     | 
| 
       340 
465 
     | 
    
         
             
                """AI Guard service client.
         
     | 
| 
       341 
466 
     | 
    
         | 
| 
         @@ -514,6 +639,82 @@ class AIGuard(ServiceBase): 
     | 
|
| 
       514 
639 
     | 
    
         | 
| 
       515 
640 
     | 
    
         
             
                    return response
         
     | 
| 
       516 
641 
     | 
    
         | 
| 
      
 642 
     | 
    
         
            +
                def guard(
         
     | 
| 
      
 643 
     | 
    
         
            +
                    self,
         
     | 
| 
      
 644 
     | 
    
         
            +
                    input: Mapping[str, Any],
         
     | 
| 
      
 645 
     | 
    
         
            +
                    *,
         
     | 
| 
      
 646 
     | 
    
         
            +
                    recipe: str | None = None,
         
     | 
| 
      
 647 
     | 
    
         
            +
                    debug: bool | None = None,
         
     | 
| 
      
 648 
     | 
    
         
            +
                    overrides: Overrides | None = None,
         
     | 
| 
      
 649 
     | 
    
         
            +
                    app_id: str | None = None,
         
     | 
| 
      
 650 
     | 
    
         
            +
                    actor_id: str | None = None,
         
     | 
| 
      
 651 
     | 
    
         
            +
                    llm_provider: str | None = None,
         
     | 
| 
      
 652 
     | 
    
         
            +
                    model: str | None = None,
         
     | 
| 
      
 653 
     | 
    
         
            +
                    model_version: str | None = None,
         
     | 
| 
      
 654 
     | 
    
         
            +
                    request_token_count: int | None = None,
         
     | 
| 
      
 655 
     | 
    
         
            +
                    response_token_count: int | None = None,
         
     | 
| 
      
 656 
     | 
    
         
            +
                    source_ip: str | None = None,
         
     | 
| 
      
 657 
     | 
    
         
            +
                    source_location: str | None = None,
         
     | 
| 
      
 658 
     | 
    
         
            +
                    tenant_id: str | None = None,
         
     | 
| 
      
 659 
     | 
    
         
            +
                    event_type: Literal["input", "output", "tool_input", "tool_output", "tool_listing"] | None = None,
         
     | 
| 
      
 660 
     | 
    
         
            +
                    collector_instance_id: str | None = None,
         
     | 
| 
      
 661 
     | 
    
         
            +
                    extra_info: ExtraInfo | None = None,
         
     | 
| 
      
 662 
     | 
    
         
            +
                    count_tokens: bool | None = None,
         
     | 
| 
      
 663 
     | 
    
         
            +
                ) -> PangeaResponse[GuardResult]:
         
     | 
| 
      
 664 
     | 
    
         
            +
                    """
         
     | 
| 
      
 665 
     | 
    
         
            +
                    Guard LLM input and output
         
     | 
| 
      
 666 
     | 
    
         
            +
             
     | 
| 
      
 667 
     | 
    
         
            +
                    Analyze and redact content to avoid manipulation of the model, addition
         
     | 
| 
      
 668 
     | 
    
         
            +
                    of malicious content, and other undesirable data transfers.
         
     | 
| 
      
 669 
     | 
    
         
            +
             
     | 
| 
      
 670 
     | 
    
         
            +
                    OperationId: ai_guard_post_v1_guard
         
     | 
| 
      
 671 
     | 
    
         
            +
             
     | 
| 
      
 672 
     | 
    
         
            +
                    Args:
         
     | 
| 
      
 673 
     | 
    
         
            +
                        input: 'messages' (required) contains Prompt content and role array
         
     | 
| 
      
 674 
     | 
    
         
            +
                            in JSON format. The `content` is the multimodal text or image
         
     | 
| 
      
 675 
     | 
    
         
            +
                            input that will be analyzed. Additional properties such as
         
     | 
| 
      
 676 
     | 
    
         
            +
                            'tools' may be provided for analysis.
         
     | 
| 
      
 677 
     | 
    
         
            +
                        recipe: Recipe key of a configuration of data types and settings defined in the Pangea User Console. It specifies the rules that are to be applied to the text, such as defang malicious URLs.
         
     | 
| 
      
 678 
     | 
    
         
            +
                        debug: Setting this value to true will provide a detailed analysis of the text data
         
     | 
| 
      
 679 
     | 
    
         
            +
                        app_name: Name of source application.
         
     | 
| 
      
 680 
     | 
    
         
            +
                        llm_provider: Underlying LLM.  Example: 'OpenAI'.
         
     | 
| 
      
 681 
     | 
    
         
            +
                        model: Model used to perform the event. Example: 'gpt'.
         
     | 
| 
      
 682 
     | 
    
         
            +
                        model_version: Model version used to perform the event. Example: '3.5'.
         
     | 
| 
      
 683 
     | 
    
         
            +
                        request_token_count: Number of tokens in the request.
         
     | 
| 
      
 684 
     | 
    
         
            +
                        response_token_count: Number of tokens in the response.
         
     | 
| 
      
 685 
     | 
    
         
            +
                        source_ip: IP address of user or app or agent.
         
     | 
| 
      
 686 
     | 
    
         
            +
                        source_location: Location of user or app or agent.
         
     | 
| 
      
 687 
     | 
    
         
            +
                        tenant_id: For gateway-like integrations with multi-tenant support.
         
     | 
| 
      
 688 
     | 
    
         
            +
                        event_type: (AIDR) Event Type.
         
     | 
| 
      
 689 
     | 
    
         
            +
                        collector_instance_id: (AIDR) collector instance id.
         
     | 
| 
      
 690 
     | 
    
         
            +
                        extra_info: (AIDR) Logging schema.
         
     | 
| 
      
 691 
     | 
    
         
            +
                        count_tokens: Provide input and output token count.
         
     | 
| 
      
 692 
     | 
    
         
            +
                    """
         
     | 
| 
      
 693 
     | 
    
         
            +
                    return self.request.post(
         
     | 
| 
      
 694 
     | 
    
         
            +
                        "v1/guard",
         
     | 
| 
      
 695 
     | 
    
         
            +
                        GuardResult,
         
     | 
| 
      
 696 
     | 
    
         
            +
                        data={
         
     | 
| 
      
 697 
     | 
    
         
            +
                            "input": input,
         
     | 
| 
      
 698 
     | 
    
         
            +
                            "recipe": recipe,
         
     | 
| 
      
 699 
     | 
    
         
            +
                            "debug": debug,
         
     | 
| 
      
 700 
     | 
    
         
            +
                            "overrides": overrides,
         
     | 
| 
      
 701 
     | 
    
         
            +
                            "app_id": app_id,
         
     | 
| 
      
 702 
     | 
    
         
            +
                            "actor_id": actor_id,
         
     | 
| 
      
 703 
     | 
    
         
            +
                            "llm_provider": llm_provider,
         
     | 
| 
      
 704 
     | 
    
         
            +
                            "model": model,
         
     | 
| 
      
 705 
     | 
    
         
            +
                            "model_version": model_version,
         
     | 
| 
      
 706 
     | 
    
         
            +
                            "request_token_count": request_token_count,
         
     | 
| 
      
 707 
     | 
    
         
            +
                            "response_token_count": response_token_count,
         
     | 
| 
      
 708 
     | 
    
         
            +
                            "source_ip": source_ip,
         
     | 
| 
      
 709 
     | 
    
         
            +
                            "source_location": source_location,
         
     | 
| 
      
 710 
     | 
    
         
            +
                            "tenant_id": tenant_id,
         
     | 
| 
      
 711 
     | 
    
         
            +
                            "event_type": event_type,
         
     | 
| 
      
 712 
     | 
    
         
            +
                            "collector_instance_id": collector_instance_id,
         
     | 
| 
      
 713 
     | 
    
         
            +
                            "extra_info": extra_info,
         
     | 
| 
      
 714 
     | 
    
         
            +
                            "count_tokens": count_tokens,
         
     | 
| 
      
 715 
     | 
    
         
            +
                        },
         
     | 
| 
      
 716 
     | 
    
         
            +
                    )
         
     | 
| 
      
 717 
     | 
    
         
            +
             
     | 
| 
       517 
718 
     | 
    
         | 
| 
       518 
719 
     | 
    
         
             
            def get_relevant_content(
         
     | 
| 
       519 
720 
     | 
    
         
             
                messages: Sequence[Message | McpToolsMessage],
         
     | 
    
        pangea/services/prompt_guard.py
    CHANGED
    
    | 
         @@ -1,7 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            from __future__ import annotations
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            from typing import TYPE_CHECKING, Literal, Optional
         
     | 
| 
      
 3 
     | 
    
         
            +
            from typing import TYPE_CHECKING, Annotated, Literal, Optional
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
            from pydantic import Field
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            from pangea._typing import SequenceNotStr
         
     | 
| 
       5 
8 
     | 
    
         
             
            from pangea.config import PangeaConfig
         
     | 
| 
       6 
9 
     | 
    
         
             
            from pangea.response import APIRequestModel, APIResponseModel, PangeaResponse, PangeaResponseResult
         
     | 
| 
       7 
10 
     | 
    
         
             
            from pangea.services.base import ServiceBase
         
     | 
| 
         @@ -33,19 +36,18 @@ class GuardResult(PangeaResponseResult): 
     | 
|
| 
       33 
36 
     | 
    
         
             
                detected: bool
         
     | 
| 
       34 
37 
     | 
    
         
             
                """Boolean response for if the prompt was considered malicious or not"""
         
     | 
| 
       35 
38 
     | 
    
         | 
| 
      
 39 
     | 
    
         
            +
                analyzer: Optional[str] = None
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
       36 
41 
     | 
    
         
             
                type: Optional[Literal["direct", "indirect", ""]] = None
         
     | 
| 
       37 
42 
     | 
    
         
             
                """Type of analysis, either direct or indirect"""
         
     | 
| 
       38 
43 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                 
     | 
| 
       40 
     | 
    
         
            -
                """Prompt Analyzers for identifying and rejecting properties of prompts"""
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                confidence: float
         
     | 
| 
      
 44 
     | 
    
         
            +
                confidence: Annotated[Optional[float], Field(ge=0.0, le=1.0)] = None
         
     | 
| 
       43 
45 
     | 
    
         
             
                """Percent of confidence in the detection result, ranging from 0 to 1"""
         
     | 
| 
       44 
46 
     | 
    
         | 
| 
       45 
47 
     | 
    
         
             
                info: Optional[str] = None
         
     | 
| 
       46 
48 
     | 
    
         
             
                """Extra information about the detection result"""
         
     | 
| 
       47 
49 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                classifications: list[Classification]
         
     | 
| 
      
 50 
     | 
    
         
            +
                classifications: Optional[list[Classification]] = None
         
     | 
| 
       49 
51 
     | 
    
         
             
                """List of classification results with labels and confidence scores"""
         
     | 
| 
       50 
52 
     | 
    
         | 
| 
       51 
53 
     | 
    
         | 
| 
         @@ -92,7 +94,7 @@ class PromptGuard(ServiceBase): 
     | 
|
| 
       92 
94 
     | 
    
         
             
                    self,
         
     | 
| 
       93 
95 
     | 
    
         
             
                    messages: Iterable[Message],
         
     | 
| 
       94 
96 
     | 
    
         
             
                    *,
         
     | 
| 
       95 
     | 
    
         
            -
                    analyzers:  
     | 
| 
      
 97 
     | 
    
         
            +
                    analyzers: SequenceNotStr[str] | None = None,
         
     | 
| 
       96 
98 
     | 
    
         
             
                    classify: bool | None = None,
         
     | 
| 
       97 
99 
     | 
    
         
             
                ) -> PangeaResponse[GuardResult]:
         
     | 
| 
       98 
100 
     | 
    
         
             
                    """
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Metadata-Version: 2.4
         
     | 
| 
       2 
2 
     | 
    
         
             
            Name: pangea-sdk
         
     | 
| 
       3 
     | 
    
         
            -
            Version: 6. 
     | 
| 
      
 3 
     | 
    
         
            +
            Version: 6.8.0
         
     | 
| 
       4 
4 
     | 
    
         
             
            Summary: Pangea API SDK
         
     | 
| 
       5 
5 
     | 
    
         
             
            Keywords: Pangea,SDK,Audit
         
     | 
| 
       6 
6 
     | 
    
         
             
            Author: Glenn Gallien
         
     | 
| 
         @@ -8,16 +8,16 @@ Author-email: Glenn Gallien <glenn.gallien@pangea.cloud> 
     | 
|
| 
       8 
8 
     | 
    
         
             
            License-Expression: MIT
         
     | 
| 
       9 
9 
     | 
    
         
             
            Classifier: Topic :: Software Development
         
     | 
| 
       10 
10 
     | 
    
         
             
            Classifier: Topic :: Software Development :: Libraries
         
     | 
| 
       11 
     | 
    
         
            -
            Requires-Dist: aiohttp>=3. 
     | 
| 
       12 
     | 
    
         
            -
            Requires-Dist: cryptography>= 
     | 
| 
      
 11 
     | 
    
         
            +
            Requires-Dist: aiohttp>=3.13.0,<4.0.0
         
     | 
| 
      
 12 
     | 
    
         
            +
            Requires-Dist: cryptography>=46.0.2,<47.0.0
         
     | 
| 
       13 
13 
     | 
    
         
             
            Requires-Dist: deprecated>=1.2.18,<2.0.0
         
     | 
| 
       14 
14 
     | 
    
         
             
            Requires-Dist: google-crc32c>=1.7.1,<2.0.0
         
     | 
| 
       15 
     | 
    
         
            -
            Requires-Dist: pydantic>=2. 
     | 
| 
      
 15 
     | 
    
         
            +
            Requires-Dist: pydantic>=2.12.0,<3.0.0
         
     | 
| 
       16 
16 
     | 
    
         
             
            Requires-Dist: python-dateutil>=2.9.0.post0,<3.0.0
         
     | 
| 
       17 
17 
     | 
    
         
             
            Requires-Dist: requests>=2.32.5,<3.0.0
         
     | 
| 
       18 
18 
     | 
    
         
             
            Requires-Dist: requests-toolbelt>=1.0.0,<2.0.0
         
     | 
| 
       19 
19 
     | 
    
         
             
            Requires-Dist: typing-extensions>=4.15.0,<5.0.0
         
     | 
| 
       20 
     | 
    
         
            -
            Requires-Dist: yarl>=1. 
     | 
| 
      
 20 
     | 
    
         
            +
            Requires-Dist: yarl>=1.22.0,<2.0.0
         
     | 
| 
       21 
21 
     | 
    
         
             
            Requires-Python: >=3.9.2, <4.0.0
         
     | 
| 
       22 
22 
     | 
    
         
             
            Project-URL: repository, https://github.com/pangeacyber/pangea-python
         
     | 
| 
       23 
23 
     | 
    
         
             
            Description-Content-Type: text/markdown
         
     | 
| 
         @@ -1,11 +1,11 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            pangea/__init__.py,sha256= 
     | 
| 
      
 1 
     | 
    
         
            +
            pangea/__init__.py,sha256=YNAWDtVJCD2ya_9rWjHp_k0zOxk2cXjhO1YQ0DPSthY,293
         
     | 
| 
       2 
2 
     | 
    
         
             
            pangea/_constants.py,sha256=gGGoQ6rhSiFEw1MKSGI588CHvFokG1Cf9SkkdPdRjVY,113
         
     | 
| 
       3 
3 
     | 
    
         
             
            pangea/_typing.py,sha256=pFBLkW2gPVZkgvMibQkovusQJZuGjhcqpkeRHnQrvds,798
         
     | 
| 
       4 
4 
     | 
    
         
             
            pangea/asyncio/__init__.py,sha256=96zytAbw70iKlqGwF12FCTf358_ijkBVNuo-1vBOyHI,79
         
     | 
| 
       5 
5 
     | 
    
         
             
            pangea/asyncio/file_uploader.py,sha256=Ln-FvsHM-fq4vpAvfoYQevesQgM-ycLqg2MT-58xoU0,1435
         
     | 
| 
       6 
6 
     | 
    
         
             
            pangea/asyncio/request.py,sha256=rLMUWGx6PZO7xCZAyvVcOQQRfBp7I0BmBRe3HE_YiLY,20943
         
     | 
| 
       7 
7 
     | 
    
         
             
            pangea/asyncio/services/__init__.py,sha256=j39Z0CpDAUzdn5C61b-kZCtv9JPXQfQ4wkJSSFp5kXM,803
         
     | 
| 
       8 
     | 
    
         
            -
            pangea/asyncio/services/ai_guard.py,sha256= 
     | 
| 
      
 8 
     | 
    
         
            +
            pangea/asyncio/services/ai_guard.py,sha256=FvyWidUhGaIsqrSjjmx-pll8C8TWAaYxM8NK33qPy2I,10865
         
     | 
| 
       9 
9 
     | 
    
         
             
            pangea/asyncio/services/audit.py,sha256=smZwzCKa37Wzo7yNqa-Rp7WCWNXXQCfjKA25PvxL8fo,26127
         
     | 
| 
       10 
10 
     | 
    
         
             
            pangea/asyncio/services/authn.py,sha256=jWNIQ2Sb-0vn3hHGKJ47Xm-_EDs58vbgX6NwU_a9E70,52815
         
     | 
| 
       11 
11 
     | 
    
         
             
            pangea/asyncio/services/authz.py,sha256=vtSQ3iEYUGL7aSn4S-UjiwzXHlMeAW0vp1fbU7rx6Y8,10796
         
     | 
| 
         @@ -13,7 +13,7 @@ pangea/asyncio/services/base.py,sha256=5SYEY5OVxpa5p0HtUV2OqpWNl8cP8qYxbQvpVgevZ 
     | 
|
| 
       13 
13 
     | 
    
         
             
            pangea/asyncio/services/embargo.py,sha256=ctzj3kip6xos-Eu3JuOskrCGYC8T3JlsgAopZHiPSXM,3068
         
     | 
| 
       14 
14 
     | 
    
         
             
            pangea/asyncio/services/file_scan.py,sha256=5Ckb3cXKpcoO7KTUu6ejr1uC43-6EJb91WuGOHroRHE,7202
         
     | 
| 
       15 
15 
     | 
    
         
             
            pangea/asyncio/services/intel.py,sha256=WpQe8zN7T_y7OUzyYg3bu8yiKEH4iH1G60CRF6q5c60,39541
         
     | 
| 
       16 
     | 
    
         
            -
            pangea/asyncio/services/prompt_guard.py,sha256= 
     | 
| 
      
 16 
     | 
    
         
            +
            pangea/asyncio/services/prompt_guard.py,sha256=VePQ0L1alkKyYiQppKqZIueVMF8ThxNPHQcom5iIMo8,2645
         
     | 
| 
       17 
17 
     | 
    
         
             
            pangea/asyncio/services/redact.py,sha256=356Kd5sww6wJsxA6DFIJvVEJle00n7HijdINb61YX9E,8014
         
     | 
| 
       18 
18 
     | 
    
         
             
            pangea/asyncio/services/sanitize.py,sha256=OybTAUfh_7vYRwb6Cjp4aHZoeHhIlg8caJ_BVrdbA1A,8691
         
     | 
| 
       19 
19 
     | 
    
         
             
            pangea/asyncio/services/share.py,sha256=AV9FbA-IMU5TFhcBtUHoXKDQYfOIWAJJZKW6vFohBbs,30816
         
     | 
| 
         @@ -30,7 +30,7 @@ pangea/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 
     | 
|
| 
       30 
30 
     | 
    
         
             
            pangea/request.py,sha256=PAbcRx746hSht20K_EOWPeQMjFzxjws7KfdMzzg_V10,27938
         
     | 
| 
       31 
31 
     | 
    
         
             
            pangea/response.py,sha256=1OG5bPWE0j3p77tWYivG_O_O2SD8h0Tuq9WlN6rOKS0,7821
         
     | 
| 
       32 
32 
     | 
    
         
             
            pangea/services/__init__.py,sha256=KP2U0-TcusW5H3GUFxS7Nc_LxxJ-X0uBbxeLQmGO6-o,667
         
     | 
| 
       33 
     | 
    
         
            -
            pangea/services/ai_guard.py,sha256= 
     | 
| 
      
 33 
     | 
    
         
            +
            pangea/services/ai_guard.py,sha256=saxhJnoQzzI06tfRtTLF_pCT5AbGxL_44ezaqXlXXSU,27261
         
     | 
| 
       34 
34 
     | 
    
         
             
            pangea/services/audit/audit.py,sha256=40jrCAOuZym_QsEfhghIjPm3KKWwPx9B3ZKJ-T7R4W4,39231
         
     | 
| 
       35 
35 
     | 
    
         
             
            pangea/services/audit/exceptions.py,sha256=bhVuYe4ammacOVxwg98CChxvwZf5FKgR2DcgqILOcwc,471
         
     | 
| 
       36 
36 
     | 
    
         
             
            pangea/services/audit/models.py,sha256=pE4jtYAn_c5JdPrXBfpKHwpRAqO_DTSCOy-QHkPMajw,15471
         
     | 
| 
         @@ -43,7 +43,7 @@ pangea/services/base.py,sha256=cnxwCSqZt-lvYG9etbJRXVxtHH67uMW07ptfVbfVfq4,3864 
     | 
|
| 
       43 
43 
     | 
    
         
             
            pangea/services/embargo.py,sha256=3rE3ImjBg2VUXQljGZICedsr14psWdymC2pmmdJF2co,4000
         
     | 
| 
       44 
44 
     | 
    
         
             
            pangea/services/file_scan.py,sha256=gSla3VUmgl3iA7DcrCf1BKopvunPG5ecIvX4DwzYOvc,7952
         
     | 
| 
       45 
45 
     | 
    
         
             
            pangea/services/intel.py,sha256=1aglQxS1skMM6RMdXdjIiRq3jv4hMTtp-DbFbuHj3Hs,55159
         
     | 
| 
       46 
     | 
    
         
            -
            pangea/services/prompt_guard.py,sha256= 
     | 
| 
      
 46 
     | 
    
         
            +
            pangea/services/prompt_guard.py,sha256=Fc0ujgIX-x_pqcUmZQT5itQv3bPxLBW2G5YZrkxhheI,3561
         
     | 
| 
       47 
47 
     | 
    
         
             
            pangea/services/redact.py,sha256=LJMHPK8hDxPLEVNfRgESAWgL4GBMiJC_pr1wXGb79W8,13225
         
     | 
| 
       48 
48 
     | 
    
         
             
            pangea/services/sanitize.py,sha256=0ZlCrEg8imJtRyovy4qZJb1ZAZ8ppIOQTj_nocBJ2CM,13019
         
     | 
| 
       49 
49 
     | 
    
         
             
            pangea/services/share/file_format.py,sha256=1svO1ee_aenA9zoO_AaU-Rk5Ulp7kcPOc_KwNoluyQE,2797
         
     | 
| 
         @@ -57,6 +57,6 @@ pangea/services/vault/vault.py,sha256=PJs1YlTud1cPnhyUDMguIEyhN0i-haG1kuzA_4hygE 
     | 
|
| 
       57 
57 
     | 
    
         
             
            pangea/tools.py,sha256=JkwVplvx7MCPRSdPhFTLvOl6h7btaUbXEuHgUy0EHBU,6452
         
     | 
| 
       58 
58 
     | 
    
         
             
            pangea/utils.py,sha256=QwTODI_D8by86uXeA0MpdhJICvz5baKUtfv1rguQshU,4943
         
     | 
| 
       59 
59 
     | 
    
         
             
            pangea/verify_audit.py,sha256=-VepQKHtSqZRqhIKiUtLufa7ywwdMNLN2SuhingMooU,17288
         
     | 
| 
       60 
     | 
    
         
            -
            pangea_sdk-6. 
     | 
| 
       61 
     | 
    
         
            -
            pangea_sdk-6. 
     | 
| 
       62 
     | 
    
         
            -
            pangea_sdk-6. 
     | 
| 
      
 60 
     | 
    
         
            +
            pangea_sdk-6.8.0.dist-info/WHEEL,sha256=X16MKk8bp2DRsAuyteHJ-9qOjzmnY0x1aj0P1ftqqWA,78
         
     | 
| 
      
 61 
     | 
    
         
            +
            pangea_sdk-6.8.0.dist-info/METADATA,sha256=viphu-M9tqiG5RBx4vSgGO6D0pK7UDfQxPcwbxMbIJo,8028
         
     | 
| 
      
 62 
     | 
    
         
            +
            pangea_sdk-6.8.0.dist-info/RECORD,,
         
     |