enkryptai-sdk 0.1.5__py3-none-any.whl → 0.1.6__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/dto/models.py +13 -0
- enkryptai_sdk/models.py +23 -7
- enkryptai_sdk/red_team.py +19 -9
- {enkryptai_sdk-0.1.5.dist-info → enkryptai_sdk-0.1.6.dist-info}/METADATA +1 -1
- {enkryptai_sdk-0.1.5.dist-info → enkryptai_sdk-0.1.6.dist-info}/RECORD +8 -8
- {enkryptai_sdk-0.1.5.dist-info → enkryptai_sdk-0.1.6.dist-info}/LICENSE +0 -0
- {enkryptai_sdk-0.1.5.dist-info → enkryptai_sdk-0.1.6.dist-info}/WHEEL +0 -0
- {enkryptai_sdk-0.1.5.dist-info → enkryptai_sdk-0.1.6.dist-info}/top_level.txt +0 -0
enkryptai_sdk/dto/models.py
CHANGED
|
@@ -14,6 +14,19 @@ class Modality(Enum):
|
|
|
14
14
|
return self.value
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
@dataclass
|
|
18
|
+
class ModelResponse:
|
|
19
|
+
message: Optional[str] = None
|
|
20
|
+
data: Optional[Dict] = None
|
|
21
|
+
|
|
22
|
+
def to_dict(self):
|
|
23
|
+
return asdict(self)
|
|
24
|
+
|
|
25
|
+
@classmethod
|
|
26
|
+
def from_dict(cls, data: dict):
|
|
27
|
+
return cls(**data)
|
|
28
|
+
|
|
29
|
+
|
|
17
30
|
@dataclass
|
|
18
31
|
class EndpointConfig:
|
|
19
32
|
scheme: str = "https"
|
enkryptai_sdk/models.py
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import urllib3
|
|
2
|
-
from .dto import ModelConfig,
|
|
2
|
+
from .dto import ModelConfig, ModelResponse
|
|
3
3
|
from urllib.parse import urlparse, urlsplit
|
|
4
4
|
|
|
5
5
|
|
|
6
|
+
class ModelClientError(Exception):
|
|
7
|
+
"""
|
|
8
|
+
A custom exception for ModelClient errors.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
class ModelClient:
|
|
7
15
|
def __init__(self, api_key: str, base_url: str = "https://api.enkryptai.com:443"):
|
|
8
16
|
self.api_key = api_key
|
|
@@ -23,14 +31,13 @@ class ModelClient:
|
|
|
23
31
|
response = self.http.request(method, url, headers=request_headers, **kwargs)
|
|
24
32
|
|
|
25
33
|
if response.status >= 400:
|
|
26
|
-
|
|
34
|
+
error_data = (
|
|
27
35
|
response.json()
|
|
28
36
|
if response.data
|
|
29
37
|
else {"message": f"HTTP {response.status}"}
|
|
30
38
|
)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
)
|
|
39
|
+
error_message = error_data.get("message", str(error_data))
|
|
40
|
+
raise urllib3.exceptions.HTTPError(error_message)
|
|
34
41
|
return response.json()
|
|
35
42
|
except urllib3.exceptions.HTTPError as e:
|
|
36
43
|
return {"error": str(e)}
|
|
@@ -101,8 +108,15 @@ class ModelClient:
|
|
|
101
108
|
"default_request_options": config.model_config.default_request_options,
|
|
102
109
|
},
|
|
103
110
|
}
|
|
104
|
-
|
|
105
|
-
|
|
111
|
+
try:
|
|
112
|
+
response = self._request(
|
|
113
|
+
"POST", "/models/add-model", headers=headers, json=payload
|
|
114
|
+
)
|
|
115
|
+
if response.get("error"):
|
|
116
|
+
raise ModelClientError(response["error"])
|
|
117
|
+
return ModelResponse.from_dict(response)
|
|
118
|
+
except Exception as e:
|
|
119
|
+
raise ModelClientError(str(e))
|
|
106
120
|
|
|
107
121
|
def get_model(self, model_id: str) -> ModelConfig:
|
|
108
122
|
"""
|
|
@@ -116,6 +130,8 @@ class ModelClient:
|
|
|
116
130
|
"""
|
|
117
131
|
headers = {"X-Enkrypt-Model": model_id}
|
|
118
132
|
response = self._request("GET", "/models/get-model", headers=headers)
|
|
133
|
+
if response.get("error"):
|
|
134
|
+
raise ModelClientError(response["error"])
|
|
119
135
|
return ModelConfig.from_dict(response)
|
|
120
136
|
|
|
121
137
|
def get_model_list(self):
|
enkryptai_sdk/red_team.py
CHANGED
|
@@ -9,7 +9,7 @@ from .dto import (
|
|
|
9
9
|
)
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class
|
|
12
|
+
class RedTeamClientError(Exception):
|
|
13
13
|
"""
|
|
14
14
|
A custom exception for Red Team errors.
|
|
15
15
|
"""
|
|
@@ -39,18 +39,17 @@ class RedTeamClient:
|
|
|
39
39
|
|
|
40
40
|
try:
|
|
41
41
|
response = self.http.request(method, url, headers=request_headers, **kwargs)
|
|
42
|
+
|
|
42
43
|
if response.status >= 400:
|
|
43
|
-
|
|
44
|
+
error_data = (
|
|
44
45
|
response.json()
|
|
45
46
|
if response.data
|
|
46
47
|
else {"message": f"HTTP {response.status}"}
|
|
47
48
|
)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
)
|
|
49
|
+
error_message = error_data.get("message", str(error_data))
|
|
50
|
+
raise urllib3.exceptions.HTTPError(error_message)
|
|
51
51
|
return response.json()
|
|
52
52
|
except urllib3.exceptions.HTTPError as e:
|
|
53
|
-
print(f"Request failed: {e}")
|
|
54
53
|
return {"error": str(e)}
|
|
55
54
|
|
|
56
55
|
def get_model(self, model):
|
|
@@ -105,9 +104,11 @@ class RedTeamClient:
|
|
|
105
104
|
"/redteam/v2/add-task",
|
|
106
105
|
json=payload,
|
|
107
106
|
)
|
|
107
|
+
if response.get("error"):
|
|
108
|
+
raise RedTeamClientError(response["error"])
|
|
108
109
|
return RedTeamResponse.from_dict(response)
|
|
109
110
|
else:
|
|
110
|
-
raise
|
|
111
|
+
raise RedTeamClientError(
|
|
111
112
|
"Please use a saved model or provide a target model configuration"
|
|
112
113
|
)
|
|
113
114
|
|
|
@@ -124,6 +125,8 @@ class RedTeamClient:
|
|
|
124
125
|
headers = {"X-Enkrypt-Task-ID": task_id}
|
|
125
126
|
|
|
126
127
|
response = self._request("GET", "/redteam/task-status", headers=headers)
|
|
128
|
+
if response.get("error"):
|
|
129
|
+
raise RedTeamClientError(response["error"])
|
|
127
130
|
return RedTeamTaskStatus.from_dict(response)
|
|
128
131
|
|
|
129
132
|
def cancel_task(self, task_id: str):
|
|
@@ -133,7 +136,7 @@ class RedTeamClient:
|
|
|
133
136
|
Args:
|
|
134
137
|
task_id (str): The ID of the task to cancel
|
|
135
138
|
"""
|
|
136
|
-
raise
|
|
139
|
+
raise RedTeamClientError(
|
|
137
140
|
"This feature is currently under development. Please check our documentation "
|
|
138
141
|
"at https://docs.enkrypt.ai for updates or contact support@enkrypt.ai for assistance."
|
|
139
142
|
)
|
|
@@ -151,7 +154,10 @@ class RedTeamClient:
|
|
|
151
154
|
headers = {"X-Enkrypt-Task-ID": task_id}
|
|
152
155
|
|
|
153
156
|
response = self._request("GET", "/redteam/get-task", headers=headers)
|
|
154
|
-
|
|
157
|
+
if response.get("error"):
|
|
158
|
+
raise RedTeamClientError(response["error"])
|
|
159
|
+
if response.get("data").get("job_id "):
|
|
160
|
+
response["data"]["task_id"] = response["data"].pop("job_id")
|
|
155
161
|
return RedTeamTaskDetails.from_dict(response["data"])
|
|
156
162
|
|
|
157
163
|
def get_result_summary(self, task_id: str):
|
|
@@ -167,6 +173,8 @@ class RedTeamClient:
|
|
|
167
173
|
headers = {"X-Enkrypt-Task-ID": task_id}
|
|
168
174
|
|
|
169
175
|
response = self._request("GET", "/redteam/results/summary", headers=headers)
|
|
176
|
+
if response.get("error"):
|
|
177
|
+
raise RedTeamClientError(response["error"])
|
|
170
178
|
return RedTeamResultSummary.from_dict(response["summary"])
|
|
171
179
|
|
|
172
180
|
def get_result_details(self, task_id: str):
|
|
@@ -182,4 +190,6 @@ class RedTeamClient:
|
|
|
182
190
|
# TODO: Update the response to be updated
|
|
183
191
|
headers = {"X-Enkrypt-Task-ID": task_id}
|
|
184
192
|
response = self._request("GET", "/redteam/results/details", headers=headers)
|
|
193
|
+
if response.get("error"):
|
|
194
|
+
raise RedTeamClientError(response["error"])
|
|
185
195
|
return RedTeamResultDetails.from_dict(response["details"])
|
|
@@ -2,14 +2,14 @@ enkryptai_sdk/__init__.py,sha256=PJq9O9HIhE4OLQsMfYVbdrymg6fBQ0owKGzCTnt1yJk,299
|
|
|
2
2
|
enkryptai_sdk/config.py,sha256=IpB8_aO4zXdvv061v24oh83oyJ5Tp1QBQTzeuW4h9QY,8828
|
|
3
3
|
enkryptai_sdk/evals.py,sha256=SAQ3GM2ppV-uPLWR1NdOa0fjiEWY5UqzdA8bXFZVl5I,2589
|
|
4
4
|
enkryptai_sdk/guardrails.py,sha256=SgzPZkTzbAPD9XfmYNG6M1-TrzbhDHpAkI3FjnVWS_s,6434
|
|
5
|
-
enkryptai_sdk/models.py,sha256=
|
|
6
|
-
enkryptai_sdk/red_team.py,sha256=
|
|
5
|
+
enkryptai_sdk/models.py,sha256=CyUv5qOE2F9G8DcSLyr3J4U3VhnRQOZw_8qFB9k25C4,5894
|
|
6
|
+
enkryptai_sdk/red_team.py,sha256=NmXNfbZMYqqS2w7Dfj-8VAMvs1Xs986X1bnC8FK_lJQ,6328
|
|
7
7
|
enkryptai_sdk/response.py,sha256=43JRubzgGCpoVxYNzBZY0AlUgLbfcXD_AwD7wU3qY9o,4086
|
|
8
8
|
enkryptai_sdk/dto/__init__.py,sha256=Ngo7pcuOeWNG0tiSWrXf14NCPBfpD6FBXw0R4jDwLPU,377
|
|
9
|
-
enkryptai_sdk/dto/models.py,sha256=
|
|
9
|
+
enkryptai_sdk/dto/models.py,sha256=W3L-yloW4QsanHJg6Gg3CqNAibKKCFb50kdTKLAgRp0,6377
|
|
10
10
|
enkryptai_sdk/dto/red_team.py,sha256=LupAXG_2izEbPQct1MS_vWOcov06bvnDnnbs_4zFBfY,5234
|
|
11
|
-
enkryptai_sdk-0.1.
|
|
12
|
-
enkryptai_sdk-0.1.
|
|
13
|
-
enkryptai_sdk-0.1.
|
|
14
|
-
enkryptai_sdk-0.1.
|
|
15
|
-
enkryptai_sdk-0.1.
|
|
11
|
+
enkryptai_sdk-0.1.6.dist-info/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
enkryptai_sdk-0.1.6.dist-info/METADATA,sha256=vRbv-pl5hYfjZZkAm7KhqvnrOduVYeWfMRZp99hL-8M,7482
|
|
13
|
+
enkryptai_sdk-0.1.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
14
|
+
enkryptai_sdk-0.1.6.dist-info/top_level.txt,sha256=s2X9UJJwvJamNmr6ZXWyyQe60sXtQGWFuaBYfhgHI_4,14
|
|
15
|
+
enkryptai_sdk-0.1.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|