@dremio/js-sdk 0.39.1 → 0.40.1

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 (74) hide show
  1. package/dist/cloud/ai/AIResource.d.ts +2 -2
  2. package/dist/cloud/ai/AIResource.js +2 -2
  3. package/dist/cloud/ai/AIResource.js.map +1 -1
  4. package/dist/cloud/ai/index.d.ts +1 -1
  5. package/dist/cloud/ai/index.js +1 -1
  6. package/dist/cloud/ai/index.js.map +1 -1
  7. package/dist/cloud/ai/modelProviderCodec.d.ts +1 -1
  8. package/dist/cloud/ai/modelProviderCodec.js +1 -1
  9. package/dist/cloud/ai/modelProviderCodec.js.map +1 -1
  10. package/dist/enterprise/ai/AIResource.d.ts +4 -4
  11. package/dist/enterprise/ai/AIResource.js +4 -4
  12. package/dist/enterprise/ai/AIResource.js.map +1 -1
  13. package/dist/enterprise/ai/chat/ChatSession.d.ts +22 -7
  14. package/dist/enterprise/ai/chat/ChatSession.js +57 -22
  15. package/dist/enterprise/ai/chat/ChatSession.js.map +1 -1
  16. package/dist/enterprise/ai/chat/ChatSessionClient.d.ts +1 -4
  17. package/dist/enterprise/ai/chat/ChatSessionClient.js +9 -12
  18. package/dist/enterprise/ai/chat/ChatSessionClient.js.map +1 -1
  19. package/dist/enterprise/ai/chat/eventWrappers/AgentChatExchange.d.ts +1 -1
  20. package/dist/enterprise/ai/chat/eventWrappers/AgentChatExchange.js.map +1 -1
  21. package/dist/enterprise/ai/chat/{AgentChatPartialResponse.d.ts → eventWrappers/AgentChatPartialResponse.d.ts} +9 -3
  22. package/dist/enterprise/ai/chat/{AgentChatPartialResponse.js → eventWrappers/AgentChatPartialResponse.js} +1 -1
  23. package/dist/enterprise/ai/chat/eventWrappers/AgentChatPartialResponse.js.map +1 -0
  24. package/dist/enterprise/ai/chat/{AgentChatResponse.d.ts → eventWrappers/AgentChatResponse.d.ts} +5 -5
  25. package/dist/enterprise/ai/chat/{AgentChatResponse.js → eventWrappers/AgentChatResponse.js} +10 -10
  26. package/dist/enterprise/ai/chat/eventWrappers/AgentChatResponse.js.map +1 -0
  27. package/dist/enterprise/ai/chat/eventWrappers/AgentToolCall.d.ts +3 -3
  28. package/dist/enterprise/ai/chat/eventWrappers/AgentToolCall.js +3 -3
  29. package/dist/enterprise/ai/chat/eventWrappers/AgentToolCall.js.map +1 -1
  30. package/dist/enterprise/ai/chat/eventWrappers/AgentToolCallGroup.d.ts +3 -3
  31. package/dist/enterprise/ai/chat/eventWrappers/AgentToolCallGroup.js.map +1 -1
  32. package/dist/enterprise/ai/chat/index.d.ts +6 -6
  33. package/dist/enterprise/ai/chat/index.js +6 -6
  34. package/dist/enterprise/ai/chat/index.js.map +1 -1
  35. package/dist/enterprise/ai/chat/methods/sendChatMessage.d.ts +2 -2
  36. package/dist/enterprise/ai/chat/methods/sendChatMessage.js +3 -3
  37. package/dist/enterprise/ai/chat/methods/sendChatMessage.js.map +1 -1
  38. package/dist/enterprise/ai/chat/responseContent/AgentErrorResponseContent.js.map +1 -0
  39. package/dist/enterprise/ai/chat/responseContent/AgentModelResponseContent.js.map +1 -0
  40. package/dist/enterprise/ai/chat/responseContent/AgentToolRequestResponseContent.js.map +1 -0
  41. package/dist/enterprise/ai/chat/responseContent/AgentToolResultResponseContent.js.map +1 -0
  42. package/dist/enterprise/ai/index.d.ts +1 -1
  43. package/dist/enterprise/ai/index.js +1 -1
  44. package/dist/enterprise/ai/index.js.map +1 -1
  45. package/dist/enterprise/ai/{ModelProvider.d.ts → modelProvider/ModelProvider.d.ts} +5 -5
  46. package/dist/enterprise/ai/{ModelProvider.js → modelProvider/ModelProvider.js} +1 -1
  47. package/dist/enterprise/ai/modelProvider/ModelProvider.js.map +1 -0
  48. package/dist/enterprise/ai/modelProvider/modelProviderCodec.js.map +1 -0
  49. package/dist/enterprise/ai/modelProvider/modelProviderConfigSchemas.js.map +1 -0
  50. package/dist-iife/cloud.js +16119 -0
  51. package/dist-iife/community.js +13750 -0
  52. package/dist-iife/enterprise.js +17041 -0
  53. package/package.json +23 -7
  54. package/dist/enterprise/ai/ModelProvider.js.map +0 -1
  55. package/dist/enterprise/ai/chat/AgentChatPartialResponse.js.map +0 -1
  56. package/dist/enterprise/ai/chat/AgentChatResponse.js.map +0 -1
  57. package/dist/enterprise/ai/chat/AgentErrorResponseContent.js.map +0 -1
  58. package/dist/enterprise/ai/chat/AgentModelResponseContent.js.map +0 -1
  59. package/dist/enterprise/ai/chat/AgentToolRequestResponseContent.js.map +0 -1
  60. package/dist/enterprise/ai/chat/AgentToolResultResponseContent.js.map +0 -1
  61. package/dist/enterprise/ai/modelProviderCodec.js.map +0 -1
  62. package/dist/enterprise/ai/modelProviderConfigSchemas.js.map +0 -1
  63. /package/dist/enterprise/ai/chat/{AgentErrorResponseContent.d.ts → responseContent/AgentErrorResponseContent.d.ts} +0 -0
  64. /package/dist/enterprise/ai/chat/{AgentErrorResponseContent.js → responseContent/AgentErrorResponseContent.js} +0 -0
  65. /package/dist/enterprise/ai/chat/{AgentModelResponseContent.d.ts → responseContent/AgentModelResponseContent.d.ts} +0 -0
  66. /package/dist/enterprise/ai/chat/{AgentModelResponseContent.js → responseContent/AgentModelResponseContent.js} +0 -0
  67. /package/dist/enterprise/ai/chat/{AgentToolRequestResponseContent.d.ts → responseContent/AgentToolRequestResponseContent.d.ts} +0 -0
  68. /package/dist/enterprise/ai/chat/{AgentToolRequestResponseContent.js → responseContent/AgentToolRequestResponseContent.js} +0 -0
  69. /package/dist/enterprise/ai/chat/{AgentToolResultResponseContent.d.ts → responseContent/AgentToolResultResponseContent.d.ts} +0 -0
  70. /package/dist/enterprise/ai/chat/{AgentToolResultResponseContent.js → responseContent/AgentToolResultResponseContent.js} +0 -0
  71. /package/dist/enterprise/ai/{modelProviderCodec.d.ts → modelProvider/modelProviderCodec.d.ts} +0 -0
  72. /package/dist/enterprise/ai/{modelProviderCodec.js → modelProvider/modelProviderCodec.js} +0 -0
  73. /package/dist/enterprise/ai/{modelProviderConfigSchemas.d.ts → modelProvider/modelProviderConfigSchemas.d.ts} +0 -0
  74. /package/dist/enterprise/ai/{modelProviderConfigSchemas.js → modelProvider/modelProviderConfigSchemas.js} +0 -0
@@ -1,13 +1,13 @@
1
1
  import { ChatSession } from "../../enterprise/ai/chat/ChatSession.ts";
2
2
  import type { UserChatMessage } from "../../enterprise/ai/chat/UserChatMessage.ts";
3
3
  import type { Logger, SonarV4Config, V4Config } from "../../common/Config.ts";
4
- import { ModelProvider } from "../../enterprise/ai/ModelProvider.ts";
4
+ import { ModelProvider } from "../../enterprise/ai/modelProvider/ModelProvider.ts";
5
5
  import * as z from "zod/mini";
6
6
  import { modelProviderCreateCodec } from "./modelProviderCodec.js";
7
7
  import { DremioModelProvider } from "./DremioModelProvider.ts";
8
8
  import { listAvailableModels } from "../../enterprise/ai/AIResource.ts";
9
9
  import type { SignalParam } from "../../common/Params.ts";
10
- import type { AgentChatResponse, AgentResponseContent } from "../../enterprise/ai/chat/AgentChatResponse.ts";
10
+ import type { AgentChatResponse, AgentResponseContent } from "../../enterprise/ai/chat/eventWrappers/AgentChatResponse.ts";
11
11
  import { type Observable } from "rxjs";
12
12
  import { AgentChatExchange } from "../../enterprise/ai/chat/eventWrappers/AgentChatExchange.ts";
13
13
  import { ChatSessionClient } from "../../enterprise/ai/chat/ChatSessionClient.ts";
@@ -14,10 +14,10 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { ChatSession } from "../../enterprise/ai/chat/ChatSession.js";
17
- import { ModelProvider } from "../../enterprise/ai/ModelProvider.js";
17
+ import { ModelProvider } from "../../enterprise/ai/modelProvider/ModelProvider.js";
18
18
  import * as z from "zod/mini";
19
19
  import { dremioProvidedSchema, modelProviderCreateCodec, modelProviderRetrieveCodec, safeDecodeModelProvider, } from "./modelProviderCodec.js";
20
- import { modelProviderRetrieveCodec as baseModelProviderRetrieveCodec } from "../../enterprise/ai/modelProviderCodec.js";
20
+ import { modelProviderRetrieveCodec as baseModelProviderRetrieveCodec } from "../../enterprise/ai/modelProvider/modelProviderCodec.js";
21
21
  import { DremioModelProvider } from "./DremioModelProvider.js";
22
22
  import { safeParseResultToResult } from "../../common/safeParseResultToResult.js";
23
23
  import { listAvailableModels } from "../../enterprise/ai/AIResource.js";
