codemie-sdk-python 0.1.134__tar.gz → 0.1.136__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.

Potentially problematic release.


This version of codemie-sdk-python might be problematic. Click here for more details.

Files changed (32) hide show
  1. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/PKG-INFO +33 -1
  2. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/README.md +32 -0
  3. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/pyproject.toml +1 -1
  4. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/client/client.py +7 -0
  5. codemie_sdk_python-0.1.136/src/codemie_sdk/models/conversation.py +160 -0
  6. codemie_sdk_python-0.1.136/src/codemie_sdk/services/conversation.py +71 -0
  7. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/__init__.py +0 -0
  8. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/auth/__init__.py +0 -0
  9. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/auth/credentials.py +0 -0
  10. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/client/__init__.py +0 -0
  11. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/exceptions.py +0 -0
  12. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/__init__.py +0 -0
  13. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/assistant.py +0 -0
  14. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/common.py +0 -0
  15. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/datasource.py +0 -0
  16. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/integration.py +0 -0
  17. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/llm.py +0 -0
  18. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/task.py +0 -0
  19. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/user.py +0 -0
  20. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/workflow.py +0 -0
  21. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/models/workflow_state.py +0 -0
  22. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/assistant.py +0 -0
  23. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/datasource.py +0 -0
  24. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/integration.py +0 -0
  25. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/llm.py +0 -0
  26. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/task.py +0 -0
  27. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/user.py +0 -0
  28. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/workflow.py +0 -0
  29. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/workflow_execution.py +0 -0
  30. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  31. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/src/codemie_sdk/utils/__init__.py +0 -0
  32. {codemie_sdk_python-0.1.134 → codemie_sdk_python-0.1.136}/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.134
3
+ Version: 0.1.136
4
4
  Summary: CodeMie SDK for Python
5
5
  Author: Vadym Vlasenko
6
6
  Author-email: vadym_vlasenko@epam.com
