unique_sdk 0.9.17__tar.gz → 0.9.19__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 (37) hide show
  1. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/CHANGELOG.md +6 -0
  2. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/PKG-INFO +46 -1
  3. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/README.md +39 -0
  4. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/pyproject.toml +1 -1
  5. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/__init__.py +3 -0
  6. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_api_resource.py +0 -1
  7. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_util.py +3 -0
  8. unique_sdk-0.9.19/unique_sdk/_version.py +1 -0
  9. unique_sdk-0.9.19/unique_sdk/api_resources/_message_assessment.py +72 -0
  10. unique_sdk-0.9.17/unique_sdk/_version.py +0 -1
  11. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/LICENSE +0 -0
  12. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_api_requestor.py +0 -0
  13. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_api_version.py +0 -0
  14. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_error.py +0 -0
  15. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_http_client.py +0 -0
  16. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_list_object.py +0 -0
  17. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_object_classes.py +0 -0
  18. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_request_options.py +0 -0
  19. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_unique_object.py +0 -0
  20. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_unique_ql.py +0 -0
  21. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_unique_response.py +0 -0
  22. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/_webhook.py +0 -0
  23. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/__init__.py +0 -0
  24. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_acronyms.py +0 -0
  25. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_chat_completion.py +0 -0
  26. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_content.py +0 -0
  27. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_embedding.py +0 -0
  28. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_event.py +0 -0
  29. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_integrated.py +0 -0
  30. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_message.py +0 -0
  31. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_search.py +0 -0
  32. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_search_string.py +0 -0
  33. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/api_resources/_short_term_memory.py +0 -0
  34. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/utils/chat_history.py +0 -0
  35. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/utils/file_io.py +0 -0
  36. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/unique_sdk/utils/sources.py +0 -0
  37. {unique_sdk-0.9.17 → unique_sdk-0.9.19}/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.9.19] - 2025-01-31
9
+ - Add `MessageAssessment` resource
10
+
11
+ ## [0.9.18] - 2025-01-22
12
+ - Removed `Invalid response body from API` from `retry_dict` as it's our own artificail error.
13
+
8
14
  ## [0.9.17] - 2025-01-03
9
15
  - BREAKING CHANGE!! Removed unused `id` from `ShortTermMemory` create and find methods.