@@ -1 +1 @@
1
- {"version":3,"file":"AIResource.js","sourceRoot":"","sources":["../../../src/cloud/ai/AIResource.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 { ChatSession } from \"../../enterprise/ai/chat/ChatSession.ts\";\nimport type { UserChatMessage } from \"../../enterprise/ai/chat/UserChatMessage.ts\";\nimport type { Logger, SonarV4Config, V4Config } from \"../../common/Config.ts\";\nimport { ModelProvider } from \"../../enterprise/ai/ModelProvider.ts\";\nimport * as z from \"zod/mini\";\nimport {\n dremioProvidedSchema,\n modelProviderCreateCodec,\n modelProviderRetrieveCodec,\n safeDecodeModelProvider,\n type SafeDecodeResultWithoutDremioLLM,\n} from \"./modelProviderCodec.js\";\nimport { modelProviderRetrieveCodec as baseModelProviderRetrieveCodec } from \"../../enterprise/ai/modelProviderCodec.ts\";\nimport { DremioModelProvider } from \"./DremioModelProvider.ts\";\nimport { safeParseResultToResult } from \"../../common/safeParseResultToResult.ts\";\nimport { listAvailableModels } from \"../../enterprise/ai/AIResource.ts\";\nimport type { SignalParam } from \"../../common/Params.ts\";\nimport { createSendChatMessage } from \"../../enterprise/ai/chat/methods/sendChatMessage.ts\";\nimport type {\n AgentChatResponse,\n AgentResponseContent,\n} from \"../../enterprise/ai/chat/AgentChatResponse.ts\";\nimport {\n catchError,\n concatMap,\n endWith,\n map,\n of,\n scan,\n share,\n startWith,\n type Observable,\n} from \"rxjs\";\nimport { AgentEndTurn } from \"../../enterprise/ai/chat/eventWrappers/AgentEndTurn.ts\";\nimport { AgentChatExchange } from \"../../enterprise/ai/chat/eventWrappers/AgentChatExchange.ts\";\nimport { ChatSessionClient } from \"../../enterprise/ai/chat/ChatSessionClient.ts\";\n\nexport class AIResource {\n #config: Logger & V4Config & SonarV4Config;\n\n constructor(config: Logger & V4Config & SonarV4Config) {\n this.#config = config;\n }\n\n createModelProvider(properties: z.output<typeof modelProviderCreateCodec>) {\n const body = z.encode(modelProviderCreateCodec, properties);\n return this.#config\n .v4Request(`model-provider/config`, {\n body: JSON.stringify(body),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n keepalive: true,\n method: \"POST\",\n })\n .map((res) => res.json() as Promise<z.input<typeof modelProviderRetrieveCodec>>)\n .andThen(\n (entity) =>\n safeDecodeModelProvider(this.#config, entity) as SafeDecodeResultWithoutDremioLLM,\n );\n }\n\n listModelProviders() {\n const getPage = ({ signal }: SignalParam = {}) => {\n return this.#config\n .v4Request(\"model-provider/config\", {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map(\n (res) => res.json() as Promise<{ configs: z.input<typeof modelProviderRetrieveCodec>[] }>,\n )\n .map((response) => ({\n data: response.configs.map((entity) =>\n safeParseResultToResult(z.safeDecode(modelProviderRetrieveCodec, entity)).map(\n (properties) => {\n if (\"dremioProvided\" in properties.config) {\n return new DremioModelProvider(\n this.#config,\n properties as z.infer<typeof dremioProvidedSchema>,\n );\n }\n return new ModelProvider(\n this.#config,\n properties as z.output<typeof baseModelProviderRetrieveCodec>,\n );\n },\n ),\n ),\n }));\n };\n return {\n async *data({ signal }: SignalParam = {}) {\n yield* (await getPage({ signal }).promise).map((response) => response.data).unwrap();\n },\n getPage,\n };\n }\n\n listAvailableModels(...args: Parameters<ReturnType<typeof listAvailableModels>>) {\n return listAvailableModels(this.#config)(...args);\n }\n\n retrieveModelProvider(id: string) {\n return this.#config\n .v4Request(`model-provider/config/${id}`, {\n headers: {\n Accept: \"application/json\",\n },\n })\n .map((res) => res.json() as Promise<z.input<typeof modelProviderRetrieveCodec>>)\n .andThen((entity) => safeDecodeModelProvider(this.#config, entity));\n }\n\n /**\n * Sends a chat message to the Dremio AI Agent and returns an Observable containing\n * Agent replies.\n */\n sendChatMessage(chatSession: ChatSession, userChatMessage: UserChatMessage) {\n return createSendChatMessage(this.#config)(chatSession, userChatMessage);\n }\n\n /**\n * Creates an Observable that emits each time the `AgentChatExchange` is updated\n * with events from the Agent.\n */\n createAgentChatExchange$<T extends AgentResponseContent>(\n chatSession: ChatSession,\n userChatMessage: UserChatMessage,\n options: {\n mapChatEvents?: (\n v: AgentChatResponse<AgentResponseContent>,\n ) => Observable<AgentChatResponse<T>>;\n } = {},\n ) {\n const initialAgentChatExchange = new AgentChatExchange(userChatMessage, []);\n\n return this.sendChatMessage(chatSession, userChatMessage).pipe(\n map((eventResult) => eventResult.unwrap()),\n concatMap((agentChatEvent) => options.mapChatEvents?.(agentChatEvent) || of(agentChatEvent)),\n endWith(new AgentEndTurn({ type: \"reply_finished\" })),\n catchError((error: unknown) => of(new AgentEndTurn({ error, type: \"error\" }))),\n scan(\n (agentChatExchange, agentChatEvent) => agentChatExchange._addChatEvent(agentChatEvent),\n initialAgentChatExchange,\n ),\n startWith(initialAgentChatExchange),\n share(),\n );\n }\n\n createChatSessionClient(chatSession: ChatSession) {\n return new ChatSessionClient({\n chatSession,\n createAgentChatExchange$: this.createAgentChatExchange$.bind(this),\n });\n }\n}\n"]}
1
+ {"version":3,"file":"AIResource.js","sourceRoot":"","sources":["../../../src/cloud/ai/AIResource.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 { ChatSession } from \"../../enterprise/ai/chat/ChatSession.ts\";\nimport type { UserChatMessage } from \"../../enterprise/ai/chat/UserChatMessage.ts\";\nimport type { Logger, SonarV4Config, V4Config } from \"../../common/Config.ts\";\nimport { ModelProvider } from \"../../enterprise/ai/modelProvider/ModelProvider.ts\";\nimport * as z from \"zod/mini\";\nimport {\n dremioProvidedSchema,\n modelProviderCreateCodec,\n modelProviderRetrieveCodec,\n safeDecodeModelProvider,\n type SafeDecodeResultWithoutDremioLLM,\n} from \"./modelProviderCodec.js\";\nimport { modelProviderRetrieveCodec as baseModelProviderRetrieveCodec } from \"../../enterprise/ai/modelProvider/modelProviderCodec.ts\";\nimport { DremioModelProvider } from \"./DremioModelProvider.ts\";\nimport { safeParseResultToResult } from \"../../common/safeParseResultToResult.ts\";\nimport { listAvailableModels } from \"../../enterprise/ai/AIResource.ts\";\nimport type { SignalParam } from \"../../common/Params.ts\";\nimport { createSendChatMessage } from \"../../enterprise/ai/chat/methods/sendChatMessage.ts\";\nimport type {\n AgentChatResponse,\n AgentResponseContent,\n} from \"../../enterprise/ai/chat/eventWrappers/AgentChatResponse.ts\";\nimport {\n catchError,\n concatMap,\n endWith,\n map,\n of,\n scan,\n share,\n startWith,\n type Observable,\n} from \"rxjs\";\nimport { AgentEndTurn } from \"../../enterprise/ai/chat/eventWrappers/AgentEndTurn.ts\";\nimport { AgentChatExchange } from \"../../enterprise/ai/chat/eventWrappers/AgentChatExchange.ts\";\nimport { ChatSessionClient } from \"../../enterprise/ai/chat/ChatSessionClient.ts\";\n\nexport class AIResource {\n #config: Logger & V4Config & SonarV4Config;\n\n constructor(config: Logger & V4Config & SonarV4Config) {\n this.#config = config;\n }\n\n createModelProvider(properties: z.output<typeof modelProviderCreateCodec>) {\n const body = z.encode(modelProviderCreateCodec, properties);\n return this.#config\n .v4Request(`model-provider/config`, {\n body: JSON.stringify(body),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n keepalive: true,\n method: \"POST\",\n })\n .map((res) => res.json() as Promise<z.input<typeof modelProviderRetrieveCodec>>)\n .andThen(\n (entity) =>\n safeDecodeModelProvider(this.#config, entity) as SafeDecodeResultWithoutDremioLLM,\n );\n }\n\n listModelProviders() {\n const getPage = ({ signal }: SignalParam = {}) => {\n return this.#config\n .v4Request(\"model-provider/config\", {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map(\n (res) => res.json() as Promise<{ configs: z.input<typeof modelProviderRetrieveCodec>[] }>,\n )\n .map((response) => ({\n data: response.configs.map((entity) =>\n safeParseResultToResult(z.safeDecode(modelProviderRetrieveCodec, entity)).map(\n (properties) => {\n if (\"dremioProvided\" in properties.config) {\n return new DremioModelProvider(\n this.#config,\n properties as z.infer<typeof dremioProvidedSchema>,\n );\n }\n return new ModelProvider(\n this.#config,\n properties as z.output<typeof baseModelProviderRetrieveCodec>,\n );\n },\n ),\n ),\n }));\n };\n return {\n async *data({ signal }: SignalParam = {}) {\n yield* (await getPage({ signal }).promise).map((response) => response.data).unwrap();\n },\n getPage,\n };\n }\n\n listAvailableModels(...args: Parameters<ReturnType<typeof listAvailableModels>>) {\n return listAvailableModels(this.#config)(...args);\n }\n\n retrieveModelProvider(id: string) {\n return this.#config\n .v4Request(`model-provider/config/${id}`, {\n headers: {\n Accept: \"application/json\",\n },\n })\n .map((res) => res.json() as Promise<z.input<typeof modelProviderRetrieveCodec>>)\n .andThen((entity) => safeDecodeModelProvider(this.#config, entity));\n }\n\n /**\n * Sends a chat message to the Dremio AI Agent and returns an Observable containing\n * Agent replies.\n */\n sendChatMessage(chatSession: ChatSession, userChatMessage: UserChatMessage) {\n return createSendChatMessage(this.#config)(chatSession, userChatMessage);\n }\n\n /**\n * Creates an Observable that emits each time the `AgentChatExchange` is updated\n * with events from the Agent.\n */\n createAgentChatExchange$<T extends AgentResponseContent>(\n chatSession: ChatSession,\n userChatMessage: UserChatMessage,\n options: {\n mapChatEvents?: (\n v: AgentChatResponse<AgentResponseContent>,\n ) => Observable<AgentChatResponse<T>>;\n } = {},\n ) {\n const initialAgentChatExchange = new AgentChatExchange(userChatMessage, []);\n\n return this.sendChatMessage(chatSession, userChatMessage).pipe(\n map((eventResult) => eventResult.unwrap()),\n concatMap((agentChatEvent) => options.mapChatEvents?.(agentChatEvent) || of(agentChatEvent)),\n endWith(new AgentEndTurn({ type: \"reply_finished\" })),\n catchError((error: unknown) => of(new AgentEndTurn({ error, type: \"error\" }))),\n scan(\n (agentChatExchange, agentChatEvent) => agentChatExchange._addChatEvent(agentChatEvent),\n initialAgentChatExchange,\n ),\n startWith(initialAgentChatExchange),\n share(),\n );\n }\n\n createChatSessionClient(chatSession: ChatSession) {\n return new ChatSessionClient({\n chatSession,\n createAgentChatExchange$: this.createAgentChatExchange$.bind(this),\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import { DremioModelProvider } from "./DremioModelProvider.ts";
2
- import { ModelProvider } from "../../enterprise/ai/ModelProvider.ts";
2
+ import { ModelProvider } from "../../enterprise/ai/modelProvider/ModelProvider.ts";
3
3
  export { ModelProvider, DremioModelProvider };
4
4
  export * from "../../enterprise/ai/chat/index.ts";
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { DremioModelProvider } from "./DremioModelProvider.js";
17
- import { ModelProvider } from "../../enterprise/ai/ModelProvider.js";
17
+ import { ModelProvider } from "../../enterprise/ai/modelProvider/ModelProvider.js";
18
18
  export { ModelProvider, DremioModelProvider };
19
19
  export * from "../../enterprise/ai/chat/index.js";
20
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cloud/ai/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC;AAC9C,cAAc,mCAAmC,CAAC","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 { DremioModelProvider } from \"./DremioModelProvider.ts\";\nimport { ModelProvider } from \"../../enterprise/ai/ModelProvider.ts\";\nexport { ModelProvider, DremioModelProvider };\nexport * from \"../../enterprise/ai/chat/index.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cloud/ai/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC;AAC9C,cAAc,mCAAmC,CAAC","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 { DremioModelProvider } from \"./DremioModelProvider.ts\";\nimport { ModelProvider } from \"../../enterprise/ai/modelProvider/ModelProvider.ts\";\nexport { ModelProvider, DremioModelProvider };\nexport * from \"../../enterprise/ai/chat/index.ts\";\n"]}
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod/mini";
2
- import { modelProviderCreateCodec, modelProviderUpdateCodec } from "../../enterprise/ai/modelProviderCodec.ts";
2
+ import { modelProviderCreateCodec, modelProviderUpdateCodec } from "../../enterprise/ai/modelProvider/modelProviderCodec.ts";
3
3
  import { Result } from "ts-results-es";
