codemie-sdk-python 0.1.634__tar.gz → 0.1.636__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 (74) hide show
  1. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/PKG-INFO +1 -1
  2. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/pyproject.toml +1 -1
  3. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/conversation.py +65 -1
  4. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/conversation.py +36 -0
  5. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/utils/http.py +4 -0
  6. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/README.md +0 -0
  7. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/__init__.py +0 -0
  8. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/auth/__init__.py +0 -0
  9. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/auth/credentials.py +0 -0
  10. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/client/__init__.py +0 -0
  11. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/client/client.py +0 -0
  12. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/exceptions.py +0 -0
  13. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/__init__.py +0 -0
  14. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/a2a.py +0 -0
  15. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/activity_event.py +0 -0
  16. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/admin.py +0 -0
  17. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/analytics.py +0 -0
  18. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/assistant.py +0 -0
  19. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/categories.py +0 -0
  20. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/common.py +0 -0
  21. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/cost_center.py +0 -0
  22. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/datasource.py +0 -0
  23. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/errors.py +0 -0
  24. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/file_operation.py +0 -0
  25. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/guardrails.py +0 -0
  26. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/integration.py +0 -0
  27. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/llm.py +0 -0
  28. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/mcp_config.py +0 -0
  29. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/mermaid.py +0 -0
  30. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/project.py +0 -0
  31. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/skill.py +0 -0
  32. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/task.py +0 -0
  33. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/user.py +0 -0
  34. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/vendor_assistant.py +0 -0
  35. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
  36. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
  37. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/vendor_runtime.py +0 -0
  38. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/vendor_workflow.py +0 -0
  39. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/workflow.py +0 -0
  40. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
  41. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/workflow_state.py +0 -0
  42. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
  43. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/models/workflow_transition.py +0 -0
  44. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/a2a.py +0 -0
  45. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/activity_event.py +0 -0
  46. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/admin.py +0 -0
  47. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/analytics.py +0 -0
  48. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/assistant.py +0 -0
  49. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/categories.py +0 -0
  50. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
  51. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/cost_center.py +0 -0
  52. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/customer_config_service.py +0 -0
  53. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/datasource.py +0 -0
  54. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/dynamic_config.py +0 -0
  55. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/files.py +0 -0
  56. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/integration.py +0 -0
  57. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/llm.py +0 -0
  58. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/mcp_configs.py +0 -0
  59. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/mermaid.py +0 -0
  60. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/project.py +0 -0
  61. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/project_budget_groups.py +0 -0
  62. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/skill.py +0 -0
  63. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/task.py +0 -0
  64. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/user.py +0 -0
  65. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/vendor_assistant.py +0 -0
  66. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
  67. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
  68. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/vendor_runtime.py +0 -0
  69. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/vendor_workflow.py +0 -0
  70. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/webhook.py +0 -0
  71. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/workflow.py +0 -0
  72. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/workflow_execution.py +0 -0
  73. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  74. {codemie_sdk_python-0.1.634 → codemie_sdk_python-0.1.636}/src/codemie_sdk/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codemie-sdk-python
3
- Version: 0.1.634
3
+ Version: 0.1.636
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.634"
3
+ version = "0.1.636"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from datetime import datetime
6
+ from enum import Enum
6
7
 
7
8
  from pydantic import BaseModel, ConfigDict, Field
8
9
 
@@ -63,9 +64,11 @@ class HistoryMark(BaseModel):
63
64
  """Model for conversation history review/mark data."""
64
65
 
65
66
  mark: str
66
- rating: int
67
+ rating: int | None = None
67
68
  comments: str | None
68
69
  date: datetime
70
+ type: str | None = None
71
+ feedback_id: str | None = None
69
72
 
70
73
 
71
74
  class HistoryItem(BaseModel):
@@ -317,3 +320,64 @@ class AdminConversationListResponse(BaseModel):
317
320
 
318
321
  data: list[Conversation]
319
322
  pagination: ConversationPagination
