unique_toolkit 0.5.55__py3-none-any.whl → 0.6.0__py3-none-any.whl

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 (35) hide show
  1. unique_toolkit/_common/validate_required_values.py +21 -0
  2. unique_toolkit/app/__init__.py +20 -0
  3. unique_toolkit/app/schemas.py +73 -7
  4. unique_toolkit/chat/__init__.py +5 -4
  5. unique_toolkit/chat/constants.py +3 -0
  6. unique_toolkit/chat/functions.py +661 -0
  7. unique_toolkit/chat/schemas.py +11 -11
  8. unique_toolkit/chat/service.py +273 -430
  9. unique_toolkit/content/__init__.py +1 -0
  10. unique_toolkit/content/constants.py +2 -0
  11. unique_toolkit/content/functions.py +475 -0
  12. unique_toolkit/content/service.py +163 -315
  13. unique_toolkit/content/utils.py +32 -0
  14. unique_toolkit/embedding/__init__.py +3 -0
  15. unique_toolkit/embedding/constants.py +2 -0
  16. unique_toolkit/embedding/functions.py +79 -0
  17. unique_toolkit/embedding/service.py +47 -34
  18. unique_toolkit/evaluators/__init__.py +1 -0
  19. unique_toolkit/evaluators/constants.py +1 -0
  20. unique_toolkit/evaluators/context_relevancy/constants.py +3 -3
  21. unique_toolkit/evaluators/context_relevancy/utils.py +5 -2
  22. unique_toolkit/evaluators/hallucination/utils.py +2 -1
  23. unique_toolkit/language_model/__init__.py +1 -0
  24. unique_toolkit/language_model/constants.py +4 -0
  25. unique_toolkit/language_model/functions.py +362 -0
  26. unique_toolkit/language_model/service.py +246 -293
  27. unique_toolkit/short_term_memory/__init__.py +5 -0
  28. unique_toolkit/short_term_memory/constants.py +1 -0
  29. unique_toolkit/short_term_memory/functions.py +175 -0
  30. unique_toolkit/short_term_memory/service.py +153 -27
  31. {unique_toolkit-0.5.55.dist-info → unique_toolkit-0.6.0.dist-info}/METADATA +33 -7
  32. unique_toolkit-0.6.0.dist-info/RECORD +64 -0
  33. unique_toolkit-0.5.55.dist-info/RECORD +0 -50
  34. {unique_toolkit-0.5.55.dist-info → unique_toolkit-0.6.0.dist-info}/LICENSE +0 -0
  35. {unique_toolkit-0.5.55.dist-info → unique_toolkit-0.6.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,21 @@
1
+ from typing import Sequence, TypeVar
2
+
3
+ T = TypeVar("T")
4
+
5
+
6
+ def validate_required_values(values: Sequence[T | None]) -> Sequence[T]:
7
+ """
8
+ Validates that all values are not None and returns the sequence.
9
+
10
+ Args:
11
+ values: Sequence of possibly None values
12
+
13
+ Returns:
14
+ The same sequence, now guaranteed to have no None values
15
+
16
+ Raises:
17
+ ValueError: If any values are None
18
+ """
19
+ if any(v is None for v in values):
20
+ raise ValueError("Required values cannot be None")
21
+ return values # type: ignore # We know these aren't None after validation
@@ -5,6 +5,24 @@ from .performance.async_tasks import (
5
5
  run_async_tasks_parallel as run_async_tasks_parallel,
6
6
  )
7
7
  from .performance.async_wrapper import to_async as to_async
8
+ from .schemas import (
9
+ BaseEvent as BaseEvent,
10
+ )
11
+ from .schemas import (
12
+ ChatEvent as ChatEvent,
13
+ )
14
+ from .schemas import (
15
+ ChatEventAdditionalParameters as ChatEventAdditionalParameters,
16
+ )
17
+ from .schemas import (
18
+ ChatEventAssistantMessage as ChatEventAssistantMessage,
19
+ )
20
+ from .schemas import (
21
+ ChatEventPayload as ChatEventPayload,
22
+ )
23
+ from .schemas import (
24
+ ChatEventUserMessage as ChatEventUserMessage,
25
+ )
8
26
  from .schemas import (
9
27
  Event as Event,
10
28
  )
@@ -23,3 +41,5 @@ from .schemas import (
23
41
  from .verification import (
24
42
  verify_signature_and_construct_event as verify_signature_and_construct_event,
25
43
  )
44
+
45
+ DOMAIN_NAME = "app"
@@ -3,6 +3,7 @@ from typing import Any, Optional
3
3
 
4
4
  from humps import camelize
5
5
  from pydantic import BaseModel, ConfigDict
6
+ from typing_extensions import deprecated
6
7
 
7
8
  # set config to convert camelCase to snake_case
8
9
  model_config = ConfigDict(
@@ -16,7 +17,21 @@ class EventName(StrEnum):
16
17
  EXTERNAL_MODULE_CHOSEN = "unique.chat.external-module.chosen"
17
18
 
18
19
 
19
- class EventUserMessage(BaseModel):
20
+ class BaseEvent(BaseModel):
21
+ model_config = model_config
22
+
23
+ id: str
24
+ event: str
25
+ user_id: str
26
+ company_id: str
27
+
28
+
29
+ ###
30
+ # ChatEvent schemas
31
+ ###
32
+
33
+
34
+ class ChatEventUserMessage(BaseModel):
20
35
  model_config = model_config
21
36
 
22
37
  id: str
@@ -26,21 +41,51 @@ class EventUserMessage(BaseModel):
26
41
  language: str
27
42
 
28
43
 
29
- class EventAssistantMessage(BaseModel):
44
+ @deprecated(
45
+ "Use `ChatEventUserMessage` instead. "
46
+ "This class will be removed in the next major version."
47
+ )
48
+ class EventUserMessage(ChatEventUserMessage):
49
+ """Deprecated: Use `ChatEventUserMessage` instead."""
50
+
51
+ pass
52
+
53
+
54
+ class ChatEventAssistantMessage(BaseModel):
30
55
  model_config = model_config
31
56
 
32
57
  id: str
33
58
  created_at: str
34
59
 
35
60
 
36
- class EventAdditionalParameters(BaseModel):
61
+ @deprecated(
62
+ "Use `ChatEventAssistantMessage` instead. "
63
+ "This class will be removed in the next major version."
64
+ )
65
+ class EventAssistantMessage(ChatEventAssistantMessage):
66
+ """Deprecated: Use `ChatEventAssistantMessage` instead."""
67
+
68
+ pass
69
+
70
+
71
+ class ChatEventAdditionalParameters(BaseModel):
37
72
  model_config = model_config
38
73
 
39
74
  translate_to_language: Optional[str] = None
40
75
  content_id_to_translate: Optional[str] = None
41
76
 
42
77
 
43
- class EventPayload(BaseModel):
78
+ @deprecated(
79
+ "Use `ChatEventAdditionalParameters` instead. "
80
+ "This class will be removed in the next major version."
81
+ )
82
+ class EventAdditionalParameters(ChatEventAdditionalParameters):
83
+ """Deprecated: Use `ChatEventAdditionalParameters` instead."""
84
+
85
+ pass
86
+
87
+
88
+ class ChatEventPayload(BaseModel):
44
89
  model_config = model_config
45
90
 
46
91
  name: str
@@ -48,15 +93,27 @@ class EventPayload(BaseModel):
48
93
  configuration: dict[str, Any]
49
94
  chat_id: str
50
95
  assistant_id: str
51
- user_message: EventUserMessage
52
- assistant_message: EventAssistantMessage
96
+ user_message: ChatEventUserMessage
97
+ assistant_message: ChatEventAssistantMessage
53
98
  text: Optional[str] = None
54
- additional_parameters: Optional[EventAdditionalParameters] = None
99
+ additional_parameters: Optional[ChatEventAdditionalParameters] = None
55
100
  user_metadata: Optional[dict[str, Any]] = None
56
101
  tool_parameters: Optional[dict[str, Any]] = None
57
102
  metadata_filter: Optional[dict[str, Any]] = None
58
103
 
59
104
 
105
+ @deprecated("""UUse `ChatEventPayload` instead.
106
+ This class will be removed in the next major version.""")
107
+ class EventPayload(ChatEventPayload):
108
+ user_message: EventUserMessage
109
+ assistant_message: EventAssistantMessage
110
+ additional_parameters: Optional[EventAdditionalParameters] = None
111
+
112
+
113
+ @deprecated(
114
+ """Use the more specific `ChatEvent` instead that has the same properties. \
115
+ This class will be removed in the next major version."""
116
+ )
60
117
  class Event(BaseModel):
61
118
  model_config = model_config
62
119
 
@@ -67,3 +124,12 @@ class Event(BaseModel):
67
124
  payload: EventPayload
68
125
  created_at: Optional[int] = None
69
126
  version: Optional[str] = None
127
+
128
+
129
+ class ChatEvent(BaseEvent):
130
+ model_config = model_config
131
+
132
+ event: EventName
133
+ payload: ChatEventPayload
134
+ created_at: Optional[int] = None
135
+ version: Optional[str] = None
@@ -1,9 +1,10 @@
1
+ from .constants import DOMAIN_NAME as DOMAIN_NAME
1
2
  from .schemas import ChatMessage as ChatMessage
3
+ from .schemas import ChatMessageAssessment as ChatMessageAssessment
4
+ from .schemas import ChatMessageAssessmentLabel as ChatMessageAssessmentLabel
5
+ from .schemas import ChatMessageAssessmentStatus as ChatMessageAssessmentStatus
6
+ from .schemas import ChatMessageAssessmentType as ChatMessageAssessmentType
2
7
  from .schemas import ChatMessageRole as ChatMessageRole
3
- from .schemas import MessageAssessment as MessageAssessment
4
- from .schemas import MessageAssessmentLabel as MessageAssessmentLabel
5
- from .schemas import MessageAssessmentStatus as MessageAssessmentStatus
6
- from .schemas import MessageAssessmentType as MessageAssessmentType
7
8
  from .service import ChatService as ChatService
8
9
  from .utils import (
9
10
  convert_chat_history_to_injectable_string as convert_chat_history_to_injectable_string,
@@ -0,0 +1,3 @@
1
+ DOMAIN_NAME = "chat"
2
+ DEFAULT_PERCENT_OF_MAX_TOKENS = 0.15
3
+ DEFAULT_MAX_MESSAGES = 4