codemie-sdk-python 0.1.275__tar.gz → 0.1.277__tar.gz

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.
Files changed (49) hide show
  1. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/PKG-INFO +1 -1
  2. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/pyproject.toml +1 -1
  3. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/__init__.py +12 -0
  4. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/client/client.py +12 -0
  5. codemie_sdk_python-0.1.277/src/codemie_sdk/models/admin.py +28 -0
  6. codemie_sdk_python-0.1.277/src/codemie_sdk/models/guardrails.py +62 -0
  7. codemie_sdk_python-0.1.277/src/codemie_sdk/services/admin.py +60 -0
  8. codemie_sdk_python-0.1.277/src/codemie_sdk/services/codemie_guardrails.py +76 -0
  9. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/README.md +0 -0
  10. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/auth/__init__.py +0 -0
  11. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/auth/credentials.py +0 -0
  12. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/client/__init__.py +0 -0
  13. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/exceptions.py +0 -0
  14. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/__init__.py +0 -0
  15. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/assistant.py +0 -0
  16. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/common.py +0 -0
  17. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/conversation.py +0 -0
  18. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/datasource.py +0 -0
  19. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/file_operation.py +0 -0
  20. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/integration.py +0 -0
  21. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/llm.py +0 -0
  22. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/task.py +0 -0
  23. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/user.py +0 -0
  24. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/vendor_assistant.py +0 -0
  25. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
  26. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
  27. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/vendor_workflow.py +0 -0
  28. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/workflow.py +0 -0
  29. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
  30. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/workflow_state.py +0 -0
  31. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
  32. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/assistant.py +0 -0
  33. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/conversation.py +0 -0
  34. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/datasource.py +0 -0
  35. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/files.py +0 -0
  36. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/integration.py +0 -0
  37. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/llm.py +0 -0
  38. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/task.py +0 -0
  39. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/user.py +0 -0
  40. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/vendor_assistant.py +0 -0
  41. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
  42. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
  43. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/vendor_workflow.py +0 -0
  44. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/webhook.py +0 -0
  45. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/workflow.py +0 -0
  46. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/workflow_execution.py +0 -0
  47. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  48. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/utils/__init__.py +0 -0
  49. {codemie_sdk_python-0.1.275 → codemie_sdk_python-0.1.277}/src/codemie_sdk/utils/http.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codemie-sdk-python
3
- Version: 0.1.275
3
+ Version: 0.1.277
4
4
  Summary: CodeMie SDK for Python
5
5
  Author: Vadym Vlasenko
6
6
  Author-email: vadym_vlasenko@epam.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codemie-sdk-python"
3
- version = "0.1.275"
3
+ version = "0.1.277"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -73,10 +73,17 @@ from .models.vendor_guardrail import (
73
73
  VendorGuardrailInstallResponse,
74
74
  VendorGuardrailUninstallResponse,
75
75
  )
76
+ from .models.guardrails import (
77
+ GuardrailAssignmentSetting,
78
+ GuardrailAssignmentEntity,
79
+ GuardrailAssignmentRequest,
80
+ GuardrailAssignmentResponse,
81
+ )
76
82
  from .services.vendor_assistant import VendorAssistantService
77
83
  from .services.vendor_workflow import VendorWorkflowService
78
84
  from .services.vendor_knowledgebase import VendorKnowledgeBaseService
79
85
  from .services.vendor_guardrail import VendorGuardrailService
86
+ from .services.codemie_guardrails import CodemieGuardrailService
80
87
 
81
88
  __version__ = "0.2.12"
