@gooddata/sdk-ui-gen-ai 11.63.0-alpha.0 → 11.63.0-alpha.2

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 (30) hide show
  1. package/NOTICE +3 -3
  2. package/esm/components/GenAIChat.js +1 -1
  3. package/esm/components/GenAIChatDialogConnected.d.ts +5 -1
  4. package/esm/components/GenAIChatDialogConnected.d.ts.map +1 -1
  5. package/esm/components/GenAIChatDialogConnected.js +46 -39
  6. package/esm/components/messages/conversationContents/useConversationClarifyingQuestions.d.ts.map +1 -1
  7. package/esm/components/messages/conversationContents/useConversationClarifyingQuestions.js +1 -0
  8. package/esm/index.d.ts +1 -1
  9. package/esm/index.d.ts.map +1 -1
  10. package/esm/index.js +1 -1
  11. package/esm/sdk-ui-gen-ai.d.ts +56 -23
  12. package/esm/store/chatWindow/chatWindowSlice.d.ts +3 -7
  13. package/esm/store/chatWindow/chatWindowSlice.d.ts.map +1 -1
  14. package/esm/store/events.d.ts +54 -23
  15. package/esm/store/events.d.ts.map +1 -1
  16. package/esm/store/events.js +8 -0
  17. package/esm/store/messages/messagesSlice.d.ts +1 -0
  18. package/esm/store/messages/messagesSlice.d.ts.map +1 -1
  19. package/esm/store/queues/queue.newMessage.d.ts.map +1 -1
  20. package/esm/store/queues/queue.newMessage.js +14 -1
  21. package/esm/store/sideEffects/converters/toChatClarificationQuestions.d.ts +4 -0
  22. package/esm/store/sideEffects/converters/toChatClarificationQuestions.d.ts.map +1 -0
  23. package/esm/store/sideEffects/converters/toChatClarificationQuestions.js +16 -0
  24. package/esm/store/sideEffects/onEvent.d.ts +14 -0
  25. package/esm/store/sideEffects/onEvent.d.ts.map +1 -1
  26. package/esm/store/sideEffects/onEvent.js +36 -2
  27. package/esm/utils.js +1 -1
  28. package/package.json +22 -21
  29. package/styles/css/main.css +6 -0
  30. package/styles/css/main.css.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toChatClarificationQuestions.d.ts","sourceRoot":"","sources":["../../../../src/store/sideEffects/converters/toChatClarificationQuestions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,wBAAgB,mCAAmC,CAC/C,OAAO,EAAE,0BAA0B,CAAC,SAAS,CAAC,GAC/C,yBAAyB,EAAE,GAAG,SAAS,CAgBzC"}
@@ -0,0 +1,16 @@
1
+ // (C) 2026 GoodData Corporation
2
+ export function convertToChatClarificationQuestions(content) {
3
+ return content.type === "multipart"
4
+ ? content.parts
5
+ .filter((part) => part.type === "clarifyingQuestions")
6
+ .flatMap((part) => part.questions.map((question) => ({
7
+ text: question.text,
8
+ control: {
9
+ type: "singleChoice",
10
+ options: question.control.options.map((option) => ({
11
+ text: option.text,
12
+ })),
13
+ },
14
+ })))
15
+ : undefined;
16
+ }
@@ -1,2 +1,16 @@
1
+ import { type GenAIChatRoutingUseCase } from "@gooddata/sdk-model";
2
+ import { type ChatClarificationQuestion, type EventDispatcher } from "../events.js";
3
+ import { evaluateMessageCompleteAction, evaluateMessageStreamingAction, filledFormAction } from "../messages/messagesSlice.js";
1
4
  export declare function onEvent(): Generator<import("redux-saga/effects").ForkEffect<never>, void, unknown>;
5
+ export declare function onEvaluateMessageComplete({ payload: { assistantMessageId }, }: ReturnType<typeof evaluateMessageCompleteAction>): Generator<import("redux-saga/effects").CallEffect<Generator<unknown, MessageInfo | null, any>> | import("redux-saga/effects").GetContextEffect | import("redux-saga/effects").SelectEffect, void, MessageInfo & EventDispatcher & string>;
6
+ export declare function onEvaluateMessageStreaming({ payload: { assistantMessageId }, }: ReturnType<typeof evaluateMessageStreamingAction>): Generator<import("redux-saga/effects").CallEffect<Generator<unknown, MessageInfo | null, any>> | import("redux-saga/effects").GetContextEffect | import("redux-saga/effects").SelectEffect, void, MessageInfo & EventDispatcher & string>;
7
+ export declare function onClarificationQuestionsAnswered({ payload: { assistantMessageId, responses }, }: ReturnType<typeof filledFormAction>): Generator<import("redux-saga/effects").CallEffect<Generator<unknown, MessageInfo | null, any>> | import("redux-saga/effects").GetContextEffect | import("redux-saga/effects").SelectEffect, void, MessageInfo & EventDispatcher & string>;
8
+ type MessageInfo = {
9
+ id: string;
10
+ localId: string;
11
+ useCase: GenAIChatRoutingUseCase | undefined;
12
+ clarificationQuestions?: ChatClarificationQuestion[];
13
+ filled?: boolean;
14
+ };
15
+ export {};
2
16
  //# sourceMappingURL=onEvent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"onEvent.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onEvent.ts"],"names":[],"mappings":"AA6CA,wBAAiB,OAAO,6EA2BvB"}
