codemie-sdk-python 0.1.79__tar.gz → 0.1.81__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 (30) hide show
  1. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/PKG-INFO +46 -3
  2. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/README.md +45 -2
  3. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/pyproject.toml +1 -1
  4. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/assistant.py +9 -2
  5. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/assistant.py +14 -1
  6. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/__init__.py +0 -0
  7. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/auth/__init__.py +0 -0
  8. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/auth/credentials.py +0 -0
  9. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/client/__init__.py +0 -0
  10. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/client/client.py +0 -0
  11. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/exceptions.py +0 -0
  12. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/__init__.py +0 -0
  13. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/common.py +0 -0
  14. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/datasource.py +0 -0
  15. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/integration.py +0 -0
  16. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/llm.py +0 -0
  17. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/task.py +0 -0
  18. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/user.py +0 -0
  19. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/workflow.py +0 -0
  20. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/models/workflow_state.py +0 -0
  21. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/datasource.py +0 -0
  22. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/integration.py +0 -0
  23. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/llm.py +0 -0
  24. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/task.py +0 -0
  25. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/user.py +0 -0
  26. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/workflow.py +0 -0
  27. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/workflow_execution.py +0 -0
  28. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  29. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/src/codemie_sdk/utils/__init__.py +0 -0
  30. {codemie_sdk_python-0.1.79 → codemie_sdk_python-0.1.81}/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.79
3
+ Version: 0.1.81
4
4
  Summary: CodeMie SDK for Python
5
5
  Author: Vadym Vlasenko
6
6
  Author-email: vadym_vlasenko@epam.com
@@ -182,7 +182,50 @@ chat_request = AssistantChatRequest(
182
182
  response = client.assistant.chat("assistant-id", chat_request)
183
183
  ```
184
184
 
185
- 7. **Work with Prebuilt Assistants**
185
+ 7. **Utilize structured outputs with Assistant**
186
+ ```python
187
+ from pydantic import BaseModel
188
+
189
+ class OutputSchema(BaseModel):
190
+ requirements: list[str]
191
+
192
+ chat_request = AssistantChatRequest(
193
+ text="Your message here",
194
+ stream=False,
195
+ output_schema=OutputSchema
196
+ # Additional parameters
197
+ )
198
+
199
+ response = client.assistants.chat("id", chat_request)
200
+ # response.generated is a Pydantic object
201
+ ```
202
+ Or using JSON schema in dict format
203
+ ```python
204
+ output_schema = {
205
+ "properties": {
206
+ "requirements": {
207
+ "items": {"type": "string"},
208
+ "title": "Requirements",
209
+ "type": "array",
210
+ }
211
+ },
212
+ "required": ["requirements"],
213
+ "title": "OutputSchema",
214
+ "type": "object",
215
+ }
216
+
217
+ chat_request = AssistantChatRequest(
218
+ text="Your message here",
219
+ stream=False,
220
+ output_schema=output_schema
221
+ # Additional parameters
222
+ )
223
+
224
+ response = client.assistants.chat("id", chat_request)
225
+ # response.generated is a dict corresponded with JSON schema
226
+ ```
227
+
228
+ 8. **Work with Prebuilt Assistants**
186
229
  ```python
187
230
  # List prebuilt assistants
188
231
  prebuilt = client.assistant.get_prebuilt()
@@ -191,7 +234,7 @@ prebuilt = client.assistant.get_prebuilt()
191
234
  prebuilt_assistant = client.assistant.get_prebuilt_by_slug("assistant-slug")
192
235
  ```
193
236
 
194
- 8. **Get Available Tools**
237
+ 9. **Get Available Tools**
195
238
  ```python
196
239
  tools = client.assistant.get_tools()
197
240
  ```
@@ -169,7 +169,50 @@ chat_request = AssistantChatRequest(
169
169
  response = client.assistant.chat("assistant-id", chat_request)
170
170
  ```
171
171
 
172
- 7. **Work with Prebuilt Assistants**
172
+ 7. **Utilize structured outputs with Assistant**
173
+ ```python
174
+ from pydantic import BaseModel
175
+
176
+ class OutputSchema(BaseModel):
177
+ requirements: list[str]
178
+
179
+ chat_request = AssistantChatRequest(
180
+ text="Your message here",
181
+ stream=False,
182
+ output_schema=OutputSchema
183
+ # Additional parameters
184
+ )
185
+
186
+ response = client.assistants.chat("id", chat_request)
187
+ # response.generated is a Pydantic object
188
+ ```
189
+ Or using JSON schema in dict format
190
+ ```python
191
+ output_schema = {
192
+ "properties": {
193
+ "requirements": {
194
+ "items": {"type": "string"},
195
+ "title": "Requirements",
196
+ "type": "array",
197
+ }
198
+ },
199
+ "required": ["requirements"],
200
+ "title": "OutputSchema",
201
+ "type": "object",
202
+ }
203
+
204
+ chat_request = AssistantChatRequest(
205
+ text="Your message here",
206
+ stream=False,
207
+ output_schema=output_schema
208
+ # Additional parameters
209
+ )
210
+
211
+ response = client.assistants.chat("id", chat_request)
212
+ # response.generated is a dict corresponded with JSON schema
213
+ ```
214
+
215
+ 8. **Work with Prebuilt Assistants**
173
216
  ```python
174
217
  # List prebuilt assistants
175
218
  prebuilt = client.assistant.get_prebuilt()
@@ -178,7 +221,7 @@ prebuilt = client.assistant.get_prebuilt()
178
221
  prebuilt_assistant = client.assistant.get_prebuilt_by_slug("assistant-slug")
179
222
  ```
180
223
 
181
- 8. **Get Available Tools**
224
+ 9. **Get Available Tools**
182
225
  ```python
183
226
  tools = client.assistant.get_tools()
184
227
  ```
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codemie-sdk-python"
3
- version = "0.1.79"
3
+ version = "0.1.81"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -3,7 +3,7 @@
3
3
  import uuid
4
4
  from datetime import datetime
5
5
  from enum import Enum
6
- from typing import List, Optional, Any, Union, Dict
6
+ from typing import List, Optional, Any, Union, Dict, Type
7
7
 
8
8
  from pydantic import BaseModel, Field, ConfigDict, model_validator
9
9
 
@@ -227,12 +227,19 @@ class AssistantChatRequest(BaseModel):
227
227
  default=None, description="Provide additional metadata"
228
228
  )