82
89
  __all__ = [
@@ -132,4 +139,9 @@ __all__ = [
132
139
  "VendorGuardrailInstallResponse",
133
140
  "VendorGuardrailUninstallResponse",
134
141
  "VendorGuardrailService",
142
+ "GuardrailAssignmentSetting",
143
+ "GuardrailAssignmentEntity",
144
+ "GuardrailAssignmentRequest",
145
+ "GuardrailAssignmentResponse",
146
+ "CodemieGuardrailService",
135
147
  ]
@@ -3,6 +3,7 @@
3
3
  from typing import Optional
4
4
 
5
5
  from ..auth.credentials import KeycloakCredentials
6
+ from ..services.admin import AdminService
6
7
  from ..services.assistant import AssistantService
7
8
  from ..services.conversation import ConversationService
8
9
  from ..services.datasource import DatasourceService
@@ -17,6 +18,7 @@ from ..services.vendor_assistant import VendorAssistantService
17
18
  from ..services.vendor_workflow import VendorWorkflowService
18
19
  from ..services.vendor_knowledgebase import VendorKnowledgeBaseService
19
20
  from ..services.vendor_guardrail import VendorGuardrailService
21
+ from ..services.codemie_guardrails import CodemieGuardrailService
20
22
 
21
23
 
22
24
  class CodeMieClient:
@@ -69,6 +71,7 @@ class CodeMieClient:
69
71
  self._token = "" if self._is_localhost else self.auth.get_token()
70
72
 
71
73
  # Initialize services with verify_ssl parameter and token
74
+ self.admin = AdminService(self._api_domain, self._token, verify_ssl=verify_ssl)
72
75
  self.assistants = AssistantService(
73
76
  self._api_domain, self._token, verify_ssl=verify_ssl
74
77
  )
@@ -105,6 +108,9 @@ class CodeMieClient:
105
108
  self.vendor_guardrails = VendorGuardrailService(
106
109
  self._api_domain, self._token, verify_ssl=self._verify_ssl
107
110
  )
111
+ self.codemie_guardrails = CodemieGuardrailService(
112
+ self._api_domain, self._token, verify_ssl=self._verify_ssl
113
+ )
108
114
 
109
115
  @property
110
116
  def token(self) -> str:
@@ -128,6 +134,9 @@ class CodeMieClient:
128
134
  """Force token refresh."""
129
135
  self._token = "" if self._is_localhost else self.auth.get_token()
130
136
  # Update token in services
137
+ self.admin = AdminService(
138
+ self._api_domain, self._token, verify_ssl=self._verify_ssl
139
+ )
131
140
  self.assistants = AssistantService(
132
141
  self._api_domain, self._token, verify_ssl=self._verify_ssl
133
142
  )
@@ -170,4 +179,7 @@ class CodeMieClient:
170
179
  self.vendor_guardrails = VendorGuardrailService(
171
180
  self._api_domain, self._token, verify_ssl=self._verify_ssl
172
181
  )
182
+ self.codemie_guardrails = CodemieGuardrailService(
183
+ self._api_domain, self._token, verify_ssl=self._verify_ssl
184
+ )
173
185
  return self._token
@@ -0,0 +1,28 @@
1
+ """Admin models for managing applications/projects."""
2
+
3
+ from typing import List
4
+ from pydantic import BaseModel, ConfigDict, Field
5
+
6
+
7
+ class ApplicationsListResponse(BaseModel):
8
+ """Response model for list applications endpoint."""
9
+
10
+ model_config = ConfigDict(extra="ignore")
11
+
12
+ applications: List[str] = Field(..., description="List of application names")
13
+
14
+
15
+ class ApplicationCreateRequest(BaseModel):
16
+ """Request model for creating an application/project."""
17
+
18
+ model_config = ConfigDict(extra="ignore")
19
+
20
+ name: str = Field(..., description="Application/project name")
21
+
22
+
23
+ class ApplicationCreateResponse(BaseModel):
24
+ """Response model for create application endpoint."""
25
+
26
+ model_config = ConfigDict(extra="ignore")
27
+
28
+ message: str = Field(..., description="Created application name")
@@ -0,0 +1,62 @@
1
+ """Models for guardrail assignments."""
2
+
3
+ from typing import List
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+
8
+ class GuardrailAssignmentSetting(BaseModel):
9
+ """Model for guardrail assignment settings."""
10
+
11
+ model_config = ConfigDict(extra="ignore")
12
+
13
+ mode: str = Field(..., description="Assignment mode (e.g., 'all', 'specific')")
14
+ source: str = Field(..., description="Source type (e.g., 'input', 'output')")
15
+
16
+
17
+ class GuardrailAssignmentEntity(BaseModel):
18
+ """Model for guardrail assignment to specific entities."""
19
+
20
+ model_config = ConfigDict(extra="ignore")
21
+
22
+ settings: List[GuardrailAssignmentSetting] = Field(
23
+ default_factory=list, description="List of assignment settings"
24
+ )
25
+ items: List[str] = Field(
26
+ default_factory=list, description="List of specific entity IDs"
27
+ )
28
+
29
+
30
+ class GuardrailAssignmentRequest(BaseModel):
31
+ """Request model for assigning guardrails to entities."""
32
+
33
+ model_config = ConfigDict(extra="ignore")
34
+
35
+ project: GuardrailAssignmentEntity = Field(
36
+ default_factory=lambda: GuardrailAssignmentEntity(settings=[], items=[]),
37
+ description="Project-level assignments",
38
+ )
39
+ assistants: GuardrailAssignmentEntity = Field(
40
+ default_factory=lambda: GuardrailAssignmentEntity(settings=[], items=[]),
41
+ description="Assistant-level assignments",
42
+ )
43
+ workflows: GuardrailAssignmentEntity = Field(
44
+ default_factory=lambda: GuardrailAssignmentEntity(settings=[], items=[]),
45
+ description="Workflow-level assignments",
46
+ )
47
+ datasources: GuardrailAssignmentEntity = Field(
48
+ default_factory=lambda: GuardrailAssignmentEntity(settings=[], items=[]),
49
+ description="Datasource-level assignments",
50
+ )
51
+
52
+
53
+ class GuardrailAssignmentResponse(BaseModel):
54
+ """Response model for guardrail assignment."""
55
+
56
+ model_config = ConfigDict(extra="ignore")
57
+
58
+ success: int = Field(..., description="Count of successful assignments")
59
+ failed: int = Field(..., description="Count of failed assignments")
60
+ errors: List[str] = Field(
61
+ default_factory=list, description="List of error messages"
62
+ )
@@ -0,0 +1,60 @@
1
+ """Admin service implementation."""
2
+
3
+ from typing import List, Optional
4
+
5
+ from ..models.admin import (
6
+ ApplicationsListResponse,
7
+ ApplicationCreateRequest,
8
+ ApplicationCreateResponse,
9
+ )
10
+ from ..utils import ApiRequestHandler
11
+
12
+
13
+ class AdminService:
14
+ """Service for managing CodeMie applications/projects."""
15
+
16
+ def __init__(self, api_domain: str, token: str, verify_ssl: bool = True):
17
+ """Initialize the admin service.
18
+
19
+ Args:
20
+ api_domain: Base URL for the CodeMie API
21
+ token: Authentication token
22
+ verify_ssl: Whether to verify SSL certificates
23
+ """
24
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
25
+
26
+ def list_applications(self, project_name: Optional[str] = None) -> List[str]:
27
+ """Get list of all applications/projects.
28
+
29
+ Args:
30
+ project_name: Optional project name to filter by
31
+
32
+ Returns:
33
+ List of application names
34
+ """
35
+ params = {}
36
+ if project_name:
37
+ params["search"] = project_name
38
+
39
+ response = self._api.get(
40
+ "/v1/admin/applications",
41
+ ApplicationsListResponse,
42
+ params=params if params else None,
43
+ )
44
+ return response.applications
45
+
46
+ def create_application(self, request: ApplicationCreateRequest) -> str:
47
+ """Create a new application/project.
48
+
49
+ Args:
50
+ request: Application creation request
51
+
52
+ Returns:
53
+ Created application name
54
+ """
55
+ response = self._api.post(
56
+ "/v1/admin/application",
57
+ ApplicationCreateResponse,
58
+ json_data=request.model_dump(exclude_none=True),
59
+ )
60
+ return response.message
@@ -0,0 +1,76 @@
1
+ """CodeMie guardrail service implementation for managing guardrail assignments."""
2
+
3
+ from ..models.guardrails import (
4
+ GuardrailAssignmentRequest,
5
+ GuardrailAssignmentResponse,
6
+ )
7
+ from ..utils import ApiRequestHandler
8
+
9
+
10
+ class CodemieGuardrailService:
11
+ """Service for managing CodeMie guardrail assignments."""
12
+
13
+ def __init__(self, api_domain: str, token: str, verify_ssl: bool = True):
14
+ """Initialize the CodeMie guardrail service.
15
+
16
+ Args:
17
+ api_domain: Base URL for the CodeMie API
18
+ token: Authentication token
19
+ verify_ssl: Whether to verify SSL certificates
20
+ """
21
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
22
+
23
+ def assign_guardrails(
24
+ self,
25
+ guardrail_id: str,
26
+ assignment: GuardrailAssignmentRequest,
27
+ ) -> GuardrailAssignmentResponse:
28
+ """Assign guardrails to project entities (assistants, workflows, datasources).
29
+
30
+ Args:
31
+ guardrail_id: ID of the guardrail to assign (AI run ID from installation)
32
+ assignment: Assignment configuration for different entity types
33
+
34
+ Returns:
35
+ GuardrailAssignmentResponse with success status
36
+
37
+ Example:
38
+ >>> from codemie_sdk.models.guardrails import (
39
+ ... GuardrailAssignmentRequest,
40
+ ... GuardrailAssignmentEntity,
41
+ ... GuardrailAssignmentSetting
42
+ ... )
43
+ >>> # Assign guardrail to all project assistants
44
+ >>> assignment = GuardrailAssignmentRequest(
45
+ ... assistants=GuardrailAssignmentEntity(
46
+ ... settings=[GuardrailAssignmentSetting(mode="all", source="input")],
47
+ ... items=[]
48
+ ... )
49
+ ... )
50
+ >>> response = client.codemie_guardrails.assign_guardrails(
51
+ ... guardrail_id="ai_run_123",
52
+ ... assignment=assignment
53
+ ... )
54
+ >>> if response.success:
55
+ ... print("Guardrail assigned successfully!")
56
+ >>>
57
+ >>> # Assign to specific assistants
58
+ >>> assignment = GuardrailAssignmentRequest(
59
+ ... assistants=GuardrailAssignmentEntity(
60
+ ... settings=[],
61
+ ... items=["asst_123", "asst_456"]
62
+ ... )
63
+ ... )
64
+ >>> response = client.codemie_guardrails.assign_guardrails(
65
+ ... guardrail_id="ai_run_123",
66
+ ... assignment=assignment
67
+ ... )
68
+ """
69
+ payload = assignment.model_dump(by_alias=True)
70
+
71
+ return self._api.put(
72
+ f"/v1/guardrails/{guardrail_id}/assignments",
73
+ GuardrailAssignmentResponse,
74
+ json_data=payload,
75
+ wrap_response=False,
76
+ )