enkryptai-sdk 0.1.5__py3-none-any.whl → 0.1.7__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/__init__.py +16 -4
- enkryptai_sdk/ai_proxy.py +70 -0
- enkryptai_sdk/base.py +36 -0
- enkryptai_sdk/datasets.py +142 -0
- enkryptai_sdk/deployments.py +121 -0
- enkryptai_sdk/dto/__init__.py +64 -0
- enkryptai_sdk/dto/ai_proxy.py +325 -0
- enkryptai_sdk/dto/base.py +70 -0
- enkryptai_sdk/dto/datasets.py +152 -0
- enkryptai_sdk/dto/deployments.py +334 -0
- enkryptai_sdk/dto/guardrails.py +1261 -0
- enkryptai_sdk/dto/models.py +211 -45
- enkryptai_sdk/dto/red_team.py +279 -62
- enkryptai_sdk/guardrails.py +219 -70
- enkryptai_sdk/guardrails_old.py +195 -0
- enkryptai_sdk/models.py +136 -54
- enkryptai_sdk/red_team.py +167 -63
- enkryptai_sdk-0.1.7.dist-info/METADATA +1205 -0
- enkryptai_sdk-0.1.7.dist-info/RECORD +25 -0
- {enkryptai_sdk-0.1.5.dist-info → enkryptai_sdk-0.1.7.dist-info}/WHEEL +1 -1
- enkryptai_sdk-0.1.5.dist-info/METADATA +0 -301
- enkryptai_sdk-0.1.5.dist-info/RECORD +0 -15
- {enkryptai_sdk-0.1.5.dist-info → enkryptai_sdk-0.1.7.dist-info/licenses}/LICENSE +0 -0
- {enkryptai_sdk-0.1.5.dist-info → enkryptai_sdk-0.1.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from .base import BaseDTO
|
|
3
|
+
from typing import List, Dict, Any, Set
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class InputGuardrailBlockType(str, Enum):
|
|
8
|
+
TOPIC_DETECTOR = "topic_detector"
|
|
9
|
+
NSFW = "nsfw"
|
|
10
|
+
TOXICITY = "toxicity"
|
|
11
|
+
PII = "pii"
|
|
12
|
+
INJECTION_ATTACK = "injection_attack"
|
|
13
|
+
KEYWORD_DETECTOR = "keyword_detector"
|
|
14
|
+
POLICY_VIOLATION = "policy_violation"
|
|
15
|
+
BIAS = "bias"
|
|
16
|
+
SYSTEM_PROMPT = "system_prompt"
|
|
17
|
+
COPYRIGHT_IP = "copyright_ip"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class OutputGuardrailBlockType(str, Enum):
|
|
21
|
+
TOPIC_DETECTOR = "topic_detector"
|
|
22
|
+
NSFW = "nsfw"
|
|
23
|
+
TOXICITY = "toxicity"
|
|
24
|
+
PII = "pii"
|
|
25
|
+
INJECTION_ATTACK = "injection_attack"
|
|
26
|
+
KEYWORD_DETECTOR = "keyword_detector"
|
|
27
|
+
POLICY_VIOLATION = "policy_violation"
|
|
28
|
+
BIAS = "bias"
|
|
29
|
+
SYSTEM_PROMPT = "system_prompt"
|
|
30
|
+
COPYRIGHT_IP = "copyright_ip"
|
|
31
|
+
HALLUCINATION = "hallucination"
|
|
32
|
+
ADHERENCE = "adherence"
|
|
33
|
+
RELEVANCY = "relevancy"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dataclass
|
|
37
|
+
class InputGuardrailsAdditionalConfig(BaseDTO):
|
|
38
|
+
pii_redaction: bool = False
|
|
39
|
+
|
|
40
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
41
|
+
return {
|
|
42
|
+
"pii_redaction": self.pii_redaction
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@dataclass
|
|
47
|
+
class OutputGuardrailsAdditionalConfig(BaseDTO):
|
|
48
|
+
hallucination: bool = False
|
|
49
|
+
adherence: bool = False
|
|
50
|
+
relevancy: bool = False
|
|
51
|
+
|
|
52
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
53
|
+
return {
|
|
54
|
+
"hallucination": self.hallucination,
|
|
55
|
+
"adherence": self.adherence,
|
|
56
|
+
"relevancy": self.relevancy
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@dataclass
|
|
61
|
+
class InputGuardrailsPolicy(BaseDTO):
|
|
62
|
+
policy_name: str
|
|
63
|
+
enabled: bool
|
|
64
|
+
block: List[InputGuardrailBlockType] = field(default_factory=list)
|
|
65
|
+
additional_config: InputGuardrailsAdditionalConfig = field(default_factory=InputGuardrailsAdditionalConfig)
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def from_dict(cls, data: Dict[str, Any]) -> "InputGuardrailsPolicy":
|
|
69
|
+
# Convert string values to enum values
|
|
70
|
+
block_items = []
|
|
71
|
+
for item in data.get("block", []):
|
|
72
|
+
try:
|
|
73
|
+
block_items.append(InputGuardrailBlockType(item))
|
|
74
|
+
except ValueError:
|
|
75
|
+
raise ValueError(f"Invalid input guardrail block type: {item}")
|
|
76
|
+
|
|
77
|
+
additional_config_data = data.get("additional_config", {})
|
|
78
|
+
if not isinstance(additional_config_data, dict):
|
|
79
|
+
additional_config_data = {}
|
|
80
|
+
|
|
81
|
+
return cls(
|
|
82
|
+
policy_name=data.get("policy_name", ""),
|
|
83
|
+
enabled=data.get("enabled", False),
|
|
84
|
+
block=block_items,
|
|
85
|
+
additional_config=InputGuardrailsAdditionalConfig(
|
|
86
|
+
pii_redaction=additional_config_data.get("pii_redaction", False)
|
|
87
|
+
)
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
91
|
+
return {
|
|
92
|
+
"policy_name": self.policy_name,
|
|
93
|
+
"enabled": self.enabled,
|
|
94
|
+
"block": [item.value for item in self.block],
|
|
95
|
+
"additional_config": self.additional_config.to_dict()
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@dataclass
|
|
100
|
+
class OutputGuardrailsPolicy(BaseDTO):
|
|
101
|
+
policy_name: str
|
|
102
|
+
enabled: bool
|
|
103
|
+
block: List[OutputGuardrailBlockType] = field(default_factory=list)
|
|
104
|
+
additional_config: OutputGuardrailsAdditionalConfig = field(default_factory=OutputGuardrailsAdditionalConfig)
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
def from_dict(cls, data: Dict[str, Any]) -> "OutputGuardrailsPolicy":
|
|
108
|
+
# Convert string values to enum values
|
|
109
|
+
block_items = []
|
|
110
|
+
for item in data.get("block", []):
|
|
111
|
+
try:
|
|
112
|
+
block_items.append(OutputGuardrailBlockType(item))
|
|
113
|
+
except ValueError:
|
|
114
|
+
raise ValueError(f"Invalid output guardrail block type: {item}")
|
|
115
|
+
|
|
116
|
+
additional_config_data = data.get("additional_config", {})
|
|
117
|
+
if not isinstance(additional_config_data, dict):
|
|
118
|
+
additional_config_data = {}
|
|
119
|
+
|
|
120
|
+
return cls(
|
|
121
|
+
policy_name=data.get("policy_name", ""),
|
|
122
|
+
enabled=data.get("enabled", False),
|
|
123
|
+
block=block_items,
|
|
124
|
+
additional_config=OutputGuardrailsAdditionalConfig(
|
|
125
|
+
hallucination=additional_config_data.get("hallucination", False),
|
|
126
|
+
adherence=additional_config_data.get("adherence", False),
|
|
127
|
+
relevancy=additional_config_data.get("relevancy", False)
|
|
128
|
+
)
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
132
|
+
return {
|
|
133
|
+
"policy_name": self.policy_name,
|
|
134
|
+
"enabled": self.enabled,
|
|
135
|
+
"block": [item.value for item in self.block],
|
|
136
|
+
"additional_config": self.additional_config.to_dict()
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@dataclass
|
|
141
|
+
class DeploymentInput(BaseDTO):
|
|
142
|
+
name: str
|
|
143
|
+
model_saved_name: str
|
|
144
|
+
input_guardrails_policy: InputGuardrailsPolicy
|
|
145
|
+
output_guardrails_policy: OutputGuardrailsPolicy
|
|
146
|
+
_extra_fields: Dict[str, Any] = field(default_factory=dict)
|
|
147
|
+
|
|
148
|
+
@classmethod
|
|
149
|
+
def from_dict(cls, data: Dict[str, Any]) -> "DeploymentInput":
|
|
150
|
+
input_policy_data = data.get("input_guardrails_policy", {})
|
|
151
|
+
output_policy_data = data.get("output_guardrails_policy", {})
|
|
152
|
+
|
|
153
|
+
return cls(
|
|
154
|
+
name=data.get("name", ""),
|
|
155
|
+
model_saved_name=data.get("model_saved_name", ""),
|
|
156
|
+
input_guardrails_policy=InputGuardrailsPolicy.from_dict(input_policy_data),
|
|
157
|
+
output_guardrails_policy=OutputGuardrailsPolicy.from_dict(output_policy_data)
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
161
|
+
result = {
|
|
162
|
+
"name": self.name,
|
|
163
|
+
"model_saved_name": self.model_saved_name,
|
|
164
|
+
"input_guardrails_policy": self.input_guardrails_policy.to_dict(),
|
|
165
|
+
"output_guardrails_policy": self.output_guardrails_policy.to_dict()
|
|
166
|
+
}
|
|
167
|
+
# result.update(self._extra_fields)
|
|
168
|
+
return result
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
@dataclass
|
|
172
|
+
class GetDeploymentResponse(BaseDTO):
|
|
173
|
+
name: str
|
|
174
|
+
model_saved_name: str
|
|
175
|
+
input_guardrails_policy: InputGuardrailsPolicy
|
|
176
|
+
output_guardrails_policy: OutputGuardrailsPolicy
|
|
177
|
+
created_at: str
|
|
178
|
+
updated_at: str
|
|
179
|
+
deployment_id: int
|
|
180
|
+
|
|
181
|
+
@classmethod
|
|
182
|
+
def from_dict(cls, data: Dict[str, Any]) -> "GetDeploymentResponse":
|
|
183
|
+
input_policy_data = data.get("input_guardrails_policy", {})
|
|
184
|
+
output_policy_data = data.get("output_guardrails_policy", {})
|
|
185
|
+
|
|
186
|
+
return cls(
|
|
187
|
+
name=data.get("name", ""),
|
|
188
|
+
model_saved_name=data.get("model_saved_name", ""),
|
|
189
|
+
input_guardrails_policy=InputGuardrailsPolicy.from_dict(input_policy_data),
|
|
190
|
+
output_guardrails_policy=OutputGuardrailsPolicy.from_dict(output_policy_data),
|
|
191
|
+
updated_at=data.get("updated_at", ""),
|
|
192
|
+
deployment_id=data.get("deployment_id", 0),
|
|
193
|
+
created_at=data.get("created_at", "")
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
197
|
+
return {
|
|
198
|
+
"name": self.name,
|
|
199
|
+
"model_saved_name": self.model_saved_name,
|
|
200
|
+
"input_guardrails_policy": self.input_guardrails_policy.to_dict(),
|
|
201
|
+
"output_guardrails_policy": self.output_guardrails_policy.to_dict(),
|
|
202
|
+
"updated_at": self.updated_at,
|
|
203
|
+
"deployment_id": self.deployment_id,
|
|
204
|
+
"created_at": self.created_at
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
@dataclass
|
|
209
|
+
class DeploymentAddTaskResponse(BaseDTO):
|
|
210
|
+
message: str
|
|
211
|
+
data: GetDeploymentResponse
|
|
212
|
+
|
|
213
|
+
@classmethod
|
|
214
|
+
def from_dict(cls, data: Dict[str, Any]) -> "DeploymentAddTaskResponse":
|
|
215
|
+
response_data = data.get("data", {})
|
|
216
|
+
return cls(
|
|
217
|
+
message=data.get("message", ""),
|
|
218
|
+
data=GetDeploymentResponse.from_dict(response_data)
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
222
|
+
return {
|
|
223
|
+
"message": self.message,
|
|
224
|
+
"data": self.data.to_dict()
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
@dataclass
|
|
229
|
+
class ModifyDeploymentResponse(BaseDTO):
|
|
230
|
+
message: str
|
|
231
|
+
data: GetDeploymentResponse
|
|
232
|
+
|
|
233
|
+
@classmethod
|
|
234
|
+
def from_dict(cls, data: Dict[str, Any]) -> "ModifyDeploymentResponse":
|
|
235
|
+
response_data = data.get("data", {})
|
|
236
|
+
return cls(
|
|
237
|
+
message=data.get("message", ""),
|
|
238
|
+
data=GetDeploymentResponse.from_dict(response_data)
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
242
|
+
return {
|
|
243
|
+
"message": self.message,
|
|
244
|
+
"data": self.data.to_dict()
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
@dataclass
|
|
249
|
+
class DeleteDeploymentData(BaseDTO):
|
|
250
|
+
deployment_id: int
|
|
251
|
+
|
|
252
|
+
@classmethod
|
|
253
|
+
def from_dict(cls, data: Dict[str, Any]) -> "DeleteDeploymentData":
|
|
254
|
+
return cls(
|
|
255
|
+
deployment_id=int(data.get("deployment_id", 0))
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
259
|
+
return {
|
|
260
|
+
"deployment_id": self.deployment_id
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
@dataclass
|
|
265
|
+
class DeleteDeploymentResponse(BaseDTO):
|
|
266
|
+
message: str
|
|
267
|
+
data: DeleteDeploymentData
|
|
268
|
+
|
|
269
|
+
@classmethod
|
|
270
|
+
def from_dict(cls, data: Dict[str, Any]) -> "DeleteDeploymentResponse":
|
|
271
|
+
response_data = data.get("data", {})
|
|
272
|
+
return cls(
|
|
273
|
+
message=data.get("message", ""),
|
|
274
|
+
data=DeleteDeploymentData.from_dict(response_data)
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
278
|
+
return {
|
|
279
|
+
"message": self.message,
|
|
280
|
+
"data": self.data.to_dict()
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
@property
|
|
284
|
+
def deployment_id(self) -> int:
|
|
285
|
+
"""Convenience property to access the deployment_id directly."""
|
|
286
|
+
return self.data.deployment_id
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
@dataclass
|
|
290
|
+
class DeploymentSummary(BaseDTO):
|
|
291
|
+
deployment_id: int
|
|
292
|
+
name: str
|
|
293
|
+
created_at: str
|
|
294
|
+
updated_at: str
|
|
295
|
+
model_saved_name: str
|
|
296
|
+
project_name: str
|
|
297
|
+
|
|
298
|
+
@classmethod
|
|
299
|
+
def from_dict(cls, data: Dict[str, Any]) -> "DeploymentSummary":
|
|
300
|
+
return cls(
|
|
301
|
+
deployment_id=int(data.get("deployment_id", 0)),
|
|
302
|
+
name=data.get("name", ""),
|
|
303
|
+
created_at=data.get("created_at", ""),
|
|
304
|
+
updated_at=data.get("updated_at", ""),
|
|
305
|
+
model_saved_name=data.get("model_saved_name", ""),
|
|
306
|
+
project_name=data.get("project_name", "")
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
310
|
+
return {
|
|
311
|
+
"deployment_id": self.deployment_id,
|
|
312
|
+
"name": self.name,
|
|
313
|
+
"created_at": self.created_at,
|
|
314
|
+
"updated_at": self.updated_at,
|
|
315
|
+
"model_saved_name": self.model_saved_name,
|
|
316
|
+
"project_name": self.project_name
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
@dataclass
|
|
321
|
+
class DeploymentCollection(BaseDTO):
|
|
322
|
+
deployments: List[DeploymentSummary] = field(default_factory=list)
|
|
323
|
+
|
|
324
|
+
@classmethod
|
|
325
|
+
def from_dict(cls, data: Dict[str, Any]) -> "DeploymentCollection":
|
|
326
|
+
deployments_data = data.get("deployments", [])
|
|
327
|
+
return cls(
|
|
328
|
+
deployments=[DeploymentSummary.from_dict(item) for item in deployments_data]
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
332
|
+
return {
|
|
333
|
+
"deployments": [deployment.to_dict() for deployment in self.deployments]
|
|
334
|
+
}
|