codemie-sdk-python 0.1.222__py3-none-any.whl → 0.1.256__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.
@@ -0,0 +1,375 @@
1
+ """Vendor guardrail service implementation for managing cloud vendor guardrail settings."""
2
+
3
+ from typing import Union, Optional, List
4
+
5
+ from ..models.vendor_assistant import VendorType
6
+ from ..models.vendor_guardrail import (
7
+ VendorGuardrailSettingsResponse,
8
+ VendorGuardrailsResponse,
9
+ VendorGuardrail,
10
+ VendorGuardrailVersion,
11
+ VendorGuardrailVersionsResponse,
12
+ VendorGuardrailInstallRequest,
13
+ VendorGuardrailInstallResponse,
14
+ VendorGuardrailUninstallResponse,
15
+ )
16
+ from ..utils import ApiRequestHandler
17
+
18
+
19
+ class VendorGuardrailService:
20
+ """Service for managing cloud vendor guardrail settings (AWS, Azure, GCP)."""
21
+
22
+ def __init__(self, api_domain: str, token: str, verify_ssl: bool = True):
23
+ """Initialize the vendor guardrail service.
24
+
25
+ Args:
26
+ api_domain: Base URL for the CodeMie API
27
+ token: Authentication token
28
+ verify_ssl: Whether to verify SSL certificates
29
+ """
30
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
31
+
32
+ def get_guardrail_settings(
33
+ self,
34
+ vendor: Union[VendorType, str],
35
+ page: int = 0,
36
+ per_page: int = 10,
37
+ ) -> VendorGuardrailSettingsResponse:
38
+ """Get guardrail settings for a specific cloud vendor.
39
+
40
+ Args:
41
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
42
+ page: Page number for pagination (0-based)
43
+ per_page: Number of items per page
44
+
45
+ Returns:
46
+ VendorGuardrailSettingsResponse containing list of settings and pagination info
47
+
48
+ Example:
49
+ >>> # Using enum
50
+ >>> settings = client.vendor_guardrails.get_guardrail_settings(VendorType.AWS, page=0, per_page=10)
51
+ >>> # Using string
52
+ >>> settings = client.vendor_guardrails.get_guardrail_settings("aws", page=0, per_page=10)
53
+ >>> # Access settings data
54
+ >>> for setting in settings.data:
55
+ ... print(f"Setting: {setting.setting_name}, Project: {setting.project}")
56
+ ... if setting.invalid:
57
+ ... print(f"Error: {setting.error}")
58
+ """
59
+ # Convert enum to string value if needed
60
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
61
+
62
+ params = {
63
+ "page": page,
64
+ "per_page": per_page,
65
+ }
66
+
67
+ return self._api.get(
68
+ f"/v1/vendors/{vendor_str}/guardrails/settings",
69
+ VendorGuardrailSettingsResponse,
70
+ params=params,
71
+ wrap_response=False,
72
+ )
73
+
74
+ def get_guardrails(
75
+ self,
76
+ vendor: Union[VendorType, str],
77
+ setting_id: str,
78
+ per_page: int = 10,
79
+ next_token: Optional[str] = None,
80
+ ) -> VendorGuardrailsResponse:
81
+ """Get guardrails for a specific vendor setting.
82
+
83
+ Args:
84
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
85
+ setting_id: ID of the vendor setting to retrieve guardrails for
86
+ per_page: Number of items per page
87
+ next_token: Token for pagination (optional, for retrieving next page)
88
+
89
+ Returns:
90
+ VendorGuardrailsResponse containing list of guardrails and pagination token
91
+
92
+ Example:
93
+ >>> # Get first page
94
+ >>> guardrails = client.vendor_guardrails.get_guardrails(
95
+ ... vendor=VendorType.AWS,
96
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c",
97
+ ... per_page=8
98
+ ... )
99
+ >>> # Access guardrail data
100
+ >>> for guardrail in guardrails.data:
101
+ ... print(f"Name: {guardrail.name}, Status: {guardrail.status}")
102
+ ... print(f"Version: {guardrail.version}, Description: {guardrail.description}")
103
+ >>> # Get next page if available
104
+ >>> if guardrails.pagination.next_token:
105
+ ... next_page = client.vendor_guardrails.get_guardrails(
106
+ ... vendor=VendorType.AWS,
107
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c",
108
+ ... per_page=8,
109
+ ... next_token=guardrails.pagination.next_token
110
+ ... )
111
+ """
112
+ # Convert enum to string value if needed
113
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
114
+
115
+ params = {
116
+ "setting_id": setting_id,
117
+ "per_page": per_page,
118
+ }
119
+
120
+ if next_token:
121
+ params["next_token"] = next_token
122
+
123
+ return self._api.get(
124
+ f"/v1/vendors/{vendor_str}/guardrails",
125
+ VendorGuardrailsResponse,
126
+ params=params,
127
+ wrap_response=False,
128
+ )
129
+
130
+ def get_guardrail(
131
+ self,
132
+ vendor: Union[VendorType, str],
133
+ guardrail_id: str,
134
+ setting_id: str,
135
+ ) -> VendorGuardrail:
136
+ """Get a specific guardrail by ID for a vendor setting.
137
+
138
+ Args:
139
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
140
+ guardrail_id: ID of the guardrail to retrieve
141
+ setting_id: ID of the vendor setting
142
+
143
+ Returns:
144
+ VendorGuardrail containing guardrail details
145
+
146
+ Example:
147
+ >>> guardrail = client.vendor_guardrails.get_guardrail(
148
+ ... vendor=VendorType.AWS,
149
+ ... guardrail_id="lss9vxro9oxg",
150
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c"
151
+ ... )
152
+ >>> print(f"Name: {guardrail.name}, Status: {guardrail.status}")
153
+ >>> print(f"Version: {guardrail.version}, Description: {guardrail.description}")
154
+ """
155
+ # Convert enum to string value if needed
156
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
157
+
158
+ params = {
159
+ "setting_id": setting_id,
160
+ }
161
+
162
+ return self._api.get(
163
+ f"/v1/vendors/{vendor_str}/guardrails/{guardrail_id}",
164
+ VendorGuardrail,
165
+ params=params,
166
+ wrap_response=False,
167
+ )
168
+
169
+ def get_guardrail_version(
170
+ self,
171
+ vendor: Union[VendorType, str],
172
+ guardrail_id: str,
173
+ version: str,
174
+ setting_id: str,
175
+ ) -> VendorGuardrailVersion:
176
+ """Get a specific version of a vendor guardrail with detailed information.
177
+
178
+ Args:
179
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
180
+ guardrail_id: ID of the guardrail to retrieve
181
+ version: Version number to retrieve (e.g., "1", "2", "DRAFT")
182
+ setting_id: ID of the vendor setting
183
+
184
+ Returns:
185
+ VendorGuardrailVersion containing detailed version information including
186
+ blocked messaging settings and timestamps
187
+
188
+ Example:
189
+ >>> version_details = client.vendor_guardrails.get_guardrail_version(
190
+ ... vendor=VendorType.AWS,
191
+ ... guardrail_id="lss9vxro9oxg",
192
+ ... version="1",
193
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c"
194
+ ... )
195
+ >>> print(f"Name: {version_details.name}")
196
+ >>> print(f"Version: {version_details.version}")
197
+ >>> print(f"Status: {version_details.status}")
198
+ >>> print(f"Blocked Input Message: {version_details.blockedInputMessaging}")
199
+ >>> print(f"Blocked Output Message: {version_details.blockedOutputsMessaging}")
200
+ """
201
+ # Convert enum to string value if needed
202
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
203
+
204
+ params = {
205
+ "setting_id": setting_id,
206
+ }
207
+
208
+ return self._api.get(
209
+ f"/v1/vendors/{vendor_str}/guardrails/{guardrail_id}/{version}",
210
+ VendorGuardrailVersion,
211
+ params=params,
212
+ wrap_response=False,
213
+ )
214
+
215
+ def get_guardrail_versions(
216
+ self,
217
+ vendor: Union[VendorType, str],
218
+ guardrail_id: str,
219
+ setting_id: str,
220
+ per_page: int = 10,
221
+ next_token: Optional[str] = None,
222
+ ) -> VendorGuardrailVersionsResponse:
223
+ """Get versions for a specific vendor guardrail.
224
+
225
+ Args:
226
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
227
+ guardrail_id: ID of the guardrail to retrieve versions for
228
+ setting_id: ID of the vendor setting
229
+ per_page: Number of items per page
230
+ next_token: Token for pagination (optional, for retrieving next page)
231
+
232
+ Returns:
233
+ VendorGuardrailVersionsResponse containing list of versions and pagination token
234
+
235
+ Example:
236
+ >>> # Get first page of versions
237
+ >>> versions = client.vendor_guardrails.get_guardrail_versions(
238
+ ... vendor=VendorType.AWS,
239
+ ... guardrail_id="lss9vxro9oxg",
240
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c",
241
+ ... per_page=5
242
+ ... )
243
+ >>> for version in versions.data:
244
+ ... print(f"{version.name} (v{version.version}): {version.status}")
245
+ >>> # Get next page if available
246
+ >>> if versions.pagination.next_token:
247
+ ... next_page = client.vendor_guardrails.get_guardrail_versions(
248
+ ... vendor=VendorType.AWS,
249
+ ... guardrail_id="lss9vxro9oxg",
250
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c",
251
+ ... per_page=5,
252
+ ... next_token=versions.pagination.next_token
253
+ ... )
254
+ """
255
+ # Convert enum to string value if needed
256
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
257
+
258
+ params = {
259
+ "setting_id": setting_id,
260
+ "per_page": per_page,
261
+ }
262
+
263
+ if next_token:
264
+ params["next_token"] = next_token
265
+
266
+ return self._api.get(
267
+ f"/v1/vendors/{vendor_str}/guardrails/{guardrail_id}/versions",
268
+ VendorGuardrailVersionsResponse,
269
+ params=params,
270
+ wrap_response=False,
271
+ )
272
+
273
+ def install_guardrails(
274
+ self,
275
+ vendor: Union[VendorType, str],
276
+ guardrails: List[VendorGuardrailInstallRequest],
277
+ ) -> VendorGuardrailInstallResponse:
278
+ """Install/activate vendor guardrails.
279
+
280
+ Args:
281
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
282
+ guardrails: List of guardrail installation requests with guardrail ID, version, and setting ID
283
+
284
+ Returns:
285
+ VendorGuardrailInstallResponse containing installation summary with AI run IDs
286
+
287
+ Example:
288
+ >>> from codemie_sdk import VendorGuardrailInstallRequest
289
+ >>> # Install single guardrail
290
+ >>> install_request = VendorGuardrailInstallRequest(
291
+ ... id="lss9vxro9oxg",
292
+ ... version="1",
293
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c"
294
+ ... )
295
+ >>> response = client.vendor_guardrails.install_guardrails(
296
+ ... vendor=VendorType.AWS,
297
+ ... guardrails=[install_request]
298
+ ... )
299
+ >>> for item in response.summary:
300
+ ... print(f"Installed {item.guardrailId} version {item.version} with run ID: {item.aiRunId}")
301
+ >>>
302
+ >>> # Install multiple guardrails
303
+ >>> requests = [
304
+ ... VendorGuardrailInstallRequest(
305
+ ... id="GUARDRAIL_ID_1",
306
+ ... version="1",
307
+ ... setting_id="SETTING_ID"
308
+ ... ),
309
+ ... VendorGuardrailInstallRequest(
310
+ ... id="GUARDRAIL_ID_2",
311
+ ... version="2",
312
+ ... setting_id="SETTING_ID"
313
+ ... )
314
+ ... ]
315
+ >>> response = client.vendor_guardrails.install_guardrails(
316
+ ... vendor=VendorType.AWS,
317
+ ... guardrails=requests
318
+ ... )
319
+ """
320
+ # Convert enum to string value if needed
321
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
322
+
323
+ # Convert list of Pydantic models to list of dicts
324
+ payload = [guardrail.model_dump(by_alias=True) for guardrail in guardrails]
325
+
326
+ return self._api.post(
327
+ f"/v1/vendors/{vendor_str}/guardrails",
328
+ VendorGuardrailInstallResponse,
329
+ json_data=payload,
330
+ wrap_response=False,
331
+ )
332
+
333
+ def uninstall_guardrail(
334
+ self,
335
+ vendor: Union[VendorType, str],
336
+ ai_run_id: str,
337
+ ) -> VendorGuardrailUninstallResponse:
338
+ """Uninstall/deactivate a vendor guardrail.
339
+
340
+ Args:
341
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
342
+ ai_run_id: AI run ID returned from the install operation
343
+
344
+ Returns:
345
+ VendorGuardrailUninstallResponse with success status
346
+
347
+ Example:
348
+ >>> # First, install a guardrail
349
+ >>> install_request = VendorGuardrailInstallRequest(
350
+ ... id="lss9vxro9oxg",
351
+ ... version="1",
352
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c"
353
+ ... )
354
+ >>> install_response = client.vendor_guardrails.install_guardrails(
355
+ ... vendor=VendorType.AWS,
356
+ ... guardrails=[install_request]
357
+ ... )
358
+ >>> ai_run_id = install_response.summary[0].aiRunId
359
+ >>>
360
+ >>> # Later, uninstall the guardrail using the AI run ID
361
+ >>> response = client.vendor_guardrails.uninstall_guardrail(
362
+ ... vendor=VendorType.AWS,
363
+ ... ai_run_id=ai_run_id
364
+ ... )
365
+ >>> if response.success:
366
+ ... print("Guardrail successfully uninstalled!")
367
+ """
368
+ # Convert enum to string value if needed
369
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
370
+
371
+ return self._api.delete(
372
+ f"/v1/vendors/{vendor_str}/guardrails/{ai_run_id}",
373
+ VendorGuardrailUninstallResponse,
374
+ wrap_response=False,
375
+ )
@@ -0,0 +1,270 @@
1
+ """Vendor knowledge base service implementation for managing cloud vendor knowledge base settings."""
2
+
3
+ from typing import Union, Optional, List
4
+
5
+ from ..models.vendor_assistant import VendorType
6
+ from ..models.vendor_knowledgebase import (
7
+ VendorKnowledgeBaseSettingsResponse,
8
+ VendorKnowledgeBasesResponse,
9
+ VendorKnowledgeBaseDetail,
10
+ VendorKnowledgeBaseInstallRequest,
11
+ VendorKnowledgeBaseInstallResponse,
12
+ VendorKnowledgeBaseUninstallResponse,
13
+ )
14
+ from ..utils import ApiRequestHandler
15
+
16
+
17
+ class VendorKnowledgeBaseService:
18
+ """Service for managing cloud vendor knowledge base settings (AWS, Azure, GCP)."""
19
+
20
+ def __init__(self, api_domain: str, token: str, verify_ssl: bool = True):
21
+ """Initialize the vendor knowledge base service.
22
+
23
+ Args:
24
+ api_domain: Base URL for the CodeMie API
25
+ token: Authentication token
26
+ verify_ssl: Whether to verify SSL certificates
27
+ """
28
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
29
+
30
+ def get_knowledgebase_settings(
31
+ self,
32
+ vendor: Union[VendorType, str],
33
+ page: int = 0,
34
+ per_page: int = 10,
35
+ ) -> VendorKnowledgeBaseSettingsResponse:
36
+ """Get knowledge base settings for a specific cloud vendor.
37
+
38
+ Args:
39
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
40
+ page: Page number for pagination (0-based)
41
+ per_page: Number of items per page
42
+
43
+ Returns:
44
+ VendorKnowledgeBaseSettingsResponse containing list of settings and pagination info
45
+
46
+ Example:
47
+ >>> # Using enum
48
+ >>> settings = client.vendor_knowledgebases.get_knowledgebase_settings(VendorType.AWS, page=0, per_page=10)
49
+ >>> # Using string
50
+ >>> settings = client.vendor_knowledgebases.get_knowledgebase_settings("aws", page=0, per_page=10)
51
+ >>> # Access settings data
52
+ >>> for setting in settings.data:
53
+ ... print(f"Setting: {setting.setting_name}, Project: {setting.project}")
54
+ ... if setting.invalid:
55
+ ... print(f"Error: {setting.error}")
56
+ """
57
+ # Convert enum to string value if needed
58
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
59
+
60
+ params = {
61
+ "page": page,
62
+ "per_page": per_page,
63
+ }
64
+
65
+ return self._api.get(
66
+ f"/v1/vendors/{vendor_str}/knowledgebases/settings",
67
+ VendorKnowledgeBaseSettingsResponse,
68
+ params=params,
69
+ wrap_response=False,
70
+ )
71
+
72
+ def get_knowledgebases(
73
+ self,
74
+ vendor: Union[VendorType, str],
75
+ setting_id: str,
76
+ per_page: int = 10,
77
+ next_token: Optional[str] = None,
78
+ ) -> VendorKnowledgeBasesResponse:
79
+ """Get knowledge bases for a specific vendor setting.
80
+
81
+ Args:
82
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
83
+ setting_id: ID of the vendor setting to retrieve knowledge bases for
84
+ per_page: Number of items per page
85
+ next_token: Token for pagination (optional, for retrieving next page)
86
+
87
+ Returns:
88
+ VendorKnowledgeBasesResponse containing list of knowledge bases and pagination token
89
+
90
+ Example:
91
+ >>> # Get first page
92
+ >>> kbs = client.vendor_knowledgebases.get_knowledgebases(
93
+ ... vendor=VendorType.AWS,
94
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c",
95
+ ... per_page=8
96
+ ... )
97
+ >>> # Access knowledge base data
98
+ >>> for kb in kbs.data:
99
+ ... print(f"Name: {kb.name}, Status: {kb.status}")
100
+ ... if kb.aiRunId:
101
+ ... print(f" AI Run ID: {kb.aiRunId}")
102
+ >>> # Get next page if available
103
+ >>> if kbs.pagination.next_token:
104
+ ... next_page = client.vendor_knowledgebases.get_knowledgebases(
105
+ ... vendor=VendorType.AWS,
106
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c",
107
+ ... per_page=8,
108
+ ... next_token=kbs.pagination.next_token
109
+ ... )
110
+ """
111
+ # Convert enum to string value if needed
112
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
113
+
114
+ params = {
115
+ "setting_id": setting_id,
116
+ "per_page": per_page,
117
+ }
118
+
119
+ if next_token:
120
+ params["next_token"] = next_token
121
+
122
+ return self._api.get(
123
+ f"/v1/vendors/{vendor_str}/knowledgebases",
124
+ VendorKnowledgeBasesResponse,
125
+ params=params,
126
+ wrap_response=False,
127
+ )
128
+
129
+ def get_knowledgebase(
130
+ self,
131
+ vendor: Union[VendorType, str],
132
+ knowledgebase_id: str,
133
+ setting_id: str,
134
+ ) -> VendorKnowledgeBaseDetail:
135
+ """Get detailed information about a specific knowledge base by ID.
136
+
137
+ Args:
138
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
139
+ knowledgebase_id: ID of the knowledge base to retrieve
140
+ setting_id: ID of the vendor setting
141
+
142
+ Returns:
143
+ VendorKnowledgeBaseDetail containing detailed knowledge base information
144
+
145
+ Example:
146
+ >>> kb = client.vendor_knowledgebases.get_knowledgebase(
147
+ ... vendor=VendorType.AWS,
148
+ ... knowledgebase_id="HIKPIQ2FMT",
149
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c"
150
+ ... )
151
+ >>> print(f"Name: {kb.name}")
152
+ >>> print(f"Type: {kb.type}")
153
+ >>> print(f"Status: {kb.status}")
154
+ >>> print(f"Embedding Model: {kb.embeddingModel}")
155
+ >>> if kb.aiRunId:
156
+ ... print(f"AI Run ID: {kb.aiRunId}")
157
+ """
158
+ # Convert enum to string value if needed
159
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
160
+
161
+ params = {
162
+ "setting_id": setting_id,
163
+ }
164
+
165
+ return self._api.get(
166
+ f"/v1/vendors/{vendor_str}/knowledgebases/{knowledgebase_id}",
167
+ VendorKnowledgeBaseDetail,
168
+ params=params,
169
+ wrap_response=False,
170
+ )
171
+
172
+ def install_knowledgebases(
173
+ self,
174
+ vendor: Union[VendorType, str],
175
+ knowledgebases: List[VendorKnowledgeBaseInstallRequest],
176
+ ) -> VendorKnowledgeBaseInstallResponse:
177
+ """Install/activate vendor knowledge bases.
178
+
179
+ Args:
180
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
181
+ knowledgebases: List of knowledge base installation requests with knowledge base ID and setting ID
182
+
183
+ Returns:
184
+ VendorKnowledgeBaseInstallResponse containing installation summary with AI run IDs
185
+
186
+ Example:
187
+ >>> from codemie_sdk import VendorKnowledgeBaseInstallRequest
188
+ >>> # Install single knowledge base
189
+ >>> install_request = VendorKnowledgeBaseInstallRequest(
190
+ ... id="HIKPIQ2FMT",
191
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c"
192
+ ... )
193
+ >>> response = client.vendor_knowledgebases.install_knowledgebases(
194
+ ... vendor=VendorType.AWS,
195
+ ... knowledgebases=[install_request]
196
+ ... )
197
+ >>> for item in response.summary:
198
+ ... print(f"Installed knowledge base {item.knowledgeBaseId} with run ID: {item.aiRunId}")
199
+ >>>
200
+ >>> # Install multiple knowledge bases
201
+ >>> requests = [
202
+ ... VendorKnowledgeBaseInstallRequest(
203
+ ... id="KB_ID_1",
204
+ ... setting_id="SETTING_ID"
205
+ ... ),
206
+ ... VendorKnowledgeBaseInstallRequest(
207
+ ... id="KB_ID_2",
208
+ ... setting_id="SETTING_ID"
209
+ ... )
210
+ ... ]
211
+ >>> response = client.vendor_knowledgebases.install_knowledgebases(
212
+ ... vendor=VendorType.AWS,
213
+ ... knowledgebases=requests
214
+ ... )
215
+ """
216
+ # Convert enum to string value if needed
217
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
218
+
219
+ # Convert list of Pydantic models to list of dicts
220
+ payload = [kb.model_dump(by_alias=True) for kb in knowledgebases]
221
+
222
+ return self._api.post(
223
+ f"/v1/vendors/{vendor_str}/knowledgebases",
224
+ VendorKnowledgeBaseInstallResponse,
225
+ json_data=payload,
226
+ wrap_response=False,
227
+ )
228
+
229
+ def uninstall_knowledgebase(
230
+ self,
231
+ vendor: Union[VendorType, str],
232
+ ai_run_id: str,
233
+ ) -> VendorKnowledgeBaseUninstallResponse:
234
+ """Uninstall/deactivate a vendor knowledge base.
235
+
236
+ Args:
237
+ vendor: Cloud vendor type (aws, azure, gcp). Can be VendorType enum or string.
238
+ ai_run_id: AI run ID returned from the knowledge base (aiRunId field)
239
+
240
+ Returns:
241
+ VendorKnowledgeBaseUninstallResponse with success status
242
+
243
+ Example:
244
+ >>> # Get knowledge bases to find the aiRunId
245
+ >>> kbs = client.vendor_knowledgebases.get_knowledgebases(
246
+ ... vendor=VendorType.AWS,
247
+ ... setting_id="cac90788-39b7-4ffe-8b57-e8b047fa1f6c"
248
+ ... )
249
+ >>> # Find an installed knowledge base with aiRunId
250
+ >>> for kb in kbs.data:
251
+ ... if kb.aiRunId:
252
+ ... ai_run_id = kb.aiRunId
253
+ ... break
254
+ >>>
255
+ >>> # Uninstall the knowledge base using the AI run ID
256
+ >>> response = client.vendor_knowledgebases.uninstall_knowledgebase(
257
+ ... vendor=VendorType.AWS,
258
+ ... ai_run_id="2364feec-f8c7-4db8-a8b4-ea56289e67a4"
259
+ ... )
260
+ >>> if response.success:
261
+ ... print("Knowledge base successfully uninstalled!")
262
+ """
263
+ # Convert enum to string value if needed
264
+ vendor_str = vendor.value if isinstance(vendor, VendorType) else vendor
265
+
266
+ return self._api.delete(
267
+ f"/v1/vendors/{vendor_str}/knowledgebases/{ai_run_id}",
268
+ VendorKnowledgeBaseUninstallResponse,
269
+ wrap_response=False,
270
+ )