rasa-pro 3.13.0.dev5__py3-none-any.whl → 3.13.0.dev20250612__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 (140) 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/summarize.py +1 -1
  101. rasa/core/persistor.py +55 -20
  102. rasa/core/processor.py +2 -2
  103. rasa/core/run.py +7 -2
  104. rasa/core/tracker_stores/__init__.py +0 -0
  105. rasa/core/{auth_retry_tracker_store.py → tracker_stores/auth_retry_tracker_store.py} +5 -1
  106. rasa/core/tracker_stores/dynamo_tracker_store.py +218 -0
  107. rasa/core/tracker_stores/mongo_tracker_store.py +206 -0
  108. rasa/core/tracker_stores/redis_tracker_store.py +219 -0
  109. rasa/core/tracker_stores/sql_tracker_store.py +555 -0
  110. rasa/core/tracker_stores/tracker_store.py +805 -0
  111. rasa/core/utils.py +6 -0
  112. rasa/dialogue_understanding/commands/clarify_command.py +2 -2
  113. rasa/dialogue_understanding/generator/llm_based_command_generator.py +1 -1
  114. rasa/hooks.py +2 -2
  115. rasa/keys +1 -0
  116. rasa/model_manager/config.py +3 -1
  117. rasa/model_manager/model_api.py +1 -2
  118. rasa/model_manager/runner_service.py +8 -4
  119. rasa/model_manager/trainer_service.py +1 -0
  120. rasa/model_training.py +12 -3
  121. rasa/nlu/extractors/crf_entity_extractor.py +66 -16
  122. rasa/plugin.py +1 -1
  123. rasa/server.py +6 -2
  124. rasa/shared/core/events.py +68 -2
  125. rasa/telemetry.py +2 -2
  126. rasa/tracing/config.py +1 -1
  127. rasa/tracing/instrumentation/attribute_extractors.py +1 -1
  128. rasa/tracing/instrumentation/instrumentation.py +1 -1
  129. rasa/utils/licensing.py +1 -2
  130. rasa/version.py +1 -1
  131. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev20250612.dist-info}/METADATA +4 -4
  132. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev20250612.dist-info}/RECORD +135 -126
  133. rasa/core/channels/inspector/dist/assets/channel-dfa68278.js +0 -1
  134. rasa/core/channels/inspector/dist/assets/clone-edb7f119.js +0 -1
  135. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-65e7c670.js +0 -1
  136. rasa/core/channels/inspector/src/helpers/audiostream.ts +0 -191
  137. rasa/core/tracker_store.py +0 -1792
  138. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev20250612.dist-info}/NOTICE +0 -0
  139. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev20250612.dist-info}/WHEEL +0 -0
  140. {rasa_pro-3.13.0.dev5.dist-info → rasa_pro-3.13.0.dev20250612.dist-info}/entry_points.txt +0 -0
@@ -4,63 +4,63 @@ import {
4
4
  useBreakpointValue,
5
5
  useColorModeValue,
6
6
  useToast,
7
- } from "@chakra-ui/react";
8
- import { useEffect, useState } from "react";
9
- import axios from "axios";
10
- import { useOurTheme } from "./theme";
11
- import { Welcome } from "./components/Welcome";
12
- import { DialogueStack } from "./components/DialogueStack";
13
- import { DialougeInformation } from "./components/DialogueInformation";
14
- import { LoadingSpinner } from "./components/LoadingSpinner";
15
- import { DiagramFlow } from "./components/DiagramFlow";
16
- import { RecruitmentPanel } from "./components/RecruitmentPanel";
17
- import { formatSlots } from "./helpers/formatters";
18
- import { Slot, Stack, Event, Flow, SelectedStack, Tracker } from "./types";
7
+ } from '@chakra-ui/react'
8
+ import { useEffect, useState } from 'react'
9
+ import axios from 'axios'
10
+ import { useOurTheme } from './theme'
11
+ import { Welcome } from './components/Welcome'
12
+ import { DialogueStack } from './components/DialogueStack'
13
+ import { DialougeInformation } from './components/DialogueInformation'
14
+ import { LoadingSpinner } from './components/LoadingSpinner'
15
+ import { DiagramFlow } from './components/DiagramFlow'
16
+ import { RecruitmentPanel } from './components/RecruitmentPanel'
17
+ import { formatSlots } from './helpers/formatters'
18
+ import { Slot, Stack, Event, Flow, SelectedStack, Tracker } from './types'
19
19
  import {
20
20
  createHistoricalStack,
21
21
  flowStepTrail,
22
22
  updatedActiveFrame,
23
- } from "./helpers/utils";
24
- import queryString from "query-string";
25
- import { Chat } from "./components/Chat";
26
- import useWebSocket, { ReadyState } from "react-use-websocket";
23
+ } from './helpers/utils'
24
+ import queryString from 'query-string'
25
+ import { Chat } from './components/Chat'
26
+ import useWebSocket, { ReadyState } from 'react-use-websocket'
27
27
 