10
16
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unique_sdk
3
- Version: 0.9.17
3
+ Version: 0.9.19
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: Martin Fadler
@@ -34,6 +34,7 @@ The Unique Python SDK provides access to the public API of Unique FinanceGPT. It
34
34
  - [Search](#search)
35
35
  - [Search String](#search-string)
36
36
  - [Short Term Memory](#short-term-memory)
37
+ - [Message Assessment](#message-assessment)
37
38
  6. [UniqueQL](#uniqueql)
38
39
  - [Query Structure](#uniqueql-query-structure)
39
40
  - [Metadata Filtering](#metadata-filtering)
@@ -587,6 +588,7 @@ you need to provide an `memoryName` as an identifier.
587
588
 
588
589
  you can then save it and retreive it live defined below.
589
590
 
591
+
590
592
  #### `unique_sdk.ShortTermMemory.create`
591
593
 
592
594
  ```python
@@ -614,6 +616,43 @@ m = unique_sdk.ShortTermMemory.find_latest(
614
616
  print(m)
615
617
  ```
616
618
 
619
+ ### Message Assessment
620
+
621
+ Used to create and modify message assessments for tracking hallucinations and compliance evaluations of assistant messages.
622
+
623
+ #### `unique_sdk.MessageAssessment.create`
624
+
625
+ Create a new message assessment for an assistant message.
626
+
627
+ ```python
628
+ assessment = unique_sdk.MessageAssessment.create(
629
+ user_id=user_id,
630
+ company_id=company_id,
631
+ assistant_message_id="msg_...",
632
+ status="DONE",
633
+ explanation="This response contains incorrect information about...",
634
+ label="NEGATIVE",
635
+ type="HALLUCINATION",
636
+ isVisible=True
637
+ )
638
+ ```
639
+
640
+ #### `unique_sdk.MessageAssessment.modify`
641
+
642
+ Modify an existing message assessment.
643
+
644
+ ```python
645
+ assessment = unique_sdk.MessageAssessment.modify(
646
+ user_id=user_id,
647
+ company_id=company_id,
648
+ assistant_message_id="msg_...",
649
+ status="DONE",
650
+ explanation="Updated explanation...",
651
+ label="NEGATIVE",
652
+ type="HALLUCINATION"
653
+ )
654
+ ```
655
+
617
656
  ## UniqueQL
618
657
 
619
658
  [UniqueQL](https://unique-ch.atlassian.net/wiki/x/coAXHQ) is an advanced query language designed to enhance search capabilities within various search modes such as Vector, Full-Text Search (FTS), and Combined. This query language enables users to perform detailed searches by filtering through metadata attributes like filenames, URLs, dates, and more. UniqueQL is versatile and can be translated into different query formats for various database systems, including PostgreSQL and Qdrant.
@@ -899,6 +938,12 @@ All notable changes to this project will be documented in this file.
899
938
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
900
939
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
901
940
 
941
+ ## [0.9.19] - 2025-01-31
942
+ - Add `MessageAssessment` resource
943
+
944
+ ## [0.9.18] - 2025-01-22
945
+ - Removed `Invalid response body from API` from `retry_dict` as it's our own artificail error.
946
+
902
947
  ## [0.9.17] - 2025-01-03
903
948
  - BREAKING CHANGE!! Removed unused `id` from `ShortTermMemory` create and find methods.
904
949
 
@@ -19,6 +19,7 @@ The Unique Python SDK provides access to the public API of Unique FinanceGPT. It
19
19
  - [Search](#search)
20
20
  - [Search String](#search-string)
21
21
  - [Short Term Memory](#short-term-memory)
22
+ - [Message Assessment](#message-assessment)
22
23
  6. [UniqueQL](#uniqueql)
23
24
  - [Query Structure](#uniqueql-query-structure)
24
25
  - [Metadata Filtering](#metadata-filtering)
@@ -572,6 +573,7 @@ you need to provide an `memoryName` as an identifier.
572
573
 
573
574
  you can then save it and retreive it live defined below.
574
575
 
576
+
575
577
  #### `unique_sdk.ShortTermMemory.create`
576
578
 
577
579
  ```python
@@ -599,6 +601,43 @@ m = unique_sdk.ShortTermMemory.find_latest(
599
601
  print(m)
600
602
  ```
601
603
 
604
+ ### Message Assessment
605
+
606
+ Used to create and modify message assessments for tracking hallucinations and compliance evaluations of assistant messages.
607
+
608
+ #### `unique_sdk.MessageAssessment.create`
609
+
610
+ Create a new message assessment for an assistant message.
611
+
612
+ ```python
613
+ assessment = unique_sdk.MessageAssessment.create(
614
+ user_id=user_id,
615
+ company_id=company_id,
616
+ assistant_message_id="msg_...",
617
+ status="DONE",
618
+ explanation="This response contains incorrect information about...",
619
+ label="NEGATIVE",
620
+ type="HALLUCINATION",
621
+ isVisible=True
622
+ )
623
+ ```
624
+
625
+ #### `unique_sdk.MessageAssessment.modify`
626
+
627
+ Modify an existing message assessment.
628
+
629
+ ```python
630
+ assessment = unique_sdk.MessageAssessment.modify(
631
+ user_id=user_id,
632
+ company_id=company_id,
633
+ assistant_message_id="msg_...",
634
+ status="DONE",
635
+ explanation="Updated explanation...",
636
+ label="NEGATIVE",
637
+ type="HALLUCINATION"
638
+ )
639
+ ```
640
+
602
641
  ## UniqueQL
603
642
 
604
643
  [UniqueQL](https://unique-ch.atlassian.net/wiki/x/coAXHQ) is an advanced query language designed to enhance search capabilities within various search modes such as Vector, Full-Text Search (FTS), and Combined. This query language enables users to perform detailed searches by filtering through metadata attributes like filenames, URLs, dates, and more. UniqueQL is versatile and can be translated into different query formats for various database systems, including PostgreSQL and Qdrant.
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "unique_sdk"
3
- version = "0.9.17"
3
+ version = "0.9.19"
4
4
  description = ""
5
5
  authors = [
6
6
  "Martin Fadler <martin.fadler@unique.ch>",
@@ -82,6 +82,9 @@ from unique_sdk.api_resources._short_term_memory import (
82
82
  )
83
83
  from unique_sdk.api_resources._embedding import Embeddings as Embeddings
84
84
  from unique_sdk.api_resources._acronyms import Acronyms as Acronyms
85
+ from unique_sdk.api_resources._message_assessment import (
86
+ MessageAssessment as MessageAssessment,
87
+ )
85
88
 
86
89
  # Unique QL
87
90
 
@@ -22,7 +22,6 @@ retry_dict = {
22
22
  "error_messages": [
23
23
  "problem proxying the request",
24
24
  "Upstream service reached a hard timeout",
25
- "Invalid response body from API",
26
25
  "You can retry your request",
27
26
  "Internal server error",
28
27
  "Connection aborted",
@@ -210,6 +210,7 @@ def retry_on_error(
210
210
  try:
211
211
  return await func(*args, **kwargs)
212
212
  except Exception as e:
213
+ logger.error(f"Retrying because of {e}")
213
214
  should_retry = any(
214
215
  err_msg.lower() in str(e).lower() for err_msg in error_messages
215
216
  )
@@ -235,6 +236,8 @@ def retry_on_error(
235
236
  try:
236
237
  return func(*args, **kwargs)
237
238
  except Exception as e:
239
+ logger.error(f"Retrying because of {e}")
240
+
238
241
  should_retry = any(
239
242
  err_msg.lower() in str(e).lower() for err_msg in error_messages
240
243
  )
@@ -0,0 +1 @@
1
+ VERSION = "0.9.18"
@@ -0,0 +1,72 @@
1
+ from typing import (
2
+ ClassVar,
3
+ Literal,
4
+ Unpack,
5
+ )
6
+
7
+ from unique_sdk._api_resource import APIResource
8
+ from unique_sdk._request_options import RequestOptions
9
+
10
+
11
+ class MessageAssessment(APIResource["MessageAssessment"]):
12
+ OBJECT_NAME: ClassVar[Literal["message_assessment"]] = "message_assessment"
13
+ RESOURCE_URL = "/message-assessment"
14
+
15
+ class CreateParams(RequestOptions):
16
+ assistant_message_id: str
17
+ status: Literal["PENDING", "DONE", "ERROR"]
18
+ explanation: str
19
+ label: Literal["POSITIVE", "NEGATIVE", "VERIFIED", "UNVERIFIED"]
20
+ type: Literal["HALLUCINATION", "COMPLIANCE"]
21
+ isVisible: bool
22
+
23
+ class ModifyParams(RequestOptions):
24
+ assistant_message_id: str
25
+ status: Literal["PENDING", "DONE", "ERROR"]
26
+ explanation: str
27
+ label: Literal["POSITIVE", "NEGATIVE", "VERIFIED", "UNVERIFIED"]
28
+ type: Literal["HALLUCINATION", "COMPLIANCE"]
29
+
30
+ @classmethod
31
+ def create(
32
+ cls,
33
+ user_id: str,
34
+ company_id: str,
35
+ **params: Unpack["MessageAssessment.CreateParams"],
36
+ ) -> "MessageAssessment":
37
+ return cls._static_request(
38
+ "post", cls.RESOURCE_URL, user_id, company_id, params=params
39
+ )
40
+
41
+ @classmethod
42
+ async def create_async(
43
+ cls,
44
+ user_id: str,
45
+ company_id: str,
46
+ **params: Unpack["MessageAssessment.CreateParams"],
47
+ ) -> "MessageAssessment":
48
+ return cls._static_request_async(
49
+ "post", cls.RESOURCE_URL, user_id, company_id, params=params
50
+ )
51
+
52
+ @classmethod
53
+ def modify(
54
+ cls,
55
+ user_id: str,
56
+ company_id: str,
57
+ **params: Unpack["MessageAssessment.ModifyParams"],
58
+ ) -> "MessageAssessment":
59
+ return cls._static_request(
60
+ "patch", cls.RESOURCE_URL, user_id, company_id, params=params
61
+ )
62
+
63
+ @classmethod
64
+ async def modify_async(
65
+ cls,
66
+ user_id: str,
67
+ company_id: str,
68
+ **params: Unpack["MessageAssessment.ModifyParams"],
69
+ ) -> "MessageAssessment":
70
+ return cls._static_request_async(
71
+ "patch", cls.RESOURCE_URL, user_id, company_id, params=params
72
+ )
@@ -1 +0,0 @@
1
- VERSION = "0.9.15"
File without changes