@gooddata/sdk-ui-gen-ai 10.12.0-alpha.10

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 (197) hide show
  1. package/LICENSE +7 -0
  2. package/NOTICE +69224 -0
  3. package/README.md +27 -0
  4. package/esm/components/EmptyState.d.ts +3 -0
  5. package/esm/components/EmptyState.d.ts.map +1 -0
  6. package/esm/components/EmptyState.js +40 -0
  7. package/esm/components/EmptyState.js.map +1 -0
  8. package/esm/components/GenAIChat.d.ts +27 -0
  9. package/esm/components/GenAIChat.d.ts.map +1 -0
  10. package/esm/components/GenAIChat.js +17 -0
  11. package/esm/components/GenAIChat.js.map +1 -0
  12. package/esm/components/GenAIChatDialog.d.ts +12 -0
  13. package/esm/components/GenAIChatDialog.d.ts.map +1 -0
  14. package/esm/components/GenAIChatDialog.js +15 -0
  15. package/esm/components/GenAIChatDialog.js.map +1 -0
  16. package/esm/components/GenAIChatOverlay.d.ts +6 -0
  17. package/esm/components/GenAIChatOverlay.d.ts.map +1 -0
  18. package/esm/components/GenAIChatOverlay.js +30 -0
  19. package/esm/components/GenAIChatOverlay.js.map +1 -0
  20. package/esm/components/GenAIChatWrapper.d.ts +7 -0
  21. package/esm/components/GenAIChatWrapper.d.ts.map +1 -0
  22. package/esm/components/GenAIChatWrapper.js +16 -0
  23. package/esm/components/GenAIChatWrapper.js.map +1 -0
  24. package/esm/components/HeaderIcon.d.ts +12 -0
  25. package/esm/components/HeaderIcon.d.ts.map +1 -0
  26. package/esm/components/HeaderIcon.js +11 -0
  27. package/esm/components/HeaderIcon.js.map +1 -0
  28. package/esm/components/Input.d.ts +5 -0
  29. package/esm/components/Input.d.ts.map +1 -0
  30. package/esm/components/Input.js +50 -0
  31. package/esm/components/Input.js.map +1 -0
  32. package/esm/components/Messages.d.ts +3 -0
  33. package/esm/components/Messages.d.ts.map +1 -0
  34. package/esm/components/Messages.js +49 -0
  35. package/esm/components/Messages.js.map +1 -0
  36. package/esm/components/SendIcon.d.ts +7 -0
  37. package/esm/components/SendIcon.d.ts.map +1 -0
  38. package/esm/components/SendIcon.js +10 -0
  39. package/esm/components/SendIcon.js.map +1 -0
  40. package/esm/components/messages/AgentIcon.d.ts +8 -0
  41. package/esm/components/messages/AgentIcon.d.ts.map +1 -0
  42. package/esm/components/messages/AgentIcon.js +32 -0
  43. package/esm/components/messages/AgentIcon.js.map +1 -0
  44. package/esm/components/messages/AgentState.d.ts +3 -0
  45. package/esm/components/messages/AgentState.d.ts.map +1 -0
  46. package/esm/components/messages/AgentState.js +10 -0
  47. package/esm/components/messages/AgentState.js.map +1 -0
  48. package/esm/components/messages/AssistantErrorMessage.d.ts +8 -0
  49. package/esm/components/messages/AssistantErrorMessage.d.ts.map +1 -0
  50. package/esm/components/messages/AssistantErrorMessage.js +10 -0
  51. package/esm/components/messages/AssistantErrorMessage.js.map +1 -0
  52. package/esm/components/messages/AssistantSearchCreateMessage.d.ts +8 -0
  53. package/esm/components/messages/AssistantSearchCreateMessage.d.ts.map +1 -0
  54. package/esm/components/messages/AssistantSearchCreateMessage.js +14 -0
  55. package/esm/components/messages/AssistantSearchCreateMessage.js.map +1 -0
  56. package/esm/components/messages/AssistantTextMessage.d.ts +8 -0
  57. package/esm/components/messages/AssistantTextMessage.d.ts.map +1 -0
  58. package/esm/components/messages/AssistantTextMessage.js +10 -0
  59. package/esm/components/messages/AssistantTextMessage.js.map +1 -0
  60. package/esm/components/messages/SystemMessage.d.ts +8 -0
  61. package/esm/components/messages/SystemMessage.d.ts.map +1 -0
  62. package/esm/components/messages/SystemMessage.js +7 -0
  63. package/esm/components/messages/SystemMessage.js.map +1 -0
  64. package/esm/components/messages/UserMessage.d.ts +8 -0
  65. package/esm/components/messages/UserMessage.d.ts.map +1 -0
  66. package/esm/components/messages/UserMessage.js +8 -0
  67. package/esm/components/messages/UserMessage.js.map +1 -0
  68. package/esm/components/messages/Visualization.d.ts +8 -0
  69. package/esm/components/messages/Visualization.d.ts.map +1 -0
  70. package/esm/components/messages/Visualization.js +12 -0
  71. package/esm/components/messages/Visualization.js.map +1 -0
  72. package/esm/components/messages/index.d.ts +4 -0
  73. package/esm/components/messages/index.d.ts.map +1 -0
  74. package/esm/components/messages/index.js +5 -0
  75. package/esm/components/messages/index.js.map +1 -0
  76. package/esm/components/messages/useExecution.d.ts +3 -0
  77. package/esm/components/messages/useExecution.d.ts.map +1 -0
  78. package/esm/components/messages/useExecution.js +29 -0
  79. package/esm/components/messages/useExecution.js.map +1 -0
  80. package/esm/hooks/useGenAIStore.d.ts +25 -0
  81. package/esm/hooks/useGenAIStore.d.ts.map +1 -0
  82. package/esm/hooks/useGenAIStore.js +15 -0
  83. package/esm/hooks/useGenAIStore.js.map +1 -0
  84. package/esm/index.d.ts +9 -0
  85. package/esm/index.d.ts.map +1 -0
  86. package/esm/index.js +3 -0
  87. package/esm/index.js.map +1 -0
  88. package/esm/internal.d.ts +3 -0
  89. package/esm/internal.d.ts.map +1 -0
  90. package/esm/internal.js +3 -0
  91. package/esm/internal.js.map +1 -0
  92. package/esm/localization/IntlWrapper.d.ts +13 -0
  93. package/esm/localization/IntlWrapper.d.ts.map +1 -0
  94. package/esm/localization/IntlWrapper.js +13 -0
  95. package/esm/localization/IntlWrapper.js.map +1 -0
  96. package/esm/localization/bundles/de-DE.json +1 -0
  97. package/esm/localization/bundles/en-AU.json +1 -0
  98. package/esm/localization/bundles/en-GB.json +1 -0
  99. package/esm/localization/bundles/en-US.json +1 -0
  100. package/esm/localization/bundles/es-419.json +1 -0
  101. package/esm/localization/bundles/es-ES.json +1 -0
  102. package/esm/localization/bundles/fi-FI.json +1 -0
  103. package/esm/localization/bundles/fr-CA.json +1 -0
  104. package/esm/localization/bundles/fr-FR.json +1 -0
  105. package/esm/localization/bundles/it-IT.json +1 -0
  106. package/esm/localization/bundles/ja-JP.json +1 -0
  107. package/esm/localization/bundles/nl-NL.json +1 -0
  108. package/esm/localization/bundles/pt-BR.json +1 -0
  109. package/esm/localization/bundles/pt-PT.json +1 -0
  110. package/esm/localization/bundles/ru-RU.json +1 -0
  111. package/esm/localization/bundles/zh-HK.json +1 -0
  112. package/esm/localization/bundles/zh-Hans.json +1 -0
  113. package/esm/localization/bundles/zh-Hant.json +1 -0
  114. package/esm/localization/translations.d.ts +4 -0
  115. package/esm/localization/translations.d.ts.map +1 -0
  116. package/esm/localization/translations.js +41 -0
  117. package/esm/localization/translations.js.map +1 -0
  118. package/esm/model.d.ts +73 -0
  119. package/esm/model.d.ts.map +1 -0
  120. package/esm/model.js +43 -0
  121. package/esm/model.js.map +1 -0
  122. package/esm/sdk-ui-gen-ai.d.ts +100 -0
  123. package/esm/store/agent/agentSelectors.d.ts +3 -0
  124. package/esm/store/agent/agentSelectors.d.ts.map +1 -0
  125. package/esm/store/agent/agentSelectors.js +6 -0
  126. package/esm/store/agent/agentSelectors.js.map +1 -0
  127. package/esm/store/agent/agentSlice.d.ts +8 -0
  128. package/esm/store/agent/agentSlice.d.ts.map +1 -0
  129. package/esm/store/agent/agentSlice.js +21 -0
  130. package/esm/store/agent/agentSlice.js.map +1 -0
  131. package/esm/store/index.d.ts +7 -0
  132. package/esm/store/index.d.ts.map +1 -0
  133. package/esm/store/index.js +7 -0
  134. package/esm/store/index.js.map +1 -0
  135. package/esm/store/messages/messagesSelectors.d.ts +8 -0
  136. package/esm/store/messages/messagesSelectors.d.ts.map +1 -0
  137. package/esm/store/messages/messagesSelectors.js +17 -0
  138. package/esm/store/messages/messagesSelectors.js.map +1 -0
  139. package/esm/store/messages/messagesSlice.d.ts +12 -0
  140. package/esm/store/messages/messagesSlice.d.ts.map +1 -0
  141. package/esm/store/messages/messagesSlice.js +36 -0
  142. package/esm/store/messages/messagesSlice.js.map +1 -0
  143. package/esm/store/sideEffects/converters/evalToMessage.d.ts +7 -0
  144. package/esm/store/sideEffects/converters/evalToMessage.d.ts.map +1 -0
  145. package/esm/store/sideEffects/converters/evalToMessage.js +14 -0
  146. package/esm/store/sideEffects/converters/evalToMessage.js.map +1 -0
  147. package/esm/store/sideEffects/converters/messagesToHistory.d.ts +4 -0
  148. package/esm/store/sideEffects/converters/messagesToHistory.d.ts.map +1 -0
  149. package/esm/store/sideEffects/converters/messagesToHistory.js +71 -0
  150. package/esm/store/sideEffects/converters/messagesToHistory.js.map +1 -0
  151. package/esm/store/sideEffects/index.d.ts +6 -0
  152. package/esm/store/sideEffects/index.d.ts.map +1 -0
  153. package/esm/store/sideEffects/index.js +15 -0
  154. package/esm/store/sideEffects/index.js.map +1 -0
  155. package/esm/store/sideEffects/onNewMessage.d.ts +9 -0
  156. package/esm/store/sideEffects/onNewMessage.d.ts.map +1 -0
  157. package/esm/store/sideEffects/onNewMessage.js +71 -0
  158. package/esm/store/sideEffects/onNewMessage.js.map +1 -0
  159. package/esm/store/sideEffects/onVerboseStore.d.ts +6 -0
  160. package/esm/store/sideEffects/onVerboseStore.d.ts.map +1 -0
  161. package/esm/store/sideEffects/onVerboseStore.js +18 -0
  162. package/esm/store/sideEffects/onVerboseStore.js.map +1 -0
  163. package/esm/store/sideEffects/utils.d.ts +2 -0
  164. package/esm/store/sideEffects/utils.d.ts.map +1 -0
  165. package/esm/store/sideEffects/utils.js +12 -0
  166. package/esm/store/sideEffects/utils.js.map +1 -0
  167. package/esm/store/store.d.ts +26 -0
  168. package/esm/store/store.d.ts.map +1 -0
  169. package/esm/store/store.js +36 -0
  170. package/esm/store/store.js.map +1 -0
  171. package/esm/store/types.d.ts +7 -0
  172. package/esm/store/types.d.ts.map +1 -0
  173. package/esm/store/types.js +4 -0
  174. package/esm/store/types.js.map +1 -0
  175. package/esm/tsdoc-metadata.json +11 -0
  176. package/package.json +127 -0
  177. package/styles/css/agentIcon.css +92 -0
  178. package/styles/css/agentIcon.css.map +1 -0
  179. package/styles/css/agentState.css +29 -0
  180. package/styles/css/agentState.css.map +1 -0
  181. package/styles/css/input.css +152 -0
  182. package/styles/css/input.css.map +1 -0
  183. package/styles/css/main.css +456 -0
  184. package/styles/css/main.css.map +1 -0
  185. package/styles/css/messages.css +94 -0
  186. package/styles/css/messages.css.map +1 -0
  187. package/styles/css/variables.css +3 -0
  188. package/styles/css/variables.css.map +1 -0
  189. package/styles/css/window.css +100 -0
  190. package/styles/css/window.css.map +1 -0
  191. package/styles/scss/agentIcon.scss +122 -0
  192. package/styles/scss/agentState.scss +31 -0
  193. package/styles/scss/input.scss +107 -0
  194. package/styles/scss/main.scss +26 -0
  195. package/styles/scss/messages.scss +111 -0
  196. package/styles/scss/variables.scss +4 -0
  197. package/styles/scss/window.scss +122 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * This package provides React components for GoodData's GenAI features.