4
4
  import { DremioModelProvider } from "./DremioModelProvider.ts";
5
5
  import type { V4Config } from "../../common/Config.ts";
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import * as z from "zod/mini";
17
- import { modelProviderCreateCodec, modelProviderRetrieveCodec as baseModelProviderRetrieveCodec, modelProviderUpdateCodec, } from "../../enterprise/ai/modelProviderCodec.js";
17
+ import { modelProviderCreateCodec, modelProviderRetrieveCodec as baseModelProviderRetrieveCodec, modelProviderUpdateCodec, } from "../../enterprise/ai/modelProvider/modelProviderCodec.js";
18
18
  import { Err, Ok, Result } from "ts-results-es";
19
19
  import { DremioModelProvider } from "./DremioModelProvider.js";
20
20
  import { ModelProvider } from "../interfaces.js";
@@ -1 +1 @@
1
- {"version":3,"file":"modelProviderCodec.js","sourceRoot":"","sources":["../../../src/cloud/ai/modelProviderCodec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,0BAA0B,IAAI,8BAA8B,EAC5D,wBAAwB,GACzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,CAAC;AAE9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;KAC3B,CAAC;IACF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC,EACtE,CAAC,CAAC,KAAK,CAAC,CAAC,8BAA8B,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,EACvE;IACE,MAAM,CAAC,CAAC;QACN,IAAI,gBAAgB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAyC,CAAC;QACnD,CAAC;QAED,OAAO,CAAC,CAAC,MAAM,CACb,8BAA8B,EAC9B,CAAmD,CACpD,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,CAAC;QACN,IAAI,gBAAgB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAyC,CAAC;QACnD,CAAC;QAED,OAAO,CAAC,CAAC,MAAM,CACb,8BAA8B,EAC9B,CAAoD,CACrD,CAAC;IACJ,CAAC;CACF,CACF,CAAC;AAEF,MAAM,UAAU,uBAAuB,CACrC,MAAgB,EAChB,MAAkD;IAKlD,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAEtE,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,gBAAgB,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,OAAO,EAAE,CACP,IAAI,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,IAA4C,CAAC,CAC3F,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CACP,IAAI,aAAa,CACf,MAAM,EACN,YAAY,CAAC,IAAuD,CACrE,CACF,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC","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 * as z from \"zod/mini\";\nimport {\n modelProviderCreateCodec,\n modelProviderRetrieveCodec as baseModelProviderRetrieveCodec,\n modelProviderUpdateCodec,\n} from \"../../enterprise/ai/modelProviderCodec.ts\";\nimport { Err, Ok, Result } from \"ts-results-es\";\nimport { DremioModelProvider } from \"./DremioModelProvider.ts\";\nimport type { V4Config } from \"../../common/Config.ts\";\nimport { ModelProvider } from \"../interfaces.ts\";\n\nexport { modelProviderCreateCodec, modelProviderUpdateCodec };\n\nexport const dremioProvidedSchema = z.object({\n config: z.object({\n dremioProvided: z.object(),\n }),\n defaultModelName: z.string(),\n id: z.string(),\n isDefault: z.boolean(),\n name: z.string(),\n sqlModelNames: z.array(z.string()),\n tag: z.string(),\n});\n\nexport const modelProviderRetrieveCodec = z.codec(\n z.union([baseModelProviderRetrieveCodec.def.in, dremioProvidedSchema]),\n z.union([baseModelProviderRetrieveCodec.def.out, dremioProvidedSchema]),\n {\n decode(v) {\n if (\"dremioProvided\" in v.config) {\n return v as z.infer<typeof dremioProvidedSchema>;\n }\n\n return z.decode(\n baseModelProviderRetrieveCodec,\n v as z.input<typeof baseModelProviderRetrieveCodec>,\n );\n },\n encode(v) {\n if (\"dremioProvided\" in v.config) {\n return v as z.infer<typeof dremioProvidedSchema>;\n }\n\n return z.encode(\n baseModelProviderRetrieveCodec,\n v as z.output<typeof baseModelProviderRetrieveCodec>,\n );\n },\n },\n);\n\nexport function safeDecodeModelProvider(\n config: V4Config,\n entity: z.input<typeof modelProviderRetrieveCodec>,\n): Result<\n DremioModelProvider | ModelProvider,\n z.core.util.SafeParseResult<z.output<typeof modelProviderRetrieveCodec>>[\"error\"]\n> {\n const decodeResult = z.safeDecode(modelProviderRetrieveCodec, entity);\n\n if (decodeResult.success) {\n if (\"dremioProvided\" in decodeResult.data.config) {\n return Ok(\n new DremioModelProvider(config, decodeResult.data as z.infer<typeof dremioProvidedSchema>),\n );\n }\n return Ok(\n new ModelProvider(\n config,\n decodeResult.data as z.output<typeof baseModelProviderRetrieveCodec>,\n ),\n );\n }\n\n return Err(decodeResult.error);\n}\n\nexport type SafeDecodeResultWithoutDremioLLM = Result<\n ModelProvider,\n z.core.util.SafeParseResult<z.output<typeof modelProviderRetrieveCodec>>[\"error\"]\n>;\n"]}
1
+ {"version":3,"file":"modelProviderCodec.js","sourceRoot":"","sources":["../../../src/cloud/ai/modelProviderCodec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,0BAA0B,IAAI,8BAA8B,EAC5D,wBAAwB,GACzB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,CAAC;AAE9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;KAC3B,CAAC;IACF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC,EACtE,CAAC,CAAC,KAAK,CAAC,CAAC,8BAA8B,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,EACvE;IACE,MAAM,CAAC,CAAC;QACN,IAAI,gBAAgB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAyC,CAAC;QACnD,CAAC;QAED,OAAO,CAAC,CAAC,MAAM,CACb,8BAA8B,EAC9B,CAAmD,CACpD,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,CAAC;QACN,IAAI,gBAAgB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAyC,CAAC;QACnD,CAAC;QAED,OAAO,CAAC,CAAC,MAAM,CACb,8BAA8B,EAC9B,CAAoD,CACrD,CAAC;IACJ,CAAC;CACF,CACF,CAAC;AAEF,MAAM,UAAU,uBAAuB,CACrC,MAAgB,EAChB,MAAkD;IAKlD,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAEtE,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,gBAAgB,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,OAAO,EAAE,CACP,IAAI,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,IAA4C,CAAC,CAC3F,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CACP,IAAI,aAAa,CACf,MAAM,EACN,YAAY,CAAC,IAAuD,CACrE,CACF,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC","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 * as z from \"zod/mini\";\nimport {\n modelProviderCreateCodec,\n modelProviderRetrieveCodec as baseModelProviderRetrieveCodec,\n modelProviderUpdateCodec,\n} from \"../../enterprise/ai/modelProvider/modelProviderCodec.ts\";\nimport { Err, Ok, Result } from \"ts-results-es\";\nimport { DremioModelProvider } from \"./DremioModelProvider.ts\";\nimport type { V4Config } from \"../../common/Config.ts\";\nimport { ModelProvider } from \"../interfaces.ts\";\n\nexport { modelProviderCreateCodec, modelProviderUpdateCodec };\n\nexport const dremioProvidedSchema = z.object({\n config: z.object({\n dremioProvided: z.object(),\n }),\n defaultModelName: z.string(),\n id: z.string(),\n isDefault: z.boolean(),\n name: z.string(),\n sqlModelNames: z.array(z.string()),\n tag: z.string(),\n});\n\nexport const modelProviderRetrieveCodec = z.codec(\n z.union([baseModelProviderRetrieveCodec.def.in, dremioProvidedSchema]),\n z.union([baseModelProviderRetrieveCodec.def.out, dremioProvidedSchema]),\n {\n decode(v) {\n if (\"dremioProvided\" in v.config) {\n return v as z.infer<typeof dremioProvidedSchema>;\n }\n\n return z.decode(\n baseModelProviderRetrieveCodec,\n v as z.input<typeof baseModelProviderRetrieveCodec>,\n );\n },\n encode(v) {\n if (\"dremioProvided\" in v.config) {\n return v as z.infer<typeof dremioProvidedSchema>;\n }\n\n return z.encode(\n baseModelProviderRetrieveCodec,\n v as z.output<typeof baseModelProviderRetrieveCodec>,\n );\n },\n },\n);\n\nexport function safeDecodeModelProvider(\n config: V4Config,\n entity: z.input<typeof modelProviderRetrieveCodec>,\n): Result<\n DremioModelProvider | ModelProvider,\n z.core.util.SafeParseResult<z.output<typeof modelProviderRetrieveCodec>>[\"error\"]\n> {\n const decodeResult = z.safeDecode(modelProviderRetrieveCodec, entity);\n\n if (decodeResult.success) {\n if (\"dremioProvided\" in decodeResult.data.config) {\n return Ok(\n new DremioModelProvider(config, decodeResult.data as z.infer<typeof dremioProvidedSchema>),\n );\n }\n return Ok(\n new ModelProvider(\n config,\n decodeResult.data as z.output<typeof baseModelProviderRetrieveCodec>,\n ),\n );\n }\n\n return Err(decodeResult.error);\n}\n\nexport type SafeDecodeResultWithoutDremioLLM = Result<\n ModelProvider,\n z.core.util.SafeParseResult<z.output<typeof modelProviderRetrieveCodec>>[\"error\"]\n>;\n"]}
@@ -1,13 +1,13 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { ChatSession } from "./chat/ChatSession.ts";
3
3
  import type { UserChatMessage } from "./chat/UserChatMessage.ts";