28
28
  export function App() {
29
- const toast = useToast();
30
- const { rasaSpace, rasaRadii } = useOurTheme();
31
- const [rasaChatSessionId, setRasaChatSessionId] = useState<string>("");
32
- const [flows, setFlows] = useState<Flow[]>([]);
33
- const [slots, setSlots] = useState<Slot[]>([]);
34
- const [events, setEvents] = useState<Event[]>([]);
35
- const [story, setStory] = useState<string>("");
36
- const [stack, setStack] = useState<Stack[]>([]);
37
- const [frame, setFrame] = useState<SelectedStack | undefined>(undefined);
29
+ const toast = useToast()
30
+ const { rasaSpace, rasaRadii } = useOurTheme()
31
+ const [rasaChatSessionId, setRasaChatSessionId] = useState<string>('')
32
+ const [flows, setFlows] = useState<Flow[]>([])
33
+ const [slots, setSlots] = useState<Slot[]>([])
34
+ const [events, setEvents] = useState<Event[]>([])
35
+ const [story, setStory] = useState<string>('')
36
+ const [stack, setStack] = useState<Stack[]>([])
37
+ const [frame, setFrame] = useState<SelectedStack | undefined>(undefined)
38
38
 
39
39
  // State to control the visibility of the RecruitmentPanel
40
- const [showRecruitmentPanel, setShowRecruitmentPanel] = useState(true);
40
+ const [showRecruitmentPanel, setShowRecruitmentPanel] = useState(true)
41
41
 
42
42
  // we only show the transcript if we are not on the socket io channel
43
43
  // on the socketio channel, we show the chat component instead
44
- const shouldShowTranscript = !window.location.href.includes("socketio");
44
+ const shouldShowTranscript = !window.location.href.includes('socketio')
45
45
 
46
46
  const inspectWS = window.location.href
47
- .replace("inspect.html", "tracker_stream")
48
- .replace("http", "ws");
47
+ .replace('inspect.html', 'tracker_stream')
48
+ .replace('http', 'ws')
49
49
  const { sendJsonMessage, lastJsonMessage, readyState } =
50
50
  useWebSocket<Tracker>(inspectWS, {
51
51
  share: false,
52
52
  shouldReconnect: () => true,
53
- });
54
- const token = new URLSearchParams(window.location.search).get("token");
53
+ })
54
+ const token = new URLSearchParams(window.location.search).get('token')
55
55
 
56
56
  useEffect(() => {
57
57
  if (readyState === ReadyState.OPEN && rasaChatSessionId) {
58
58
  sendJsonMessage({
59
- action: "retrieve",
59
+ action: 'retrieve',
60
60
  sender_id: rasaChatSessionId,
61
- });
61
+ })
62
62
  }
63
- }, [readyState, sendJsonMessage, rasaChatSessionId]);
63
+ }, [readyState, sendJsonMessage, rasaChatSessionId])
64
64
 
65
65
  useEffect(() => {
66
66
  // if we are on a "dynamic" input channel where the user can chat on
@@ -68,37 +68,37 @@ export function App() {
68
68
  // support loading an existing conversation. therefore, we don't set
69
69
  // the sender id in the url and a reload of the page will start a new
70
70
  // conversation.
71
- if(!shouldShowTranscript) return;
71
+ if (!shouldShowTranscript) return
72
72
 
73
- const queryParameters = queryString.parse(window.location.search);
74
- const urlSender = queryParameters.sender as string;
73
+ const queryParameters = queryString.parse(window.location.search)
74
+ const urlSender = queryParameters.sender as string
75
75
  if (urlSender && urlSender !== rasaChatSessionId) {
76
- setRasaChatSessionId(urlSender);
76
+ setRasaChatSessionId(urlSender)
77
77
  } else if (!urlSender && rasaChatSessionId) {
78
78
  // update the sender query parameter
79
- const url = new URL(window.location.href);
80
- url.searchParams.set("sender", rasaChatSessionId);
81
- window.history.pushState(null, "", url.toString());
79
+ const url = new URL(window.location.href)
80
+ url.searchParams.set('sender', rasaChatSessionId)
81
+ window.history.pushState(null, '', url.toString())
82
82
  }
83
- }, [rasaChatSessionId, shouldShowTranscript]);
83
+ }, [rasaChatSessionId, shouldShowTranscript])
84
84
 
