beeai-framework 0.1.6 → 0.1.7
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/adapters/vercel/backend/chat.cjs +0 -1
- package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
- package/dist/adapters/vercel/backend/chat.js +0 -1
- package/dist/adapters/vercel/backend/chat.js.map +1 -1
- package/dist/adapters/watsonx/backend/chat.cjs +6 -2
- package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/chat.d.cts +1 -1
- package/dist/adapters/watsonx/backend/chat.d.ts +1 -1
- package/dist/adapters/watsonx/backend/chat.js +6 -2
- package/dist/adapters/watsonx/backend/chat.js.map +1 -1
- package/dist/agent-Bf2FaCKy.d.ts +84 -0
- package/dist/agent-Bpt7IFa_.d.cts +84 -0
- package/dist/agents/experimental/remote/agent.cjs +25 -18
- package/dist/agents/experimental/remote/agent.cjs.map +1 -1
- package/dist/agents/experimental/remote/agent.d.cts +4 -3
- package/dist/agents/experimental/remote/agent.d.ts +4 -3
- package/dist/agents/experimental/remote/agent.js +26 -19
- package/dist/agents/experimental/remote/agent.js.map +1 -1
- package/dist/agents/{bee → react}/agent.cjs +5 -5
- package/dist/agents/react/agent.cjs.map +1 -0
- package/dist/agents/{bee → react}/agent.d.cts +1 -1
- package/dist/agents/{bee → react}/agent.d.ts +1 -1
- package/dist/agents/{bee → react}/agent.js +5 -5
- package/dist/agents/react/agent.js.map +1 -0
- package/dist/agents/{bee → react}/prompts.cjs +18 -18
- package/dist/agents/react/prompts.cjs.map +1 -0
- package/dist/agents/{bee → react}/prompts.d.cts +10 -10
- package/dist/agents/{bee → react}/prompts.d.ts +10 -10
- package/dist/agents/{bee → react}/prompts.js +10 -10
- package/dist/agents/react/prompts.js.map +1 -0
- package/dist/agents/{bee → react}/runners/base.cjs +1 -1
- package/dist/agents/{bee → react}/runners/base.cjs.map +1 -1
- package/dist/agents/{bee → react}/runners/base.d.cts +1 -1
- package/dist/agents/{bee → react}/runners/base.d.ts +1 -1
- package/dist/agents/{bee → react}/runners/base.js +1 -1
- package/dist/agents/{bee → react}/runners/base.js.map +1 -1
- package/dist/agents/{bee → react}/runners/deep-think/prompts.cjs +14 -14
- package/dist/agents/react/runners/deep-think/prompts.cjs.map +1 -0
- package/dist/agents/{bee/runners/granite → react/runners/deep-think}/prompts.d.cts +8 -8
- package/dist/agents/{bee/runners/granite → react/runners/deep-think}/prompts.d.ts +8 -8
- package/dist/agents/{bee → react}/runners/deep-think/prompts.js +9 -9
- package/dist/agents/react/runners/deep-think/prompts.js.map +1 -0
- package/dist/agents/{bee → react}/runners/deep-think/runner.cjs +10 -10
- package/dist/agents/react/runners/deep-think/runner.cjs.map +1 -0
- package/dist/agents/{bee → react}/runners/deep-think/runner.d.cts +4 -4
- package/dist/agents/{bee → react}/runners/deep-think/runner.d.ts +4 -4
- package/dist/agents/{bee → react}/runners/deep-think/runner.js +12 -12
- package/dist/agents/react/runners/deep-think/runner.js.map +1 -0
- package/dist/agents/{bee → react}/runners/default/runner.cjs +10 -10
- package/dist/agents/react/runners/default/runner.cjs.map +1 -0
- package/dist/agents/{bee → react}/runners/default/runner.d.cts +7 -7
- package/dist/agents/{bee → react}/runners/default/runner.d.ts +7 -7
- package/dist/agents/{bee → react}/runners/default/runner.js +11 -11
- package/dist/agents/react/runners/default/runner.js.map +1 -0
- package/dist/agents/{bee → react}/runners/default/runner.spec.cjs +5 -5
- package/dist/agents/react/runners/default/runner.spec.cjs.map +1 -0
- package/dist/agents/{bee → react}/runners/default/runner.spec.js +6 -6
- package/dist/agents/react/runners/default/runner.spec.js.map +1 -0
- package/dist/agents/{bee → react}/runners/granite/prompts.cjs +14 -14
- package/dist/agents/react/runners/granite/prompts.cjs.map +1 -0
- package/dist/agents/{bee/runners/deep-think → react/runners/granite}/prompts.d.cts +8 -8
- package/dist/agents/{bee/runners/deep-think → react/runners/granite}/prompts.d.ts +8 -8
- package/dist/agents/{bee → react}/runners/granite/prompts.js +9 -9
- package/dist/agents/react/runners/granite/prompts.js.map +1 -0
- package/dist/agents/{bee → react}/runners/granite/runner.cjs +10 -10
- package/dist/agents/react/runners/granite/runner.cjs.map +1 -0
- package/dist/agents/{bee → react}/runners/granite/runner.d.cts +4 -4
- package/dist/agents/{bee → react}/runners/granite/runner.d.ts +4 -4
- package/dist/agents/{bee → react}/runners/granite/runner.js +12 -12
- package/dist/agents/react/runners/granite/runner.js.map +1 -0
- package/dist/agents/{bee → react}/types.d.cts +45 -45
- package/dist/agents/{bee → react}/types.d.ts +45 -45
- package/dist/agents/toolCalling/agent.cjs +208 -0
- package/dist/agents/toolCalling/agent.cjs.map +1 -0
- package/dist/agents/toolCalling/agent.d.cts +70 -0
- package/dist/agents/toolCalling/agent.d.ts +70 -0
- package/dist/agents/toolCalling/agent.js +206 -0
- package/dist/agents/toolCalling/agent.js.map +1 -0
- package/dist/agents/toolCalling/prompts.cjs +65 -0
- package/dist/agents/toolCalling/prompts.cjs.map +1 -0
- package/dist/agents/toolCalling/prompts.d.cts +49 -0
- package/dist/agents/toolCalling/prompts.d.ts +49 -0
- package/dist/agents/toolCalling/prompts.js +62 -0
- package/dist/agents/toolCalling/prompts.js.map +1 -0
- package/dist/agents/toolCalling/types.cjs +4 -0
- package/dist/agents/toolCalling/types.cjs.map +1 -0
- package/dist/agents/toolCalling/types.d.cts +66 -0
- package/dist/agents/toolCalling/types.d.ts +66 -0
- package/dist/agents/toolCalling/types.js +3 -0
- package/dist/agents/toolCalling/types.js.map +1 -0
- package/dist/backend/chat.cjs +3 -0
- package/dist/backend/chat.cjs.map +1 -1
- package/dist/backend/chat.d.cts +2 -1
- package/dist/backend/chat.d.ts +2 -1
- package/dist/backend/chat.js +3 -0
- package/dist/backend/chat.js.map +1 -1
- package/dist/backend/message.cjs +9 -0
- package/dist/backend/message.cjs.map +1 -1
- package/dist/backend/message.d.cts +2 -0
- package/dist/backend/message.d.ts +2 -0
- package/dist/backend/message.js +9 -0
- package/dist/backend/message.js.map +1 -1
- package/dist/instrumentation/create-telemetry-middleware.cjs.map +1 -1
- package/dist/instrumentation/create-telemetry-middleware.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/workflows/agent.cjs +2 -2
- package/dist/workflows/agent.cjs.map +1 -1
- package/dist/workflows/agent.d.cts +4 -4
- package/dist/workflows/agent.d.ts +4 -4
- package/dist/workflows/agent.js +2 -2
- package/dist/workflows/agent.js.map +1 -1
- package/package.json +3 -3
- package/dist/agent-BZ-_ATuJ.d.cts +0 -84
- package/dist/agent-BqoZ6FbM.d.ts +0 -84
- package/dist/agents/bee/agent.cjs.map +0 -1
- package/dist/agents/bee/agent.js.map +0 -1
- package/dist/agents/bee/prompts.cjs.map +0 -1
- package/dist/agents/bee/prompts.js.map +0 -1
- package/dist/agents/bee/runners/deep-think/prompts.cjs.map +0 -1
- package/dist/agents/bee/runners/deep-think/prompts.js.map +0 -1
- package/dist/agents/bee/runners/deep-think/runner.cjs.map +0 -1
- package/dist/agents/bee/runners/deep-think/runner.js.map +0 -1
- package/dist/agents/bee/runners/default/runner.cjs.map +0 -1
- package/dist/agents/bee/runners/default/runner.js.map +0 -1
- package/dist/agents/bee/runners/default/runner.spec.cjs.map +0 -1
- package/dist/agents/bee/runners/default/runner.spec.js.map +0 -1
- package/dist/agents/bee/runners/granite/prompts.cjs.map +0 -1
- package/dist/agents/bee/runners/granite/prompts.js.map +0 -1
- package/dist/agents/bee/runners/granite/runner.cjs.map +0 -1
- package/dist/agents/bee/runners/granite/runner.js.map +0 -1
- /package/dist/agents/{bee → react}/runners/default/runner.spec.d.cts +0 -0
- /package/dist/agents/{bee → react}/runners/default/runner.spec.d.ts +0 -0
- /package/dist/agents/{bee → react}/types.cjs +0 -0
- /package/dist/agents/{bee → react}/types.cjs.map +0 -0
- /package/dist/agents/{bee → react}/types.js +0 -0
- /package/dist/agents/{bee → react}/types.js.map +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BaseMemory } from '../../memory/base.cjs';
|
|
2
|
+
import { AssistantMessage } from '../../backend/message.cjs';
|
|
3
|
+
import { C as Callback } from '../../emitter-C9EN5B0j.cjs';
|
|
4
|
+
import { ToolCallingAgentSystemPrompt, ToolCallingAgentTaskPrompt } from './prompts.cjs';
|
|
5
|
+
import { ZodSchema } from 'zod';
|
|
6
|
+
import '../../errors.cjs';
|
|
7
|
+
import '../../internals/types.cjs';
|
|
8
|
+
import '../../internals/helpers/guards.cjs';
|
|
9
|
+
import '../../internals/serializable.cjs';
|
|
10
|
+
import 'ai';
|
|
11
|
+
import '../../template.cjs';
|
|
12
|
+
import 'ajv';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Copyright 2025 IBM Corp.
|
|
16
|
+
*
|
|
17
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
18
|
+
* you may not use this file except in compliance with the License.
|
|
19
|
+
* You may obtain a copy of the License at
|
|
20
|
+
*
|
|
21
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
22
|
+
*
|
|
23
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
25
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
26
|
+
* See the License for the specific language governing permissions and
|
|
27
|
+
* limitations under the License.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
interface ToolCallingAgentRunInput {
|
|
31
|
+
prompt?: string;
|
|
32
|
+
context?: string;
|
|
33
|
+
expectedOutput?: string | ZodSchema;
|
|
34
|
+
}
|
|
35
|
+
interface ToolCallingAgentRunOutput {
|
|
36
|
+
result: AssistantMessage;
|
|
37
|
+
memory: BaseMemory;
|
|
38
|
+
}
|
|
39
|
+
interface ToolCallingAgentRunState {
|
|
40
|
+
result?: AssistantMessage;
|
|
41
|
+
memory: BaseMemory;
|
|
42
|
+
iteration: number;
|
|
43
|
+
}
|
|
44
|
+
interface ToolCallingAgentExecutionConfig {
|
|
45
|
+
totalMaxRetries?: number;
|
|
46
|
+
maxRetriesPerStep?: number;
|
|
47
|
+
maxIterations?: number;
|
|
48
|
+
}
|
|
49
|
+
interface ToolCallingAgentRunOptions {
|
|
50
|
+
signal?: AbortSignal;
|
|
51
|
+
execution?: ToolCallingAgentExecutionConfig;
|
|
52
|
+
}
|
|
53
|
+
interface ToolCallingAgentCallbacks {
|
|
54
|
+
start?: Callback<{
|
|
55
|
+
state: ToolCallingAgentRunState;
|
|
56
|
+
}>;
|
|
57
|
+
success?: Callback<{
|
|
58
|
+
state: ToolCallingAgentRunState;
|
|
59
|
+
}>;
|
|
60
|
+
}
|
|
61
|
+
interface ToolCallingAgentTemplates {
|
|
62
|
+
system: typeof ToolCallingAgentSystemPrompt;
|
|
63
|
+
task: typeof ToolCallingAgentTaskPrompt;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type { ToolCallingAgentCallbacks, ToolCallingAgentExecutionConfig, ToolCallingAgentRunInput, ToolCallingAgentRunOptions, ToolCallingAgentRunOutput, ToolCallingAgentRunState, ToolCallingAgentTemplates };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BaseMemory } from '../../memory/base.js';
|
|
2
|
+
import { AssistantMessage } from '../../backend/message.js';
|
|
3
|
+
import { C as Callback } from '../../emitter-BxVxGBbJ.js';
|
|
4
|
+
import { ToolCallingAgentSystemPrompt, ToolCallingAgentTaskPrompt } from './prompts.js';
|
|
5
|
+
import { ZodSchema } from 'zod';
|
|
6
|
+
import '../../errors.js';
|
|
7
|
+
import '../../internals/types.js';
|
|
8
|
+
import '../../internals/helpers/guards.js';
|
|
9
|
+
import '../../internals/serializable.js';
|
|
10
|
+
import 'ai';
|
|
11
|
+
import '../../template.js';
|
|
12
|
+
import 'ajv';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Copyright 2025 IBM Corp.
|
|
16
|
+
*
|
|
17
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
18
|
+
* you may not use this file except in compliance with the License.
|
|
19
|
+
* You may obtain a copy of the License at
|
|
20
|
+
*
|
|
21
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
22
|
+
*
|
|
23
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
25
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
26
|
+
* See the License for the specific language governing permissions and
|
|
27
|
+
* limitations under the License.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
interface ToolCallingAgentRunInput {
|
|
31
|
+
prompt?: string;
|
|
32
|
+
context?: string;
|
|
33
|
+
expectedOutput?: string | ZodSchema;
|
|
34
|
+
}
|
|
35
|
+
interface ToolCallingAgentRunOutput {
|
|
36
|
+
result: AssistantMessage;
|
|
37
|
+
memory: BaseMemory;
|
|
38
|
+
}
|
|
39
|
+
interface ToolCallingAgentRunState {
|
|
40
|
+
result?: AssistantMessage;
|
|
41
|
+
memory: BaseMemory;
|
|
42
|
+
iteration: number;
|
|
43
|
+
}
|
|
44
|
+
interface ToolCallingAgentExecutionConfig {
|
|
45
|
+
totalMaxRetries?: number;
|
|
46
|
+
maxRetriesPerStep?: number;
|
|
47
|
+
maxIterations?: number;
|
|
48
|
+
}
|
|
49
|
+
interface ToolCallingAgentRunOptions {
|
|
50
|
+
signal?: AbortSignal;
|
|
51
|
+
execution?: ToolCallingAgentExecutionConfig;
|
|
52
|
+
}
|
|
53
|
+
interface ToolCallingAgentCallbacks {
|
|
54
|
+
start?: Callback<{
|
|
55
|
+
state: ToolCallingAgentRunState;
|
|
56
|
+
}>;
|
|
57
|
+
success?: Callback<{
|
|
58
|
+
state: ToolCallingAgentRunState;
|
|
59
|
+
}>;
|
|
60
|
+
}
|
|
61
|
+
interface ToolCallingAgentTemplates {
|
|
62
|
+
system: typeof ToolCallingAgentSystemPrompt;
|
|
63
|
+
task: typeof ToolCallingAgentTaskPrompt;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type { ToolCallingAgentCallbacks, ToolCallingAgentExecutionConfig, ToolCallingAgentRunInput, ToolCallingAgentRunOptions, ToolCallingAgentRunOutput, ToolCallingAgentRunState, ToolCallingAgentTemplates };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"types.js"}
|
package/dist/backend/chat.cjs
CHANGED
|
@@ -246,6 +246,9 @@ class ChatModelOutput extends serializable_cjs.Serializable {
|
|
|
246
246
|
getToolCalls() {
|
|
247
247
|
return this.messages.filter((r) => r instanceof message_cjs.AssistantMessage).flatMap((r) => r.getToolCalls()).filter(Boolean);
|
|
248
248
|
}
|
|
249
|
+
getTextMessages() {
|
|
250
|
+
return this.messages.filter((r) => r instanceof message_cjs.AssistantMessage).filter((r) => r.text);
|
|
251
|
+
}
|
|
249
252
|
getTextContent() {
|
|
250
253
|
return this.messages.filter((r) => r instanceof message_cjs.AssistantMessage).flatMap((r) => r.text).filter(Boolean).join("");
|
|
251
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["chat.ts"],"names":["ChatModel","Serializable","cache","NullCache","parameters","create","input","shallowCopy","RunContext","enter","params","signal","abortSignal","run","cacheEntry","createCacheAccessor","emitter","emit","chunks","generator","value","stream","_createStream","toAsyncGenerator","_create","controller","AbortController","push","callbacks","abort","aborted","resolve","result","ChatModelOutput","fromChunks","error","reject","ChatModelError","middleware","INSTRUMENTATION_ENABLED","createTelemetryMiddleware","doNothing","createStructure","_createStructure","config","isFunction","fromName","name","options","providerId","modelId","parseModel","Target","loadModel","undefined","schema","jsonSchema","toJsonSchema","systemTemplate","PromptTemplate","z","object","string","min","template","messages","SystemMessage","render","JSON","stringify","errorTemplate","errors","expected","received","Retryable","executor","response","responseFormat","type","textResponse","getTextContent","parseBrokenJson","pair","validator","createSchemaValidator","success","context","UserMessage","maxRetries","get","createSnapshot","destroy","_","tools","key","ObjectHashKeyFn","Serializer","serialize","map","msg","toPlain","isNew","task","Task","set","delete","constructor","usage","finishReason","final","forEach","cur","merge","other","customMerge","totalTokens","takeBigger","promptTokens","completionTokens","getToolCalls","filter","r","AssistantMessage","flatMap","Boolean","text","join","toString","loadSnapshot","snapshot","Object","assign"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAuIO,MAAeA,kBAAkBC,6BAAAA,CAAAA;EAvIxC;;;AAyISC,EAAAA,KAAAA,GAAwB,IAAIC,uBAAAA,EAAAA;AAC5BC,EAAAA,UAAAA,GAAkC,EAAC;AAK1CC,EAAAA,MAAAA,CAAOC,KAA8C,EAAA;AACnDA,IAAAA,KAAAA,GAAQC,sBAAYD,KAAAA,CAAAA;AAEpB,IAAOE,OAAAA,sBAAAA,CAAWC,MAChB,IACA,EAAA;MAAEC,MAAQ,EAAA;AAACJ,QAAAA;;AAAiBK,MAAAA,MAAAA,EAAQL,KAAOM,EAAAA;AAAY,KAAA,EACvD,OAAOC,GAAAA,KAAAA;AACL,MAAA,MAAMC,UAAa,GAAA,MAAM,IAAKC,CAAAA,mBAAAA,CAAoBT,KAAAA,CAAAA;AAElD,MAAI,IAAA;AACF,QAAMO,MAAAA,GAAAA,CAAIG,OAAQC,CAAAA,IAAAA,CAAK,OAAS,EAAA;AAAEX,UAAAA;SAAM,CAAA;AACxC,QAAA,MAAMY,SAA4B,EAAA;AAElC,QAAA,MAAMC,SACJL,GAAAA,UAAAA,CAAWM,KACVd,KAAAA,KAAAA,CAAMe,SACH,IAAKC,CAAAA,aAAAA,CAAchB,KAAOO,EAAAA,GAAAA,IAC1BU,4BAAiB,CAAA,IAAA,CAAKC,OAAQlB,CAAAA,KAAAA,EAAOO,GAAAA,CAAAA,CAAAA,CAAAA;AAE3C,QAAMY,MAAAA,UAAAA,GAAa,IAAIC,eAAAA,EAAAA;AACvB,QAAA,WAAA,MAAiBN,SAASD,SAAW,EAAA;AACnCD,UAAAA,MAAAA,CAAOS,KAAKP,KAAAA,CAAAA;AACZ,UAAMP,MAAAA,GAAAA,CAAIG,OAAQC,CAAAA,IAAAA,CAAK,UAAY,EAAA;AACjCG,YAAAA,KAAAA;YACAQ,SAAW,EAAA;cAAEC,KAAO,kBAAA,MAAA,CAAA,MAAMJ,UAAWI,CAAAA,KAAAA,EAAjB,EAAA,OAAA;AAAyB;WAC/C,CAAA;AACA,UAAIJ,IAAAA,UAAAA,CAAWd,OAAOmB,OAAS,EAAA;AAC7B,YAAA;AACF;AACF;AAEAhB,QAAAA,UAAAA,CAAWiB,QAAQb,MAAAA,CAAAA;AACnB,QAAMc,MAAAA,MAAAA,GAASC,eAAgBC,CAAAA,UAAAA,CAAWhB,MAAAA,CAAAA;AAC1C,QAAML,MAAAA,GAAAA,CAAIG,OAAQC,CAAAA,IAAAA,CAAK,SAAW,EAAA;UAAEG,KAAOY,EAAAA;SAAO,CAAA;AAClD,QAAOA,OAAAA,MAAAA;AACT,OAAA,CAAA,OAASG,KAAO,EAAA;AACd,QAAMtB,MAAAA,GAAAA,CAAIG,OAAQC,CAAAA,IAAAA,CAAK,OAAS,EAAA;AAAEX,UAAAA,KAAAA;AAAO6B,UAAAA;SAAM,CAAA;AAC/C,QAAMrB,MAAAA,UAAAA,CAAWsB,OAAOD,KAAAA,CAAAA;AACxB,QAAA,IAAIA,iBAAiBE,yBAAgB,EAAA;AACnC,UAAMF,MAAAA,KAAAA;SACD,MAAA;AACL,UAAM,MAAA,IAAIE,0BAAe,CAA4C,wCAAA,CAAA,EAAA;AAACF,YAAAA;AAAM,WAAA,CAAA;AAC9E;OACF,SAAA;AACE,QAAA,MAAMtB,GAAIG,CAAAA,OAAAA,CAAQC,IAAK,CAAA,QAAA,EAAU,IAAA,CAAA;AACnC;AACF,KAAA,EACAqB,UAAWC,CAAAA,kCAAAA,GAA0BC,uDAAAA,EAAAA,GAA8BC,kBAAAA,CAAAA;AACvE;AAEAC,EAAAA,eAAAA,CAAmBpC,KAAgC,EAAA;AACjD,IAAOE,OAAAA,sBAAAA,CAAWC,MAChB,IACA,EAAA;MAAEC,MAAQ,EAAA;AAACJ,QAAAA;;AAAiBK,MAAAA,MAAAA,EAAQL,KAAOM,EAAAA;AAAY,KAAA,EACvD,OAAOC,GAAAA,KAAAA;AACL,MAAA,OAAO,MAAM,IAAA,CAAK8B,gBAAoBrC,CAAAA,KAAAA,EAAOO,GAAAA,CAAAA;KAC/C,CAAA;AAEJ;EAEA+B,MAAO,CAAA,EAAE1C,KAAOE,EAAAA,UAAAA,EAAgC,EAAA;AAC9C,IAAA,IAAIF,KAAO,EAAA;AACT,MAAA,IAAA,CAAKA,QAAQ2C,iBAAW3C,CAAAA,KAAAA,IAASA,KAAM,CAAA,IAAA,CAAKA,KAAK,CAAIA,GAAAA,KAAAA;AACvD;AACA,IAAA,IAAIE,UAAY,EAAA;AACd,MAAA,IAAA,CAAKA,aAAayC,iBAAWzC,CAAAA,UAAAA,IAAcA,UAAW,CAAA,IAAA,CAAKA,UAAU,CAAIA,GAAAA,UAAAA;AAC3E;AACF;EAEA,aAAa0C,QAAAA,CAASC,MAAoCC,OAA+B,EAAA;AACvF,IAAA,MAAM,EAAEC,UAAAA,EAAYC,OAAO,EAAA,GAAKC,uBAAWJ,IAAAA,CAAAA;AAC3C,IAAA,MAAMK,MAAS,GAAA,MAAMC,qBAAqBJ,CAAAA,UAAAA,EAAY,MAAA,CAAA;AACtD,IAAA,OAAO,IAAIG,MAAAA,CAAOF,OAAWI,IAAAA,MAAAA,EAAWN,OAAAA,CAAAA;AAC1C;EAWA,MAAgBL,gBAAAA,CACdrC,OACAO,GACmC,EAAA;AACnC,IAAA,MAAM,EAAE0C,MAAAA,EAAQ,GAAGP,OAAAA,EAAY1C,GAAAA,KAAAA;AAC/B,IAAMkD,MAAAA,UAAAA,GAAaC,wBAAaF,MAAAA,CAAAA;AAEhC,IAAMG,MAAAA,cAAAA,GAAiB,IAAIC,2BAAe,CAAA;AACxCJ,MAAAA,MAAAA,EAAQK,MAAEC,MAAO,CAAA;AACfN,QAAAA,MAAAA,EAAQK,KAAEE,CAAAA,MAAAA,EAASC,CAAAA,GAAAA,CAAI,CAAA;OACzB,CAAA;MACAC,QAAU,EAAA,CAAA;;;;;;;KAOZ,CAAA;AAEA,IAAA,MAAMC,QAAsB,GAAA;MAC1B,IAAIC,yBAAAA,CAAcR,eAAeS,MAAO,CAAA;AAAEZ,QAAAA,MAAAA,EAAQa,IAAKC,CAAAA,SAAAA,CAAUb,UAAY,EAAA,IAAA,EAAM,CAAA;AAAG,OAAA,CAAA,CAAA;SACnFlD,KAAM2D,CAAAA;;AAGX,IAAMK,MAAAA,aAAAA,GAAgB,IAAIX,2BAAe,CAAA;AACvCJ,MAAAA,MAAAA,EAAQK,MAAEC,MAAO,CAAA;AACfU,QAAAA,MAAAA,EAAQX,MAAEE,MAAM,EAAA;AAChBU,QAAAA,QAAAA,EAAUZ,MAAEE,MAAM,EAAA;AAClBW,QAAAA,QAAAA,EAAUb,MAAEE,MAAM;OACpB,CAAA;MACAE,QAAU,EAAA,CAAA;;;KAGZ,CAAA;AAEA,IAAA,OAAO,IAAIU,uBAAoC,CAAA;AAC7CC,MAAAA,QAAAA,kBAAU,MAAA,CAAA,YAAA;AACR,QAAMC,MAAAA,QAAAA,GAAW,MAAM,IAAA,CAAKpD,OAC1B,CAAA;UACE,GAAGwB,OAAAA;AACHiB,UAAAA,QAAAA;UACAY,cAAgB,EAAA;YAAEC,IAAM,EAAA;AAAc;AACxC,SAAA,EACAjE,GAAAA,CAAAA;AAGF,QAAMkE,MAAAA,YAAAA,GAAeH,SAASI,cAAc,EAAA;AAC5C,QAAMnB,MAAAA,MAAAA,GAAYoB,2BAAgBF,YAAc,EAAA;UAAEG,IAAM,EAAA;AAAC,YAAA,GAAA;AAAK,YAAA;;SAAK,CAAA;AACnE,QAAMC,MAAAA,SAAAA,GAAYC,iCAAsB7B,MAAAA,CAAAA;AAExC,QAAM8B,MAAAA,OAAAA,GAAUF,UAAUtB,MAAAA,CAAAA;AAC1B,QAAA,IAAI,CAACwB,OAAS,EAAA;AACZ,UAAA,MAAMC,OAAU,GAAA;YACdd,QAAUJ,EAAAA,IAAAA,CAAKC,UAAUb,UAAAA,CAAAA;YACzBiB,QAAUM,EAAAA,YAAAA;AACVR,YAAAA,MAAAA,EAAQH,IAAKC,CAAAA,SAAAA,CAAUc,SAAUZ,CAAAA,MAAAA,IAAU,EAAE;AAC/C,WAAA;AAEAN,UAAAA,QAAAA,CAAStC,KAAK,IAAI4D,uBAAAA,CAAYjB,cAAcH,MAAOmB,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA;AACnD,UAAA,MAAM,IAAIjD,yBAAAA,CAAe,CAAuC,mCAAA,CAAA,EAAA,EAAI,EAAA;AAClEiD,YAAAA;WACF,CAAA;AACF;AAEA,QAAO,OAAA;AAAEzB,UAAAA;AAAO,SAAA;OA5BR,EAAA,UAAA,CAAA;MA8BVjB,MAAQ,EAAA;AACNjC,QAAAA,MAAAA,EAAQE,GAAIF,CAAAA,MAAAA;AACZ6E,QAAAA,UAAAA,EAAYlF,OAAOkF,UAAc,IAAA;AACnC;AACF,KAAA,EAAGC,GAAG,EAAA;AACR;EAEAC,cAAiB,GAAA;AACf,IAAO,OAAA;AAAExF,MAAAA,KAAAA,EAAO,IAAKA,CAAAA,KAAAA;AAAOc,MAAAA,OAAAA,EAAS,IAAKA,CAAAA,OAAAA;MAASZ,UAAYG,EAAAA,qBAAAA,CAAY,KAAKH,UAAU;AAAE,KAAA;AAC9F;EAEAuF,OAAU,GAAA;AACR,IAAA,IAAA,CAAK3E,QAAQ2E,OAAO,EAAA;AACtB;EAEA,MAAgB5E,mBAAAA,CAAoB,EAClCH,WAAAA,EAAagF,CACb3B,EAAAA,QAAAA,EACA4B,QAAQ,EAAA,EACR,GAAGvF,KAAAA,EACc,EAAA;AACjB,IAAA,MAAMwF,MAAMC,kCAAgB,CAAA;MAC1B,GAAGzF,KAAAA;MACH2D,QAAU,EAAA,MAAM+B,yBAAWC,CAAAA,SAAAA,CAAUhC,QAASiC,CAAAA,GAAAA,CAAI,CAACC,GAAQA,KAAAA,GAAAA,CAAIC,OAAO,EAAA,CAAA,CAAA;MACtEP,KAAO,EAAA,MAAMG,yBAAWC,CAAAA,SAAAA,CAAUJ,KAAAA;KACpC,CAAA;AACA,IAAA,MAAMzE,KAAQ,GAAA,MAAM,IAAKlB,CAAAA,KAAAA,CAAMuF,IAAIK,GAAAA,CAAAA;AACnC,IAAA,MAAMO,QAAQjF,KAAUkC,KAAAA,MAAAA;AAExB,IAAA,IAAIgD,IAAuC,GAAA,IAAA;AAC3C,IAAA,IAAID,KAAO,EAAA;AACTC,MAAAA,IAAAA,GAAO,IAAIC,qBAAAA,EAAAA;AACX,MAAA,MAAM,IAAKrG,CAAAA,KAAAA,CAAMsG,GAAIV,CAAAA,GAAAA,EAAKQ,IAAAA,CAAAA;AAC5B;AAEA,IAAO,OAAA;AACLR,MAAAA,GAAAA;AACA1E,MAAAA,KAAAA;AACAW,MAAAA,OAAAA,0BAAsCX,MAAAA,KAAAA;AACpCkF,QAAAA,IAAAA,EAAMvE,UAAUX,MAAAA,CAAAA;OADT,EAAA,SAAA,CAAA;AAGTgB,MAAAA,MAAAA,gCAAeD,KAAAA,KAAAA;AACbmE,QAAAA,IAAAA,EAAMlE,SAASD,KAAAA,CAAAA;AACf,QAAA,IAAIkE,KAAO,EAAA;AACT,UAAM,MAAA,IAAA,CAAKnG,KAAMuG,CAAAA,MAAAA,CAAOX,GAAAA,CAAAA;AAC1B;OAJM,EAAA,QAAA;AAMV,KAAA;AACF;AACF;AAEO,MAAM7D,wBAAwBhC,6BAAAA,CAAAA;EAzVrC;;;;;;EA0VEyG,WACkBzC,CAAAA,QAAAA,EACT0C,OACAC,YACP,EAAA;AACA,IAAK,KAAA,EAAA,EAAA,KAJW3C,QAAAA,GAAAA,QAAAA,EAAAA,KACT0C,KAAAA,GAAAA,KAAAA,EAAAA,KACAC,YAAAA,GAAAA,YAAAA;AAGT;AAEA,EAAA,OAAO1E,WAAWhB,MAA2B,EAAA;AAC3C,IAAA,MAAM2F,KAAQ,GAAA,IAAI5E,eAAgB,CAAA,EAAE,CAAA;AACpCf,IAAAA,MAAAA,CAAO4F,QAAQ,CAACC,GAAAA,KAAQF,KAAMG,CAAAA,KAAAA,CAAMD,GAAAA,CAAAA,CAAAA;AACpC,IAAOF,OAAAA,KAAAA;AACT;AAEAG,EAAAA,KAAAA,CAAMC,KAAwB,EAAA;AAC5B,IAAA,IAAA,CAAKhD,QAAStC,CAAAA,IAAAA,CAAI,GAAIsF,KAAAA,CAAMhD,QAAQ,CAAA;AACpC,IAAA,IAAA,CAAK2C,eAAeK,KAAML,CAAAA,YAAAA;AAC1B,IAAI,IAAA,IAAA,CAAKD,KAASM,IAAAA,KAAAA,CAAMN,KAAO,EAAA;AAC7B,MAAA,IAAA,CAAKA,QAAQO,sBAAY,CAAA;QAAC,IAAKP,CAAAA,KAAAA;QAAOM,KAAMN,CAAAA;AAAQ,OAAA,EAAA;QAClDQ,WAAaC,EAAAA,qBAAAA;QACbC,YAAcD,EAAAA,qBAAAA;QACdE,gBAAkBF,EAAAA;OACpB,CAAA;AACF,KAAA,MAAA,IAAWH,MAAMN,KAAO,EAAA;AACtB,MAAKA,IAAAA,CAAAA,KAAAA,GAAQpG,qBAAY0G,CAAAA,KAAAA,CAAMN,KAAK,CAAA;AACtC;AACF;EAEAY,YAAe,GAAA;AACb,IAAA,OAAO,KAAKtD,QACTuD,CAAAA,MAAAA,CAAO,CAACC,CAAAA,KAAMA,aAAaC,4BAAAA,CAAAA,CAC3BC,OAAQ,CAAA,CAACF,MAAMA,CAAEF,CAAAA,YAAAA,EAAY,CAAA,CAC7BC,OAAOI,OAAAA,CAAAA;AACZ;EAEA5C,cAAyB,GAAA;AACvB,IAAA,OAAO,KAAKf,QACTuD,CAAAA,MAAAA,CAAO,CAACC,CAAMA,KAAAA,CAAAA,YAAaC,4BAAAA,CAC3BC,CAAAA,OAAAA,CAAQ,CAACF,CAAAA,KAAMA,EAAEI,IAAI,CAAA,CACrBL,OAAOI,OAAAA,CAAAA,CACPE,KAAK,EAAA,CAAA;AACV;EAEAC,QAAW,GAAA;AACT,IAAA,OAAO,KAAK/C,cAAc,EAAA;AAC5B;EAEAU,cAAiB,GAAA;AACf,IAAO,OAAA;MACLzB,QAAU1D,EAAAA,qBAAAA,CAAY,KAAK0D,QAAQ,CAAA;MACnC0C,KAAOpG,EAAAA,qBAAAA,CAAY,KAAKoG,KAAK,CAAA;AAC7BC,MAAAA,YAAAA,EAAc,IAAKA,CAAAA;AACrB,KAAA;AACF;AAEAoB,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { customMerge } from \"@/internals/helpers/object.js\";\nimport { takeBigger } from \"@/internals/helpers/number.js\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext, RunContext } from \"@/context.js\";\nimport { INSTRUMENTATION_ENABLED } from \"@/instrumentation/config.js\";\nimport { createTelemetryMiddleware } from \"@/instrumentation/create-telemetry-middleware.js\";\nimport { doNothing, isFunction } from \"remeda\";\nimport { ObjectHashKeyFn } from \"@/cache/decoratorCache.js\";\nimport { Task } from \"promise-based-task\";\nimport { NullCache } from \"@/cache/nullCache.js\";\nimport { BaseCache } from \"@/cache/base.js\";\nimport { FullModelName, loadModel, parseModel } from \"@/backend/utils.js\";\nimport { ProviderName } from \"@/backend/constants.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { AssistantMessage, Message, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport {\n JSONSchema7,\n LanguageModelV1FunctionTool,\n LanguageModelV1ProviderDefinedTool,\n LanguageModelV1ToolChoice,\n} from \"@ai-sdk/provider\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z } from \"zod\";\nimport {\n createSchemaValidator,\n parseBrokenJson,\n toJsonSchema,\n} from \"@/internals/helpers/schema.js\";\nimport { Retryable } from \"@/internals/helpers/retryable.js\";\nimport type { ValidateFunction } from \"ajv\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { toAsyncGenerator } from \"@/internals/helpers/promise.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\n\nexport interface ChatModelParameters {\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n temperature?: number;\n topK?: number;\n n?: number;\n presencePenalty?: number;\n seed?: number;\n stopSequences?: string[];\n}\n\nexport interface ChatModelObjectInput<T> extends ChatModelParameters {\n schema: z.ZodSchema<T>;\n messages: Message[];\n abortSignal?: AbortSignal;\n maxRetries?: number;\n}\n\nexport interface ChatModelObjectOutput<T> {\n object: T;\n}\n\nexport interface ChatModelInput extends ChatModelParameters {\n tools?: AnyTool[];\n abortSignal?: AbortSignal;\n stopSequences?: string[];\n responseFormat?:\n | {\n type: \"regular\";\n tools?: (LanguageModelV1FunctionTool | LanguageModelV1ProviderDefinedTool)[];\n toolChoice?: LanguageModelV1ToolChoice;\n }\n | {\n type: \"object-json\";\n schema?: JSONSchema7;\n name?: string;\n description?: string;\n }\n | {\n type: \"object-tool\";\n tool: LanguageModelV1FunctionTool;\n };\n toolChoice?: never; // TODO\n messages: Message[];\n}\n\nexport type ChatModelFinishReason =\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n\nexport interface ChatModelUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\nexport interface ChatModelEvents {\n newToken?: Callback<{ value: ChatModelOutput; callbacks: { abort: () => void } }>;\n success?: Callback<{ value: ChatModelOutput }>;\n start?: Callback<{ input: ChatModelInput }>;\n error?: Callback<{ input: ChatModelInput; error: FrameworkError }>;\n finish?: Callback<null>;\n}\n\nexport type ChatModelEmitter<A = Record<never, never>> = Emitter<\n ChatModelEvents & Omit<A, keyof ChatModelEvents>\n>;\n\nexport type ChatModelCache = BaseCache<Task<ChatModelOutput[]>>;\nexport type ConfigFn<T> = (value: T) => T;\nexport interface ChatConfig {\n cache?: ChatModelCache | ConfigFn<ChatModelCache>;\n parameters?: ChatModelParameters | ConfigFn<ChatModelParameters>;\n}\n\nexport abstract class ChatModel extends Serializable {\n public abstract readonly emitter: Emitter<ChatModelEvents>;\n public cache: ChatModelCache = new NullCache();\n public parameters: ChatModelParameters = {};\n\n abstract get modelId(): string;\n abstract get providerId(): string;\n\n create(input: ChatModelInput & { stream?: boolean }) {\n input = shallowCopy(input);\n\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n const cacheEntry = await this.createCacheAccessor(input);\n\n try {\n await run.emitter.emit(\"start\", { input });\n const chunks: ChatModelOutput[] = [];\n\n const generator =\n cacheEntry.value ??\n (input.stream\n ? this._createStream(input, run)\n : toAsyncGenerator(this._create(input, run)));\n\n const controller = new AbortController();\n for await (const value of generator) {\n chunks.push(value);\n await run.emitter.emit(\"newToken\", {\n value,\n callbacks: { abort: () => controller.abort() },\n });\n if (controller.signal.aborted) {\n break;\n }\n }\n\n cacheEntry.resolve(chunks);\n const result = ChatModelOutput.fromChunks(chunks);\n await run.emitter.emit(\"success\", { value: result });\n return result;\n } catch (error) {\n await run.emitter.emit(\"error\", { input, error });\n await cacheEntry.reject(error);\n if (error instanceof ChatModelError) {\n throw error;\n } else {\n throw new ChatModelError(`The Chat Model has encountered an error.`, [error]);\n }\n } finally {\n await run.emitter.emit(\"finish\", null);\n }\n },\n ).middleware(INSTRUMENTATION_ENABLED ? createTelemetryMiddleware() : doNothing());\n }\n\n createStructure<T>(input: ChatModelObjectInput<T>) {\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n return await this._createStructure<T>(input, run);\n },\n );\n }\n\n config({ cache, parameters }: ChatConfig): void {\n if (cache) {\n this.cache = isFunction(cache) ? cache(this.cache) : cache;\n }\n if (parameters) {\n this.parameters = isFunction(parameters) ? parameters(this.parameters) : parameters;\n }\n }\n\n static async fromName(name: FullModelName | ProviderName, options?: ChatModelParameters) {\n const { providerId, modelId } = parseModel(name);\n const Target = await loadModel<ChatModel>(providerId, \"chat\");\n return new Target(modelId || undefined, options);\n }\n\n protected abstract _create(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelOutput>;\n protected abstract _createStream(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): AsyncGenerator<ChatModelOutput, void>;\n\n protected async _createStructure<T>(\n input: ChatModelObjectInput<T>,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const { schema, ...options } = input;\n const jsonSchema = toJsonSchema(schema);\n\n const systemTemplate = new PromptTemplate({\n schema: z.object({\n schema: z.string().min(1),\n }),\n template: `You are a helpful assistant that generates only valid JSON adhering to the following JSON Schema.\n\n\\`\\`\\`\n{{schema}}\n\\`\\`\\`\n\nIMPORTANT: You MUST answer with a JSON object that matches the JSON schema above.`,\n });\n\n const messages: Message[] = [\n new SystemMessage(systemTemplate.render({ schema: JSON.stringify(jsonSchema, null, 2) })),\n ...input.messages,\n ];\n\n const errorTemplate = new PromptTemplate({\n schema: z.object({\n errors: z.string(),\n expected: z.string(),\n received: z.string(),\n }),\n template: `Generated object does not match the expected JSON schema!\n\nValidation Errors: {{errors}}`,\n });\n\n return new Retryable<ChatModelObjectOutput<T>>({\n executor: async () => {\n const response = await this._create(\n {\n ...options,\n messages,\n responseFormat: { type: \"object-json\" },\n },\n run,\n );\n\n const textResponse = response.getTextContent();\n const object: T = parseBrokenJson(textResponse, { pair: [\"{\", \"}\"] });\n const validator = createSchemaValidator(schema) as ValidateFunction<T>;\n\n const success = validator(object);\n if (!success) {\n const context = {\n expected: JSON.stringify(jsonSchema),\n received: textResponse,\n errors: JSON.stringify(validator.errors ?? []),\n };\n\n messages.push(new UserMessage(errorTemplate.render(context)));\n throw new ChatModelError(`LLM did not produce a valid output.`, [], {\n context,\n });\n }\n\n return { object };\n },\n config: {\n signal: run.signal,\n maxRetries: input?.maxRetries || 1,\n },\n }).get();\n }\n\n createSnapshot() {\n return { cache: this.cache, emitter: this.emitter, parameters: shallowCopy(this.parameters) };\n }\n\n destroy() {\n this.emitter.destroy();\n }\n\n protected async createCacheAccessor({\n abortSignal: _,\n messages,\n tools = [],\n ...input\n }: ChatModelInput) {\n const key = ObjectHashKeyFn({\n ...input,\n messages: await Serializer.serialize(messages.map((msg) => msg.toPlain())),\n tools: await Serializer.serialize(tools),\n });\n const value = await this.cache.get(key);\n const isNew = value === undefined;\n\n let task: Task<ChatModelOutput[]> | null = null;\n if (isNew) {\n task = new Task();\n await this.cache.set(key, task);\n }\n\n return {\n key,\n value,\n resolve: <T2 extends ChatModelOutput>(value: T2[]) => {\n task?.resolve?.(value);\n },\n reject: async (error: Error) => {\n task?.reject?.(error);\n if (isNew) {\n await this.cache.delete(key);\n }\n },\n };\n }\n}\n\nexport class ChatModelOutput extends Serializable {\n constructor(\n public readonly messages: Message[],\n public usage?: ChatModelUsage,\n public finishReason?: ChatModelFinishReason,\n ) {\n super();\n }\n\n static fromChunks(chunks: ChatModelOutput[]) {\n const final = new ChatModelOutput([]);\n chunks.forEach((cur) => final.merge(cur));\n return final;\n }\n\n merge(other: ChatModelOutput) {\n this.messages.push(...other.messages);\n this.finishReason = other.finishReason;\n if (this.usage && other.usage) {\n this.usage = customMerge([this.usage, other.usage], {\n totalTokens: takeBigger,\n promptTokens: takeBigger,\n completionTokens: takeBigger,\n });\n } else if (other.usage) {\n this.usage = shallowCopy(other.usage);\n }\n }\n\n getToolCalls() {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.getToolCalls())\n .filter(Boolean);\n }\n\n getTextContent(): string {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.text)\n .filter(Boolean)\n .join(\"\");\n }\n\n toString() {\n return this.getTextContent();\n }\n\n createSnapshot() {\n return {\n messages: shallowCopy(this.messages),\n usage: shallowCopy(this.usage),\n finishReason: this.finishReason,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["chat.ts"],"names":["ChatModel","Serializable","cache","NullCache","parameters","create","input","shallowCopy","RunContext","enter","params","signal","abortSignal","run","cacheEntry","createCacheAccessor","emitter","emit","chunks","generator","value","stream","_createStream","toAsyncGenerator","_create","controller","AbortController","push","callbacks","abort","aborted","resolve","result","ChatModelOutput","fromChunks","error","reject","ChatModelError","middleware","INSTRUMENTATION_ENABLED","createTelemetryMiddleware","doNothing","createStructure","_createStructure","config","isFunction","fromName","name","options","providerId","modelId","parseModel","Target","loadModel","undefined","schema","jsonSchema","toJsonSchema","systemTemplate","PromptTemplate","z","object","string","min","template","messages","SystemMessage","render","JSON","stringify","errorTemplate","errors","expected","received","Retryable","executor","response","responseFormat","type","textResponse","getTextContent","parseBrokenJson","pair","validator","createSchemaValidator","success","context","UserMessage","maxRetries","get","createSnapshot","destroy","_","tools","key","ObjectHashKeyFn","Serializer","serialize","map","msg","toPlain","isNew","task","Task","set","delete","constructor","usage","finishReason","final","forEach","cur","merge","other","customMerge","totalTokens","takeBigger","promptTokens","completionTokens","getToolCalls","filter","r","AssistantMessage","flatMap","Boolean","getTextMessages","text","join","toString","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { customMerge } from \"@/internals/helpers/object.js\";\nimport { takeBigger } from \"@/internals/helpers/number.js\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext, RunContext } from \"@/context.js\";\nimport { INSTRUMENTATION_ENABLED } from \"@/instrumentation/config.js\";\nimport { createTelemetryMiddleware } from \"@/instrumentation/create-telemetry-middleware.js\";\nimport { doNothing, isFunction } from \"remeda\";\nimport { ObjectHashKeyFn } from \"@/cache/decoratorCache.js\";\nimport { Task } from \"promise-based-task\";\nimport { NullCache } from \"@/cache/nullCache.js\";\nimport { BaseCache } from \"@/cache/base.js\";\nimport { FullModelName, loadModel, parseModel } from \"@/backend/utils.js\";\nimport { ProviderName } from \"@/backend/constants.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { AssistantMessage, Message, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport {\n JSONSchema7,\n LanguageModelV1FunctionTool,\n LanguageModelV1ProviderDefinedTool,\n LanguageModelV1ToolChoice,\n} from \"@ai-sdk/provider\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z } from \"zod\";\nimport {\n createSchemaValidator,\n parseBrokenJson,\n toJsonSchema,\n} from \"@/internals/helpers/schema.js\";\nimport { Retryable } from \"@/internals/helpers/retryable.js\";\nimport type { ValidateFunction } from \"ajv\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { toAsyncGenerator } from \"@/internals/helpers/promise.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\n\nexport interface ChatModelParameters {\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n temperature?: number;\n topK?: number;\n n?: number;\n presencePenalty?: number;\n seed?: number;\n stopSequences?: string[];\n}\n\nexport interface ChatModelObjectInput<T> extends ChatModelParameters {\n schema: z.ZodSchema<T>;\n messages: Message[];\n abortSignal?: AbortSignal;\n maxRetries?: number;\n}\n\nexport interface ChatModelObjectOutput<T> {\n object: T;\n}\n\nexport interface ChatModelInput extends ChatModelParameters {\n tools?: AnyTool[];\n abortSignal?: AbortSignal;\n stopSequences?: string[];\n responseFormat?:\n | {\n type: \"regular\";\n tools?: (LanguageModelV1FunctionTool | LanguageModelV1ProviderDefinedTool)[];\n toolChoice?: LanguageModelV1ToolChoice;\n }\n | {\n type: \"object-json\";\n schema?: JSONSchema7;\n name?: string;\n description?: string;\n }\n | {\n type: \"object-tool\";\n tool: LanguageModelV1FunctionTool;\n };\n toolChoice?: never; // TODO\n messages: Message[];\n}\n\nexport type ChatModelFinishReason =\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n\nexport interface ChatModelUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\nexport interface ChatModelEvents {\n newToken?: Callback<{ value: ChatModelOutput; callbacks: { abort: () => void } }>;\n success?: Callback<{ value: ChatModelOutput }>;\n start?: Callback<{ input: ChatModelInput }>;\n error?: Callback<{ input: ChatModelInput; error: FrameworkError }>;\n finish?: Callback<null>;\n}\n\nexport type ChatModelEmitter<A = Record<never, never>> = Emitter<\n ChatModelEvents & Omit<A, keyof ChatModelEvents>\n>;\n\nexport type ChatModelCache = BaseCache<Task<ChatModelOutput[]>>;\nexport type ConfigFn<T> = (value: T) => T;\nexport interface ChatConfig {\n cache?: ChatModelCache | ConfigFn<ChatModelCache>;\n parameters?: ChatModelParameters | ConfigFn<ChatModelParameters>;\n}\n\nexport abstract class ChatModel extends Serializable {\n public abstract readonly emitter: Emitter<ChatModelEvents>;\n public cache: ChatModelCache = new NullCache();\n public parameters: ChatModelParameters = {};\n\n abstract get modelId(): string;\n abstract get providerId(): string;\n\n create(input: ChatModelInput & { stream?: boolean }) {\n input = shallowCopy(input);\n\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n const cacheEntry = await this.createCacheAccessor(input);\n\n try {\n await run.emitter.emit(\"start\", { input });\n const chunks: ChatModelOutput[] = [];\n\n const generator =\n cacheEntry.value ??\n (input.stream\n ? this._createStream(input, run)\n : toAsyncGenerator(this._create(input, run)));\n\n const controller = new AbortController();\n for await (const value of generator) {\n chunks.push(value);\n await run.emitter.emit(\"newToken\", {\n value,\n callbacks: { abort: () => controller.abort() },\n });\n if (controller.signal.aborted) {\n break;\n }\n }\n\n cacheEntry.resolve(chunks);\n const result = ChatModelOutput.fromChunks(chunks);\n await run.emitter.emit(\"success\", { value: result });\n return result;\n } catch (error) {\n await run.emitter.emit(\"error\", { input, error });\n await cacheEntry.reject(error);\n if (error instanceof ChatModelError) {\n throw error;\n } else {\n throw new ChatModelError(`The Chat Model has encountered an error.`, [error]);\n }\n } finally {\n await run.emitter.emit(\"finish\", null);\n }\n },\n ).middleware(INSTRUMENTATION_ENABLED ? createTelemetryMiddleware() : doNothing());\n }\n\n createStructure<T>(input: ChatModelObjectInput<T>) {\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n return await this._createStructure<T>(input, run);\n },\n );\n }\n\n config({ cache, parameters }: ChatConfig): void {\n if (cache) {\n this.cache = isFunction(cache) ? cache(this.cache) : cache;\n }\n if (parameters) {\n this.parameters = isFunction(parameters) ? parameters(this.parameters) : parameters;\n }\n }\n\n static async fromName(name: FullModelName | ProviderName, options?: ChatModelParameters) {\n const { providerId, modelId } = parseModel(name);\n const Target = await loadModel<ChatModel>(providerId, \"chat\");\n return new Target(modelId || undefined, options);\n }\n\n protected abstract _create(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelOutput>;\n protected abstract _createStream(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): AsyncGenerator<ChatModelOutput, void>;\n\n protected async _createStructure<T>(\n input: ChatModelObjectInput<T>,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const { schema, ...options } = input;\n const jsonSchema = toJsonSchema(schema);\n\n const systemTemplate = new PromptTemplate({\n schema: z.object({\n schema: z.string().min(1),\n }),\n template: `You are a helpful assistant that generates only valid JSON adhering to the following JSON Schema.\n\n\\`\\`\\`\n{{schema}}\n\\`\\`\\`\n\nIMPORTANT: You MUST answer with a JSON object that matches the JSON schema above.`,\n });\n\n const messages: Message[] = [\n new SystemMessage(systemTemplate.render({ schema: JSON.stringify(jsonSchema, null, 2) })),\n ...input.messages,\n ];\n\n const errorTemplate = new PromptTemplate({\n schema: z.object({\n errors: z.string(),\n expected: z.string(),\n received: z.string(),\n }),\n template: `Generated object does not match the expected JSON schema!\n\nValidation Errors: {{errors}}`,\n });\n\n return new Retryable<ChatModelObjectOutput<T>>({\n executor: async () => {\n const response = await this._create(\n {\n ...options,\n messages,\n responseFormat: { type: \"object-json\" },\n },\n run,\n );\n\n const textResponse = response.getTextContent();\n const object: T = parseBrokenJson(textResponse, { pair: [\"{\", \"}\"] });\n const validator = createSchemaValidator(schema) as ValidateFunction<T>;\n\n const success = validator(object);\n if (!success) {\n const context = {\n expected: JSON.stringify(jsonSchema),\n received: textResponse,\n errors: JSON.stringify(validator.errors ?? []),\n };\n\n messages.push(new UserMessage(errorTemplate.render(context)));\n throw new ChatModelError(`LLM did not produce a valid output.`, [], {\n context,\n });\n }\n\n return { object };\n },\n config: {\n signal: run.signal,\n maxRetries: input?.maxRetries || 1,\n },\n }).get();\n }\n\n createSnapshot() {\n return { cache: this.cache, emitter: this.emitter, parameters: shallowCopy(this.parameters) };\n }\n\n destroy() {\n this.emitter.destroy();\n }\n\n protected async createCacheAccessor({\n abortSignal: _,\n messages,\n tools = [],\n ...input\n }: ChatModelInput) {\n const key = ObjectHashKeyFn({\n ...input,\n messages: await Serializer.serialize(messages.map((msg) => msg.toPlain())),\n tools: await Serializer.serialize(tools),\n });\n const value = await this.cache.get(key);\n const isNew = value === undefined;\n\n let task: Task<ChatModelOutput[]> | null = null;\n if (isNew) {\n task = new Task();\n await this.cache.set(key, task);\n }\n\n return {\n key,\n value,\n resolve: <T2 extends ChatModelOutput>(value: T2[]) => {\n task?.resolve?.(value);\n },\n reject: async (error: Error) => {\n task?.reject?.(error);\n if (isNew) {\n await this.cache.delete(key);\n }\n },\n };\n }\n}\n\nexport class ChatModelOutput extends Serializable {\n constructor(\n public readonly messages: Message[],\n public usage?: ChatModelUsage,\n public finishReason?: ChatModelFinishReason,\n ) {\n super();\n }\n\n static fromChunks(chunks: ChatModelOutput[]) {\n const final = new ChatModelOutput([]);\n chunks.forEach((cur) => final.merge(cur));\n return final;\n }\n\n merge(other: ChatModelOutput) {\n this.messages.push(...other.messages);\n this.finishReason = other.finishReason;\n if (this.usage && other.usage) {\n this.usage = customMerge([this.usage, other.usage], {\n totalTokens: takeBigger,\n promptTokens: takeBigger,\n completionTokens: takeBigger,\n });\n } else if (other.usage) {\n this.usage = shallowCopy(other.usage);\n }\n }\n\n getToolCalls() {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.getToolCalls())\n .filter(Boolean);\n }\n\n getTextMessages(): AssistantMessage[] {\n return this.messages.filter((r) => r instanceof AssistantMessage).filter((r) => r.text);\n }\n\n getTextContent(): string {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.text)\n .filter(Boolean)\n .join(\"\");\n }\n\n toString() {\n return this.getTextContent();\n }\n\n createSnapshot() {\n return {\n messages: shallowCopy(this.messages),\n usage: shallowCopy(this.usage),\n finishReason: this.finishReason,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
package/dist/backend/chat.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Message, MessageContentPart } from './message.cjs';
|
|
1
|
+
import { Message, AssistantMessage, MessageContentPart } from './message.cjs';
|
|
2
2
|
import * as ai from 'ai';
|
|
3
3
|
import { Run, GetRunContext } from '../context.cjs';
|
|
4
4
|
import { Serializable } from '../internals/serializable.cjs';
|
|
@@ -128,6 +128,7 @@ declare class ChatModelOutput extends Serializable {
|
|
|
128
128
|
static fromChunks(chunks: ChatModelOutput[]): ChatModelOutput;
|
|
129
129
|
merge(other: ChatModelOutput): void;
|
|
130
130
|
getToolCalls(): ai.ToolCallPart[];
|
|
131
|
+
getTextMessages(): AssistantMessage[];
|
|
131
132
|
getTextContent(): string;
|
|
132
133
|
toString(): string;
|
|
133
134
|
createSnapshot(): {
|
package/dist/backend/chat.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Message, MessageContentPart } from './message.js';
|
|
1
|
+
import { Message, AssistantMessage, MessageContentPart } from './message.js';
|
|
2
2
|
import * as ai from 'ai';
|
|
3
3
|
import { Run, GetRunContext } from '../context.js';
|
|
4
4
|
import { Serializable } from '../internals/serializable.js';
|
|
@@ -128,6 +128,7 @@ declare class ChatModelOutput extends Serializable {
|
|
|
128
128
|
static fromChunks(chunks: ChatModelOutput[]): ChatModelOutput;
|
|
129
129
|
merge(other: ChatModelOutput): void;
|
|
130
130
|
getToolCalls(): ai.ToolCallPart[];
|
|
131
|
+
getTextMessages(): AssistantMessage[];
|
|
131
132
|
getTextContent(): string;
|
|
132
133
|
toString(): string;
|
|
133
134
|
createSnapshot(): {
|
package/dist/backend/chat.js
CHANGED
|
@@ -244,6 +244,9 @@ class ChatModelOutput extends Serializable {
|
|
|
244
244
|
getToolCalls() {
|
|
245
245
|
return this.messages.filter((r) => r instanceof AssistantMessage).flatMap((r) => r.getToolCalls()).filter(Boolean);
|
|
246
246
|
}
|
|
247
|
+
getTextMessages() {
|
|
248
|
+
return this.messages.filter((r) => r instanceof AssistantMessage).filter((r) => r.text);
|
|
249
|
+
}
|
|
247
250
|
getTextContent() {
|
|
248
251
|
return this.messages.filter((r) => r instanceof AssistantMessage).flatMap((r) => r.text).filter(Boolean).join("");
|
|
249
252
|
}
|
package/dist/backend/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["chat.ts"],"names":["ChatModel","Serializable","cache","NullCache","parameters","create","input","shallowCopy","RunContext","enter","params","signal","abortSignal","run","cacheEntry","createCacheAccessor","emitter","emit","chunks","generator","value","stream","_createStream","toAsyncGenerator","_create","controller","AbortController","push","callbacks","abort","aborted","resolve","result","ChatModelOutput","fromChunks","error","reject","ChatModelError","middleware","INSTRUMENTATION_ENABLED","createTelemetryMiddleware","doNothing","createStructure","_createStructure","config","isFunction","fromName","name","options","providerId","modelId","parseModel","Target","loadModel","undefined","schema","jsonSchema","toJsonSchema","systemTemplate","PromptTemplate","z","object","string","min","template","messages","SystemMessage","render","JSON","stringify","errorTemplate","errors","expected","received","Retryable","executor","response","responseFormat","type","textResponse","getTextContent","parseBrokenJson","pair","validator","createSchemaValidator","success","context","UserMessage","maxRetries","get","createSnapshot","destroy","_","tools","key","ObjectHashKeyFn","Serializer","serialize","map","msg","toPlain","isNew","task","Task","set","delete","constructor","usage","finishReason","final","forEach","cur","merge","other","customMerge","totalTokens","takeBigger","promptTokens","completionTokens","getToolCalls","filter","r","AssistantMessage","flatMap","Boolean","text","join","toString","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { customMerge } from \"@/internals/helpers/object.js\";\nimport { takeBigger } from \"@/internals/helpers/number.js\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext, RunContext } from \"@/context.js\";\nimport { INSTRUMENTATION_ENABLED } from \"@/instrumentation/config.js\";\nimport { createTelemetryMiddleware } from \"@/instrumentation/create-telemetry-middleware.js\";\nimport { doNothing, isFunction } from \"remeda\";\nimport { ObjectHashKeyFn } from \"@/cache/decoratorCache.js\";\nimport { Task } from \"promise-based-task\";\nimport { NullCache } from \"@/cache/nullCache.js\";\nimport { BaseCache } from \"@/cache/base.js\";\nimport { FullModelName, loadModel, parseModel } from \"@/backend/utils.js\";\nimport { ProviderName } from \"@/backend/constants.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { AssistantMessage, Message, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport {\n JSONSchema7,\n LanguageModelV1FunctionTool,\n LanguageModelV1ProviderDefinedTool,\n LanguageModelV1ToolChoice,\n} from \"@ai-sdk/provider\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z } from \"zod\";\nimport {\n createSchemaValidator,\n parseBrokenJson,\n toJsonSchema,\n} from \"@/internals/helpers/schema.js\";\nimport { Retryable } from \"@/internals/helpers/retryable.js\";\nimport type { ValidateFunction } from \"ajv\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { toAsyncGenerator } from \"@/internals/helpers/promise.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\n\nexport interface ChatModelParameters {\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n temperature?: number;\n topK?: number;\n n?: number;\n presencePenalty?: number;\n seed?: number;\n stopSequences?: string[];\n}\n\nexport interface ChatModelObjectInput<T> extends ChatModelParameters {\n schema: z.ZodSchema<T>;\n messages: Message[];\n abortSignal?: AbortSignal;\n maxRetries?: number;\n}\n\nexport interface ChatModelObjectOutput<T> {\n object: T;\n}\n\nexport interface ChatModelInput extends ChatModelParameters {\n tools?: AnyTool[];\n abortSignal?: AbortSignal;\n stopSequences?: string[];\n responseFormat?:\n | {\n type: \"regular\";\n tools?: (LanguageModelV1FunctionTool | LanguageModelV1ProviderDefinedTool)[];\n toolChoice?: LanguageModelV1ToolChoice;\n }\n | {\n type: \"object-json\";\n schema?: JSONSchema7;\n name?: string;\n description?: string;\n }\n | {\n type: \"object-tool\";\n tool: LanguageModelV1FunctionTool;\n };\n toolChoice?: never; // TODO\n messages: Message[];\n}\n\nexport type ChatModelFinishReason =\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n\nexport interface ChatModelUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\nexport interface ChatModelEvents {\n newToken?: Callback<{ value: ChatModelOutput; callbacks: { abort: () => void } }>;\n success?: Callback<{ value: ChatModelOutput }>;\n start?: Callback<{ input: ChatModelInput }>;\n error?: Callback<{ input: ChatModelInput; error: FrameworkError }>;\n finish?: Callback<null>;\n}\n\nexport type ChatModelEmitter<A = Record<never, never>> = Emitter<\n ChatModelEvents & Omit<A, keyof ChatModelEvents>\n>;\n\nexport type ChatModelCache = BaseCache<Task<ChatModelOutput[]>>;\nexport type ConfigFn<T> = (value: T) => T;\nexport interface ChatConfig {\n cache?: ChatModelCache | ConfigFn<ChatModelCache>;\n parameters?: ChatModelParameters | ConfigFn<ChatModelParameters>;\n}\n\nexport abstract class ChatModel extends Serializable {\n public abstract readonly emitter: Emitter<ChatModelEvents>;\n public cache: ChatModelCache = new NullCache();\n public parameters: ChatModelParameters = {};\n\n abstract get modelId(): string;\n abstract get providerId(): string;\n\n create(input: ChatModelInput & { stream?: boolean }) {\n input = shallowCopy(input);\n\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n const cacheEntry = await this.createCacheAccessor(input);\n\n try {\n await run.emitter.emit(\"start\", { input });\n const chunks: ChatModelOutput[] = [];\n\n const generator =\n cacheEntry.value ??\n (input.stream\n ? this._createStream(input, run)\n : toAsyncGenerator(this._create(input, run)));\n\n const controller = new AbortController();\n for await (const value of generator) {\n chunks.push(value);\n await run.emitter.emit(\"newToken\", {\n value,\n callbacks: { abort: () => controller.abort() },\n });\n if (controller.signal.aborted) {\n break;\n }\n }\n\n cacheEntry.resolve(chunks);\n const result = ChatModelOutput.fromChunks(chunks);\n await run.emitter.emit(\"success\", { value: result });\n return result;\n } catch (error) {\n await run.emitter.emit(\"error\", { input, error });\n await cacheEntry.reject(error);\n if (error instanceof ChatModelError) {\n throw error;\n } else {\n throw new ChatModelError(`The Chat Model has encountered an error.`, [error]);\n }\n } finally {\n await run.emitter.emit(\"finish\", null);\n }\n },\n ).middleware(INSTRUMENTATION_ENABLED ? createTelemetryMiddleware() : doNothing());\n }\n\n createStructure<T>(input: ChatModelObjectInput<T>) {\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n return await this._createStructure<T>(input, run);\n },\n );\n }\n\n config({ cache, parameters }: ChatConfig): void {\n if (cache) {\n this.cache = isFunction(cache) ? cache(this.cache) : cache;\n }\n if (parameters) {\n this.parameters = isFunction(parameters) ? parameters(this.parameters) : parameters;\n }\n }\n\n static async fromName(name: FullModelName | ProviderName, options?: ChatModelParameters) {\n const { providerId, modelId } = parseModel(name);\n const Target = await loadModel<ChatModel>(providerId, \"chat\");\n return new Target(modelId || undefined, options);\n }\n\n protected abstract _create(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelOutput>;\n protected abstract _createStream(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): AsyncGenerator<ChatModelOutput, void>;\n\n protected async _createStructure<T>(\n input: ChatModelObjectInput<T>,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const { schema, ...options } = input;\n const jsonSchema = toJsonSchema(schema);\n\n const systemTemplate = new PromptTemplate({\n schema: z.object({\n schema: z.string().min(1),\n }),\n template: `You are a helpful assistant that generates only valid JSON adhering to the following JSON Schema.\n\n\\`\\`\\`\n{{schema}}\n\\`\\`\\`\n\nIMPORTANT: You MUST answer with a JSON object that matches the JSON schema above.`,\n });\n\n const messages: Message[] = [\n new SystemMessage(systemTemplate.render({ schema: JSON.stringify(jsonSchema, null, 2) })),\n ...input.messages,\n ];\n\n const errorTemplate = new PromptTemplate({\n schema: z.object({\n errors: z.string(),\n expected: z.string(),\n received: z.string(),\n }),\n template: `Generated object does not match the expected JSON schema!\n\nValidation Errors: {{errors}}`,\n });\n\n return new Retryable<ChatModelObjectOutput<T>>({\n executor: async () => {\n const response = await this._create(\n {\n ...options,\n messages,\n responseFormat: { type: \"object-json\" },\n },\n run,\n );\n\n const textResponse = response.getTextContent();\n const object: T = parseBrokenJson(textResponse, { pair: [\"{\", \"}\"] });\n const validator = createSchemaValidator(schema) as ValidateFunction<T>;\n\n const success = validator(object);\n if (!success) {\n const context = {\n expected: JSON.stringify(jsonSchema),\n received: textResponse,\n errors: JSON.stringify(validator.errors ?? []),\n };\n\n messages.push(new UserMessage(errorTemplate.render(context)));\n throw new ChatModelError(`LLM did not produce a valid output.`, [], {\n context,\n });\n }\n\n return { object };\n },\n config: {\n signal: run.signal,\n maxRetries: input?.maxRetries || 1,\n },\n }).get();\n }\n\n createSnapshot() {\n return { cache: this.cache, emitter: this.emitter, parameters: shallowCopy(this.parameters) };\n }\n\n destroy() {\n this.emitter.destroy();\n }\n\n protected async createCacheAccessor({\n abortSignal: _,\n messages,\n tools = [],\n ...input\n }: ChatModelInput) {\n const key = ObjectHashKeyFn({\n ...input,\n messages: await Serializer.serialize(messages.map((msg) => msg.toPlain())),\n tools: await Serializer.serialize(tools),\n });\n const value = await this.cache.get(key);\n const isNew = value === undefined;\n\n let task: Task<ChatModelOutput[]> | null = null;\n if (isNew) {\n task = new Task();\n await this.cache.set(key, task);\n }\n\n return {\n key,\n value,\n resolve: <T2 extends ChatModelOutput>(value: T2[]) => {\n task?.resolve?.(value);\n },\n reject: async (error: Error) => {\n task?.reject?.(error);\n if (isNew) {\n await this.cache.delete(key);\n }\n },\n };\n }\n}\n\nexport class ChatModelOutput extends Serializable {\n constructor(\n public readonly messages: Message[],\n public usage?: ChatModelUsage,\n public finishReason?: ChatModelFinishReason,\n ) {\n super();\n }\n\n static fromChunks(chunks: ChatModelOutput[]) {\n const final = new ChatModelOutput([]);\n chunks.forEach((cur) => final.merge(cur));\n return final;\n }\n\n merge(other: ChatModelOutput) {\n this.messages.push(...other.messages);\n this.finishReason = other.finishReason;\n if (this.usage && other.usage) {\n this.usage = customMerge([this.usage, other.usage], {\n totalTokens: takeBigger,\n promptTokens: takeBigger,\n completionTokens: takeBigger,\n });\n } else if (other.usage) {\n this.usage = shallowCopy(other.usage);\n }\n }\n\n getToolCalls() {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.getToolCalls())\n .filter(Boolean);\n }\n\n getTextContent(): string {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.text)\n .filter(Boolean)\n .join(\"\");\n }\n\n toString() {\n return this.getTextContent();\n }\n\n createSnapshot() {\n return {\n messages: shallowCopy(this.messages),\n usage: shallowCopy(this.usage),\n finishReason: this.finishReason,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["chat.ts"],"names":["ChatModel","Serializable","cache","NullCache","parameters","create","input","shallowCopy","RunContext","enter","params","signal","abortSignal","run","cacheEntry","createCacheAccessor","emitter","emit","chunks","generator","value","stream","_createStream","toAsyncGenerator","_create","controller","AbortController","push","callbacks","abort","aborted","resolve","result","ChatModelOutput","fromChunks","error","reject","ChatModelError","middleware","INSTRUMENTATION_ENABLED","createTelemetryMiddleware","doNothing","createStructure","_createStructure","config","isFunction","fromName","name","options","providerId","modelId","parseModel","Target","loadModel","undefined","schema","jsonSchema","toJsonSchema","systemTemplate","PromptTemplate","z","object","string","min","template","messages","SystemMessage","render","JSON","stringify","errorTemplate","errors","expected","received","Retryable","executor","response","responseFormat","type","textResponse","getTextContent","parseBrokenJson","pair","validator","createSchemaValidator","success","context","UserMessage","maxRetries","get","createSnapshot","destroy","_","tools","key","ObjectHashKeyFn","Serializer","serialize","map","msg","toPlain","isNew","task","Task","set","delete","constructor","usage","finishReason","final","forEach","cur","merge","other","customMerge","totalTokens","takeBigger","promptTokens","completionTokens","getToolCalls","filter","r","AssistantMessage","flatMap","Boolean","getTextMessages","text","join","toString","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { customMerge } from \"@/internals/helpers/object.js\";\nimport { takeBigger } from \"@/internals/helpers/number.js\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext, RunContext } from \"@/context.js\";\nimport { INSTRUMENTATION_ENABLED } from \"@/instrumentation/config.js\";\nimport { createTelemetryMiddleware } from \"@/instrumentation/create-telemetry-middleware.js\";\nimport { doNothing, isFunction } from \"remeda\";\nimport { ObjectHashKeyFn } from \"@/cache/decoratorCache.js\";\nimport { Task } from \"promise-based-task\";\nimport { NullCache } from \"@/cache/nullCache.js\";\nimport { BaseCache } from \"@/cache/base.js\";\nimport { FullModelName, loadModel, parseModel } from \"@/backend/utils.js\";\nimport { ProviderName } from \"@/backend/constants.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { AssistantMessage, Message, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport {\n JSONSchema7,\n LanguageModelV1FunctionTool,\n LanguageModelV1ProviderDefinedTool,\n LanguageModelV1ToolChoice,\n} from \"@ai-sdk/provider\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z } from \"zod\";\nimport {\n createSchemaValidator,\n parseBrokenJson,\n toJsonSchema,\n} from \"@/internals/helpers/schema.js\";\nimport { Retryable } from \"@/internals/helpers/retryable.js\";\nimport type { ValidateFunction } from \"ajv\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { toAsyncGenerator } from \"@/internals/helpers/promise.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\n\nexport interface ChatModelParameters {\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n temperature?: number;\n topK?: number;\n n?: number;\n presencePenalty?: number;\n seed?: number;\n stopSequences?: string[];\n}\n\nexport interface ChatModelObjectInput<T> extends ChatModelParameters {\n schema: z.ZodSchema<T>;\n messages: Message[];\n abortSignal?: AbortSignal;\n maxRetries?: number;\n}\n\nexport interface ChatModelObjectOutput<T> {\n object: T;\n}\n\nexport interface ChatModelInput extends ChatModelParameters {\n tools?: AnyTool[];\n abortSignal?: AbortSignal;\n stopSequences?: string[];\n responseFormat?:\n | {\n type: \"regular\";\n tools?: (LanguageModelV1FunctionTool | LanguageModelV1ProviderDefinedTool)[];\n toolChoice?: LanguageModelV1ToolChoice;\n }\n | {\n type: \"object-json\";\n schema?: JSONSchema7;\n name?: string;\n description?: string;\n }\n | {\n type: \"object-tool\";\n tool: LanguageModelV1FunctionTool;\n };\n toolChoice?: never; // TODO\n messages: Message[];\n}\n\nexport type ChatModelFinishReason =\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n\nexport interface ChatModelUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\nexport interface ChatModelEvents {\n newToken?: Callback<{ value: ChatModelOutput; callbacks: { abort: () => void } }>;\n success?: Callback<{ value: ChatModelOutput }>;\n start?: Callback<{ input: ChatModelInput }>;\n error?: Callback<{ input: ChatModelInput; error: FrameworkError }>;\n finish?: Callback<null>;\n}\n\nexport type ChatModelEmitter<A = Record<never, never>> = Emitter<\n ChatModelEvents & Omit<A, keyof ChatModelEvents>\n>;\n\nexport type ChatModelCache = BaseCache<Task<ChatModelOutput[]>>;\nexport type ConfigFn<T> = (value: T) => T;\nexport interface ChatConfig {\n cache?: ChatModelCache | ConfigFn<ChatModelCache>;\n parameters?: ChatModelParameters | ConfigFn<ChatModelParameters>;\n}\n\nexport abstract class ChatModel extends Serializable {\n public abstract readonly emitter: Emitter<ChatModelEvents>;\n public cache: ChatModelCache = new NullCache();\n public parameters: ChatModelParameters = {};\n\n abstract get modelId(): string;\n abstract get providerId(): string;\n\n create(input: ChatModelInput & { stream?: boolean }) {\n input = shallowCopy(input);\n\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n const cacheEntry = await this.createCacheAccessor(input);\n\n try {\n await run.emitter.emit(\"start\", { input });\n const chunks: ChatModelOutput[] = [];\n\n const generator =\n cacheEntry.value ??\n (input.stream\n ? this._createStream(input, run)\n : toAsyncGenerator(this._create(input, run)));\n\n const controller = new AbortController();\n for await (const value of generator) {\n chunks.push(value);\n await run.emitter.emit(\"newToken\", {\n value,\n callbacks: { abort: () => controller.abort() },\n });\n if (controller.signal.aborted) {\n break;\n }\n }\n\n cacheEntry.resolve(chunks);\n const result = ChatModelOutput.fromChunks(chunks);\n await run.emitter.emit(\"success\", { value: result });\n return result;\n } catch (error) {\n await run.emitter.emit(\"error\", { input, error });\n await cacheEntry.reject(error);\n if (error instanceof ChatModelError) {\n throw error;\n } else {\n throw new ChatModelError(`The Chat Model has encountered an error.`, [error]);\n }\n } finally {\n await run.emitter.emit(\"finish\", null);\n }\n },\n ).middleware(INSTRUMENTATION_ENABLED ? createTelemetryMiddleware() : doNothing());\n }\n\n createStructure<T>(input: ChatModelObjectInput<T>) {\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n return await this._createStructure<T>(input, run);\n },\n );\n }\n\n config({ cache, parameters }: ChatConfig): void {\n if (cache) {\n this.cache = isFunction(cache) ? cache(this.cache) : cache;\n }\n if (parameters) {\n this.parameters = isFunction(parameters) ? parameters(this.parameters) : parameters;\n }\n }\n\n static async fromName(name: FullModelName | ProviderName, options?: ChatModelParameters) {\n const { providerId, modelId } = parseModel(name);\n const Target = await loadModel<ChatModel>(providerId, \"chat\");\n return new Target(modelId || undefined, options);\n }\n\n protected abstract _create(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelOutput>;\n protected abstract _createStream(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): AsyncGenerator<ChatModelOutput, void>;\n\n protected async _createStructure<T>(\n input: ChatModelObjectInput<T>,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const { schema, ...options } = input;\n const jsonSchema = toJsonSchema(schema);\n\n const systemTemplate = new PromptTemplate({\n schema: z.object({\n schema: z.string().min(1),\n }),\n template: `You are a helpful assistant that generates only valid JSON adhering to the following JSON Schema.\n\n\\`\\`\\`\n{{schema}}\n\\`\\`\\`\n\nIMPORTANT: You MUST answer with a JSON object that matches the JSON schema above.`,\n });\n\n const messages: Message[] = [\n new SystemMessage(systemTemplate.render({ schema: JSON.stringify(jsonSchema, null, 2) })),\n ...input.messages,\n ];\n\n const errorTemplate = new PromptTemplate({\n schema: z.object({\n errors: z.string(),\n expected: z.string(),\n received: z.string(),\n }),\n template: `Generated object does not match the expected JSON schema!\n\nValidation Errors: {{errors}}`,\n });\n\n return new Retryable<ChatModelObjectOutput<T>>({\n executor: async () => {\n const response = await this._create(\n {\n ...options,\n messages,\n responseFormat: { type: \"object-json\" },\n },\n run,\n );\n\n const textResponse = response.getTextContent();\n const object: T = parseBrokenJson(textResponse, { pair: [\"{\", \"}\"] });\n const validator = createSchemaValidator(schema) as ValidateFunction<T>;\n\n const success = validator(object);\n if (!success) {\n const context = {\n expected: JSON.stringify(jsonSchema),\n received: textResponse,\n errors: JSON.stringify(validator.errors ?? []),\n };\n\n messages.push(new UserMessage(errorTemplate.render(context)));\n throw new ChatModelError(`LLM did not produce a valid output.`, [], {\n context,\n });\n }\n\n return { object };\n },\n config: {\n signal: run.signal,\n maxRetries: input?.maxRetries || 1,\n },\n }).get();\n }\n\n createSnapshot() {\n return { cache: this.cache, emitter: this.emitter, parameters: shallowCopy(this.parameters) };\n }\n\n destroy() {\n this.emitter.destroy();\n }\n\n protected async createCacheAccessor({\n abortSignal: _,\n messages,\n tools = [],\n ...input\n }: ChatModelInput) {\n const key = ObjectHashKeyFn({\n ...input,\n messages: await Serializer.serialize(messages.map((msg) => msg.toPlain())),\n tools: await Serializer.serialize(tools),\n });\n const value = await this.cache.get(key);\n const isNew = value === undefined;\n\n let task: Task<ChatModelOutput[]> | null = null;\n if (isNew) {\n task = new Task();\n await this.cache.set(key, task);\n }\n\n return {\n key,\n value,\n resolve: <T2 extends ChatModelOutput>(value: T2[]) => {\n task?.resolve?.(value);\n },\n reject: async (error: Error) => {\n task?.reject?.(error);\n if (isNew) {\n await this.cache.delete(key);\n }\n },\n };\n }\n}\n\nexport class ChatModelOutput extends Serializable {\n constructor(\n public readonly messages: Message[],\n public usage?: ChatModelUsage,\n public finishReason?: ChatModelFinishReason,\n ) {\n super();\n }\n\n static fromChunks(chunks: ChatModelOutput[]) {\n const final = new ChatModelOutput([]);\n chunks.forEach((cur) => final.merge(cur));\n return final;\n }\n\n merge(other: ChatModelOutput) {\n this.messages.push(...other.messages);\n this.finishReason = other.finishReason;\n if (this.usage && other.usage) {\n this.usage = customMerge([this.usage, other.usage], {\n totalTokens: takeBigger,\n promptTokens: takeBigger,\n completionTokens: takeBigger,\n });\n } else if (other.usage) {\n this.usage = shallowCopy(other.usage);\n }\n }\n\n getToolCalls() {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.getToolCalls())\n .filter(Boolean);\n }\n\n getTextMessages(): AssistantMessage[] {\n return this.messages.filter((r) => r instanceof AssistantMessage).filter((r) => r.text);\n }\n\n getTextContent(): string {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.text)\n .filter(Boolean)\n .join(\"\");\n }\n\n toString() {\n return this.getTextContent();\n }\n\n createSnapshot() {\n return {\n messages: shallowCopy(this.messages),\n usage: shallowCopy(this.usage),\n finishReason: this.finishReason,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
package/dist/backend/message.cjs
CHANGED
|
@@ -83,6 +83,15 @@ class Message extends serializable_cjs.Serializable {
|
|
|
83
83
|
content: utils_cjs.shallowCopy(this.content)
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
|
+
merge(other) {
|
|
87
|
+
Object.assign(this, other.meta);
|
|
88
|
+
this.content.push(...other.content);
|
|
89
|
+
}
|
|
90
|
+
static fromChunks(chunks) {
|
|
91
|
+
const instance = new this([]);
|
|
92
|
+
chunks.forEach((chunk) => instance.merge(chunk));
|
|
93
|
+
return instance;
|
|
94
|
+
}
|
|
86
95
|
[Symbol.iterator]() {
|
|
87
96
|
return this.content[Symbol.iterator]();
|
|
88
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","constructor","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","constructor","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","merge","other","push","fromChunks","chunks","instance","forEach","chunk","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":";;;;;;;;;AAoCA,SAASA,OAAOC,OAA2B,EAAA;AACzC,EAAA,OAAOA,QAAQC,IAAS,KAAA,MAAA;AAC1B;AAFSF,MAAAA,CAAAA,MAAAA,EAAAA,QAAAA,CAAAA;AAGT,SAASG,QAAQF,OAA2B,EAAA;AAC1C,EAAA,OAAOA,QAAQC,IAAS,KAAA,OAAA;AAC1B;AAFSC,MAAAA,CAAAA,OAAAA,EAAAA,SAAAA,CAAAA;AAGT,SAASC,OAAOH,OAA2B,EAAA;AACzC,EAAA,OAAOA,QAAQC,IAAS,KAAA,MAAA;AAC1B;AAFSE,MAAAA,CAAAA,MAAAA,EAAAA,QAAAA,CAAAA;AAGT,SAASC,WAAWJ,OAA2B,EAAA;AAC7C,EAAA,OAAOA,QAAQC,IAAS,KAAA,WAAA;AAC1B;AAFSG,MAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;AAGT,SAASC,aAAaL,OAA2B,EAAA;AAC/C,EAAA,OAAOA,QAAQC,IAAS,KAAA,aAAA;AAC1B;AAFSI,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;AAIF,MAAeC,gBAGZC,6BAAAA,CAAAA;EAvDV;;;;AAyDkBP,EAAAA,OAAAA;EAEhBQ,WACER,CAAAA,OAAAA,EACgBS,IAAoB,GAAA,EACpC,EAAA;AACA,IAAK,KAAA,EAAA,EAAA,KAFWA,IAAAA,GAAAA,IAAAA;AAGhB,IAAI,IAAA,CAACA,MAAMC,SAAW,EAAA;AACpBD,MAAKC,IAAAA,CAAAA,SAAAA,uBAAgBC,IAAAA,EAAAA;AACvB;AACA,IAAI,IAAA,OAAOX,YAAY,QAAU,EAAA;AAC/B,MAAA,IAAA,CAAKA,OAAU,GAAA;AAAC,QAAA,IAAA,CAAKY,WAAWZ,OAAAA;;KAC3B,MAAA;AACL,MAAA,IAAA,CAAKA,OAAUa,GAAAA,KAAAA,CAAMC,OAAQd,CAAAA,OAAAA,IAAWA,OAAU,GAAA;AAACA,QAAAA;;AACrD;AACF;AAIA,EAAA,OAAOe,EAAG,CAAA,EAAEC,IAAMC,EAAAA,IAAAA,EAAMR,MAA+B,EAAA;AACrD,IAAA,IAAIO,SAAS,MAAQ,EAAA;AACnB,MAAO,OAAA,IAAIE,WAAYD,CAAAA,IAAAA,EAAMR,IAAAA,CAAAA;AAC/B,KAAA,MAAA,IAAWO,SAAS,WAAa,EAAA;AAC/B,MAAO,OAAA,IAAIG,gBAAiBF,CAAAA,IAAAA,EAAMR,IAAAA,CAAAA;AACpC,KAAA,MAAA,IAAWO,SAAS,QAAU,EAAA;AAC5B,MAAO,OAAA,IAAII,aAAcH,CAAAA,IAAAA,EAAMR,IAAAA,CAAAA;AACjC,KAAA,MAAA,IAAWO,SAAS,MAAQ,EAAA;AAC1B,MAAO,OAAA,IAAIK,WAAYJ,CAAAA,IAAAA,EAAMR,IAAAA,CAAAA;KACxB,MAAA;AACL,MAAA,OAAO,IAAIa,aAAAA,CAAcN,IAAMC,EAAAA,IAAAA,EAAMR,IAAAA,CAAAA;AACvC;AACF;AAEA,EAAA,IAAIQ,IAAO,GAAA;AACT,IAAO,OAAA,IAAA,CAAKM,QAAQ,EAAA,CACjBC,GAAI,CAAA,CAACC,MAAMA,CAAER,CAAAA,IAAI,CACjBS,CAAAA,IAAAA,CAAK,EAAA,CAAA;AACV;EAEAH,QAAW,GAAA;AACT,IAAO,OAAA,IAAA,CAAKvB,OAAQ2B,CAAAA,MAAAA,CAAO5B,MAAAA,CAAAA;AAC7B;EAEA6B,cAAiB,GAAA;AACf,IAAO,OAAA;MAAE5B,OAAS6B,EAAAA,qBAAAA,CAAY,KAAK7B,OAAO,CAAA;MAAGS,IAAMoB,EAAAA,qBAAAA,CAAY,KAAKpB,IAAI,CAAA;AAAGO,MAAAA,IAAAA,EAAM,IAAKA,CAAAA;AAAK,KAAA;AAC7F;AAEAc,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;EAEAG,OAAU,GAAA;AACR,IAAO,OAAA;AAAElB,MAAAA,IAAAA,EAAM,IAAKA,CAAAA,IAAAA;MAAMhB,OAAS6B,EAAAA,qBAAAA,CAAY,KAAK7B,OAAO;AAAE,KAAA;AAC/D;AAEAmC,EAAAA,KAAAA,CAAMC,KAAsB,EAAA;AAC1BJ,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,IAAMG,EAAAA,KAAAA,CAAM3B,IAAI,CAAA;AAC9B,IAAA,IAAA,CAAKT,OAAQqC,CAAAA,IAAAA,CAAI,GAAID,KAAAA,CAAMpC,OAAO,CAAA;AACpC;AAEA,EAAA,OAAOsC,WAAiEC,MAAkB,EAAA;AACxF,IAAA,MAAMC,QAAW,GAAA,IAAI,IAAK,CAAA,EAAE,CAAA;AAC5BD,IAAAA,MAAAA,CAAOE,QAAQ,CAACC,KAAAA,KAAUF,QAASL,CAAAA,KAAAA,CAAMO,KAAAA,CAAAA,CAAAA;AACzC,IAAOF,OAAAA,QAAAA;AACT;EAEA,CAACG,MAAAA,CAAOC,QAAQ,CAAiB,GAAA;AAC/B,IAAA,OAAO,IAAK5C,CAAAA,OAAAA,CAAQ2C,MAAOC,CAAAA,QAAQ,CAAC,EAAA;AACtC;AACF;AAEO,MAAMzB,yBAAyBb,OAAAA,CAAAA;EAhItC;;;EAiIkBU,IAAO,GAAA,WAAA;EAEvB;AACE,IAAA,IAAA,CAAK6B,QAAQ,EAAA;AACf;EAEAC,YAAe,GAAA;AACb,IAAO,OAAA,IAAA,CAAK9C,OAAQ2B,CAAAA,MAAAA,CAAOvB,UAAAA,CAAAA;AAC7B;AAEUQ,EAAAA,UAAAA,CAAWK,IAAwB,EAAA;AAC3C,IAAO,OAAA;MAAEhB,IAAM,EAAA,MAAA;AAAQgB,MAAAA;AAAK,KAAA;AAC9B;AACF;AAEO,MAAMI,oBAAoBf,OAAAA,CAAAA;EAhJjC;;;EAiJkBU,IAAO,GAAA,MAAA;EAEvB;AACE,IAAA,IAAA,CAAK6B,QAAQ,EAAA;AACf;EAEAE,cAAiB,GAAA;AACf,IAAO,OAAA,IAAA,CAAK/C,OAAQ2B,CAAAA,MAAAA,CAAOtB,YAAAA,CAAAA;AAC7B;AAEUO,EAAAA,UAAAA,CAAWK,IAA8B,EAAA;AACjD,IAAA,MAAM,EAAE+B,OAAAA,EAASC,IAAI,EAAA,GAAKC,MACvBC,MAAO,CAAA;MACNlD,IAAMiD,EAAAA,KAAAA,CAAEE,QAAQ,aAAA,CAAA;AAChBC,MAAAA,MAAAA,EAAQH,MAAEI,GAAG,EAAA;AACbC,MAAAA,QAAAA,EAAUL,MAAEM,MAAM,EAAA;AAClBC,MAAAA,UAAAA,EAAYP,MAAEM,MAAM;KACtB,CAAA,CACCE,UAAUzC,IAAAA,CAAAA;AAEb,IAAA,IAAI,CAAC+B,OAAS,EAAA;AACZ,MAAA,MAAM,IAAIW,qBAAAA,CAAW,CAAuC1C,oCAAAA,EAAAA,IAAAA,CAAQ,EAAA,CAAA,CAAA;AACtE;AAEA,IAAOgC,OAAAA,IAAAA;AACT;AACF;AAEO,MAAM7B,sBAAsBd,OAAAA,CAAAA;EA7KnC;;;EA8KkBU,IAAoB,GAAA,QAAA;EAEpC;AACE,IAAA,IAAA,CAAK6B,QAAQ,EAAA;AACf;AAEUjC,EAAAA,UAAAA,CAAWK,IAAwB,EAAA;AAC3C,IAAO,OAAA;MAAEhB,IAAM,EAAA,MAAA;AAAQgB,MAAAA;AAAK,KAAA;AAC9B;AACF;AAEO,MAAMC,oBAAoBZ,OAAAA,CAAAA;EAzLjC;;;EA0LkBU,IAAO,GAAA,MAAA;EAEvB;AACE,IAAA,IAAA,CAAK6B,QAAQ,EAAA;AACf;EAEAe,SAAY,GAAA;AACV,IAAO,OAAA,IAAA,CAAK5D,OAAQ2B,CAAAA,MAAAA,CAAOzB,OAAAA,CAAAA;AAC7B;EAEA2D,QAAW,GAAA;AACT,IAAO,OAAA,IAAA,CAAK7D,OAAQ2B,CAAAA,MAAAA,CAAOxB,MAAAA,CAAAA;AAC7B;AAEUS,EAAAA,UAAAA,CAAWK,IAAwB,EAAA;AAC3C,IAAO,OAAA;MAAEhB,IAAM,EAAA,MAAA;AAAQgB,MAAAA;AAAK,KAAA;AAC9B;AACF;AAEO,MAAM6C,IAAO,GAAA;EAClBC,SAAW,EAAA,WAAA;EACXC,MAAQ,EAAA,QAAA;EACRC,IAAM,EAAA;AACR;AAEO,MAAM3C,sBAAsBhB,OAAAA,CAAAA;EAnNnC;;;AAoNSU,EAAAA,IAAAA;AAEPR,EAAAA,WAAAA,CAAYQ,IAAchB,EAAAA,OAAAA,EAAsCS,IAAoB,GAAA,EAAI,EAAA;AACtF,IAAA,KAAA,CAAMT,SAASS,IAAAA,CAAAA;AACf,IAAA,IAAI,CAACO,IAAM,EAAA;AACT,MAAA,MAAM,IAAI2C,qBAAAA,CAAW,CAAS3C,MAAAA,EAAAA,IAAAA,CAA0B,oBAAA,CAAA,CAAA;AAC1D;AACA,IAAA,IAAA,CAAKA,IAAOA,GAAAA,IAAAA;AACd;AAEUJ,EAAAA,UAAAA,CAAWsD,KAAmC,EAAA;AACtD,IAAO,OAAA;MAAEjE,IAAM,EAAA,MAAA;MAAQgB,IAAMiD,EAAAA;AAAM,KAAA;AACrC;AACF","file":"message.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n merge(other: Message<T, R>) {\n Object.assign(this, other.meta);\n this.content.push(...other.content);\n }\n\n static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2 {\n const instance = new this([]);\n chunks.forEach((chunk) => instance.merge(chunk));\n return instance;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
@@ -49,6 +49,8 @@ declare abstract class Message<T extends MessageContentPart = MessageContentPart
|
|
|
49
49
|
readonly role: R;
|
|
50
50
|
readonly content: T[];
|
|
51
51
|
};
|
|
52
|
+
merge(other: Message<T, R>): void;
|
|
53
|
+
static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2;
|
|
52
54
|
[Symbol.iterator](): Iterator<T>;
|
|
53
55
|
}
|
|
54
56
|
declare class AssistantMessage extends Message<TextPart | ToolCallPart> {
|
|
@@ -49,6 +49,8 @@ declare abstract class Message<T extends MessageContentPart = MessageContentPart
|
|
|
49
49
|
readonly role: R;
|
|
50
50
|
readonly content: T[];
|
|
51
51
|
};
|
|
52
|
+
merge(other: Message<T, R>): void;
|
|
53
|
+
static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2;
|
|
52
54
|
[Symbol.iterator](): Iterator<T>;
|
|
53
55
|
}
|
|
54
56
|
declare class AssistantMessage extends Message<TextPart | ToolCallPart> {
|
package/dist/backend/message.js
CHANGED
|
@@ -81,6 +81,15 @@ class Message extends Serializable {
|
|
|
81
81
|
content: shallowCopy(this.content)
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
+
merge(other) {
|
|
85
|
+
Object.assign(this, other.meta);
|
|
86
|
+
this.content.push(...other.content);
|
|
87
|
+
}
|
|
88
|
+
static fromChunks(chunks) {
|
|
89
|
+
const instance = new this([]);
|
|
90
|
+
chunks.forEach((chunk) => instance.merge(chunk));
|
|
91
|
+
return instance;
|
|
92
|
+
}
|
|
84
93
|
[Symbol.iterator]() {
|
|
85
94
|
return this.content[Symbol.iterator]();
|
|
86
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","constructor","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","constructor","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","merge","other","push","fromChunks","chunks","instance","forEach","chunk","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n merge(other: Message<T, R>) {\n Object.assign(this, other.meta);\n this.content.push(...other.content);\n }\n\n static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2 {\n const instance = new this([]);\n chunks.forEach((chunk) => instance.merge(chunk));\n return instance;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|