codemie-sdk-python 0.1.514__tar.gz → 0.1.516__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 (64) hide show
  1. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/PKG-INFO +1 -1
  2. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/pyproject.toml +1 -1
  3. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/client/client.py +4 -0
  4. codemie_sdk_python-0.1.516/src/codemie_sdk/models/activity_event.py +45 -0
  5. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/workflow.py +70 -0
  6. codemie_sdk_python-0.1.516/src/codemie_sdk/services/activity_event.py +103 -0
  7. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/user.py +16 -0
  8. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/workflow.py +41 -0
  9. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/README.md +0 -0
  10. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/__init__.py +0 -0
  11. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/auth/__init__.py +0 -0
  12. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/auth/credentials.py +0 -0
  13. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/client/__init__.py +0 -0
  14. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/exceptions.py +0 -0
  15. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/__init__.py +0 -0
  16. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/admin.py +0 -0
  17. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/analytics.py +0 -0
  18. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/assistant.py +0 -0
  19. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/categories.py +0 -0
  20. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/common.py +0 -0
  21. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/conversation.py +0 -0
  22. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/datasource.py +0 -0
  23. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/errors.py +0 -0
  24. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/file_operation.py +0 -0
  25. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/guardrails.py +0 -0
  26. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/integration.py +0 -0
  27. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/llm.py +0 -0
  28. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/mermaid.py +0 -0
  29. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/project.py +0 -0
  30. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/skill.py +0 -0
  31. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/task.py +0 -0
  32. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/user.py +0 -0
  33. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/vendor_assistant.py +0 -0
  34. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
  35. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
  36. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/vendor_runtime.py +0 -0
  37. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/vendor_workflow.py +0 -0
  38. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
  39. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/workflow_state.py +0 -0
  40. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
  41. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/admin.py +0 -0
  42. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/analytics.py +0 -0
  43. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/assistant.py +0 -0
  44. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/categories.py +0 -0
  45. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
  46. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/conversation.py +0 -0
  47. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/datasource.py +0 -0
  48. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/files.py +0 -0
  49. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/integration.py +0 -0
  50. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/llm.py +0 -0
  51. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/mermaid.py +0 -0
  52. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/project.py +0 -0
  53. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/skill.py +0 -0
  54. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/task.py +0 -0
  55. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/vendor_assistant.py +0 -0
  56. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
  57. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
  58. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/vendor_runtime.py +0 -0
  59. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/vendor_workflow.py +0 -0
  60. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/webhook.py +0 -0
  61. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/workflow_execution.py +0 -0
  62. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  63. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/src/codemie_sdk/utils/__init__.py +0 -0
  64. {codemie_sdk_python-0.1.514 → codemie_sdk_python-0.1.516}/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.514
3
+ Version: 0.1.516
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.514"
3
+ version = "0.1.516"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -24,6 +24,7 @@ from ..services.vendor_workflow import VendorWorkflowService
24
24
  from ..services.vendor_knowledgebase import VendorKnowledgeBaseService
25
25
  from ..services.vendor_guardrail import VendorGuardrailService
26
26
  from ..services.vendor_runtime import VendorRuntimeService
27
+ from ..services.activity_event import ActivityEventService
27
28
  from ..services.codemie_guardrails import CodemieGuardrailService
28
29
 
29
30
 
@@ -157,6 +158,9 @@ class CodeMieClient:
157
158
  self.codemie_guardrails = CodemieGuardrailService(
158
159
  self._api_domain, _token_source, verify_ssl=self._verify_ssl
159
160
  )
161
+ self.activity_events = ActivityEventService(
162
+ self._api_domain, _token_source, verify_ssl=self._verify_ssl
163
+ )
160
164
 
161
165
  @property
162
166
  def token(self) -> str:
@@ -0,0 +1,45 @@
1
+ """Models for activity event data structures."""
2
+
3
+ from datetime import datetime
4
+ from typing import Any, Dict, List, Optional
5
+
6
+ from pydantic import BaseModel, ConfigDict
7
+
8
+
9
+ class ActivityEventListItem(BaseModel):
10
+ model_config = ConfigDict(extra="ignore")
11
+
12
+ id: str
13
+ domain: str
14
+ event_type: str
15
+ entity_type: Optional[str] = None
16
+ entity_id: Optional[str] = None
17
+ actor_id: Optional[str] = None
18
+ actor_email: Optional[str] = None
19
+ actor_name: Optional[str] = None
20
+ attributes: Optional[Dict[str, Any]] = None
21
+ created_at: datetime
22
+
23
+
24
+ class ActivityEventPagination(BaseModel):
25
+ model_config = ConfigDict(extra="ignore")
26
+
27
+ total: int
28
+ page: int = 0
29
+ per_page: int
30
+ pages: int = 1
31
+
32
+
33
+ class PaginatedActivityEventResponse(BaseModel):
34
+ model_config = ConfigDict(extra="ignore")
35
+
36
+ data: List[ActivityEventListItem]
37
+ pagination: ActivityEventPagination
38
+
39
+
40
+ class ActivityEventFilterOptions(BaseModel):
41
+ model_config = ConfigDict(extra="ignore")
42
+
43
+ domains: List[str]
44
+ event_types: List[str]
45
+ entity_types: List[str]
@@ -100,3 +100,73 @@ class WorkflowEvaluationRequest(BaseModel):
100
100
  max_concurrency: int = Field(
101
101
  default=1, ge=1, le=5, description="Maximum number of concurrent evaluations"
102
102
  )