85
85
  useEffect(() => {
86
86
  axios
87
- .get("/flows", { params: { token } })
87
+ .get('/flows', { params: { token } })
88
88
  .then((response) => setFlows(response.data))
89
89
  .catch((error) => {
90
90
  // don't show a new toast if it's already active
91
- if (toast.isActive("flows")) return;
91
+ if (toast.isActive('flows')) return
92
92
  toast({
93
- id: "flows",
94
- title: "Flows could not be retrieved",
95
- description: error?.message || "An unknown error happened.",
96
- status: "error",
93
+ id: 'flows',
94
+ title: 'Flows could not be retrieved',
95
+ description: error?.message || 'An unknown error happened.',
96
+ status: 'error',
97
97
  duration: 4000,
98
98
  isClosable: true,
99
- });
100
- });
101
- }, [toast]);
99
+ })
100
+ })
101
+ }, [toast])
102
102
 
103
103
  function fetchStory() {
104
104
  axios
@@ -106,37 +106,37 @@ export function App() {
106
106
  .then((response) => setStory(response.data))
107
107
  .catch((error) => {
108
108
  // don't show a new toast if it's already active
109
- if (toast.isActive("story-error")) return;
109
+ if (toast.isActive('story-error')) return
110
110
  toast({
111
- id: "story-error",
112
- title: "Stories could not be retrieved",
113
- description: error?.message || "An unknown error happened.",
114
- status: "error",
111
+ id: 'story-error',
112
+ title: 'Stories could not be retrieved',
113
+ description: error?.message || 'An unknown error happened.',
114
+ status: 'error',
115
115
  duration: 4000,
116
116
  isClosable: true,
117
- });
118
- });
117
+ })
118
+ })
119
119
  }
120
120
 
121
121
  // Run when a new WebSocket message is received (lastJsonMessage)
122
122
  useEffect(() => {
123
123
  // if the tracker update that we received is for the current chat session,
124
124
  // update the tracker.
125
- if (!lastJsonMessage) return;
125
+ if (!lastJsonMessage) return
126
126
  if (
127
127
  !rasaChatSessionId ||
128
128
  lastJsonMessage?.sender_id === rasaChatSessionId
129
129
  ) {
130
- setSlots(formatSlots(lastJsonMessage.slots));
131
- setEvents(lastJsonMessage.events);
130
+ setSlots(formatSlots(lastJsonMessage.slots))
131
+ setEvents(lastJsonMessage.events)
132
132
  const updatedStack = createHistoricalStack(
133
133
  lastJsonMessage.stack,
134
- lastJsonMessage.events
135
- );
136
- setStack(updatedStack);
137
- setFrame(updatedActiveFrame(frame, updatedStack, lastJsonMessage.events));
138
- setRasaChatSessionId(lastJsonMessage.sender_id);
139
- fetchStory();
134
+ lastJsonMessage.events,
135
+ )
136
+ setStack(updatedStack)
137
+ setFrame(updatedActiveFrame(frame, updatedStack, lastJsonMessage.events))
138
+ setRasaChatSessionId(lastJsonMessage.sender_id)
139
+ fetchStory()
140
140
  } else if (
141
141
  rasaChatSessionId &&
142
142
  lastJsonMessage.sender_id !== rasaChatSessionId
@@ -144,51 +144,52 @@ export function App() {
144
144
  // show a header link with the new sender the user can click a button to
145
145
  // switch to the new chat session. the alert should be dissmissable.
146
146
  }
147
- }, [lastJsonMessage, rasaChatSessionId]);
147
+ }, [lastJsonMessage, rasaChatSessionId])
148
148
 
