codemie-sdk-python 0.1.296__tar.gz → 0.1.298__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.
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/PKG-INFO +1 -1
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/pyproject.toml +1 -1
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/conversation.py +64 -9
- codemie_sdk_python-0.1.298/src/codemie_sdk/services/conversation.py +276 -0
- codemie_sdk_python-0.1.296/src/codemie_sdk/services/conversation.py +0 -90
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/README.md +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/__init__.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/auth/__init__.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/auth/credentials.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/client/__init__.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/client/client.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/exceptions.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/__init__.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/admin.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/analytics.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/assistant.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/common.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/datasource.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/file_operation.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/guardrails.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/integration.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/llm.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/mermaid.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/task.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/user.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/vendor_assistant.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/vendor_workflow.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/workflow.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/workflow_state.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/admin.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/analytics.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/assistant.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/datasource.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/files.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/integration.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/llm.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/mermaid.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/task.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/user.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/vendor_assistant.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/vendor_workflow.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/webhook.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/workflow.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/workflow_execution.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/utils/__init__.py +0 -0
- {codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/utils/http.py +0 -0
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/conversation.py
RENAMED
|
@@ -71,15 +71,15 @@ class HistoryItem(BaseModel):
|
|
|
71
71
|
message: str
|
|
72
72
|
historyIndex: int
|
|
73
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]
|
|
74
|
+
responseTime: Optional[float] = None
|
|
75
|
+
inputTokens: Optional[int] = None
|
|
76
|
+
outputTokens: Optional[int] = None
|
|
77
|
+
moneySpent: Optional[float] = None
|
|
78
|
+
userMark: Optional[HistoryMark] = None
|
|
79
|
+
operatorMark: Optional[HistoryMark] = None
|
|
80
|
+
messageRaw: Optional[str] = None
|
|
81
81
|
fileNames: List[str]
|
|
82
|
-
assistantId: Optional[str]
|
|
82
|
+
assistantId: Optional[str] = None
|
|
83
83
|
thoughts: Optional[List[Thought]] = Field(default_factory=list)
|
|
84
84
|
|
|
85
85
|
|
|
@@ -160,10 +160,65 @@ class ConversationDetails(BaseModel):
|
|
|
160
160
|
initial_assistant_id: str
|
|
161
161
|
final_user_mark: Optional[Mark]
|
|
162
162
|
final_operator_mark: Optional[Mark]
|
|
163
|
-
project: str
|
|
163
|
+
project: Optional[str]
|
|
164
164
|
conversation_details: Optional[ConversationDetailsData]
|
|
165
165
|
assistant_details: Optional[AssistantDetailsData]
|
|
166
166
|
user_abilities: Optional[List[str]]
|
|
167
167
|
is_folder_migrated: bool
|
|
168
168
|
category: Optional[str]
|
|
169
169
|
mcp_server_single_usage: Optional[bool] = False
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class BaseResponse(BaseModel):
|
|
173
|
+
"""Generic base response model with message field."""
|
|
174
|
+
|
|
175
|
+
message: str
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class UpdateConversationRequest(BaseModel):
|
|
179
|
+
"""Model for updating an existing conversation."""
|
|
180
|
+
|
|
181
|
+
name: Optional[str] = None
|
|
182
|
+
folder: Optional[str] = None
|
|
183
|
+
pinned: Optional[bool] = None
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
class ConversationFolder(BaseModel):
|
|
187
|
+
"""Model for conversation folder metadata."""
|
|
188
|
+
|
|
189
|
+
id: str
|
|
190
|
+
user_id: str
|
|
191
|
+
folder_name: str
|
|
192
|
+
date: str
|
|
193
|
+
update_date: str
|
|
194
|
+
user_abilities: List[str]
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
class UpdateConversationFolderRequest(BaseModel):
|
|
198
|
+
"""Model for creating or updating a folder name."""
|
|
199
|
+
|
|
200
|
+
folder: str
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class UpdateHistoryByIndexRequest(BaseModel):
|
|
204
|
+
"""Model for updating message content in conversation history by index."""
|
|
205
|
+
|
|
206
|
+
messageIndex: int
|
|
207
|
+
message: str
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
class UpsertHistoryRequest(BaseModel):
|
|
211
|
+
"""Model for upserting conversation history."""
|
|
212
|
+
|
|
213
|
+
history: List[HistoryItem]
|
|
214
|
+
assistant_id: Optional[str] = None
|
|
215
|
+
folder: Optional[str] = None
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class UpsertHistoryResponse(BaseModel):
|
|
219
|
+
"""Response model for conversation history upsert operation."""
|
|
220
|
+
|
|
221
|
+
conversation_id: str
|
|
222
|
+
new_messages: int
|
|
223
|
+
total_messages: int
|
|
224
|
+
created: bool
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"""Conversation service implementation."""
|
|
2
|
+
|
|
3
|
+
from typing import List
|
|
4
|
+
|
|
5
|
+
from ..models.conversation import (
|
|
6
|
+
Conversation,
|
|
7
|
+
ConversationDetails,
|
|
8
|
+
ConversationCreateRequest,
|
|
9
|
+
UpdateConversationRequest,
|
|
10
|
+
ConversationFolder,
|
|
11
|
+
UpdateConversationFolderRequest,
|
|
12
|
+
UpdateHistoryByIndexRequest,
|
|
13
|
+
UpsertHistoryRequest,
|
|
14
|
+
UpsertHistoryResponse,
|
|
15
|
+
BaseResponse,
|
|
16
|
+
)
|
|
17
|
+
from ..utils import ApiRequestHandler
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ConversationService:
|
|
21
|
+
"""Service for managing user conversations."""
|
|
22
|
+
|
|
23
|
+
def __init__(self, api_domain: str, token: str, verify_ssl: bool = True):
|
|
24
|
+
"""Initialize the conversation service.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
api_domain: Base URL for the API
|
|
28
|
+
token: Authentication token
|
|
29
|
+
verify_ssl: Whether to verify SSL certificates
|
|
30
|
+
"""
|
|
31
|
+
self._api = ApiRequestHandler(api_domain, token, verify_ssl)
|
|
32
|
+
|
|
33
|
+
def list(self) -> List[Conversation]:
|
|
34
|
+
"""Get list of all conversations for the current user.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
List of all conversations for the current user.
|
|
38
|
+
"""
|
|
39
|
+
return self._api.get("/v1/conversations", List[Conversation])
|
|
40
|
+
|
|
41
|
+
def list_by_assistant_id(self, assistant_id: str) -> List[Conversation]:
|
|
42
|
+
"""Get list of all conversations for the current user that include the specified assistant.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
assistant_id: Assistant ID
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
List of conversations for the specified assistant.
|
|
49
|
+
"""
|
|
50
|
+
return [
|
|
51
|
+
conv
|
|
52
|
+
for conv in self._api.get("/v1/conversations", List[Conversation])
|
|
53
|
+
if assistant_id in conv.assistant_ids
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
def get_conversation(self, conversation_id: str) -> ConversationDetails:
|
|
57
|
+
"""Get details for a specific conversation by its ID.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
conversation_id: Conversation ID
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Conversation details
|
|
64
|
+
"""
|
|
65
|
+
return self._api.get(
|
|
66
|
+
f"/v1/conversations/{conversation_id}",
|
|
67
|
+
ConversationDetails,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
def create(self, request: ConversationCreateRequest) -> dict:
|
|
71
|
+
"""Create a new conversation.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
request: Conversation creation request
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Created conversation details
|
|
78
|
+
"""
|
|
79
|
+
return self._api.post(
|
|
80
|
+
"/v1/conversations",
|
|
81
|
+
dict,
|
|
82
|
+
json_data=request.model_dump(exclude_none=True),
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
def delete(self, conversation_id: str) -> dict:
|
|
86
|
+
"""Delete a specific conversation by its ID.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
conversation_id: Conversation ID to delete
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
Deletion confirmation
|
|
93
|
+
"""
|
|
94
|
+
return self._api.delete(
|
|
95
|
+
f"/v1/conversations/{conversation_id}",
|
|
96
|
+
dict,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
def update(
|
|
100
|
+
self, conversation_id: str, request: UpdateConversationRequest
|
|
101
|
+
) -> ConversationDetails:
|
|
102
|
+
"""Update an existing conversation.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
conversation_id: Conversation ID to update
|
|
106
|
+
request: Update request with fields to modify
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
Updated conversation details
|
|
110
|
+
"""
|
|
111
|
+
return self._api.put(
|
|
112
|
+
f"/v1/conversations/{conversation_id}",
|
|
113
|
+
ConversationDetails,
|
|
114
|
+
json_data=request.model_dump(exclude_none=True),
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
def delete_all(self) -> BaseResponse:
|
|
118
|
+
"""Delete all conversations for the current user.
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
Deletion confirmation
|
|
122
|
+
"""
|
|
123
|
+
return self._api.delete("/v1/conversations", BaseResponse)
|
|
124
|
+
|
|
125
|
+
def get_files(self, conversation_id: str) -> list:
|
|
126
|
+
"""Get list of files attached to a conversation.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
conversation_id: Conversation ID
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
List of file names
|
|
133
|
+
"""
|
|
134
|
+
response = self._api.get(
|
|
135
|
+
f"/v1/conversations/{conversation_id}/files",
|
|
136
|
+
dict,
|
|
137
|
+
wrap_response=False,
|
|
138
|
+
)
|
|
139
|
+
# API returns list directly, not wrapped in 'data' field
|
|
140
|
+
|
|
141
|
+
return response
|
|
142
|
+
|
|
143
|
+
# Folder management methods
|
|
144
|
+
|
|
145
|
+
def list_folders(self) -> List[ConversationFolder]:
|
|
146
|
+
"""Get list of all conversation folders for the current user.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
List of conversation folders
|
|
150
|
+
"""
|
|
151
|
+
return self._api.get("/v1/conversations/folders/list", List[ConversationFolder])
|
|
152
|
+
|
|
153
|
+
def create_folder(self, request: UpdateConversationFolderRequest) -> BaseResponse:
|
|
154
|
+
"""Create a new conversation folder.
|
|
155
|
+
|
|
156
|
+
Args:
|
|
157
|
+
request: Folder creation request with name
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
Creation confirmation
|
|
161
|
+
"""
|
|
162
|
+
return self._api.post(
|
|
163
|
+
"/v1/conversations/folder",
|
|
164
|
+
BaseResponse,
|
|
165
|
+
json_data=request.model_dump(exclude_none=True),
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
def update_folder(
|
|
169
|
+
self, folder: str, request: UpdateConversationFolderRequest
|
|
170
|
+
) -> BaseResponse:
|
|
171
|
+
"""Rename an existing conversation folder.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
folder: Current folder name
|
|
175
|
+
request: Update request with new name
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Update confirmation
|
|
179
|
+
"""
|
|
180
|
+
return self._api.put(
|
|
181
|
+
f"/v1/conversations/folder/{folder}",
|
|
182
|
+
BaseResponse,
|
|
183
|
+
json_data=request.model_dump(exclude_none=True),
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
def delete_folder(
|
|
187
|
+
self, folder: str, remove_conversations: bool = False
|
|
188
|
+
) -> BaseResponse:
|
|
189
|
+
"""Delete a conversation folder.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
folder: Folder name to delete
|
|
193
|
+
remove_conversations: Whether to also delete conversations in the folder
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
Deletion confirmation
|
|
197
|
+
"""
|
|
198
|
+
endpoint = f"/v1/conversations/folder/{folder}"
|
|
199
|
+
if remove_conversations:
|
|
200
|
+
endpoint += "?remove_conversations=true"
|
|
201
|
+
else:
|
|
202
|
+
endpoint += "?remove_conversations=false"
|
|
203
|
+
|
|
204
|
+
return self._api.delete(endpoint, BaseResponse)
|
|
205
|
+
|
|
206
|
+
# History management methods
|
|
207
|
+
|
|
208
|
+
def upsert_history(
|
|
209
|
+
self, conversation_id: str, request: UpsertHistoryRequest
|
|
210
|
+
) -> UpsertHistoryResponse:
|
|
211
|
+
"""Create or update conversation with history (idempotent upsert).
|
|
212
|
+
|
|
213
|
+
If conversation doesn't exist, creates it with custom ID and provided history.
|
|
214
|
+
If conversation exists, appends only NEW messages not already present.
|
|
215
|
+
|
|
216
|
+
Args:
|
|
217
|
+
conversation_id: Conversation ID (will be created if doesn't exist)
|
|
218
|
+
request: History upsert request with messages
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
Upsert response with metadata about operation
|
|
222
|
+
"""
|
|
223
|
+
return self._api.put(
|
|
224
|
+
f"/v1/conversations/{conversation_id}/history",
|
|
225
|
+
UpsertHistoryResponse,
|
|
226
|
+
json_data=request.model_dump(mode="json", exclude_none=True),
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
def delete_history(self, conversation_id: str) -> ConversationDetails:
|
|
230
|
+
"""Clear all history from a conversation.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
conversation_id: Conversation ID
|
|
234
|
+
|
|
235
|
+
Returns:
|
|
236
|
+
Updated conversation details with empty history
|
|
237
|
+
"""
|
|
238
|
+
return self._api.delete(
|
|
239
|
+
f"/v1/conversations/{conversation_id}/history",
|
|
240
|
+
ConversationDetails,
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
def delete_history_by_index(
|
|
244
|
+
self, conversation_id: str, history_index: int
|
|
245
|
+
) -> ConversationDetails:
|
|
246
|
+
"""Remove a specific history item by index.
|
|
247
|
+
|
|
248
|
+
Args:
|
|
249
|
+
conversation_id: Conversation ID
|
|
250
|
+
history_index: Index of history item to delete
|
|
251
|
+
|
|
252
|
+
Returns:
|
|
253
|
+
Updated conversation details
|
|
254
|
+
"""
|
|
255
|
+
return self._api.delete(
|
|
256
|
+
f"/v1/conversations/{conversation_id}/history/{history_index}",
|
|
257
|
+
ConversationDetails,
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
def update_history_by_index(
|
|
261
|
+
self, conversation_id: str, request: UpdateHistoryByIndexRequest
|
|
262
|
+
) -> ConversationDetails:
|
|
263
|
+
"""Update an Assistant response in conversation history by index.
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
conversation_id: Conversation ID
|
|
267
|
+
request: Update request with message index and new message content
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
Updated conversation details
|
|
271
|
+
"""
|
|
272
|
+
return self._api.put(
|
|
273
|
+
f"/v1/conversations/{conversation_id}/history/{request.messageIndex}",
|
|
274
|
+
ConversationDetails,
|
|
275
|
+
json_data=request.model_dump(exclude_none=True),
|
|
276
|
+
)
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"""Conversation service implementation."""
|
|
2
|
-
|
|
3
|
-
from typing import List
|
|
4
|
-
|
|
5
|
-
from ..models.conversation import (
|
|
6
|
-
Conversation,
|
|
7
|
-
ConversationDetails,
|
|
8
|
-
ConversationCreateRequest,
|
|
9
|
-
)
|
|
10
|
-
from ..utils import ApiRequestHandler
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class ConversationService:
|
|
14
|
-
"""Service for managing user conversations."""
|
|
15
|
-
|
|
16
|
-
def __init__(self, api_domain: str, token: str, verify_ssl: bool = True):
|
|
17
|
-
"""Initialize the conversation service.
|
|
18
|
-
|
|
19
|
-
Args:
|
|
20
|
-
api_domain: Base URL for the 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(self) -> List[Conversation]:
|
|
27
|
-
"""Get list of all conversations for the current user.
|
|
28
|
-
|
|
29
|
-
Returns:
|
|
30
|
-
List of all conversations for the current user.
|
|
31
|
-
"""
|
|
32
|
-
return self._api.get("/v1/conversations", List[Conversation])
|
|
33
|
-
|
|
34
|
-
def list_by_assistant_id(self, assistant_id: str) -> List[Conversation]:
|
|
35
|
-
"""Get list of all conversations for the current user that include the specified assistant.
|
|
36
|
-
|
|
37
|
-
Args:
|
|
38
|
-
assistant_id: Assistant ID
|
|
39
|
-
|
|
40
|
-
Returns:
|
|
41
|
-
List of conversations for the specified assistant.
|
|
42
|
-
"""
|
|
43
|
-
return [
|
|
44
|
-
conv
|
|
45
|
-
for conv in self._api.get("/v1/conversations", List[Conversation])
|
|
46
|
-
if assistant_id in conv.assistant_ids
|
|
47
|
-
]
|
|
48
|
-
|
|
49
|
-
def get_conversation(self, conversation_id: str) -> ConversationDetails:
|
|
50
|
-
"""Get details for a specific conversation by its ID.
|
|
51
|
-
|
|
52
|
-
Args:
|
|
53
|
-
conversation_id: Conversation ID
|
|
54
|
-
|
|
55
|
-
Returns:
|
|
56
|
-
Conversation details
|
|
57
|
-
"""
|
|
58
|
-
return self._api.get(
|
|
59
|
-
f"/v1/conversations/{conversation_id}",
|
|
60
|
-
ConversationDetails,
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
def create(self, request: ConversationCreateRequest) -> dict:
|
|
64
|
-
"""Create a new conversation.
|
|
65
|
-
|
|
66
|
-
Args:
|
|
67
|
-
request: Conversation creation request
|
|
68
|
-
|
|
69
|
-
Returns:
|
|
70
|
-
Created conversation details
|
|
71
|
-
"""
|
|
72
|
-
return self._api.post(
|
|
73
|
-
"/v1/conversations",
|
|
74
|
-
dict,
|
|
75
|
-
json_data=request.model_dump(exclude_none=True),
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
def delete(self, conversation_id: str) -> dict:
|
|
79
|
-
"""Delete a specific conversation by its ID.
|
|
80
|
-
|
|
81
|
-
Args:
|
|
82
|
-
conversation_id: Conversation ID to delete
|
|
83
|
-
|
|
84
|
-
Returns:
|
|
85
|
-
Deletion confirmation
|
|
86
|
-
"""
|
|
87
|
-
return self._api.delete(
|
|
88
|
-
f"/v1/conversations/{conversation_id}",
|
|
89
|
-
dict,
|
|
90
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/auth/credentials.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/client/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/analytics.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/assistant.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/datasource.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/file_operation.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/guardrails.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/vendor_assistant.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/vendor_guardrail.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/vendor_workflow.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/workflow.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/models/workflow_state.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/analytics.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/assistant.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/datasource.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/integration.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/mermaid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/webhook.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.296 → codemie_sdk_python-0.1.298}/src/codemie_sdk/services/workflow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|