@dremio/js-sdk 0.37.0 → 0.39.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 +13 -2
- package/dist/cloud/ai/AIResource.js +21 -23
- package/dist/cloud/ai/AIResource.js.map +1 -1
- package/dist/cloud/projects/Project.d.ts +6 -0
- package/dist/cloud/projects/Project.js +64 -0
- package/dist/cloud/projects/Project.js.map +1 -1
- package/dist/enterprise/ai/AIResource.d.ts +13 -15
- package/dist/enterprise/ai/AIResource.js +6 -36
- package/dist/enterprise/ai/AIResource.js.map +1 -1
- package/dist/enterprise/ai/chat/AgentChatPartialResponse.d.ts +6 -6
- package/dist/enterprise/ai/chat/AgentChatResponse.js +4 -2
- package/dist/enterprise/ai/chat/AgentChatResponse.js.map +1 -1
- package/dist/enterprise/ai/chat/ChatSession.d.ts +18 -9
- package/dist/enterprise/ai/chat/ChatSession.js +18 -4
- package/dist/enterprise/ai/chat/ChatSession.js.map +1 -1
- package/dist/enterprise/ai/chat/chatEventSchema.d.ts +18 -0
- package/dist/enterprise/ai/chat/chatEventSchema.js +32 -11
- package/dist/enterprise/ai/chat/chatEventSchema.js.map +1 -1
- package/dist/enterprise/ai/chat/methods/sendChatMessage.d.ts +10 -0
- package/dist/enterprise/ai/chat/methods/sendChatMessage.js +59 -0
- package/dist/enterprise/ai/chat/methods/sendChatMessage.js.map +1 -0
- package/dist/enterprise/grants/Grant.d.ts +6 -6
- package/dist/enterprise/grants/Grant.js.map +1 -1
- package/dist/enterprise/grants/GrantsResource.d.ts +1 -1
- package/dist/enterprise/grants/createRetrieveGrants.d.ts +1 -1
- package/dist/enterprise/users/EnterpriseUser.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ChatSession } from "../../enterprise/ai/chat/ChatSession.ts";
|
|
2
2
|
import type { UserChatMessage } from "../../enterprise/ai/chat/UserChatMessage.ts";
|
|
3
|
-
import { AgentChatResponse } from "../../enterprise/ai/chat/AgentChatResponse.ts";
|
|
4
3
|
import type { Logger, SonarV4Config, V4Config } from "../../common/Config.ts";
|
|
5
4
|
import { ModelProvider } from "../../enterprise/ai/ModelProvider.ts";
|
|
6
5
|
import * as z from "zod/mini";
|
|
@@ -8,6 +7,10 @@ import { modelProviderCreateCodec } from "./modelProviderCodec.js";
|
|
|
8
7
|
import { DremioModelProvider } from "./DremioModelProvider.ts";
|
|
9
8
|
import { listAvailableModels } from "../../enterprise/ai/AIResource.ts";
|
|
10
9
|
import type { SignalParam } from "../../common/Params.ts";
|
|
10
|
+
import type { AgentChatResponse, AgentResponseContent } from "../../enterprise/ai/chat/AgentChatResponse.ts";
|
|
11
|
+
import { type Observable } from "rxjs";
|
|
12
|
+
import { AgentChatExchange } from "../../enterprise/ai/chat/eventWrappers/AgentChatExchange.ts";
|
|
13
|
+
import { ChatSessionClient } from "../../enterprise/ai/chat/ChatSessionClient.ts";
|
|
11
14
|
export declare class AIResource {
|
|
12
15
|
#private;
|
|
13
16
|
constructor(config: Logger & V4Config & SonarV4Config);
|
|
@@ -236,5 +239,13 @@ export declare class AIResource {
|
|
|
236
239
|
* Sends a chat message to the Dremio AI Agent and returns an Observable containing
|
|
237
240
|
* Agent replies.
|
|
238
241
|
*/
|
|
239
|
-
sendChatMessage(chatSession: ChatSession
|
|
242
|
+
sendChatMessage(chatSession: ChatSession, userChatMessage: UserChatMessage): Observable<import("ts-results-es").Ok<AgentChatResponse<AgentResponseContent>> | import("ts-results-es").Err<import("../index.ts").HttpError | import("../index.ts").Problem<"https://api.dremio.dev/problems/ai-agent/chat/agent-disabled" | "https://api.dremio.dev/problems/ai-agent/chat/input-too-large" | "https://api.dremio.dev/problems/ai-agent/chat/model-provider-not-found" | "https://api.dremio.dev/problems/ai-agent/chat/no-default-model-provider" | "https://api.dremio.dev/problems/ai-agent/chat/no-model-provider-privilege" | "https://api.dremio.dev/problems/ai-agent/chat/preview-disabled" | "https://api.dremio.dev/problems/ai-agent/chat/rate-limit-exceeded", undefined>>>;
|
|
243
|
+
/**
|
|
244
|
+
* Creates an Observable that emits each time the `AgentChatExchange` is updated
|
|
245
|
+
* with events from the Agent.
|
|
246
|
+
*/
|
|
247
|
+
createAgentChatExchange$<T extends AgentResponseContent>(chatSession: ChatSession, userChatMessage: UserChatMessage, options?: {
|
|
248
|
+
mapChatEvents?: (v: AgentChatResponse<AgentResponseContent>) => Observable<AgentChatResponse<T>>;
|
|
249
|
+
}): Observable<AgentChatExchange>;
|
|
250
|
+
createChatSessionClient(chatSession: ChatSession): ChatSessionClient;
|
|
240
251
|
}
|
|
@@ -13,10 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { map } from "rxjs";
|
|
17
16
|
import { ChatSession } from "../../enterprise/ai/chat/ChatSession.js";
|
|
18
|
-
import { AgentChatResponse } from "../../enterprise/ai/chat/AgentChatResponse.js";
|
|
19
|
-
import { fromTextEventStream } from "../../common/fromTextEventStream.js";
|
|
20
17
|
import { ModelProvider } from "../../enterprise/ai/ModelProvider.js";
|
|
21
18
|
import * as z from "zod/mini";
|
|
22
19
|
import { dremioProvidedSchema, modelProviderCreateCodec, modelProviderRetrieveCodec, safeDecodeModelProvider, } from "./modelProviderCodec.js";
|
|
@@ -24,6 +21,11 @@ import { modelProviderRetrieveCodec as baseModelProviderRetrieveCodec } from "..
|
|
|
24
21
|
import { DremioModelProvider } from "./DremioModelProvider.js";
|
|
25
22
|
import { safeParseResultToResult } from "../../common/safeParseResultToResult.js";
|
|
26
23
|
import { listAvailableModels } from "../../enterprise/ai/AIResource.js";
|
|
24
|
+
import { createSendChatMessage } from "../../enterprise/ai/chat/methods/sendChatMessage.js";
|
|
25
|
+
import { catchError, concatMap, endWith, map, of, scan, share, startWith, } from "rxjs";
|
|
26
|
+
import { AgentEndTurn } from "../../enterprise/ai/chat/eventWrappers/AgentEndTurn.js";
|
|
27
|
+
import { AgentChatExchange } from "../../enterprise/ai/chat/eventWrappers/AgentChatExchange.js";
|
|
28
|
+
import { ChatSessionClient } from "../../enterprise/ai/chat/ChatSessionClient.js";
|
|
27
29
|
export class AIResource {
|
|
28
30
|
#config;
|
|
29
31
|
constructor(config) {
|
|
@@ -87,26 +89,22 @@ export class AIResource {
|
|
|
87
89
|
* Sends a chat message to the Dremio AI Agent and returns an Observable containing
|
|
88
90
|
* Agent replies.
|
|
89
91
|
*/
|
|
90
|
-
sendChatMessage(chatSession) {
|
|
91
|
-
return (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
.
|
|
105
|
-
|
|
106
|
-
throw result.error;
|
|
107
|
-
}
|
|
108
|
-
return result.value;
|
|
109
|
-
})).pipe(map((event) => AgentChatResponse.fromJSON(JSON.parse(event.data))));
|
|
92
|
+
sendChatMessage(chatSession, userChatMessage) {
|
|
93
|
+
return createSendChatMessage(this.#config)(chatSession, userChatMessage);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Creates an Observable that emits each time the `AgentChatExchange` is updated
|
|
97
|
+
* with events from the Agent.
|
|
98
|
+
*/
|
|
99
|
+
createAgentChatExchange$(chatSession, userChatMessage, options = {}) {
|
|
100
|
+
const initialAgentChatExchange = new AgentChatExchange(userChatMessage, []);
|
|
101
|
+
return this.sendChatMessage(chatSession, userChatMessage).pipe(map((eventResult) => eventResult.unwrap()), concatMap((agentChatEvent) => options.mapChatEvents?.(agentChatEvent) || of(agentChatEvent)), endWith(new AgentEndTurn({ type: "reply_finished" })), catchError((error) => of(new AgentEndTurn({ error, type: "error" }))), scan((agentChatExchange, agentChatEvent) => agentChatExchange._addChatEvent(agentChatEvent), initialAgentChatExchange), startWith(initialAgentChatExchange), share());
|
|
102
|
+
}
|
|
103
|
+
createChatSessionClient(chatSession) {
|
|
104
|
+
return new ChatSessionClient({
|
|
105
|
+
chatSession,
|
|
106
|
+
createAgentChatExchange$: this.createAgentChatExchange$.bind(this),
|
|
107
|
+
});
|
|
110
108
|
}
|
|
111
109
|
}
|
|
112
110
|
//# sourceMappingURL=AIResource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIResource.js","sourceRoot":"","sources":["../../../src/cloud/ai/AIResource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAElF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,GAExB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,0BAA0B,IAAI,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AACzH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGxE,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,OAAO,CACN,CAAC,MAAM,EAAE,EAAE,CACT,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAqC,CACpF,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;oBACb,IAAI,gBAAgB,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;wBAC1C,OAAO,IAAI,mBAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,UAAkD,CACnD,CAAC;oBACJ,CAAC;oBACD,OAAO,IAAI,aAAa,CACtB,IAAI,CAAC,OAAO,EACZ,UAA6D,CAC9D,CAAC;gBACJ,CAAC,CACF,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,GAAG,IAAwD;QAC7E,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,qBAAqB,CAAC,EAAU;QAC9B,OAAO,IAAI,CAAC,OAAO;aAChB,SAAS,CAAC,yBAAyB,EAAE,EAAE,EAAE;YACxC,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC;aACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAyD,CAAC;aAC/E,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,WAAwB;QACtC,OAAO,CAAC,WAA4B,EAAE,EAAE,CACtC,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACjC,IAAI,CAAC,OAAO;aACT,cAAc,CAAC,OAAO,EAAE;YACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE;gBAC/B,SAAS,EAAE,WAAW,CAAC,SAAS;aAKjC,CAAC;YACF,OAAO,EAAE;gBACP,MAAM,EAAE,mBAAmB;gBAC3B,cAAc,EAAE,kBAAkB;aACnC;YACD,MAAM,EAAE,MAAM;YACd,MAAM;SACP,CAAC;aACD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACvB,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;gBACnB,MAAM,MAAM,CAAC,KAAK,CAAC;YACrB,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC,CAAC,CACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,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 { map } from \"rxjs\";\nimport { ChatSession } from \"../../enterprise/ai/chat/ChatSession.ts\";\nimport type { UserChatMessage } from \"../../enterprise/ai/chat/UserChatMessage.ts\";\nimport { AgentChatResponse } from \"../../enterprise/ai/chat/AgentChatResponse.ts\";\nimport type { Logger, SonarV4Config, V4Config } from \"../../common/Config.ts\";\nimport { fromTextEventStream } from \"../../common/fromTextEventStream.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\";\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) {\n return (chatMessage: UserChatMessage) =>\n fromTextEventStream(({ signal }) =>\n this.#config\n .sonarV4Request(\"agent\", {\n body: JSON.stringify({\n message: chatMessage.toString(),\n sessionId: chatSession.sessionId,\n } satisfies {\n message: string;\n modelProviderId?: string;\n sessionId?: string;\n }),\n headers: {\n Accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n })\n .promise.then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ).pipe(map((event) => AgentChatResponse.fromJSON(JSON.parse(event.data))));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AIResource.js","sourceRoot":"","sources":["../../../src/cloud/ai/AIResource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,GAExB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,0BAA0B,IAAI,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AACzH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAK5F,OAAO,EACL,UAAU,EACV,SAAS,EACT,OAAO,EACP,GAAG,EACH,EAAE,EACF,IAAI,EACJ,KAAK,EACL,SAAS,GAEV,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,YAAY,EAAE,MAAM,wDAAwD,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAElF,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,OAAO,CACN,CAAC,MAAM,EAAE,EAAE,CACT,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAqC,CACpF,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;oBACb,IAAI,gBAAgB,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;wBAC1C,OAAO,IAAI,mBAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,UAAkD,CACnD,CAAC;oBACJ,CAAC;oBACD,OAAO,IAAI,aAAa,CACtB,IAAI,CAAC,OAAO,EACZ,UAA6D,CAC9D,CAAC;gBACJ,CAAC,CACF,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,GAAG,IAAwD;QAC7E,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,qBAAqB,CAAC,EAAU;QAC9B,OAAO,IAAI,CAAC,OAAO;aAChB,SAAS,CAAC,yBAAyB,EAAE,EAAE,EAAE;YACxC,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC;aACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAyD,CAAC;aAC/E,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,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;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;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 { 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"]}
|
|
@@ -4,6 +4,8 @@ import { projectUpdateSchema, type projectPropertiesCodec } from "./projectPrope
|
|
|
4
4
|
import * as z from "zod/mini";
|
|
5
5
|
import type { V3Config } from "../../common/Config.ts";
|
|
6
6
|
import type { HttpError } from "../../common/HttpError.ts";
|
|
7
|
+
import type { SignalParam } from "../../common/Params.ts";
|
|
8
|
+
import { Grant } from "../../enterprise/grants/Grant.ts";
|
|
7
9
|
export declare class Project implements ProjectInterface {
|
|
8
10
|
#private;
|
|
9
11
|
readonly catalog: ProjectInterface["catalog"];
|
|
@@ -26,6 +28,10 @@ export declare class Project implements ProjectInterface {
|
|
|
26
28
|
activate(): Promise<Result<undefined, HttpError>>;
|
|
27
29
|
delete(): Promise<Result<undefined, HttpError>>;
|
|
28
30
|
update(properties: z.output<typeof projectUpdateSchema>): AsyncResult<Project, HttpError | z.core.util.SafeParseResult<z.output<typeof projectUpdateSchema>>["error"]>;
|
|
31
|
+
grants({ signal }?: SignalParam): AsyncResult<{
|
|
32
|
+
readonly availablePrivileges: Set<"DELETE" | "ALTER" | "INSERT" | "SELECT" | "TRUNCATE" | "UPDATE" | "DROP" | "MODIFY" | "MANAGE_GRANTS" | "ALTER_REFLECTION" | "CREATE_SOURCE" | "CREATE_TABLE" | "EXECUTE" | "EXTERNAL_QUERY" | "MONITOR" | "OPERATE" | "READ_METADATA" | "UPLOAD_FILE" | "USAGE" | "VIEW_JOB_HISTORY" | "VIEW_REFLECTION">;
|
|
33
|
+
readonly grants: Grant<Set<"DELETE" | "ALTER" | "INSERT" | "SELECT" | "TRUNCATE" | "UPDATE" | "DROP" | "MODIFY" | "MANAGE_GRANTS" | "ALTER_REFLECTION" | "CREATE_SOURCE" | "CREATE_TABLE" | "EXECUTE" | "EXTERNAL_QUERY" | "MONITOR" | "OPERATE" | "READ_METADATA" | "UPLOAD_FILE" | "USAGE" | "VIEW_JOB_HISTORY" | "VIEW_REFLECTION">, "PROJECT">[];
|
|
34
|
+
}, HttpError>;
|
|
29
35
|
get settled(): boolean;
|
|
30
36
|
static updateSchema: z.ZodMiniObject<{
|
|
31
37
|
credentials: z.ZodMiniOptional<z.ZodMiniOptional<z.ZodMiniDiscriminatedUnion<[z.ZodMiniObject<{
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
import { AsyncResult, Err } from "ts-results-es";
|
|
17
17
|
import { projectUpdateSchema } from "./projectPropertiesCodec.js";
|
|
18
18
|
import * as z from "zod/mini";
|
|
19
|
+
import { Grant } from "../../enterprise/grants/Grant.js";
|
|
20
|
+
import { RoleGrantee, UserGrantee } from "../../enterprise/Grantee.js";
|
|
19
21
|
export class Project {
|
|
20
22
|
#config;
|
|
21
23
|
catalog;
|
|
@@ -79,9 +81,71 @@ export class Project {
|
|
|
79
81
|
.map((res) => res.json())
|
|
80
82
|
.map((entity) => this.#projectsResource._createFromEntity(entity));
|
|
81
83
|
}
|
|
84
|
+
grants({ signal } = {}) {
|
|
85
|
+
return this.#config
|
|
86
|
+
.v3Request(`projects/${this.id}/grants`, {
|
|
87
|
+
headers: {
|
|
88
|
+
Accept: "application/json",
|
|
89
|
+
},
|
|
90
|
+
signal,
|
|
91
|
+
})
|
|
92
|
+
.map((res) => res.json())
|
|
93
|
+
.map((v) => {
|
|
94
|
+
return {
|
|
95
|
+
availablePrivileges: new Set(v.availablePrivileges),
|
|
96
|
+
grants: v.grants.map((grant) => {
|
|
97
|
+
const grantee = grant.granteeType === "USER"
|
|
98
|
+
? new UserGrantee(grant.granteeId)
|
|
99
|
+
: new RoleGrantee(grant.granteeId);
|
|
100
|
+
return new Grant({
|
|
101
|
+
grantee,
|
|
102
|
+
privileges: new Set(grant.privileges),
|
|
103
|
+
tag: grant.tag,
|
|
104
|
+
type: "PROJECT",
|
|
105
|
+
});
|
|
106
|
+
}),
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
}
|
|
82
110
|
get settled() {
|
|
83
111
|
return this.state === "ACTIVE" || this.state === "ARCHIVED" || this.state === "INACTIVE";
|
|
84
112
|
}
|
|
85
113
|
static updateSchema = projectUpdateSchema;
|
|
86
114
|
}
|
|
115
|
+
const projectAvailablePrivileges = z.enum([
|
|
116
|
+
"ALTER",
|
|
117
|
+
"ALTER_REFLECTION",
|
|
118
|
+
"CREATE_SOURCE",
|
|
119
|
+
"CREATE_TABLE",
|
|
120
|
+
"DELETE",
|
|
121
|
+
"DROP",
|
|
122
|
+
"EXECUTE",
|
|
123
|
+
"EXTERNAL_QUERY",
|
|
124
|
+
"INSERT",
|
|
125
|
+
"MANAGE_GRANTS",
|
|
126
|
+
"MODIFY",
|
|
127
|
+
"MONITOR",
|
|
128
|
+
"OPERATE",
|
|
129
|
+
"READ_METADATA",
|
|
130
|
+
"SELECT",
|
|
131
|
+
"TRUNCATE",
|
|
132
|
+
"UPDATE",
|
|
133
|
+
"UPLOAD_FILE",
|
|
134
|
+
"USAGE",
|
|
135
|
+
"VIEW_JOB_HISTORY",
|
|
136
|
+
"VIEW_REFLECTION",
|
|
137
|
+
]);
|
|
138
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
139
|
+
const projectGrantsInSchema = z.object({
|
|
140
|
+
availablePrivileges: z.array(projectAvailablePrivileges),
|
|
141
|
+
grants: z.array(z.object({
|
|
142
|
+
granteeId: z.string(),
|
|
143
|
+
granteeType: z.enum(["USER", "ROLE"]),
|
|
144
|
+
grantType: z.literal("PROJECT"),
|
|
145
|
+
name: z.string(),
|
|
146
|
+
privileges: z.array(projectAvailablePrivileges),
|
|
147
|
+
tag: z.string(),
|
|
148
|
+
})),
|
|
149
|
+
totalResults: z.int().check(z.minimum(0)),
|
|
150
|
+
});
|
|
87
151
|
//# sourceMappingURL=Project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Project.js","sourceRoot":"","sources":["../../../src/cloud/projects/Project.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 { AsyncResult, Err, type Result } from \"ts-results-es\";\nimport type { ProjectsResource } from \"./ProjectsResource.ts\";\nimport { projectUpdateSchema, type projectPropertiesCodec } from \"./projectPropertiesCodec.ts\";\nimport * as z from \"zod/mini\";\nimport type { V3Config } from \"../../common/Config.ts\";\nimport type { HttpError } from \"../../common/HttpError.ts\";\n\nexport class Project implements ProjectInterface {\n readonly #config: V3Config;\n readonly catalog: ProjectInterface[\"catalog\"];\n readonly cloudId: ProjectInterface[\"cloudId\"];\n readonly cloudType: ProjectInterface[\"cloudType\"];\n readonly createdAt: ProjectInterface[\"createdAt\"];\n readonly createdBy: ProjectInterface[\"createdBy\"];\n readonly credentials: ProjectInterface[\"credentials\"];\n readonly id: ProjectInterface[\"id\"];\n readonly lastStateError: ProjectInterface[\"lastStateError\"];\n readonly modifiedAt: ProjectInterface[\"modifiedAt\"];\n readonly modifiedBy: ProjectInterface[\"modifiedBy\"];\n readonly name: ProjectInterface[\"name\"];\n readonly numberOfEngines: ProjectInterface[\"numberOfEngines\"];\n readonly primaryCatalog: ProjectInterface[\"primaryCatalog\"];\n readonly projectStore: ProjectInterface[\"projectStore\"];\n readonly state: ProjectInterface[\"state\"];\n readonly type: ProjectInterface[\"type\"];\n\n #projectsResource: ProjectsResource;\n\n constructor(config: V3Config, properties: ProjectProperties, projectsResource: ProjectsResource) {\n this.#config = config;\n this.catalog = properties.catalog;\n this.cloudId = properties.cloudId;\n this.cloudType = properties.cloudType;\n this.createdAt = properties.createdAt;\n this.createdBy = properties.createdBy;\n this.credentials = properties.credentials;\n this.id = properties.id;\n this.lastStateError = properties.lastStateError;\n this.modifiedAt = properties.modifiedAt;\n this.modifiedBy = properties.modifiedBy;\n this.name = properties.name;\n this.numberOfEngines = properties.numberOfEngines;\n this.primaryCatalog = properties.primaryCatalog;\n this.projectStore = properties.projectStore;\n this.state = properties.state;\n this.type = properties.type;\n this.#projectsResource = projectsResource;\n }\n\n activate() {\n return this.#projectsResource.activate(this.id);\n }\n\n delete() {\n return this.#projectsResource.delete(this.id);\n }\n\n update(\n properties: z.output<typeof projectUpdateSchema>,\n ): AsyncResult<\n Project,\n HttpError | z.core.util.SafeParseResult<z.output<typeof projectUpdateSchema>>[\"error\"]\n > {\n const parsedProperties = z.safeEncode(projectUpdateSchema, properties);\n if (!parsedProperties.success) {\n return new AsyncResult(Promise.resolve(Err(parsedProperties.error)));\n }\n return this.#config\n .v3Request(`projects/${this.id}`, {\n body: JSON.stringify(parsedProperties.data),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n keepalive: true,\n method: \"PUT\",\n })\n .map((res) => res.json() as Promise<z.input<typeof projectPropertiesCodec>>)\n .map((entity) => this.#projectsResource._createFromEntity(entity));\n }\n\n get settled() {\n return this.state === \"ACTIVE\" || this.state === \"ARCHIVED\" || this.state === \"INACTIVE\";\n }\n\n static updateSchema = projectUpdateSchema;\n}\n\nexport type ProjectProperties = z.output<typeof projectPropertiesCodec>;\n\nexport type ProjectMethods = {\n delete(): Promise<Result<undefined, unknown>>;\n get settled(): boolean;\n};\n\nexport type ProjectInterface = ProjectProperties & ProjectMethods;\n"]}
|
|
1
|
+
{"version":3,"file":"Project.js","sourceRoot":"","sources":["../../../src/cloud/projects/Project.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 { AsyncResult, Err, type Result } from \"ts-results-es\";\nimport type { ProjectsResource } from \"./ProjectsResource.ts\";\nimport { projectUpdateSchema, type projectPropertiesCodec } from \"./projectPropertiesCodec.ts\";\nimport * as z from \"zod/mini\";\nimport type { V3Config } from \"../../common/Config.ts\";\nimport type { HttpError } from \"../../common/HttpError.ts\";\nimport type { SignalParam } from \"../../common/Params.ts\";\nimport { Grant } from \"../../enterprise/grants/Grant.ts\";\nimport { RoleGrantee, UserGrantee } from \"../../enterprise/Grantee.ts\";\n\nexport class Project implements ProjectInterface {\n readonly #config: V3Config;\n readonly catalog: ProjectInterface[\"catalog\"];\n readonly cloudId: ProjectInterface[\"cloudId\"];\n readonly cloudType: ProjectInterface[\"cloudType\"];\n readonly createdAt: ProjectInterface[\"createdAt\"];\n readonly createdBy: ProjectInterface[\"createdBy\"];\n readonly credentials: ProjectInterface[\"credentials\"];\n readonly id: ProjectInterface[\"id\"];\n readonly lastStateError: ProjectInterface[\"lastStateError\"];\n readonly modifiedAt: ProjectInterface[\"modifiedAt\"];\n readonly modifiedBy: ProjectInterface[\"modifiedBy\"];\n readonly name: ProjectInterface[\"name\"];\n readonly numberOfEngines: ProjectInterface[\"numberOfEngines\"];\n readonly primaryCatalog: ProjectInterface[\"primaryCatalog\"];\n readonly projectStore: ProjectInterface[\"projectStore\"];\n readonly state: ProjectInterface[\"state\"];\n readonly type: ProjectInterface[\"type\"];\n\n #projectsResource: ProjectsResource;\n\n constructor(config: V3Config, properties: ProjectProperties, projectsResource: ProjectsResource) {\n this.#config = config;\n this.catalog = properties.catalog;\n this.cloudId = properties.cloudId;\n this.cloudType = properties.cloudType;\n this.createdAt = properties.createdAt;\n this.createdBy = properties.createdBy;\n this.credentials = properties.credentials;\n this.id = properties.id;\n this.lastStateError = properties.lastStateError;\n this.modifiedAt = properties.modifiedAt;\n this.modifiedBy = properties.modifiedBy;\n this.name = properties.name;\n this.numberOfEngines = properties.numberOfEngines;\n this.primaryCatalog = properties.primaryCatalog;\n this.projectStore = properties.projectStore;\n this.state = properties.state;\n this.type = properties.type;\n this.#projectsResource = projectsResource;\n }\n\n activate() {\n return this.#projectsResource.activate(this.id);\n }\n\n delete() {\n return this.#projectsResource.delete(this.id);\n }\n\n update(\n properties: z.output<typeof projectUpdateSchema>,\n ): AsyncResult<\n Project,\n HttpError | z.core.util.SafeParseResult<z.output<typeof projectUpdateSchema>>[\"error\"]\n > {\n const parsedProperties = z.safeEncode(projectUpdateSchema, properties);\n if (!parsedProperties.success) {\n return new AsyncResult(Promise.resolve(Err(parsedProperties.error)));\n }\n return this.#config\n .v3Request(`projects/${this.id}`, {\n body: JSON.stringify(parsedProperties.data),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n keepalive: true,\n method: \"PUT\",\n })\n .map((res) => res.json() as Promise<z.input<typeof projectPropertiesCodec>>)\n .map((entity) => this.#projectsResource._createFromEntity(entity));\n }\n\n grants({ signal }: SignalParam = {}) {\n return this.#config\n .v3Request(`projects/${this.id}/grants`, {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map((res) => res.json() as Promise<z.infer<typeof projectGrantsInSchema>>)\n .map((v) => {\n return {\n availablePrivileges: new Set(v.availablePrivileges),\n grants: v.grants.map((grant) => {\n const grantee =\n grant.granteeType === \"USER\"\n ? new UserGrantee(grant.granteeId)\n : new RoleGrantee(grant.granteeId);\n\n return new Grant({\n grantee,\n privileges: new Set(grant.privileges),\n tag: grant.tag,\n type: \"PROJECT\",\n });\n }),\n } as const;\n });\n }\n\n get settled() {\n return this.state === \"ACTIVE\" || this.state === \"ARCHIVED\" || this.state === \"INACTIVE\";\n }\n\n static updateSchema = projectUpdateSchema;\n}\n\nexport type ProjectProperties = z.output<typeof projectPropertiesCodec>;\n\nexport type ProjectMethods = {\n delete(): Promise<Result<undefined, unknown>>;\n get settled(): boolean;\n};\n\nexport type ProjectInterface = ProjectProperties & ProjectMethods;\n\nconst projectAvailablePrivileges = z.enum([\n \"ALTER\",\n \"ALTER_REFLECTION\",\n \"CREATE_SOURCE\",\n \"CREATE_TABLE\",\n \"DELETE\",\n \"DROP\",\n \"EXECUTE\",\n \"EXTERNAL_QUERY\",\n \"INSERT\",\n \"MANAGE_GRANTS\",\n \"MODIFY\",\n \"MONITOR\",\n \"OPERATE\",\n \"READ_METADATA\",\n \"SELECT\",\n \"TRUNCATE\",\n \"UPDATE\",\n \"UPLOAD_FILE\",\n \"USAGE\",\n \"VIEW_JOB_HISTORY\",\n \"VIEW_REFLECTION\",\n]);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst projectGrantsInSchema = z.object({\n availablePrivileges: z.array(projectAvailablePrivileges),\n grants: z.array(\n z.object({\n granteeId: z.string(),\n granteeType: z.enum([\"USER\", \"ROLE\"]),\n grantType: z.literal(\"PROJECT\"),\n name: z.string(),\n privileges: z.array(projectAvailablePrivileges),\n tag: z.string(),\n }),\n ),\n totalResults: z.int().check(z.minimum(0)),\n});\n"]}
|
|
@@ -1,24 +1,22 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
1
2
|
import { ChatSession } from "./chat/ChatSession.ts";
|
|
2
3
|
import type { UserChatMessage } from "./chat/UserChatMessage.ts";
|
|
3
|
-
import { AgentChatResponse } from "./chat/AgentChatResponse.ts";
|
|
4
|
+
import { AgentChatResponse, type AgentResponseContent } from "./chat/AgentChatResponse.ts";
|
|
4
5
|
import type { Logger, SonarV4Config, V4Config } from "../../common/Config.ts";
|
|
5
6
|
import { ModelProvider } from "./ModelProvider.ts";
|
|
6
7
|
import * as z from "zod/mini";
|
|
7
8
|
import { modelProviderCreateCodec } from "./modelProviderCodec.js";
|
|
8
9
|
import type { SignalParam } from "../../common/Params.ts";
|
|
9
10
|
import { listModelsPropertiesSchema } from "./modelProviderConfigSchemas.js";
|
|
10
|
-
import { Err, Ok } from "ts-results-es";
|
|
11
|
-
import type { HttpError } from "../../common/HttpError.ts";
|
|
12
|
-
import { Problem } from "../../common/Problem.ts";
|
|
13
11
|
import { AgentChatExchange } from "./chat/eventWrappers/AgentChatExchange.ts";
|
|
14
12
|
import { ChatSessionClient } from "./chat/ChatSessionClient.ts";
|
|
15
|
-
export declare function listAvailableModels(config: V4Config): (properties: z.infer<typeof listModelsPropertiesSchema>, { signal }?: SignalParam) => import("ts-results-es").AsyncResult<Set<string>, HttpError>;
|
|
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>;
|
|
16
14
|
export declare class AIResource {
|
|
17
15
|
#private;
|
|
18
16
|
constructor(config: Logger & V4Config & SonarV4Config);
|
|
19
|
-
createModelProvider(properties: z.output<typeof modelProviderCreateCodec>): import("ts-results-es").AsyncResult<ModelProvider, HttpError>;
|
|
17
|
+
createModelProvider(properties: z.output<typeof modelProviderCreateCodec>): import("ts-results-es").AsyncResult<ModelProvider, import("../index.ts").HttpError>;
|
|
20
18
|
listModelProviders(): {
|
|
21
|
-
data({ signal }?: SignalParam): AsyncGenerator<Ok<ModelProvider> | Err<z.core.$ZodError<{
|
|
19
|
+
data({ signal }?: SignalParam): AsyncGenerator<import("ts-results-es").Ok<ModelProvider> | import("ts-results-es").Err<z.core.$ZodError<{
|
|
22
20
|
name: string;
|
|
23
21
|
id: string;
|
|
24
22
|
tag: string;
|
|
@@ -63,7 +61,7 @@ export declare class AIResource {
|
|
|
63
61
|
sqlModelNames: Set<string>;
|
|
64
62
|
}>>, void, unknown>;
|
|
65
63
|
getPage: ({ signal }?: SignalParam) => import("ts-results-es").AsyncResult<{
|
|
66
|
-
data: (Ok<ModelProvider> | Err<z.core.$ZodError<{
|
|
64
|
+
data: (import("ts-results-es").Ok<ModelProvider> | import("ts-results-es").Err<z.core.$ZodError<{
|
|
67
65
|
name: string;
|
|
68
66
|
id: string;
|
|
69
67
|
tag: string;
|
|
@@ -107,21 +105,21 @@ export declare class AIResource {
|
|
|
107
105
|
modifiedAt: import("temporal-polyfill").Temporal.Instant;
|
|
108
106
|
sqlModelNames: Set<string>;
|
|
109
107
|
}>>)[];
|
|
110
|
-
}, HttpError>;
|
|
108
|
+
}, import("../index.ts").HttpError>;
|
|
111
109
|
};
|
|
112
|
-
listAvailableModels(properties: z.infer<typeof listModelsPropertiesSchema>): import("ts-results-es").AsyncResult<Set<string>, HttpError>;
|
|
113
|
-
retrieveModelProvider(id: string, { signal }?: SignalParam): import("ts-results-es").AsyncResult<ModelProvider, HttpError>;
|
|
110
|
+
listAvailableModels(properties: z.infer<typeof listModelsPropertiesSchema>): import("ts-results-es").AsyncResult<Set<string>, import("../index.ts").HttpError>;
|
|
111
|
+
retrieveModelProvider(id: string, { signal }?: SignalParam): import("ts-results-es").AsyncResult<ModelProvider, import("../index.ts").HttpError>;
|
|
114
112
|
/**
|
|
115
113
|
* Creates an Observable that emits each time the `AgentChatExchange` is updated
|
|
116
114
|
* with events from the Agent.
|
|
117
115
|
*/
|
|
118
|
-
createAgentChatExchange
|
|
116
|
+
createAgentChatExchange$<T extends AgentResponseContent>(chatSession: ChatSession, userChatMessage: UserChatMessage, options?: {
|
|
117
|
+
mapChatEvents?: (v: AgentChatResponse<AgentResponseContent>) => Observable<AgentChatResponse<T>>;
|
|
118
|
+
}): Observable<AgentChatExchange>;
|
|
119
119
|
createChatSessionClient(chatSession: ChatSession): ChatSessionClient;
|
|
120
120
|
/**
|
|
121
121
|
* Sends a chat message to the Dremio AI Agent and returns an Observable containing
|
|
122
122
|
* Agent replies.
|
|
123
123
|
*/
|
|
124
|
-
sendChatMessage(chatSession: ChatSession
|
|
124
|
+
sendChatMessage(chatSession: ChatSession, userChatMessage: UserChatMessage): Observable<import("ts-results-es").Ok<AgentChatResponse<AgentResponseContent>> | import("ts-results-es").Err<import("../index.ts").HttpError | import("../index.ts").Problem<"https://api.dremio.dev/problems/ai-agent/chat/agent-disabled" | "https://api.dremio.dev/problems/ai-agent/chat/input-too-large" | "https://api.dremio.dev/problems/ai-agent/chat/model-provider-not-found" | "https://api.dremio.dev/problems/ai-agent/chat/no-default-model-provider" | "https://api.dremio.dev/problems/ai-agent/chat/no-model-provider-privilege" | "https://api.dremio.dev/problems/ai-agent/chat/preview-disabled" | "https://api.dremio.dev/problems/ai-agent/chat/rate-limit-exceeded", undefined>>>;
|
|
125
125
|
}
|
|
126
|
-
type SendChatMessageProblemCodes = "https://api.dremio.dev/problems/ai-agent/chat/agent-disabled" | "https://api.dremio.dev/problems/ai-agent/chat/input-too-large" | "https://api.dremio.dev/problems/ai-agent/chat/model-provider-not-found" | "https://api.dremio.dev/problems/ai-agent/chat/no-default-model-provider" | "https://api.dremio.dev/problems/ai-agent/chat/no-model-provider-privilege" | "https://api.dremio.dev/problems/ai-agent/chat/preview-disabled" | "https://api.dremio.dev/problems/ai-agent/chat/rate-limit-exceeded";
|
|
127
|
-
export {};
|
|
@@ -13,20 +13,18 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { catchError, endWith, map, of, scan, share, startWith
|
|
16
|
+
import { catchError, concatMap, endWith, map, Observable, of, scan, share, startWith } from "rxjs";
|
|
17
17
|
import { ChatSession } from "./chat/ChatSession.js";
|
|
18
18
|
import { AgentChatResponse } from "./chat/AgentChatResponse.js";
|
|
19
|
-
import { fromTextEventStream } from "../../common/fromTextEventStream.js";
|
|
20
19
|
import { ModelProvider } from "./ModelProvider.js";
|
|
21
20
|
import * as z from "zod/mini";
|
|
22
21
|
import { modelProviderCreateCodec, modelProviderRetrieveCodec } from "./modelProviderCodec.js";
|
|
23
22
|
import { safeParseResultToResult } from "../../common/safeParseResultToResult.js";
|
|
24
23
|
import { listModelsPropertiesSchema } from "./modelProviderConfigSchemas.js";
|
|
25
|
-
import { Err, Ok } from "ts-results-es";
|
|
26
|
-
import { Problem } from "../../common/Problem.js";
|
|
27
24
|
import { AgentChatExchange } from "./chat/eventWrappers/AgentChatExchange.js";
|
|
28
25
|
import { AgentEndTurn } from "../interfaces.js";
|
|
29
26
|
import { ChatSessionClient } from "./chat/ChatSessionClient.js";
|
|
27
|
+
import { createSendChatMessage } from "./chat/methods/sendChatMessage.js";
|
|
30
28
|
export function listAvailableModels(config) {
|
|
31
29
|
return function listAvailableModels(properties, { signal } = {}) {
|
|
32
30
|
return config
|
|
@@ -102,9 +100,9 @@ export class AIResource {
|
|
|
102
100
|
* Creates an Observable that emits each time the `AgentChatExchange` is updated
|
|
103
101
|
* with events from the Agent.
|
|
104
102
|
*/
|
|
105
|
-
createAgentChatExchange$(chatSession, userChatMessage) {
|
|
103
|
+
createAgentChatExchange$(chatSession, userChatMessage, options = {}) {
|
|
106
104
|
const initialAgentChatExchange = new AgentChatExchange(userChatMessage, []);
|
|
107
|
-
return this.sendChatMessage(chatSession
|
|
105
|
+
return this.sendChatMessage(chatSession, userChatMessage).pipe(map((eventResult) => eventResult.unwrap()), concatMap((agentChatEvent) => options.mapChatEvents?.(agentChatEvent) || of(agentChatEvent)), endWith(new AgentEndTurn({ type: "reply_finished" })), catchError((error) => of(new AgentEndTurn({ error, type: "error" }))), scan((agentChatExchange, agentChatEvent) => agentChatExchange._addChatEvent(agentChatEvent), initialAgentChatExchange), startWith(initialAgentChatExchange), share());
|
|
108
106
|
}
|
|
109
107
|
createChatSessionClient(chatSession) {
|
|
110
108
|
return new ChatSessionClient({
|
|
@@ -116,36 +114,8 @@ export class AIResource {
|
|
|
116
114
|
* Sends a chat message to the Dremio AI Agent and returns an Observable containing
|
|
117
115
|
* Agent replies.
|
|
118
116
|
*/
|
|
119
|
-
sendChatMessage(chatSession) {
|
|
120
|
-
return (
|
|
121
|
-
.sonarV4Request("agent", {
|
|
122
|
-
body: JSON.stringify({
|
|
123
|
-
message: chatMessage.toString(),
|
|
124
|
-
sessionId: chatSession.sessionId,
|
|
125
|
-
}),
|
|
126
|
-
headers: {
|
|
127
|
-
Accept: "text/event-stream",
|
|
128
|
-
"Content-Type": "application/json",
|
|
129
|
-
},
|
|
130
|
-
method: "POST",
|
|
131
|
-
signal,
|
|
132
|
-
})
|
|
133
|
-
.promise.then((result) => {
|
|
134
|
-
if (result.isErr()) {
|
|
135
|
-
throw result.error;
|
|
136
|
-
}
|
|
137
|
-
return result.value;
|
|
138
|
-
})).pipe(map((event) => Ok(AgentChatResponse.fromJSON(JSON.parse(event.data)))), tap((agentChatResponse) => {
|
|
139
|
-
if (agentChatResponse.isOk()) {
|
|
140
|
-
chatSession.assign(agentChatResponse.value.session);
|
|
141
|
-
}
|
|
142
|
-
}), catchError((e) => of(Err(refineChatErrors(e)))), share());
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
function refineChatErrors(e) {
|
|
146
|
-
if (e.body instanceof Problem) {
|
|
147
|
-
return e.body;
|
|
117
|
+
sendChatMessage(chatSession, userChatMessage) {
|
|
118
|
+
return createSendChatMessage(this.#config)(chatSession, userChatMessage);
|
|
148
119
|
}
|
|
149
|
-
return e;
|
|
150
120
|
}
|
|
151
121
|
//# sourceMappingURL=AIResource.js.map
|
|
@@ -1 +1 @@
|
|
|
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, endWith, map, of, scan, share, startWith, tap } from \"rxjs\";\nimport { ChatSession } from \"./chat/ChatSession.ts\";\nimport type { UserChatMessage } from \"./chat/UserChatMessage.ts\";\nimport { AgentChatResponse } from \"./chat/AgentChatResponse.ts\";\nimport type { Logger, SonarV4Config, V4Config } from \"../../common/Config.ts\";\nimport { fromTextEventStream } from \"../../common/fromTextEventStream.ts\";\nimport { ModelProvider } from \"./ModelProvider.ts\";\n\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 { Err, Ok } from \"ts-results-es\";\nimport type { HttpError } from \"../../common/HttpError.ts\";\nimport { Problem } from \"../../common/Problem.ts\";\nimport { AgentChatExchange } from \"./chat/eventWrappers/AgentChatExchange.ts\";\nimport { AgentEndTurn } from \"../interfaces.ts\";\nimport { ChatSessionClient } from \"./chat/ChatSessionClient.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$(chatSession: ChatSession, userChatMessage: UserChatMessage) {\n const initialAgentChatExchange = new AgentChatExchange(userChatMessage, []);\n\n return this.sendChatMessage(chatSession)(userChatMessage).pipe(\n map((eventResult) => eventResult.unwrap()),\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) {\n return (chatMessage: UserChatMessage) =>\n fromTextEventStream(({ signal }) =>\n this.#config\n .sonarV4Request(\"agent\", {\n body: JSON.stringify({\n message: chatMessage.toString(),\n sessionId: chatSession.sessionId,\n } satisfies {\n message: string;\n modelProviderId?: string;\n sessionId?: string;\n }),\n headers: {\n Accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n })\n .promise.then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ).pipe(\n map((event) => Ok(AgentChatResponse.fromJSON(JSON.parse(event.data)))),\n tap((agentChatResponse) => {\n if (agentChatResponse.isOk()) {\n chatSession.assign(agentChatResponse.value.session);\n }\n }),\n catchError((e: HttpError) => of(Err(refineChatErrors(e)))),\n share(),\n );\n }\n}\n\ntype SendChatMessageProblemCodes =\n | \"https://api.dremio.dev/problems/ai-agent/chat/agent-disabled\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/input-too-large\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/model-provider-not-found\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/no-default-model-provider\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/no-model-provider-privilege\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/preview-disabled\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/rate-limit-exceeded\";\n\nfunction refineChatErrors(e: HttpError) {\n if (e.body instanceof Problem) {\n return e.body as Problem<SendChatMessageProblemCodes>;\n }\n return e;\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 { 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"]}
|
|
@@ -16,9 +16,9 @@ export declare class AgentChatPartialResponse {
|
|
|
16
16
|
content: string;
|
|
17
17
|
id: string;
|
|
18
18
|
session: {
|
|
19
|
-
modelName
|
|
20
|
-
modelProviderId
|
|
21
|
-
sessionId
|
|
19
|
+
modelName: string;
|
|
20
|
+
modelProviderId: string;
|
|
21
|
+
sessionId: string;
|
|
22
22
|
};
|
|
23
23
|
type: "delta" | "end" | "start";
|
|
24
24
|
};
|
|
@@ -28,9 +28,9 @@ export declare class AgentChatPartialResponse {
|
|
|
28
28
|
content: z.ZodMiniString<string>;
|
|
29
29
|
id: z.ZodMiniString<string>;
|
|
30
30
|
session: z.ZodMiniObject<{
|
|
31
|
-
modelName: z.
|
|
32
|
-
modelProviderId: z.
|
|
33
|
-
sessionId: z.
|
|
31
|
+
modelName: z.ZodMiniString<string>;
|
|
32
|
+
modelProviderId: z.ZodMiniString<string>;
|
|
33
|
+
sessionId: z.ZodMiniString<string>;
|
|
34
34
|
}, z.core.$strip>;
|
|
35
35
|
type: z.ZodMiniEnum<{
|
|
36
36
|
delta: "delta";
|
|
@@ -53,6 +53,7 @@ export class AgentChatResponse {
|
|
|
53
53
|
}
|
|
54
54
|
static codec = z.codec(chatEventSchema, z.instanceof(AgentChatResponse), {
|
|
55
55
|
decode(chatEvent) {
|
|
56
|
+
const chatSession = ChatSession.new();
|
|
56
57
|
const content = (() => {
|
|
57
58
|
switch (chatEvent.chunkType) {
|
|
58
59
|
case "error":
|
|
@@ -68,7 +69,7 @@ export class AgentChatResponse {
|
|
|
68
69
|
return new AgentToolResultResponseContent(chatEvent.callId, chatEvent.name, chatEvent.result);
|
|
69
70
|
}
|
|
70
71
|
})();
|
|
71
|
-
|
|
72
|
+
chatSession.assign({
|
|
72
73
|
...("modelName" in chatEvent && { modelName: chatEvent.modelName }),
|
|
73
74
|
...("modelProviderId" in chatEvent && {
|
|
74
75
|
modelProviderId: chatEvent.modelProviderId,
|
|
@@ -76,7 +77,8 @@ export class AgentChatResponse {
|
|
|
76
77
|
...("sessionId" in chatEvent && {
|
|
77
78
|
sessionId: chatEvent.sessionId,
|
|
78
79
|
}),
|
|
79
|
-
})
|
|
80
|
+
});
|
|
81
|
+
return new AgentChatResponse(chatSession, content, "createdAt" in chatEvent
|
|
80
82
|
? Temporal.Instant.from(chatEvent.createdAt)
|
|
81
83
|
: Temporal.Now.instant());
|
|
82
84
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentChatResponse.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/chat/AgentChatResponse.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 { nanoid } from \"nanoid/non-secure\";\nimport { AgentErrorResponseContent } from \"./AgentErrorResponseContent.ts\";\nimport { AgentModelResponseContent } from \"./AgentModelResponseContent.ts\";\nimport { AgentToolRequestResponseContent } from \"./AgentToolRequestResponseContent.ts\";\nimport { AgentToolResultResponseContent } from \"./AgentToolResultResponseContent.ts\";\nimport { ChatSession } from \"./ChatSession.ts\";\nimport * as z from \"zod/mini\";\nimport { Temporal } from \"temporal-polyfill\";\nimport { chatEventSchema, type ChatEvent } from \"./chatEventSchema.ts\";\n\nexport class AgentChatResponse<T extends AgentResponseContent> {\n readonly createdAt = Temporal.Now.instant();\n readonly id = nanoid();\n readonly session: ChatSession;\n readonly content: T;\n\n constructor(chatSession: ChatSession, content: T, createdAt?: Temporal.Instant, id?: string) {\n this.session = chatSession;\n this.content = content;\n\n if (createdAt) {\n this.createdAt = createdAt;\n }\n\n if (id) {\n this.id = id;\n }\n }\n\n /**\n * Creates a copy of the AgentResponse with a different content property.\n * Preserves the original message's ID\n */\n replaceContent<R extends AgentResponseContent>(content: R): AgentChatResponse<R> {\n return new AgentChatResponse(this.session, content, this.createdAt, this.id);\n }\n\n toJSON() {\n return z.encode(AgentChatResponse.codec, this);\n }\n\n static fromJSON(data: unknown) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n return z.decode(AgentChatResponse.codec, data as any);\n }\n\n static codec = z.codec(chatEventSchema, z.instanceof(AgentChatResponse), {\n decode(chatEvent) {\n const content = (() => {\n switch (chatEvent.chunkType) {\n case \"error\":\n return new AgentErrorResponseContent(chatEvent.message);\n case \"model\":\n return new AgentModelResponseContent(chatEvent.name, chatEvent.result);\n case \"toolRequest\": {\n return new AgentToolRequestResponseContent(\n chatEvent.callId,\n chatEvent.name,\n Object.keys(chatEvent.arguments)\n .sort()\n .map((key) => chatEvent.arguments[key]!),\n chatEvent.summarizedTitle || null,\n chatEvent.commentary || null,\n );\n }\n case \"toolResponse\":\n return new AgentToolResultResponseContent(\n chatEvent.callId,\n chatEvent.name,\n chatEvent.result,\n );\n }\n })();\n return new AgentChatResponse(\n new ChatSession({\n ...(\"modelName\" in chatEvent && { modelName: chatEvent.modelName }),\n ...(\"modelProviderId\" in chatEvent && {\n modelProviderId: chatEvent.modelProviderId,\n }),\n ...(\"sessionId\" in chatEvent && {\n sessionId: chatEvent.sessionId,\n }),\n }),\n content,\n \"createdAt\" in chatEvent\n ? Temporal.Instant.from(chatEvent.createdAt)\n : Temporal.Now.instant(),\n );\n },\n encode(agentResponse) {\n const createdAt = agentResponse.createdAt?.toString();\n\n if (agentResponse.content instanceof AgentErrorResponseContent) {\n return {\n chunkType: \"error\",\n ...agentResponse.content,\n } as const satisfies ChatEvent;\n } else if (agentResponse.content instanceof AgentModelResponseContent) {\n return {\n chunkType: \"model\",\n createdAt: createdAt,\n modelName: agentResponse.session.modelName || \"\",\n modelProviderId: agentResponse.session.modelProviderId || \"\",\n name: agentResponse.content.name,\n result: agentResponse.content.result,\n sessionId: agentResponse.session.sessionId!,\n } as const satisfies ChatEvent;\n } else if (agentResponse.content instanceof AgentToolRequestResponseContent) {\n return {\n arguments: agentResponse.content.arguments.reduce(\n (accum, curr, i) => {\n accum[`arg${i}`] = curr;\n return accum;\n },\n {} as Record<string, unknown>,\n ) as Record<string, z.core.util.JSONType>,\n callId: agentResponse.content.callId,\n chunkType: \"toolRequest\",\n commentary: agentResponse.content.commentary || undefined,\n createdAt: createdAt,\n modelName: agentResponse.session.modelName || \"\",\n modelProviderId: agentResponse.session.modelProviderId || \"\",\n name: agentResponse.content.name,\n sessionId: agentResponse.session.sessionId!,\n summarizedTitle: agentResponse.content.summarizedTitle || undefined,\n } as const satisfies ChatEvent;\n } else if (agentResponse.content instanceof AgentToolResultResponseContent) {\n return {\n callId: agentResponse.content.callId,\n chunkType: \"toolResponse\",\n commentary: agentResponse.content.commentary || undefined,\n createdAt: createdAt,\n modelName: agentResponse.session.modelName || \"\",\n modelProviderId: agentResponse.session.modelProviderId || \"\",\n name: agentResponse.content.name,\n result: agentResponse.content.result,\n sessionId: agentResponse.session.sessionId!,\n } as const satisfies ChatEvent;\n } else {\n throw new Error(\"Unknown content type\");\n }\n },\n });\n}\n\nexport type AgentResponseContent =\n | AgentErrorResponseContent\n | AgentModelResponseContent\n | AgentToolRequestResponseContent\n | AgentToolResultResponseContent;\n"]}
|
|
1
|
+
{"version":3,"file":"AgentChatResponse.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/chat/AgentChatResponse.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 { nanoid } from \"nanoid/non-secure\";\nimport { AgentErrorResponseContent } from \"./AgentErrorResponseContent.ts\";\nimport { AgentModelResponseContent } from \"./AgentModelResponseContent.ts\";\nimport { AgentToolRequestResponseContent } from \"./AgentToolRequestResponseContent.ts\";\nimport { AgentToolResultResponseContent } from \"./AgentToolResultResponseContent.ts\";\nimport { ChatSession } from \"./ChatSession.ts\";\nimport * as z from \"zod/mini\";\nimport { Temporal } from \"temporal-polyfill\";\nimport { chatEventSchema, type ChatEvent } from \"./chatEventSchema.ts\";\n\nexport class AgentChatResponse<T extends AgentResponseContent> {\n readonly createdAt = Temporal.Now.instant();\n readonly id = nanoid();\n readonly session: ChatSession;\n readonly content: T;\n\n constructor(chatSession: ChatSession, content: T, createdAt?: Temporal.Instant, id?: string) {\n this.session = chatSession;\n this.content = content;\n\n if (createdAt) {\n this.createdAt = createdAt;\n }\n\n if (id) {\n this.id = id;\n }\n }\n\n /**\n * Creates a copy of the AgentResponse with a different content property.\n * Preserves the original message's ID\n */\n replaceContent<R extends AgentResponseContent>(content: R): AgentChatResponse<R> {\n return new AgentChatResponse(this.session, content, this.createdAt, this.id);\n }\n\n toJSON() {\n return z.encode(AgentChatResponse.codec, this);\n }\n\n static fromJSON(data: unknown) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n return z.decode(AgentChatResponse.codec, data as any);\n }\n\n static codec = z.codec(chatEventSchema, z.instanceof(AgentChatResponse), {\n decode(chatEvent) {\n const chatSession = ChatSession.new();\n const content = (() => {\n switch (chatEvent.chunkType) {\n case \"error\":\n return new AgentErrorResponseContent(chatEvent.message);\n case \"model\":\n return new AgentModelResponseContent(chatEvent.name, chatEvent.result);\n case \"toolRequest\": {\n return new AgentToolRequestResponseContent(\n chatEvent.callId,\n chatEvent.name,\n Object.keys(chatEvent.arguments)\n .sort()\n .map((key) => chatEvent.arguments[key]!),\n chatEvent.summarizedTitle || null,\n chatEvent.commentary || null,\n );\n }\n case \"toolResponse\":\n return new AgentToolResultResponseContent(\n chatEvent.callId,\n chatEvent.name,\n chatEvent.result,\n );\n }\n })();\n chatSession.assign({\n ...(\"modelName\" in chatEvent && { modelName: chatEvent.modelName }),\n ...(\"modelProviderId\" in chatEvent && {\n modelProviderId: chatEvent.modelProviderId,\n }),\n ...(\"sessionId\" in chatEvent && {\n sessionId: chatEvent.sessionId,\n }),\n });\n return new AgentChatResponse(\n chatSession,\n content,\n \"createdAt\" in chatEvent\n ? Temporal.Instant.from(chatEvent.createdAt)\n : Temporal.Now.instant(),\n );\n },\n encode(agentResponse) {\n const createdAt = agentResponse.createdAt?.toString();\n\n if (agentResponse.content instanceof AgentErrorResponseContent) {\n return {\n chunkType: \"error\",\n ...agentResponse.content,\n } as const satisfies ChatEvent;\n } else if (agentResponse.content instanceof AgentModelResponseContent) {\n return {\n chunkType: \"model\",\n createdAt: createdAt,\n modelName: agentResponse.session.modelName || \"\",\n modelProviderId: agentResponse.session.modelProviderId || \"\",\n name: agentResponse.content.name,\n result: agentResponse.content.result,\n sessionId: agentResponse.session.sessionId!,\n } as const satisfies ChatEvent;\n } else if (agentResponse.content instanceof AgentToolRequestResponseContent) {\n return {\n arguments: agentResponse.content.arguments.reduce(\n (accum, curr, i) => {\n accum[`arg${i}`] = curr;\n return accum;\n },\n {} as Record<string, unknown>,\n ) as Record<string, z.core.util.JSONType>,\n callId: agentResponse.content.callId,\n chunkType: \"toolRequest\",\n commentary: agentResponse.content.commentary || undefined,\n createdAt: createdAt,\n modelName: agentResponse.session.modelName || \"\",\n modelProviderId: agentResponse.session.modelProviderId || \"\",\n name: agentResponse.content.name,\n sessionId: agentResponse.session.sessionId!,\n summarizedTitle: agentResponse.content.summarizedTitle || undefined,\n } as const satisfies ChatEvent;\n } else if (agentResponse.content instanceof AgentToolResultResponseContent) {\n return {\n callId: agentResponse.content.callId,\n chunkType: \"toolResponse\",\n commentary: agentResponse.content.commentary || undefined,\n createdAt: createdAt,\n modelName: agentResponse.session.modelName || \"\",\n modelProviderId: agentResponse.session.modelProviderId || \"\",\n name: agentResponse.content.name,\n result: agentResponse.content.result,\n sessionId: agentResponse.session.sessionId!,\n } as const satisfies ChatEvent;\n } else {\n throw new Error(\"Unknown content type\");\n }\n },\n });\n}\n\nexport type AgentResponseContent =\n | AgentErrorResponseContent\n | AgentModelResponseContent\n | AgentToolRequestResponseContent\n | AgentToolResultResponseContent;\n"]}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import * as z from "zod/mini";
|
|
2
2
|
declare const chatSessionInputSchema: z.ZodMiniObject<{
|
|
3
|
+
modelName: z.ZodMiniString<string>;
|
|
4
|
+
modelProviderId: z.ZodMiniString<string>;
|
|
5
|
+
sessionId: z.ZodMiniString<string>;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
declare const newChatSessionSchema: z.ZodMiniObject<{
|
|
3
8
|
modelName: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
4
9
|
modelProviderId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
5
|
-
sessionId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
6
10
|
}, z.core.$strip>;
|
|
7
11
|
/**
|
|
8
12
|
* Tracks an Agent chat session. Each field is optional and intentionally mutable
|
|
@@ -14,19 +18,24 @@ export declare class ChatSession {
|
|
|
14
18
|
modelName?: string;
|
|
15
19
|
modelProviderId?: string;
|
|
16
20
|
sessionId?: string;
|
|
17
|
-
constructor(
|
|
21
|
+
private constructor();
|
|
18
22
|
toJSON(): {
|
|
19
|
-
modelName
|
|
20
|
-
modelProviderId
|
|
21
|
-
sessionId
|
|
23
|
+
modelName: string;
|
|
24
|
+
modelProviderId: string;
|
|
25
|
+
sessionId: string;
|
|
22
26
|
};
|
|
23
|
-
assign(properties: z.infer<typeof chatSessionInputSchema
|
|
27
|
+
assign(properties: Partial<z.infer<typeof chatSessionInputSchema>>): void;
|
|
24
28
|
equals(other: ChatSession): boolean;
|
|
25
29
|
static fromJSON(data: z.input<typeof ChatSession.codec>): ChatSession;
|
|
30
|
+
/**
|
|
31
|
+
* Creates a new ChatSession with fields that will be populated automatically
|
|
32
|
+
* once a reply is received from the Dremio AI Agent.
|
|
33
|
+
*/
|
|
34
|
+
static new(options?: z.infer<typeof newChatSessionSchema>): ChatSession;
|
|
26
35
|
static codec: z.ZodMiniCodec<z.ZodMiniObject<{
|
|
27
|
-
modelName: z.
|
|
28
|
-
modelProviderId: z.
|
|
29
|
-
sessionId: z.
|
|
36
|
+
modelName: z.ZodMiniString<string>;
|
|
37
|
+
modelProviderId: z.ZodMiniString<string>;
|
|
38
|
+
sessionId: z.ZodMiniString<string>;
|
|
30
39
|
}, z.core.$strip>, z.ZodMiniCustom<ChatSession, ChatSession>>;
|
|
31
40
|
}
|
|
32
41
|
export {};
|
|
@@ -15,10 +15,14 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import * as z from "zod/mini";
|
|
17
17
|
const chatSessionInputSchema = z.object({
|
|
18
|
-
modelName: z.
|
|
19
|
-
modelProviderId: z.
|
|
20
|
-
sessionId: z.
|
|
18
|
+
modelName: z.string(),
|
|
19
|
+
modelProviderId: z.string(),
|
|
20
|
+
sessionId: z.string(),
|
|
21
21
|
});
|
|
22
|
+
const newChatSessionSchema = z.partial(z.pick(chatSessionInputSchema, {
|
|
23
|
+
modelName: true,
|
|
24
|
+
modelProviderId: true,
|
|
25
|
+
}));
|
|
22
26
|
/**
|
|
23
27
|
* Tracks an Agent chat session. Each field is optional and intentionally mutable
|
|
24
28
|
* so that if any of these fields become available during agent reply (such as which
|
|
@@ -61,11 +65,21 @@ export class ChatSession {
|
|
|
61
65
|
static fromJSON(data) {
|
|
62
66
|
return z.decode(ChatSession.codec, data);
|
|
63
67
|
}
|
|
64
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Creates a new ChatSession with fields that will be populated automatically
|
|
70
|
+
* once a reply is received from the Dremio AI Agent.
|
|
71
|
+
*/
|
|
72
|
+
static new(options = {}) {
|
|
73
|
+
return new ChatSession(z.parse(newChatSessionSchema, options));
|
|
74
|
+
}
|
|
75
|
+
static codec = z.codec(chatSessionInputSchema, z.custom((v) => v instanceof ChatSession), {
|
|
65
76
|
decode(v) {
|
|
66
77
|
return new ChatSession(v);
|
|
67
78
|
},
|
|
68
79
|
encode(v) {
|
|
80
|
+
if (!v.sessionId) {
|
|
81
|
+
throw new Error("Cannot encode an uninitialized ChatSession");
|
|
82
|
+
}
|
|
69
83
|
return {
|
|
70
84
|
modelName: v.modelName,
|
|
71
85
|
modelProviderId: v.modelProviderId,
|
|
@@ -1 +1 @@
|
|
|
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;AAE9B,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,
|
|
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,10 +1,28 @@
|
|
|
1
1
|
import * as z from "zod/mini";
|
|
2
|
+
/**
|
|
3
|
+
* Captures all of the possible chunks of data that the Agent can reply
|
|
4
|
+
* with. We're lenient to extra/unexpected fields being present (`z.object`
|
|
5
|
+
* instead of `z.strictObject`), but for the fields that are expected,
|
|
6
|
+
* we validate that they match the most general type category they belong in.
|
|
7
|
+
* For example, it's good enough to validate that the `callId` is a string
|
|
8
|
+
* for type safety -- we don't need to verify that it's also a `z.uuid()`.
|
|
9
|
+
*/
|
|
2
10
|
export declare const chatEventSchema: z.ZodMiniDiscriminatedUnion<[z.ZodMiniObject<{
|
|
3
11
|
chunkType: z.ZodMiniLiteral<"error">;
|
|
12
|
+
/**
|
|
13
|
+
* If the message is not present or very short, it won't be useful to show
|
|
14
|
+
* anyways, so the parser should throw to the generic response error handler.
|
|
15
|
+
*/
|
|
4
16
|
message: z.ZodMiniString<string>;
|
|
5
17
|
}, z.core.$strip>, z.ZodMiniObject<{
|
|
6
18
|
chunkType: z.ZodMiniLiteral<"model">;
|
|
7
19
|
name: z.ZodMiniString<string>;
|
|
20
|
+
/**
|
|
21
|
+
* It's useful to indicate (to the type system) that the result contents
|
|
22
|
+
* at this stage can only be data (de)serializable from JSON. Because
|
|
23
|
+
* model responses can vary depending on runtime flags and edition, we can
|
|
24
|
+
* leave this field generic and refine it more precisely in later stages.
|
|
25
|
+
*/
|
|
8
26
|
result: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniJSONSchema>;
|
|
9
27
|
createdAt: z.ZodMiniString<string>;
|
|
10
28
|
modelName: z.ZodMiniString<string>;
|
|
@@ -14,34 +14,55 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import * as z from "zod/mini";
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Shared chat event fields for all responses (except error response)
|
|
19
|
+
*/
|
|
20
|
+
const chatEventSharedSchema = {
|
|
18
21
|
createdAt: z.string().check(z.iso.datetime()),
|
|
19
|
-
modelName: z.string(),
|
|
20
|
-
modelProviderId: z.string(),
|
|
21
|
-
sessionId: z.string(),
|
|
22
|
-
}
|
|
22
|
+
modelName: z.string().check(z.trim(), z.minLength(1)),
|
|
23
|
+
modelProviderId: z.string().check(z.trim(), z.minLength(1)),
|
|
24
|
+
sessionId: z.string().check(z.trim(), z.minLength(1)),
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Captures all of the possible chunks of data that the Agent can reply
|
|
28
|
+
* with. We're lenient to extra/unexpected fields being present (`z.object`
|
|
29
|
+
* instead of `z.strictObject`), but for the fields that are expected,
|
|
30
|
+
* we validate that they match the most general type category they belong in.
|
|
31
|
+
* For example, it's good enough to validate that the `callId` is a string
|
|
32
|
+
* for type safety -- we don't need to verify that it's also a `z.uuid()`.
|
|
33
|
+
*/
|
|
23
34
|
export const chatEventSchema = z.discriminatedUnion("chunkType", [
|
|
24
35
|
z.object({
|
|
25
36
|
chunkType: z.literal("error"),
|
|
26
|
-
|
|
37
|
+
/**
|
|
38
|
+
* If the message is not present or very short, it won't be useful to show
|
|
39
|
+
* anyways, so the parser should throw to the generic response error handler.
|
|
40
|
+
*/
|
|
41
|
+
message: z.string().check(z.trim(), z.minLength(2)),
|
|
27
42
|
}),
|
|
28
43
|
z.object({
|
|
29
|
-
...chatEventSharedSchema
|
|
44
|
+
...chatEventSharedSchema,
|
|
30
45
|
chunkType: z.literal("model"),
|
|
31
|
-
name: z.string(),
|
|
46
|
+
name: z.string().check(z.trim(), z.minLength(1)),
|
|
47
|
+
/**
|
|
48
|
+
* It's useful to indicate (to the type system) that the result contents
|
|
49
|
+
* at this stage can only be data (de)serializable from JSON. Because
|
|
50
|
+
* model responses can vary depending on runtime flags and edition, we can
|
|
51
|
+
* leave this field generic and refine it more precisely in later stages.
|
|
52
|
+
*/
|
|
32
53
|
result: z.record(z.string(), z.json()),
|
|
33
54
|
}),
|
|
34
55
|
z.object({
|
|
35
|
-
...chatEventSharedSchema
|
|
56
|
+
...chatEventSharedSchema,
|
|
36
57
|
arguments: z.record(z.string(), z.json()),
|
|
37
|
-
callId: z.string(),
|
|
58
|
+
callId: z.string().check(z.trim(), z.minLength(1)),
|
|
38
59
|
chunkType: z.literal("toolRequest"),
|
|
39
60
|
commentary: z.optional(z.string()),
|
|
40
61
|
name: z.string(),
|
|
41
62
|
summarizedTitle: z.optional(z.string()),
|
|
42
63
|
}),
|
|
43
64
|
z.object({
|
|
44
|
-
...chatEventSharedSchema
|
|
65
|
+
...chatEventSharedSchema,
|
|
45
66
|
callId: z.string(),
|
|
46
67
|
chunkType: z.literal("toolResponse"),
|
|
47
68
|
commentary: z.optional(z.string()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatEventSchema.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/chat/chatEventSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"chatEventSchema.js","sourceRoot":"","sources":["../../../../src/enterprise/ai/chat/chatEventSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B;;GAEG;AACH,MAAM,qBAAqB,GAAG;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACrD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,kBAAkB,CAAC,WAAW,EAAE;IAC/D,CAAC,CAAC,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B;;;WAGG;QACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KACpD,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,qBAAqB;QACxB,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChD;;;;;WAKG;QACH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;KACvC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,qBAAqB;QACxB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClD,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QACnC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACxC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,qBAAqB;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QACpC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;KACvC,CAAC;CACH,CAAC,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\";\n\n/**\n * Shared chat event fields for all responses (except error response)\n */\nconst chatEventSharedSchema = {\n createdAt: z.string().check(z.iso.datetime()),\n modelName: z.string().check(z.trim(), z.minLength(1)),\n modelProviderId: z.string().check(z.trim(), z.minLength(1)),\n sessionId: z.string().check(z.trim(), z.minLength(1)),\n};\n\n/**\n * Captures all of the possible chunks of data that the Agent can reply\n * with. We're lenient to extra/unexpected fields being present (`z.object`\n * instead of `z.strictObject`), but for the fields that are expected,\n * we validate that they match the most general type category they belong in.\n * For example, it's good enough to validate that the `callId` is a string\n * for type safety -- we don't need to verify that it's also a `z.uuid()`.\n */\nexport const chatEventSchema = z.discriminatedUnion(\"chunkType\", [\n z.object({\n chunkType: z.literal(\"error\"),\n /**\n * If the message is not present or very short, it won't be useful to show\n * anyways, so the parser should throw to the generic response error handler.\n */\n message: z.string().check(z.trim(), z.minLength(2)),\n }),\n z.object({\n ...chatEventSharedSchema,\n chunkType: z.literal(\"model\"),\n name: z.string().check(z.trim(), z.minLength(1)),\n /**\n * It's useful to indicate (to the type system) that the result contents\n * at this stage can only be data (de)serializable from JSON. Because\n * model responses can vary depending on runtime flags and edition, we can\n * leave this field generic and refine it more precisely in later stages.\n */\n result: z.record(z.string(), z.json()),\n }),\n z.object({\n ...chatEventSharedSchema,\n arguments: z.record(z.string(), z.json()),\n callId: z.string().check(z.trim(), z.minLength(1)),\n chunkType: z.literal(\"toolRequest\"),\n commentary: z.optional(z.string()),\n name: z.string(),\n summarizedTitle: z.optional(z.string()),\n }),\n z.object({\n ...chatEventSharedSchema,\n callId: z.string(),\n chunkType: z.literal(\"toolResponse\"),\n commentary: z.optional(z.string()),\n name: z.string(),\n result: z.record(z.string(), z.json()),\n }),\n]);\n\nexport type ChatEvent = z.infer<typeof chatEventSchema>;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SonarV4Config } from "../../../../common/Config.ts";
|
|
2
|
+
import type { HttpError } from "../../../../common/HttpError.ts";
|
|
3
|
+
import { Problem } from "../../../../common/Problem.ts";
|
|
4
|
+
import type { ChatSession } from "../ChatSession.ts";
|
|
5
|
+
import type { UserChatMessage } from "../UserChatMessage.ts";
|
|
6
|
+
import { Err, Ok } from "ts-results-es";
|
|
7
|
+
import { AgentChatResponse } from "../AgentChatResponse.ts";
|
|
8
|
+
type SendChatMessageProblemCodes = "https://api.dremio.dev/problems/ai-agent/chat/agent-disabled" | "https://api.dremio.dev/problems/ai-agent/chat/input-too-large" | "https://api.dremio.dev/problems/ai-agent/chat/model-provider-not-found" | "https://api.dremio.dev/problems/ai-agent/chat/no-default-model-provider" | "https://api.dremio.dev/problems/ai-agent/chat/no-model-provider-privilege" | "https://api.dremio.dev/problems/ai-agent/chat/preview-disabled" | "https://api.dremio.dev/problems/ai-agent/chat/rate-limit-exceeded";
|
|
9
|
+
export declare const createSendChatMessage: (config: SonarV4Config) => (chatSession: ChatSession, userChatMessage: UserChatMessage) => import("rxjs").Observable<Ok<AgentChatResponse<import("../AgentChatResponse.ts").AgentResponseContent>> | Err<HttpError | Problem<SendChatMessageProblemCodes, undefined>>>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2024-2025 Dremio Corporation
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { catchError, map, of, share, tap } from "rxjs";
|
|
17
|
+
import { fromTextEventStream } from "../../../../common/fromTextEventStream.js";
|
|
18
|
+
import { Problem } from "../../../../common/Problem.js";
|
|
19
|
+
import { Err, Ok } from "ts-results-es";
|
|
20
|
+
import { AgentChatResponse } from "../AgentChatResponse.js";
|
|
21
|
+
import * as z from "zod/mini";
|
|
22
|
+
function refineChatErrors(e) {
|
|
23
|
+
if (e.body instanceof Problem) {
|
|
24
|
+
return e.body;
|
|
25
|
+
}
|
|
26
|
+
return e;
|
|
27
|
+
}
|
|
28
|
+
export const createSendChatMessage = (config) => function sendChatMessage(chatSession, userChatMessage) {
|
|
29
|
+
return fromTextEventStream(({ signal }) => config
|
|
30
|
+
.sonarV4Request("agent", {
|
|
31
|
+
body: JSON.stringify(z.parse(sendChatMessageBodySchema, {
|
|
32
|
+
message: userChatMessage.toString(),
|
|
33
|
+
sessionId: chatSession.sessionId,
|
|
34
|
+
})),
|
|
35
|
+
headers: {
|
|
36
|
+
Accept: "text/event-stream",
|
|
37
|
+
"Content-Type": "application/json",
|
|
38
|
+
},
|
|
39
|
+
method: "POST",
|
|
40
|
+
signal,
|
|
41
|
+
})
|
|
42
|
+
.promise.then((result) => {
|
|
43
|
+
if (result.isErr()) {
|
|
44
|
+
throw result.error;
|
|
45
|
+
}
|
|
46
|
+
return result.value;
|
|
47
|
+
})).pipe(map((event) => Ok(AgentChatResponse.fromJSON(JSON.parse(event.data)))), tap((agentChatResponse) => {
|
|
48
|
+
if (agentChatResponse.isOk()) {
|
|
49
|
+
chatSession.assign(agentChatResponse.value.session);
|
|
50
|
+
}
|
|
51
|
+
}), catchError((e) => of(Err(refineChatErrors(e)))), share());
|
|
52
|
+
};
|
|
53
|
+
const sendChatMessageBodySchema = z.strictObject({
|
|
54
|
+
message: z.string().check(z.trim(), z.minLength(1)),
|
|
55
|
+
modelName: z.optional(z.string().check(z.trim(), z.minLength(1))),
|
|
56
|
+
modelProviderId: z.optional(z.string().check(z.trim(), z.minLength(1))),
|
|
57
|
+
sessionId: z.optional(z.string().check(z.trim(), z.minLength(1))),
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=sendChatMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendChatMessage.js","sourceRoot":"","sources":["../../../../../src/enterprise/ai/chat/methods/sendChatMessage.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, map, of, share, tap } from \"rxjs\";\nimport type { SonarV4Config } from \"../../../../common/Config.ts\";\nimport { fromTextEventStream } from \"../../../../common/fromTextEventStream.ts\";\nimport type { HttpError } from \"../../../../common/HttpError.ts\";\nimport { Problem } from \"../../../../common/Problem.ts\";\nimport type { ChatSession } from \"../ChatSession.ts\";\nimport type { UserChatMessage } from \"../UserChatMessage.ts\";\nimport { Err, Ok } from \"ts-results-es\";\nimport { AgentChatResponse } from \"../AgentChatResponse.ts\";\nimport * as z from \"zod/mini\";\n\ntype SendChatMessageProblemCodes =\n | \"https://api.dremio.dev/problems/ai-agent/chat/agent-disabled\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/input-too-large\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/model-provider-not-found\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/no-default-model-provider\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/no-model-provider-privilege\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/preview-disabled\"\n | \"https://api.dremio.dev/problems/ai-agent/chat/rate-limit-exceeded\";\n\nfunction refineChatErrors(e: HttpError) {\n if (e.body instanceof Problem) {\n return e.body as Problem<SendChatMessageProblemCodes>;\n }\n return e;\n}\n\nexport const createSendChatMessage = (config: SonarV4Config) =>\n function sendChatMessage(chatSession: ChatSession, userChatMessage: UserChatMessage) {\n return fromTextEventStream(({ signal }) =>\n config\n .sonarV4Request(\"agent\", {\n body: JSON.stringify(\n z.parse(sendChatMessageBodySchema, {\n message: userChatMessage.toString(),\n sessionId: chatSession.sessionId,\n }),\n ),\n headers: {\n Accept: \"text/event-stream\",\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n })\n .promise.then((result) => {\n if (result.isErr()) {\n throw result.error;\n }\n return result.value;\n }),\n ).pipe(\n map((event) => Ok(AgentChatResponse.fromJSON(JSON.parse(event.data)))),\n tap((agentChatResponse) => {\n if (agentChatResponse.isOk()) {\n chatSession.assign(agentChatResponse.value.session);\n }\n }),\n catchError((e: HttpError) => of(Err(refineChatErrors(e)))),\n share(),\n );\n };\n\nconst sendChatMessageBodySchema = z.strictObject({\n message: z.string().check(z.trim(), z.minLength(1)),\n modelName: z.optional(z.string().check(z.trim(), z.minLength(1))),\n modelProviderId: z.optional(z.string().check(z.trim(), z.minLength(1))),\n sessionId: z.optional(z.string().check(z.trim(), z.minLength(1))),\n});\n"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { Grantee } from "../Grantee.ts";
|
|
2
|
-
export declare class Grant {
|
|
2
|
+
export declare class Grant<T extends Set<string>, R extends string> {
|
|
3
3
|
#private;
|
|
4
4
|
readonly grantee: Grantee;
|
|
5
|
-
readonly privileges:
|
|
6
|
-
readonly type:
|
|
5
|
+
readonly privileges: T;
|
|
6
|
+
readonly type: R;
|
|
7
7
|
constructor(properties: {
|
|
8
|
-
grantee: Grant["grantee"];
|
|
9
|
-
privileges: Grant["privileges"];
|
|
10
|
-
type: Grant["type"];
|
|
8
|
+
grantee: Grant<T, R>["grantee"];
|
|
9
|
+
privileges: Grant<T, R>["privileges"];
|
|
10
|
+
type: Grant<T, R>["type"];
|
|
11
11
|
tag: string;
|
|
12
12
|
});
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grant.js","sourceRoot":"","sources":["../../../src/enterprise/grants/Grant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,OAAO,KAAK;IACP,OAAO,CAAU;IACjB,UAAU,
|
|
1
|
+
{"version":3,"file":"Grant.js","sourceRoot":"","sources":["../../../src/enterprise/grants/Grant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,OAAO,KAAK;IACP,OAAO,CAAU;IACjB,UAAU,CAAI;IACd,IAAI,CAAI;IACjB,2DAA2D;IAClD,IAAI,CAAS;IAEtB,YAAY,UAKX;QACC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC;IAC7B,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 type { Grantee } from \"../Grantee.ts\";\n\nexport class Grant<T extends Set<string>, R extends string> {\n readonly grantee: Grantee;\n readonly privileges: T;\n readonly type: R;\n // eslint-disable-next-line no-unused-private-class-members\n readonly #tag: string;\n\n constructor(properties: {\n grantee: Grant<T, R>[\"grantee\"];\n privileges: Grant<T, R>[\"privileges\"];\n type: Grant<T, R>[\"type\"];\n tag: string;\n }) {\n this.grantee = properties.grantee;\n this.privileges = properties.privileges;\n this.type = properties.type;\n this.#tag = properties.tag;\n }\n}\n"]}
|
|
@@ -4,5 +4,5 @@ import type { Grantee } from "../Grantee.ts";
|
|
|
4
4
|
export declare class GrantsResource {
|
|
5
5
|
#private;
|
|
6
6
|
constructor(config: ResourceConfig & SonarV3Config);
|
|
7
|
-
retrieve(grantee: Grantee, { signal }?: SignalParam): import("ts-results-es").AsyncResult<import("./Grant.ts").Grant[], import("../index.ts").HttpError>;
|
|
7
|
+
retrieve(grantee: Grantee, { signal }?: SignalParam): import("ts-results-es").AsyncResult<import("./Grant.ts").Grant<Set<string>, string>[], import("../index.ts").HttpError>;
|
|
8
8
|
}
|
|
@@ -2,4 +2,4 @@ import type { SonarV3Config } from "../../common/Config.ts";
|
|
|
2
2
|
import type { SignalParam } from "../../common/Params.ts";
|
|
3
3
|
import { type Grantee } from "../Grantee.ts";
|
|
4
4
|
import { Grant } from "./Grant.ts";
|
|
5
|
-
export declare function createRetrieveGrants(config: SonarV3Config): (grantee: Grantee, { signal }?: SignalParam) => import("ts-results-es").AsyncResult<Grant[], import("../index.ts").HttpError>;
|
|
5
|
+
export declare function createRetrieveGrants(config: SonarV3Config): (grantee: Grantee, { signal }?: SignalParam) => import("ts-results-es").AsyncResult<Grant<Set<string>, string>[], import("../index.ts").HttpError>;
|
|
@@ -48,7 +48,7 @@ export declare class EnterpriseUser extends User {
|
|
|
48
48
|
source: string;
|
|
49
49
|
constructor(properties: EnterpriseUserProperties, config: V3Config & SonarV3Config);
|
|
50
50
|
save(properties: EnterpriseUserPatchableProperties): import("ts-results-es").AsyncResult<EnterpriseUser, import("../index.ts").HttpError>;
|
|
51
|
-
grants({ signal }?: SignalParam): import("ts-results-es").AsyncResult<import("../interfaces.ts").Grant[], import("../index.ts").HttpError>;
|
|
51
|
+
grants({ signal }?: SignalParam): import("ts-results-es").AsyncResult<import("../interfaces.ts").Grant<Set<string>, string>[], import("../index.ts").HttpError>;
|
|
52
52
|
tokens({ signal }?: SignalParam): Promise<import("ts-results-es").Result<{
|
|
53
53
|
createdAt: Date;
|
|
54
54
|
expiresAt: Date;
|