323
+
324
+
325
+ # Feedback on assistant messages (EPMCDME-14625)
326
+
327
+
328
+ class FeedbackMark(str, Enum):
329
+ """Sentiment recorded for a piece of feedback on an assistant message."""
330
+
331
+ CORRECT = "correct"
332
+ PARTIALLY_CORRECT = "partially correct"
333
+ WRONG = "wrong"
334
+
335
+
336
+ class FeedbackAuthor(str, Enum):
337
+ """Who a feedback entry is attributed to."""
338
+
339
+ USER = "user"
340
+ OPERATOR = "operator"
341
+
342
+
343
+ class FeedbackCreateRequest(BaseModel):
344
+ """Model for submitting like/dislike feedback on an assistant message (POST /v1/feedback).
345
+
346
+ ``response`` is required by the backend even though the client already has
347
+ the text elsewhere: omitting it returns a 422 ``response: Field required``
348
+ error. This was the root cause of EPMCDME-14625, where the frontend built
349
+ the payload without it and negative feedback could never be submitted.
350
+ Callers must always populate ``response`` -- an empty string is a valid
351
+ value for incomplete, failed, or technical-error assistant responses.
352
+ """
353
+
354
+ model_config = ConfigDict(populate_by_name=True)
355
+
356
+ conversation_id: str = Field(alias="conversationId")
357
+ message_index: int = Field(alias="messageIndex")
358
+ assistant_id: str
359
+ request: str
360
+ response: str
361
+ mark: FeedbackMark
362
+ author: FeedbackAuthor = FeedbackAuthor.USER
363
+ comments: str | None = None
364
+ type: str | None = None
365
+ feedback_id: str | None = None
366
+
367
+
368
+ class FeedbackCreateResponse(BaseModel):
369
+ """Response for POST /v1/feedback: the id of the stored feedback entry."""
370
+
371
+ id: str
372
+
373
+
374
+ class FeedbackDeleteRequest(BaseModel):
375
+ """Model for deleting a feedback entry on an assistant message (DELETE /v1/feedback)."""
376
+
377
+ model_config = ConfigDict(populate_by_name=True)
378
+
379
+ conversation_id: str = Field(alias="conversationId")
380
+ feedback_id: str = Field(alias="feedbackId")
381
+ message_index: int = Field(alias="messageIndex")
382
+ assistant_id: str
383
+ author: FeedbackAuthor = FeedbackAuthor.USER
@@ -22,6 +22,9 @@ from ..models.conversation import (
22
22
  ConversationShareRequest,
23
23
  ConversationShareResponse,
24
24
  SharedConversationResponse,
25
+ FeedbackCreateRequest,
26
+ FeedbackCreateResponse,
27
+ FeedbackDeleteRequest,
25
28
  )
26
29
  from ..models.assistant import AssistantChatRequest
27
30
  from ..utils import ApiRequestHandler, TokenSource
@@ -349,6 +352,39 @@ class ConversationService:
349
352
  SharedConversationResponse,
350
353
  )
351
354
 
355
+ # Feedback management methods (EPMCDME-14625)
356
+
357
+ def create_feedback(self, request: FeedbackCreateRequest) -> FeedbackCreateResponse:
358
+ """Submit like/dislike feedback on an assistant message.
359
+
360
+ Args:
361
+ request: Feedback creation request. ``response`` is required by the
362
+ backend contract -- see ``FeedbackCreateRequest`` docstring.
363
+
364
+ Returns:
365
+ FeedbackCreateResponse with the id of the stored feedback entry
366
+ """
367
+ return self._api.post(
368
+ "/v1/feedback",
369
+ FeedbackCreateResponse,
370
+ json_data=request.model_dump(by_alias=True, exclude_none=True),
371
+ )
372
+
373
+ def delete_feedback(self, request: FeedbackDeleteRequest) -> BaseResponse:
374
+ """Delete a previously submitted feedback entry.
375
+
376
+ Args:
377
+ request: Feedback deletion request
378
+
379
+ Returns:
380
+ BaseResponse confirmation message
381
+ """
382
+ return self._api.delete(
383
+ "/v1/feedback",
384
+ BaseResponse,
385
+ json_data=request.model_dump(by_alias=True, exclude_none=True),
386
+ )
387
+
352
388
  # Conversation finishing (EPMCDME-11067)
353
389
 
354
390
  def finish(self, conversation_id: str) -> ConversationFinishResponse:
@@ -383,6 +383,7 @@ class ApiRequestHandler:
383
383
  endpoint: str,
384
384
  response_model: Type[T],
385
385
  params: dict[str, Any] | None = None,
386
+ json_data: dict[str, Any] | None = None,
386
387
  wrap_response: bool = True,
387
388
  ) -> T:
388
389
  """Makes a DELETE request and parses the response.
@@ -391,6 +392,8 @@ class ApiRequestHandler:
391
392
  endpoint: API endpoint path
392
393
  response_model: Pydantic model class or list[Model] for response
393
394
  params: Query parameters (for passing multiple user_id params for bulk delete)
395
+ json_data: JSON request body (some endpoints, e.g. /v1/feedback, require
396
+ a body on DELETE rather than query params)
394
397
  wrap_response: Whether response is wrapped in 'data' field
395
398
 
396
399
  Returns:
@@ -400,6 +403,7 @@ class ApiRequestHandler:
400
403
  url=f"{self._base_url}{endpoint}",
401
404
  headers=self._get_headers(),
402
405
  params=params,
406
+ json=json_data,
403
407
  verify=self._verify_ssl,
404
408
  )
405
409
  response.raise_for_status()