1
+ {"version":3,"file":"onEvent.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/onEvent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAgBnE,OAAO,EAAE,KAAK,yBAAyB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpF,OAAO,EAKH,6BAA6B,EAC7B,8BAA8B,EAC9B,gBAAgB,EAenB,MAAM,8BAA8B,CAAC;AAItC,wBAAiB,OAAO,6EA6BvB;AAgOD,wBAAiB,yBAAyB,CAAC,EACvC,OAAO,EAAE,EAAE,kBAAkB,EAAE,GAClC,EAAE,UAAU,CAAC,OAAO,6BAA6B,CAAC,6OAgBlD;AAED,wBAAiB,0BAA0B,CAAC,EACxC,OAAO,EAAE,EAAE,kBAAkB,EAAE,GAClC,EAAE,UAAU,CAAC,OAAO,8BAA8B,CAAC,6OAgBnD;AAED,wBAAiB,gCAAgC,CAAC,EAC9C,OAAO,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAC7C,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,6OAiBrC;AAwGD,KAAK,WAAW,GAAG;IACf,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAC7C,sBAAsB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC"}
@@ -3,7 +3,8 @@ import { call, getContext, select, takeEvery } from "redux-saga/effects";
3
3
  import { copyToClipboardAction, onDefinitionReceivedAction, setAmbientUserContextAction, setFullscreenAction, setOpenAction, setUserContextAction, } from "../chatWindow/chatWindowSlice.js";
4
4
  import { setIsOpened } from "../localStorage.js";
5
5
  import { conversationMessagesSelector, threadIdSelector } from "../messages/messagesSelectors.js";
6
- import { clearThreadAction, deleteConversationAction, deleteConversationFailureAction, deleteConversationSuccessAction, evaluateMessageCompleteAction, loadConversationSuccessAction, newMessageAction, pinConversationFailureAction, pinConversationSuccessAction, renameConversationAction, renameConversationFailureAction, renameConversationSuccessAction, saveVisualizationErrorAction, saveVisualizationSuccessAction, setCurrentConversationAction, setSelectedAgentAction, setUserFeedback, setUserFeedbackError, visualizationErrorAction, } from "../messages/messagesSlice.js";
6
+ import { clearThreadAction, deleteConversationAction, deleteConversationFailureAction, deleteConversationSuccessAction, evaluateMessageCompleteAction, evaluateMessageStreamingAction, filledFormAction, loadConversationSuccessAction, newMessageAction, pinConversationFailureAction, pinConversationSuccessAction, renameConversationAction, renameConversationFailureAction, renameConversationSuccessAction, saveVisualizationErrorAction, saveVisualizationSuccessAction, setCurrentConversationAction, setSelectedAgentAction, setUserFeedback, setUserFeedbackError, visualizationErrorAction, } from "../messages/messagesSlice.js";
7
+ import { convertToChatClarificationQuestions } from "./converters/toChatClarificationQuestions.js";
7
8
  export function* onEvent() {
8
9
  yield takeEvery(setOpenAction.type, onSetOpen);
9
10
  yield takeEvery(setFullscreenAction.type, onFullscreenChanged);
@@ -11,7 +12,9 @@ export function* onEvent() {
11
12
  yield takeEvery(loadConversationSuccessAction.type, onThreadLoaded);
12
13
  yield takeEvery(clearThreadAction.type, onClearThread);
13
14
  yield takeEvery(newMessageAction.type, onNewMessage);
15
+ yield takeEvery(evaluateMessageStreamingAction.type, onEvaluateMessageStreaming);
14
16
  yield takeEvery(evaluateMessageCompleteAction.type, onEvaluateMessageComplete);
17
+ yield takeEvery(filledFormAction.type, onClarificationQuestionsAnswered);
15
18
  yield takeEvery(setUserFeedback.type, onUserFeedback);
16
19
  yield takeEvery(setUserFeedbackError.type, onUserFeedbackError);
17
20
  yield takeEvery(visualizationErrorAction.type, onVisualizationError);
@@ -198,7 +201,7 @@ function* onNewMessage({ payload: message }) {
198
201
  objects: messageContent.objects ?? [],
199
202
  });
200
203
  }