149
149
  const borderRadiusSx = {
150
150
  borderRadius: rasaRadii.normal,
151
- };
151
+ }
152
152
  const gridTemplateColumns = useBreakpointValue({
153
- base: "21rem minmax(20rem, auto) 21rem",
154
- "2xl": "25rem auto 25rem",
155
- });
153
+ base: '21rem minmax(20rem, auto) 21rem',
154
+ '2xl': '25rem auto 25rem',
155
+ })
156
156
  const gridSx = {
157
157
  gridTemplateColumns,
158
- gridTemplateRows: "1fr",
158
+ gridTemplateRows: '1fr',
159
159
  gridColumnGap: rasaSpace[1],
160
- height: "100vh",
160
+ height: '100vh',
161
161
  padding: rasaSpace[2],
162
- };
162
+ }
163
163
  const boxSx = {
164
164
  ...borderRadiusSx,
165
165
  padding: rasaSpace[1],
166
- bg: useColorModeValue("neutral.50", "neutral.50"),
167
- overflow: "hidden",
168
- };
166
+ bg: useColorModeValue('neutral.50', 'neutral.50'),
167
+ overflow: 'hidden',
168
+ }
169
169
  const leftColumnSx = {
170
- height: "100%",
171
- overflow: "hidden",
172
- gridTemplateColumns: "1fr",
170
+ height: '100%',
171
+ overflow: 'hidden',
172
+ gridTemplateColumns: '1fr',
173
173
  gridTemplateRows: showRecruitmentPanel
174
- ? "max-content max-content minmax(10rem, auto)"
175
- : "max-content minmax(10rem, 17.5rem) minmax(10rem, auto)",
174
+ ? 'max-content max-content minmax(10rem, auto)'
175
+ : 'max-content minmax(10rem, 17.5rem) minmax(10rem, auto)',
176
176
  gridRowGap: rasaSpace[1],
177
- };
177
+ }
178
178
 
179
179
  const onFrameSelected = (stack: Stack) => {
180
180
  setFrame({
181
181
  stack,
182
182
  activatedSteps: flowStepTrail(events)[stack.flow_id],
183
183
  isUserSelected: true,
184
- });
185
- };
184
+ })
185
+ }
186
186
 
187
187
  const handleCloseRecruitmentPanel = () => {
188
- setShowRecruitmentPanel(false);
189
- };
188
+ setShowRecruitmentPanel(false)
189
+ }
190
190
 
191
- if (!rasaChatSessionId && !window.location.href.includes("socketio")) return <LoadingSpinner />;
191
+ if (!rasaChatSessionId && !window.location.href.includes('socketio'))
192
+ return <LoadingSpinner />
192
193
 
193
194
  return (
194
195
  <Grid sx={gridSx}>
@@ -227,5 +228,5 @@ export function App() {
227
228
  </GridItem>
228
229
  )}
229
230
  </Grid>
230
- );
231
+ )
231
232
  }
@@ -1,67 +1,72 @@
1
- import { DeepChat } from "deep-chat-react";
2
- import { MessageContent } from "deep-chat/dist/types/messages";
3
- import { Flex, FlexProps } from "@chakra-ui/react";
4
- import { Command, Event } from "../types";
1
+ import { DeepChat } from 'deep-chat-react'
2
+ import { MessageContent } from 'deep-chat/dist/types/messages'
3
+ import { Flex, FlexProps } from '@chakra-ui/react'
4
+ import { Command, Event } from '../types'
5
5
 
6
6
  interface Props extends FlexProps {
7
- events: Event[];
7
+ events: Event[]
8
8
  }
9
9
 
10
10
  export const Chat = ({ sx, events, ...props }: Props) => {
11
11
  const containerSx = {
12
12
  ...sx,
13
13
  p: 0,
14
- flexDirection: "column",
15
- };
14
+ flexDirection: 'column',
15
+ }
16
16
 
17
- const maxHeight = document.documentElement.scrollHeight - 64;
17
+ const maxHeight = document.documentElement.scrollHeight - 64
18
18
  // 21 and 25 are the rem number we're using for the columns. We add 0.75rem for the padding
19
19
  // A potential improvement would be to add a onresize event for both width and height
20
- let remReference = 21.75;
20
+ let remReference = 21.75
21
21
  if (document.documentElement.clientWidth > 1631) {
22
- remReference = 25.75;
22
+ remReference = 25.75
23
23
  }
24
24
 
25
25
  const columnWidth =
26
26
  remReference *
27
- parseFloat(getComputedStyle(document.documentElement).fontSize);
27
+ parseFloat(getComputedStyle(document.documentElement).fontSize)
28
28
 
29
29
  // function that maps a command dict to a human string to display in the chat
