rasa-pro 3.10.16__py3-none-any.whl → 3.11.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.

Potentially problematic release.


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

Files changed (240) hide show
  1. rasa/__main__.py +31 -15
  2. rasa/api.py +12 -2
  3. rasa/cli/arguments/default_arguments.py +24 -4
  4. rasa/cli/arguments/run.py +15 -0
  5. rasa/cli/arguments/shell.py +5 -1
  6. rasa/cli/arguments/train.py +17 -9
  7. rasa/cli/evaluate.py +7 -7
  8. rasa/cli/inspect.py +19 -7
  9. rasa/cli/interactive.py +1 -0
  10. rasa/cli/llm_fine_tuning.py +11 -14
  11. rasa/cli/project_templates/calm/config.yml +5 -7
  12. rasa/cli/project_templates/calm/endpoints.yml +15 -2
  13. rasa/cli/project_templates/tutorial/config.yml +8 -5
  14. rasa/cli/project_templates/tutorial/data/flows.yml +1 -1
  15. rasa/cli/project_templates/tutorial/data/patterns.yml +5 -0
  16. rasa/cli/project_templates/tutorial/domain.yml +14 -0
  17. rasa/cli/project_templates/tutorial/endpoints.yml +5 -0
  18. rasa/cli/run.py +7 -0
  19. rasa/cli/scaffold.py +4 -2
  20. rasa/cli/studio/upload.py +0 -15
  21. rasa/cli/train.py +14 -53
  22. rasa/cli/utils.py +14 -11
  23. rasa/cli/x.py +7 -7
  24. rasa/constants.py +3 -1
  25. rasa/core/actions/action.py +77 -33
  26. rasa/core/actions/action_hangup.py +29 -0
  27. rasa/core/actions/action_repeat_bot_messages.py +89 -0
  28. rasa/core/actions/e2e_stub_custom_action_executor.py +5 -1
  29. rasa/core/actions/http_custom_action_executor.py +4 -0
  30. rasa/core/agent.py +2 -2
  31. rasa/core/brokers/kafka.py +3 -1
  32. rasa/core/brokers/pika.py +3 -1
  33. rasa/core/channels/__init__.py +10 -6
  34. rasa/core/channels/channel.py +41 -4
  35. rasa/core/channels/development_inspector.py +150 -46
  36. rasa/core/channels/inspector/README.md +1 -1
  37. rasa/core/channels/inspector/dist/assets/{arc-b6e548fe.js → arc-bc141fb2.js} +1 -1
  38. rasa/core/channels/inspector/dist/assets/{c4Diagram-d0fbc5ce-fa03ac9e.js → c4Diagram-d0fbc5ce-be2db283.js} +1 -1
  39. rasa/core/channels/inspector/dist/assets/{classDiagram-936ed81e-ee67392a.js → classDiagram-936ed81e-55366915.js} +1 -1
  40. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-c3cb15f1-9b283fae.js → classDiagram-v2-c3cb15f1-bb529518.js} +1 -1
  41. rasa/core/channels/inspector/dist/assets/{createText-62fc7601-8b6fcc2a.js → createText-62fc7601-b0ec81d6.js} +1 -1
  42. rasa/core/channels/inspector/dist/assets/{edges-f2ad444c-22e77f4f.js → edges-f2ad444c-6166330c.js} +1 -1
  43. rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-60ffc87f.js → erDiagram-9d236eb7-5ccc6a8e.js} +1 -1
  44. rasa/core/channels/inspector/dist/assets/{flowDb-1972c806-9dd802e4.js → flowDb-1972c806-fca3bfe4.js} +1 -1
  45. rasa/core/channels/inspector/dist/assets/{flowDiagram-7ea5b25a-5fa1912f.js → flowDiagram-7ea5b25a-4739080f.js} +1 -1
  46. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-736177bf.js +1 -0
  47. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-abe16c3d-622a1fd2.js → flowchart-elk-definition-abe16c3d-7c1b0e0f.js} +1 -1
  48. rasa/core/channels/inspector/dist/assets/{ganttDiagram-9b5ea136-e285a63a.js → ganttDiagram-9b5ea136-772fd050.js} +1 -1
  49. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-99d0ae7c-f237bdca.js → gitGraphDiagram-99d0ae7c-8eae1dc9.js} +1 -1
  50. rasa/core/channels/inspector/dist/assets/{index-2c4b9a3b-4b03d70e.js → index-2c4b9a3b-f55afcdf.js} +1 -1
  51. rasa/core/channels/inspector/dist/assets/index-e7cef9de.js +1317 -0
  52. rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-72a0fa5f.js → infoDiagram-736b4530-124d4a14.js} +1 -1
  53. rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-82218c41.js → journeyDiagram-df861f2b-7c4fae44.js} +1 -1
  54. rasa/core/channels/inspector/dist/assets/{layout-78cff630.js → layout-b9885fb6.js} +1 -1
  55. rasa/core/channels/inspector/dist/assets/{line-5038b469.js → line-7c59abb6.js} +1 -1
  56. rasa/core/channels/inspector/dist/assets/{linear-c4fc4098.js → linear-4776f780.js} +1 -1
  57. rasa/core/channels/inspector/dist/assets/{mindmap-definition-beec6740-c33c8ea6.js → mindmap-definition-beec6740-2332c46c.js} +1 -1
  58. rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-a8d03059.js → pieDiagram-dbbf0591-8fb39303.js} +1 -1
  59. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-6a0e56b2.js → quadrantDiagram-4d7f4fd6-3c7180a2.js} +1 -1
  60. rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-2dc7c7bd.js → requirementDiagram-6fc4c22a-e910bcb8.js} +1 -1
  61. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-8f13d901-2360fe39.js → sankeyDiagram-8f13d901-ead16c89.js} +1 -1
  62. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-b655622a-41b9f9ad.js → sequenceDiagram-b655622a-29a02a19.js} +1 -1
  63. rasa/core/channels/inspector/dist/assets/{stateDiagram-59f0c015-0aad326f.js → stateDiagram-59f0c015-042b3137.js} +1 -1
  64. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-2b26beab-9847d984.js → stateDiagram-v2-2b26beab-2178c0f3.js} +1 -1
  65. rasa/core/channels/inspector/dist/assets/{styles-080da4f6-564d890e.js → styles-080da4f6-23ffa4fc.js} +1 -1
  66. rasa/core/channels/inspector/dist/assets/{styles-3dcbcfbf-38957613.js → styles-3dcbcfbf-94f59763.js} +1 -1
  67. rasa/core/channels/inspector/dist/assets/{styles-9c745c82-f0fc6921.js → styles-9c745c82-78a6bebc.js} +1 -1
  68. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-4835440b-ef3c5a77.js → svgDrawCommon-4835440b-eae2a6f6.js} +1 -1
  69. rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-bf3e91c1.js → timeline-definition-5b62e21b-5c968d92.js} +1 -1
  70. rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-4d4026c0.js → xychartDiagram-2b33534f-fd3db0d5.js} +1 -1
  71. rasa/core/channels/inspector/dist/index.html +18 -17
  72. rasa/core/channels/inspector/index.html +17 -16
  73. rasa/core/channels/inspector/package.json +5 -1
  74. rasa/core/channels/inspector/src/App.tsx +118 -68
  75. rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
  76. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +11 -10
  77. rasa/core/channels/inspector/src/components/DialogueStack.tsx +10 -25
  78. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -3
  79. rasa/core/channels/inspector/src/helpers/audiostream.ts +165 -0
  80. rasa/core/channels/inspector/src/helpers/formatters.test.ts +10 -0
  81. rasa/core/channels/inspector/src/helpers/formatters.ts +107 -41
  82. rasa/core/channels/inspector/src/helpers/utils.ts +92 -7
  83. rasa/core/channels/inspector/src/types.ts +21 -1
  84. rasa/core/channels/inspector/yarn.lock +94 -1
  85. rasa/core/channels/rest.py +51 -46
  86. rasa/core/channels/socketio.py +28 -1
  87. rasa/core/channels/telegram.py +1 -1
  88. rasa/core/channels/twilio.py +1 -1
  89. rasa/core/channels/{audiocodes.py → voice_ready/audiocodes.py} +122 -69
  90. rasa/core/channels/{voice_aware → voice_ready}/jambonz.py +26 -8
  91. rasa/core/channels/{voice_aware → voice_ready}/jambonz_protocol.py +57 -5
  92. rasa/core/channels/{twilio_voice.py → voice_ready/twilio_voice.py} +64 -28
  93. rasa/core/channels/voice_ready/utils.py +37 -0
  94. rasa/core/channels/voice_stream/asr/__init__.py +0 -0
  95. rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
  96. rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
  97. rasa/core/channels/voice_stream/asr/azure.py +129 -0
  98. rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
  99. rasa/core/channels/voice_stream/audio_bytes.py +8 -0
  100. rasa/core/channels/voice_stream/browser_audio.py +107 -0
  101. rasa/core/channels/voice_stream/call_state.py +23 -0
  102. rasa/core/channels/voice_stream/tts/__init__.py +0 -0
  103. rasa/core/channels/voice_stream/tts/azure.py +106 -0
  104. rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
  105. rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
  106. rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
  107. rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
  108. rasa/core/channels/voice_stream/util.py +57 -0
  109. rasa/core/channels/voice_stream/voice_channel.py +427 -0
  110. rasa/core/information_retrieval/qdrant.py +1 -0
  111. rasa/core/nlg/contextual_response_rephraser.py +45 -17
  112. rasa/{nlu → core}/persistor.py +203 -68
  113. rasa/core/policies/enterprise_search_policy.py +119 -63
  114. rasa/core/policies/flows/flow_executor.py +15 -22
  115. rasa/core/policies/intentless_policy.py +83 -28
  116. rasa/core/processor.py +25 -0
  117. rasa/core/run.py +12 -2
  118. rasa/core/secrets_manager/constants.py +4 -0
  119. rasa/core/secrets_manager/factory.py +8 -0
  120. rasa/core/secrets_manager/vault.py +11 -1
  121. rasa/core/training/interactive.py +33 -34
  122. rasa/core/utils.py +47 -21
  123. rasa/dialogue_understanding/coexistence/llm_based_router.py +41 -14
  124. rasa/dialogue_understanding/commands/__init__.py +6 -0
  125. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +60 -0
  126. rasa/dialogue_understanding/commands/session_end_command.py +61 -0
  127. rasa/dialogue_understanding/commands/user_silence_command.py +59 -0
  128. rasa/dialogue_understanding/commands/utils.py +5 -0
  129. rasa/dialogue_understanding/generator/constants.py +2 -0
  130. rasa/dialogue_understanding/generator/flow_retrieval.py +47 -9
  131. rasa/dialogue_understanding/generator/llm_based_command_generator.py +38 -15
  132. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  133. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +35 -13
  134. rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +3 -0
  135. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +60 -13
  136. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +53 -0
  137. rasa/dialogue_understanding/patterns/repeat.py +37 -0
  138. rasa/dialogue_understanding/patterns/user_silence.py +37 -0
  139. rasa/dialogue_understanding/processor/command_processor.py +21 -1
  140. rasa/e2e_test/aggregate_test_stats_calculator.py +1 -11
  141. rasa/e2e_test/assertions.py +136 -61
  142. rasa/e2e_test/assertions_schema.yml +23 -0
  143. rasa/e2e_test/e2e_test_case.py +85 -6
  144. rasa/e2e_test/e2e_test_runner.py +2 -3
  145. rasa/e2e_test/utils/e2e_yaml_utils.py +1 -1
  146. rasa/engine/graph.py +3 -10
  147. rasa/engine/loader.py +12 -0
  148. rasa/engine/recipes/config_files/default_config.yml +0 -3
  149. rasa/engine/recipes/default_recipe.py +0 -1
  150. rasa/engine/recipes/graph_recipe.py +0 -1
  151. rasa/engine/runner/dask.py +2 -2
  152. rasa/engine/storage/local_model_storage.py +12 -42
  153. rasa/engine/storage/storage.py +1 -5
  154. rasa/engine/validation.py +527 -74
  155. rasa/model_manager/__init__.py +0 -0
  156. rasa/model_manager/config.py +40 -0
  157. rasa/model_manager/model_api.py +559 -0
  158. rasa/model_manager/runner_service.py +286 -0
  159. rasa/model_manager/socket_bridge.py +146 -0
  160. rasa/model_manager/studio_jwt_auth.py +86 -0
  161. rasa/model_manager/trainer_service.py +325 -0
  162. rasa/model_manager/utils.py +87 -0
  163. rasa/model_manager/warm_rasa_process.py +187 -0
  164. rasa/model_service.py +112 -0
  165. rasa/model_training.py +42 -23
  166. rasa/nlu/tokenizers/whitespace_tokenizer.py +3 -14
  167. rasa/server.py +4 -2
  168. rasa/shared/constants.py +60 -8
  169. rasa/shared/core/constants.py +13 -0
  170. rasa/shared/core/domain.py +107 -50
  171. rasa/shared/core/events.py +29 -0
  172. rasa/shared/core/flows/flow.py +5 -0
  173. rasa/shared/core/flows/flows_list.py +19 -6
  174. rasa/shared/core/flows/flows_yaml_schema.json +10 -0
  175. rasa/shared/core/flows/utils.py +39 -0
  176. rasa/shared/core/flows/validation.py +121 -0
  177. rasa/shared/core/flows/yaml_flows_io.py +15 -27
  178. rasa/shared/core/slots.py +5 -0
  179. rasa/shared/importers/importer.py +59 -41
  180. rasa/shared/importers/multi_project.py +23 -11
  181. rasa/shared/importers/rasa.py +12 -3
  182. rasa/shared/importers/remote_importer.py +196 -0
  183. rasa/shared/importers/utils.py +3 -1
  184. rasa/shared/nlu/training_data/formats/rasa_yaml.py +18 -3
  185. rasa/shared/nlu/training_data/training_data.py +18 -19
  186. rasa/shared/providers/_configs/litellm_router_client_config.py +220 -0
  187. rasa/shared/providers/_configs/model_group_config.py +167 -0
  188. rasa/shared/providers/_configs/openai_client_config.py +1 -1
  189. rasa/shared/providers/_configs/rasa_llm_client_config.py +73 -0
  190. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +1 -0
  191. rasa/shared/providers/_configs/utils.py +16 -0
  192. rasa/shared/providers/_utils.py +79 -0
  193. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +13 -29
  194. rasa/shared/providers/embedding/azure_openai_embedding_client.py +54 -21
  195. rasa/shared/providers/embedding/default_litellm_embedding_client.py +24 -0
  196. rasa/shared/providers/embedding/litellm_router_embedding_client.py +135 -0
  197. rasa/shared/providers/llm/_base_litellm_client.py +34 -22
  198. rasa/shared/providers/llm/azure_openai_llm_client.py +50 -29
  199. rasa/shared/providers/llm/default_litellm_llm_client.py +24 -0
  200. rasa/shared/providers/llm/litellm_router_llm_client.py +182 -0
  201. rasa/shared/providers/llm/rasa_llm_client.py +112 -0
  202. rasa/shared/providers/llm/self_hosted_llm_client.py +5 -29
  203. rasa/shared/providers/mappings.py +19 -0
  204. rasa/shared/providers/router/__init__.py +0 -0
  205. rasa/shared/providers/router/_base_litellm_router_client.py +183 -0
  206. rasa/shared/providers/router/router_client.py +73 -0
  207. rasa/shared/utils/common.py +40 -24
  208. rasa/shared/utils/health_check/__init__.py +0 -0
  209. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
  210. rasa/shared/utils/health_check/health_check.py +258 -0
  211. rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
  212. rasa/shared/utils/io.py +27 -6
  213. rasa/shared/utils/llm.py +354 -44
  214. rasa/shared/utils/schemas/events.py +2 -0
  215. rasa/shared/utils/schemas/model_config.yml +0 -10
  216. rasa/shared/utils/yaml.py +181 -38
  217. rasa/studio/data_handler.py +3 -1
  218. rasa/studio/upload.py +160 -74
  219. rasa/telemetry.py +94 -17
  220. rasa/tracing/config.py +3 -1
  221. rasa/tracing/instrumentation/attribute_extractors.py +95 -18
  222. rasa/tracing/instrumentation/instrumentation.py +121 -0
  223. rasa/utils/common.py +5 -0
  224. rasa/utils/endpoints.py +27 -1
  225. rasa/utils/io.py +8 -16
  226. rasa/utils/log_utils.py +9 -2
  227. rasa/utils/sanic_error_handler.py +32 -0
  228. rasa/validator.py +110 -16
  229. rasa/version.py +1 -1
  230. {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/METADATA +16 -14
  231. {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/RECORD +236 -185
  232. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-1844e5a5.js +0 -1
  233. rasa/core/channels/inspector/dist/assets/index-a5d3e69d.js +0 -1040
  234. rasa/core/channels/voice_aware/utils.py +0 -20
  235. rasa/llm_fine_tuning/notebooks/unsloth_finetuning.ipynb +0 -407
  236. /rasa/core/channels/{voice_aware → voice_ready}/__init__.py +0 -0
  237. /rasa/core/channels/{voice_native → voice_stream}/__init__.py +0 -0
  238. {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/NOTICE +0 -0
  239. {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/WHEEL +0 -0
  240. {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/entry_points.txt +0 -0
@@ -5,13 +5,24 @@ export interface Slot {
5
5
  }
6
6
 
7
7
  export interface Event {
8
- event: "user" | "bot";
8
+ event: "user" | "bot" | "flow_completed" | "flow_started" | "stack" | "restart";
9
9
  text?: string;
10
+ timestamp: string;
11
+ update?: string;
12
+ parse_data?: { commands: Command[] };
10
13
  metadata?: { utter_action?: string };
11
14
  }
12
15
 
16
+ export interface Command {
17
+ command: string;
18
+ flow?: string;
19
+ name?: string;
20
+ value?: string;
21
+ }
22
+
13
23
  export interface SelectedStack {
14
24
  stack: Stack;
25
+ activatedSteps: string[];
15
26
  isUserSelected: boolean;
16
27
  }
17
28
 
@@ -21,8 +32,17 @@ export interface Stack {
21
32
  step_id: string;
22
33
  collect?: string;
23
34
  utter?: string;
35
+ ended: boolean;
24
36
  }
25
37
 
38
+ export interface Tracker {
39
+ sender_id: string;
40
+ slots: { [key: string]: unknown };
41
+ events: Event[];
42
+ stack: Stack[];
43
+ }
44
+
45
+
26
46
  export interface Flow {
27
47
  id: string;
28
48
  description: string;
@@ -1674,6 +1674,23 @@
1674
1674
  "@jridgewell/resolve-uri" "^3.1.0"
1675
1675
  "@jridgewell/sourcemap-codec" "^1.4.14"
1676
1676
 
1677
+ "@lit-labs/react@^2.1.3":
1678
+ version "2.1.3"
1679
+ resolved "https://registry.yarnpkg.com/@lit-labs/react/-/react-2.1.3.tgz#5fca408c435f0b6297fc1314471dc2426206d413"
1680
+ integrity sha512-OD9h2JynerBQUMNzb563jiVpxfvPF0HjQkKY2mx0lpVYvD7F+rtJpOGz6ek+6ufMidV3i+MPT9SX62OKWHFrQg==
1681
+ dependencies:
1682
+ "@lit/react" "^1.0.3"
1683
+
1684
+ "@lit/react@^1.0.3":
1685
+ version "1.0.5"
1686
+ resolved "https://registry.yarnpkg.com/@lit/react/-/react-1.0.5.tgz#9c53a8d719f91ef7edca0bdd68f5589ea579ffc1"
1687
+ integrity sha512-RSHhrcuSMa4vzhqiTenzXvtQ6QDq3hSPsnHHO3jaPmmvVFeoNNm4DHoQ0zLdKAUvY3wP3tTENSUf7xpyVfrDEA==
1688
+
1689
+ "@microsoft/fetch-event-source@^2.0.1":
1690
+ version "2.0.1"
1691
+ resolved "https://registry.yarnpkg.com/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz#9ceecc94b49fbaa15666e38ae8587f64acce007d"
1692
+ integrity sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==
1693
+
1677
1694
  "@nodelib/fs.scandir@2.1.5":
1678
1695
  version "2.1.5"
1679
1696
  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -2215,7 +2232,7 @@ arg@^4.1.0:
2215
2232
  resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
2216
2233
  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
2217
2234
 
2218
- argparse@^1.0.7:
2235
+ argparse@^1.0.10, argparse@^1.0.7:
2219
2236
  version "1.0.10"
2220
2237
  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
2221
2238
  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
@@ -2266,6 +2283,13 @@ asynckit@^0.4.0:
2266
2283
  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
2267
2284
  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
2268
2285
 
2286
+ autolinker@^3.11.0:
2287
+ version "3.16.2"
2288
+ resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-3.16.2.tgz#6bb4f32432fc111b65659336863e653973bfbcc9"
2289
+ integrity sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==
2290
+ dependencies:
2291
+ tslib "^2.3.0"
2292
+
2269
2293
  available-typed-arrays@^1.0.5:
2270
2294
  version "1.0.5"
2271
2295
  resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
@@ -2999,11 +3023,33 @@ decode-named-character-reference@^1.0.0:
2999
3023
  dependencies:
3000
3024
  character-entities "^2.0.0"
3001
3025
 
3026
+ decode-uri-component@^0.4.1:
3027
+ version "0.4.1"
3028
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz#2ac4859663c704be22bf7db760a1494a49ab2cc5"
3029
+ integrity sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==
3030
+
3002
3031
  dedent@^1.0.0:
3003
3032
  version "1.5.1"
3004
3033
  resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
3005
3034
  integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==
3006
3035
 
3036
+ deep-chat-react@2.0.1:
3037
+ version "2.0.1"
3038
+ resolved "https://registry.yarnpkg.com/deep-chat-react/-/deep-chat-react-2.0.1.tgz#a8590a708787c478ab0bd469f1afddca3b65a62e"
3039
+ integrity sha512-oq3ztyhwgPemvJ+LAP2Zbb8rBFty41TlxtCE6bpzGx60mv3tEXd9DvmcI+CQWPDcYRonJLu0tMNxKVwTlY3Ybg==
3040
+ dependencies:
3041
+ "@lit-labs/react" "^2.1.3"
3042
+ deep-chat "2.0.1"
3043
+
3044
+ deep-chat@2.0.1:
3045
+ version "2.0.1"
3046
+ resolved "https://registry.yarnpkg.com/deep-chat/-/deep-chat-2.0.1.tgz#a3892a994e312f60f6fea38d8b63818a93e32dc2"
3047
+ integrity sha512-dLzEvRah+lr+Z6MZq/XSkuIJu2jyd38QVdqMeXGy2WKJQGmBnFZOK/m+F+hsLm9nz2MSfnMYXxGitQI4SNzBcQ==
3048
+ dependencies:
3049
+ "@microsoft/fetch-event-source" "^2.0.1"
3050
+ remarkable "^2.0.1"
3051
+ speech-to-element "^0.1.66"
3052
+
3007
3053
  deep-equal@^2.0.5:
3008
3054
  version "2.2.2"
3009
3055
  resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa"
@@ -3444,6 +3490,11 @@ fill-range@^7.0.1:
3444
3490
  dependencies:
3445
3491
  to-regex-range "^5.0.1"
3446
3492
 
3493
+ filter-obj@^5.1.0:
3494
+ version "5.1.0"
3495
+ resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed"
3496
+ integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==
3497
+
3447
3498
  find-root@^1.1.0:
3448
3499
  version "1.1.0"
3449
3500
  resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
@@ -3780,6 +3831,11 @@ ignore@^5.2.0, ignore@^5.2.4:
3780
3831
  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
3781
3832
  integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
3782
3833
 
3834
+ immutable-json-patch@^6.0.1:
3835
+ version "6.0.1"
3836
+ resolved "https://registry.yarnpkg.com/immutable-json-patch/-/immutable-json-patch-6.0.1.tgz#b60b609633e97bb2bc7c74726ff607729e61fd5b"
3837
+ integrity sha512-BHL/cXMjwFZlTOffiWNdY8ZTvNyYLrutCnWxrcKPHr5FqpAb6vsO6WWSPnVSys3+DruFN6lhHJJPHi8uELQL5g==
3838
+
3783
3839
  import-fresh@^3.2.1:
3784
3840
  version "3.3.0"
3785
3841
  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@@ -5301,6 +5357,15 @@ pure-rand@^6.0.0:
5301
5357
  resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7"
5302
5358
  integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==
5303
5359
 
5360
+ query-string@^9.0.0:
5361
+ version "9.0.0"
5362
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-9.0.0.tgz#1fe177cd95545600f0deab93f5fb02fd4e3e7273"
5363
+ integrity sha512-4EWwcRGsO2H+yzq6ddHcVqkCQ2EFUSfDMEjF8ryp8ReymyZhIuaFRGLomeOQLkrzacMHoyky2HW0Qe30UbzkKw==
5364
+ dependencies:
5365
+ decode-uri-component "^0.4.1"
5366
+ filter-obj "^5.1.0"
5367
+ split-on-first "^3.0.0"
5368
+
5304
5369
  querystringify@^2.1.1:
5305
5370
  version "2.2.0"
5306
5371
  resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
@@ -5402,6 +5467,11 @@ react-syntax-highlighter@15.5.0:
5402
5467
  prismjs "^1.27.0"
5403
5468
  refractor "^3.6.0"
5404
5469
 
5470
+ react-use-websocket@^4.8.1:
5471
+ version "4.8.1"
5472
+ resolved "https://registry.yarnpkg.com/react-use-websocket/-/react-use-websocket-4.8.1.tgz#be06a0bc956c6d56391a29cbe2caa6ae8edb5615"
5473
+ integrity sha512-FTXuG5O+LFozmu1BRfrzl7UIQngECvGJmL7BHsK4TYXuVt+mCizVA8lT0hGSIF0Z0TedF7bOo1nRzOUdginhDw==
5474
+
5405
5475
  react@18.2.0:
5406
5476
  version "18.2.0"
5407
5477
  resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
@@ -5440,6 +5510,14 @@ regexp.prototype.flags@^1.5.0:
5440
5510
  define-properties "^1.2.0"
5441
5511
  set-function-name "^2.0.0"
5442
5512
 
5513
+ remarkable@^2.0.1:
5514
+ version "2.0.1"
5515
+ resolved "https://registry.yarnpkg.com/remarkable/-/remarkable-2.0.1.tgz#280ae6627384dfb13d98ee3995627ca550a12f31"
5516
+ integrity sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==
5517
+ dependencies:
5518
+ argparse "^1.0.10"
5519
+ autolinker "^3.11.0"
5520
+
5443
5521
  require-directory@^2.1.1:
5444
5522
  version "2.1.1"
5445
5523
  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -5638,6 +5716,16 @@ space-separated-tokens@^1.0.0:
5638
5716
  resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
5639
5717
  integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
5640
5718
 
5719
+ speech-to-element@^0.1.66:
5720
+ version "0.1.66"
5721
+ resolved "https://registry.yarnpkg.com/speech-to-element/-/speech-to-element-0.1.66.tgz#911279115fa72bd997a92fab428ed857062e4ba0"
5722
+ integrity sha512-tHDZ8ttFCsXtQLgWHDDVVTGuiCGWqkxRoIGLygBbU0DUsod2Ho89fws7OeCHpGOeDL9s5rBVpEqj45BsEIKy+Q==
5723
+
5724
+ split-on-first@^3.0.0:
5725
+ version "3.0.0"
5726
+ resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-3.0.0.tgz#f04959c9ea8101b9b0bbf35a61b9ebea784a23e7"
5727
+ integrity sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==
5728
+
5641
5729
  sprintf-js@~1.0.2:
5642
5730
  version "1.0.3"
5643
5731
  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -5855,6 +5943,11 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0:
5855
5943
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
5856
5944
  integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
5857
5945
 
5946
+ tslib@^2.3.0:
5947
+ version "2.6.3"
5948
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
5949
+ integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
5950
+
5858
5951
  type-check@^0.4.0, type-check@~0.4.0:
5859
5952
  version "0.4.0"
5860
5953
  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -9,7 +9,6 @@ import structlog
9
9
  from asyncio import Queue, CancelledError
10
10
  from sanic import Blueprint, response
11
11
  from sanic.request import Request
12
- from sanic.response import HTTPResponse, ResponseStream
13
12
  from typing import (
14
13
  Text,
15
14
  Dict,
@@ -20,6 +19,7 @@ from typing import (
20
19
  NoReturn,
21
20
  Union,
22
21
  )
22
+ from sanic.response import HTTPResponse, ResponseStream, BaseHTTPResponse
23
23
 
24
24
  import rasa.utils.endpoints
25
25
  from rasa.core.channels.channel import (
@@ -128,6 +128,54 @@ class RestInput(InputChannel):
128
128
 
129
129
  await task
130
130
 
131
+ async def receive_messages(
132
+ self, request: Request, on_new_message: Callable[[UserMessage], Awaitable[None]]
133
+ ) -> Union[BaseHTTPResponse, ResponseStream]:
134
+ sender_id = await self._extract_sender(request)
135
+ text = self._extract_message(request)
136
+ should_use_stream = rasa.utils.endpoints.bool_arg(
137
+ request, "stream", default=False
138
+ )
139
+ input_channel = self._extract_input_channel(request)
140
+ metadata = self.get_metadata(request)
141
+
142
+ if should_use_stream:
143
+ return ResponseStream(
144
+ partial(
145
+ self.stream_response,
146
+ on_new_message,
147
+ text,
148
+ sender_id,
149
+ input_channel,
150
+ metadata,
151
+ ),
152
+ content_type="text/event-stream",
153
+ )
154
+ else:
155
+ collector = CollectingOutputChannel()
156
+ # noinspection PyBroadException
157
+ try:
158
+ await on_new_message(
159
+ UserMessage(
160
+ text,
161
+ collector,
162
+ sender_id,
163
+ input_channel=input_channel,
164
+ metadata=metadata,
165
+ headers=request.headers,
166
+ )
167
+ )
168
+ except CancelledError:
169
+ structlogger.error(
170
+ "rest.message.received.timeout", text=copy.deepcopy(text)
171
+ )
172
+ except Exception:
173
+ structlogger.exception(
174
+ "rest.message.received.failure", text=copy.deepcopy(text)
175
+ )
176
+
177
+ return response.json(collector.messages)
178
+
131
179
  def blueprint(
132
180
  self, on_new_message: Callable[[UserMessage], Awaitable[None]]
133
181
  ) -> Blueprint:
@@ -149,51 +197,8 @@ class RestInput(InputChannel):
149
197
  return response.json({"status": "ok"})
150
198
 
151
199
  @custom_webhook.route("/webhook", methods=["POST"])
152
- async def receive(request: Request) -> Union[ResponseStream, HTTPResponse]:
153
- sender_id = await self._extract_sender(request)
154
- text = self._extract_message(request)
155
- should_use_stream = rasa.utils.endpoints.bool_arg(
156
- request, "stream", default=False
157
- )
158
- input_channel = self._extract_input_channel(request)
159
- metadata = self.get_metadata(request)
160
-
161
- if should_use_stream:
162
- return ResponseStream(
163
- partial(
164
- self.stream_response,
165
- on_new_message,
166
- text,
167
- sender_id,
168
- input_channel,
169
- metadata,
170
- ),
171
- content_type="text/event-stream",
172
- )
173
- else:
174
- collector = CollectingOutputChannel()
175
- # noinspection PyBroadException
176
- try:
177
- await on_new_message(
178
- UserMessage(
179
- text,
180
- collector,
181
- sender_id,
182
- input_channel=input_channel,
183
- metadata=metadata,
184
- headers=request.headers,
185
- )
186
- )
187
- except CancelledError:
188
- structlogger.error(
189
- "rest.message.received.timeout", text=copy.deepcopy(text)
190
- )
191
- except Exception:
192
- structlogger.exception(
193
- "rest.message.received.failure", text=copy.deepcopy(text)
194
- )
195
-
196
- return response.json(collector.messages)
200
+ async def receive(request: Request) -> Union[ResponseStream, BaseHTTPResponse]:
201
+ return await self.receive_messages(request, on_new_message)
197
202
 
198
203
  return custom_webhook
199
204
 
@@ -37,7 +37,11 @@ class SocketBlueprint(Blueprint):
37
37
  :param options: Options to be used while registering the
38
38
  blueprint into the app.
39
39
  """
40
- self.ctx.sio.attach(app, self.ctx.socketio_path)
40
+ if self.ctx.socketio_path:
41
+ path = self.ctx.socketio_path
42
+ else:
43
+ path = options.get("url_prefix", "/socket.io")
44
+ self.ctx.sio.attach(app, path)
41
45
  super().register(app, options)
42
46
 
43
47
 
@@ -47,11 +51,34 @@ class SocketIOOutput(OutputChannel):
47
51
  return "socketio"
48
52
 
49
53
  def __init__(self, sio: AsyncServer, bot_message_evt: Text) -> None:
54
+ super().__init__()
50
55
  self.sio = sio
51
56
  self.bot_message_evt = bot_message_evt
57
+ self.last_event_timestamp = (
58
+ -1
59
+ ) # Initialize with -1 to send all events on first message
60
+
61
+ def _get_new_events(self) -> List[Dict[Text, Any]]:
62
+ """Get events that are newer than the last sent event."""
63
+ events = self.tracker_state.get("events", []) if self.tracker_state else []
64
+ new_events = [
65
+ event for event in events if event["timestamp"] > self.last_event_timestamp
66
+ ]
67
+ if new_events:
68
+ self.last_event_timestamp = new_events[-1]["timestamp"]
69
+ return new_events
52
70
 
53
71
  async def _send_message(self, socket_id: Text, response: Any) -> None:
54
72
  """Sends a message to the recipient using the bot event."""
73
+ # send tracker state (contains stack, slots and more)
74
+ await self.sio.emit("tracker_state", self.tracker_state, room=socket_id)
75
+
76
+ # send new events
77
+ new_events = self._get_new_events()
78
+ if new_events:
79
+ await self.sio.emit("rasa_events", new_events, room=socket_id)
80
+
81
+ # send bot response
55
82
  await self.sio.emit(self.bot_message_evt, response, room=socket_id)
56
83
 
57
84
  async def send_text_message(
@@ -34,7 +34,7 @@ class TelegramOutput(Bot, OutputChannel):
34
34
  return "telegram"
35
35
 
36
36
  def __init__(self, access_token: Optional[Text]) -> None:
37
- super().__init__(access_token)
37
+ Bot.__init__(self, access_token)
38
38
 
39
39
  async def send_text_message(
40
40
  self, recipient_id: Text, text: Text, **kwargs: Any
@@ -28,7 +28,7 @@ class TwilioOutput(Client, OutputChannel):
28
28
  auth_token: Optional[Text],
29
29
  twilio_number: Optional[Text],
30
30
  ) -> None:
31
- super().__init__(account_sid, auth_token)
31
+ Client.__init__(self, account_sid, auth_token)
32
32
  self.twilio_number = twilio_number
33
33
  self.send_retry = 0
34
34
  self.max_retry = 5