@dremio/js-sdk 0.62.0 → 0.63.0
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.
- package/dist/cloud/ai/AIResource.d.ts +72 -0
- package/dist/common/fromTextEventStream.d.ts +17 -0
- package/dist/common/fromTextEventStream.js +17 -6
- package/dist/common/fromTextEventStream.js.map +1 -1
- package/dist/enterprise/ai/AIResource.d.ts +72 -0
- package/dist/enterprise/ai/chat/chatEventSchema.d.ts +21 -0
- package/dist/enterprise/ai/chat/chatEventSchema.js +18 -0
- package/dist/enterprise/ai/chat/chatEventSchema.js.map +1 -1
- package/dist/enterprise/ai/conversations/AgentConversation.d.ts +24 -0
- package/dist/enterprise/ai/conversations/createConversationMachine.d.ts +72 -0
- package/dist/enterprise/ai/conversations/createConversationMachine.js +5 -4
- package/dist/enterprise/ai/conversations/createConversationMachine.js.map +1 -1
- package/dist/enterprise/ai/conversations/methods/retrieveConversationHistory.d.ts +12 -0
- package/dist-iife/cloud.js +86 -13
- package/dist-iife/community.js +28 -10
- package/dist-iife/enterprise.js +127 -13
- package/package.json +1 -1
|
@@ -119,6 +119,18 @@ export declare const createConversationMachine: (config: SonarV4Config) => impor
|
|
|
119
119
|
chunkType: "interrupt";
|
|
120
120
|
};
|
|
121
121
|
role: "agent";
|
|
122
|
+
} | {
|
|
123
|
+
conversationId: string;
|
|
124
|
+
modelName: string;
|
|
125
|
+
modelProviderId: string;
|
|
126
|
+
runId: string;
|
|
127
|
+
createdAt: import("temporal-polyfill").Temporal.Instant;
|
|
128
|
+
id: string;
|
|
129
|
+
content: {
|
|
130
|
+
chunkType: "contextUsage";
|
|
131
|
+
contextUsagePercentage: number;
|
|
132
|
+
};
|
|
133
|
+
role: "agent";
|
|
122
134
|
} | {
|
|
123
135
|
conversationId: string;
|
|
124
136
|
modelName: string;
|
|
@@ -296,6 +308,18 @@ export declare const createConversationMachine: (config: SonarV4Config) => impor
|
|
|
296
308
|
chunkType: "interrupt";
|
|
297
309
|
};
|
|
298
310
|
role: "agent";
|
|
311
|
+
} | {
|
|
312
|
+
conversationId: string;
|
|
313
|
+
modelName: string;
|
|
314
|
+
modelProviderId: string;
|
|
315
|
+
runId: string;
|
|
316
|
+
createdAt: import("temporal-polyfill").Temporal.Instant;
|
|
317
|
+
id: string;
|
|
318
|
+
content: {
|
|
319
|
+
chunkType: "contextUsage";
|
|
320
|
+
contextUsagePercentage: number;
|
|
321
|
+
};
|
|
322
|
+
role: "agent";
|
|
299
323
|
} | {
|
|
300
324
|
conversationId: string;
|
|
301
325
|
modelName: string;
|
|
@@ -480,6 +504,18 @@ export declare const createConversationMachine: (config: SonarV4Config) => impor
|
|
|
480
504
|
chunkType: "interrupt";
|
|
481
505
|
};
|
|
482
506
|
role: "agent";
|
|
507
|
+
} | {
|
|
508
|
+
conversationId: string;
|
|
509
|
+
modelName: string;
|
|
510
|
+
modelProviderId: string;
|
|
511
|
+
runId: string;
|
|
512
|
+
createdAt: import("temporal-polyfill").Temporal.Instant;
|
|
513
|
+
id: string;
|
|
514
|
+
content: {
|
|
515
|
+
chunkType: "contextUsage";
|
|
516
|
+
contextUsagePercentage: number;
|
|
517
|
+
};
|
|
518
|
+
role: "agent";
|
|
483
519
|
} | {
|
|
484
520
|
conversationId: string;
|
|
485
521
|
modelName: string;
|
|
@@ -681,6 +717,18 @@ export declare const createConversationMachine: (config: SonarV4Config) => impor
|
|
|
681
717
|
chunkType: "interrupt";
|
|
682
718
|
};
|
|
683
719
|
role: "agent";
|
|
720
|
+
} | {
|
|
721
|
+
conversationId: string;
|
|
722
|
+
modelName: string;
|
|
723
|
+
modelProviderId: string;
|
|
724
|
+
runId: string;
|
|
725
|
+
createdAt: import("temporal-polyfill").Temporal.Instant;
|
|
726
|
+
id: string;
|
|
727
|
+
content: {
|
|
728
|
+
chunkType: "contextUsage";
|
|
729
|
+
contextUsagePercentage: number;
|
|
730
|
+
};
|
|
731
|
+
role: "agent";
|
|
684
732
|
} | {
|
|
685
733
|
conversationId: string;
|
|
686
734
|
modelName: string;
|
|
@@ -862,6 +910,18 @@ export declare const createConversationMachine: (config: SonarV4Config) => impor
|
|
|
862
910
|
chunkType: "interrupt";
|
|
863
911
|
};
|
|
864
912
|
role: "agent";
|
|
913
|
+
} | {
|
|
914
|
+
conversationId: string;
|
|
915
|
+
modelName: string;
|
|
916
|
+
modelProviderId: string;
|
|
917
|
+
runId: string;
|
|
918
|
+
createdAt: import("temporal-polyfill").Temporal.Instant;
|
|
919
|
+
id: string;
|
|
920
|
+
content: {
|
|
921
|
+
chunkType: "contextUsage";
|
|
922
|
+
contextUsagePercentage: number;
|
|
923
|
+
};
|
|
924
|
+
role: "agent";
|
|
865
925
|
} | {
|
|
866
926
|
conversationId: string;
|
|
867
927
|
modelName: string;
|
|
@@ -1058,6 +1118,18 @@ export declare const createConversationMachine: (config: SonarV4Config) => impor
|
|
|
1058
1118
|
chunkType: "interrupt";
|
|
1059
1119
|
};
|
|
1060
1120
|
role: "agent";
|
|
1121
|
+
} | {
|
|
1122
|
+
conversationId: string;
|
|
1123
|
+
modelName: string;
|
|
1124
|
+
modelProviderId: string;
|
|
1125
|
+
runId: string;
|
|
1126
|
+
createdAt: import("temporal-polyfill").Temporal.Instant;
|
|
1127
|
+
id: string;
|
|
1128
|
+
content: {
|
|
1129
|
+
chunkType: "contextUsage";
|
|
1130
|
+
contextUsagePercentage: number;
|
|
1131
|
+
};
|
|
1132
|
+
role: "agent";
|
|
1061
1133
|
} | {
|
|
1062
1134
|
conversationId: string;
|
|
1063
1135
|
modelName: string;
|
|
@@ -22,11 +22,11 @@ import { retrieveConversationHistory } from "./methods/retrieveConversationHisto
|
|
|
22
22
|
import { createExchangeRun } from "./methods/createExchangeRun.js";
|
|
23
23
|
import { stopExchangeRun } from "./methods/stopExchangeRun.js";
|
|
24
24
|
import { streamRunEvents } from "./methods/streamRunEvents.js";
|
|
25
|
-
import {
|
|
26
|
-
import { map, timeout } from "rxjs";
|
|
25
|
+
import { fromTextEventStreamActivity, } from "../../../common/fromTextEventStream.js";
|
|
26
|
+
import { filter, map, timeout } from "rxjs";
|
|
27
27
|
import { chatEventCodec } from "../chat/chatEventSchema.js";
|
|
28
28
|
const RETRIEVE_STATE_TIMEOUT_MS = 10_000;
|
|
29
|
-
const STREAM_IDLE_TIMEOUT_MS =
|
|
29
|
+
const STREAM_IDLE_TIMEOUT_MS = 15_000;
|
|
30
30
|
const STREAM_RETRY_DELAY_MS = 2500;
|
|
31
31
|
export const MAX_STREAM_RETRIES = 5;
|
|
32
32
|
const STREAM_STATE_RESET = {
|
|
@@ -86,7 +86,7 @@ export const createConversationMachine = (config) => setup({
|
|
|
86
86
|
}
|
|
87
87
|
return result.value;
|
|
88
88
|
})),
|
|
89
|
-
streamRun: fromObservable(({ input }) =>
|
|
89
|
+
streamRun: fromObservable(({ input }) => fromTextEventStreamActivity(({ signal }) => streamRunEvents(config)({ conversationId: input.conversationId, runId: input.runId }, { signal })).pipe(timeout({ each: STREAM_IDLE_TIMEOUT_MS }), filter((activity) => activity.type === "event"), map(({ event }) => z.decode(chatEventCodec, JSON.parse(event.data))))),
|
|
90
90
|
},
|
|
91
91
|
delays: {
|
|
92
92
|
STREAM_RETRY_DELAY: STREAM_RETRY_DELAY_MS,
|
|
@@ -196,6 +196,7 @@ export const createConversationMachine = (config) => setup({
|
|
|
196
196
|
conversationSnapshot: ({ context, event }) => AgentConversation.reduceChatEvents(context.conversationSnapshot, event.output.history.data),
|
|
197
197
|
currentRunId: ({ event }) => event.output.conversation.currentRunId,
|
|
198
198
|
receivedEndOfStream: false,
|
|
199
|
+
streamRetryCount: 0,
|
|
199
200
|
}),
|
|
200
201
|
guard: ({ event }) => !!event.output.conversation.currentRunId,
|
|
201
202
|
target: "streaming",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createConversationMachine.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/conversations/createConversationMachine.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2024-2025 Dremio Corporation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { setup, fromObservable, fromPromise, assign, enqueueActions, emit } from \"xstate\";\nimport type { UserChatMessage } from \"../chat/UserChatMessage.ts\";\nimport { AgentConversation } from \"./AgentConversation.ts\";\nimport type { ConversationExchange } from \"./reduceChatEvents.ts\";\nimport type { SonarV4Config } from \"../../../common/Config.ts\";\nimport { createConversation, createConversationCodec } from \"./methods/createConversation.ts\";\nimport * as z from \"zod/mini\";\nimport { retrieveConversation } from \"./methods/retrieveConversation.ts\";\nimport { retrieveConversationHistory } from \"./methods/retrieveConversationHistory.ts\";\nimport { createExchangeRun } from \"./methods/createExchangeRun.ts\";\nimport { stopExchangeRun } from \"./methods/stopExchangeRun.ts\";\nimport { streamRunEvents } from \"./methods/streamRunEvents.ts\";\nimport { fromTextEventStream } from \"../../../common/fromTextEventStream.ts\";\nimport { map, timeout } from \"rxjs\";\nimport { chatEventCodec, type ChatEvent } from \"../chat/chatEventSchema.ts\";\nimport type { HttpError } from \"../../../common/HttpError.ts\";\n\nexport type ConversationMachineInput = {\n conversationId: string | null;\n};\n\nexport type ConversationMachineContext = {\n conversationId: string | null;\n conversationSnapshot?: ConversationExchange[];\n currentRunId?: string | null;\n lastError?: unknown;\n messageAttempt?: UserChatMessage;\n receivedEndOfStream: boolean;\n streamRetryCount: number;\n userRequestedStop: boolean;\n};\nexport type ConversationMachineEvents =\n | { type: \"STOP_RUN\" }\n | { type: \"SUBMIT_USER_MESSAGE\"; message: UserChatMessage }\n | { type: \"RETRY_MESSAGE\" }\n | { type: \"REFRESH_HISTORY\" };\n\nexport type ConversationMachineEmitted =\n | {\n type: \"apiError\";\n error: HttpError;\n }\n | {\n type: \"chatEventReceived\";\n chatEvent: ChatEvent;\n }\n | {\n type: \"conversationCreated\";\n id: string;\n };\n\nconst RETRIEVE_STATE_TIMEOUT_MS = 10_000;\nconst STREAM_IDLE_TIMEOUT_MS = 60_000;\nconst STREAM_RETRY_DELAY_MS = 2500;\nexport const MAX_STREAM_RETRIES = 5;\nconst STREAM_STATE_RESET = {\n receivedEndOfStream: false,\n streamRetryCount: 0,\n userRequestedStop: false,\n};\n\nexport const createConversationMachine = (config: SonarV4Config) =>\n setup({\n actors: {\n createConversation: fromPromise(\n ({ input }: { input: z.input<typeof createConversationCodec> }) =>\n createConversation(config)(input).then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ),\n retrieveConversation: fromPromise(\n ({ input, signal }: { input: { conversationId: string }; signal: AbortSignal }) =>\n retrieveConversation(config)(input.conversationId, { signal }).then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ),\n retrieveHistory: fromPromise(\n ({ input, signal }: { input: { conversationId: string }; signal: AbortSignal }) =>\n retrieveConversationHistory(config)(input.conversationId, { signal }).then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ),\n retrieveState: fromPromise(\n async ({ input, signal }: { input: { conversationId: string }; signal: AbortSignal }) => {\n const timeoutSignal = AbortSignal.any([\n signal,\n AbortSignal.timeout(RETRIEVE_STATE_TIMEOUT_MS),\n ]);\n const [conversationResult, historyResult] = await Promise.all([\n retrieveConversation(config)(input.conversationId, { signal: timeoutSignal }),\n retrieveConversationHistory(config)(input.conversationId, { signal: timeoutSignal }),\n ]);\n\n if (conversationResult.isErr()) {\n throw conversationResult.error;\n }\n\n if (historyResult.isErr()) {\n throw historyResult.error;\n }\n\n return {\n conversation: conversationResult.value,\n history: historyResult.value,\n };\n },\n ),\n startRun: fromPromise(\n ({ input }: { input: { conversationId: string; message: UserChatMessage } }) =>\n createExchangeRun(config)(input.conversationId, { message: input.message }).then(\n (result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n },\n ),\n ),\n stopRun: fromPromise(({ input }: { input: { conversationId: string; runId: string } }) =>\n stopExchangeRun(config)(input.conversationId, input.runId).then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ),\n streamRun: fromObservable(({ input }: { input: { conversationId: string; runId: string } }) =>\n fromTextEventStream(({ signal }) =>\n streamRunEvents(config)(\n { conversationId: input.conversationId, runId: input.runId },\n { signal },\n ),\n ).pipe(\n map((event) =>\n z.decode(chatEventCodec, JSON.parse(event.data) as z.input<typeof chatEventCodec>),\n ),\n timeout({ each: STREAM_IDLE_TIMEOUT_MS }),\n ),\n ),\n },\n delays: {\n STREAM_RETRY_DELAY: STREAM_RETRY_DELAY_MS,\n },\n types: {\n context: {} as ConversationMachineContext,\n emitted: {} as ConversationMachineEmitted,\n events: {} as ConversationMachineEvents,\n input: {} as ConversationMachineInput,\n },\n }).createMachine({\n context: ({ input }) => ({\n conversationId: input.conversationId,\n conversationSnapshot: undefined,\n currentRunId: undefined,\n messageAttempt: undefined,\n ...STREAM_STATE_RESET,\n }),\n id: \"agentConversation\",\n initial: \"uninitialized\",\n states: {\n creating_conversation: {\n description: \"Creating a new conversation object\",\n invoke: {\n input: ({ context }) => ({\n message: context.messageAttempt!,\n }),\n onDone: [\n {\n actions: [\n assign({\n conversationId: ({ event }) => event.output.id,\n // Add the message attempt into the snapshot manually\n conversationSnapshot: ({ context, event }) => [\n ...(context.conversationSnapshot ?? []),\n {\n id: event.output.currentRunId!,\n messages: new Map(),\n submittedUserMessage: context.messageAttempt,\n toolCalls: new Map(),\n } satisfies ConversationExchange,\n ],\n currentRunId: ({ event }) => event.output.currentRunId,\n messageAttempt: undefined,\n ...STREAM_STATE_RESET,\n }),\n emit(({ event }) => ({\n id: event.output.id,\n type: \"conversationCreated\",\n })),\n ],\n // Don't transition to streaming in a situation where we didn't receive a currentRunId\n guard: ({ event }) => !!event.output.currentRunId,\n target: \"streaming\",\n },\n /**\n * Fall back to the retrieving_history state if we didn't receive a currentRunId\n */\n {\n actions: assign({\n conversationId: ({ event }) => event.output.id,\n currentRunId: ({ event }) => event.output.currentRunId,\n messageAttempt: undefined,\n }),\n target: \"retrieving_history\",\n },\n ],\n onError: {\n actions: emit(({ event }) => ({\n error: event.error as HttpError,\n type: \"apiError\",\n })),\n target: \"uninitialized\",\n },\n src: \"createConversation\",\n },\n },\n idle: {\n description: \"Waiting for user input to start the next reply stream\",\n on: {\n REFRESH_HISTORY: {\n target: \"retrieving_history\",\n },\n SUBMIT_USER_MESSAGE: {\n actions: assign({\n messageAttempt: ({ event }) => event.message,\n }),\n target: \"submitting_message\",\n },\n },\n },\n retrieve_history_failed: {\n on: {\n REFRESH_HISTORY: {\n actions: assign({ lastError: undefined }),\n target: \"retrieving_history\",\n },\n },\n },\n retrieving_history: {\n description: \"Retrieving latest copy of conversation history\",\n invoke: {\n input: ({ context }) => ({ conversationId: context.conversationId! }),\n onDone: [\n {\n actions: assign({\n conversationSnapshot: ({ context, event }) =>\n AgentConversation.reduceChatEvents(\n context.conversationSnapshot,\n event.output.history.data,\n ),\n currentRunId: ({ event }) => event.output.conversation.currentRunId,\n receivedEndOfStream: false,\n }),\n guard: ({ event }) => !!event.output.conversation.currentRunId,\n target: \"streaming\",\n },\n {\n actions: assign({\n conversationSnapshot: ({ context, event }) =>\n AgentConversation.reduceChatEvents(\n context.conversationSnapshot,\n event.output.history.data,\n ),\n currentRunId: ({ event }) => event.output.conversation.currentRunId,\n ...STREAM_STATE_RESET,\n }),\n target: \"idle\",\n },\n ],\n onError: [\n {\n guard: ({ event }) => {\n const e = event.error as Error & { code?: string };\n if (e?.name === \"TimeoutError\") return false;\n return (\n e?.name === \"AbortError\" ||\n e?.message?.includes(\"aborted\") ||\n e?.code === \"ABORT_ERR\"\n );\n },\n target: \"uninitialized\",\n },\n {\n guard: ({ context }) => context.streamRetryCount > 0,\n target: \"stream_interrupted\",\n },\n {\n actions: [\n assign({\n lastError: ({ event }) => event.error,\n }),\n emit(({ event }) => ({\n error: event.error as HttpError,\n type: \"apiError\",\n })),\n ],\n target: \"retrieve_history_failed\",\n },\n ],\n src: \"retrieveState\",\n },\n },\n stream_interrupted: {\n after: {\n STREAM_RETRY_DELAY: [\n {\n actions: assign({\n streamRetryCount: ({ context }) => context.streamRetryCount + 1,\n }),\n guard: ({ context }) => context.streamRetryCount < MAX_STREAM_RETRIES,\n target: \"retrieving_history\",\n },\n {\n target: \"stream_recovery_failed\",\n },\n ],\n },\n },\n stream_recovery_failed: {\n on: {\n REFRESH_HISTORY: {\n actions: assign({ lastError: undefined, streamRetryCount: 0 }),\n target: \"retrieving_history\",\n },\n },\n },\n streaming: {\n description: \"Manages monitoring and canceling the current run\",\n initial: \"monitoring_replies\",\n invoke: {\n input: ({ context }) => {\n if (!context.currentRunId) {\n throw new Error(\"Attempted to stream without a runId\");\n }\n return {\n conversationId: context.conversationId!,\n runId: context.currentRunId,\n };\n },\n onDone: [\n {\n actions: assign({ currentRunId: null, userRequestedStop: false }),\n guard: ({ context }) => !!context.receivedEndOfStream || !!context.userRequestedStop,\n target: \"idle\",\n },\n {\n actions: assign({ currentRunId: null }),\n target: \"stream_interrupted\",\n },\n ],\n onError: [\n {\n actions: assign({ currentRunId: null, userRequestedStop: false }),\n guard: ({ context }) => !!context.receivedEndOfStream || !!context.userRequestedStop,\n target: \"idle\",\n },\n {\n actions: assign({ currentRunId: null }),\n target: \"stream_interrupted\",\n },\n ],\n onSnapshot: {\n actions: enqueueActions(({ context, enqueue, event }) => {\n const chatEvent = event.snapshot.context;\n if (!chatEvent) {\n return;\n }\n\n if (chatEvent.content.chunkType === \"endOfStream\" && !context.receivedEndOfStream) {\n enqueue.assign({ receivedEndOfStream: true });\n }\n\n const nextSnapshot = AgentConversation.reduceChatEvents(\n context.conversationSnapshot,\n [chatEvent],\n );\n\n enqueue.assign({\n conversationSnapshot: nextSnapshot,\n });\n enqueue.emit({\n chatEvent,\n type: \"chatEventReceived\",\n });\n }),\n },\n src: \"streamRun\",\n },\n states: {\n monitoring_replies: {\n description: \"Attached to the run event stream\",\n on: {\n STOP_RUN: {\n actions: assign({ userRequestedStop: true }),\n target: \"stopping\",\n },\n },\n },\n stopping: {\n description: \"Background cancelation of the run stream\",\n invoke: {\n input: ({ context }) => ({\n conversationId: context.conversationId!,\n runId: context.currentRunId!,\n }),\n onDone: {\n actions: assign({ currentRunId: undefined, userRequestedStop: false }),\n target: \"#agentConversation.idle\",\n },\n onError: {\n actions: assign({ userRequestedStop: false }),\n target: \"#agentConversation.retrieving_history\",\n },\n src: \"stopRun\",\n },\n },\n },\n },\n submitting_message: {\n description: \"Submitting message to start a new reply stream\",\n invoke: {\n input: ({ context, event }) => {\n switch (event.type) {\n case \"RETRY_MESSAGE\":\n if (!context.messageAttempt) {\n throw new Error(\"Tried to resubmit nonexistent message\");\n }\n return {\n conversationId: context.conversationId!,\n message: context.messageAttempt,\n };\n case \"SUBMIT_USER_MESSAGE\":\n return {\n conversationId: context.conversationId!,\n message: event.message,\n };\n }\n throw new Error(`Unexpected event type received in submitting_message: ${event.type}`);\n },\n onDone: {\n actions: assign({\n // Add the message attempt into the snapshot manually\n conversationSnapshot: ({ context, event }) => [\n ...(context.conversationSnapshot ?? []),\n {\n id: event.output.currentRunId,\n messages: new Map(),\n submittedUserMessage: context.messageAttempt || undefined,\n toolCalls: new Map(),\n } satisfies ConversationExchange,\n ],\n currentRunId: ({ event }) => event.output.currentRunId,\n messageAttempt: undefined,\n ...STREAM_STATE_RESET,\n }),\n target: \"streaming\",\n },\n onError: {\n actions: [\n assign({\n currentRunId: () => null,\n lastError: ({ event }) => event.error,\n }),\n emit(({ event }) => ({\n error: event.error as HttpError,\n type: \"apiError\",\n })),\n ],\n target: \"submitting_message_failed\",\n },\n src: \"startRun\",\n },\n },\n submitting_message_failed: {\n description: \"Failed to submit message\",\n on: {\n REFRESH_HISTORY: {\n actions: assign({ lastError: undefined }),\n target: \"retrieving_history\",\n },\n RETRY_MESSAGE: {\n actions: assign({ lastError: undefined }),\n target: \"submitting_message\",\n },\n SUBMIT_USER_MESSAGE: {\n actions: assign({\n lastError: undefined,\n messageAttempt: ({ event }) => event.message,\n }),\n target: \"submitting_message\",\n },\n },\n },\n uninitialized: {\n always: {\n guard: ({ context }) => !!context.conversationId,\n target: \"retrieving_history\",\n },\n description:\n \"Entry state that the machine remains in when no conversation has been provided\",\n on: {\n SUBMIT_USER_MESSAGE: {\n actions: assign({\n messageAttempt: ({ event }) => event.message,\n }),\n target: \"creating_conversation\",\n },\n },\n },\n },\n });\n\nexport type AgentConversationMachine = ReturnType<typeof createConversationMachine>;\n"]}
|
|
1
|
+
{"version":3,"file":"createConversationMachine.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/conversations/createConversationMachine.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2024-2025 Dremio Corporation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { setup, fromObservable, fromPromise, assign, enqueueActions, emit } from \"xstate\";\nimport type { UserChatMessage } from \"../chat/UserChatMessage.ts\";\nimport { AgentConversation } from \"./AgentConversation.ts\";\nimport type { ConversationExchange } from \"./reduceChatEvents.ts\";\nimport type { SonarV4Config } from \"../../../common/Config.ts\";\nimport { createConversation, createConversationCodec } from \"./methods/createConversation.ts\";\nimport * as z from \"zod/mini\";\nimport { retrieveConversation } from \"./methods/retrieveConversation.ts\";\nimport { retrieveConversationHistory } from \"./methods/retrieveConversationHistory.ts\";\nimport { createExchangeRun } from \"./methods/createExchangeRun.ts\";\nimport { stopExchangeRun } from \"./methods/stopExchangeRun.ts\";\nimport { streamRunEvents } from \"./methods/streamRunEvents.ts\";\nimport {\n fromTextEventStreamActivity,\n type TextEventStreamActivity,\n} from \"../../../common/fromTextEventStream.ts\";\nimport { filter, map, timeout } from \"rxjs\";\nimport { chatEventCodec, type ChatEvent } from \"../chat/chatEventSchema.ts\";\nimport type { HttpError } from \"../../../common/HttpError.ts\";\n\nexport type ConversationMachineInput = {\n conversationId: string | null;\n};\n\nexport type ConversationMachineContext = {\n conversationId: string | null;\n conversationSnapshot?: ConversationExchange[];\n currentRunId?: string | null;\n lastError?: unknown;\n messageAttempt?: UserChatMessage;\n receivedEndOfStream: boolean;\n streamRetryCount: number;\n userRequestedStop: boolean;\n};\nexport type ConversationMachineEvents =\n | { type: \"STOP_RUN\" }\n | { type: \"SUBMIT_USER_MESSAGE\"; message: UserChatMessage }\n | { type: \"RETRY_MESSAGE\" }\n | { type: \"REFRESH_HISTORY\" };\n\nexport type ConversationMachineEmitted =\n | {\n type: \"apiError\";\n error: HttpError;\n }\n | {\n type: \"chatEventReceived\";\n chatEvent: ChatEvent;\n }\n | {\n type: \"conversationCreated\";\n id: string;\n };\n\nconst RETRIEVE_STATE_TIMEOUT_MS = 10_000;\nconst STREAM_IDLE_TIMEOUT_MS = 15_000;\nconst STREAM_RETRY_DELAY_MS = 2500;\nexport const MAX_STREAM_RETRIES = 5;\nconst STREAM_STATE_RESET = {\n receivedEndOfStream: false,\n streamRetryCount: 0,\n userRequestedStop: false,\n};\n\nexport const createConversationMachine = (config: SonarV4Config) =>\n setup({\n actors: {\n createConversation: fromPromise(\n ({ input }: { input: z.input<typeof createConversationCodec> }) =>\n createConversation(config)(input).then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ),\n retrieveConversation: fromPromise(\n ({ input, signal }: { input: { conversationId: string }; signal: AbortSignal }) =>\n retrieveConversation(config)(input.conversationId, { signal }).then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ),\n retrieveHistory: fromPromise(\n ({ input, signal }: { input: { conversationId: string }; signal: AbortSignal }) =>\n retrieveConversationHistory(config)(input.conversationId, { signal }).then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ),\n retrieveState: fromPromise(\n async ({ input, signal }: { input: { conversationId: string }; signal: AbortSignal }) => {\n const timeoutSignal = AbortSignal.any([\n signal,\n AbortSignal.timeout(RETRIEVE_STATE_TIMEOUT_MS),\n ]);\n const [conversationResult, historyResult] = await Promise.all([\n retrieveConversation(config)(input.conversationId, { signal: timeoutSignal }),\n retrieveConversationHistory(config)(input.conversationId, { signal: timeoutSignal }),\n ]);\n\n if (conversationResult.isErr()) {\n throw conversationResult.error;\n }\n\n if (historyResult.isErr()) {\n throw historyResult.error;\n }\n\n return {\n conversation: conversationResult.value,\n history: historyResult.value,\n };\n },\n ),\n startRun: fromPromise(\n ({ input }: { input: { conversationId: string; message: UserChatMessage } }) =>\n createExchangeRun(config)(input.conversationId, { message: input.message }).then(\n (result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n },\n ),\n ),\n stopRun: fromPromise(({ input }: { input: { conversationId: string; runId: string } }) =>\n stopExchangeRun(config)(input.conversationId, input.runId).then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ),\n streamRun: fromObservable(({ input }: { input: { conversationId: string; runId: string } }) =>\n fromTextEventStreamActivity(({ signal }) =>\n streamRunEvents(config)(\n { conversationId: input.conversationId, runId: input.runId },\n { signal },\n ),\n ).pipe(\n timeout({ each: STREAM_IDLE_TIMEOUT_MS }),\n filter(\n (activity): activity is Extract<TextEventStreamActivity, { type: \"event\" }> =>\n activity.type === \"event\",\n ),\n map(({ event }) =>\n z.decode(chatEventCodec, JSON.parse(event.data) as z.input<typeof chatEventCodec>),\n ),\n ),\n ),\n },\n delays: {\n STREAM_RETRY_DELAY: STREAM_RETRY_DELAY_MS,\n },\n types: {\n context: {} as ConversationMachineContext,\n emitted: {} as ConversationMachineEmitted,\n events: {} as ConversationMachineEvents,\n input: {} as ConversationMachineInput,\n },\n }).createMachine({\n context: ({ input }) => ({\n conversationId: input.conversationId,\n conversationSnapshot: undefined,\n currentRunId: undefined,\n messageAttempt: undefined,\n ...STREAM_STATE_RESET,\n }),\n id: \"agentConversation\",\n initial: \"uninitialized\",\n states: {\n creating_conversation: {\n description: \"Creating a new conversation object\",\n invoke: {\n input: ({ context }) => ({\n message: context.messageAttempt!,\n }),\n onDone: [\n {\n actions: [\n assign({\n conversationId: ({ event }) => event.output.id,\n // Add the message attempt into the snapshot manually\n conversationSnapshot: ({ context, event }) => [\n ...(context.conversationSnapshot ?? []),\n {\n id: event.output.currentRunId!,\n messages: new Map(),\n submittedUserMessage: context.messageAttempt,\n toolCalls: new Map(),\n } satisfies ConversationExchange,\n ],\n currentRunId: ({ event }) => event.output.currentRunId,\n messageAttempt: undefined,\n ...STREAM_STATE_RESET,\n }),\n emit(({ event }) => ({\n id: event.output.id,\n type: \"conversationCreated\",\n })),\n ],\n // Don't transition to streaming in a situation where we didn't receive a currentRunId\n guard: ({ event }) => !!event.output.currentRunId,\n target: \"streaming\",\n },\n /**\n * Fall back to the retrieving_history state if we didn't receive a currentRunId\n */\n {\n actions: assign({\n conversationId: ({ event }) => event.output.id,\n currentRunId: ({ event }) => event.output.currentRunId,\n messageAttempt: undefined,\n }),\n target: \"retrieving_history\",\n },\n ],\n onError: {\n actions: emit(({ event }) => ({\n error: event.error as HttpError,\n type: \"apiError\",\n })),\n target: \"uninitialized\",\n },\n src: \"createConversation\",\n },\n },\n idle: {\n description: \"Waiting for user input to start the next reply stream\",\n on: {\n REFRESH_HISTORY: {\n target: \"retrieving_history\",\n },\n SUBMIT_USER_MESSAGE: {\n actions: assign({\n messageAttempt: ({ event }) => event.message,\n }),\n target: \"submitting_message\",\n },\n },\n },\n retrieve_history_failed: {\n on: {\n REFRESH_HISTORY: {\n actions: assign({ lastError: undefined }),\n target: \"retrieving_history\",\n },\n },\n },\n retrieving_history: {\n description: \"Retrieving latest copy of conversation history\",\n invoke: {\n input: ({ context }) => ({ conversationId: context.conversationId! }),\n onDone: [\n {\n actions: assign({\n conversationSnapshot: ({ context, event }) =>\n AgentConversation.reduceChatEvents(\n context.conversationSnapshot,\n event.output.history.data,\n ),\n currentRunId: ({ event }) => event.output.conversation.currentRunId,\n receivedEndOfStream: false,\n streamRetryCount: 0,\n }),\n guard: ({ event }) => !!event.output.conversation.currentRunId,\n target: \"streaming\",\n },\n {\n actions: assign({\n conversationSnapshot: ({ context, event }) =>\n AgentConversation.reduceChatEvents(\n context.conversationSnapshot,\n event.output.history.data,\n ),\n currentRunId: ({ event }) => event.output.conversation.currentRunId,\n ...STREAM_STATE_RESET,\n }),\n target: \"idle\",\n },\n ],\n onError: [\n {\n guard: ({ event }) => {\n const e = event.error as Error & { code?: string };\n if (e?.name === \"TimeoutError\") return false;\n return (\n e?.name === \"AbortError\" ||\n e?.message?.includes(\"aborted\") ||\n e?.code === \"ABORT_ERR\"\n );\n },\n target: \"uninitialized\",\n },\n {\n guard: ({ context }) => context.streamRetryCount > 0,\n target: \"stream_interrupted\",\n },\n {\n actions: [\n assign({\n lastError: ({ event }) => event.error,\n }),\n emit(({ event }) => ({\n error: event.error as HttpError,\n type: \"apiError\",\n })),\n ],\n target: \"retrieve_history_failed\",\n },\n ],\n src: \"retrieveState\",\n },\n },\n stream_interrupted: {\n after: {\n STREAM_RETRY_DELAY: [\n {\n actions: assign({\n streamRetryCount: ({ context }) => context.streamRetryCount + 1,\n }),\n guard: ({ context }) => context.streamRetryCount < MAX_STREAM_RETRIES,\n target: \"retrieving_history\",\n },\n {\n target: \"stream_recovery_failed\",\n },\n ],\n },\n },\n stream_recovery_failed: {\n on: {\n REFRESH_HISTORY: {\n actions: assign({ lastError: undefined, streamRetryCount: 0 }),\n target: \"retrieving_history\",\n },\n },\n },\n streaming: {\n description: \"Manages monitoring and canceling the current run\",\n initial: \"monitoring_replies\",\n invoke: {\n input: ({ context }) => {\n if (!context.currentRunId) {\n throw new Error(\"Attempted to stream without a runId\");\n }\n return {\n conversationId: context.conversationId!,\n runId: context.currentRunId,\n };\n },\n onDone: [\n {\n actions: assign({ currentRunId: null, userRequestedStop: false }),\n guard: ({ context }) => !!context.receivedEndOfStream || !!context.userRequestedStop,\n target: \"idle\",\n },\n {\n actions: assign({ currentRunId: null }),\n target: \"stream_interrupted\",\n },\n ],\n onError: [\n {\n actions: assign({ currentRunId: null, userRequestedStop: false }),\n guard: ({ context }) => !!context.receivedEndOfStream || !!context.userRequestedStop,\n target: \"idle\",\n },\n {\n actions: assign({ currentRunId: null }),\n target: \"stream_interrupted\",\n },\n ],\n onSnapshot: {\n actions: enqueueActions(({ context, enqueue, event }) => {\n const chatEvent = event.snapshot.context;\n if (!chatEvent) {\n return;\n }\n\n if (chatEvent.content.chunkType === \"endOfStream\" && !context.receivedEndOfStream) {\n enqueue.assign({ receivedEndOfStream: true });\n }\n\n const nextSnapshot = AgentConversation.reduceChatEvents(\n context.conversationSnapshot,\n [chatEvent],\n );\n\n enqueue.assign({\n conversationSnapshot: nextSnapshot,\n });\n enqueue.emit({\n chatEvent,\n type: \"chatEventReceived\",\n });\n }),\n },\n src: \"streamRun\",\n },\n states: {\n monitoring_replies: {\n description: \"Attached to the run event stream\",\n on: {\n STOP_RUN: {\n actions: assign({ userRequestedStop: true }),\n target: \"stopping\",\n },\n },\n },\n stopping: {\n description: \"Background cancelation of the run stream\",\n invoke: {\n input: ({ context }) => ({\n conversationId: context.conversationId!,\n runId: context.currentRunId!,\n }),\n onDone: {\n actions: assign({ currentRunId: undefined, userRequestedStop: false }),\n target: \"#agentConversation.idle\",\n },\n onError: {\n actions: assign({ userRequestedStop: false }),\n target: \"#agentConversation.retrieving_history\",\n },\n src: \"stopRun\",\n },\n },\n },\n },\n submitting_message: {\n description: \"Submitting message to start a new reply stream\",\n invoke: {\n input: ({ context, event }) => {\n switch (event.type) {\n case \"RETRY_MESSAGE\":\n if (!context.messageAttempt) {\n throw new Error(\"Tried to resubmit nonexistent message\");\n }\n return {\n conversationId: context.conversationId!,\n message: context.messageAttempt,\n };\n case \"SUBMIT_USER_MESSAGE\":\n return {\n conversationId: context.conversationId!,\n message: event.message,\n };\n }\n throw new Error(`Unexpected event type received in submitting_message: ${event.type}`);\n },\n onDone: {\n actions: assign({\n // Add the message attempt into the snapshot manually\n conversationSnapshot: ({ context, event }) => [\n ...(context.conversationSnapshot ?? []),\n {\n id: event.output.currentRunId,\n messages: new Map(),\n submittedUserMessage: context.messageAttempt || undefined,\n toolCalls: new Map(),\n } satisfies ConversationExchange,\n ],\n currentRunId: ({ event }) => event.output.currentRunId,\n messageAttempt: undefined,\n ...STREAM_STATE_RESET,\n }),\n target: \"streaming\",\n },\n onError: {\n actions: [\n assign({\n currentRunId: () => null,\n lastError: ({ event }) => event.error,\n }),\n emit(({ event }) => ({\n error: event.error as HttpError,\n type: \"apiError\",\n })),\n ],\n target: \"submitting_message_failed\",\n },\n src: \"startRun\",\n },\n },\n submitting_message_failed: {\n description: \"Failed to submit message\",\n on: {\n REFRESH_HISTORY: {\n actions: assign({ lastError: undefined }),\n target: \"retrieving_history\",\n },\n RETRY_MESSAGE: {\n actions: assign({ lastError: undefined }),\n target: \"submitting_message\",\n },\n SUBMIT_USER_MESSAGE: {\n actions: assign({\n lastError: undefined,\n messageAttempt: ({ event }) => event.message,\n }),\n target: \"submitting_message\",\n },\n },\n },\n uninitialized: {\n always: {\n guard: ({ context }) => !!context.conversationId,\n target: \"retrieving_history\",\n },\n description:\n \"Entry state that the machine remains in when no conversation has been provided\",\n on: {\n SUBMIT_USER_MESSAGE: {\n actions: assign({\n messageAttempt: ({ event }) => event.message,\n }),\n target: \"creating_conversation\",\n },\n },\n },\n },\n });\n\nexport type AgentConversationMachine = ReturnType<typeof createConversationMachine>;\n"]}
|
|
@@ -52,6 +52,18 @@ export declare const retrieveConversationHistory: (config: SonarV4Config) => (id
|
|
|
52
52
|
chunkType: "interrupt";
|
|
53
53
|
};
|
|
54
54
|
role: "agent";
|
|
55
|
+
} | {
|
|
56
|
+
conversationId: string;
|
|
57
|
+
modelName: string;
|
|
58
|
+
modelProviderId: string;
|
|
59
|
+
runId: string;
|
|
60
|
+
createdAt: import("temporal-polyfill").Temporal.Instant;
|
|
61
|
+
id: string;
|
|
62
|
+
content: {
|
|
63
|
+
chunkType: "contextUsage";
|
|
64
|
+
contextUsagePercentage: number;
|
|
65
|
+
};
|
|
66
|
+
role: "agent";
|
|
55
67
|
} | {
|
|
56
68
|
conversationId: string;
|
|
57
69
|
modelName: string;
|
package/dist-iife/cloud.js
CHANGED
|
@@ -3330,6 +3330,7 @@ var DremioCloud = (() => {
|
|
|
3330
3330
|
fromPat: () => fromPat,
|
|
3331
3331
|
fromRefreshToken: () => fromRefreshToken,
|
|
3332
3332
|
fromTextEventStream: () => fromTextEventStream,
|
|
3333
|
+
fromTextEventStreamActivity: () => fromTextEventStreamActivity,
|
|
3333
3334
|
fromUsernamePassword: () => fromUsernamePassword,
|
|
3334
3335
|
isToolRequest: () => isToolRequest,
|
|
3335
3336
|
isToolResult: () => isToolResult
|
|
@@ -9735,6 +9736,34 @@ var DremioCloud = (() => {
|
|
|
9735
9736
|
bigint: "bigint",
|
|
9736
9737
|
object: "date"
|
|
9737
9738
|
};
|
|
9739
|
+
var $ZodCheckLessThan = /* @__PURE__ */ $constructor("$ZodCheckLessThan", (inst, def) => {
|
|
9740
|
+
$ZodCheck.init(inst, def);
|
|
9741
|
+
const origin = numericOriginMap[typeof def.value];
|
|
9742
|
+
inst._zod.onattach.push((inst2) => {
|
|
9743
|
+
const bag = inst2._zod.bag;
|
|
9744
|
+
const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;
|
|
9745
|
+
if (def.value < curr) {
|
|
9746
|
+
if (def.inclusive)
|
|
9747
|
+
bag.maximum = def.value;
|
|
9748
|
+
else
|
|
9749
|
+
bag.exclusiveMaximum = def.value;
|
|
9750
|
+
}
|
|
9751
|
+
});
|
|
9752
|
+
inst._zod.check = (payload) => {
|
|
9753
|
+
if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {
|
|
9754
|
+
return;
|
|
9755
|
+
}
|
|
9756
|
+
payload.issues.push({
|
|
9757
|
+
origin,
|
|
9758
|
+
code: "too_big",
|
|
9759
|
+
maximum: def.value,
|
|
9760
|
+
input: payload.value,
|
|
9761
|
+
inclusive: def.inclusive,
|
|
9762
|
+
inst,
|
|
9763
|
+
continue: !def.abort
|
|
9764
|
+
});
|
|
9765
|
+
};
|
|
9766
|
+
});
|
|
9738
9767
|
var $ZodCheckGreaterThan = /* @__PURE__ */ $constructor("$ZodCheckGreaterThan", (inst, def) => {
|
|
9739
9768
|
$ZodCheck.init(inst, def);
|
|
9740
9769
|
const origin = numericOriginMap[typeof def.value];
|
|
@@ -10879,6 +10908,14 @@ var DremioCloud = (() => {
|
|
|
10879
10908
|
...normalizeParams(params)
|
|
10880
10909
|
});
|
|
10881
10910
|
}
|
|
10911
|
+
function _lte(value, params) {
|
|
10912
|
+
return new $ZodCheckLessThan({
|
|
10913
|
+
check: "less_than",
|
|
10914
|
+
...normalizeParams(params),
|
|
10915
|
+
value,
|
|
10916
|
+
inclusive: true
|
|
10917
|
+
});
|
|
10918
|
+
}
|
|
10882
10919
|
function _gte(value, params) {
|
|
10883
10920
|
return new $ZodCheckGreaterThan({
|
|
10884
10921
|
check: "greater_than",
|
|
@@ -14525,6 +14562,16 @@ var DremioCloud = (() => {
|
|
|
14525
14562
|
});
|
|
14526
14563
|
}
|
|
14527
14564
|
|
|
14565
|
+
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/filter.js
|
|
14566
|
+
function filter(predicate, thisArg) {
|
|
14567
|
+
return operate(function(source, subscriber) {
|
|
14568
|
+
var index = 0;
|
|
14569
|
+
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
|
|
14570
|
+
return predicate.call(thisArg, value, index++) && subscriber.next(value);
|
|
14571
|
+
}));
|
|
14572
|
+
});
|
|
14573
|
+
}
|
|
14574
|
+
|
|
14528
14575
|
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/catchError.js
|
|
14529
14576
|
function catchError(selector) {
|
|
14530
14577
|
return operate(function(source, subscriber) {
|
|
@@ -15685,29 +15732,29 @@ var DremioCloud = (() => {
|
|
|
15685
15732
|
user: set(string2().check(_trim(), _minLength(1)))
|
|
15686
15733
|
}));
|
|
15687
15734
|
function mapParams(params) {
|
|
15688
|
-
const
|
|
15735
|
+
const filter2 = [];
|
|
15689
15736
|
if (params.contains) {
|
|
15690
|
-
|
|
15737
|
+
filter2.push(`*=contains=${JSON.stringify(params.contains)}`);
|
|
15691
15738
|
}
|
|
15692
15739
|
if (params.queryType?.size) {
|
|
15693
|
-
|
|
15740
|
+
filter2.push(`(${Array.from(params.queryType).map((v2) => `qt=="${v2}"`).join(",")})`);
|
|
15694
15741
|
}
|
|
15695
15742
|
if (params.status?.size) {
|
|
15696
|
-
|
|
15743
|
+
filter2.push(`(${Array.from(params.status).map((v2) => `jst=="${v2}"`).join(",")})`);
|
|
15697
15744
|
}
|
|
15698
15745
|
if (params.user?.size) {
|
|
15699
|
-
|
|
15746
|
+
filter2.push(`(${Array.from(params.user).map((v2) => `usr=="${v2}"`).join(",")})`);
|
|
15700
15747
|
}
|
|
15701
15748
|
if (params.dateRange?.start) {
|
|
15702
15749
|
const { end, start } = params.dateRange;
|
|
15703
|
-
|
|
15750
|
+
filter2.push(`(${[
|
|
15704
15751
|
start && `st=gt=${start.epochMilliseconds}`,
|
|
15705
15752
|
end && `st=lt=${end.epochMilliseconds}`
|
|
15706
15753
|
].join(";")})`);
|
|
15707
15754
|
}
|
|
15708
15755
|
return {
|
|
15709
15756
|
detailLevel: "1",
|
|
15710
|
-
filter,
|
|
15757
|
+
filter: filter2,
|
|
15711
15758
|
order: params.sort ? params.sort.direction === "DESC" ? "DESCENDING" : "ASCENDING" : void 0,
|
|
15712
15759
|
sort: params.sort ? fieldToV2Mapping[params.sort.field] : void 0
|
|
15713
15760
|
};
|
|
@@ -17251,6 +17298,10 @@ var DremioCloud = (() => {
|
|
|
17251
17298
|
toolExecutionId: string2(),
|
|
17252
17299
|
toolName: string2()
|
|
17253
17300
|
});
|
|
17301
|
+
var contextUsageChunkSchema = object({
|
|
17302
|
+
chunkType: literal("contextUsage"),
|
|
17303
|
+
contextUsagePercentage: number2().check(_gte(0), _lte(100))
|
|
17304
|
+
});
|
|
17254
17305
|
var selectedSkillInfoSchema = object({
|
|
17255
17306
|
id: string2(),
|
|
17256
17307
|
name: string2()
|
|
@@ -17273,6 +17324,7 @@ var DremioCloud = (() => {
|
|
|
17273
17324
|
extend2(errorChunkV2Schema, chatEventSharedSchema),
|
|
17274
17325
|
endOfStreamInputSchema,
|
|
17275
17326
|
extend2(interruptChunkSchema, chatEventSharedSchema),
|
|
17327
|
+
extend2(contextUsageChunkSchema, chatEventSharedSchema),
|
|
17276
17328
|
extend2(conversationUpdateChunkSchema, chatEventSharedSchema),
|
|
17277
17329
|
extend2(jobUpdateChunkSchema, chatEventSharedSchema),
|
|
17278
17330
|
extend2(modelChunkSchema, chatEventSharedSchema),
|
|
@@ -17302,6 +17354,10 @@ var DremioCloud = (() => {
|
|
|
17302
17354
|
content: interruptChunkSchema,
|
|
17303
17355
|
role: literal("agent")
|
|
17304
17356
|
}),
|
|
17357
|
+
extend2(chatEventOutputSharedSchema, {
|
|
17358
|
+
content: contextUsageChunkSchema,
|
|
17359
|
+
role: literal("agent")
|
|
17360
|
+
}),
|
|
17305
17361
|
extend2(chatEventOutputSharedSchema, {
|
|
17306
17362
|
content: jobUpdateChunkSchema,
|
|
17307
17363
|
role: literal("agent")
|
|
@@ -17354,6 +17410,15 @@ var DremioCloud = (() => {
|
|
|
17354
17410
|
runId: v2.runId
|
|
17355
17411
|
};
|
|
17356
17412
|
switch (v2.chunkType) {
|
|
17413
|
+
case "contextUsage":
|
|
17414
|
+
return {
|
|
17415
|
+
...sharedProperties,
|
|
17416
|
+
content: {
|
|
17417
|
+
chunkType: "contextUsage",
|
|
17418
|
+
contextUsagePercentage: v2.contextUsagePercentage
|
|
17419
|
+
},
|
|
17420
|
+
role: "agent"
|
|
17421
|
+
};
|
|
17357
17422
|
case "conversationUpdate":
|
|
17358
17423
|
return {
|
|
17359
17424
|
...sharedProperties,
|
|
@@ -17960,7 +18025,8 @@ var DremioCloud = (() => {
|
|
|
17960
18025
|
};
|
|
17961
18026
|
|
|
17962
18027
|
// dist/common/fromTextEventStream.js
|
|
17963
|
-
var fromTextEventStream = (input) =>
|
|
18028
|
+
var fromTextEventStream = (input) => fromTextEventStreamActivity(input).pipe(filter((activity) => activity.type === "event"), map((activity) => activity.event));
|
|
18029
|
+
var fromTextEventStreamActivity = (input) => new Observable((subscriber) => {
|
|
17964
18030
|
const controller = new AbortController();
|
|
17965
18031
|
const { signal } = controller;
|
|
17966
18032
|
input({ signal }).then(async (response) => {
|
|
@@ -17973,7 +18039,13 @@ var DremioCloud = (() => {
|
|
|
17973
18039
|
if (!response.body) {
|
|
17974
18040
|
throw new Error(`Response body was undefined`);
|
|
17975
18041
|
}
|
|
17976
|
-
return response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream(
|
|
18042
|
+
return response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream({
|
|
18043
|
+
onComment(comment) {
|
|
18044
|
+
if (!signal.aborted) {
|
|
18045
|
+
subscriber.next({ comment, type: "comment" });
|
|
18046
|
+
}
|
|
18047
|
+
}
|
|
18048
|
+
}));
|
|
17977
18049
|
}).then(async (readableStream) => {
|
|
17978
18050
|
const reader = readableStream.getReader();
|
|
17979
18051
|
while (!signal.aborted) {
|
|
@@ -17985,7 +18057,7 @@ var DremioCloud = (() => {
|
|
|
17985
18057
|
subscriber.complete();
|
|
17986
18058
|
break;
|
|
17987
18059
|
}
|
|
17988
|
-
subscriber.next(value);
|
|
18060
|
+
subscriber.next({ event: value, type: "event" });
|
|
17989
18061
|
}
|
|
17990
18062
|
await reader.cancel();
|
|
17991
18063
|
}).catch((e2) => {
|
|
@@ -23094,7 +23166,7 @@ ${err.message}`);
|
|
|
23094
23166
|
|
|
23095
23167
|
// dist/enterprise/ai/conversations/createConversationMachine.js
|
|
23096
23168
|
var RETRIEVE_STATE_TIMEOUT_MS = 1e4;
|
|
23097
|
-
var STREAM_IDLE_TIMEOUT_MS =
|
|
23169
|
+
var STREAM_IDLE_TIMEOUT_MS = 15e3;
|
|
23098
23170
|
var STREAM_RETRY_DELAY_MS = 2500;
|
|
23099
23171
|
var MAX_STREAM_RETRIES = 5;
|
|
23100
23172
|
var STREAM_STATE_RESET = {
|
|
@@ -23154,7 +23226,7 @@ ${err.message}`);
|
|
|
23154
23226
|
}
|
|
23155
23227
|
return result.value;
|
|
23156
23228
|
})),
|
|
23157
|
-
streamRun: fromObservable(({ input }) =>
|
|
23229
|
+
streamRun: fromObservable(({ input }) => fromTextEventStreamActivity(({ signal }) => streamRunEvents(config3)({ conversationId: input.conversationId, runId: input.runId }, { signal })).pipe(timeout({ each: STREAM_IDLE_TIMEOUT_MS }), filter((activity) => activity.type === "event"), map(({ event }) => decode(chatEventCodec, JSON.parse(event.data)))))
|
|
23158
23230
|
},
|
|
23159
23231
|
delays: {
|
|
23160
23232
|
STREAM_RETRY_DELAY: STREAM_RETRY_DELAY_MS
|
|
@@ -23263,7 +23335,8 @@ ${err.message}`);
|
|
|
23263
23335
|
actions: assign({
|
|
23264
23336
|
conversationSnapshot: ({ context: context2, event }) => AgentConversation.reduceChatEvents(context2.conversationSnapshot, event.output.history.data),
|
|
23265
23337
|
currentRunId: ({ event }) => event.output.conversation.currentRunId,
|
|
23266
|
-
receivedEndOfStream: false
|
|
23338
|
+
receivedEndOfStream: false,
|
|
23339
|
+
streamRetryCount: 0
|
|
23267
23340
|
}),
|
|
23268
23341
|
guard: ({ event }) => !!event.output.conversation.currentRunId,
|
|
23269
23342
|
target: "streaming"
|
package/dist-iife/community.js
CHANGED
|
@@ -3298,6 +3298,7 @@ var DremioCommunity = (() => {
|
|
|
3298
3298
|
TagVersionReference: () => TagVersionReference,
|
|
3299
3299
|
ValidationProblem: () => ValidationProblem,
|
|
3300
3300
|
fromTextEventStream: () => fromTextEventStream,
|
|
3301
|
+
fromTextEventStreamActivity: () => fromTextEventStreamActivity,
|
|
3301
3302
|
fromUsernamePassword: () => fromUsernamePassword
|
|
3302
3303
|
});
|
|
3303
3304
|
|
|
@@ -10539,6 +10540,16 @@ var DremioCommunity = (() => {
|
|
|
10539
10540
|
});
|
|
10540
10541
|
}
|
|
10541
10542
|
|
|
10543
|
+
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/filter.js
|
|
10544
|
+
function filter(predicate, thisArg) {
|
|
10545
|
+
return operate(function(source, subscriber) {
|
|
10546
|
+
var index = 0;
|
|
10547
|
+
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
|
|
10548
|
+
return predicate.call(thisArg, value, index++) && subscriber.next(value);
|
|
10549
|
+
}));
|
|
10550
|
+
});
|
|
10551
|
+
}
|
|
10552
|
+
|
|
10542
10553
|
// node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/repeat.js
|
|
10543
10554
|
function repeat(countOrConfig) {
|
|
10544
10555
|
var _a;
|
|
@@ -12825,29 +12836,29 @@ var DremioCommunity = (() => {
|
|
|
12825
12836
|
user: set(string2().check(_trim(), _minLength(1)))
|
|
12826
12837
|
}));
|
|
12827
12838
|
function mapParams(params) {
|
|
12828
|
-
const
|
|
12839
|
+
const filter2 = [];
|
|
12829
12840
|
if (params.contains) {
|
|
12830
|
-
|
|
12841
|
+
filter2.push(`*=contains=${JSON.stringify(params.contains)}`);
|
|
12831
12842
|
}
|
|
12832
12843
|
if (params.queryType?.size) {
|
|
12833
|
-
|
|
12844
|
+
filter2.push(`(${Array.from(params.queryType).map((v2) => `qt=="${v2}"`).join(",")})`);
|
|
12834
12845
|
}
|
|
12835
12846
|
if (params.status?.size) {
|
|
12836
|
-
|
|
12847
|
+
filter2.push(`(${Array.from(params.status).map((v2) => `jst=="${v2}"`).join(",")})`);
|
|
12837
12848
|
}
|
|
12838
12849
|
if (params.user?.size) {
|
|
12839
|
-
|
|
12850
|
+
filter2.push(`(${Array.from(params.user).map((v2) => `usr=="${v2}"`).join(",")})`);
|
|
12840
12851
|
}
|
|
12841
12852
|
if (params.dateRange?.start) {
|
|
12842
12853
|
const { end, start } = params.dateRange;
|
|
12843
|
-
|
|
12854
|
+
filter2.push(`(${[
|
|
12844
12855
|
start && `st=gt=${start.epochMilliseconds}`,
|
|
12845
12856
|
end && `st=lt=${end.epochMilliseconds}`
|
|
12846
12857
|
].join(";")})`);
|
|
12847
12858
|
}
|
|
12848
12859
|
return {
|
|
12849
12860
|
detailLevel: "1",
|
|
12850
|
-
filter,
|
|
12861
|
+
filter: filter2,
|
|
12851
12862
|
order: params.sort ? params.sort.direction === "DESC" ? "DESCENDING" : "ASCENDING" : void 0,
|
|
12852
12863
|
sort: params.sort ? fieldToV2Mapping[params.sort.field] : void 0
|
|
12853
12864
|
};
|
|
@@ -13693,7 +13704,8 @@ var DremioCommunity = (() => {
|
|
|
13693
13704
|
};
|
|
13694
13705
|
|
|
13695
13706
|
// dist/common/fromTextEventStream.js
|
|
13696
|
-
var fromTextEventStream = (input) =>
|
|
13707
|
+
var fromTextEventStream = (input) => fromTextEventStreamActivity(input).pipe(filter((activity) => activity.type === "event"), map((activity) => activity.event));
|
|
13708
|
+
var fromTextEventStreamActivity = (input) => new Observable((subscriber) => {
|
|
13697
13709
|
const controller = new AbortController();
|
|
13698
13710
|
const { signal } = controller;
|
|
13699
13711
|
input({ signal }).then(async (response) => {
|
|
@@ -13706,7 +13718,13 @@ var DremioCommunity = (() => {
|
|
|
13706
13718
|
if (!response.body) {
|
|
13707
13719
|
throw new Error(`Response body was undefined`);
|
|
13708
13720
|
}
|
|
13709
|
-
return response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream(
|
|
13721
|
+
return response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream({
|
|
13722
|
+
onComment(comment) {
|
|
13723
|
+
if (!signal.aborted) {
|
|
13724
|
+
subscriber.next({ comment, type: "comment" });
|
|
13725
|
+
}
|
|
13726
|
+
}
|
|
13727
|
+
}));
|
|
13710
13728
|
}).then(async (readableStream) => {
|
|
13711
13729
|
const reader = readableStream.getReader();
|
|
13712
13730
|
while (!signal.aborted) {
|
|
@@ -13718,7 +13736,7 @@ var DremioCommunity = (() => {
|
|
|
13718
13736
|
subscriber.complete();
|
|
13719
13737
|
break;
|
|
13720
13738
|
}
|
|
13721
|
-
subscriber.next(value);
|
|
13739
|
+
subscriber.next({ event: value, type: "event" });
|
|
13722
13740
|
}
|
|
13723
13741
|
await reader.cancel();
|
|
13724
13742
|
}).catch((e2) => {
|