beeai-framework 0.1.26 → 0.1.27
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/google-vertex/backend/chat.d.cts +1 -1
- package/dist/adapters/google-vertex/backend/chat.d.ts +1 -1
- package/dist/adapters/groq/backend/chat.cjs +44 -1
- package/dist/adapters/groq/backend/chat.cjs.map +1 -1
- package/dist/adapters/groq/backend/chat.d.cts +12 -14
- package/dist/adapters/groq/backend/chat.d.ts +12 -14
- package/dist/adapters/groq/backend/chat.js +44 -1
- package/dist/adapters/groq/backend/chat.js.map +1 -1
- package/dist/adapters/vercel/backend/chat.cjs +57 -18
- package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
- package/dist/adapters/vercel/backend/chat.d.cts +2 -2
- package/dist/adapters/vercel/backend/chat.d.ts +2 -2
- package/dist/adapters/vercel/backend/chat.js +59 -20
- package/dist/adapters/vercel/backend/chat.js.map +1 -1
- package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
- package/dist/adapters/vercel/backend/embedding.d.cts +1 -1
- package/dist/adapters/vercel/backend/embedding.d.ts +1 -1
- package/dist/adapters/vercel/backend/embedding.js.map +1 -1
- package/dist/adapters/watsonx/backend/chat.cjs +3 -4
- package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/chat.js +4 -5
- package/dist/adapters/watsonx/backend/chat.js.map +1 -1
- package/dist/agents/react/prompts.d.cts +1 -1
- package/dist/agents/react/prompts.d.ts +1 -1
- package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
- package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
- package/dist/agents/react/runners/deep-think/runner.d.cts +1 -1
- package/dist/agents/react/runners/deep-think/runner.d.ts +1 -1
- package/dist/agents/react/runners/default/runner.d.cts +1 -1
- package/dist/agents/react/runners/default/runner.d.ts +1 -1
- package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
- package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
- package/dist/agents/react/runners/granite/runner.d.cts +1 -1
- package/dist/agents/react/runners/granite/runner.d.ts +1 -1
- package/dist/agents/requirement/agent.d.cts +1 -1
- package/dist/agents/requirement/agent.d.ts +1 -1
- package/dist/agents/requirement/prompts.d.cts +2 -2
- package/dist/agents/requirement/prompts.d.ts +2 -2
- package/dist/agents/requirement/requirements/conditional.d.cts +1 -1
- package/dist/agents/requirement/requirements/conditional.d.ts +1 -1
- package/dist/agents/requirement/requirements/requirement.d.cts +1 -1
- package/dist/agents/requirement/requirements/requirement.d.ts +1 -1
- package/dist/agents/requirement/runner.d.cts +1 -1
- package/dist/agents/requirement/runner.d.ts +1 -1
- package/dist/agents/requirement/types.d.cts +1 -1
- package/dist/agents/requirement/types.d.ts +1 -1
- package/dist/agents/requirement/utils/llm.d.cts +1 -1
- package/dist/agents/requirement/utils/llm.d.ts +1 -1
- package/dist/agents/requirement/utils/tool.d.cts +1 -1
- package/dist/agents/requirement/utils/tool.d.ts +1 -1
- package/dist/backend/chat.cjs +8 -1
- package/dist/backend/chat.cjs.map +1 -1
- package/dist/backend/chat.js +8 -1
- package/dist/backend/chat.js.map +1 -1
- package/dist/backend/core.d.cts +1 -1
- package/dist/backend/core.d.ts +1 -1
- package/dist/backend/errors.cjs.map +1 -1
- package/dist/backend/errors.d.cts +8 -11
- package/dist/backend/errors.d.ts +8 -11
- package/dist/backend/errors.js.map +1 -1
- package/dist/backend/message.cjs +4 -1
- package/dist/backend/message.cjs.map +1 -1
- package/dist/backend/message.js +4 -1
- package/dist/backend/message.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/workflows/agent.d.cts +37 -37
- package/dist/workflows/agent.d.ts +37 -37
- package/package.json +19 -19
- package/dist/{types-BQ-3LdkE.d.ts → types-C3Fnr6yY.d.ts} +8 -8
- package/dist/{types-CkEtV8R9.d.cts → types-DepshYVR.d.cts} +8 -8
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { ChatModel, ChatModelOutput } from '../../../backend/chat.js';
|
|
2
|
-
import { generateText,
|
|
2
|
+
import { generateText, Output, jsonSchema, streamText } from 'ai';
|
|
3
3
|
import { Emitter } from '../../../emitter/emitter.js';
|
|
4
4
|
import { AssistantMessage, ToolMessage, CustomMessage, UserMessage, SystemMessage } from '../../../backend/message.js';
|
|
5
5
|
import { ValueError } from '../../../errors.js';
|
|
6
6
|
import { toCamelCase, isEmpty, mapToObj } from 'remeda';
|
|
7
7
|
import { ChatModelError } from '../../../backend/errors.js';
|
|
8
|
-
import { ZodSchema,
|
|
8
|
+
import { ZodSchema, ZodArray, ZodEnum } from 'zod';
|
|
9
9
|
import { Tool } from '../../../tools/base.js';
|
|
10
10
|
import { extractTokenUsage, encodeCustomMessage } from './utils.js';
|
|
11
11
|
|
|
12
12
|
var __defProp = Object.defineProperty;
|
|
13
13
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
14
|
+
try {
|
|
15
|
+
globalThis.AI_SDK_LOG_WARNINGS = false;
|
|
16
|
+
} catch {
|
|
17
|
+
}
|
|
14
18
|
class VercelChatModel extends ChatModel {
|
|
15
19
|
static {
|
|
16
20
|
__name(this, "VercelChatModel");
|
|
@@ -48,32 +52,63 @@ class VercelChatModel extends ChatModel {
|
|
|
48
52
|
}, run);
|
|
49
53
|
return output;
|
|
50
54
|
}
|
|
51
|
-
const { finishReason, usage, response: { messages } } = await generateText({
|
|
55
|
+
const { finishReason, usage, response: { messages, id } } = await generateText({
|
|
52
56
|
temperature: 0,
|
|
53
57
|
...await this.transformInput(input),
|
|
54
58
|
abortSignal: run.signal
|
|
55
59
|
});
|
|
56
|
-
return new ChatModelOutput(this.transformMessages(messages), extractTokenUsage(usage), finishReason);
|
|
60
|
+
return new ChatModelOutput(this.transformMessages(messages, id), extractTokenUsage(usage), finishReason);
|
|
57
61
|
}
|
|
58
62
|
async _createStructure({ schema, ...input }, run) {
|
|
59
|
-
const response = await
|
|
63
|
+
const { output, response, finishReason, usage } = await generateText({
|
|
60
64
|
temperature: 0,
|
|
61
65
|
...await this.transformInput(input),
|
|
62
66
|
abortSignal: run.signal,
|
|
63
|
-
|
|
64
|
-
schema
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
output: (() => {
|
|
68
|
+
if (schema instanceof ZodSchema) {
|
|
69
|
+
const [name, description] = [
|
|
70
|
+
"Schema",
|
|
71
|
+
schema.description
|
|
72
|
+
];
|
|
73
|
+
const target = schema._input || schema;
|
|
74
|
+
if (target instanceof ZodArray) {
|
|
75
|
+
return Output.array({
|
|
76
|
+
element: schema,
|
|
77
|
+
name,
|
|
78
|
+
description
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (target instanceof ZodEnum) {
|
|
82
|
+
return Output.choice({
|
|
83
|
+
options: target.options,
|
|
84
|
+
name: "",
|
|
85
|
+
description: schema.description
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return Output.object({
|
|
89
|
+
schema,
|
|
90
|
+
name,
|
|
91
|
+
description
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
if (schema.schema) {
|
|
95
|
+
return Output.object({
|
|
96
|
+
schema: jsonSchema(schema.schema),
|
|
97
|
+
name: schema.name,
|
|
98
|
+
description: schema.description
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return Output.json({
|
|
102
|
+
name: schema.name,
|
|
103
|
+
description: schema.description
|
|
104
|
+
});
|
|
105
|
+
})()
|
|
71
106
|
});
|
|
72
107
|
return {
|
|
73
|
-
object:
|
|
108
|
+
object: output,
|
|
74
109
|
output: new ChatModelOutput([
|
|
75
|
-
new AssistantMessage(JSON.stringify(
|
|
76
|
-
], extractTokenUsage(
|
|
110
|
+
new AssistantMessage(JSON.stringify(output, null, 2), void 0, response.id)
|
|
111
|
+
], extractTokenUsage(usage), finishReason)
|
|
77
112
|
};
|
|
78
113
|
}
|
|
79
114
|
async *_createStream(input, run) {
|
|
@@ -92,6 +127,7 @@ class VercelChatModel extends ChatModel {
|
|
|
92
127
|
return;
|
|
93
128
|
}
|
|
94
129
|
const { fullStream, usage: usagePromise, finishReason: finishReasonPromise, response: responsePromise } = streamText({
|
|
130
|
+
temperature: 0,
|
|
95
131
|
...await this.transformInput(input),
|
|
96
132
|
abortSignal: run.signal
|
|
97
133
|
});
|
|
@@ -179,7 +215,7 @@ class VercelChatModel extends ChatModel {
|
|
|
179
215
|
break;
|
|
180
216
|
}
|
|
181
217
|
}
|
|
182
|
-
if (streamEmpty) {
|
|
218
|
+
if (streamEmpty && !run.signal.aborted) {
|
|
183
219
|
throw new ChatModelError("No chunks have been received!");
|
|
184
220
|
}
|
|
185
221
|
try {
|
|
@@ -263,12 +299,15 @@ class VercelChatModel extends ChatModel {
|
|
|
263
299
|
messages
|
|
264
300
|
};
|
|
265
301
|
}
|
|
266
|
-
transformMessages(messages) {
|
|
302
|
+
transformMessages(messages, id) {
|
|
303
|
+
if (messages.length > 1) {
|
|
304
|
+
id = void 0;
|
|
305
|
+
}
|
|
267
306
|
return messages.flatMap((msg) => {
|
|
268
307
|
if (msg.role === "tool") {
|
|
269
|
-
return new ToolMessage(msg.content, msg.providerOptions);
|
|
308
|
+
return new ToolMessage(msg.content.filter((part) => part.type === "tool-result"), msg.providerOptions, id);
|
|
270
309
|
}
|
|
271
|
-
return new AssistantMessage(msg.content, msg.providerOptions);
|
|
310
|
+
return new AssistantMessage(msg.content, msg.providerOptions, id);
|
|
272
311
|
});
|
|
273
312
|
}
|
|
274
313
|
createSnapshot() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapters/vercel/backend/chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","model","modelId","ValueError","Emitter","root","child","namespace","providerId","creator","provider","split","toCamelCase","_create","input","run","responseFormat","ZodSchema","schema","output","_createStructure","finishReason","usage","response","messages","generateText","temperature","transformInput","abortSignal","signal","ChatModelOutput","transformMessages","extractTokenUsage","generateObject","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","usagePromise","finishReasonPromise","responsePromise","streamText","streamEmpty","streamedToolCalls","Map","event","message","type","text","id","streamPartialToolCalls","chunk","toolName","toolCallId","set","delta","get","existingToolCall","delete","ChatModelError","error","ToolMessage","_","Promise","all","lastChunk","e","aborted","map","tool","inputSchema","getInputJsonSchema","msg","CustomMessage","encodeCustomMessage","role","content","UserMessage","SystemMessage","part","join","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","parameters","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n ModelMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModel as _LanguageModel,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\ntype LanguageModelV2 = Exclude<_LanguageModel, string>;\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n AssistantMessage,\n CustomMessage,\n Message,\n SystemMessage,\n ToolMessage,\n UserMessage,\n} from \"@/backend/message.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { isEmpty, mapToObj, toCamelCase } from \"remeda\";\nimport { FullModelName } from \"@/backend/utils.js\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z, ZodArray, ZodEnum, ZodSchema } from \"zod\";\nimport { Tool } from \"@/tools/base.js\";\nimport { encodeCustomMessage, extractTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV2 = LanguageModelV2,\n> extends ChatModel {\n public readonly emitter: Emitter<ChatModelEvents>;\n public readonly supportsToolStreaming: boolean = true;\n\n constructor(private readonly model: M) {\n super();\n if (!this.modelId) {\n throw new ValueError(\"No modelId has been provided!\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"backend\", this.providerId, \"chat\"],\n creator: this,\n });\n }\n\n get modelId(): string {\n return this.model.modelId;\n }\n\n get providerId(): string {\n const provider = this.model.provider.split(\".\")[0].split(\"-\")[0];\n return toCamelCase(provider);\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n return output;\n }\n\n const {\n finishReason,\n usage,\n response: { messages },\n } = await generateText({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n return new ChatModelOutput(\n this.transformMessages(messages),\n extractTokenUsage(usage),\n finishReason,\n );\n }\n\n protected async _createStructure<T>(\n { schema, ...input }: ChatModelObjectInput<T>,\n run: GetRunContext<this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const response = await generateObject({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n ...(schema instanceof ZodSchema\n ? {\n schema,\n output: ((schema._input || schema) instanceof ZodArray\n ? \"array\"\n : (schema._input || schema) instanceof ZodEnum\n ? \"enum\"\n : \"object\") as any,\n }\n : {\n schema: schema.schema ? jsonSchema<T>(schema.schema) : z.any(),\n schemaName: schema.name,\n schemaDescription: schema.description,\n }),\n });\n\n return {\n object: response.object as T,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n extractTokenUsage(response.usage),\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n yield output;\n return;\n }\n\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const {\n fullStream,\n usage: usagePromise,\n finishReason: finishReasonPromise,\n response: responsePromise,\n } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let streamEmpty = true;\n const streamedToolCalls = new Map<string, ToolCallPart>();\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n streamEmpty = false;\n message = new AssistantMessage(event.text, {}, event.id);\n yield new ChatModelOutput([message]);\n break;\n case \"text-end\":\n streamEmpty = false;\n break;\n case \"tool-input-start\": {\n if (!input.streamPartialToolCalls) {\n break;\n }\n\n const chunk: ToolCallPart = {\n type: \"tool-call\",\n toolName: event.toolName,\n toolCallId: event.id,\n input: \"\",\n };\n streamedToolCalls.set(event.id, chunk);\n const message = new AssistantMessage(chunk, {}, event.id);\n yield new ChatModelOutput([message]);\n break;\n }\n case \"tool-input-delta\": {\n if (!input.streamPartialToolCalls) {\n break;\n }\n\n if (event.delta) {\n const chunk = streamedToolCalls.get(event.id)!;\n const message = new AssistantMessage({ ...chunk, input: event.delta }, {}, event.id);\n yield new ChatModelOutput([message]);\n }\n break;\n }\n case \"tool-call\": {\n streamEmpty = false;\n const existingToolCall = streamedToolCalls.get(event.toolCallId);\n if (existingToolCall) {\n streamedToolCalls.delete(event.toolCallId);\n break;\n }\n message = new AssistantMessage(\n {\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n input: event.input,\n },\n {},\n event.toolCallId,\n );\n yield new ChatModelOutput([message]);\n break;\n }\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"tool-result\":\n streamEmpty = false;\n message = new ToolMessage(\n {\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n output: event.output as any,\n },\n {},\n `tool_result_${event.toolCallId}`,\n );\n yield new ChatModelOutput([message]);\n break;\n case \"abort\":\n break;\n default:\n break;\n }\n }\n\n if (streamEmpty) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n\n try {\n const [usage, finishReason, _] = await Promise.all([\n usagePromise,\n finishReasonPromise,\n responsePromise,\n ]);\n const lastChunk = new ChatModelOutput([]);\n lastChunk.usage = extractTokenUsage(usage);\n lastChunk.finishReason = finishReason;\n yield lastChunk;\n } catch (e) {\n if (!run.signal.aborted) {\n throw e;\n }\n }\n }\n\n protected async transformInput(\n input: ChatModelInput,\n ): Promise<Parameters<typeof generateText<Record<string, any>>>[0]> {\n const tools = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): ModelMessage => {\n if (msg instanceof CustomMessage) {\n msg = encodeCustomMessage(msg);\n }\n\n if (msg instanceof AssistantMessage) {\n return { role: \"assistant\", content: msg.content };\n } else if (msg instanceof ToolMessage) {\n return { role: \"tool\", content: msg.content };\n } else if (msg instanceof UserMessage) {\n return { role: \"user\", content: msg.content };\n } else if (msg instanceof SystemMessage) {\n return { role: \"system\", content: msg.content.map((part) => part.text).join(\"\\n\") };\n }\n return { role: msg.role, content: msg.content } as ModelMessage;\n });\n\n let toolChoice: ToolChoice<Record<string, any>> | undefined;\n if (input.toolChoice && input.toolChoice instanceof Tool) {\n if (this.toolChoiceSupport.includes(\"single\")) {\n toolChoice = {\n type: \"tool\",\n toolName: input.toolChoice.name,\n };\n } else {\n this.logger.warn(`The single tool choice is not supported.`);\n }\n } else if (input.toolChoice) {\n if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolChoice = input.toolChoice;\n } else {\n this.logger.warn(`The following tool choice value '${input.toolChoice}' is not supported.`);\n }\n }\n\n return {\n ...this.parameters,\n ...input,\n toolChoice,\n model: this.model,\n tools: mapToObj(tools, ({ name, ...tool }) => [name, tool]),\n messages,\n };\n }\n\n protected transformMessages(messages: (CoreAssistantMessage | CoreToolMessage)[]): Message[] {\n return messages.flatMap((msg) => {\n if (msg.role === \"tool\") {\n return new ToolMessage(msg.content, msg.providerOptions);\n }\n return new AssistantMessage(\n msg.content as TextPart | ToolCallPart | string,\n msg.providerOptions,\n );\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n providerId: this.providerId,\n modelId: this.modelId,\n supportsToolStreaming: this.supportsToolStreaming,\n };\n }\n\n async loadSnapshot({ providerId, modelId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n const instance = await ChatModel.fromName(`${providerId}:${modelId}` as FullModelName);\n if (!(instance instanceof VercelChatModel)) {\n throw new Error(\"Incorrect deserialization!\");\n }\n instance.destroy();\n Object.assign(this, {\n ...snapshot,\n model: instance.model,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapters/vercel/backend/chat.ts"],"names":["globalThis","AI_SDK_LOG_WARNINGS","VercelChatModel","ChatModel","emitter","supportsToolStreaming","model","modelId","ValueError","Emitter","root","child","namespace","providerId","creator","provider","split","toCamelCase","_create","input","run","responseFormat","ZodSchema","schema","output","_createStructure","finishReason","usage","response","messages","id","generateText","temperature","transformInput","abortSignal","signal","ChatModelOutput","transformMessages","extractTokenUsage","name","description","target","_input","ZodArray","Output","array","element","ZodEnum","choice","options","object","jsonSchema","json","AssistantMessage","JSON","stringify","undefined","_createStream","isEmpty","tools","fullStream","usagePromise","finishReasonPromise","responsePromise","streamText","streamEmpty","streamedToolCalls","Map","event","message","type","text","streamPartialToolCalls","chunk","toolName","toolCallId","set","delta","get","existingToolCall","delete","ChatModelError","error","ToolMessage","aborted","_","Promise","all","lastChunk","e","map","tool","inputSchema","getInputJsonSchema","msg","CustomMessage","encodeCustomMessage","role","content","UserMessage","SystemMessage","part","join","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","parameters","mapToObj","length","flatMap","filter","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n AssistantModelMessage,\n ModelMessage,\n ToolModelMessage,\n generateText,\n jsonSchema,\n LanguageModel as _LanguageModel,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n Output,\n} from \"ai\";\ntype LanguageModelV2 = Exclude<_LanguageModel, string>;\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n AssistantMessage,\n CustomMessage,\n Message,\n SystemMessage,\n ToolMessage,\n UserMessage,\n} from \"@/backend/message.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { isEmpty, mapToObj, toCamelCase } from \"remeda\";\nimport { FullModelName } from \"@/backend/utils.js\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { ZodArray, ZodEnum, ZodSchema } from \"zod\";\nimport { Tool } from \"@/tools/base.js\";\nimport { encodeCustomMessage, extractTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\n\ntry {\n globalThis.AI_SDK_LOG_WARNINGS = false;\n} catch {\n /* empty */\n}\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV2 = LanguageModelV2,\n> extends ChatModel {\n public readonly emitter: Emitter<ChatModelEvents>;\n public readonly supportsToolStreaming: boolean = true;\n\n constructor(private readonly model: M) {\n super();\n if (!this.modelId) {\n throw new ValueError(\"No modelId has been provided!\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"backend\", this.providerId, \"chat\"],\n creator: this,\n });\n }\n\n get modelId(): string {\n return this.model.modelId;\n }\n\n get providerId(): string {\n const provider = this.model.provider.split(\".\")[0].split(\"-\")[0];\n return toCamelCase(provider);\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n return output;\n }\n\n const {\n finishReason,\n usage,\n response: { messages, id },\n } = await generateText({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n return new ChatModelOutput(\n this.transformMessages(messages, id),\n extractTokenUsage(usage),\n finishReason,\n );\n }\n\n protected async _createStructure<T>(\n { schema, ...input }: ChatModelObjectInput<T>,\n run: GetRunContext<this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const { output, response, finishReason, usage } = await generateText({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n output: ((): Output.Output => {\n if (schema instanceof ZodSchema) {\n const [name, description] = [\"Schema\", schema.description];\n const target = schema._input || schema;\n if (target instanceof ZodArray) {\n return Output.array({ element: schema, name, description });\n }\n if (target instanceof ZodEnum) {\n return Output.choice({\n options: target.options,\n name: \"\",\n description: schema.description,\n });\n }\n return Output.object({ schema, name, description });\n }\n if (schema.schema) {\n return Output.object({\n schema: jsonSchema<T>(schema.schema),\n name: schema.name,\n description: schema.description,\n });\n }\n return Output.json({ name: schema.name, description: schema.description });\n })(),\n });\n\n return {\n object: output as T,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(output, null, 2), undefined, response.id)],\n extractTokenUsage(usage),\n finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n yield output;\n return;\n }\n\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const {\n fullStream,\n usage: usagePromise,\n finishReason: finishReasonPromise,\n response: responsePromise,\n } = streamText({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let streamEmpty = true;\n const streamedToolCalls = new Map<string, ToolCallPart>();\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n streamEmpty = false;\n message = new AssistantMessage(event.text, {}, event.id);\n yield new ChatModelOutput([message]);\n break;\n case \"text-end\":\n streamEmpty = false;\n break;\n case \"tool-input-start\": {\n if (!input.streamPartialToolCalls) {\n break;\n }\n\n const chunk: ToolCallPart = {\n type: \"tool-call\",\n toolName: event.toolName,\n toolCallId: event.id,\n input: \"\",\n };\n streamedToolCalls.set(event.id, chunk);\n const message = new AssistantMessage(chunk, {}, event.id);\n yield new ChatModelOutput([message]);\n break;\n }\n case \"tool-input-delta\": {\n if (!input.streamPartialToolCalls) {\n break;\n }\n\n if (event.delta) {\n const chunk = streamedToolCalls.get(event.id)!;\n const message = new AssistantMessage({ ...chunk, input: event.delta }, {}, event.id);\n yield new ChatModelOutput([message]);\n }\n break;\n }\n case \"tool-call\": {\n streamEmpty = false;\n const existingToolCall = streamedToolCalls.get(event.toolCallId);\n if (existingToolCall) {\n streamedToolCalls.delete(event.toolCallId);\n break;\n }\n message = new AssistantMessage(\n {\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n input: event.input,\n },\n {},\n event.toolCallId,\n );\n yield new ChatModelOutput([message]);\n break;\n }\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"tool-result\":\n streamEmpty = false;\n message = new ToolMessage(\n {\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n output: event.output as any,\n },\n {},\n `tool_result_${event.toolCallId}`,\n );\n yield new ChatModelOutput([message]);\n break;\n case \"abort\":\n break;\n default:\n break;\n }\n }\n\n if (streamEmpty && !run.signal.aborted) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n\n try {\n const [usage, finishReason, _] = await Promise.all([\n usagePromise,\n finishReasonPromise,\n responsePromise,\n ]);\n const lastChunk = new ChatModelOutput([]);\n lastChunk.usage = extractTokenUsage(usage);\n lastChunk.finishReason = finishReason;\n yield lastChunk;\n } catch (e) {\n if (!run.signal.aborted) {\n throw e;\n }\n }\n }\n\n protected async transformInput(\n input: ChatModelInput,\n ): Promise<Parameters<typeof generateText<Record<string, any>>>[0]> {\n const tools = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): ModelMessage => {\n if (msg instanceof CustomMessage) {\n msg = encodeCustomMessage(msg);\n }\n\n if (msg instanceof AssistantMessage) {\n return { role: \"assistant\", content: msg.content };\n } else if (msg instanceof ToolMessage) {\n return { role: \"tool\", content: msg.content };\n } else if (msg instanceof UserMessage) {\n return { role: \"user\", content: msg.content };\n } else if (msg instanceof SystemMessage) {\n return { role: \"system\", content: msg.content.map((part) => part.text).join(\"\\n\") };\n }\n return { role: msg.role, content: msg.content } as ModelMessage;\n });\n\n let toolChoice: ToolChoice<Record<string, any>> | undefined;\n if (input.toolChoice && input.toolChoice instanceof Tool) {\n if (this.toolChoiceSupport.includes(\"single\")) {\n toolChoice = {\n type: \"tool\",\n toolName: input.toolChoice.name,\n };\n } else {\n this.logger.warn(`The single tool choice is not supported.`);\n }\n } else if (input.toolChoice) {\n if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolChoice = input.toolChoice;\n } else {\n this.logger.warn(`The following tool choice value '${input.toolChoice}' is not supported.`);\n }\n }\n\n return {\n ...this.parameters,\n ...input,\n toolChoice,\n model: this.model,\n tools: mapToObj(tools, ({ name, ...tool }) => [name, tool]),\n messages,\n };\n }\n\n protected transformMessages(\n messages: (AssistantModelMessage | ToolModelMessage)[],\n id: string | undefined,\n ): Message[] {\n if (messages.length > 1) {\n id = undefined;\n }\n return messages.flatMap((msg) => {\n if (msg.role === \"tool\") {\n return new ToolMessage(\n msg.content.filter((part) => part.type === \"tool-result\"),\n msg.providerOptions,\n id,\n );\n }\n return new AssistantMessage(\n msg.content as TextPart | ToolCallPart | string,\n msg.providerOptions,\n id,\n );\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n providerId: this.providerId,\n modelId: this.modelId,\n supportsToolStreaming: this.supportsToolStreaming,\n };\n }\n\n async loadSnapshot({ providerId, modelId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n const instance = await ChatModel.fromName(`${providerId}:${modelId}` as FullModelName);\n if (!(instance instanceof VercelChatModel)) {\n throw new Error(\"Incorrect deserialization!\");\n }\n instance.destroy();\n Object.assign(this, {\n ...snapshot,\n model: instance.model,\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapters/vercel/backend/embedding.ts"],"names":["VercelEmbeddingModel","EmbeddingModel","emitter","model","Emitter","root","child","namespace","providerId","creator","modelId","provider","split","toCamelCase","_create","input","run","embedMany","values","abortSignal","signal","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":";;;;;;;;;AAmBO,MAAMA,6BAEHC,4BAAAA,CAAAA;EArBV;;;;AAsBkBC,EAAAA,OAAAA;AAEhB,EAAA,WAAA,CAA4BC,KAAAA,EAAU;AACpC,IAAA,KAAA,EAAK,EAAA,KADqBA,KAAAA,GAAAA,KAAAA;AAE1B,IAAA,IAAA,CAAKD,OAAAA,GAAUE,mBAAAA,CAAQC,IAAAA,CAAKC,KAAAA,CAAM;MAChCC,SAAAA,EAAW;AAAC,QAAA,SAAA;QAAW,IAAA,CAAKC,UAAAA;AAAY,QAAA;;MACxCC,OAAAA,EAAS;KACX,CAAA;AACF;AAEA,EAAA,IAAIC,OAAAA,GAAkB;AACpB,IAAA,OAAO,KAAKP,KAAAA,CAAMO,OAAAA;AACpB;AAEA,EAAA,IAAIF,UAAAA,GAAqB;AACvB,IAAA,MAAMG,QAAAA,GAAW,IAAA,CAAKR,KAAAA,CAAMQ,QAAAA,CAASC,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA,CAAGA,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA;AAC9D,IAAA,OAAOC,mBAAYF,QAAAA,CAAAA;AACrB;EAEA,MAAgBG,OAAAA,CACdC,OACAC,GAAAA,EAC+B;AAC/B,IAAA,OAAOC,YAAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapters/vercel/backend/embedding.ts"],"names":["VercelEmbeddingModel","EmbeddingModel","emitter","model","Emitter","root","child","namespace","providerId","creator","modelId","provider","split","toCamelCase","_create","input","run","embedMany","values","abortSignal","signal","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":";;;;;;;;;AAmBO,MAAMA,6BAEHC,4BAAAA,CAAAA;EArBV;;;;AAsBkBC,EAAAA,OAAAA;AAEhB,EAAA,WAAA,CAA4BC,KAAAA,EAAU;AACpC,IAAA,KAAA,EAAK,EAAA,KADqBA,KAAAA,GAAAA,KAAAA;AAE1B,IAAA,IAAA,CAAKD,OAAAA,GAAUE,mBAAAA,CAAQC,IAAAA,CAAKC,KAAAA,CAAM;MAChCC,SAAAA,EAAW;AAAC,QAAA,SAAA;QAAW,IAAA,CAAKC,UAAAA;AAAY,QAAA;;MACxCC,OAAAA,EAAS;KACX,CAAA;AACF;AAEA,EAAA,IAAIC,OAAAA,GAAkB;AACpB,IAAA,OAAO,KAAKP,KAAAA,CAAMO,OAAAA;AACpB;AAEA,EAAA,IAAIF,UAAAA,GAAqB;AACvB,IAAA,MAAMG,QAAAA,GAAW,IAAA,CAAKR,KAAAA,CAAMQ,QAAAA,CAASC,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA,CAAGA,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA;AAC9D,IAAA,OAAOC,mBAAYF,QAAAA,CAAAA;AACrB;EAEA,MAAgBG,OAAAA,CACdC,OACAC,GAAAA,EAC+B;AAC/B,IAAA,OAAOC,YAAAA,CAAU;AACfd,MAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AACZe,MAAAA,MAAAA,EAAQH,KAAAA,CAAMG,MAAAA;AACdC,MAAAA,WAAAA,EAAaH,GAAAA,CAAII;KACnB,CAAA;AACF;EAEAC,cAAAA,GAAiB;AACf,IAAA,OAAO;AACL,MAAA,GAAG,MAAMA,cAAAA,EAAAA;AACTb,MAAAA,UAAAA,EAAY,IAAA,CAAKA,UAAAA;AACjBE,MAAAA,OAAAA,EAAS,IAAA,CAAKP;AAChB,KAAA;AACF;AAEA,EAAA,MAAMmB,aAAa,EAAEd,UAAAA,EAAYE,OAAAA,EAAS,GAAGa,UAAAA,EAAoD;AAC/F,IAAA,MAAMC,QAAAA,GAAW,MAAMxB,oBAAAA,CAAqByB,QAAAA,CAC1C,GAAGjB,UAAAA,CAAAA,CAAAA,EAAcE,OAAAA,CAAAA,CAAS,CAAA;AAE5B,IAAA,IAAI,EAAEc,oBAAoBxB,oBAAAA,CAAAA,EAAuB;AAC/C,MAAA,MAAM,IAAI0B,MAAM,4BAAA,CAAA;AAClB;AACAF,IAAAA,QAAAA,CAASG,OAAAA,EAAO;AAChBC,IAAAA,MAAAA,CAAOC,OAAO,IAAA,EAAM;MAClB,GAAGN,QAAAA;AACHpB,MAAAA,KAAAA,EAAOqB,QAAAA,CAASrB;KAClB,CAAA;AACF;AACF","file":"embedding.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n EmbeddingModel,\n EmbeddingModelInput,\n EmbeddingModelOutput,\n EmbeddingModelEvents,\n} from \"@/backend/embedding.js\";\nimport { embedMany, EmbeddingModel as Model } from \"ai\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { toCamelCase } from \"remeda\";\nimport { FullModelName } from \"@/backend/utils.js\";\n\ntype InternalEmbeddingModel = Exclude<Model, string>;\n\nexport class VercelEmbeddingModel<\n R extends InternalEmbeddingModel = InternalEmbeddingModel,\n> extends EmbeddingModel {\n public readonly emitter: Emitter<EmbeddingModelEvents>;\n\n constructor(public readonly model: R) {\n super();\n this.emitter = Emitter.root.child({\n namespace: [\"backend\", this.providerId, \"embedding\"],\n creator: this,\n });\n }\n\n get modelId(): string {\n return this.model.modelId;\n }\n\n get providerId(): string {\n const provider = this.model.provider.split(\".\")[0].split(\"-\")[0];\n return toCamelCase(provider);\n }\n\n protected async _create(\n input: EmbeddingModelInput,\n run: GetRunContext<this>,\n ): Promise<EmbeddingModelOutput> {\n return embedMany({\n model: this.model,\n values: input.values,\n abortSignal: run.signal,\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n providerId: this.providerId,\n modelId: this.model,\n };\n }\n\n async loadSnapshot({ providerId, modelId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n const instance = await VercelEmbeddingModel.fromName(\n `${providerId}:${modelId}` as FullModelName,\n );\n if (!(instance instanceof VercelEmbeddingModel)) {\n throw new Error(\"Incorrect deserialization!\");\n }\n instance.destroy();\n Object.assign(this, {\n ...snapshot,\n model: instance.model,\n });\n }\n}\n"]}
|
|
@@ -26,7 +26,7 @@ import 'pino';
|
|
|
26
26
|
* SPDX-License-Identifier: Apache-2.0
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
-
type InternalEmbeddingModel = Exclude<EmbeddingModel
|
|
29
|
+
type InternalEmbeddingModel = Exclude<EmbeddingModel, string>;
|
|
30
30
|
declare class VercelEmbeddingModel<R extends InternalEmbeddingModel = InternalEmbeddingModel> extends EmbeddingModel$1 {
|
|
31
31
|
readonly model: R;
|
|
32
32
|
readonly emitter: Emitter<EmbeddingModelEvents>;
|
|
@@ -26,7 +26,7 @@ import 'pino';
|
|
|
26
26
|
* SPDX-License-Identifier: Apache-2.0
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
-
type InternalEmbeddingModel = Exclude<EmbeddingModel
|
|
29
|
+
type InternalEmbeddingModel = Exclude<EmbeddingModel, string>;
|
|
30
30
|
declare class VercelEmbeddingModel<R extends InternalEmbeddingModel = InternalEmbeddingModel> extends EmbeddingModel$1 {
|
|
31
31
|
readonly model: R;
|
|
32
32
|
readonly emitter: Emitter<EmbeddingModelEvents>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapters/vercel/backend/embedding.ts"],"names":["VercelEmbeddingModel","EmbeddingModel","emitter","model","Emitter","root","child","namespace","providerId","creator","modelId","provider","split","toCamelCase","_create","input","run","embedMany","values","abortSignal","signal","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":";;;;;;;AAmBO,MAAMA,6BAEHC,cAAAA,CAAAA;EArBV;;;;AAsBkBC,EAAAA,OAAAA;AAEhB,EAAA,WAAA,CAA4BC,KAAAA,EAAU;AACpC,IAAA,KAAA,EAAK,EAAA,KADqBA,KAAAA,GAAAA,KAAAA;AAE1B,IAAA,IAAA,CAAKD,OAAAA,GAAUE,OAAAA,CAAQC,IAAAA,CAAKC,KAAAA,CAAM;MAChCC,SAAAA,EAAW;AAAC,QAAA,SAAA;QAAW,IAAA,CAAKC,UAAAA;AAAY,QAAA;;MACxCC,OAAAA,EAAS;KACX,CAAA;AACF;AAEA,EAAA,IAAIC,OAAAA,GAAkB;AACpB,IAAA,OAAO,KAAKP,KAAAA,CAAMO,OAAAA;AACpB;AAEA,EAAA,IAAIF,UAAAA,GAAqB;AACvB,IAAA,MAAMG,QAAAA,GAAW,IAAA,CAAKR,KAAAA,CAAMQ,QAAAA,CAASC,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA,CAAGA,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA;AAC9D,IAAA,OAAOC,YAAYF,QAAAA,CAAAA;AACrB;EAEA,MAAgBG,OAAAA,CACdC,OACAC,GAAAA,EAC+B;AAC/B,IAAA,OAAOC,SAAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapters/vercel/backend/embedding.ts"],"names":["VercelEmbeddingModel","EmbeddingModel","emitter","model","Emitter","root","child","namespace","providerId","creator","modelId","provider","split","toCamelCase","_create","input","run","embedMany","values","abortSignal","signal","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":";;;;;;;AAmBO,MAAMA,6BAEHC,cAAAA,CAAAA;EArBV;;;;AAsBkBC,EAAAA,OAAAA;AAEhB,EAAA,WAAA,CAA4BC,KAAAA,EAAU;AACpC,IAAA,KAAA,EAAK,EAAA,KADqBA,KAAAA,GAAAA,KAAAA;AAE1B,IAAA,IAAA,CAAKD,OAAAA,GAAUE,OAAAA,CAAQC,IAAAA,CAAKC,KAAAA,CAAM;MAChCC,SAAAA,EAAW;AAAC,QAAA,SAAA;QAAW,IAAA,CAAKC,UAAAA;AAAY,QAAA;;MACxCC,OAAAA,EAAS;KACX,CAAA;AACF;AAEA,EAAA,IAAIC,OAAAA,GAAkB;AACpB,IAAA,OAAO,KAAKP,KAAAA,CAAMO,OAAAA;AACpB;AAEA,EAAA,IAAIF,UAAAA,GAAqB;AACvB,IAAA,MAAMG,QAAAA,GAAW,IAAA,CAAKR,KAAAA,CAAMQ,QAAAA,CAASC,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA,CAAGA,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA;AAC9D,IAAA,OAAOC,YAAYF,QAAAA,CAAAA;AACrB;EAEA,MAAgBG,OAAAA,CACdC,OACAC,GAAAA,EAC+B;AAC/B,IAAA,OAAOC,SAAAA,CAAU;AACfd,MAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AACZe,MAAAA,MAAAA,EAAQH,KAAAA,CAAMG,MAAAA;AACdC,MAAAA,WAAAA,EAAaH,GAAAA,CAAII;KACnB,CAAA;AACF;EAEAC,cAAAA,GAAiB;AACf,IAAA,OAAO;AACL,MAAA,GAAG,MAAMA,cAAAA,EAAAA;AACTb,MAAAA,UAAAA,EAAY,IAAA,CAAKA,UAAAA;AACjBE,MAAAA,OAAAA,EAAS,IAAA,CAAKP;AAChB,KAAA;AACF;AAEA,EAAA,MAAMmB,aAAa,EAAEd,UAAAA,EAAYE,OAAAA,EAAS,GAAGa,UAAAA,EAAoD;AAC/F,IAAA,MAAMC,QAAAA,GAAW,MAAMxB,oBAAAA,CAAqByB,QAAAA,CAC1C,GAAGjB,UAAAA,CAAAA,CAAAA,EAAcE,OAAAA,CAAAA,CAAS,CAAA;AAE5B,IAAA,IAAI,EAAEc,oBAAoBxB,oBAAAA,CAAAA,EAAuB;AAC/C,MAAA,MAAM,IAAI0B,MAAM,4BAAA,CAAA;AAClB;AACAF,IAAAA,QAAAA,CAASG,OAAAA,EAAO;AAChBC,IAAAA,MAAAA,CAAOC,OAAO,IAAA,EAAM;MAClB,GAAGN,QAAAA;AACHpB,MAAAA,KAAAA,EAAOqB,QAAAA,CAASrB;KAClB,CAAA;AACF;AACF","file":"embedding.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n EmbeddingModel,\n EmbeddingModelInput,\n EmbeddingModelOutput,\n EmbeddingModelEvents,\n} from \"@/backend/embedding.js\";\nimport { embedMany, EmbeddingModel as Model } from \"ai\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { toCamelCase } from \"remeda\";\nimport { FullModelName } from \"@/backend/utils.js\";\n\ntype InternalEmbeddingModel = Exclude<Model, string>;\n\nexport class VercelEmbeddingModel<\n R extends InternalEmbeddingModel = InternalEmbeddingModel,\n> extends EmbeddingModel {\n public readonly emitter: Emitter<EmbeddingModelEvents>;\n\n constructor(public readonly model: R) {\n super();\n this.emitter = Emitter.root.child({\n namespace: [\"backend\", this.providerId, \"embedding\"],\n creator: this,\n });\n }\n\n get modelId(): string {\n return this.model.modelId;\n }\n\n get providerId(): string {\n const provider = this.model.provider.split(\".\")[0].split(\"-\")[0];\n return toCamelCase(provider);\n }\n\n protected async _create(\n input: EmbeddingModelInput,\n run: GetRunContext<this>,\n ): Promise<EmbeddingModelOutput> {\n return embedMany({\n model: this.model,\n values: input.values,\n abortSignal: run.signal,\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n providerId: this.providerId,\n modelId: this.model,\n };\n }\n\n async loadSnapshot({ providerId, modelId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n const instance = await VercelEmbeddingModel.fromName(\n `${providerId}:${modelId}` as FullModelName,\n );\n if (!(instance instanceof VercelEmbeddingModel)) {\n throw new Error(\"Incorrect deserialization!\");\n }\n instance.destroy();\n Object.assign(this, {\n ...snapshot,\n model: instance.model,\n });\n }\n}\n"]}
|
|
@@ -119,11 +119,10 @@ class WatsonxChatModel extends chat_cjs.ChatModel {
|
|
|
119
119
|
} : void 0,
|
|
120
120
|
messages: choices.flatMap(({ message }) => {
|
|
121
121
|
const messages = [];
|
|
122
|
-
|
|
123
|
-
if (reasoning) {
|
|
122
|
+
if (message?.reasoning_content) {
|
|
124
123
|
const msg = new message_cjs.AssistantMessage({
|
|
125
124
|
type: "text",
|
|
126
|
-
text:
|
|
125
|
+
text: message.reasoning_content
|
|
127
126
|
}, {}, id);
|
|
128
127
|
messages.push(msg);
|
|
129
128
|
}
|
|
@@ -192,7 +191,7 @@ class WatsonxChatModel extends chat_cjs.ChatModel {
|
|
|
192
191
|
if (message instanceof message_cjs.ToolMessage) {
|
|
193
192
|
return message.content.map((content) => ({
|
|
194
193
|
role: "tool",
|
|
195
|
-
content:
|
|
194
|
+
content: "value" in content.output && remeda.isString(content.output.value) ? content.output.value : JSON.stringify(content),
|
|
196
195
|
tool_call_id: content.toolCallId
|
|
197
196
|
}));
|
|
198
197
|
} else if (message instanceof message_cjs.SystemMessage) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapters/watsonx/backend/chat.ts"],"names":["Type","WatsonxAiMlVml_v1","WatsonxChatModel","ChatModel","client","emitter","Emitter","root","child","namespace","creator","toolChoiceSupport","providerId","modelId","getEnv","WatsonxClient","ensure","config","name","parameters","undefined","NotImplementedError","_create","input","run","result","instance","textChat","prepareInput","signal","messages","finishReason","usage","extractOutput","choices","id","ChatModelOutput","_createStream","stream","textChatStream","returnObject","toolCallIds","Map","raw","aborted","controller","abort","Array","isArray","data","map","delta","choice","message","toolCallIdsByName","extractToolCall","toolCallId","toolCallName","getLast","get","randomBytes","toString","set","toolName","findLast","Boolean","finish_reason","completionTokens","completion_tokens","promptTokens","prompt_tokens","totalTokens","total_tokens","flatMap","reasoning","reasoning_content","msg","AssistantMessage","type","text","push","content","tool_calls","length","chunks","toolCall","function","arguments","refusal","filter","isTruthy","overrides","tools","Promise","all","tool","description","getInputJsonSchema","toolConfig","toolChoice","toolChoiceOption","Tool","includes","ToolMessage","role","output","value","JSON","stringify","tool_call_id","SystemMessage","Error","toPlain","spaceId","projectId","isEmpty","responseFormat","JSON_OBJECT","topP","frequencyPenalty","temperature","n","maxTokens","presencePenalty","stop","stopSequences","seed","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatConfig,\n ChatModel,\n ChatModelEmitter,\n ChatModelInput,\n ChatModelOutput,\n ChatModelParameters,\n ChatModelToolChoiceSupport,\n} from \"@/backend/chat.js\";\nimport { WatsonxClient, WatsonxClientSettings } from \"@/adapters/watsonx/backend/client.js\";\nimport { findLast, isEmpty, isTruthy } from \"remeda\";\nimport WatsonxAiMlVml_v1, {\n TextChatMessages,\n TextChatParameterTools,\n TextChatParams,\n TextChatResultChoice,\n TextChatUsage,\n} from \"@ibm-cloud/watsonx-ai/dist/watsonx-ai-ml/vml_v1.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { AssistantMessage, Message, SystemMessage, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport Type = WatsonxAiMlVml_v1.TextChatResponseFormat.Constants.Type;\nimport { getEnv } from \"@/internals/env.js\";\nimport { NotImplementedError } from \"@/errors.js\";\nimport { Tool } from \"@/tools/base.js\";\nimport type {\n TextChatMessageAssistant,\n TextChatMessageSystem,\n TextChatMessageTool,\n} from \"@ibm-cloud/watsonx-ai\";\nimport { getLast } from \"@/internals/helpers/object.js\";\nimport { randomBytes } from \"node:crypto\";\n\nexport class WatsonxChatModel extends ChatModel {\n protected readonly client: WatsonxClient;\n public readonly emitter: ChatModelEmitter = Emitter.root.child({\n namespace: [\"backend\", \"watsonx\", \"chat\"],\n creator: this,\n });\n public readonly toolChoiceSupport: ChatModelToolChoiceSupport[] = [\"none\", \"single\"];\n\n get providerId() {\n return \"watsonx\";\n }\n\n constructor(\n public readonly modelId = getEnv(\"WATSONX_CHAT_MODEL\", \"ibm/granite-3-8b-instruct\"),\n client?: WatsonxClient | WatsonxClientSettings,\n ) {\n super();\n this.client = WatsonxClient.ensure(client);\n }\n\n config(config: ChatConfig) {\n super.config(config);\n for (const name of [\"topK\"] as (keyof ChatModelParameters)[]) {\n if (this.parameters[name] !== undefined) {\n this.parameters[name] = undefined;\n throw new NotImplementedError(\n `Setting \"${name}\" parameter is not supported for WatsonX Chat Models.`,\n );\n }\n }\n return this;\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<any>) {\n const { result } = await this.client.instance.textChat({\n ...(await this.prepareInput(input)),\n signal: run.signal,\n });\n const { messages, finishReason, usage } = this.extractOutput(\n result.choices,\n result.usage,\n result.id,\n );\n return new ChatModelOutput(messages, usage, finishReason);\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n // @ts-ignore\n const stream = await this.client.instance.textChatStream({\n ...(await this.prepareInput(input)),\n signal: run.signal,\n returnObject: true,\n });\n\n const toolCallIds = new Map<string, string>(); // toolName / id\n for await (const raw of stream) {\n if (run.signal.aborted) {\n stream.controller.abort(run.signal.aborted);\n break;\n }\n if (!Array.isArray(raw.data?.choices)) {\n continue;\n }\n const { messages, finishReason, usage } = this.extractOutput(\n raw.data.choices.map(({ delta, ...choice }) => ({ ...choice, message: delta })),\n raw.data.usage,\n raw.data.id,\n toolCallIds,\n );\n yield new ChatModelOutput(messages, usage, finishReason);\n }\n }\n\n protected extractOutput(\n choices: TextChatResultChoice[],\n usage?: TextChatUsage,\n id?: string,\n toolCallIdsByName?: Map<string, string>,\n ) {\n if (!toolCallIdsByName) {\n toolCallIdsByName = new Map();\n }\n\n const extractToolCall = (\n toolCallId: string,\n toolCallName: string,\n ): Pick<ToolCallPart, \"toolName\" | \"toolCallId\"> => {\n // Some tool call parts don't have the 'id'\n // this function tries to guess it based on the previous chunks\n if (!toolCallName && !toolCallId) {\n [toolCallName, toolCallId] = getLast(toolCallIdsByName, [\"\", \"\"]);\n }\n if (!toolCallId) {\n toolCallId = toolCallIdsByName.get(toolCallName) || \"\";\n }\n if (!toolCallId) {\n toolCallId = `chatcmpl-tool-${randomBytes(16).toString(\"hex\")}`;\n }\n toolCallIdsByName.set(toolCallName, toolCallId);\n return {\n toolCallId: toolCallId,\n toolName: toolCallName,\n };\n };\n\n return {\n finishReason: findLast(choices, (choice) => Boolean(choice?.finish_reason))\n ?.finish_reason as ChatModelOutput[\"finishReason\"],\n usage: usage\n ? {\n completionTokens: usage.completion_tokens ?? 0,\n promptTokens: usage.prompt_tokens ?? 0,\n totalTokens: usage.total_tokens ?? 0,\n }\n : undefined,\n messages: choices\n .flatMap(({ message }) => {\n const messages: Message[] = [];\n\n // @ts-expect-error wrong types\n const reasoning = message?.reasoning_content;\n if (reasoning) {\n const msg = new AssistantMessage({ type: \"text\", text: reasoning }, {}, id);\n messages.push(msg);\n }\n if (message?.content) {\n const msg = new AssistantMessage({ type: \"text\", text: message.content }, {}, id);\n messages.push(msg);\n }\n if (message?.tool_calls && message.tool_calls.length > 0) {\n const chunks: ToolCallPart[] = [];\n for (const toolCall of message.tool_calls) {\n chunks.push({\n type: \"tool-call\",\n ...extractToolCall(toolCall.id, toolCall.function.name),\n input: toolCall.function.arguments,\n });\n }\n const msg = new AssistantMessage(chunks, {}, id);\n messages.push(msg);\n }\n if (message?.refusal) {\n const msg = new AssistantMessage({ type: \"text\", text: message.refusal }, {}, id);\n messages.push(msg);\n }\n return messages;\n })\n .filter(isTruthy),\n };\n }\n\n protected async prepareInput(overrides: ChatModelInput): Promise<TextChatParams> {\n const input: ChatModelInput = { ...this.parameters, ...overrides };\n const tools: TextChatParameterTools[] = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: await tool.getInputJsonSchema(),\n },\n })),\n );\n\n const toolConfig: Pick<TextChatParams, \"toolChoice\" | \"toolChoiceOption\"> = {\n toolChoice: undefined,\n toolChoiceOption: undefined,\n };\n if (input.toolChoice) {\n if (input.toolChoice instanceof Tool) {\n toolConfig.toolChoice = {\n type: \"function\",\n function: { name: input.toolChoice.name },\n };\n } else if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolConfig.toolChoiceOption = input.toolChoice;\n }\n }\n\n return {\n modelId: this.modelId,\n messages: input.messages.flatMap((message): TextChatMessages[] => {\n if (message instanceof ToolMessage) {\n return message.content.map(\n (content): TextChatMessageTool => ({\n role: \"tool\",\n content:\n typeof content.output.value === \"string\"\n ? content.output.value\n : JSON.stringify(content),\n tool_call_id: content.toolCallId,\n }),\n );\n } else if (message instanceof SystemMessage) {\n return message.content.map(\n (content): TextChatMessageSystem => ({\n role: \"system\",\n content: content.text,\n }),\n );\n } else if (message instanceof AssistantMessage) {\n return message.content.map(\n (content): TextChatMessageAssistant => ({\n role: \"assistant\",\n ...(content.type === \"text\" && {\n content: content.text,\n }),\n ...(content.type === \"tool-call\" && {\n id: content.toolCallId,\n type: \"function\",\n function: {\n name: content.toolName,\n arguments: JSON.stringify(content.input),\n },\n }),\n ...(() => {\n if (content.type === \"file\") {\n throw new Error(\"Assistants cannot send a file in IBM watsonx\");\n }\n return {};\n })(),\n }),\n );\n } else {\n return [message.toPlain()];\n }\n }),\n spaceId: this.client.spaceId,\n projectId: this.client.projectId,\n tools: isEmpty(tools) ? undefined : tools,\n responseFormat: undefined,\n ...(input.responseFormat && {\n responseFormat: { type: Type.JSON_OBJECT },\n }),\n topP: input.topP,\n frequencyPenalty: input.frequencyPenalty,\n temperature: input.temperature,\n n: input.n,\n maxTokens: input.maxTokens,\n presencePenalty: input.presencePenalty,\n stop: input.stopSequences,\n seed: input.seed,\n ...toolConfig,\n };\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n modelId: this.modelId,\n parameters: shallowCopy(this.parameters),\n client: this.client,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapters/watsonx/backend/chat.ts"],"names":["Type","WatsonxAiMlVml_v1","WatsonxChatModel","ChatModel","client","emitter","Emitter","root","child","namespace","creator","toolChoiceSupport","providerId","modelId","getEnv","WatsonxClient","ensure","config","name","parameters","undefined","NotImplementedError","_create","input","run","result","instance","textChat","prepareInput","signal","messages","finishReason","usage","extractOutput","choices","id","ChatModelOutput","_createStream","stream","textChatStream","returnObject","toolCallIds","Map","raw","aborted","controller","abort","Array","isArray","data","map","delta","choice","message","toolCallIdsByName","extractToolCall","toolCallId","toolCallName","getLast","get","randomBytes","toString","set","toolName","findLast","Boolean","finish_reason","completionTokens","completion_tokens","promptTokens","prompt_tokens","totalTokens","total_tokens","flatMap","reasoning_content","msg","AssistantMessage","type","text","push","content","tool_calls","length","chunks","toolCall","function","arguments","refusal","filter","isTruthy","overrides","tools","Promise","all","tool","description","getInputJsonSchema","toolConfig","toolChoice","toolChoiceOption","Tool","includes","ToolMessage","role","output","isString","value","JSON","stringify","tool_call_id","SystemMessage","Error","toPlain","spaceId","projectId","isEmpty","responseFormat","JSON_OBJECT","topP","frequencyPenalty","temperature","n","maxTokens","presencePenalty","stop","stopSequences","seed","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatConfig,\n ChatModel,\n ChatModelEmitter,\n ChatModelInput,\n ChatModelOutput,\n ChatModelParameters,\n ChatModelToolChoiceSupport,\n} from \"@/backend/chat.js\";\nimport { WatsonxClient, WatsonxClientSettings } from \"@/adapters/watsonx/backend/client.js\";\nimport { findLast, isEmpty, isString, isTruthy } from \"remeda\";\nimport WatsonxAiMlVml_v1, {\n TextChatMessages,\n TextChatParameterTools,\n TextChatParams,\n TextChatResultChoice,\n TextChatUsage,\n} from \"@ibm-cloud/watsonx-ai/dist/watsonx-ai-ml/vml_v1.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { AssistantMessage, Message, SystemMessage, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport Type = WatsonxAiMlVml_v1.TextChatResponseFormat.Constants.Type;\nimport { getEnv } from \"@/internals/env.js\";\nimport { NotImplementedError } from \"@/errors.js\";\nimport { Tool } from \"@/tools/base.js\";\nimport type {\n TextChatMessageAssistant,\n TextChatMessageSystem,\n TextChatMessageTool,\n} from \"@ibm-cloud/watsonx-ai\";\nimport { getLast } from \"@/internals/helpers/object.js\";\nimport { randomBytes } from \"node:crypto\";\n\nexport class WatsonxChatModel extends ChatModel {\n protected readonly client: WatsonxClient;\n public readonly emitter: ChatModelEmitter = Emitter.root.child({\n namespace: [\"backend\", \"watsonx\", \"chat\"],\n creator: this,\n });\n public readonly toolChoiceSupport: ChatModelToolChoiceSupport[] = [\"none\", \"single\"];\n\n get providerId() {\n return \"watsonx\";\n }\n\n constructor(\n public readonly modelId = getEnv(\"WATSONX_CHAT_MODEL\", \"ibm/granite-3-8b-instruct\"),\n client?: WatsonxClient | WatsonxClientSettings,\n ) {\n super();\n this.client = WatsonxClient.ensure(client);\n }\n\n config(config: ChatConfig) {\n super.config(config);\n for (const name of [\"topK\"] as (keyof ChatModelParameters)[]) {\n if (this.parameters[name] !== undefined) {\n this.parameters[name] = undefined;\n throw new NotImplementedError(\n `Setting \"${name}\" parameter is not supported for WatsonX Chat Models.`,\n );\n }\n }\n return this;\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<any>) {\n const { result } = await this.client.instance.textChat({\n ...(await this.prepareInput(input)),\n signal: run.signal,\n });\n const { messages, finishReason, usage } = this.extractOutput(\n result.choices,\n result.usage,\n result.id,\n );\n return new ChatModelOutput(messages, usage, finishReason);\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n // @ts-ignore\n const stream = await this.client.instance.textChatStream({\n ...(await this.prepareInput(input)),\n signal: run.signal,\n returnObject: true,\n });\n\n const toolCallIds = new Map<string, string>(); // toolName / id\n for await (const raw of stream) {\n if (run.signal.aborted) {\n stream.controller.abort(run.signal.aborted);\n break;\n }\n if (!Array.isArray(raw.data?.choices)) {\n continue;\n }\n const { messages, finishReason, usage } = this.extractOutput(\n raw.data.choices.map(({ delta, ...choice }) => ({ ...choice, message: delta })),\n raw.data.usage,\n raw.data.id,\n toolCallIds,\n );\n yield new ChatModelOutput(messages, usage, finishReason);\n }\n }\n\n protected extractOutput(\n choices: TextChatResultChoice[],\n usage?: TextChatUsage,\n id?: string,\n toolCallIdsByName?: Map<string, string>,\n ) {\n if (!toolCallIdsByName) {\n toolCallIdsByName = new Map();\n }\n\n const extractToolCall = (\n toolCallId: string,\n toolCallName: string,\n ): Pick<ToolCallPart, \"toolName\" | \"toolCallId\"> => {\n // Some tool call parts don't have the 'id'\n // this function tries to guess it based on the previous chunks\n if (!toolCallName && !toolCallId) {\n [toolCallName, toolCallId] = getLast(toolCallIdsByName, [\"\", \"\"]);\n }\n if (!toolCallId) {\n toolCallId = toolCallIdsByName.get(toolCallName) || \"\";\n }\n if (!toolCallId) {\n toolCallId = `chatcmpl-tool-${randomBytes(16).toString(\"hex\")}`;\n }\n toolCallIdsByName.set(toolCallName, toolCallId);\n return {\n toolCallId: toolCallId,\n toolName: toolCallName,\n };\n };\n\n return {\n finishReason: findLast(choices, (choice) => Boolean(choice?.finish_reason))\n ?.finish_reason as ChatModelOutput[\"finishReason\"],\n usage: usage\n ? {\n completionTokens: usage.completion_tokens ?? 0,\n promptTokens: usage.prompt_tokens ?? 0,\n totalTokens: usage.total_tokens ?? 0,\n }\n : undefined,\n messages: choices\n .flatMap(({ message }) => {\n const messages: Message[] = [];\n\n if (message?.reasoning_content) {\n const msg = new AssistantMessage(\n { type: \"text\", text: message.reasoning_content },\n {},\n id,\n );\n messages.push(msg);\n }\n if (message?.content) {\n const msg = new AssistantMessage({ type: \"text\", text: message.content }, {}, id);\n messages.push(msg);\n }\n if (message?.tool_calls && message.tool_calls.length > 0) {\n const chunks: ToolCallPart[] = [];\n for (const toolCall of message.tool_calls) {\n chunks.push({\n type: \"tool-call\",\n ...extractToolCall(toolCall.id, toolCall.function.name),\n input: toolCall.function.arguments,\n });\n }\n const msg = new AssistantMessage(chunks, {}, id);\n messages.push(msg);\n }\n if (message?.refusal) {\n const msg = new AssistantMessage({ type: \"text\", text: message.refusal }, {}, id);\n messages.push(msg);\n }\n return messages;\n })\n .filter(isTruthy),\n };\n }\n\n protected async prepareInput(overrides: ChatModelInput): Promise<TextChatParams> {\n const input: ChatModelInput = { ...this.parameters, ...overrides };\n const tools: TextChatParameterTools[] = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: await tool.getInputJsonSchema(),\n },\n })),\n );\n\n const toolConfig: Pick<TextChatParams, \"toolChoice\" | \"toolChoiceOption\"> = {\n toolChoice: undefined,\n toolChoiceOption: undefined,\n };\n if (input.toolChoice) {\n if (input.toolChoice instanceof Tool) {\n toolConfig.toolChoice = {\n type: \"function\",\n function: { name: input.toolChoice.name },\n };\n } else if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolConfig.toolChoiceOption = input.toolChoice;\n }\n }\n\n return {\n modelId: this.modelId,\n messages: input.messages.flatMap((message): TextChatMessages[] => {\n if (message instanceof ToolMessage) {\n return message.content.map(\n (content): TextChatMessageTool => ({\n role: \"tool\",\n content:\n \"value\" in content.output && isString(content.output.value)\n ? content.output.value\n : JSON.stringify(content),\n tool_call_id: content.toolCallId,\n }),\n );\n } else if (message instanceof SystemMessage) {\n return message.content.map(\n (content): TextChatMessageSystem => ({\n role: \"system\",\n content: content.text,\n }),\n );\n } else if (message instanceof AssistantMessage) {\n return message.content.map(\n (content): TextChatMessageAssistant => ({\n role: \"assistant\",\n ...(content.type === \"text\" && {\n content: content.text,\n }),\n ...(content.type === \"tool-call\" && {\n id: content.toolCallId,\n type: \"function\",\n function: {\n name: content.toolName,\n arguments: JSON.stringify(content.input),\n },\n }),\n ...(() => {\n if (content.type === \"file\") {\n throw new Error(\"Assistants cannot send a file in IBM watsonx\");\n }\n return {};\n })(),\n }),\n );\n } else {\n return [message.toPlain()];\n }\n }),\n spaceId: this.client.spaceId,\n projectId: this.client.projectId,\n tools: isEmpty(tools) ? undefined : tools,\n responseFormat: undefined,\n ...(input.responseFormat && {\n responseFormat: { type: Type.JSON_OBJECT },\n }),\n topP: input.topP,\n frequencyPenalty: input.frequencyPenalty,\n temperature: input.temperature,\n n: input.n,\n maxTokens: input.maxTokens,\n presencePenalty: input.presencePenalty,\n stop: input.stopSequences,\n seed: input.seed,\n ...toolConfig,\n };\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n modelId: this.modelId,\n parameters: shallowCopy(this.parameters),\n client: this.client,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChatModel, ChatModelOutput } from '../../../backend/chat.js';
|
|
2
2
|
import { WatsonxClient } from './client.js';
|
|
3
|
-
import { findLast, isTruthy, isEmpty } from 'remeda';
|
|
3
|
+
import { findLast, isTruthy, isEmpty, isString } from 'remeda';
|
|
4
4
|
import WatsonxAiMlVml_v1 from '@ibm-cloud/watsonx-ai/dist/watsonx-ai-ml/vml_v1.js';
|
|
5
5
|
import { shallowCopy } from '../../../serializer/utils.js';
|
|
6
6
|
import { Emitter } from '../../../emitter/emitter.js';
|
|
@@ -113,11 +113,10 @@ class WatsonxChatModel extends ChatModel {
|
|
|
113
113
|
} : void 0,
|
|
114
114
|
messages: choices.flatMap(({ message }) => {
|
|
115
115
|
const messages = [];
|
|
116
|
-
|
|
117
|
-
if (reasoning) {
|
|
116
|
+
if (message?.reasoning_content) {
|
|
118
117
|
const msg = new AssistantMessage({
|
|
119
118
|
type: "text",
|
|
120
|
-
text:
|
|
119
|
+
text: message.reasoning_content
|
|
121
120
|
}, {}, id);
|
|
122
121
|
messages.push(msg);
|
|
123
122
|
}
|
|
@@ -186,7 +185,7 @@ class WatsonxChatModel extends ChatModel {
|
|
|
186
185
|
if (message instanceof ToolMessage) {
|
|
187
186
|
return message.content.map((content) => ({
|
|
188
187
|
role: "tool",
|
|
189
|
-
content:
|
|
188
|
+
content: "value" in content.output && isString(content.output.value) ? content.output.value : JSON.stringify(content),
|
|
190
189
|
tool_call_id: content.toolCallId
|
|
191
190
|
}));
|
|
192
191
|
} else if (message instanceof SystemMessage) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapters/watsonx/backend/chat.ts"],"names":["Type","WatsonxChatModel","ChatModel","client","emitter","Emitter","root","child","namespace","creator","toolChoiceSupport","providerId","modelId","getEnv","WatsonxClient","ensure","config","name","parameters","undefined","NotImplementedError","_create","input","run","result","instance","textChat","prepareInput","signal","messages","finishReason","usage","extractOutput","choices","id","ChatModelOutput","_createStream","stream","textChatStream","returnObject","toolCallIds","Map","raw","aborted","controller","abort","Array","isArray","data","map","delta","choice","message","toolCallIdsByName","extractToolCall","toolCallId","toolCallName","getLast","get","randomBytes","toString","set","toolName","findLast","Boolean","finish_reason","completionTokens","completion_tokens","promptTokens","prompt_tokens","totalTokens","total_tokens","flatMap","reasoning","reasoning_content","msg","AssistantMessage","type","text","push","content","tool_calls","length","chunks","toolCall","function","arguments","refusal","filter","isTruthy","overrides","tools","Promise","all","tool","description","getInputJsonSchema","toolConfig","toolChoice","toolChoiceOption","Tool","includes","ToolMessage","role","output","value","JSON","stringify","tool_call_id","SystemMessage","Error","toPlain","spaceId","projectId","isEmpty","responseFormat","JSON_OBJECT","topP","frequencyPenalty","temperature","n","maxTokens","presencePenalty","stop","stopSequences","seed","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatConfig,\n ChatModel,\n ChatModelEmitter,\n ChatModelInput,\n ChatModelOutput,\n ChatModelParameters,\n ChatModelToolChoiceSupport,\n} from \"@/backend/chat.js\";\nimport { WatsonxClient, WatsonxClientSettings } from \"@/adapters/watsonx/backend/client.js\";\nimport { findLast, isEmpty, isTruthy } from \"remeda\";\nimport WatsonxAiMlVml_v1, {\n TextChatMessages,\n TextChatParameterTools,\n TextChatParams,\n TextChatResultChoice,\n TextChatUsage,\n} from \"@ibm-cloud/watsonx-ai/dist/watsonx-ai-ml/vml_v1.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { AssistantMessage, Message, SystemMessage, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport Type = WatsonxAiMlVml_v1.TextChatResponseFormat.Constants.Type;\nimport { getEnv } from \"@/internals/env.js\";\nimport { NotImplementedError } from \"@/errors.js\";\nimport { Tool } from \"@/tools/base.js\";\nimport type {\n TextChatMessageAssistant,\n TextChatMessageSystem,\n TextChatMessageTool,\n} from \"@ibm-cloud/watsonx-ai\";\nimport { getLast } from \"@/internals/helpers/object.js\";\nimport { randomBytes } from \"node:crypto\";\n\nexport class WatsonxChatModel extends ChatModel {\n protected readonly client: WatsonxClient;\n public readonly emitter: ChatModelEmitter = Emitter.root.child({\n namespace: [\"backend\", \"watsonx\", \"chat\"],\n creator: this,\n });\n public readonly toolChoiceSupport: ChatModelToolChoiceSupport[] = [\"none\", \"single\"];\n\n get providerId() {\n return \"watsonx\";\n }\n\n constructor(\n public readonly modelId = getEnv(\"WATSONX_CHAT_MODEL\", \"ibm/granite-3-8b-instruct\"),\n client?: WatsonxClient | WatsonxClientSettings,\n ) {\n super();\n this.client = WatsonxClient.ensure(client);\n }\n\n config(config: ChatConfig) {\n super.config(config);\n for (const name of [\"topK\"] as (keyof ChatModelParameters)[]) {\n if (this.parameters[name] !== undefined) {\n this.parameters[name] = undefined;\n throw new NotImplementedError(\n `Setting \"${name}\" parameter is not supported for WatsonX Chat Models.`,\n );\n }\n }\n return this;\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<any>) {\n const { result } = await this.client.instance.textChat({\n ...(await this.prepareInput(input)),\n signal: run.signal,\n });\n const { messages, finishReason, usage } = this.extractOutput(\n result.choices,\n result.usage,\n result.id,\n );\n return new ChatModelOutput(messages, usage, finishReason);\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n // @ts-ignore\n const stream = await this.client.instance.textChatStream({\n ...(await this.prepareInput(input)),\n signal: run.signal,\n returnObject: true,\n });\n\n const toolCallIds = new Map<string, string>(); // toolName / id\n for await (const raw of stream) {\n if (run.signal.aborted) {\n stream.controller.abort(run.signal.aborted);\n break;\n }\n if (!Array.isArray(raw.data?.choices)) {\n continue;\n }\n const { messages, finishReason, usage } = this.extractOutput(\n raw.data.choices.map(({ delta, ...choice }) => ({ ...choice, message: delta })),\n raw.data.usage,\n raw.data.id,\n toolCallIds,\n );\n yield new ChatModelOutput(messages, usage, finishReason);\n }\n }\n\n protected extractOutput(\n choices: TextChatResultChoice[],\n usage?: TextChatUsage,\n id?: string,\n toolCallIdsByName?: Map<string, string>,\n ) {\n if (!toolCallIdsByName) {\n toolCallIdsByName = new Map();\n }\n\n const extractToolCall = (\n toolCallId: string,\n toolCallName: string,\n ): Pick<ToolCallPart, \"toolName\" | \"toolCallId\"> => {\n // Some tool call parts don't have the 'id'\n // this function tries to guess it based on the previous chunks\n if (!toolCallName && !toolCallId) {\n [toolCallName, toolCallId] = getLast(toolCallIdsByName, [\"\", \"\"]);\n }\n if (!toolCallId) {\n toolCallId = toolCallIdsByName.get(toolCallName) || \"\";\n }\n if (!toolCallId) {\n toolCallId = `chatcmpl-tool-${randomBytes(16).toString(\"hex\")}`;\n }\n toolCallIdsByName.set(toolCallName, toolCallId);\n return {\n toolCallId: toolCallId,\n toolName: toolCallName,\n };\n };\n\n return {\n finishReason: findLast(choices, (choice) => Boolean(choice?.finish_reason))\n ?.finish_reason as ChatModelOutput[\"finishReason\"],\n usage: usage\n ? {\n completionTokens: usage.completion_tokens ?? 0,\n promptTokens: usage.prompt_tokens ?? 0,\n totalTokens: usage.total_tokens ?? 0,\n }\n : undefined,\n messages: choices\n .flatMap(({ message }) => {\n const messages: Message[] = [];\n\n // @ts-expect-error wrong types\n const reasoning = message?.reasoning_content;\n if (reasoning) {\n const msg = new AssistantMessage({ type: \"text\", text: reasoning }, {}, id);\n messages.push(msg);\n }\n if (message?.content) {\n const msg = new AssistantMessage({ type: \"text\", text: message.content }, {}, id);\n messages.push(msg);\n }\n if (message?.tool_calls && message.tool_calls.length > 0) {\n const chunks: ToolCallPart[] = [];\n for (const toolCall of message.tool_calls) {\n chunks.push({\n type: \"tool-call\",\n ...extractToolCall(toolCall.id, toolCall.function.name),\n input: toolCall.function.arguments,\n });\n }\n const msg = new AssistantMessage(chunks, {}, id);\n messages.push(msg);\n }\n if (message?.refusal) {\n const msg = new AssistantMessage({ type: \"text\", text: message.refusal }, {}, id);\n messages.push(msg);\n }\n return messages;\n })\n .filter(isTruthy),\n };\n }\n\n protected async prepareInput(overrides: ChatModelInput): Promise<TextChatParams> {\n const input: ChatModelInput = { ...this.parameters, ...overrides };\n const tools: TextChatParameterTools[] = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: await tool.getInputJsonSchema(),\n },\n })),\n );\n\n const toolConfig: Pick<TextChatParams, \"toolChoice\" | \"toolChoiceOption\"> = {\n toolChoice: undefined,\n toolChoiceOption: undefined,\n };\n if (input.toolChoice) {\n if (input.toolChoice instanceof Tool) {\n toolConfig.toolChoice = {\n type: \"function\",\n function: { name: input.toolChoice.name },\n };\n } else if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolConfig.toolChoiceOption = input.toolChoice;\n }\n }\n\n return {\n modelId: this.modelId,\n messages: input.messages.flatMap((message): TextChatMessages[] => {\n if (message instanceof ToolMessage) {\n return message.content.map(\n (content): TextChatMessageTool => ({\n role: \"tool\",\n content:\n typeof content.output.value === \"string\"\n ? content.output.value\n : JSON.stringify(content),\n tool_call_id: content.toolCallId,\n }),\n );\n } else if (message instanceof SystemMessage) {\n return message.content.map(\n (content): TextChatMessageSystem => ({\n role: \"system\",\n content: content.text,\n }),\n );\n } else if (message instanceof AssistantMessage) {\n return message.content.map(\n (content): TextChatMessageAssistant => ({\n role: \"assistant\",\n ...(content.type === \"text\" && {\n content: content.text,\n }),\n ...(content.type === \"tool-call\" && {\n id: content.toolCallId,\n type: \"function\",\n function: {\n name: content.toolName,\n arguments: JSON.stringify(content.input),\n },\n }),\n ...(() => {\n if (content.type === \"file\") {\n throw new Error(\"Assistants cannot send a file in IBM watsonx\");\n }\n return {};\n })(),\n }),\n );\n } else {\n return [message.toPlain()];\n }\n }),\n spaceId: this.client.spaceId,\n projectId: this.client.projectId,\n tools: isEmpty(tools) ? undefined : tools,\n responseFormat: undefined,\n ...(input.responseFormat && {\n responseFormat: { type: Type.JSON_OBJECT },\n }),\n topP: input.topP,\n frequencyPenalty: input.frequencyPenalty,\n temperature: input.temperature,\n n: input.n,\n maxTokens: input.maxTokens,\n presencePenalty: input.presencePenalty,\n stop: input.stopSequences,\n seed: input.seed,\n ...toolConfig,\n };\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n modelId: this.modelId,\n parameters: shallowCopy(this.parameters),\n client: this.client,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapters/watsonx/backend/chat.ts"],"names":["Type","WatsonxChatModel","ChatModel","client","emitter","Emitter","root","child","namespace","creator","toolChoiceSupport","providerId","modelId","getEnv","WatsonxClient","ensure","config","name","parameters","undefined","NotImplementedError","_create","input","run","result","instance","textChat","prepareInput","signal","messages","finishReason","usage","extractOutput","choices","id","ChatModelOutput","_createStream","stream","textChatStream","returnObject","toolCallIds","Map","raw","aborted","controller","abort","Array","isArray","data","map","delta","choice","message","toolCallIdsByName","extractToolCall","toolCallId","toolCallName","getLast","get","randomBytes","toString","set","toolName","findLast","Boolean","finish_reason","completionTokens","completion_tokens","promptTokens","prompt_tokens","totalTokens","total_tokens","flatMap","reasoning_content","msg","AssistantMessage","type","text","push","content","tool_calls","length","chunks","toolCall","function","arguments","refusal","filter","isTruthy","overrides","tools","Promise","all","tool","description","getInputJsonSchema","toolConfig","toolChoice","toolChoiceOption","Tool","includes","ToolMessage","role","output","isString","value","JSON","stringify","tool_call_id","SystemMessage","Error","toPlain","spaceId","projectId","isEmpty","responseFormat","JSON_OBJECT","topP","frequencyPenalty","temperature","n","maxTokens","presencePenalty","stop","stopSequences","seed","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatConfig,\n ChatModel,\n ChatModelEmitter,\n ChatModelInput,\n ChatModelOutput,\n ChatModelParameters,\n ChatModelToolChoiceSupport,\n} from \"@/backend/chat.js\";\nimport { WatsonxClient, WatsonxClientSettings } from \"@/adapters/watsonx/backend/client.js\";\nimport { findLast, isEmpty, isString, isTruthy } from \"remeda\";\nimport WatsonxAiMlVml_v1, {\n TextChatMessages,\n TextChatParameterTools,\n TextChatParams,\n TextChatResultChoice,\n TextChatUsage,\n} from \"@ibm-cloud/watsonx-ai/dist/watsonx-ai-ml/vml_v1.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { AssistantMessage, Message, SystemMessage, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport Type = WatsonxAiMlVml_v1.TextChatResponseFormat.Constants.Type;\nimport { getEnv } from \"@/internals/env.js\";\nimport { NotImplementedError } from \"@/errors.js\";\nimport { Tool } from \"@/tools/base.js\";\nimport type {\n TextChatMessageAssistant,\n TextChatMessageSystem,\n TextChatMessageTool,\n} from \"@ibm-cloud/watsonx-ai\";\nimport { getLast } from \"@/internals/helpers/object.js\";\nimport { randomBytes } from \"node:crypto\";\n\nexport class WatsonxChatModel extends ChatModel {\n protected readonly client: WatsonxClient;\n public readonly emitter: ChatModelEmitter = Emitter.root.child({\n namespace: [\"backend\", \"watsonx\", \"chat\"],\n creator: this,\n });\n public readonly toolChoiceSupport: ChatModelToolChoiceSupport[] = [\"none\", \"single\"];\n\n get providerId() {\n return \"watsonx\";\n }\n\n constructor(\n public readonly modelId = getEnv(\"WATSONX_CHAT_MODEL\", \"ibm/granite-3-8b-instruct\"),\n client?: WatsonxClient | WatsonxClientSettings,\n ) {\n super();\n this.client = WatsonxClient.ensure(client);\n }\n\n config(config: ChatConfig) {\n super.config(config);\n for (const name of [\"topK\"] as (keyof ChatModelParameters)[]) {\n if (this.parameters[name] !== undefined) {\n this.parameters[name] = undefined;\n throw new NotImplementedError(\n `Setting \"${name}\" parameter is not supported for WatsonX Chat Models.`,\n );\n }\n }\n return this;\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<any>) {\n const { result } = await this.client.instance.textChat({\n ...(await this.prepareInput(input)),\n signal: run.signal,\n });\n const { messages, finishReason, usage } = this.extractOutput(\n result.choices,\n result.usage,\n result.id,\n );\n return new ChatModelOutput(messages, usage, finishReason);\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n // @ts-ignore\n const stream = await this.client.instance.textChatStream({\n ...(await this.prepareInput(input)),\n signal: run.signal,\n returnObject: true,\n });\n\n const toolCallIds = new Map<string, string>(); // toolName / id\n for await (const raw of stream) {\n if (run.signal.aborted) {\n stream.controller.abort(run.signal.aborted);\n break;\n }\n if (!Array.isArray(raw.data?.choices)) {\n continue;\n }\n const { messages, finishReason, usage } = this.extractOutput(\n raw.data.choices.map(({ delta, ...choice }) => ({ ...choice, message: delta })),\n raw.data.usage,\n raw.data.id,\n toolCallIds,\n );\n yield new ChatModelOutput(messages, usage, finishReason);\n }\n }\n\n protected extractOutput(\n choices: TextChatResultChoice[],\n usage?: TextChatUsage,\n id?: string,\n toolCallIdsByName?: Map<string, string>,\n ) {\n if (!toolCallIdsByName) {\n toolCallIdsByName = new Map();\n }\n\n const extractToolCall = (\n toolCallId: string,\n toolCallName: string,\n ): Pick<ToolCallPart, \"toolName\" | \"toolCallId\"> => {\n // Some tool call parts don't have the 'id'\n // this function tries to guess it based on the previous chunks\n if (!toolCallName && !toolCallId) {\n [toolCallName, toolCallId] = getLast(toolCallIdsByName, [\"\", \"\"]);\n }\n if (!toolCallId) {\n toolCallId = toolCallIdsByName.get(toolCallName) || \"\";\n }\n if (!toolCallId) {\n toolCallId = `chatcmpl-tool-${randomBytes(16).toString(\"hex\")}`;\n }\n toolCallIdsByName.set(toolCallName, toolCallId);\n return {\n toolCallId: toolCallId,\n toolName: toolCallName,\n };\n };\n\n return {\n finishReason: findLast(choices, (choice) => Boolean(choice?.finish_reason))\n ?.finish_reason as ChatModelOutput[\"finishReason\"],\n usage: usage\n ? {\n completionTokens: usage.completion_tokens ?? 0,\n promptTokens: usage.prompt_tokens ?? 0,\n totalTokens: usage.total_tokens ?? 0,\n }\n : undefined,\n messages: choices\n .flatMap(({ message }) => {\n const messages: Message[] = [];\n\n if (message?.reasoning_content) {\n const msg = new AssistantMessage(\n { type: \"text\", text: message.reasoning_content },\n {},\n id,\n );\n messages.push(msg);\n }\n if (message?.content) {\n const msg = new AssistantMessage({ type: \"text\", text: message.content }, {}, id);\n messages.push(msg);\n }\n if (message?.tool_calls && message.tool_calls.length > 0) {\n const chunks: ToolCallPart[] = [];\n for (const toolCall of message.tool_calls) {\n chunks.push({\n type: \"tool-call\",\n ...extractToolCall(toolCall.id, toolCall.function.name),\n input: toolCall.function.arguments,\n });\n }\n const msg = new AssistantMessage(chunks, {}, id);\n messages.push(msg);\n }\n if (message?.refusal) {\n const msg = new AssistantMessage({ type: \"text\", text: message.refusal }, {}, id);\n messages.push(msg);\n }\n return messages;\n })\n .filter(isTruthy),\n };\n }\n\n protected async prepareInput(overrides: ChatModelInput): Promise<TextChatParams> {\n const input: ChatModelInput = { ...this.parameters, ...overrides };\n const tools: TextChatParameterTools[] = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: await tool.getInputJsonSchema(),\n },\n })),\n );\n\n const toolConfig: Pick<TextChatParams, \"toolChoice\" | \"toolChoiceOption\"> = {\n toolChoice: undefined,\n toolChoiceOption: undefined,\n };\n if (input.toolChoice) {\n if (input.toolChoice instanceof Tool) {\n toolConfig.toolChoice = {\n type: \"function\",\n function: { name: input.toolChoice.name },\n };\n } else if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolConfig.toolChoiceOption = input.toolChoice;\n }\n }\n\n return {\n modelId: this.modelId,\n messages: input.messages.flatMap((message): TextChatMessages[] => {\n if (message instanceof ToolMessage) {\n return message.content.map(\n (content): TextChatMessageTool => ({\n role: \"tool\",\n content:\n \"value\" in content.output && isString(content.output.value)\n ? content.output.value\n : JSON.stringify(content),\n tool_call_id: content.toolCallId,\n }),\n );\n } else if (message instanceof SystemMessage) {\n return message.content.map(\n (content): TextChatMessageSystem => ({\n role: \"system\",\n content: content.text,\n }),\n );\n } else if (message instanceof AssistantMessage) {\n return message.content.map(\n (content): TextChatMessageAssistant => ({\n role: \"assistant\",\n ...(content.type === \"text\" && {\n content: content.text,\n }),\n ...(content.type === \"tool-call\" && {\n id: content.toolCallId,\n type: \"function\",\n function: {\n name: content.toolName,\n arguments: JSON.stringify(content.input),\n },\n }),\n ...(() => {\n if (content.type === \"file\") {\n throw new Error(\"Assistants cannot send a file in IBM watsonx\");\n }\n return {};\n })(),\n }),\n );\n } else {\n return [message.toPlain()];\n }\n }),\n spaceId: this.client.spaceId,\n projectId: this.client.projectId,\n tools: isEmpty(tools) ? undefined : tools,\n responseFormat: undefined,\n ...(input.responseFormat && {\n responseFormat: { type: Type.JSON_OBJECT },\n }),\n topP: input.topP,\n frequencyPenalty: input.frequencyPenalty,\n temperature: input.temperature,\n n: input.n,\n maxTokens: input.maxTokens,\n presencePenalty: input.presencePenalty,\n stop: input.stopSequences,\n seed: input.seed,\n ...toolConfig,\n };\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n modelId: this.modelId,\n parameters: shallowCopy(this.parameters),\n client: this.client,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
@@ -28,12 +28,12 @@ declare const ReActAgentSystemPrompt: PromptTemplate<z.ZodObject<{
|
|
|
28
28
|
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
29
29
|
createdAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
30
30
|
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
instructions: string;
|
|
31
32
|
tools: z.objectOutputType<{
|
|
32
33
|
name: z.ZodString;
|
|
33
34
|
description: z.ZodString;
|
|
34
35
|
schema: z.ZodString;
|
|
35
36
|
}, z.ZodTypeAny, "passthrough">[];
|
|
36
|
-
instructions: string;
|
|
37
37
|
createdAt?: string | null | undefined;
|
|
38
38
|
}, {
|
|
39
39
|
tools: z.objectInputType<{
|
|
@@ -28,12 +28,12 @@ declare const ReActAgentSystemPrompt: PromptTemplate<z.ZodObject<{
|
|
|
28
28
|
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
29
29
|
createdAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
30
30
|
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
instructions: string;
|
|
31
32
|
tools: z.objectOutputType<{
|
|
32
33
|
name: z.ZodString;
|
|
33
34
|
description: z.ZodString;
|
|
34
35
|
schema: z.ZodString;
|
|
35
36
|
}, z.ZodTypeAny, "passthrough">[];
|
|
36
|
-
instructions: string;
|
|
37
37
|
createdAt?: string | null | undefined;
|
|
38
38
|
}, {
|
|
39
39
|
tools: z.objectInputType<{
|