229
229
  tools_config: Optional[List[ToolConfig]] = None
230
+ output_schema: Optional[dict | Type[BaseModel]] = Field(
231
+ default=None,
232
+ description="Structured output schema for the agent. \
233
+ If specified, `generated` field in response will have the same type",
234
+ )
230
235
 
231
236
 
232
237
  class BaseModelResponse(BaseModel):
233
238
  """Model for chat response from assistant."""
234
239
 
235
- generated: str = Field(description="Generated response error_message")
240
+ generated: str | dict | BaseModel = Field(
241
+ description="Generated response. If output_schema in request is specified, corresponds with its type"
242
+ )
236
243
  time_elapsed: Optional[float] = Field(
237
244
  default=None, alias="timeElapsed", description="Time taken for generation"
238
245
  )
@@ -3,6 +3,8 @@
3
3
  import json
4
4
  from pathlib import Path
5
5
  from typing import List, Union, Optional, Dict, Any, Literal
6
+ from pydantic import BaseModel
7
+ from copy import deepcopy
6
8
 
7
9
  import requests
8
10
 
@@ -180,12 +182,23 @@ class AssistantService:
180
182
  Returns:
181
183
  Chat response or streaming response
182
184
  """
183
- return self._api.post(
185
+ pydantic_schema = None
186
+ if issubclass(request.output_schema, BaseModel):
187
+ pydantic_schema = deepcopy(request.output_schema)
188
+ request.output_schema = request.output_schema.model_json_schema()
189
+
190
+ response = self._api.post(
184
191
  f"/v1/assistants/{assistant_id}/model",
185
192
  BaseModelResponse,
186
193
  json_data=request.model_dump(exclude_none=True, by_alias=True),
187
194
  stream=request.stream,
188
195
  )
196
+ if not request.stream and pydantic_schema:
197
+ # we do conversion to the BaseModel here because self._parse_response don't see actual request model,
198
+ # where reflected desired output format for structured output
199
+ response.generated = pydantic_schema.model_validate(response.generated)
200
+
201
+ return response
189
202
 
190
203
  def upload_file_to_chat(self, file_path: Path):
191
204
  """Upload a file to assistant chat and return the response containing file_url."""