rasa-pro 3.13.0.dev5__py3-none-any.whl → 3.13.0.dev7__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.

Potentially problematic release.


This version of rasa-pro might be problematic. Click here for more details.

Files changed (154) hide show
  1. rasa/api.py +4 -0
  2. rasa/cli/arguments/default_arguments.py +13 -1
  3. rasa/cli/arguments/train.py +2 -0
  4. rasa/cli/evaluate.py +1 -1
  5. rasa/cli/export.py +2 -2
  6. rasa/cli/train.py +1 -0
  7. rasa/constants.py +2 -0
  8. rasa/core/agent.py +2 -2
  9. rasa/core/brokers/kafka.py +4 -0
  10. rasa/core/brokers/pika.py +4 -0
  11. rasa/core/brokers/sql.py +1 -1
  12. rasa/core/channels/inspector/.eslintrc.cjs +12 -6
  13. rasa/core/channels/inspector/.prettierrc +5 -0
  14. rasa/core/channels/inspector/README.md +10 -4
  15. rasa/core/channels/inspector/dist/assets/{arc-9f75cc3b.js → arc-c4b064fc.js} +1 -1
  16. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-7f34db23.js → blockDiagram-38ab4fdb-215b5026.js} +1 -1
  17. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-948bab2c.js → c4Diagram-3d4e48cf-2b54a0a3.js} +1 -1
  18. rasa/core/channels/inspector/dist/assets/channel-3730f5fd.js +1 -0
  19. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-53b0dd0e.js → classDiagram-70f12bd4-daacea5f.js} +1 -1
  20. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-fdf789e7.js → classDiagram-v2-f2320105-930d4dc2.js} +1 -1
  21. rasa/core/channels/inspector/dist/assets/clone-e847561e.js +1 -0
  22. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-87c4ece5.js → createText-2e5e7dd3-83c206ba.js} +1 -1
  23. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-5a8b0749.js → edges-e0da2a9e-b0eb01d0.js} +1 -1
  24. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-66da90e2.js → erDiagram-9861fffd-17586500.js} +1 -1
  25. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-10044f05.js → flowDb-956e92f1-be2a1776.js} +1 -1
  26. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f338f66a.js → flowDiagram-66a62f08-c2120ebd.js} +1 -1
  27. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-efbbfe00.js +1 -0
  28. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-b13140aa.js → flowchart-elk-definition-4a651766-a6ab5c48.js} +1 -1
  29. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-f2b4a55a.js → ganttDiagram-c361ad54-ef613457.js} +1 -1
  30. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-dedc298d.js → gitGraphDiagram-72cf32ee-d59185b3.js} +1 -1
  31. rasa/core/channels/inspector/dist/assets/{graph-4ede11ff.js → graph-0f155405.js} +1 -1
  32. rasa/core/channels/inspector/dist/assets/{index-3862675e-65549d37.js → index-3862675e-d5f1d1b7.js} +1 -1
  33. rasa/core/channels/inspector/dist/assets/{index-3a23e736.js → index-47737d3a.js} +123 -123
  34. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-65439671.js → infoDiagram-f8f76790-b07d141f.js} +1 -1
  35. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-56d03d98.js → journeyDiagram-49397b02-1936d429.js} +1 -1
  36. rasa/core/channels/inspector/dist/assets/{layout-dd48f7f4.js → layout-dde8d0f3.js} +1 -1
  37. rasa/core/channels/inspector/dist/assets/{line-1569ad2c.js → line-0c2c7ee0.js} +1 -1
  38. rasa/core/channels/inspector/dist/assets/{linear-48bf4935.js → linear-35dd89a4.js} +1 -1
  39. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-688504c1.js → mindmap-definition-fc14e90a-56192851.js} +1 -1
  40. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78b6d7e6.js → pieDiagram-8a3498a8-fc21ed78.js} +1 -1
  41. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-048b84b3.js → quadrantDiagram-120e2f19-25e98518.js} +1 -1
  42. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-dd67f107.js → requirementDiagram-deff3bca-546ff1f5.js} +1 -1
  43. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-8128436e.js → sankeyDiagram-04a897e0-02d8b82d.js} +1 -1
  44. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-1a0d1461.js → sequenceDiagram-704730f1-3ca5a92e.js} +1 -1
  45. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-46d388ed.js → stateDiagram-587899a1-128ea07c.js} +1 -1
  46. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-ea42951a.js → stateDiagram-v2-d93cdb3a-95f290af.js} +1 -1
  47. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-7427ed0c.js → styles-6aaf32cf-4984898a.js} +1 -1
  48. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-ff5e5a16.js → styles-9a916d00-1bf266ba.js} +1 -1
  49. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-7b3680cf.js → styles-c10674c1-60521c63.js} +1 -1
  50. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-f860f2ad.js → svgDrawCommon-08f97a94-a25b6e12.js} +1 -1
  51. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-2eebf0c8.js → timeline-definition-85554ec2-0fc086bf.js} +1 -1
  52. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-5d7f4e96.js → xychartDiagram-e933f94c-44ee592e.js} +1 -1
  53. rasa/core/channels/inspector/dist/index.html +1 -1
  54. rasa/core/channels/inspector/package.json +3 -1
  55. rasa/core/channels/inspector/src/App.tsx +91 -90
  56. rasa/core/channels/inspector/src/components/Chat.tsx +45 -41
  57. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +40 -40
  58. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +57 -57
  59. rasa/core/channels/inspector/src/components/DialogueStack.tsx +36 -27
  60. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +4 -4
  61. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +7 -7
  62. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +28 -12
  63. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +9 -9
  64. rasa/core/channels/inspector/src/components/RasaLogo.tsx +5 -5
  65. rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +55 -60
  66. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +5 -5
  67. rasa/core/channels/inspector/src/components/Slots.tsx +22 -22
  68. rasa/core/channels/inspector/src/components/Welcome.tsx +28 -31
  69. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +245 -0
  70. rasa/core/channels/inspector/src/helpers/audio/microphone-processor.js +12 -0
  71. rasa/core/channels/inspector/src/helpers/audio/playback-processor.js +36 -0
  72. rasa/core/channels/inspector/src/helpers/conversation.ts +7 -7
  73. rasa/core/channels/inspector/src/helpers/formatters.test.ts +181 -181
  74. rasa/core/channels/inspector/src/helpers/formatters.ts +111 -111
  75. rasa/core/channels/inspector/src/helpers/utils.ts +78 -61
  76. rasa/core/channels/inspector/src/main.tsx +8 -8
  77. rasa/core/channels/inspector/src/theme/Button/Button.ts +8 -8
  78. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +7 -7
  79. rasa/core/channels/inspector/src/theme/Input/Input.ts +9 -9
  80. rasa/core/channels/inspector/src/theme/Link/Link.ts +6 -6
  81. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +13 -13
  82. rasa/core/channels/inspector/src/theme/Table/Table.tsx +10 -10
  83. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +5 -5
  84. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +7 -7
  85. rasa/core/channels/inspector/src/theme/base/colors.ts +64 -64
  86. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +21 -18
  87. rasa/core/channels/inspector/src/theme/base/radii.ts +8 -8
  88. rasa/core/channels/inspector/src/theme/base/shadows.ts +5 -5
  89. rasa/core/channels/inspector/src/theme/base/sizes.ts +5 -5
  90. rasa/core/channels/inspector/src/theme/base/space.ts +12 -12
  91. rasa/core/channels/inspector/src/theme/base/styles.ts +5 -5
  92. rasa/core/channels/inspector/src/theme/base/typography.ts +12 -12
  93. rasa/core/channels/inspector/src/theme/base/zIndices.ts +3 -3
  94. rasa/core/channels/inspector/src/theme/index.ts +38 -38
  95. rasa/core/channels/inspector/src/types.ts +56 -50
  96. rasa/core/channels/inspector/yarn.lock +5 -0
  97. rasa/core/channels/voice_ready/audiocodes.py +34 -17
  98. rasa/core/evaluation/marker_tracker_loader.py +1 -1
  99. rasa/core/exporter.py +1 -1
  100. rasa/core/nlg/contextual_response_rephraser.py +4 -2
  101. rasa/core/nlg/summarize.py +1 -1
  102. rasa/core/persistor.py +55 -20
  103. rasa/core/policies/enterprise_search_policy.py +7 -4
  104. rasa/core/policies/intentless_policy.py +15 -9
  105. rasa/core/processor.py +2 -2
  106. rasa/core/run.py +7 -2
  107. rasa/core/tracker_stores/__init__.py +0 -0
  108. rasa/core/{auth_retry_tracker_store.py → tracker_stores/auth_retry_tracker_store.py} +5 -1
  109. rasa/core/tracker_stores/dynamo_tracker_store.py +218 -0
  110. rasa/core/tracker_stores/mongo_tracker_store.py +206 -0
  111. rasa/core/tracker_stores/redis_tracker_store.py +219 -0
  112. rasa/core/tracker_stores/sql_tracker_store.py +555 -0
  113. rasa/core/tracker_stores/tracker_store.py +805 -0
  114. rasa/core/utils.py +6 -0
  115. rasa/dialogue_understanding/coexistence/llm_based_router.py +8 -3
  116. rasa/dialogue_understanding/commands/clarify_command.py +2 -2
  117. rasa/dialogue_understanding/commands/knowledge_answer_command.py +2 -2
  118. rasa/dialogue_understanding/generator/constants.py +2 -2
  119. rasa/dialogue_understanding/generator/llm_based_command_generator.py +1 -1
  120. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +33 -12
  121. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +2 -2
  122. rasa/hooks.py +2 -2
  123. rasa/keys +1 -0
  124. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -2
  125. rasa/model_manager/config.py +3 -1
  126. rasa/model_manager/model_api.py +1 -2
  127. rasa/model_manager/runner_service.py +8 -4
  128. rasa/model_manager/trainer_service.py +1 -0
  129. rasa/model_training.py +12 -3
  130. rasa/nlu/extractors/crf_entity_extractor.py +66 -16
  131. rasa/plugin.py +1 -1
  132. rasa/server.py +6 -2
  133. rasa/shared/constants.py +3 -0
  134. rasa/shared/core/events.py +68 -2
  135. rasa/shared/providers/_configs/azure_openai_client_config.py +4 -0
  136. rasa/shared/providers/_configs/openai_client_config.py +4 -0
  137. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +3 -0
  138. rasa/shared/providers/llm/_base_litellm_client.py +5 -2
  139. rasa/telemetry.py +2 -2
  140. rasa/tracing/config.py +1 -1
  141. rasa/tracing/instrumentation/attribute_extractors.py +1 -1
  142. rasa/tracing/instrumentation/instrumentation.py +1 -1
  143. rasa/utils/licensing.py +1 -2
  144. rasa/version.py +1 -1
  145. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev7.dist-info}/METADATA +4 -4
  146. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev7.dist-info}/RECORD +149 -140
  147. rasa/core/channels/inspector/dist/assets/channel-dfa68278.js +0 -1
  148. rasa/core/channels/inspector/dist/assets/clone-edb7f119.js +0 -1
  149. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-65e7c670.js +0 -1
  150. rasa/core/channels/inspector/src/helpers/audiostream.ts +0 -191
  151. rasa/core/tracker_store.py +0 -1792
  152. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev7.dist-info}/NOTICE +0 -0
  153. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev7.dist-info}/WHEEL +0 -0
  154. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev7.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,219 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict, Iterable, Optional, Text