@@ -41,6 +41,8 @@ Python SDK for CodeMie services. This SDK provides a comprehensive interface to
41
41
  - [Best Practices](#best-practices)
42
42
  - [Error Handling](#error-handling)
43
43
  - [Workflow Status Monitoring](#workflow-status-monitoring)
44
+ - [Conversation Service](#conversation-service)
45
+ - [Core Methods](#core-methods-4)
44
46
  - [Development](#development)
45
47
  - [Setup](#setup)
46
48
  - [Running Tests](#running-tests)
@@ -703,6 +705,36 @@ def monitor_execution(execution_service, execution_id):
703
705
  time.sleep(5) # Poll every 5 seconds
704
706
  ```
705
707
 
708
+ ### Conversation Service
709
+
710
+ The Conversation service provides access to manage user conversations within CodeMie Assistants.
711
+
712
+ #### Core Methods
713
+
714
+ 1. **Get All Conversations**
715
+ ```python
716
+ # List all conversations for current user
717
+ conversations = client.conversations.list()
718
+ ```
719
+
720
+ 2. **Get Specific Conversation**
721
+ ```python
722
+ # Get Conversation by it's ID
723
+ client.conversations.get_conversation("conversation-id")
724
+ ```
725
+
726
+ 3. **Get Conversation by Assistant ID**
727
+ ```python
728
+ # Get Conversation where Assistant ID is present
729
+ client.conversations.list_by_assistant_id("assistant-id")
730
+ ```
731
+
732
+ 4. **Delete Conversation**
733
+ ```python
734
+ # Delete specific conversation
735
+ client.conversations.delete("conversation-id")
736
+ ```
737
+
706
738
  ## Error Handling
707
739
 
708
740
  The SDK implements comprehensive error handling. All API calls may raise exceptions for:
@@ -28,6 +28,8 @@ Python SDK for CodeMie services. This SDK provides a comprehensive interface to
28
28
  - [Best Practices](#best-practices)
29
29
  - [Error Handling](#error-handling)
30
30
  - [Workflow Status Monitoring](#workflow-status-monitoring)
31
+ - [Conversation Service](#conversation-service)
32
+ - [Core Methods](#core-methods-4)
31
33
  - [Development](#development)
32
34
  - [Setup](#setup)
33
35
  - [Running Tests](#running-tests)
@@ -690,6 +692,36 @@ def monitor_execution(execution_service, execution_id):
690
692
  time.sleep(5) # Poll every 5 seconds
691
693
  ```
692
694
 
695
+ ### Conversation Service
696
+
697
+ The Conversation service provides access to manage user conversations within CodeMie Assistants.
698
+
699
+ #### Core Methods
700
+
701
+ 1. **Get All Conversations**
702
+ ```python
703
+ # List all conversations for current user
704
+ conversations = client.conversations.list()
705
+ ```
706
+
707
+ 2. **Get Specific Conversation**
708
+ ```python
709
+ # Get Conversation by it's ID
710
+ client.conversations.get_conversation("conversation-id")
711
+ ```
712
+
713
+ 3. **Get Conversation by Assistant ID**
714
+ ```python
715
+ # Get Conversation where Assistant ID is present
716
+ client.conversations.list_by_assistant_id("assistant-id")
717
+ ```
718
+
719
+ 4. **Delete Conversation**
720
+ ```python
721
+ # Delete specific conversation
722
+ client.conversations.delete("conversation-id")
723
+ ```
724
+
693
725
  ## Error Handling
694
726
 
695
727
  The SDK implements comprehensive error handling. All API calls may raise exceptions for:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codemie-sdk-python"
3
- version = "0.1.134"
3
+ version = "0.1.136"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -4,6 +4,7 @@ from typing import Optional
4
4
 
5
5
  from ..auth.credentials import KeycloakCredentials
6
6
  from ..services.assistant import AssistantService
7
+ from ..services.conversation import ConversationService
7
8
  from ..services.datasource import DatasourceService
8
9
  from ..services.llm import LLMService
9
10
  from ..services.integration import IntegrationService
@@ -76,6 +77,9 @@ class CodeMieClient:
76
77
  self.workflows = WorkflowService(
77
78
  self._api_domain, self._token, verify_ssl=self._verify_ssl
78
79
  )
80
+ self.conversations = ConversationService(
81
+ self._api_domain, self._token, verify_ssl=self._verify_ssl
82
+ )
79
83
 
80
84
  @property
81
85
  def token(self) -> str:
@@ -109,4 +113,7 @@ class CodeMieClient:
109
113
  self.workflows = WorkflowService(
110
114
  self._api_domain, self._token, verify_ssl=self._verify_ssl
111
115
  )
116
+ self.conversations = ConversationService(
117
+ self._api_domain, self._token, verify_ssl=self._verify_ssl
118
+ )
112
119
  return self._token
@@ -0,0 +1,160 @@
1
+ """Models for conversation-related data structures."""
2
+
3
+ from datetime import datetime
4
+ from typing import List, Optional, Union
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from codemie_sdk.models.assistant import ContextType
9
+
10
+
11
+ class Conversation(BaseModel):
12
+ """
13
+ Model for conversation summary data as returned from the list endpoint.
14
+ """
15
+
16
+ id: str
17
+ name: str
18
+ folder: Optional[str]
19
+ pinned: bool
20
+ date: str
21
+ assistant_ids: List[str]
22
+ initial_assistant_id: Optional[str]
23
+
24
+
25
+ class Mark(BaseModel):
26
+ """Model for conversation review/mark data."""
27
+
28
+ mark: str
29
+ rating: int
30
+ comments: str
31
+ date: datetime
32
+ operator: Optional["Operator"] = None
33
+
34
+
35
+ class Operator(BaseModel):
36
+ """Represents an operator involved in marking a conversation."""
37
+
38
+ user_id: str
39
+ name: str
40
+
41
+
42
+ class Thought(BaseModel):
43
+ """Model for reasoning or tool-invocation within a message's history."""
44
+
45
+ id: str
46
+ parent_id: Optional[str]
47
+ metadata: dict
48
+ in_progress: bool
49
+ input_text: Optional[str]
50
+ message: Optional[str]
51
+ author_type: str
52
+ author_name: str
53
+ output_format: str
54
+ error: Optional[bool]
55
+ children: List[str]
56
+
57
+
58
+ class HistoryMark(BaseModel):
59
+ """Model for conversation history review/mark data."""
60
+
61
+ mark: str
62
+ rating: int
63
+ comments: Optional[str]
64
+ date: datetime
65
+
66
+
67
+ class HistoryItem(BaseModel):
68
+ """Represents an individual message within a conversation's history."""
69
+
70
+ role: str
71
+ message: str
72
+ historyIndex: int
73
+ date: datetime
74
+ responseTime: Optional[float]
75
+ inputTokens: Optional[int]
76
+ outputTokens: Optional[int]
77
+ moneySpent: Optional[float]
78
+ userMark: Optional[HistoryMark]
79
+ operatorMark: Optional[HistoryMark]
80
+ messageRaw: Optional[str]
81
+ fileNames: List[str]
82
+ assistantId: Optional[str]
83
+ thoughts: Optional[List[Thought]] = Field(default_factory=list)
84
+
85
+
86
+ class ContextItem(BaseModel):
87
+ """Represents contextual settings for conversation."""
88
+
89
+ context_type: Optional[ContextType]
90
+ name: str
91
+
92
+
93
+ class ToolItem(BaseModel):
94
+ """Represents a tool used by an assistant, including configuration and description."""
95
+
96
+ name: str
97
+ label: Optional[str]
98
+ settings_config: Optional[bool]
99
+ user_description: Optional[str]
100
+
101
+
102
+ class AssistantDataItem(BaseModel):
103
+ """Model represents details for an assistant included in a conversation."""
104
+
105
+ assistant_id: str
106
+ assistant_name: str
107
+ assistant_icon: str
108
+ assistant_type: str
109
+ context: List[Union[ContextItem, str]]
110
+ tools: List[ToolItem]
111
+ conversation_starters: List[str]
112
+
113
+
114
+ class ConversationDetailsData(BaseModel):
115
+ """Extended details about a conversation's configuration and context."""
116
+
117
+ llm_model: Optional[str]
118
+ context: List[ContextItem]
119
+ app_name: Optional[str]
120
+ repo_name: Optional[str]
121
+ index_type: Optional[str]
122
+
123
+
124
+ class AssistantDetailsData(BaseModel):
125
+ """Extended details about an assistant included in a conversation."""
126
+
127
+ assistant_id: str
128
+ assistant_name: str
129
+ assistant_icon: str
130
+ assistant_type: str
131
+ context: List[Union[ContextItem, str]]
132
+ tools: List[ToolItem]
133
+ conversation_starters: List[str]
134
+
135
+
136
+ class ConversationDetails(BaseModel):
137
+ """Summary information for a user conversation as returned from list endpoints."""
138
+
139
+ id: str
140
+ date: datetime
141
+ update_date: datetime
142
+ conversation_id: str
143
+ conversation_name: str
144
+ llm_model: Optional[str]
145
+ folder: Optional[str]
146
+ pinned: bool
147
+ history: List[HistoryItem]
148
+ user_id: str
149
+ user_name: str
150
+ assistant_ids: List[str]
151
+ assistant_data: List[AssistantDataItem]
152
+ initial_assistant_id: str
153
+ final_user_mark: Optional[Mark]
154
+ final_operator_mark: Optional[Mark]
155
+ project: str
156
+ conversation_details: Optional[ConversationDetailsData]
157
+ assistant_details: Optional[AssistantDetailsData]
158
+ user_abilities: Optional[List[str]]
159
+ is_folder_migrated: bool
160
+ category: Optional[str]
@@ -0,0 +1,71 @@
1
+ """Conversation service implementation."""
2
+
3
+ from typing import List
4
+
5
+ from ..models.conversation import Conversation, ConversationDetails
6
+ from ..utils import ApiRequestHandler
7
+
8
+
9
+ class ConversationService:
10
+ """Service for managing user conversations."""
11
+
12
+ def __init__(self, api_domain: str, token: str, verify_ssl: bool = True):
13
+ """Initialize the conversation service.
14
+
15
+ Args:
16
+ api_domain: Base URL for the API
17
+ token: Authentication token
18
+ verify_ssl: Whether to verify SSL certificates
19
+ """
20
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
21
+
22
+ def list(self) -> List[Conversation]:
23
+ """Get list of all conversations for the current user.
24
+
25
+ Returns:
26
+ List of all conversations for the current user.
27
+ """
28
+ return self._api.get("/v1/conversations", List[Conversation])
29
+
30
+ def list_by_assistant_id(self, assistant_id: str) -> List[Conversation]:
31
+ """Get list of all conversations for the current user that include the specified assistant.
32
+
33
+ Args:
34
+ assistant_id: Assistant ID
35
+
36
+ Returns:
37
+ List of conversations for the specified assistant.
38
+ """
39
+ return [
40
+ conv
41
+ for conv in self._api.get("/v1/conversations", List[Conversation])
42
+ if assistant_id in conv.assistant_ids
43
+ ]
44
+
45
+ def get_conversation(self, conversation_id: str) -> ConversationDetails:
46
+ """Get details for a specific conversation by its ID.
47
+
48
+ Args:
49
+ conversation_id: Conversation ID
50
+
51
+ Returns:
52
+ Conversation details
53
+ """
54
+ return self._api.get(
55
+ f"/v1/conversations/{conversation_id}",
56
+ ConversationDetails,
57
+ )
58
+
59
+ def delete(self, conversation_id: str) -> dict:
60
+ """Delete a specific conversation by its ID.
61
+
62
+ Args:
63
+ conversation_id: Conversation ID to delete
64
+
65
+ Returns:
66
+ Deletion confirmation
67
+ """
68
+ return self._api.delete(
69
+ f"/v1/conversations/{conversation_id}",
70
+ dict,
71
+ )