103
+
104
+
105
+ class WorkflowGeneratorRequest(BaseModel):
106
+ """Request model for generating a workflow from a natural language description.
107
+
108
+ Maps to the backend's ``WorkflowGeneratorRequest``
109
+ (``src/codemie/rest_api/models/workflow_generator.py``), where the wire field
110
+ for the natural language description is ``text`` (not ``nl_query`` — that name
111
+ is only used internally as the service-layer parameter).
112
+ """
113
+
114
+ text: str = Field(..., min_length=1)
115
+ llm_model: str | None = None
116
+ persist: bool = False
117
+ guardrail_ids: list[str] | None = None
118
+
119
+
120
+ class WorkflowGeneratedState(BaseModel):
121
+ """A single generated state (node) inside a generated workflow config."""
122
+
123
+ model_config = ConfigDict(extra="allow")
124
+
125
+ id: str | None = None
126
+ assistant_id: str | None = None
127
+ tool_id: str | None = None
128
+ custom_node_id: str | None = None
129
+ task: str | None = None
130
+ next: dict | None = None
131
+
132
+
133
+ class WorkflowGeneratedAssistant(BaseModel):
134
+ """A single generated assistant reference inside a generated workflow config."""
135
+
136
+ model_config = ConfigDict(extra="allow")
137
+
138
+ id: str | None = None
139
+ assistant_id: str | None = None
140
+
141
+
142
+ class WorkflowGeneratorConfig(BaseModel):
143
+ """The generated workflow configuration returned by the generator.
144
+
145
+ Mirrors the backend's ``CreateWorkflowRequest`` shape
146
+ (``src/codemie/core/workflow_models/workflow_models.py``). Uses
147
+ ``extra="allow"`` since the backend model carries additional fields (e.g.
148
+ ``guardrail_assignments``) that are not required for test assertions.
149
+ """
150
+
151
+ model_config = ConfigDict(populate_by_name=True, extra="allow")
152
+
153
+ name: str
154
+ description: str | None = None
155
+ project: str | None = None
156
+ mode: WorkflowMode = WorkflowMode.SEQUENTIAL
157
+ yaml_config: str | None = None
158
+ shared: bool = True
159
+ assistants: list[WorkflowGeneratedAssistant] = Field(default_factory=list)
160
+ tools: list[dict] = Field(default_factory=list)
161
+ states: list[WorkflowGeneratedState] = Field(default_factory=list)
162
+ supervisor_prompt: str | None = ""
163
+ meta_config: str | None = None
164
+
165
+
166
+ class WorkflowGeneratorResponse(BaseModel):
167
+ """Response model for ``POST /v1/workflows/generate``."""
168
+
169
+ model_config = ConfigDict(populate_by_name=True)
170
+
171
+ workflow_config: WorkflowGeneratorConfig
172
+ workflow_id: str | None = None
@@ -0,0 +1,103 @@
1
+ """Activity event service implementation (maintainer only)."""
2
+
3
+ from typing import List, Optional
4
+
5
+ from ..models.activity_event import (
6
+ ActivityEventFilterOptions,
7
+ PaginatedActivityEventResponse,
8
+ )
9
+ from ..utils import ApiRequestHandler, TokenSource
10
+
11
+
12
+ class ActivityEventService:
13
+ """Service for querying the activity events audit log.
14
+
15
+ Requires maintainer privileges — all methods raise HTTP 403 for
16
+ non-maintainer callers.
17
+ """
18
+
19
+ def __init__(self, api_domain: str, token: TokenSource, verify_ssl: bool = True):
20
+ """Initialize the activity event service.
21
+
22
+ Args:
23
+ api_domain: Base URL for the CodeMie API
24
+ token: Authentication token source
25
+ verify_ssl: Whether to verify SSL certificates
26
+ """
27
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
28
+
29
+ def list_events(
30
+ self,
31
+ *,
32
+ actor_id: Optional[str] = None,
33
+ domain: Optional[List[str]] = None,
34
+ event_type: Optional[List[str]] = None,
35
+ entity_type: Optional[List[str]] = None,
36
+ entity_id: Optional[str] = None,
37
+ from_dt: Optional[str] = None,
38
+ to_dt: Optional[str] = None,
39
+ sort_dir: Optional[str] = None,
40
+ limit: Optional[int] = None,
41
+ offset: Optional[int] = None,
42
+ ) -> PaginatedActivityEventResponse:
43
+ """List activity events with optional filters.
44
+
45
+ Multi-value parameters (domain, event_type, entity_type) are serialised
46
+ as repeated query params: e.g. ?domain=user_management&domain=budget_management.
47
+
48
+ Args:
49
+ actor_id: Filter by actor user ID
50
+ domain: Filter by domain(s)
51
+ event_type: Filter by event type(s)
52
+ entity_type: Filter by entity type(s)
53
+ entity_id: Filter by entity ID
54
+ from_dt: ISO 8601 lower bound datetime (maps to 'from' query param)
55
+ to_dt: ISO 8601 upper bound datetime (maps to 'to' query param)
56
+ sort_dir: 'asc' or 'desc' (default 'desc')
57
+ limit: Results per page, 1-1000 (default 50)
58
+ offset: Pagination offset (default 0)
59
+
60
+ Returns:
61
+ PaginatedActivityEventResponse
62
+ """
63
+ params: dict = {}
64
+ if actor_id is not None:
65
+ params["actor_id"] = actor_id
66
+ if domain is not None:
67
+ params["domain"] = domain
68
+ if event_type is not None:
69
+ params["event_type"] = event_type
70
+ if entity_type is not None:
71
+ params["entity_type"] = entity_type
72
+ if entity_id is not None:
73
+ params["entity_id"] = entity_id
74
+ if from_dt is not None:
75
+ params["from"] = from_dt
76
+ if to_dt is not None:
77
+ params["to"] = to_dt
78
+ if sort_dir is not None:
79
+ params["sort_dir"] = sort_dir
80
+ if limit is not None:
81
+ params["limit"] = limit
82
+ if offset is not None:
83
+ params["offset"] = offset
84
+
85
+ return self._api.get(
86
+ "/v1/admin/activity-events",
87
+ PaginatedActivityEventResponse,
88
+ params=params if params else None,
89
+ wrap_response=False,
90
+ )
91
+
92
+ def get_filter_options(self) -> ActivityEventFilterOptions:
93
+ """Get distinct filter options available for activity events.
94
+
95
+ Returns:
96
+ ActivityEventFilterOptions with distinct domains, event_types,
97
+ and entity_types present in the audit log.
98
+ """
99
+ return self._api.get(
100
+ "/v1/admin/activity-events/filter-options",
101
+ ActivityEventFilterOptions,
102
+ wrap_response=False,
103
+ )
@@ -170,3 +170,19 @@ class UserService:
170
170
  dict,