4
+
5
+ import structlog
6
+
7
+ import rasa.shared
8
+ from rasa.core.brokers.broker import EventBroker
9
+ from rasa.core.tracker_stores.tracker_store import SerializedTrackerAsText, TrackerStore
10
+ from rasa.shared.core.domain import Domain
11
+ from rasa.shared.core.trackers import DialogueStateTracker
12
+
13
+ structlogger = structlog.get_logger(__name__)
14
+
15
+ # default value for key prefix in RedisTrackerStore
16
+ DEFAULT_REDIS_TRACKER_STORE_KEY_PREFIX = "tracker:"
17
+
18
+
19
+ class RedisTrackerStore(TrackerStore, SerializedTrackerAsText):
20
+ """Stores conversation history in Redis."""
21
+
22
+ def __init__(
23
+ self,
24
+ domain: Domain,
25
+ host: Text = "localhost",
26
+ port: int = 6379,
27
+ db: int = 0,
28
+ username: Optional[Text] = None,
29
+ password: Optional[Text] = None,
30
+ event_broker: Optional[EventBroker] = None,
31
+ record_exp: Optional[float] = None,
32
+ key_prefix: Optional[Text] = None,
33
+ use_ssl: bool = False,
34
+ ssl_keyfile: Optional[Text] = None,
35
+ ssl_certfile: Optional[Text] = None,
36
+ ssl_ca_certs: Optional[Text] = None,
37
+ **kwargs: Dict[Text, Any],
38
+ ) -> None:
39
+ """Initializes the tracker store."""
40
+ import redis
41
+
42
+ self.red = redis.StrictRedis(
43
+ host=host,
44
+ port=port,
45
+ db=db,
46
+ username=username,
47
+ password=password,
48
+ ssl=use_ssl,
49
+ ssl_keyfile=ssl_keyfile,
50
+ ssl_certfile=ssl_certfile,
51
+ ssl_ca_certs=ssl_ca_certs,
52
+ decode_responses=True,
53
+ )
54
+ self.record_exp = record_exp
55
+
56
+ self.key_prefix = DEFAULT_REDIS_TRACKER_STORE_KEY_PREFIX
57
+ if key_prefix:
58
+ structlogger.debug(
59
+ "redis_tracker_store.init.custom_key_prefix",
60
+ event_info=f"Setting non-default redis key prefix: '{key_prefix}'.",
61
+ )
62
+ self._set_key_prefix(key_prefix)
63
+
64
+ super().__init__(domain, event_broker, **kwargs)
65
+
66
+ def _set_key_prefix(self, key_prefix: Text) -> None:
67
+ if isinstance(key_prefix, str) and key_prefix.isalnum():
68
+ self.key_prefix = key_prefix + ":" + DEFAULT_REDIS_TRACKER_STORE_KEY_PREFIX
69
+ else:
70
+ structlogger.warning(
71
+ "redis_tracker_store.init.invalid_key_prefix",
72
+ event_info=(
73
+ f"Omitting provided non-alphanumeric "
74
+ f"redis key prefix: '{key_prefix}'. "
75
+ f"Using default '{self.key_prefix}' instead."
76
+ ),
77
+ )
78
+
79
+ def _get_key_prefix(self) -> Text:
80
+ return self.key_prefix
81
+
82
+ async def save(
83
+ self, tracker: DialogueStateTracker, timeout: Optional[float] = None
84
+ ) -> None:
85
+ """Saves the current conversation state."""
86
+ await self.stream_events(tracker)
87
+
88
+ if not timeout and self.record_exp:
89
+ timeout = self.record_exp
90
+
91
+ stored = self.red.get(self.key_prefix + tracker.sender_id)
92
+
93
+ if stored is not None:
94
+ prior_tracker = self.deserialise_tracker(tracker.sender_id, stored)
95
+
96
+ tracker = self._merge_trackers(prior_tracker, tracker)
97
+
98
+ serialised_tracker = self.serialise_tracker(tracker)
99
+ self.red.set(
100
+ self.key_prefix + tracker.sender_id, serialised_tracker, ex=timeout
101
+ )
102
+
103
+ async def delete(self, sender_id: Text) -> None:
104
+ """Delete tracker for the given sender_id.
105
+
106
+ Args:
107
+ sender_id: Sender id of the tracker to be deleted.
108
+ """
109
+ if not await self.exists(sender_id):
110
+ structlogger.info(
111
+ "redis_tracker_store.delete.no_tracker_for_sender_id",
112
+ event_info=f"Could not find tracker for conversation ID '{sender_id}'.",
113
+ )
114
+ return None
115
+
116
+ self.red.delete(self.key_prefix + sender_id)
117
+ structlogger.info(
118
+ "redis_tracker_store.delete.deleted_tracker",
119
+ sender_id=sender_id,
120
+ )
121
+
122
+ async def retrieve(self, sender_id: Text) -> Optional[DialogueStateTracker]:
123
+ """Retrieves tracker for the latest conversation session.
124
+
125
+ The Redis key is formed by appending a prefix to sender_id.
126
+
127
+ Args:
128
+ sender_id: Conversation ID to fetch the tracker for.
129
+
130
+ Returns:
131
+ Tracker containing events from the latest conversation sessions.
132
+ """
133
+ return await self._retrieve(sender_id, fetch_all_sessions=False)
134
+
135
+ async def retrieve_full_tracker(
136
+ self, sender_id: Text
137
+ ) -> Optional[DialogueStateTracker]:
138
+ """Retrieves tracker for all conversation sessions.
139
+
140
+ The Redis key is formed by appending a prefix to sender_id.
141
+
142
+ Args:
143
+ sender_id: Conversation ID to fetch the tracker for.
144
+
145
+ Returns:
146
+ Tracker containing events from all conversation sessions.
147
+ """
148
+ return await self._retrieve(sender_id, fetch_all_sessions=True)
149
+
150
+ async def _retrieve(
151
+ self, sender_id: Text, fetch_all_sessions: bool
152
+ ) -> Optional[DialogueStateTracker]:
153
+ """Returns tracker matching sender_id.
154
+
155
+ Args:
156
+ sender_id: Conversation ID to fetch the tracker for.
157
+ fetch_all_sessions: Whether to fetch all sessions or only the last one.
158
+ """
159
+ stored = self.red.get(self.key_prefix + sender_id)
160
+ if stored is None:
161
+ structlogger.debug(
162
+ "redis_tracker_store.retrieve.no_tracker_for_sender_id",
163
+ event_info=f"Could not find tracker for conversation ID '{sender_id}'.",
164
+ )
165
+ return None
166
+
167
+ tracker = self.deserialise_tracker(sender_id, stored)
168
+ if fetch_all_sessions:
169
+ return tracker
170
+
171
+ # only return the last session
172
+ multiple_tracker_sessions = (
173
+ rasa.shared.core.trackers.get_trackers_for_conversation_sessions(tracker)
174
+ )
175
+
176
+ if len(multiple_tracker_sessions) <= 1:
177
+ return tracker
178
+
179
+ return multiple_tracker_sessions[-1]
180
+
181
+ async def keys(self) -> Iterable[Text]:
182
+ """Returns keys of the Redis Tracker Store."""
183
+ return self.red.keys(self.key_prefix + "*")
184
+
185
+ @staticmethod
186
+ def _merge_trackers(
187
+ prior_tracker: DialogueStateTracker, tracker: DialogueStateTracker
188
+ ) -> DialogueStateTracker:
189
+ """Merges two trackers.
190
+
191
+ Args:
192
+ prior_tracker: Tracker containing events from the previous conversation
193
+ sessions.
194
+ tracker: Tracker containing events from the current conversation session.
195
+ """
196
+ if not prior_tracker.events:
197
+ return tracker
198
+
199
+ last_event_timestamp = prior_tracker.events[-1].timestamp
200
+ past_tracker = tracker.travel_back_in_time(target_time=last_event_timestamp)
201
+
202
+ if past_tracker.events == prior_tracker.events:
203
+ return tracker
204
+
205
+ merged = tracker.init_copy()
206
+ merged.update_with_events(list(prior_tracker.events), override_timestamp=False)
207
+
208
+ for new_event in tracker.events:
209
+ # Event subclasses implement `__eq__` method that make it difficult
210
+ # to compare events. We use `as_dict` to compare events.
211
+ if all(
212
+ [
213
+ new_event.as_dict() != existing_event.as_dict()
214
+ for existing_event in merged.events
215
+ ]
216
+ ):
217
+ merged.update(new_event)
218
+
219
+ return merged