unique_sdk 0.10.30__tar.gz → 0.10.32__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 (43) hide show
  1. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/CHANGELOG.md +6 -0
  2. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/PKG-INFO +114 -1
  3. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/README.md +107 -0
  4. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/pyproject.toml +1 -1
  5. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_message.py +56 -0
  6. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_message_log.py +1 -1
  7. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/LICENSE +0 -0
  8. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/__init__.py +0 -0
  9. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_api_requestor.py +0 -0
  10. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_api_resource.py +0 -0
  11. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_api_version.py +0 -0
  12. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_error.py +0 -0
  13. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_http_client.py +0 -0
  14. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_list_object.py +0 -0
  15. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_object_classes.py +0 -0
  16. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_request_options.py +0 -0
  17. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_unique_object.py +0 -0
  18. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_unique_ql.py +0 -0
  19. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_unique_response.py +0 -0
  20. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_util.py +0 -0
  21. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_version.py +0 -0
  22. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/_webhook.py +0 -0
  23. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/__init__.py +0 -0
  24. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_acronyms.py +0 -0
  25. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_agentic_table.py +0 -0
  26. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_chat_completion.py +0 -0
  27. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_content.py +0 -0
  28. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_embedding.py +0 -0
  29. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_event.py +0 -0
  30. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_folder.py +0 -0
  31. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_integrated.py +0 -0
  32. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_mcp.py +0 -0
  33. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_message_assessment.py +0 -0
  34. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_message_execution.py +0 -0
  35. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_search.py +0 -0
  36. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_search_string.py +0 -0
  37. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_short_term_memory.py +0 -0
  38. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/api_resources/_space.py +0 -0
  39. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/utils/chat_history.py +0 -0
  40. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/utils/chat_in_space.py +0 -0
  41. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/utils/file_io.py +0 -0
  42. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/utils/sources.py +0 -0
  43. {unique_sdk-0.10.30 → unique_sdk-0.10.32}/unique_sdk/utils/token.py +0 -0
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.10.32] - 2025-10-14
9
+ - Add function to stream to chat frontend.
10
+
11
+ ## [0.10.31] - 2025-10-13
12
+ - Add readme for message log and execution.
13
+
8
14
  ## [0.10.30] - 2025-10-07
9
15
  - Improve types for content get infos.