4
- import { AgentChatResponse, type AgentResponseContent } from "./chat/AgentChatResponse.ts";
4
+ import { AgentChatResponse, type AgentResponseContent } from "./chat/eventWrappers/AgentChatResponse.ts";
5
5
  import type { Logger, SonarV4Config, V4Config } from "../../common/Config.ts";
6
- import { ModelProvider } from "./ModelProvider.ts";
6
+ import { ModelProvider } from "./modelProvider/ModelProvider.ts";
7
7
  import * as z from "zod/mini";
8
- import { modelProviderCreateCodec } from "./modelProviderCodec.js";
8
+ import { modelProviderCreateCodec } from "./modelProvider/modelProviderCodec.ts";
9
9
  import type { SignalParam } from "../../common/Params.ts";
10
- import { listModelsPropertiesSchema } from "./modelProviderConfigSchemas.js";
10
+ import { listModelsPropertiesSchema } from "./modelProvider/modelProviderConfigSchemas.ts";
11
11
  import { AgentChatExchange } from "./chat/eventWrappers/AgentChatExchange.ts";
12
12
  import { ChatSessionClient } from "./chat/ChatSessionClient.ts";
13
13
  export declare function listAvailableModels(config: V4Config): (properties: z.infer<typeof listModelsPropertiesSchema>, { signal }?: SignalParam) => import("ts-results-es").AsyncResult<Set<string>, import("../index.ts").HttpError>;
@@ -15,12 +15,12 @@
15
15
  */
16
16
  import { catchError, concatMap, endWith, map, Observable, of, scan, share, startWith } from "rxjs";
17
17
  import { ChatSession } from "./chat/ChatSession.js";
18
- import { AgentChatResponse } from "./chat/AgentChatResponse.js";
19
- import { ModelProvider } from "./ModelProvider.js";
18
+ import { AgentChatResponse, } from "./chat/eventWrappers/AgentChatResponse.js";
19
+ import { ModelProvider } from "./modelProvider/ModelProvider.js";
20
20
  import * as z from "zod/mini";
21
- import { modelProviderCreateCodec, modelProviderRetrieveCodec } from "./modelProviderCodec.js";
21
+ import { modelProviderCreateCodec, modelProviderRetrieveCodec, } from "./modelProvider/modelProviderCodec.js";
22
22
  import { safeParseResultToResult } from "../../common/safeParseResultToResult.js";
23
- import { listModelsPropertiesSchema } from "./modelProviderConfigSchemas.js";
23
+ import { listModelsPropertiesSchema } from "./modelProvider/modelProviderConfigSchemas.js";
24
24
  import { AgentChatExchange } from "./chat/eventWrappers/AgentChatExchange.js";
25
25
  import { AgentEndTurn } from "../interfaces.js";
26
26
  import { ChatSessionClient } from "./chat/ChatSessionClient.js";