30
30
  const mapCommand = (command: Command) => {
31
- let commandName = command.command;
32
- if (commandName === "start flow") {
33
- return `Start (${command.flow})`;
31
+ let commandName = command.command
32
+ if (commandName === 'start flow') {
33
+ return `Start (${command.flow})`
34
34
  }
35
- if (commandName === "set slot") {
36
- return `Set (${command.name} = ${command.value})`;
35
+ if (commandName === 'set slot') {
36
+ return `Set (${command.name} = ${command.value})`
37
37
  }
38
- return commandName;
39
- };
38
+ return commandName
39
+ }
40
40
 
41
41
  // collect user and bot messages
42
42
  const messages: MessageContent[] = events
43
- .filter((event: Event) => event.event === "user" || event.event === "bot" || event.event === "session_ended")
44
- // @ts-expect-error
43
+ .filter(
44
+ (event: Event) =>
45
+ event.event === 'user' ||
46
+ event.event === 'bot' ||
47
+ event.event === 'session_ended',
48
+ )
49
+ // @ts-expect-error
45
50
  .flatMap((event: Event) => {
46
- if (event.event === "user") {
51
+ if (event.event === 'user') {
47
52
  let commands =
48
53
  event.parse_data?.commands?.map(
49
- (command) => `<div>${mapCommand(command)}</div>`
50
- ) || [];
54
+ (command) => `<div>${mapCommand(command)}</div>`,
55
+ ) || []
51
56
  return [
52
57
  {
53
58
  role: event.event,
54
- text: event.text || "",
59
+ text: event.text || '',
55
60
  },
56
61
  {
57
- role: "system",
58
- html: `<div>${commands.join("")}</div>`,
62
+ role: 'system',
63
+ html: `<div>${commands.join('')}</div>`,
59
64
  },
60
- ];
61
- } else if (event.event === "session_ended") {
65
+ ]
66
+ } else if (event.event === 'session_ended') {
62
67
  return [
63
68
  {
64
- role: "system",
69
+ role: 'system',
65
70
  html: `<div>
66
71
  session ended
67
72
  <div style="margin-top: 8px;">
@@ -76,18 +81,17 @@ export const Chat = ({ sx, events, ...props }: Props) => {
76
81
  </button>
77
82
  </div>
78
83
  </div>`,
79
- }
84
+ },
80
85
  ]
81
- }
82
- else {
86
+ } else {
83
87
  return [
84
88
  {
85
89
  role: event.event,
86
- text: event.text || "",
90
+ text: event.text || '',
87
91
  },
88
- ];
92
+ ]
89
93
  }
90
- });
94
+ })
91
95
 
92
96
  return (
93
97
  <Flex sx={containerSx} {...props}>
@@ -96,15 +100,15 @@ export const Chat = ({ sx, events, ...props }: Props) => {
96
100
  textInput={{
97
101
  disabled: true,
98
102
  }}
99
- inputAreaStyle={{ display: "none" }}
103
+ inputAreaStyle={{ display: 'none' }}
100
104
  messageStyles={{
101
105
  html: {
102
- shared: { bubble: { backgroundColor: "unset", padding: "0px" } },
106
+ shared: { bubble: { backgroundColor: 'unset', padding: '0px' } },
103
107
  },
104
108
  }}
105
109
  style={{
106
- borderRadius: "10px",
107
- border: "none",
110
+ borderRadius: '10px',
111
+ border: 'none',
108
112
  width: columnWidth,
109
113
  height: maxHeight,
110
114
  }}
@@ -112,5 +116,5 @@ export const Chat = ({ sx, events, ...props }: Props) => {
112
116
  demo={true}
113
117
  />
114
118
  </Flex>
115
- );
116
- };
119
+ )
120
+ }
@@ -1,23 +1,23 @@
1
- import { Box, Button, Flex, Heading, Text } from "@chakra-ui/react";
2
- import mermaid from "mermaid";
3
- import { useOurTheme } from "../theme";
4
- import { formatFlow } from "../helpers/formatters";
5
- import { restartConversation } from "../helpers/conversation";
6
- import { useEffect, useRef, useState } from "react";
7
- import { Flow, Slot, Stack } from "../types";
8
- import { NoActiveFlow } from "./NoActiveFlow";
1
+ import { Box, Button, Flex, Heading, Text } from '@chakra-ui/react'
2
+ import mermaid from 'mermaid'
3
+ import { useOurTheme } from '../theme'
4
+ import { formatFlow } from '../helpers/formatters'
5
+ import { restartConversation } from '../helpers/conversation'
6
+ import { useEffect, useRef, useState } from 'react'
7
+ import { Flow, Slot, Stack } from '../types'
8
+ import { NoActiveFlow } from './NoActiveFlow'
9
9
 