3
+ * @packageDocumentation
4
+ * @beta
5
+ */
6
+
7
+ import { IAnalyticalBackend } from '@gooddata/sdk-backend-spi';
8
+ import { IGenAIChatEvaluation } from '@gooddata/sdk-model';
9
+ import { default as React_2 } from 'react';
10
+
11
+ /**
12
+ * @alpha
13
+ */
14
+ export declare type AssistantErrorMessage = BaseMessage & {
15
+ role: "assistant";
16
+ type: "error";
17
+ content: string;
18
+ };
19
+
20
+ /**
21
+ * @alpha
22
+ */
23
+ export declare type AssistantMessage = AssistantTextMessage | AssistantErrorMessage | AssistantSearchCreateMessage;
24
+
25
+ /**
26
+ * @alpha
27
+ */
28
+ export declare type AssistantSearchCreateMessage = BaseMessage & {
29
+ role: "assistant";
30
+ type: "search-create";
31
+ content: IGenAIChatEvaluation;
32
+ };
33
+
34
+ /**
35
+ * @alpha
36
+ */
37
+ export declare type AssistantTextMessage = BaseMessage & {
38
+ role: "assistant";
39
+ type: "text";
40
+ content: string;
41
+ };
42
+
43
+ /**
44
+ * @alpha
45
+ */
46
+ export declare type BaseMessage = {
47
+ id: string;
48
+ created: number;
49
+ };
50
+
51
+ /**
52
+ * UI component that renders the Gen AI chat.
53
+ * @alpha
54
+ */
55
+ export declare const GenAIChat: React_2.FC<GenAIChatProps>;
56
+
57
+ /**
58
+ * Properties for the GenAIChat component.
59
+ * @alpha
60
+ */
61
+ export declare interface GenAIChatProps {
62
+ /**
63
+ * Analytical backend to use for server communication.
64
+ */
65
+ backend?: IAnalyticalBackend;
66
+ /**
67
+ * The workspace ID the user is working with.
68
+ */
69
+ workspace?: string;
70
+ /**
71
+ * A conversation history in case you're resuming the chat.
72
+ */
73
+ history?: Message[];
74
+ }
75
+
76
+ /**
77
+ * All messages that can be stored in history.
78
+ * @alpha
79
+ */
80
+ export declare type Message = UserMessage | SystemMessage | AssistantMessage;
81
+
82
+ /**
83
+ * @alpha
84
+ */
85
+ export declare type SystemMessage = BaseMessage & {
86
+ role: "system";
87
+ type: "text";
88
+ content: string;
89
+ };
90
+
91
+ /**
92
+ * @alpha
93
+ */
94
+ export declare type UserMessage = BaseMessage & {
95
+ role: "user";
96
+ type: "text";
97
+ content: string;
98
+ };
99
+
100
+ export { }
@@ -0,0 +1,3 @@
1
+ import { RootState } from "../types.js";
2
+ export declare const agentLoadingSelector: (state: RootState) => boolean;
3
+ //# sourceMappingURL=agentSelectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentSelectors.d.ts","sourceRoot":"","sources":["../../../src/store/agent/agentSelectors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGxD,CAAC"}
@@ -0,0 +1,6 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { createSelector } from "@reduxjs/toolkit";
3
+ import { agentSliceName } from "./agentSlice.js";
4
+ const agentSliceSelector = (state) => state[agentSliceName];
5
+ export const agentLoadingSelector = createSelector(agentSliceSelector, (state) => state.busy);
6
+ //# sourceMappingURL=agentSelectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentSelectors.js","sourceRoot":"","sources":["../../../src/store/agent/agentSelectors.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,kBAAkB,GAAG,CAAC,KAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,oBAAoB,GAAkC,cAAc,CAC7E,kBAAkB,EAClB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ type AgentSliceState = {
2
+ busy: boolean;
3
+ };
4
+ export declare const agentSliceName = "agent";
5
+ export declare const agentSliceReducer: import("@reduxjs/toolkit").Reducer<AgentSliceState>;
6
+ export declare const setAgentBusyAction: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"agent/setAgentBusyAction">, setAgentIdleAction: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"agent/setAgentIdleAction">;
7
+ export {};
8
+ //# sourceMappingURL=agentSlice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentSlice.d.ts","sourceRoot":"","sources":["../../../src/store/agent/agentSlice.ts"],"names":[],"mappings":"AAIA,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,cAAc,UAAU,CAAC;AAmBtC,eAAO,MAAM,iBAAiB,qDAAqB,CAAC;AACpD,eAAO,MAAQ,kBAAkB,sFAAE,kBAAkB,oFAAuB,CAAC"}
@@ -0,0 +1,21 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { createSlice } from "@reduxjs/toolkit";
3
+ export const agentSliceName = "agent";
4
+ const initialState = {
5
+ busy: false,
6
+ };
7
+ const agentSlice = createSlice({
8
+ name: agentSliceName,
9
+ initialState,
10
+ reducers: {
11
+ setAgentBusyAction: (state) => {
12
+ state.busy = true;
13
+ },
14
+ setAgentIdleAction: (state) => {
15
+ state.busy = false;
16
+ },
17
+ },
18
+ });
19
+ export const agentSliceReducer = agentSlice.reducer;
20
+ export const { setAgentBusyAction, setAgentIdleAction } = agentSlice.actions;
21
+ //# sourceMappingURL=agentSlice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentSlice.js","sourceRoot":"","sources":["../../../src/store/agent/agentSlice.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,YAAY,GAAoB;IAClC,IAAI,EAAE,KAAK;CACd,CAAC;AAEF,MAAM,UAAU,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,cAAc;IACpB,YAAY;IACZ,QAAQ,EAAE;QACN,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACvB,CAAC;KACJ;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC;AACpD,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type { RootState } from "./types.js";
2
+ export { getStore } from "./store.js";
3
+ export { clearMessagesAction, toggleVerboseAction, setMessages, newMessageAction, } from "./messages/messagesSlice.js";
4
+ export { allMessagesSelector, isVerboseSelector, visibleMessagesSelector, lastMessageSelector, hasMessagesSelector, } from "./messages/messagesSelectors.js";
5
+ export { setAgentBusyAction, setAgentIdleAction } from "./agent/agentSlice.js";
6
+ export { agentLoadingSelector } from "./agent/agentSelectors.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,GACnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACH,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,7 @@
1
+ // (C) 2024 GoodData Corporation
2
+ export { getStore } from "./store.js";
3
+ export { clearMessagesAction, toggleVerboseAction, setMessages, newMessageAction, } from "./messages/messagesSlice.js";
4
+ export { allMessagesSelector, isVerboseSelector, visibleMessagesSelector, lastMessageSelector, hasMessagesSelector, } from "./messages/messagesSelectors.js";
5
+ export { setAgentBusyAction, setAgentIdleAction } from "./agent/agentSlice.js";
6
+ export { agentLoadingSelector } from "./agent/agentSelectors.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,GACnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACH,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { RootState } from "../types.js";
2
+ import { Message, VisibleMessage } from "../../model.js";
3
+ export declare const allMessagesSelector: (state: RootState) => Message[];
4
+ export declare const isVerboseSelector: (state: RootState) => boolean;
5
+ export declare const visibleMessagesSelector: (state: RootState) => VisibleMessage[];
6
+ export declare const lastMessageSelector: (state: RootState) => Message | undefined;
7
+ export declare const hasMessagesSelector: (state: RootState) => boolean;
8
+ //# sourceMappingURL=messagesSelectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messagesSelectors.d.ts","sourceRoot":"","sources":["../../../src/store/messages/messagesSelectors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQzD,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,EAI9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGrD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,cAAc,EAUzE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,GAAG,SAIjE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGvD,CAAC"}
@@ -0,0 +1,17 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { createSelector } from "@reduxjs/toolkit";
3
+ import { messagesSliceName } from "./messagesSlice.js";
4
+ const messagesSliceSelector = (state) => state[messagesSliceName];
5
+ const messagesOrderSelector = createSelector(messagesSliceSelector, (state) => state.messageOrder);
6
+ const messagesSelector = createSelector(messagesSliceSelector, (state) => state.messages);
7
+ export const allMessagesSelector = createSelector(messagesOrderSelector, messagesSelector, (order, messages) => order.map((id) => messages[id]));
8
+ export const isVerboseSelector = createSelector(messagesSliceSelector, (state) => state.verbose);
9
+ export const visibleMessagesSelector = createSelector(allMessagesSelector, isVerboseSelector, (messages, verbose) => {
10
+ if (verbose) {
11
+ return messages;
12
+ }
13
+ return messages.filter((message) => message.role !== "system");
14
+ });
15
+ export const lastMessageSelector = createSelector(messagesOrderSelector, messagesSelector, (order, messages) => messages[order[order.length - 1]]);
16
+ export const hasMessagesSelector = createSelector(messagesOrderSelector, (order) => order.length > 0);
17
+ //# sourceMappingURL=messagesSelectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messagesSelectors.js","sourceRoot":"","sources":["../../../src/store/messages/messagesSelectors.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,qBAAqB,GAAG,CAAC,KAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAE7E,MAAM,qBAAqB,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAEnG,MAAM,gBAAgB,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,mBAAmB,GAAoC,cAAc,CAC9E,qBAAqB,EACrB,gBAAgB,EAChB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAkC,cAAc,CAC1E,qBAAqB,EACrB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAA2C,cAAc,CACzF,mBAAmB,EACnB,iBAAiB,EACjB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;IAClB,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AACnE,CAAC,CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAA8C,cAAc,CACxF,qBAAqB,EACrB,gBAAgB,EAChB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACzD,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAkC,cAAc,CAC5E,qBAAqB,EACrB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAC9B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Message } from "../../model.js";
2
+ type MessagesSliceState = {
3
+ messageOrder: string[];
4
+ messages: Record<string, Message>;
5
+ verbose: boolean;
6
+ };
7
+ export declare const LS_VERBOSE_KEY = "gd-gen-ai-verbose";
8
+ export declare const messagesSliceName = "messages";
9
+ export declare const messagesSliceReducer: import("@reduxjs/toolkit").Reducer<MessagesSliceState>;
10
+ export declare const newMessageAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<Message, "messages/newMessageAction">, clearMessagesAction: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"messages/clearMessagesAction">, setMessages: import("@reduxjs/toolkit").ActionCreatorWithPayload<Message[], "messages/setMessages">, toggleVerboseAction: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"messages/toggleVerboseAction">;
11
+ export {};
12
+ //# sourceMappingURL=messagesSlice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messagesSlice.d.ts","sourceRoot":"","sources":["../../../src/store/messages/messagesSlice.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,KAAK,kBAAkB,GAAG;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAClD,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAiC5C,eAAO,MAAM,oBAAoB,wDAAwB,CAAC;AAC1D,eAAO,MAAQ,gBAAgB,6FAAE,mBAAmB,0FAAE,WAAW,0FAAE,mBAAmB,wFAC7D,CAAC"}
@@ -0,0 +1,36 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { createSlice } from "@reduxjs/toolkit";
3
+ export const LS_VERBOSE_KEY = "gd-gen-ai-verbose";
4
+ export const messagesSliceName = "messages";
5
+ const initialState = {
6
+ messageOrder: [],
7
+ messages: {},
8
+ verbose: window.localStorage.getItem(LS_VERBOSE_KEY) === "true",
9
+ };
10
+ const messagesSlice = createSlice({
11
+ name: messagesSliceName,
12
+ initialState,
13
+ reducers: {
14
+ newMessageAction: (state, action) => {
15
+ state.messages[action.payload.id] = action.payload;
16
+ state.messageOrder.push(action.payload.id);
17
+ },
18
+ clearMessagesAction: (state) => {
19
+ state.messageOrder = [];
20
+ state.messages = {};
21
+ },
22
+ setMessages: (state, action) => {
23
+ state.messages = action.payload.reduce((acc, message) => {
24
+ acc[message.id] = message;
25
+ return acc;
26
+ }, {});
27
+ state.messageOrder = action.payload.map((message) => message.id);
28
+ },
29
+ toggleVerboseAction: (state) => {
30
+ state.verbose = !state.verbose;
31
+ },
32
+ },
33
+ });
34
+ export const messagesSliceReducer = messagesSlice.reducer;
35
+ export const { newMessageAction, clearMessagesAction, setMessages, toggleVerboseAction } = messagesSlice.actions;
36
+ //# sourceMappingURL=messagesSlice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messagesSlice.js","sourceRoot":"","sources":["../../../src/store/messages/messagesSlice.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAS9D,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,MAAM,YAAY,GAAuB;IACrC,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,MAAM;CAClE,CAAC;AAEF,MAAM,aAAa,GAAG,WAAW,CAAC;IAC9B,IAAI,EAAE,iBAAiB;IACvB,YAAY;IACZ,QAAQ,EAAE;QACN,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAA8B,EAAE,EAAE;YACxD,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YACnD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;YACxB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAgC,EAAE,EAAE;YACrD,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;gBACpD,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;gBAC1B,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAoC,CAAC,CAAC;YACzC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;QACnC,CAAC;KACJ;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC,OAAO,CAAC;AAC1D,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,EAAE,GACpF,aAAa,CAAC,OAAO,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { IGenAIChatEvaluation } from "@gooddata/sdk-model";
2
+ import { AssistantMessage } from "../../../model.js";
3
+ /**
4
+ * Converts evaluation result to a message.
5
+ */
6
+ export declare const evalToMessage: (evalResult: IGenAIChatEvaluation) => AssistantMessage;
7
+ //# sourceMappingURL=evalToMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evalToMessage.d.ts","sourceRoot":"","sources":["../../../../src/store/sideEffects/converters/evalToMessage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACH,gBAAgB,EAGnB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,eAAO,MAAM,aAAa,eAAgB,oBAAoB,KAAG,gBAShE,CAAC"}
@@ -0,0 +1,14 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { makeAssistantErrorMessage, makeAssistantSearchCreateMessage, } from "../../../model.js";
3
+ /**
4
+ * Converts evaluation result to a message.
5
+ */
6
+ export const evalToMessage = (evalResult) => {
7
+ if (evalResult.invalidQuestion) {
8
+ // Convert to the error message
9
+ const message = evalResult.createdVisualizations?.reasoning || "Invalid question. Try again.";
10
+ return makeAssistantErrorMessage(message);
11
+ }
12
+ return makeAssistantSearchCreateMessage(evalResult);
13
+ };
14
+ //# sourceMappingURL=evalToMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evalToMessage.js","sourceRoot":"","sources":["../../../../src/store/sideEffects/converters/evalToMessage.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC,OAAO,EAEH,yBAAyB,EACzB,gCAAgC,GACnC,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAgC,EAAoB,EAAE;IAChF,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QAC7B,+BAA+B;QAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,qBAAqB,EAAE,SAAS,IAAI,8BAA8B,CAAC;QAE9F,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,gCAAgC,CAAC,UAAU,CAAC,CAAC;AACxD,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { IGenAIChatInteraction } from "@gooddata/sdk-model";
2
+ import { Message } from "../../../model.js";
3
+ export declare const messagesToHistory: (messages: Message[]) => IGenAIChatInteraction[];
4
+ //# sourceMappingURL=messagesToHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messagesToHistory.d.ts","sourceRoot":"","sources":["../../../../src/store/sideEffects/converters/messagesToHistory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAMH,OAAO,EACV,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,iBAAiB,aAAc,OAAO,EAAE,KAAG,qBAAqB,EAsE5E,CAAC"}
@@ -0,0 +1,71 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { isAssistantErrorMessage, isAssistantSearchCreateMessage, isAssistantTextMessage, isSystemMessage, isUserMessage, } from "../../../model.js";
3
+ export const messagesToHistory = (messages) => {
4
+ return messages.map((message) => {
5
+ if (isUserMessage(message)) {
6
+ return {
7
+ role: "USER",
8
+ content: [
9
+ {
10
+ text: message.content,
11
+ includeToChatContext: true,
12
+ userFeedback: "NONE",
13
+ },
14
+ ],
15
+ };
16
+ }
17
+ if (isSystemMessage(message)) {
18
+ throw new Error("TODO: implement system message conversion");
19
+ }
20
+ if (isAssistantTextMessage(message)) {
21
+ return {
22
+ role: "AI",
23
+ content: [
24
+ {
25
+ text: message.content,
26
+ includeToChatContext: true,
27
+ userFeedback: "NONE",
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ if (isAssistantErrorMessage(message)) {
33
+ return {
34
+ role: "AI",
35
+ content: [
36
+ {
37
+ text: `ERROR: ${message.content}`,
38
+ includeToChatContext: true,
39
+ userFeedback: "NONE",
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ if (isAssistantSearchCreateMessage(message)) {
45
+ const firstVis = message.content.createdVisualizations?.objects?.[0];
46
+ // Chat hallucinates when you provide both createdVisualizations and foundObjects
47
+ // So, deliver the first created vis and if none - deliver found objects
48
+ return {
49
+ role: "AI",
50
+ content: firstVis
51
+ ? [
52
+ {
53
+ createdVisualization: firstVis,
54
+ includeToChatContext: true,
55
+ userFeedback: "NONE",
56
+ },
57
+ ]
58
+ : (message.content.foundObjects ?? []).map((foundObject) => ({
59
+ foundObject,
60
+ includeToChatContext: true,
61
+ userFeedback: "NONE",
62
+ })),
63
+ };
64
+ }
65
+ return assertNever(message);
66
+ });
67
+ };
68
+ const assertNever = (value) => {
69
+ throw new Error(`Unexpected object: ${value}`);
70
+ };
71
+ //# sourceMappingURL=messagesToHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messagesToHistory.js","sourceRoot":"","sources":["../../../../src/store/sideEffects/converters/messagesToHistory.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC,OAAO,EACH,uBAAuB,EACvB,8BAA8B,EAC9B,sBAAsB,EACtB,eAAe,EACf,aAAa,GAEhB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAmB,EAA2B,EAAE;IAC9E,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5B,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO;gBACH,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,OAAO,CAAC,OAAO;wBACrB,oBAAoB,EAAE,IAAI;wBAC1B,YAAY,EAAE,MAAe;qBAChC;iBACJ;aACJ,CAAC;QACN,CAAC;QAED,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO;gBACH,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,OAAO,CAAC,OAAO;wBACrB,oBAAoB,EAAE,IAAI;wBAC1B,YAAY,EAAE,MAAe;qBAChC;iBACJ;aACJ,CAAC;QACN,CAAC;QAED,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO;gBACH,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,UAAU,OAAO,CAAC,OAAO,EAAE;wBACjC,oBAAoB,EAAE,IAAI;wBAC1B,YAAY,EAAE,MAAe;qBAChC;iBACJ;aACJ,CAAC;QACN,CAAC;QAED,IAAI,8BAA8B,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAErE,iFAAiF;YACjF,wEAAwE;YACxE,OAAO;gBACH,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;oBACb,CAAC,CAAC;wBACI;4BACI,oBAAoB,EAAE,QAAQ;4BAC9B,oBAAoB,EAAE,IAAI;4BAC1B,YAAY,EAAE,MAAe;yBAChC;qBACJ;oBACH,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;wBACvD,WAAW;wBACX,oBAAoB,EAAE,IAAI;wBAC1B,YAAY,EAAE,MAAe;qBAChC,CAAC,CAAC;aACZ,CAAC;QACN,CAAC;QAED,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAS,EAAE;IACxC,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * One saga to rule them all.
3
+ * @internal
4
+ */
5
+ export declare function rootSaga(): Generator<import("redux-saga/effects").ForkEffect<never>, void, unknown>;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/index.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAiB,QAAQ,6EAIxB"}
@@ -0,0 +1,15 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { takeEvery } from "redux-saga/effects";
3
+ import { newMessageAction, setMessages, toggleVerboseAction } from "../messages/messagesSlice.js";
4
+ import { onVerboseStore } from "./onVerboseStore.js";
5
+ import { onNewMessage, onHistorySetMessage } from "./onNewMessage.js";
6
+ /**
7
+ * One saga to rule them all.
8
+ * @internal
9
+ */
10
+ export function* rootSaga() {
11
+ yield takeEvery(toggleVerboseAction.type, onVerboseStore);
12
+ yield takeEvery(newMessageAction.type, onNewMessage);
13
+ yield takeEvery(setMessages.type, onHistorySetMessage);
14
+ }
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/store/sideEffects/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEtE;;;GAGG;AACH,MAAM,SAAS,CAAC,CAAC,QAAQ;IACrB,MAAM,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1D,MAAM,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { PayloadAction } from "@reduxjs/toolkit";
2
+ import { Message } from "../../model.js";
3
+ /**
4
+ * Process new messages.
5
+ * @internal
6
+ */
7
+ export declare function onNewMessage({ payload }: PayloadAction<Message>): Generator<import("redux-saga/effects").CallEffect<void>, void, unknown>;
8
+ export declare function onHistorySetMessage({ payload }: PayloadAction<Message[]>): Generator<import("redux-saga/effects").CallEffect<void>, void, unknown>;
9
+ //# sourceMappingURL=onNewMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onNewMessage.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onNewMessage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,OAAO,EAA4C,OAAO,EAAe,MAAM,gBAAgB,CAAC;AAyDhG;;;GAGG;AACH,wBAAiB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,2EAIhE;AAED,wBAAiB,mBAAmB,CAAC,EAAE,OAAO,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,2EAQzE"}
@@ -0,0 +1,71 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { put, call, getContext, cancelled, select } from "redux-saga/effects";
3
+ import { newMessageAction } from "../messages/messagesSlice.js";
4
+ import { setAgentBusyAction, setAgentIdleAction } from "../agent/agentSlice.js";
5
+ import { isUserMessage, makeAssistantErrorMessage } from "../../model.js";
6
+ import { extractError } from "./utils.js";
7
+ import { evalToMessage } from "./converters/evalToMessage.js";
8
+ import { messagesToHistory } from "./converters/messagesToHistory.js";
9
+ import { allMessagesSelector } from "../messages/messagesSelectors.js";
10
+ function* fetchChatThreadEvaluation(preparedChatThread) {
11
+ const controller = new AbortController();
12
+ try {
13
+ const results = yield call(preparedChatThread.query.bind(preparedChatThread), {
14
+ signal: controller.signal,
15
+ });
16
+ return results;
17
+ }
18
+ finally {
19
+ const wasCancelled = yield cancelled();
20
+ if (wasCancelled) {
21
+ controller.abort();
22
+ }
23
+ }
24
+ }
25
+ function* processNewMessage(message) {
26
+ yield put(setAgentBusyAction());
27
+ // Retrieve messages history
28
+ const messages = yield select(allMessagesSelector);
29
+ // Retrieve backend from context
30
+ const backend = yield getContext("backend");
31
+ const workspace = yield getContext("workspace");
32
+ // Prepare the thread for server
33
+ const preparedChatThread = backend
34
+ .workspace(workspace)
35
+ .genAI()
36
+ .getChatThread()
37
+ .withQuestion(message.content)
38
+ .withChatHistory(messagesToHistory(messages.slice(0, -1)));
39
+ let results;
40
+ try {
41
+ results = yield call(fetchChatThreadEvaluation, preparedChatThread);
42
+ }
43
+ catch (e) {
44
+ yield put(newMessageAction(makeAssistantErrorMessage(extractError(e))));
45
+ yield put(setAgentIdleAction());
46
+ return;
47
+ }
48
+ yield put(setAgentIdleAction());
49
+ if (results) {
50
+ yield put(newMessageAction(evalToMessage(results)));
51
+ }
52
+ }
53
+ /**
54
+ * Process new messages.
55
+ * @internal
56
+ */
57
+ export function* onNewMessage({ payload }) {
58
+ if (isUserMessage(payload)) {
59
+ yield call(processNewMessage, payload);
60
+ }
61
+ }
62
+ export function* onHistorySetMessage({ payload }) {
63
+ if (!payload.length)
64
+ return;
65
+ const lastMessage = payload[payload.length - 1];
66
+ // If the last message in the history is from the user, process it as a new message right away
67
+ if (isUserMessage(lastMessage)) {
68
+ yield call(processNewMessage, lastMessage);
69
+ }
70
+ }
71
+ //# sourceMappingURL=onNewMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onNewMessage.js","sourceRoot":"","sources":["../../../src/store/sideEffects/onNewMessage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Ensure the verbosity state is saved in the localstorage of the browser.
3
+ * @internal
4
+ */
5
+ export declare function onVerboseStore(): Generator<import("redux-saga/effects").SelectEffect, void, boolean>;
6
+ //# sourceMappingURL=onVerboseStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onVerboseStore.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onVerboseStore.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAiB,cAAc,wEAQ9B"}
@@ -0,0 +1,18 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import { select } from "redux-saga/effects";
3
+ import { LS_VERBOSE_KEY } from "../messages/messagesSlice.js";
4
+ import { isVerboseSelector } from "../messages/messagesSelectors.js";
5
+ /**
6
+ * Ensure the verbosity state is saved in the localstorage of the browser.
7
+ * @internal
8
+ */
9
+ export function* onVerboseStore() {
10
+ const newVerbose = yield select(isVerboseSelector);
11
+ if (newVerbose) {
12
+ window.localStorage.setItem(LS_VERBOSE_KEY, "true");
13
+ }
14
+ else {
15
+ window.localStorage.removeItem(LS_VERBOSE_KEY);
16
+ }
17
+ }
18
+ //# sourceMappingURL=onVerboseStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onVerboseStore.js","sourceRoot":"","sources":["../../../src/store/sideEffects/onVerboseStore.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE;;;GAGG;AACH,MAAM,SAAS,CAAC,CAAC,cAAc;IAC3B,MAAM,UAAU,GAAY,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE5D,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACJ,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const extractError: (e: unknown) => string;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,MAAO,OAAO,WAWtC,CAAC"}
@@ -0,0 +1,12 @@
1
+ // (C) 2024 GoodData Corporation
2
+ export const extractError = (e) => {
3
+ // Normal error
4
+ if (e instanceof Error) {
5
+ return e.message;
6
+ }
7
+ if (typeof e === "object" && e !== null && "detail" in e) {
8
+ return String(e.detail);
9
+ }
10
+ return String(e);
11
+ };
12
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/store/sideEffects/utils.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAU,EAAE,EAAE;IACvC,eAAe;IACf,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import defaultReduxSaga from "redux-saga";
2
+ import { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
3
+ import { Message } from "../model.js";
4
+ export declare const getStore: (backend: IAnalyticalBackend, workspace: string, initialHistory?: Message[]) => import("@reduxjs/toolkit/dist/configureStore.js").ToolkitStore<{
5
+ messages: {
6
+ messageOrder: string[];
7
+ messages: Record<string, Message>;
8
+ verbose: boolean;
9
+ };
10
+ agent: {
11
+ busy: boolean;
12
+ };
13
+ }, import("@reduxjs/toolkit").AnyAction, import("@reduxjs/toolkit").MiddlewareArray<[defaultReduxSaga.SagaMiddleware<{
14
+ backend: IAnalyticalBackend;
15
+ workspace: string;
16
+ }>, import("@reduxjs/toolkit").ThunkMiddleware<{
17
+ messages: {
18
+ messageOrder: string[];
19
+ messages: Record<string, Message>;
20
+ verbose: boolean;
21
+ };
22
+ agent: {
23
+ busy: boolean;
24
+ };
25
+ }, import("@reduxjs/toolkit").AnyAction>]>>;
26
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAEA,OAAO,gBAAgB,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAI/D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOtC,eAAO,MAAM,QAAQ,YAAa,kBAAkB,aAAa,MAAM,mBAAmB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;2CA0BlG,CAAC"}