@@ -1 +1 @@
1
- {"version":3,"file":"AIResource.js","sourceRoot":"","sources":["../../../src/enterprise/ai/AIResource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAA6B,MAAM,6BAA6B,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAE/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,UAAU,mBAAmB,CAAC,MAAgB;IAClD,OAAO,SAAS,mBAAmB,CACjC,UAAsD,EACtD,EAAE,MAAM,KAAkB,EAAE;QAE5B,OAAO,MAAM;aACV,SAAS,CAAC,2BAA2B,EAAE;YACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;YACrE,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,MAAM,EAAE,MAAM;YACd,MAAM;SACP,CAAC;aACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAmC,CAAC;aACzD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,UAAU;IACrB,OAAO,CAAoC;IAE3C,YAAY,MAAyC;QACnD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,mBAAmB,CAAC,UAAqD;QACvE,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,OAAO;aAChB,SAAS,CAAC,uBAAuB,EAAE;YAClC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,MAAM;SACf,CAAC;aACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAyD,CAAC;aAC/E,GAAG,CACF,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAC1F,CAAC;IACN,CAAC;IAED,kBAAkB;QAChB,MAAM,OAAO,GAAG,CAAC,EAAE,MAAM,KAAkB,EAAE,EAAE,EAAE;YAC/C,OAAO,IAAI,CAAC,OAAO;iBAChB,SAAS,CAAC,uBAAuB,EAAE;gBAClC,OAAO,EAAE;oBACP,MAAM,EAAE,kBAAkB;iBAC3B;gBACD,MAAM;aACP,CAAC;iBACD,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAwE,CAC1F;iBACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACpC,uBAAuB,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAC3E,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAC5D,CACF;aACF,CAAC,CAAC,CAAC;QACR,CAAC,CAAC;QACF,OAAO;YACL,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,KAAkB,EAAE;gBACtC,KAAK,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACvF,CAAC;YACD,OAAO;SACR,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,UAAsD;QACxE,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAED,qBAAqB,CAAC,EAAU,EAAE,EAAE,MAAM,KAAkB,EAAE;QAC5D,OAAO,IAAI,CAAC,OAAO;aAChB,SAAS,CAAC,yBAAyB,EAAE,EAAE,EAAE;YACxC,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;aAC3B;YACD,MAAM;SACP,CAAC;aACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAyD,CAAC;aAC/E,GAAG,CACF,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAC1F,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,wBAAwB,CACtB,WAAwB,EACxB,eAAgC,EAChC,UAII,EAAE;QAEN,MAAM,wBAAwB,GAAG,IAAI,iBAAiB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,IAAI,CAC5D,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAC1C,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,EAC5F,OAAO,CAAC,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,EACrD,UAAU,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAC9E,IAAI,CACF,CAAC,iBAAiB,EAAE,cAAc,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC,EACtF,wBAAwB,CACzB,EACD,SAAS,CAAC,wBAAwB,CAAC,EACnC,KAAK,EAAE,CACR,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,WAAwB;QAC9C,OAAO,IAAI,iBAAiB,CAAC;YAC3B,WAAW;YACX,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;SACnE,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,WAAwB,EAAE,eAAgC;QACxE,OAAO,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC3E,CAAC;CACF","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 { catchError, concatMap, endWith, map, Observable, of, scan, share, startWith } from \"rxjs\";\nimport { ChatSession } from \"./chat/ChatSession.ts\";\nimport type { UserChatMessage } from \"./chat/UserChatMessage.ts\";\nimport { AgentChatResponse, type AgentResponseContent } from \"./chat/AgentChatResponse.ts\";\nimport type { Logger, SonarV4Config, V4Config } from \"../../common/Config.ts\";\nimport { ModelProvider } from \"./ModelProvider.ts\";\nimport * as z from \"zod/mini\";\nimport { modelProviderCreateCodec, modelProviderRetrieveCodec } from \"./modelProviderCodec.js\";\nimport type { SignalParam } from \"../../common/Params.ts\";\nimport { safeParseResultToResult } from \"../../common/safeParseResultToResult.ts\";\nimport { listModelsPropertiesSchema } from \"./modelProviderConfigSchemas.js\";\nimport { AgentChatExchange } from \"./chat/eventWrappers/AgentChatExchange.ts\";\nimport { AgentEndTurn } from \"../interfaces.ts\";\nimport { ChatSessionClient } from \"./chat/ChatSessionClient.ts\";\nimport { createSendChatMessage } from \"./chat/methods/sendChatMessage.ts\";\n\nexport function listAvailableModels(config: V4Config) {\n return function listAvailableModels(\n properties: z.infer<typeof listModelsPropertiesSchema>,\n { signal }: SignalParam = {},\n ) {\n return config\n .v4Request(\"model-provider:listModels\", {\n body: JSON.stringify(z.parse(listModelsPropertiesSchema, properties)),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n })\n .map((res) => res.json() as Promise<{ models: string[] }>)\n .map((result) => new Set(result.models));\n };\n}\n\nexport class AIResource {\n #config: Logger & V4Config & SonarV4Config;\n\n constructor(config: Logger & V4Config & SonarV4Config) {\n this.#config = config;\n }\n\n createModelProvider(properties: z.output<typeof modelProviderCreateCodec>) {\n const body = z.encode(modelProviderCreateCodec, properties);\n return this.#config\n .v4Request(`model-provider/config`, {\n body: JSON.stringify(body),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n keepalive: true,\n method: \"POST\",\n })\n .map((res) => res.json() as Promise<z.input<typeof modelProviderRetrieveCodec>>)\n .map(\n (entity) => new ModelProvider(this.#config, z.decode(modelProviderRetrieveCodec, entity)),\n );\n }\n\n listModelProviders() {\n const getPage = ({ signal }: SignalParam = {}) => {\n return this.#config\n .v4Request(\"model-provider/config\", {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map(\n (res) => res.json() as Promise<{ configs: z.input<typeof modelProviderRetrieveCodec>[] }>,\n )\n .map((response) => ({\n data: response.configs.map((entity) =>\n safeParseResultToResult(z.safeDecode(modelProviderRetrieveCodec, entity)).map(\n (properties) => new ModelProvider(this.#config, properties),\n ),\n ),\n }));\n };\n return {\n async *data({ signal }: SignalParam = {}) {\n yield* (await getPage({ signal }).promise).map((response) => response.data).unwrap();\n },\n getPage,\n };\n }\n\n listAvailableModels(properties: z.infer<typeof listModelsPropertiesSchema>) {\n return listAvailableModels(this.#config)(properties);\n }\n\n retrieveModelProvider(id: string, { signal }: SignalParam = {}) {\n return this.#config\n .v4Request(`model-provider/config/${id}`, {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map((res) => res.json() as Promise<z.input<typeof modelProviderRetrieveCodec>>)\n .map(\n (entity) => new ModelProvider(this.#config, z.decode(modelProviderRetrieveCodec, entity)),\n );\n }\n\n /**\n * Creates an Observable that emits each time the `AgentChatExchange` is updated\n * with events from the Agent.\n */\n createAgentChatExchange$<T extends AgentResponseContent>(\n chatSession: ChatSession,\n userChatMessage: UserChatMessage,\n options: {\n mapChatEvents?: (\n v: AgentChatResponse<AgentResponseContent>,\n ) => Observable<AgentChatResponse<T>>;\n } = {},\n ) {\n const initialAgentChatExchange = new AgentChatExchange(userChatMessage, []);\n\n return this.sendChatMessage(chatSession, userChatMessage).pipe(\n map((eventResult) => eventResult.unwrap()),\n concatMap((agentChatEvent) => options.mapChatEvents?.(agentChatEvent) || of(agentChatEvent)),\n endWith(new AgentEndTurn({ type: \"reply_finished\" })),\n catchError((error: unknown) => of(new AgentEndTurn({ error, type: \"error\" }))),\n scan(\n (agentChatExchange, agentChatEvent) => agentChatExchange._addChatEvent(agentChatEvent),\n initialAgentChatExchange,\n ),\n startWith(initialAgentChatExchange),\n share(),\n );\n }\n\n createChatSessionClient(chatSession: ChatSession) {\n return new ChatSessionClient({\n chatSession,\n createAgentChatExchange$: this.createAgentChatExchange$.bind(this),\n });\n }\n\n /**\n * Sends a chat message to the Dremio AI Agent and returns an Observable containing\n * Agent replies.\n */\n sendChatMessage(chatSession: ChatSession, userChatMessage: UserChatMessage) {\n return createSendChatMessage(this.#config)(chatSession, userChatMessage);\n }\n}\n"]}
1
+ {"version":3,"file":"AIResource.js","sourceRoot":"","sources":["../../../src/enterprise/ai/AIResource.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 { catchError, concatMap, endWith, map, Observable, of, scan, share, startWith } from \"rxjs\";\nimport { ChatSession } from \"./chat/ChatSession.ts\";\nimport type { UserChatMessage } from \"./chat/UserChatMessage.ts\";\nimport {\n AgentChatResponse,\n type AgentResponseContent,\n} from \"./chat/eventWrappers/AgentChatResponse.ts\";\nimport type { Logger, SonarV4Config, V4Config } from \"../../common/Config.ts\";\nimport { ModelProvider } from \"./modelProvider/ModelProvider.ts\";\nimport * as z from \"zod/mini\";\nimport {\n modelProviderCreateCodec,\n modelProviderRetrieveCodec,\n} from \"./modelProvider/modelProviderCodec.ts\";\nimport type { SignalParam } from \"../../common/Params.ts\";\nimport { safeParseResultToResult } from \"../../common/safeParseResultToResult.ts\";\nimport { listModelsPropertiesSchema } from \"./modelProvider/modelProviderConfigSchemas.ts\";\nimport { AgentChatExchange } from \"./chat/eventWrappers/AgentChatExchange.ts\";\nimport { AgentEndTurn } from \"../interfaces.ts\";\nimport { ChatSessionClient } from \"./chat/ChatSessionClient.ts\";\nimport { createSendChatMessage } from \"./chat/methods/sendChatMessage.ts\";\n\nexport function listAvailableModels(config: V4Config) {\n return function listAvailableModels(\n properties: z.infer<typeof listModelsPropertiesSchema>,\n { signal }: SignalParam = {},\n ) {\n return config\n .v4Request(\"model-provider:listModels\", {\n body: JSON.stringify(z.parse(listModelsPropertiesSchema, properties)),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n })\n .map((res) => res.json() as Promise<{ models: string[] }>)\n .map((result) => new Set(result.models));\n };\n}\n\nexport class AIResource {\n #config: Logger & V4Config & SonarV4Config;\n\n constructor(config: Logger & V4Config & SonarV4Config) {\n this.#config = config;\n }\n\n createModelProvider(properties: z.output<typeof modelProviderCreateCodec>) {\n const body = z.encode(modelProviderCreateCodec, properties);\n return this.#config\n .v4Request(`model-provider/config`, {\n body: JSON.stringify(body),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n keepalive: true,\n method: \"POST\",\n })\n .map((res) => res.json() as Promise<z.input<typeof modelProviderRetrieveCodec>>)\n .map(\n (entity) => new ModelProvider(this.#config, z.decode(modelProviderRetrieveCodec, entity)),\n );\n }\n\n listModelProviders() {\n const getPage = ({ signal }: SignalParam = {}) => {\n return this.#config\n .v4Request(\"model-provider/config\", {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map(\n (res) => res.json() as Promise<{ configs: z.input<typeof modelProviderRetrieveCodec>[] }>,\n )\n .map((response) => ({\n data: response.configs.map((entity) =>\n safeParseResultToResult(z.safeDecode(modelProviderRetrieveCodec, entity)).map(\n (properties) => new ModelProvider(this.#config, properties),\n ),\n ),\n }));\n };\n return {\n async *data({ signal }: SignalParam = {}) {\n yield* (await getPage({ signal }).promise).map((response) => response.data).unwrap();\n },\n getPage,\n };\n }\n\n listAvailableModels(properties: z.infer<typeof listModelsPropertiesSchema>) {\n return listAvailableModels(this.#config)(properties);\n }\n\n retrieveModelProvider(id: string, { signal }: SignalParam = {}) {\n return this.#config\n .v4Request(`model-provider/config/${id}`, {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map((res) => res.json() as Promise<z.input<typeof modelProviderRetrieveCodec>>)\n .map(\n (entity) => new ModelProvider(this.#config, z.decode(modelProviderRetrieveCodec, entity)),\n );\n }\n\n /**\n * Creates an Observable that emits each time the `AgentChatExchange` is updated\n * with events from the Agent.\n */\n createAgentChatExchange$<T extends AgentResponseContent>(\n chatSession: ChatSession,\n userChatMessage: UserChatMessage,\n options: {\n mapChatEvents?: (\n v: AgentChatResponse<AgentResponseContent>,\n ) => Observable<AgentChatResponse<T>>;\n } = {},\n ) {\n const initialAgentChatExchange = new AgentChatExchange(userChatMessage, []);\n\n return this.sendChatMessage(chatSession, userChatMessage).pipe(\n map((eventResult) => eventResult.unwrap()),\n concatMap((agentChatEvent) => options.mapChatEvents?.(agentChatEvent) || of(agentChatEvent)),\n endWith(new AgentEndTurn({ type: \"reply_finished\" })),\n catchError((error: unknown) => of(new AgentEndTurn({ error, type: \"error\" }))),\n scan(\n (agentChatExchange, agentChatEvent) => agentChatExchange._addChatEvent(agentChatEvent),\n initialAgentChatExchange,\n ),\n startWith(initialAgentChatExchange),\n share(),\n );\n }\n\n createChatSessionClient(chatSession: ChatSession) {\n return new ChatSessionClient({\n chatSession,\n createAgentChatExchange$: this.createAgentChatExchange$.bind(this),\n });\n }\n\n /**\n * Sends a chat message to the Dremio AI Agent and returns an Observable containing\n * Agent replies.\n */\n sendChatMessage(chatSession: ChatSession, userChatMessage: UserChatMessage) {\n return createSendChatMessage(this.#config)(chatSession, userChatMessage);\n }\n}\n"]}
@@ -1,8 +1,12 @@
1
1
  import * as z from "zod/mini";
2
+ import { Temporal } from "temporal-polyfill";
2
3
  declare const chatSessionInputSchema: z.ZodMiniObject<{
4
+ createdAt: z.ZodMiniString<string>;
5
+ id: z.ZodMiniString<string>;
3
6
  modelName: z.ZodMiniString<string>;
4
7
  modelProviderId: z.ZodMiniString<string>;
5
- sessionId: z.ZodMiniString<string>;
8
+ title: z.ZodMiniOptional<z.ZodMiniString<string>>;
9
+ updatedAt: z.ZodMiniString<string>;
6
10
  }, z.core.$strip>;