10
10
  interface Props {
11
- stackFrame?: Stack;
12
- flows: Flow[];
13
- slots: Slot[];
14
- stepTrail?: string[];
11
+ stackFrame?: Stack
12
+ flows: Flow[]
13
+ slots: Slot[]
14
+ stepTrail?: string[]
15
15
  }
16
16
 
17
17
  export const DiagramFlow = ({ stackFrame, stepTrail, flows, slots }: Props) => {
18
- const { rasaSpace } = useOurTheme();
19
- const mermaidRef = useRef<HTMLPreElement>(null);
20
- const [text, setText] = useState<string>("");
18
+ const { rasaSpace } = useOurTheme()
19
+ const mermaidRef = useRef<HTMLPreElement>(null)
20
+ const [text, setText] = useState<string>('')
21
21
  const flow = flows.find(({ id }) => id === stackFrame?.flow_id)
22
22
 
23
23
  const config = {
@@ -26,47 +26,47 @@ export const DiagramFlow = ({ stackFrame, stepTrail, flows, slots }: Props) => {
26
26
  flowchart: {
27
27
  useMaxWidth: false,
28
28
  },
29
- };
29
+ }
30
30
 
31
31
  useEffect(() => {
32
- mermaid.mermaidAPI.initialize(config);
33
- }, []);
32
+ mermaid.mermaidAPI.initialize(config)
33
+ }, [])
34
34
 
35
35
  useEffect(() => {
36
- if (!text) return;
36
+ if (!text) return
37
37
  // mermaid needs to be reloaded every time the text changes but a data-processed
38
38
  // attribute prevents it. We need to remove it each time `text` changes
39
- mermaidRef.current?.removeAttribute("data-processed");
40
- mermaid.contentLoaded();
39
+ mermaidRef.current?.removeAttribute('data-processed')
40
+ mermaid.contentLoaded()
41
41
 
42
42
  setTimeout(() => {
43
- const active = document.querySelectorAll(".active")[0];
43
+ const active = document.querySelectorAll('.active')[0]
44
44
  if (active) {
45
- active.scrollIntoView({ behavior: "smooth"});
45
+ active.scrollIntoView({ behavior: 'smooth' })
46
46
  }
47
- }, 0);
48
- }, [text]);
47
+ }, 0)
48
+ }, [text])
49
49
 
50
50
  useEffect(() => {
51
- setText(formatFlow(slots, stackFrame, flow, stepTrail));
52
- }, [text, flow, slots, stackFrame]);
51
+ setText(formatFlow(slots, stackFrame, flow, stepTrail))
52
+ }, [text, flow, slots, stackFrame])
53
53
 
54
54
  const handleRestartConversation = () => {
55
- restartConversation();
56
- };
55
+ restartConversation()
56
+ }
57
57
 
58
58
  const scrollSx = {
59
- height: "100%",
60
- overflow: "auto",
61
- width: "100%",
62
- textAlign: "center",
63
- flexDirection: "column",
64
- };
59
+ height: '100%',
60
+ overflow: 'auto',
61
+ width: '100%',
62
+ textAlign: 'center',
63
+ flexDirection: 'column',
64
+ }
65
65
  const preSx = {
66
66
  svg: {
67
- margin: "0 auto",
67
+ margin: '0 auto',
68
68
  },
69
- };
69
+ }
70
70
 
71
71
  return (
72
72
  <Flex direction="column" height="100%">
@@ -74,7 +74,7 @@ export const DiagramFlow = ({ stackFrame, stepTrail, flows, slots }: Props) => {
74
74
  Flow
75
75
  {flow ? (
76
76
  <Text as="span" fontWeight="normal">
77
- {":"} {flow.id}
77
+ {':'} {flow.id}
78
78
  </Text>
79
79
  ) : null}
80
80
  </Heading>
@@ -101,5 +101,5 @@ export const DiagramFlow = ({ stackFrame, stepTrail, flows, slots }: Props) => {
101
101
  </Button>
102
102
  </Flex>
103
103
  </Flex>
104
- );
105
- };
104
+ )
105
+ }