201
- function* onEvaluateMessageComplete({ payload: { assistantMessageId }, }) {
204
+ export function* onEvaluateMessageComplete({ payload: { assistantMessageId }, }) {
202
205
  const message = yield call(loadMessage, assistantMessageId);
203
206
  if (!message?.useCase) {
204
207
  return;
@@ -212,6 +215,35 @@ function* onEvaluateMessageComplete({ payload: { assistantMessageId }, }) {
212
215
  threadId,
213
216
  });
214
217
  }
218
+ export function* onEvaluateMessageStreaming({ payload: { assistantMessageId }, }) {
219
+ const message = yield call(loadMessage, assistantMessageId);
220
+ if (!message?.clarificationQuestions?.length || message.filled) {
221
+ return;
222
+ }
223
+ const eventDispatcher = yield getContext("eventDispatcher");
224
+ const threadId = yield select(threadIdSelector);
225
+ eventDispatcher.dispatch({
226
+ type: "chatClarificationQuestions",
227
+ interactionId: message.id,
228
+ threadId,
229
+ questions: message.clarificationQuestions,
230
+ });
231
+ }
232
+ export function* onClarificationQuestionsAnswered({ payload: { assistantMessageId, responses }, }) {
233
+ const message = yield call(loadMessage, assistantMessageId);
234
+ if (!message?.clarificationQuestions?.length) {
235
+ return;
236
+ }
237
+ const eventDispatcher = yield getContext("eventDispatcher");
238
+ const threadId = yield select(threadIdSelector);
239
+ eventDispatcher.dispatch({
240
+ type: "chatClarificationQuestions",
241
+ interactionId: message.id,
242
+ threadId,
243
+ questions: message.clarificationQuestions,
244
+ responses,
245
+ });
246
+ }
215
247
  function* onUserFeedback({ payload: { assistantMessageId, feedback, userTextFeedback }, }) {
216
248
  const message = yield call(loadMessage, assistantMessageId);
217
249
  if (!message) {
@@ -296,6 +328,8 @@ function* loadMessage(assistantMessageId) {
296
328
  id: message.id,
297
329
  localId: message.localId,
298
330
  useCase: convertMessageTypeTo(message?.content),
331
+ clarificationQuestions: convertToChatClarificationQuestions(message.content),
332
+ filled: message.filled,
299
333
  }
300
334
  : null;
301
335
  }
package/esm/utils.js CHANGED
@@ -174,5 +174,5 @@ export function convertGenAiTypeToReferenceType(type) {
174
174
  }
175
175
  export function isClarificationQuestionsItem(item) {
176
176
  return (item?.content?.type === "multipart" &&
177
- item.content.parts[item.content.parts.length - 1]?.type === "clarifyingQuestions");
177
+ item.content.parts.some((part) => part.type === "clarifyingQuestions"));
178
178
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-gen-ai",
3
- "version": "11.63.0-alpha.0",
3
+ "version": "11.63.0-alpha.2",
4
4
  "description": "GoodData GenAI SDK",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -57,20 +57,21 @@
57
57
  "reselect": "5.1.1",
58
58
  "tslib": "2.8.1",
59
59
  "uuid": "11.1.1",
60
- "@gooddata/api-client-tiger": "11.63.0-alpha.0",
61
- "@gooddata/sdk-backend-spi": "11.63.0-alpha.0",
62
- "@gooddata/sdk-model": "11.63.0-alpha.0",
63
- "@gooddata/sdk-ui": "11.63.0-alpha.0",
64
- "@gooddata/sdk-ui-charts": "11.63.0-alpha.0",
65
- "@gooddata/sdk-ui-dashboard": "11.63.0-alpha.0",
66
- "@gooddata/sdk-ui-ext": "11.63.0-alpha.0",
67
- "@gooddata/sdk-ui-filters": "11.63.0-alpha.0",
68
- "@gooddata/sdk-ui-geo": "11.63.0-alpha.0",
69
- "@gooddata/sdk-ui-kit": "11.63.0-alpha.0",
70
- "@gooddata/sdk-ui-pivot": "11.63.0-alpha.0",
71
- "@gooddata/sdk-ui-semantic-search": "11.63.0-alpha.0",
72
- "@gooddata/sdk-ui-theme-provider": "11.63.0-alpha.0",
73
- "@gooddata/util": "11.63.0-alpha.0"
60
+ "@gooddata/api-client-tiger": "11.63.0-alpha.2",
61
+ "@gooddata/sdk-backend-spi": "11.63.0-alpha.2",
62
+ "@gooddata/sdk-model": "11.63.0-alpha.2",
63
+ "@gooddata/sdk-pluggable-application-model": "11.63.0-alpha.2",
64
+ "@gooddata/sdk-ui": "11.63.0-alpha.2",
65
+ "@gooddata/sdk-ui-charts": "11.63.0-alpha.2",
66
+ "@gooddata/sdk-ui-dashboard": "11.63.0-alpha.2",
67
+ "@gooddata/sdk-ui-ext": "11.63.0-alpha.2",
68
+ "@gooddata/sdk-ui-filters": "11.63.0-alpha.2",
69
+ "@gooddata/sdk-ui-geo": "11.63.0-alpha.2",
70
+ "@gooddata/sdk-ui-kit": "11.63.0-alpha.2",
71
+ "@gooddata/sdk-ui-pivot": "11.63.0-alpha.2",
72
+ "@gooddata/sdk-ui-semantic-search": "11.63.0-alpha.2",
73
+ "@gooddata/sdk-ui-theme-provider": "11.63.0-alpha.2",
74
+ "@gooddata/util": "11.63.0-alpha.2"
74
75
  },
75
76
  "devDependencies": {
76
77
  "@microsoft/api-documenter": "7.30.16",
@@ -109,12 +110,12 @@
109
110
  "svgo": "2.8.4",
110
111
  "typescript": "7.0.2",
111
112
  "vitest": "5.0.4",
112
- "@gooddata/eslint-config": "11.63.0-alpha.0",
113
- "@gooddata/i18n-toolkit": "11.63.0-alpha.0",
114
- "@gooddata/oxlint-config": "11.63.0-alpha.0",
115
- "@gooddata/reference-workspace": "11.63.0-alpha.0",
116
- "@gooddata/stylelint-config": "11.63.0-alpha.0",
117
- "@gooddata/sdk-backend-mockingbird": "11.63.0-alpha.0"
113
+ "@gooddata/eslint-config": "11.63.0-alpha.2",
114
+ "@gooddata/i18n-toolkit": "11.63.0-alpha.2",
115
+ "@gooddata/oxlint-config": "11.63.0-alpha.2",
116
+ "@gooddata/reference-workspace": "11.63.0-alpha.2",
117
+ "@gooddata/sdk-backend-mockingbird": "11.63.0-alpha.2",
118
+ "@gooddata/stylelint-config": "11.63.0-alpha.2"
118
119
  },
119
120
  "peerDependencies": {
120
121
  "react": "^18.0.0 || ^19.0.0",
@@ -297,9 +297,11 @@
297
297
  --gd-button-XL: 45px;
298
298
  --gd-button-L: 38px;
299
299
  --gd-button-M: 32px;
300
+ --gd-button-XS: 14px;
300
301
  --gd-button-S: 27px;
301
302
  --gd-icon-fill-color: var(--gd-palette-complementary-9);
302
303
  --gd-icon-background-color: var(--gd-palette-complementary-2);
304
+ --gd-visualizations-list-item-hover-bg: var(--gd-palette-complementary-0);
303
305
  --gd-tabs-height-L: 56px;
304
306
  --gd-tabs-height-M: 27px;
305
307
  --gd-tabs-height-S: 23px;
@@ -663,9 +665,11 @@
663
665
  --gd-button-XL: 45px;
664
666
  --gd-button-L: 38px;
665
667
  --gd-button-M: 32px;
668
+ --gd-button-XS: 14px;
666
669
  --gd-button-S: 27px;
667
670
  --gd-icon-fill-color: var(--gd-palette-complementary-9);
668
671
  --gd-icon-background-color: var(--gd-palette-complementary-2);
672
+ --gd-visualizations-list-item-hover-bg: var(--gd-palette-complementary-0);
669
673
  --gd-tabs-height-L: 56px;
670
674
  --gd-tabs-height-M: 27px;
671
675
  --gd-tabs-height-S: 23px;
@@ -12245,9 +12249,11 @@ button.gd-list-item {
12245
12249
  --gd-button-XL: 45px;
12246
12250
  --gd-button-L: 38px;
12247
12251
  --gd-button-M: 32px;
12252
+ --gd-button-XS: 14px;
12248
12253
  --gd-button-S: 27px;
12249
12254
  --gd-icon-fill-color: var(--gd-palette-complementary-9);
12250
12255
  --gd-icon-background-color: var(--gd-palette-complementary-2);
12256
+ --gd-visualizations-list-item-hover-bg: var(--gd-palette-complementary-0);
12251
12257
  --gd-tabs-height-L: 56px;
12252
12258
  --gd-tabs-height-M: 27px;
12253
12259
  --gd-tabs-height-S: 23px;