7
11
  declare const newChatSessionSchema: z.ZodMiniObject<{
8
12
  modelName: z.ZodMiniOptional<z.ZodMiniString<string>>;
@@ -15,17 +19,25 @@ declare const newChatSessionSchema: z.ZodMiniObject<{
15
19
  * they're mutated on the instance of the class.
16
20
  */
17
21
  export declare class ChatSession {
18
- modelName?: string;
19
- modelProviderId?: string;
20
- sessionId?: string;
22
+ #private;
23
+ get createdAt(): Temporal.Instant;
24
+ get id(): string | undefined;
25
+ get modelName(): string | undefined;
26
+ get modelProviderId(): string | undefined;
27
+ get title(): string | undefined;
28
+ get updatedAt(): Temporal.Instant;
21
29
  private constructor();
30
+ [Symbol.observable](): import("rxjs").Observable<ChatSession>;
22
31
  toJSON(): {
32
+ createdAt: string;
33
+ id: string;
23
34
  modelName: string;
24
35
  modelProviderId: string;
25
- sessionId: string;
36
+ updatedAt: string;
37
+ title?: string | undefined;
26
38
  };
27
39
  assign(properties: Partial<z.infer<typeof chatSessionInputSchema>>): void;
28
- equals(other: ChatSession): boolean;
40
+ equals(other: unknown): boolean;
29
41
  static fromJSON(data: z.input<typeof ChatSession.codec>): ChatSession;
30
42
  /**
31
43
  * Creates a new ChatSession with fields that will be populated automatically
@@ -33,9 +45,12 @@ export declare class ChatSession {
33
45
  */
34
46
  static new(options?: z.infer<typeof newChatSessionSchema>): ChatSession;
35
47
  static codec: z.ZodMiniCodec<z.ZodMiniObject<{
48
+ createdAt: z.ZodMiniString<string>;
49
+ id: z.ZodMiniString<string>;
36
50
  modelName: z.ZodMiniString<string>;
37
51
  modelProviderId: z.ZodMiniString<string>;
38
- sessionId: z.ZodMiniString<string>;
52
+ title: z.ZodMiniOptional<z.ZodMiniString<string>>;
53
+ updatedAt: z.ZodMiniString<string>;
39
54
  }, z.core.$strip>, z.ZodMiniCustom<ChatSession, ChatSession>>;
40
55
  }
41
56
  export {};
@@ -14,10 +14,15 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import * as z from "zod/mini";
17
+ import { Temporal } from "temporal-polyfill";
18
+ import { BehaviorSubject } from "rxjs";
17
19
  const chatSessionInputSchema = z.object({
20
+ createdAt: z.string().check(z.iso.datetime()),
21
+ id: z.string(),
18
22
  modelName: z.string(),
19
23
  modelProviderId: z.string(),
20
- sessionId: z.string(),
24
+ title: z.optional(z.string()),
25
+ updatedAt: z.string().check(z.iso.datetime()),
21
26
  });
22
27
  const newChatSessionSchema = z.partial(z.pick(chatSessionInputSchema, {
23
28
  modelName: true,
@@ -30,37 +35,64 @@ const newChatSessionSchema = z.partial(z.pick(chatSessionInputSchema, {
30
35
  * they're mutated on the instance of the class.
31
36
  */
32
37
  export class ChatSession {
33
- modelName;
34
- modelProviderId;
35
- sessionId;
38
+ #createdAt = Temporal.Now.instant();
39
+ #id;
40
+ #modelName;
41
+ #modelProviderId;
42
+ #title;
43
+ #updatedAt = Temporal.Now.instant();
44
+ #bus = new BehaviorSubject(this);
45
+ get createdAt() {
46
+ return this.#createdAt;
47
+ }
48
+ get id() {
49
+ return this.#id;
50
+ }
51
+ get modelName() {
52
+ return this.#modelName;
53
+ }
54
+ get modelProviderId() {
55
+ return this.#modelProviderId;
56
+ }
57
+ get title() {
58
+ return this.#title;
59
+ }
60
+ get updatedAt() {
61
+ return this.#updatedAt;
62
+ }
36
63
  constructor(properties = {}) {
37
- if (properties.modelName) {
38
- this.modelName = properties.modelName;
39
- }
40
- if (properties.modelProviderId) {
41
- this.modelProviderId = properties.modelProviderId;
42
- }
43
- if (properties.sessionId) {
44
- this.sessionId = properties.sessionId;
45
- }
64
+ this.assign(properties);
65
+ }
66
+ [Symbol.observable]() {
67
+ return this.#bus.asObservable();
46
68
  }
47
69
  toJSON() {
48
70
  return z.encode(ChatSession.codec, this);
49
71
  }
50
72
  assign(properties) {
73
+ if (properties.createdAt) {
74
+ this.#createdAt = Temporal.Instant.from(properties.createdAt);
75
+ }
76
+ if (properties.id) {
77
+ this.#id = properties.id;
78
+ }
51
79
  if (properties.modelName) {
52
- this.modelName = properties.modelName;
80
+ this.#modelName = properties.modelName;
53
81
  }
54
82
  if (properties.modelProviderId) {
55
- this.modelProviderId = properties.modelProviderId;
83
+ this.#modelProviderId = properties.modelProviderId;
84
+ }
85
+ if (properties.title) {
86
+ this.#title = properties.title;
56
87
  }
57
- if (properties.sessionId) {
58
- this.sessionId = properties.sessionId;
88
+ if (properties.updatedAt) {
89
+ this.#updatedAt = Temporal.Instant.from(properties.updatedAt);
59
90
  }
91
+ this.#bus.next(this);
60
92
  }
61
93
  equals(other) {
62
- return (this === other ||
63
- (this.sessionId === other.sessionId && (!!this.sessionId || !!other.sessionId)));
94
+ return (other instanceof ChatSession &&
95
+ (this === other || (this.id === other.id && (!!this.id || !!other.id))));
64
96
  }
65
97
  static fromJSON(data) {
66
98
  return z.decode(ChatSession.codec, data);
@@ -77,13 +109,16 @@ export class ChatSession {
77
109
  return new ChatSession(v);
78
110
  },
79
111
  encode(v) {
80
- if (!v.sessionId) {
81
- throw new Error("Cannot encode an uninitialized ChatSession");
112
+ if (!v.id) {
113
+ throw new Error("An uninitialized ChatSession cannot be encoded.");
82
114
  }
83
115
  return {
116
+ createdAt: v.createdAt.toString(),
117
+ id: v.id,
84
118
  modelName: v.modelName,
85
119
  modelProviderId: v.modelProviderId,
86
- sessionId: v.sessionId,
120
+ title: v.title,
121
+ updatedAt: v.updatedAt.toString(),
87
122
  };
88
123
  },
89
124
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ChatSession.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/chat/ChatSession.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 * as z from \"zod/mini\";\n\nconst chatSessionInputSchema = z.object({\n modelName: z.string(),\n modelProviderId: z.string(),\n sessionId: z.string(),\n});\n\nconst newChatSessionSchema = z.partial(\n z.pick(chatSessionInputSchema, {\n modelName: true,\n modelProviderId: true,\n }),\n);\n\n/**\n * Tracks an Agent chat session. Each field is optional and intentionally mutable\n * so that if any of these fields become available during agent reply (such as which\n * default model provider and name it picked, as well as the server-generated sessionId),\n * they're mutated on the instance of the class.\n */\nexport class ChatSession {\n modelName?: string;\n modelProviderId?: string;\n sessionId?: string;\n\n private constructor(properties: Partial<z.infer<typeof chatSessionInputSchema>> = {}) {\n if (properties.modelName) {\n this.modelName = properties.modelName;\n }\n if (properties.modelProviderId) {\n this.modelProviderId = properties.modelProviderId;\n }\n\n if (properties.sessionId) {\n this.sessionId = properties.sessionId;\n }\n }\n\n toJSON() {\n return z.encode(ChatSession.codec, this);\n }\n\n assign(properties: Partial<z.infer<typeof chatSessionInputSchema>>) {\n if (properties.modelName) {\n this.modelName = properties.modelName;\n }\n if (properties.modelProviderId) {\n this.modelProviderId = properties.modelProviderId;\n }\n\n if (properties.sessionId) {\n this.sessionId = properties.sessionId;\n }\n }\n\n equals(other: ChatSession) {\n return (\n this === other ||\n (this.sessionId === other.sessionId && (!!this.sessionId || !!other.sessionId))\n );\n }\n\n static fromJSON(data: z.input<typeof ChatSession.codec>) {\n return z.decode(ChatSession.codec, data);\n }\n\n /**\n * Creates a new ChatSession with fields that will be populated automatically\n * once a reply is received from the Dremio AI Agent.\n */\n static new(options: z.infer<typeof newChatSessionSchema> = {}) {\n return new ChatSession(z.parse(newChatSessionSchema, options));\n }\n\n static codec = z.codec(\n chatSessionInputSchema,\n z.custom<ChatSession>((v) => v instanceof ChatSession),\n {\n decode(v) {\n return new ChatSession(v);\n },\n encode(v) {\n if (!v.sessionId) {\n throw new Error(\"Cannot encode an uninitialized ChatSession\");\n }\n return {\n modelName: v.modelName!,\n modelProviderId: v.modelProviderId!,\n sessionId: v.sessionId,\n };\n },\n },\n );\n}\n"]}
1
+ {"version":3,"file":"ChatSession.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/chat/ChatSession.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAEvC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,OAAO,CACpC,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE;IAC7B,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,IAAI;CACtB,CAAC,CACH,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACtB,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACpC,GAAG,CAAU;IACb,UAAU,CAAU;IACpB,gBAAgB,CAAU;IAC1B,MAAM,CAAU;IAChB,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAEpC,IAAI,GAAG,IAAI,eAAe,CAAc,IAAI,CAAC,CAAC;IAE9C,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,YAAoB,aAA8D,EAAE;QAClF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,CAAC,MAAM,CAAC,UAAU,CAAC;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,UAA2D;QAChE,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;QACzC,CAAC;QACD,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC;QACrD,CAAC;QACD,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;QACjC,CAAC;QACD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAc;QACnB,OAAO,CACL,KAAK,YAAY,WAAW;YAC5B,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CACxE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAuC;QACrD,OAAO,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,UAAgD,EAAE;QAC3D,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CACpB,sBAAsB,EACtB,CAAC,CAAC,MAAM,CAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,WAAW,CAAC,EACtD;QACE,MAAM,CAAC,CAAC;YACN,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,CAAC,CAAC;YACN,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,OAAO;gBACL,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACjC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,SAAS,EAAE,CAAC,CAAC,SAAU;gBACvB,eAAe,EAAE,CAAC,CAAC,eAAgB;gBACnC,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;aAClC,CAAC;QACJ,CAAC;KACF,CACF,CAAC","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 * as z from \"zod/mini\";\nimport { Temporal } from \"temporal-polyfill\";\nimport { BehaviorSubject } from \"rxjs\";\n\nconst chatSessionInputSchema = z.object({\n createdAt: z.string().check(z.iso.datetime()),\n id: z.string(),\n modelName: z.string(),\n modelProviderId: z.string(),\n title: z.optional(z.string()),\n updatedAt: z.string().check(z.iso.datetime()),\n});\n\nconst newChatSessionSchema = z.partial(\n z.pick(chatSessionInputSchema, {\n modelName: true,\n modelProviderId: true,\n }),\n);\n\n/**\n * Tracks an Agent chat session. Each field is optional and intentionally mutable\n * so that if any of these fields become available during agent reply (such as which\n * default model provider and name it picked, as well as the server-generated sessionId),\n * they're mutated on the instance of the class.\n */\nexport class ChatSession {\n #createdAt = Temporal.Now.instant();\n #id?: string;\n #modelName?: string;\n #modelProviderId?: string;\n #title?: string;\n #updatedAt = Temporal.Now.instant();\n\n #bus = new BehaviorSubject<ChatSession>(this);\n\n get createdAt(): Temporal.Instant {\n return this.#createdAt;\n }\n\n get id(): string | undefined {\n return this.#id;\n }\n\n get modelName(): string | undefined {\n return this.#modelName;\n }\n\n get modelProviderId(): string | undefined {\n return this.#modelProviderId;\n }\n\n get title(): string | undefined {\n return this.#title;\n }\n\n get updatedAt(): Temporal.Instant {\n return this.#updatedAt;\n }\n\n private constructor(properties: Partial<z.infer<typeof chatSessionInputSchema>> = {}) {\n this.assign(properties);\n }\n\n [Symbol.observable]() {\n return this.#bus.asObservable();\n }\n\n toJSON() {\n return z.encode(ChatSession.codec, this);\n }\n\n assign(properties: Partial<z.infer<typeof chatSessionInputSchema>>) {\n if (properties.createdAt) {\n this.#createdAt = Temporal.Instant.from(properties.createdAt);\n }\n if (properties.id) {\n this.#id = properties.id;\n }\n if (properties.modelName) {\n this.#modelName = properties.modelName;\n }\n if (properties.modelProviderId) {\n this.#modelProviderId = properties.modelProviderId;\n }\n if (properties.title) {\n this.#title = properties.title;\n }\n if (properties.updatedAt) {\n this.#updatedAt = Temporal.Instant.from(properties.updatedAt);\n }\n this.#bus.next(this);\n }\n\n equals(other: unknown) {\n return (\n other instanceof ChatSession &&\n (this === other || (this.id === other.id && (!!this.id || !!other.id)))\n );\n }\n\n static fromJSON(data: z.input<typeof ChatSession.codec>) {\n return z.decode(ChatSession.codec, data);\n }\n\n /**\n * Creates a new ChatSession with fields that will be populated automatically\n * once a reply is received from the Dremio AI Agent.\n */\n static new(options: z.infer<typeof newChatSessionSchema> = {}) {\n return new ChatSession(z.parse(newChatSessionSchema, options));\n }\n\n static codec = z.codec(\n chatSessionInputSchema,\n z.custom<ChatSession>((v) => v instanceof ChatSession),\n {\n decode(v) {\n return new ChatSession(v);\n },\n encode(v) {\n if (!v.id) {\n throw new Error(\"An uninitialized ChatSession cannot be encoded.\");\n }\n return {\n createdAt: v.createdAt.toString(),\n id: v.id,\n modelName: v.modelName!,\n modelProviderId: v.modelProviderId!,\n title: v.title,\n updatedAt: v.updatedAt.toString(),\n };\n },\n },\n );\n}\n"]}
@@ -3,9 +3,7 @@ import type { ChatSession } from "./ChatSession.ts";
3
3
  import type { UserChatMessage } from "./UserChatMessage.ts";
4
4
  import type { AgentChatExchange } from "./eventWrappers/AgentChatExchange.ts";
5
5
  export declare class ChatSessionClient {
6
- private readonly createAgentChatExchange$;
7
- private readonly cancelEvents$;
8
- private readonly userChatMessages$;
6
+ #private;
9
7
  readonly chatSession: ChatSession;
10
8
  readonly agentChatExchanges$: Observable<AgentChatExchange[]>;
11
9
  readonly agentIsReplying$: Observable<boolean>;
@@ -13,7 +11,6 @@ export declare class ChatSessionClient {
13
11
  chatSession: ChatSession;
14
12
  createAgentChatExchange$: (chatSession: ChatSession, userChatMessage: UserChatMessage) => Observable<AgentChatExchange>;
15
13
  });
16
- get sessionId(): string | undefined;
17
14
  startChatExchange(message: UserChatMessage): void;
18
15
  cancelChatExchange(): void;
19
16
  agentChatExchanges(): Promise<AgentChatExchange[]>;
@@ -16,13 +16,13 @@
16
16
  import { firstValueFrom, map, merge, Observable, scan, shareReplay, Subject, switchMap, takeUntil, takeWhile, withLatestFrom, } from "rxjs";
17
17
  import { AgentEndTurn } from "./eventWrappers/AgentEndTurn.js";
18
18
  export class ChatSessionClient {
19
- createAgentChatExchange$;
20
- cancelEvents$ = new Subject();
21
- userChatMessages$ = new Subject();
19
+ #createAgentChatExchange$;
20
+ #cancelEvents$ = new Subject();
21
+ #userChatMessages$ = new Subject();
22
22
  chatSession;
23
- agentChatExchanges$ = this.userChatMessages$.pipe(switchMap((userChatMessage) => {
24
- const agentChatExchange$ = this.createAgentChatExchange$(this.chatSession, userChatMessage).pipe(takeUntil(this.cancelEvents$), shareReplay({ bufferSize: 1, refCount: true }));
25
- return merge(agentChatExchange$, this.cancelEvents$.pipe(withLatestFrom(agentChatExchange$), map(([, agentChatExchange]) => {
23
+ agentChatExchanges$ = this.#userChatMessages$.pipe(switchMap((userChatMessage) => {
24
+ const agentChatExchange$ = this.#createAgentChatExchange$(this.chatSession, userChatMessage).pipe(takeUntil(this.#cancelEvents$), shareReplay({ bufferSize: 1, refCount: true }));
25
+ return merge(agentChatExchange$, this.#cancelEvents$.pipe(withLatestFrom(agentChatExchange$), map(([, agentChatExchange]) => {
26
26
  return agentChatExchange._addChatEvent(new AgentEndTurn({ type: "user_canceled" }));
27
27
  }))).pipe(takeWhile((chatExchange) => !chatExchange.isComplete, true));
28
28
  }), scan((acc, curr) => {
@@ -37,16 +37,13 @@ export class ChatSessionClient {
37
37
  }));
38
38
  constructor({ chatSession, createAgentChatExchange$, }) {
39
39
  this.chatSession = chatSession;
40
- this.createAgentChatExchange$ = createAgentChatExchange$;
41
- }
42
- get sessionId() {
43
- return this.chatSession.sessionId;
40
+ this.#createAgentChatExchange$ = createAgentChatExchange$;
44
41
  }
45
42
  startChatExchange(message) {
46
- this.userChatMessages$.next(message);
43
+ this.#userChatMessages$.next(message);
47
44
  }
48
45
  cancelChatExchange() {
49
- this.cancelEvents$.next();
46
+ this.#cancelEvents$.next();
50
47
  }
51
48
  agentChatExchanges() {
52
49
  return firstValueFrom(this.agentChatExchanges$);
@@ -1 +1 @@
1
- {"version":3,"file":"ChatSessionClient.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/chat/ChatSessionClient.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 {\n firstValueFrom,\n map,\n merge,\n Observable,\n scan,\n shareReplay,\n Subject,\n switchMap,\n takeUntil,\n takeWhile,\n withLatestFrom,\n} from \"rxjs\";\nimport type { ChatSession } from \"./ChatSession.ts\";\nimport type { UserChatMessage } from \"./UserChatMessage.ts\";\nimport { AgentEndTurn } from \"./eventWrappers/AgentEndTurn.ts\";\nimport type { AgentChatExchange } from \"./eventWrappers/AgentChatExchange.ts\";\n\nexport class ChatSessionClient {\n private readonly createAgentChatExchange$: (\n chatSession: ChatSession,\n userChatMessage: UserChatMessage,\n ) => Observable<AgentChatExchange>;\n private readonly cancelEvents$ = new Subject<void>();\n private readonly userChatMessages$ = new Subject<UserChatMessage>();\n\n readonly chatSession: ChatSession;\n\n readonly agentChatExchanges$ = this.userChatMessages$.pipe(\n switchMap((userChatMessage) => {\n const agentChatExchange$ = this.createAgentChatExchange$(\n this.chatSession,\n userChatMessage,\n ).pipe(takeUntil(this.cancelEvents$), shareReplay({ bufferSize: 1, refCount: true }));\n\n return merge(\n agentChatExchange$,\n this.cancelEvents$.pipe(\n withLatestFrom(agentChatExchange$),\n map(([, agentChatExchange]) => {\n return agentChatExchange._addChatEvent(new AgentEndTurn({ type: \"user_canceled\" }));\n }),\n ),\n ).pipe(takeWhile((chatExchange) => !chatExchange.isComplete, true));\n }),\n scan((acc, curr) => {\n if (acc.at(-1)?.id === curr.id) {\n return [...acc.slice(0, -1), curr];\n }\n return [...acc, curr];\n }, [] as AgentChatExchange[]),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n readonly agentIsReplying$ = this.agentChatExchanges$.pipe(\n map((chatExchanges) => {\n const lastChatExchange = chatExchanges.at(-1);\n return !!lastChatExchange && !lastChatExchange.isComplete;\n }),\n );\n\n constructor({\n chatSession,\n createAgentChatExchange$,\n }: {\n chatSession: ChatSession;\n createAgentChatExchange$: (\n chatSession: ChatSession,\n userChatMessage: UserChatMessage,\n ) => Observable<AgentChatExchange>;\n }) {\n this.chatSession = chatSession;\n this.createAgentChatExchange$ = createAgentChatExchange$;\n }\n\n get sessionId() {\n return this.chatSession.sessionId;\n }\n\n startChatExchange(message: UserChatMessage) {\n this.userChatMessages$.next(message);\n }\n\n cancelChatExchange() {\n this.cancelEvents$.next();\n }\n\n agentChatExchanges() {\n return firstValueFrom(this.agentChatExchanges$);\n }\n\n agentIsReplying() {\n return firstValueFrom(this.agentIsReplying$);\n }\n}\n"]}
1
+ {"version":3,"file":"ChatSessionClient.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/chat/ChatSessionClient.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 {\n firstValueFrom,\n map,\n merge,\n Observable,\n scan,\n shareReplay,\n Subject,\n switchMap,\n takeUntil,\n takeWhile,\n withLatestFrom,\n} from \"rxjs\";\nimport type { ChatSession } from \"./ChatSession.ts\";\nimport type { UserChatMessage } from \"./UserChatMessage.ts\";\nimport { AgentEndTurn } from \"./eventWrappers/AgentEndTurn.ts\";\nimport type { AgentChatExchange } from \"./eventWrappers/AgentChatExchange.ts\";\n\nexport class ChatSessionClient {\n readonly #createAgentChatExchange$: (\n chatSession: ChatSession,\n userChatMessage: UserChatMessage,\n ) => Observable<AgentChatExchange>;\n readonly #cancelEvents$ = new Subject<void>();\n readonly #userChatMessages$ = new Subject<UserChatMessage>();\n\n readonly chatSession: ChatSession;\n\n readonly agentChatExchanges$ = this.#userChatMessages$.pipe(\n switchMap((userChatMessage) => {\n const agentChatExchange$ = this.#createAgentChatExchange$(\n this.chatSession,\n userChatMessage,\n ).pipe(takeUntil(this.#cancelEvents$), shareReplay({ bufferSize: 1, refCount: true }));\n\n return merge(\n agentChatExchange$,\n this.#cancelEvents$.pipe(\n withLatestFrom(agentChatExchange$),\n map(([, agentChatExchange]) => {\n return agentChatExchange._addChatEvent(new AgentEndTurn({ type: \"user_canceled\" }));\n }),\n ),\n ).pipe(takeWhile((chatExchange) => !chatExchange.isComplete, true));\n }),\n scan((acc, curr) => {\n if (acc.at(-1)?.id === curr.id) {\n return [...acc.slice(0, -1), curr];\n }\n return [...acc, curr];\n }, [] as AgentChatExchange[]),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n readonly agentIsReplying$ = this.agentChatExchanges$.pipe(\n map((chatExchanges) => {\n const lastChatExchange = chatExchanges.at(-1);\n return !!lastChatExchange && !lastChatExchange.isComplete;\n }),\n );\n\n constructor({\n chatSession,\n createAgentChatExchange$,\n }: {\n chatSession: ChatSession;\n createAgentChatExchange$: (\n chatSession: ChatSession,\n userChatMessage: UserChatMessage,\n ) => Observable<AgentChatExchange>;\n }) {\n this.chatSession = chatSession;\n this.#createAgentChatExchange$ = createAgentChatExchange$;\n }\n\n startChatExchange(message: UserChatMessage) {\n this.#userChatMessages$.next(message);\n }\n\n cancelChatExchange() {\n this.#cancelEvents$.next();\n }\n\n agentChatExchanges() {\n return firstValueFrom(this.agentChatExchanges$);\n }\n\n agentIsReplying() {\n return firstValueFrom(this.agentIsReplying$);\n }\n}\n"]}
@@ -3,7 +3,7 @@ import { type Option } from "ts-results-es";
3
3
  import { AgentToolCallGroup } from "./AgentToolCallGroup.ts";
4
4
  import type { AgentToolCall } from "./AgentToolCall.ts";
5
5
  import type { UserChatMessage } from "../UserChatMessage.ts";
6
- import type { AgentChatResponse, AgentResponseContent } from "../AgentChatResponse.ts";
6
+ import type { AgentChatResponse, AgentResponseContent } from "./AgentChatResponse.ts";
7
7
  /**
8
8
  * Represents a single chat exchange, starting with a `UserChatMessage` and followed by
9
9
  * 0 or more agent chat events. As chat events stream in, this class is updated
@@ -1 +1 @@
1
- {"version":3,"file":"AgentChatExchange.js","sourceRoot":"","sources":["../../../../../src/enterprise/ai/chat/eventWrappers/AgentChatExchange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAe,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKjE;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACnB,eAAe,CAA2B;IAC1C,kBAAkB,CAAqB;IACvC,EAAE,CAAS;IACX,eAAe,CAAkB;IAE1C,YACE,eAAqD,EACrD,eAAqD,EACrD,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAC/C,EAAE,GAAG,MAAM,EAAE;QAEb,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC;IAC7D,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,IAAI,SAAS,YAAY,YAAY,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,cAAsC;QAClD,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,cAAc,CAAC,EAClD,IAAI,CAAC,EAAE,CACR,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,cAAc,CAAC,EACjD,IAAI,CAAC,EAAE,CACR,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,eAAe,EACpB,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,EACzC,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,EAAE,CACR,CAAC;IACJ,CAAC;CACF","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 { nanoid } from \"nanoid/non-secure\";\nimport { AgentEndTurn } from \"./AgentEndTurn.ts\";\nimport { None, Some, type Option } from \"ts-results-es\";\nimport { AgentToolCallGroup } from \"./AgentToolCallGroup.ts\";\nimport { isToolRequest, isToolResult } from \"./AgentToolCall.ts\";\nimport type { AgentToolCall } from \"./AgentToolCall.ts\";\nimport type { UserChatMessage } from \"../UserChatMessage.ts\";\nimport type { AgentChatResponse, AgentResponseContent } from \"../AgentChatResponse.ts\";\n\n/**\n * Represents a single chat exchange, starting with a `UserChatMessage` and followed by\n * 0 or more agent chat events. As chat events stream in, this class is updated\n * immutably but maintains a stable `.id` property.\n */\nexport class AgentChatExchange {\n readonly agentChatEvents: AgentChatExchangeEvent[];\n readonly agentToolCallGroup: AgentToolCallGroup;\n readonly id: string;\n readonly userChatMessage: UserChatMessage;\n\n constructor(\n userChatMessage: AgentChatExchange[\"userChatMessage\"],\n agentChatEvents: AgentChatExchange[\"agentChatEvents\"],\n agentToolCallGroup = new AgentToolCallGroup([]),\n id = nanoid(),\n ) {\n this.agentChatEvents = agentChatEvents;\n this.agentToolCallGroup = agentToolCallGroup;\n this.id = id;\n this.userChatMessage = userChatMessage;\n }\n\n get isComplete() {\n return this.agentChatEvents.at(-1) instanceof AgentEndTurn;\n }\n\n get completeReason(): Option<AgentEndTurn[\"reason\"]> {\n const lastEvent = this.agentChatEvents.at(-1);\n\n if (lastEvent instanceof AgentEndTurn) {\n return Some(lastEvent.reason);\n }\n\n return None;\n }\n\n _addChatEvent(agentChatEvent: AgentChatExchangeEvent) {\n if (isToolRequest(agentChatEvent)) {\n return new AgentChatExchange(\n this.userChatMessage,\n this.agentChatEvents,\n this.agentToolCallGroup.addRequest(agentChatEvent),\n this.id,\n );\n }\n if (isToolResult(agentChatEvent)) {\n return new AgentChatExchange(\n this.userChatMessage,\n this.agentChatEvents,\n this.agentToolCallGroup.addResult(agentChatEvent),\n this.id,\n );\n }\n return new AgentChatExchange(\n this.userChatMessage,\n [...this.agentChatEvents, agentChatEvent],\n this.agentToolCallGroup,\n this.id,\n );\n }\n}\n\nexport type AgentChatExchangeEvent =\n | AgentChatResponse<AgentResponseContent>\n | AgentEndTurn\n | AgentToolCall\n | AgentToolCallGroup;\n"]}
1
+ {"version":3,"file":"AgentChatExchange.js","sourceRoot":"","sources":["../../../../../src/enterprise/ai/chat/eventWrappers/AgentChatExchange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAe,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKjE;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACnB,eAAe,CAA2B;IAC1C,kBAAkB,CAAqB;IACvC,EAAE,CAAS;IACX,eAAe,CAAkB;IAE1C,YACE,eAAqD,EACrD,eAAqD,EACrD,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAC/C,EAAE,GAAG,MAAM,EAAE;QAEb,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC;IAC7D,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,IAAI,SAAS,YAAY,YAAY,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,cAAsC;QAClD,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,cAAc,CAAC,EAClD,IAAI,CAAC,EAAE,CACR,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,cAAc,CAAC,EACjD,IAAI,CAAC,EAAE,CACR,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,eAAe,EACpB,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,EACzC,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,EAAE,CACR,CAAC;IACJ,CAAC;CACF","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 { nanoid } from \"nanoid/non-secure\";\nimport { AgentEndTurn } from \"./AgentEndTurn.ts\";\nimport { None, Some, type Option } from \"ts-results-es\";\nimport { AgentToolCallGroup } from \"./AgentToolCallGroup.ts\";\nimport { isToolRequest, isToolResult } from \"./AgentToolCall.ts\";\nimport type { AgentToolCall } from \"./AgentToolCall.ts\";\nimport type { UserChatMessage } from \"../UserChatMessage.ts\";\nimport type { AgentChatResponse, AgentResponseContent } from \"./AgentChatResponse.ts\";\n\n/**\n * Represents a single chat exchange, starting with a `UserChatMessage` and followed by\n * 0 or more agent chat events. As chat events stream in, this class is updated\n * immutably but maintains a stable `.id` property.\n */\nexport class AgentChatExchange {\n readonly agentChatEvents: AgentChatExchangeEvent[];\n readonly agentToolCallGroup: AgentToolCallGroup;\n readonly id: string;\n readonly userChatMessage: UserChatMessage;\n\n constructor(\n userChatMessage: AgentChatExchange[\"userChatMessage\"],\n agentChatEvents: AgentChatExchange[\"agentChatEvents\"],\n agentToolCallGroup = new AgentToolCallGroup([]),\n id = nanoid(),\n ) {\n this.agentChatEvents = agentChatEvents;\n this.agentToolCallGroup = agentToolCallGroup;\n this.id = id;\n this.userChatMessage = userChatMessage;\n }\n\n get isComplete() {\n return this.agentChatEvents.at(-1) instanceof AgentEndTurn;\n }\n\n get completeReason(): Option<AgentEndTurn[\"reason\"]> {\n const lastEvent = this.agentChatEvents.at(-1);\n\n if (lastEvent instanceof AgentEndTurn) {\n return Some(lastEvent.reason);\n }\n\n return None;\n }\n\n _addChatEvent(agentChatEvent: AgentChatExchangeEvent) {\n if (isToolRequest(agentChatEvent)) {\n return new AgentChatExchange(\n this.userChatMessage,\n this.agentChatEvents,\n this.agentToolCallGroup.addRequest(agentChatEvent),\n this.id,\n );\n }\n if (isToolResult(agentChatEvent)) {\n return new AgentChatExchange(\n this.userChatMessage,\n this.agentChatEvents,\n this.agentToolCallGroup.addResult(agentChatEvent),\n this.id,\n );\n }\n return new AgentChatExchange(\n this.userChatMessage,\n [...this.agentChatEvents, agentChatEvent],\n this.agentToolCallGroup,\n this.id,\n );\n }\n}\n\nexport type AgentChatExchangeEvent =\n | AgentChatResponse<AgentResponseContent>\n | AgentEndTurn\n | AgentToolCall\n | AgentToolCallGroup;\n"]}