171
171
  wrap_response=False,
172
172
  )
173
+
174
+ def reactivate_user(self, user_id: str) -> CodeMieUserDetail:
175
+ """Reactivate a previously deactivated user (SuperAdmin only).
176
+
177
+ Args:
178
+ user_id: The user's unique identifier
179
+
180
+ Returns:
181
+ Updated user details with is_active=True
182
+ """
183
+ return self._api.put(
184
+ f"/v1/admin/users/{user_id}",
185
+ CodeMieUserDetail,
186
+ json_data={"is_active": True},
187
+ wrap_response=False,
188
+ )
@@ -11,6 +11,8 @@ from ..models.workflow import (
11
11
  WorkflowCreateRequest,
12
12
  WorkflowUpdateRequest,
13
13
  WorkflowEvaluationRequest,
14
+ WorkflowGeneratorRequest,
15
+ WorkflowGeneratorResponse,
14
16
  Workflow,
15
17
  )
16
18
  from ..utils import ApiRequestHandler, TokenSource
@@ -56,6 +58,45 @@ class WorkflowService:
56
58
  """
57
59
  return self._api.post("/v1/workflows", dict, json_data=request.model_dump())
58
60
 
61
+ def generate(
62
+ self,
63
+ text: str,
64
+ llm_model: str | None = None,
65
+ persist: bool = False,
66
+ guardrail_ids: list[str] | None = None,
67
+ ) -> WorkflowGeneratorResponse:
68
+ """Generate a workflow configuration from a natural language description.
69
+
70
+ Args:
71
+ text: Natural language description of the desired workflow.
72
+ llm_model: Optional LLM model to use for generation. Falls back to
73
+ the platform default (``WORKFLOW_GENERATOR_LLM_MODEL`` or the
74
+ global default LLM) when not provided.
75
+ persist: When True, the generated workflow is validated
76
+ (``WorkflowExecutor.validate_workflow``) and saved on the
77
+ backend, and the response includes ``workflow_id``. When False
78
+ (default), only the in-memory ``workflow_config`` is returned
79
+ for client-side review/edit before an explicit
80
+ ``create_workflow`` call.
81
+ guardrail_ids: Optional guardrail IDs to attach to the generated
82
+ workflow's guardrail assignments.
83
+
84
+ Returns:
85
+ WorkflowGeneratorResponse containing the generated ``workflow_config``
86
+ and, when ``persist=True``, the created ``workflow_id``.
87
+ """
88
+ request = WorkflowGeneratorRequest(
89
+ text=text,
90
+ llm_model=llm_model,
91
+ persist=persist,
92
+ guardrail_ids=guardrail_ids,
93
+ )
94
+ return self._api.post(
95
+ "/v1/workflows/generate",
96
+ WorkflowGeneratorResponse,
97
+ json_data=request.model_dump(exclude_none=True),
98
+ )
99
+
59
100
  def update(self, workflow_id: str, request: WorkflowUpdateRequest) -> dict:
60
101
  """Update an existing workflow.
61
102