enkryptai-sdk 1.0.17__py3-none-any.whl → 1.0.19__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.
enkryptai_sdk/config.py CHANGED
@@ -16,6 +16,7 @@ DEFAULT_GUARDRAILS_CONFIG = {
16
16
  "bias": {"enabled": False},
17
17
  "copyright_ip": {"enabled": False},
18
18
  "system_prompt": {"enabled": False, "index": "system"},
19
+ "sponge_attack": {"enabled": False},
19
20
  }
20
21
 
21
22
 
@@ -151,6 +152,15 @@ class GuardrailsConfig:
151
152
  config = copy.deepcopy(DEFAULT_GUARDRAILS_CONFIG)
152
153
  config["system_prompt"] = {"enabled": True, "index": index}
153
154
  return cls(config)
155
+
156
+ @classmethod
157
+ def sponge_attack(cls):
158
+ """
159
+ Returns a configuration instance pre-configured for sponge attack detection.
160
+ """
161
+ config = copy.deepcopy(DEFAULT_GUARDRAILS_CONFIG)
162
+ config["sponge_attack"] = {"enabled": True}
163
+ return cls(config)
154
164
 
155
165
  def update(self, **kwargs):
156
166
  """
@@ -0,0 +1,64 @@
1
+ # To avoid circular imports
2
+ from enum import Enum
3
+ from .base import BaseDTO
4
+ from typing import Dict, List, Optional, Any
5
+ from dataclasses import dataclass, field, asdict
6
+
7
+
8
+ class ModelAuthTypeEnum(str, Enum):
9
+ APIKEY = "apikey"
10
+ JWT = "jwt"
11
+
12
+
13
+ class ModelJwtMethodEnum(str, Enum):
14
+ POST = "POST"
15
+ GET = "GET"
16
+
17
+
18
+ @dataclass
19
+ class CustomHeader(BaseDTO):
20
+ key: str
21
+ value: str
22
+
23
+ @classmethod
24
+ def from_dict(cls, data: Dict[str, Any]) -> "CustomHeader":
25
+ return cls(
26
+ key=data.get("key", ""),
27
+ value=data.get("value", "")
28
+ )
29
+
30
+ def to_dict(self) -> Dict[str, Any]:
31
+ return {
32
+ "key": self.key,
33
+ "value": self.value
34
+ }
35
+
36
+
37
+ @dataclass
38
+ class ModelJwtConfig(BaseDTO):
39
+ jwt_method: ModelJwtMethodEnum = ModelJwtMethodEnum.POST
40
+ jwt_url: str = ""
41
+ jwt_headers: List[CustomHeader] = field(default_factory=list)
42
+ jwt_body: str = ""
43
+ jwt_response_key: str = ""
44
+ _extra_fields: Dict[str, Any] = field(default_factory=dict)
45
+
46
+ @classmethod
47
+ def from_dict(cls, data: Dict[str, Any]) -> "ModelJwtConfig":
48
+ return cls(
49
+ jwt_method=ModelJwtMethodEnum(data.get("jwt_method", ModelJwtMethodEnum.POST)),
50
+ jwt_url=data.get("jwt_url", ""),
51
+ jwt_headers=[CustomHeader.from_dict(header) for header in data.get("jwt_headers", [])],
52
+ jwt_body=data.get("jwt_body", ""),
53
+ jwt_response_key=data.get("jwt_response_key", ""),
54
+ )
55
+
56
+ def to_dict(self) -> Dict[str, Any]:
57
+ return {
58
+ "jwt_method": self.jwt_method.value,
59
+ "jwt_url": self.jwt_url,
60
+ "jwt_headers": [header.to_dict() for header in self.jwt_headers],
61
+ "jwt_body": self.jwt_body,
62
+ "jwt_response_key": self.jwt_response_key,
63
+ }
64
+
@@ -15,6 +15,7 @@ class InputGuardrailBlockType(str, Enum):
15
15
  BIAS = "bias"
16
16
  SYSTEM_PROMPT = "system_prompt"
17
17
  COPYRIGHT_IP = "copyright_ip"
18
+ SPONGE_ATTACK = "sponge_attack"
18
19
 
19
20
 
20
21
  class OutputGuardrailBlockType(str, Enum):
@@ -28,6 +29,7 @@ class OutputGuardrailBlockType(str, Enum):
28
29
  BIAS = "bias"
29
30
  SYSTEM_PROMPT = "system_prompt"
30
31
  COPYRIGHT_IP = "copyright_ip"
32
+ SPONGE_ATTACK = "sponge_attack"
31
33
  HALLUCINATION = "hallucination"
32
34
  ADHERENCE = "adherence"
33
35
  RELEVANCY = "relevancy"
@@ -243,6 +243,23 @@ class SystemPromptDetector(BaseDTO):
243
243
  }
244
244
 
245
245
 
246
+ @dataclass
247
+ class SpongeAttackDetector(BaseDTO):
248
+ enabled: bool = False
249
+ _extra_fields: Dict[str, Any] = field(default_factory=dict)
250
+
251
+ @classmethod
252
+ def from_dict(cls, data: Dict[str, Any]) -> "SpongeAttackDetector":
253
+ return cls(
254
+ enabled=data.get("enabled", False)
255
+ )
256
+
257
+ def to_dict(self) -> Dict[str, Any]:
258
+ return {
259
+ "enabled": self.enabled
260
+ }
261
+
262
+
246
263
  class GuardrailDetectorsEnum(str, Enum):
247
264
  TOPIC_DETECTOR = "topic_detector"
248
265
  NSFW = "nsfw"
@@ -254,6 +271,7 @@ class GuardrailDetectorsEnum(str, Enum):
254
271
  BIAS = "bias"
255
272
  COPYRIGHT_IP = "copyright_ip"
256
273
  SYSTEM_PROMPT = "system_prompt"
274
+ SPONGE_ATTACK = "sponge_attack"
257
275
 
258
276
 
259
277
  @dataclass
@@ -268,6 +286,7 @@ class GuardrailDetectors(BaseDTO):
268
286
  bias: BiasDetector = field(default_factory=BiasDetector)
269
287
  copyright_ip: CopyrightIPDetector = field(default_factory=CopyrightIPDetector)
270
288
  system_prompt: SystemPromptDetector = field(default_factory=SystemPromptDetector)
289
+ sponge_attack: SpongeAttackDetector = field(default_factory=SpongeAttackDetector)
271
290
  _extra_fields: Dict[str, Any] = field(default_factory=dict)
272
291
 
273
292
  @classmethod
@@ -282,7 +301,8 @@ class GuardrailDetectors(BaseDTO):
282
301
  policy_violation=PolicyViolationDetector.from_dict(data.get("policy_violation", {})),
283
302
  bias=BiasDetector.from_dict(data.get("bias", {})),
284
303
  copyright_ip=CopyrightIPDetector.from_dict(data.get("copyright_ip", {})),
285
- system_prompt=SystemPromptDetector.from_dict(data.get("system_prompt", {}))
304
+ system_prompt=SystemPromptDetector.from_dict(data.get("system_prompt", {})),
305
+ sponge_attack=SpongeAttackDetector.from_dict(data.get("sponge_attack", {}))
286
306
  )
287
307
 
288
308
  def to_dict(self) -> Dict[str, Any]:
@@ -296,7 +316,8 @@ class GuardrailDetectors(BaseDTO):
296
316
  "policy_violation": self.policy_violation.to_dict(),
297
317
  "bias": self.bias.to_dict(),
298
318
  "copyright_ip": self.copyright_ip.to_dict(),
299
- "system_prompt": self.system_prompt.to_dict()
319
+ "system_prompt": self.system_prompt.to_dict(),
320
+ "sponge_attack": self.sponge_attack.to_dict()
300
321
  }
301
322
 
302
323
 
@@ -608,6 +629,25 @@ class SystemPromptDetail(BaseDTO):
608
629
  return result
609
630
 
610
631
 
632
+ @dataclass
633
+ class SpongeAttackDetail(BaseDTO):
634
+ sponge_attack_detected: bool = False
635
+ _extra_fields: Dict[str, Any] = field(default_factory=dict)
636
+
637
+ @classmethod
638
+ def from_dict(cls, data: Dict[str, Any]) -> "SpongeAttackDetail":
639
+ return cls(
640
+ sponge_attack_detected=data.get("sponge_attack_detected", False)
641
+ )
642
+
643
+ def to_dict(self) -> Dict[str, Any]:
644
+ result = {
645
+ "sponge_attack_detected": self.sponge_attack_detected
646
+ }
647
+ result.update(self._extra_fields)
648
+ return result
649
+
650
+
611
651
  @dataclass
612
652
  class DetectResponseSummary(BaseDTO):
613
653
  on_topic: int = 0
@@ -620,6 +660,7 @@ class DetectResponseSummary(BaseDTO):
620
660
  bias: int = 0
621
661
  copyright_ip_similarity: int = 0
622
662
  system_prompt_similarity: int = 0
663
+ sponge_attack: int = 0
623
664
  _extra_fields: Dict[str, Any] = field(default_factory=dict)
624
665
 
625
666
  @classmethod
@@ -634,7 +675,8 @@ class DetectResponseSummary(BaseDTO):
634
675
  policy_violation=data.get("policy_violation", 0),
635
676
  bias=data.get("bias", 0),
636
677
  copyright_ip_similarity=data.get("copyright_ip_similarity", 0),
637
- system_prompt_similarity=data.get("system_prompt_similarity", 0)
678
+ system_prompt_similarity=data.get("system_prompt_similarity", 0),
679
+ sponge_attack=data.get("sponge_attack", 0)
638
680
  )
639
681
 
640
682
  def to_dict(self) -> Dict[str, Any]:
@@ -648,7 +690,8 @@ class DetectResponseSummary(BaseDTO):
648
690
  "policy_violation": self.policy_violation,
649
691
  "bias": self.bias,
650
692
  "copyright_ip_similarity": self.copyright_ip_similarity,
651
- "system_prompt_similarity": self.system_prompt_similarity
693
+ "system_prompt_similarity": self.system_prompt_similarity,
694
+ "sponge_attack": self.sponge_attack
652
695
  }
653
696
  result.update(self._extra_fields)
654
697
  return result
@@ -666,6 +709,7 @@ class DetectResponseDetails(BaseDTO):
666
709
  bias: BiasDetail = field(default_factory=BiasDetail)
667
710
  copyright_ip: CopyrightIPDetail = field(default_factory=CopyrightIPDetail)
668
711
  system_prompt: SystemPromptDetail = field(default_factory=SystemPromptDetail)
712
+ sponge_attack: SpongeAttackDetail = field(default_factory=SpongeAttackDetail)
669
713
  _extra_fields: Dict[str, Any] = field(default_factory=dict)
670
714
 
671
715
  @classmethod
@@ -680,7 +724,8 @@ class DetectResponseDetails(BaseDTO):
680
724
  policy_violation=PolicyViolationDetail.from_dict(data.get("policy_violation", {})),
681
725
  bias=BiasDetail.from_dict(data.get("bias", {})),
682
726
  copyright_ip=CopyrightIPDetail.from_dict(data.get("copyright_ip", {})),
683
- system_prompt=SystemPromptDetail.from_dict(data.get("system_prompt", {}))
727
+ system_prompt=SystemPromptDetail.from_dict(data.get("system_prompt", {})),
728
+ sponge_attack=SpongeAttackDetail.from_dict(data.get("sponge_attack", {}))
684
729
  )
685
730
 
686
731
  def to_dict(self) -> Dict[str, Any]:
@@ -694,7 +739,8 @@ class DetectResponseDetails(BaseDTO):
694
739
  "policy_violation": self.policy_violation.to_dict(),
695
740
  "bias": self.bias.to_dict(),
696
741
  "copyright_ip": self.copyright_ip.to_dict(),
697
- "system_prompt": self.system_prompt.to_dict()
742
+ "system_prompt": self.system_prompt.to_dict(),
743
+ "sponge_attack": self.sponge_attack.to_dict()
698
744
  }
699
745
  result.update(self._extra_fields)
700
746
  return result
@@ -5,7 +5,7 @@ from .base import BaseDTO
5
5
  from tabulate import tabulate
6
6
  from dataclasses import dataclass, field, asdict
7
7
  from typing import Optional, List, Set, Dict, Any
8
- from .red_team import ModelAuthTypeEnum, CustomHeader, ModelJwtConfig
8
+ from .common import ModelAuthTypeEnum, CustomHeader, ModelJwtConfig
9
9
 
10
10
 
11
11
  # class Modality(Enum):
@@ -3,9 +3,11 @@ from enum import Enum
3
3
  from .base import BaseDTO
4
4
  from typing import Dict, List, Optional, Any
5
5
  from dataclasses import dataclass, field, asdict
6
+
6
7
  from .datasets import DatasetConfig
7
8
  from .models import ModelConfig
8
9
  from .guardrails import GuardrailDetectors
10
+ from .common import ModelAuthTypeEnum, CustomHeader, ModelJwtConfig
9
11
 
10
12
  # The risk mitigation do not support all detectors, so we need to create a separate enum for them.
11
13
  class RiskGuardrailDetectorsEnum(str, Enum):
@@ -18,64 +20,7 @@ class RiskGuardrailDetectorsEnum(str, Enum):
18
20
  # Below are not yet supported by Guardrails. So, also not supported by Risk Mitigation.
19
21
  # COPYRIGHT_IP = "copyright_ip"
20
22
  # SYSTEM_PROMPT = "system_prompt"
21
-
22
-
23
- class ModelAuthTypeEnum(str, Enum):
24
- APIKEY = "apikey"
25
- JWT = "jwt"
26
-
27
-
28
- class ModelJwtMethodEnum(str, Enum):
29
- POST = "POST"
30
- GET = "GET"
31
-
32
-
33
- @dataclass
34
- class CustomHeader(BaseDTO):
35
- key: str
36
- value: str
37
-
38
- @classmethod
39
- def from_dict(cls, data: Dict[str, Any]) -> "CustomHeader":
40
- return cls(
41
- key=data.get("key", ""),
42
- value=data.get("value", "")
43
- )
44
-
45
- def to_dict(self) -> Dict[str, Any]:
46
- return {
47
- "key": self.key,
48
- "value": self.value
49
- }
50
-
51
-
52
- @dataclass
53
- class ModelJwtConfig(BaseDTO):
54
- jwt_method: ModelJwtMethodEnum = ModelJwtMethodEnum.POST
55
- jwt_url: str = ""
56
- jwt_headers: List[CustomHeader] = field(default_factory=list)
57
- jwt_body: str = ""
58
- jwt_response_key: str = ""
59
- _extra_fields: Dict[str, Any] = field(default_factory=dict)
60
-
61
- @classmethod
62
- def from_dict(cls, data: Dict[str, Any]) -> "ModelJwtConfig":
63
- return cls(
64
- jwt_method=ModelJwtMethodEnum(data.get("jwt_method", ModelJwtMethodEnum.POST)),
65
- jwt_url=data.get("jwt_url", ""),
66
- jwt_headers=[CustomHeader.from_dict(header) for header in data.get("jwt_headers", [])],
67
- jwt_body=data.get("jwt_body", ""),
68
- jwt_response_key=data.get("jwt_response_key", ""),
69
- )
70
-
71
- def to_dict(self) -> Dict[str, Any]:
72
- return {
73
- "jwt_method": self.jwt_method.value,
74
- "jwt_url": self.jwt_url,
75
- "jwt_headers": [header.to_dict() for header in self.jwt_headers],
76
- "jwt_body": self.jwt_body,
77
- "jwt_response_key": self.jwt_response_key,
78
- }
23
+ # SPONGE_ATTACK = "sponge_attack"
79
24
 
80
25
 
81
26
  @dataclass
@@ -416,6 +361,28 @@ class TestConfig(BaseDTO):
416
361
  return cls(**data, attack_methods=attack_methods)
417
362
 
418
363
 
364
+ @dataclass
365
+ class CompetitorTestConfig(BaseDTO):
366
+ system_description: str
367
+ competitors_list: List[str]
368
+ sample_percentage: int = 1
369
+ attack_methods: AttackMethods = field(default_factory=AttackMethods)
370
+
371
+ def to_dict(self) -> dict:
372
+ return {
373
+ "sample_percentage": self.sample_percentage,
374
+ "competitors_list": self.competitors_list,
375
+ "system_description": self.system_description,
376
+ "attack_methods": self.attack_methods.to_dict(),
377
+ }
378
+
379
+ @classmethod
380
+ def from_dict(cls, data: dict):
381
+ data = data.copy()
382
+ attack_methods = AttackMethods.from_dict(data.pop("attack_methods", {}))
383
+ return cls(**data, attack_methods=attack_methods)
384
+
385
+
419
386
  @dataclass
420
387
  class RedTeamTestConfigurations(BaseDTO):
421
388
  # Basic tests
@@ -424,6 +391,12 @@ class RedTeamTestConfigurations(BaseDTO):
424
391
  insecure_code_test: TestConfig = field(default=None)
425
392
  toxicity_test: TestConfig = field(default=None)
426
393
  harmful_test: TestConfig = field(default=None)
394
+ pii_test: TestConfig = field(default=None)
395
+ copyright_test: TestConfig = field(default=None)
396
+ misinformation_test: TestConfig = field(default=None)
397
+ system_prompt_extractions_test: TestConfig = field(default=None)
398
+ sponge_test: TestConfig = field(default=None)
399
+ competitor_test: CompetitorTestConfig = field(default=None)
427
400
  # Advanced tests
428
401
  adv_info_test: TestConfig = field(default=None)
429
402
  adv_bias_test: TestConfig = field(default=None)
@@ -442,6 +415,13 @@ class RedTeamTestConfigurations(BaseDTO):
442
415
  access_control_test: TestConfig = field(default=None)
443
416
  physical_and_actuation_safety_test: TestConfig = field(default=None)
444
417
  reliability_and_monitoring_test: TestConfig = field(default=None)
418
+ governance_test: TestConfig = field(default=None)
419
+ agent_output_quality_test: TestConfig = field(default=None)
420
+ tool_misuse_test: TestConfig = field(default=None)
421
+ privacy_test: TestConfig = field(default=None)
422
+ reliability_and_observability_test: TestConfig = field(default=None)
423
+ agent_behaviour_test: TestConfig = field(default=None)
424
+ access_control_and_permissions_test: TestConfig = field(default=None)
445
425
  _extra_fields: Dict[str, Any] = field(default_factory=dict)
446
426
 
447
427
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: enkryptai-sdk
3
- Version: 1.0.17
3
+ Version: 1.0.19
4
4
  Summary: A Python SDK with guardrails and red teaming functionality for API interactions
5
5
  Home-page: https://github.com/enkryptai/enkryptai-sdk
6
6
  Author: Enkrypt AI Team
@@ -275,6 +275,9 @@ sample_detectors = {
275
275
  },
276
276
  "bias": {
277
277
  "enabled": False
278
+ },
279
+ "sponge_attack": {
280
+ "enabled": False
278
281
  }
279
282
  }
280
283
  ```
@@ -984,6 +987,7 @@ print(batch_detect_response.to_dict())
984
987
  - `copyright_ip`: Check for copyright/IP violations ***(Coming soon)***
985
988
  - `system_prompt`: Detect system prompt leaks ***(Coming soon)***
986
989
  - `keyword_detector`: Check for specific keywords
990
+ - `sponge_attack`: Detect infinite loops
987
991
 
988
992
  Each detector can be enabled/disabled and configured with specific options as documented in the [API docs](https://docs.enkryptai.com/guardrails-api-reference/introduction).
989
993
 
@@ -1058,6 +1062,12 @@ guardrails_config = GuardrailsConfig.copyright_ip()
1058
1062
  guardrails_config = GuardrailsConfig.system_prompt(index="system")
1059
1063
  ```
1060
1064
 
1065
+ ### [Sponge Attack](https://docs.enkryptai.com/guardrails-api-reference/Sponge_Attack_Detector)
1066
+
1067
+ ```python Python
1068
+ guardrails_config = GuardrailsConfig.sponge_attack()
1069
+ ```
1070
+
1061
1071
  ## [Detect with config](https://docs.enkryptai.com/guardrails-api-reference/Detect)
1062
1072
 
1063
1073
  ```python Python
@@ -1656,7 +1666,7 @@ custom_headers = {
1656
1666
 
1657
1667
  # Example of making a request with custom headers
1658
1668
  response = client.chat.completions.create(
1659
- model='gpt-4o',
1669
+ # model='gpt-4o', # Optional
1660
1670
  messages=[{'role': 'user', 'content': 'Hello!'}],
1661
1671
  extra_headers=custom_headers
1662
1672
  )
@@ -2,7 +2,7 @@ enkryptai_sdk/__init__.py,sha256=8H5tznmjirTVdrTmrsyU6fNVRj3-UC0nrTGkzfFp0h0,845
2
2
  enkryptai_sdk/ai_proxy.py,sha256=ot1lqKk2LjcvlpnFm2kSA51vFThfquVlx86BhSbAzBo,3823
3
3
  enkryptai_sdk/base.py,sha256=KonezvdjVzIr3gw75grzcCNyhzI_sHXi-Cb9tRJgSDE,3277
4
4
  enkryptai_sdk/coc.py,sha256=5rq9LhZX-uvCmX8fM6JEndIEvd8rSzsSfDFnTvSvTQE,7396
5
- enkryptai_sdk/config.py,sha256=PyyuJRKWuiuFUaI90M21M141wlfIBeO_QVDU36KHKCs,9065
5
+ enkryptai_sdk/config.py,sha256=zUlWFr33JVz_kzUl3JalXeq-s1q0Qvyi4HBrGk0CTBU,9402
6
6
  enkryptai_sdk/datasets.py,sha256=RQIR6spI2STXeVolYzBt6gPv6PD5AGh9krs16aKWdWA,6067
7
7
  enkryptai_sdk/deployments.py,sha256=A7XZ2JwrMod9V4_aV8bFY_Soh9E3jHdwaTuJ9BwXuyk,4215
8
8
  enkryptai_sdk/evals.py,sha256=BywyEgIT7xdJ58svO_sDNOMVowdB0RTGoAZPEbCnDVo,2595
@@ -15,13 +15,14 @@ enkryptai_sdk/dto/__init__.py,sha256=wHgIv_OCnVMJOys-vqImF59ifogDrMcgxVRmfNayVvc
15
15
  enkryptai_sdk/dto/ai_proxy.py,sha256=clwMN4xdH8Zr55dnhilHbs-qaHRlCOrLPrij0Zd1Av0,11283
16
16
  enkryptai_sdk/dto/base.py,sha256=y77kQL1X7389ifSVNc0E7CUFNxACh5AM3ml9YPon1KY,2822
17
17
  enkryptai_sdk/dto/coc.py,sha256=Lp2aat_24J4KuUg4BeJl9S39tEak8Bw15eJ4cQDrRQk,4749
18
+ enkryptai_sdk/dto/common.py,sha256=lrWMu4FKUGCN2dbS9fT4yNtfiPm1cNN16J4eCe4_tBM,1812
18
19
  enkryptai_sdk/dto/datasets.py,sha256=RFA9CmbhD-QDDyweBq_k9iBd00b6I6SWmdP9DPNd9fc,5002
19
- enkryptai_sdk/dto/deployments.py,sha256=Aw4b8tDA3FYIomqDvCjblCXTagL4bT8Fx91X0SFXs40,11216
20
- enkryptai_sdk/dto/guardrails.py,sha256=oJQqFhsdQd_yPU187AhKse-Y4xktgmVNwwKKkzFazbg,50167
21
- enkryptai_sdk/dto/models.py,sha256=Nk6ZQyMfDMbl5ITQWQJUZMPxQOTATA65QbKHIy7i3qM,14533
22
- enkryptai_sdk/dto/red_team.py,sha256=NrYj9NZX3EmrBpESiZYFUCzgXH3eConh4NhVRKT28LM,27362
23
- enkryptai_sdk-1.0.17.dist-info/licenses/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- enkryptai_sdk-1.0.17.dist-info/METADATA,sha256=10vTRJNUYuEu7KgixIMOvgaweistehy8_s3kf3lkXiA,72860
25
- enkryptai_sdk-1.0.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
26
- enkryptai_sdk-1.0.17.dist-info/top_level.txt,sha256=s2X9UJJwvJamNmr6ZXWyyQe60sXtQGWFuaBYfhgHI_4,14
27
- enkryptai_sdk-1.0.17.dist-info/RECORD,,
20
+ enkryptai_sdk/dto/deployments.py,sha256=_tdSyRTJvthjLTbOxFO4f2P6vgirDsF3in5_gXE3a_U,11288
21
+ enkryptai_sdk/dto/guardrails.py,sha256=NUVz59c-lnlTOwg72QIk62-USfHO-dpS5u2Hr6q9QGA,51774
22
+ enkryptai_sdk/dto/models.py,sha256=4aeI9-iHPhSX5duRMTQRbkXhplAhN8OHw3gWdTxrafU,14531
23
+ enkryptai_sdk/dto/red_team.py,sha256=VoNQVte__bXf2-wXgTDMEk--7KSvQm7ZR45WXPPneHU,27324
24
+ enkryptai_sdk-1.0.19.dist-info/licenses/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ enkryptai_sdk-1.0.19.dist-info/METADATA,sha256=mtGop_UEL2riS3hMqfD3NOcIorcb5pOyqC0jddvVwFE,73153
26
+ enkryptai_sdk-1.0.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
+ enkryptai_sdk-1.0.19.dist-info/top_level.txt,sha256=s2X9UJJwvJamNmr6ZXWyyQe60sXtQGWFuaBYfhgHI_4,14
28
+ enkryptai_sdk-1.0.19.dist-info/RECORD,,