10
16
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_sdk
3
- Version: 0.10.30
3
+ Version: 0.10.32
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: Martin Fadler
@@ -31,6 +31,8 @@ The Unique Python SDK provides access to the public API of Unique AI. It also en
31
31
  5. [Available API Resources](#available-api-resources)
32
32
  - [Content](#content)
33
33
  - [Message](#message)
34
+ - [Message Log](#message-log)
35
+ - [Message Execution](#message-execution)
34
36
  - [Chat Completion](#chat-completion)
35
37
  - [Embeddings](#embeddings)
36
38
  - [Acronyms](#acronyms)
@@ -246,6 +248,8 @@ unique_sdk.Message.modify(
246
248
 
247
249
  - [Content](#content)
248
250
  - [Message](#message)
251
+ - [Message Log](#message-log)
252
+ - [Message Execution](#message-execution)
249
253
  - [Chat Completion](#chat-completion)
250
254
  - [Embeddings](#embeddings)
251
255
  - [Acronyms](#acronyms)
@@ -696,6 +700,26 @@ message = unique_sdk.Message.create(
696
700
  )
697
701
  ```
698
702
 
703
+ #### `unique_sdk.Message.create_event`
704
+
705
+ Create a new message event in a chat. Updating the text of a message in the chat UI is possible by creating a message update event. This function can be used for custom streaming to the chat. (Compatible with release >.42)
706
+
707
+ The event only changes the text in the UI, it *does not* update the database.
708
+
709
+ ```python
710
+ message = unique_sdk.Message.create_event(
711
+ user_id=user_id,
712
+ company_id=company_id,
713
+ messageId="msg_l4ushn85yqbewpf6tllh2cl7",
714
+ chatId="chat_kc8p3kgkn7393qhgmv5js5nt",
715
+ text="Hello.", #optional
716
+ originalText="Hello.", #optional
717
+ references=[], #optional
718
+ gptRequest={} #optional
719
+ debugInfo={ "hello": "test" }, #optional
720
+ )
721
+ ```
722
+
699
723
  #### `unique_sdk.Message.modify`
700
724
 
701
725
  Modify an existing chat message.
@@ -817,6 +841,89 @@ unique_sdk.Integrated.responses_stream(
817
841
 
818
842
  **Warning:** Currently, the deletion of a chat message does not automatically sync with the user UI. Users must refresh the chat page to view the updated state. This issue will be addressed in a future update of our API.
819
843
 
844
+ ### Message Log
845
+
846
+ #### `unique_sdk.MessageLog.create`
847
+
848
+ Function to update the steps section of a message in the chat UI. This is possible by creating a message log record during a message execution.
849
+
850
+ ```python
851
+ msg_log = unique_sdk.MessageLog.create(
852
+ user_id=user_id,
853
+ company_id=company_id,
854
+ messageId="msg_a0jgnt1jrqv1d3uzr450waxw",
855
+ text="Create message log text",
856
+ order=1,
857
+ status="RUNNING", # one of "RUNNING", "COMPLETED", "FAILED"
858
+ details={}, # optional, details dictionary
859
+ uncitedReferences={}, # optional, references dictionary
860
+ references=[], # optional, list of references
861
+ )
862
+ ```
863
+
864
+ #### `unique_sdk.MessageLog.update`
865
+
866
+ Update a message log for a provided `messageId`.
867
+
868
+ ```python
869
+ msg_log = unique_sdk.MessageLog.update(
870
+ user_id=user_id,
871
+ company_id=company_id,
872
+ message_log_id="message_log_fd7z7gjljo1z2wu5g6l9q7r9",
873
+ text="Update a message log text", # optional
874
+ order=1, # optional
875
+ status="RUNNING", # one of "RUNNING", "COMPLETED", "FAILED"
876
+ details={}, # optional, details dictionary
877
+ uncitedReferences={}, # optional, references dictionary
878
+ references=[], # optional, list of references
879
+ )
880
+ ```
881
+
882
+ ### Message Execution
883
+
884
+ #### `unique_sdk.MessageExecution.create`
885
+
886
+ Create a message execution for a provided `messageId` and `chatId`.
887
+
888
+ ```python
889
+ msg_execution = unique_sdk.MessageExecution.create(
890
+ user_id=user_id,
891
+ company_id=company_id,
892
+ messageId="msg_a0jgnt1jrqv143uzr750waxw",
893
+ chatId="chat_nx21havszl1skchd7544oykh",
894
+ type="DEEP_RESEARCH",
895
+ secondsRemaining=None, # optional, number defining the seconds remaining
896
+ percentageCompleted=None, # optional, number defining the percentage completed
897
+ )
898
+ ```
899
+
900
+ #### `unique_sdk.MessageExecution.get`
901
+
902
+ Get a message execution for a provided `messageId`.
903
+
904
+ ```python
905
+ msg_execution = unique_sdk.MessageExecution.get(
906
+ user_id=user_id,
907
+ company_id=company_id,
908
+ messageId="msg_a0jgnt1jrqv143uzr750waxw",
909
+ )
910
+ ```
911
+
912
+ #### `unique_sdk.MessageExecution.update`
913
+
914
+ Update a message execution for a provided `messageId`.
915
+
916
+ ```python
917
+ msg_execution = unique_sdk.MessageExecution.update(
918
+ user_id=user_id,
919
+ company_id=company_id,
920
+ messageId="msg_a0jgnt1jrqv143uzr750waxw",
921
+ status="COMPLETED", # one of: COMPLETED, FAILED
922
+ secondsRemaining=55, # optional, number defining the seconds remaining
923
+ percentageCompleted=10, # optional, number defining the percentage completed
924
+ )
925
+ ```
926
+
820
927
  ### Chat Completion
821
928
 
822
929
  #### `unique_sdk.ChatCompletion.create`
@@ -1662,6 +1769,12 @@ All notable changes to this project will be documented in this file.
1662
1769
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1663
1770
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
1664
1771
 
1772
+ ## [0.10.32] - 2025-10-14
1773
+ - Add function to stream to chat frontend.
1774
+
1775
+ ## [0.10.31] - 2025-10-13
1776
+ - Add readme for message log and execution.
1777
+
1665
1778
  ## [0.10.30] - 2025-10-07
1666
1779
  - Improve types for content get infos.
1667
1780
 
@@ -13,6 +13,8 @@ The Unique Python SDK provides access to the public API of Unique AI. It also en
13
13
  5. [Available API Resources](#available-api-resources)
14
14
  - [Content](#content)
15
15
  - [Message](#message)
16
+ - [Message Log](#message-log)
17
+ - [Message Execution](#message-execution)
16
18
  - [Chat Completion](#chat-completion)
17
19
  - [Embeddings](#embeddings)
18
20
  - [Acronyms](#acronyms)
@@ -228,6 +230,8 @@ unique_sdk.Message.modify(
228
230
 
229
231
  - [Content](#content)
230
232
  - [Message](#message)
233
+ - [Message Log](#message-log)
234
+ - [Message Execution](#message-execution)
231
235
  - [Chat Completion](#chat-completion)
232
236
  - [Embeddings](#embeddings)
233
237
  - [Acronyms](#acronyms)
@@ -678,6 +682,26 @@ message = unique_sdk.Message.create(
678
682
  )
679
683
  ```
680
684
 
685
+ #### `unique_sdk.Message.create_event`
686
+
687
+ Create a new message event in a chat. Updating the text of a message in the chat UI is possible by creating a message update event. This function can be used for custom streaming to the chat. (Compatible with release >.42)
688
+
689
+ The event only changes the text in the UI, it *does not* update the database.
690
+
691
+ ```python
692
+ message = unique_sdk.Message.create_event(
693
+ user_id=user_id,
694
+ company_id=company_id,
695
+ messageId="msg_l4ushn85yqbewpf6tllh2cl7",
696
+ chatId="chat_kc8p3kgkn7393qhgmv5js5nt",
697
+ text="Hello.", #optional
698
+ originalText="Hello.", #optional
699
+ references=[], #optional
700
+ gptRequest={} #optional
701
+ debugInfo={ "hello": "test" }, #optional
702
+ )
703
+ ```
704
+
681
705
  #### `unique_sdk.Message.modify`
682
706
 
683
707
  Modify an existing chat message.
@@ -799,6 +823,89 @@ unique_sdk.Integrated.responses_stream(
799
823
 
800
824
  **Warning:** Currently, the deletion of a chat message does not automatically sync with the user UI. Users must refresh the chat page to view the updated state. This issue will be addressed in a future update of our API.
801
825
 
826
+ ### Message Log
827
+
828
+ #### `unique_sdk.MessageLog.create`
829
+
830
+ Function to update the steps section of a message in the chat UI. This is possible by creating a message log record during a message execution.
831
+
832
+ ```python
833
+ msg_log = unique_sdk.MessageLog.create(
834
+ user_id=user_id,
835
+ company_id=company_id,
836
+ messageId="msg_a0jgnt1jrqv1d3uzr450waxw",
837
+ text="Create message log text",
838
+ order=1,
839
+ status="RUNNING", # one of "RUNNING", "COMPLETED", "FAILED"
840
+ details={}, # optional, details dictionary
841
+ uncitedReferences={}, # optional, references dictionary
842
+ references=[], # optional, list of references
843
+ )
844
+ ```
845
+
846
+ #### `unique_sdk.MessageLog.update`
847
+
848
+ Update a message log for a provided `messageId`.
849
+
850
+ ```python
851
+ msg_log = unique_sdk.MessageLog.update(
852
+ user_id=user_id,
853
+ company_id=company_id,
854
+ message_log_id="message_log_fd7z7gjljo1z2wu5g6l9q7r9",
855
+ text="Update a message log text", # optional
856
+ order=1, # optional
857
+ status="RUNNING", # one of "RUNNING", "COMPLETED", "FAILED"
858
+ details={}, # optional, details dictionary
859
+ uncitedReferences={}, # optional, references dictionary
860
+ references=[], # optional, list of references
861
+ )
862
+ ```
863
+
864
+ ### Message Execution
865
+
866
+ #### `unique_sdk.MessageExecution.create`
867
+
868
+ Create a message execution for a provided `messageId` and `chatId`.
869
+
870
+ ```python
871
+ msg_execution = unique_sdk.MessageExecution.create(
872
+ user_id=user_id,
873
+ company_id=company_id,
874
+ messageId="msg_a0jgnt1jrqv143uzr750waxw",
875
+ chatId="chat_nx21havszl1skchd7544oykh",
876
+ type="DEEP_RESEARCH",
877
+ secondsRemaining=None, # optional, number defining the seconds remaining
878
+ percentageCompleted=None, # optional, number defining the percentage completed
879
+ )
880
+ ```
881
+
882
+ #### `unique_sdk.MessageExecution.get`
883
+
884
+ Get a message execution for a provided `messageId`.
885
+
886
+ ```python
887
+ msg_execution = unique_sdk.MessageExecution.get(
888
+ user_id=user_id,
889
+ company_id=company_id,
890
+ messageId="msg_a0jgnt1jrqv143uzr750waxw",
891
+ )
892
+ ```
893
+
894
+ #### `unique_sdk.MessageExecution.update`
895
+
896
+ Update a message execution for a provided `messageId`.
897
+
898
+ ```python
899
+ msg_execution = unique_sdk.MessageExecution.update(
900
+ user_id=user_id,
901
+ company_id=company_id,
902
+ messageId="msg_a0jgnt1jrqv143uzr750waxw",
903
+ status="COMPLETED", # one of: COMPLETED, FAILED
904
+ secondsRemaining=55, # optional, number defining the seconds remaining
905
+ percentageCompleted=10, # optional, number defining the percentage completed
906
+ )
907
+ ```
908
+
802
909
  ### Chat Completion
803
910
 
804
911
  #### `unique_sdk.ChatCompletion.create`
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_sdk"
3
- version = "0.10.30"
3
+ version = "0.10.32"
4
4
  description = ""
5
5
  authors = [
6
6
  "Martin Fadler <martin.fadler@unique.ch>",
@@ -59,6 +59,16 @@ class Message(APIResource["Message"]):
59
59
  class RetrieveParams(RequestOptions):
60
60
  chatId: str
61
61
 
62
+ class CreateEventParams(RequestOptions):
63
+ messageId: str
64
+ chatId: str
65
+ originalText: NotRequired[str | None]
66
+ text: NotRequired[str | None]
67
+ references: NotRequired[List["Message.Reference"] | None]
68
+ gptRequest: NotRequired[Dict[str, Any] | None]
69
+ debugInfo: NotRequired[Dict[str, Any] | None]
70
+ completedAt: NotRequired[datetime | None]
71
+
62
72
  chatId: str
63
73
  text: Optional[str]
64
74
  role: Literal["SYSTEM", "USER", "ASSISTANT"]
@@ -303,3 +313,49 @@ class Message(APIResource["Message"]):
303
313
  company_id,
304
314
  params=params,
305
315
  )
316
+
317
+ @classmethod
318
+ def create_event(
319
+ cls,
320
+ user_id: str,
321
+ company_id: str,
322
+ **params: Unpack["Message.CreateEventParams"],
323
+ ) -> "Message":
324
+ """
325
+ Creates a new message event object.
326
+ """
327
+ message_id = params.get("messageId")
328
+ params.pop("messageId", None)
329
+ return cast(
330
+ "Message",
331
+ cls._static_request(
332
+ "post",
333
+ f"{cls.class_url()}/{message_id}/event",
334
+ user_id,
335
+ company_id,
336
+ params,
337
+ ),
338
+ )
339
+
340
+ @classmethod
341
+ async def create_event_async(
342
+ cls,
343
+ user_id: str,
344
+ company_id: str,
345
+ **params: Unpack["Message.CreateEventParams"],
346
+ ) -> "Message":
347
+ """
348
+ Creates a new message event object.
349
+ """
350
+ message_id = params.get("messageId")
351
+ params.pop("messageId", None)
352
+ return cast(
353
+ "Message",
354
+ await cls._static_request_async(
355
+ "post",
356
+ f"{cls.class_url()}/{message_id}/event",
357
+ user_id,
358
+ company_id,
359
+ params,
360
+ ),
361
+ )
@@ -36,7 +36,7 @@ class MessageLog(APIResource["MessageLog"]):
36
36
 
37
37
  text: NotRequired[str | None]
38
38
  status: NotRequired[Literal["RUNNING", "COMPLETED", "FAILED"] | None]
39
- order: int
39
+ order: NotRequired[int | None]
40
40
  details: NotRequired[dict | None]
41
41
  uncitedReferences: NotRequired[dict | None]
42
42
  references: NotRequired[list["MessageLog.Reference"] | None]
File without changes