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.
Files changed (71) hide show
  1. package/dist/adapters/google-vertex/backend/chat.d.cts +1 -1
  2. package/dist/adapters/google-vertex/backend/chat.d.ts +1 -1
  3. package/dist/adapters/groq/backend/chat.cjs +44 -1
  4. package/dist/adapters/groq/backend/chat.cjs.map +1 -1
  5. package/dist/adapters/groq/backend/chat.d.cts +12 -14
  6. package/dist/adapters/groq/backend/chat.d.ts +12 -14
  7. package/dist/adapters/groq/backend/chat.js +44 -1
  8. package/dist/adapters/groq/backend/chat.js.map +1 -1
  9. package/dist/adapters/vercel/backend/chat.cjs +57 -18
  10. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  11. package/dist/adapters/vercel/backend/chat.d.cts +2 -2
  12. package/dist/adapters/vercel/backend/chat.d.ts +2 -2
  13. package/dist/adapters/vercel/backend/chat.js +59 -20
  14. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  15. package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
  16. package/dist/adapters/vercel/backend/embedding.d.cts +1 -1
  17. package/dist/adapters/vercel/backend/embedding.d.ts +1 -1
  18. package/dist/adapters/vercel/backend/embedding.js.map +1 -1
  19. package/dist/adapters/watsonx/backend/chat.cjs +3 -4
  20. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  21. package/dist/adapters/watsonx/backend/chat.js +4 -5
  22. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  23. package/dist/agents/react/prompts.d.cts +1 -1
  24. package/dist/agents/react/prompts.d.ts +1 -1
  25. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  26. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  27. package/dist/agents/react/runners/deep-think/runner.d.cts +1 -1
  28. package/dist/agents/react/runners/deep-think/runner.d.ts +1 -1
  29. package/dist/agents/react/runners/default/runner.d.cts +1 -1
  30. package/dist/agents/react/runners/default/runner.d.ts +1 -1
  31. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  32. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  33. package/dist/agents/react/runners/granite/runner.d.cts +1 -1
  34. package/dist/agents/react/runners/granite/runner.d.ts +1 -1
  35. package/dist/agents/requirement/agent.d.cts +1 -1
  36. package/dist/agents/requirement/agent.d.ts +1 -1
  37. package/dist/agents/requirement/prompts.d.cts +2 -2
  38. package/dist/agents/requirement/prompts.d.ts +2 -2
  39. package/dist/agents/requirement/requirements/conditional.d.cts +1 -1
  40. package/dist/agents/requirement/requirements/conditional.d.ts +1 -1
  41. package/dist/agents/requirement/requirements/requirement.d.cts +1 -1
  42. package/dist/agents/requirement/requirements/requirement.d.ts +1 -1
  43. package/dist/agents/requirement/runner.d.cts +1 -1
  44. package/dist/agents/requirement/runner.d.ts +1 -1
  45. package/dist/agents/requirement/types.d.cts +1 -1
  46. package/dist/agents/requirement/types.d.ts +1 -1
  47. package/dist/agents/requirement/utils/llm.d.cts +1 -1
  48. package/dist/agents/requirement/utils/llm.d.ts +1 -1
  49. package/dist/agents/requirement/utils/tool.d.cts +1 -1
  50. package/dist/agents/requirement/utils/tool.d.ts +1 -1
  51. package/dist/backend/chat.cjs +8 -1
  52. package/dist/backend/chat.cjs.map +1 -1
  53. package/dist/backend/chat.js +8 -1
  54. package/dist/backend/chat.js.map +1 -1
  55. package/dist/backend/core.d.cts +1 -1
  56. package/dist/backend/core.d.ts +1 -1
  57. package/dist/backend/errors.cjs.map +1 -1
  58. package/dist/backend/errors.d.cts +8 -11
  59. package/dist/backend/errors.d.ts +8 -11
  60. package/dist/backend/errors.js.map +1 -1
  61. package/dist/backend/message.cjs +4 -1
  62. package/dist/backend/message.cjs.map +1 -1
  63. package/dist/backend/message.js +4 -1
  64. package/dist/backend/message.js.map +1 -1
  65. package/dist/version.cjs +1 -1
  66. package/dist/version.js +1 -1
  67. package/dist/workflows/agent.d.cts +37 -37
  68. package/dist/workflows/agent.d.ts +37 -37
  69. package/package.json +19 -19
  70. package/dist/{types-BQ-3LdkE.d.ts → types-C3Fnr6yY.d.ts} +8 -8
  71. 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, generateObject, jsonSchema, streamText } from 'ai';
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, z, ZodArray, ZodEnum } from 'zod';
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 generateObject({
63
+ const { output, response, finishReason, usage } = await generateText({
60
64
  temperature: 0,
61
65
  ...await this.transformInput(input),
62
66
  abortSignal: run.signal,
63
- ...schema instanceof ZodSchema ? {
64
- schema,
65
- output: (schema._input || schema) instanceof ZodArray ? "array" : (schema._input || schema) instanceof ZodEnum ? "enum" : "object"
66
- } : {
67
- schema: schema.schema ? jsonSchema(schema.schema) : z.any(),
68
- schemaName: schema.name,
69
- schemaDescription: schema.description
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: response.object,
108
+ object: output,
74
109
  output: new ChatModelOutput([
75
- new AssistantMessage(JSON.stringify(response.object, null, 2))
76
- ], extractTokenUsage(response.usage), response.finishReason)
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":";;;;;;;;;;;;;AA6CA,IAAI;AACFA,EAAAA,UAAAA,CAAWC,mBAAAA,GAAsB,KAAA;AACnC,CAAA,CAAA,MAAQ;AAER;AAEO,MAAeC,wBAEZC,SAAAA,CAAAA;EArDV;;;;AAsDkBC,EAAAA,OAAAA;EACAC,qBAAAA,GAAiC,IAAA;AAEjD,EAAA,WAAA,CAA6BC,KAAAA,EAAU;AACrC,IAAA,KAAA,EAAK,EAAA,KADsBA,KAAAA,GAAAA,KAAAA;AAE3B,IAAA,IAAI,CAAC,KAAKC,OAAAA,EAAS;AACjB,MAAA,MAAM,IAAIC,WAAW,+BAAA,CAAA;AACvB;AACA,IAAA,IAAA,CAAKJ,OAAAA,GAAUK,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,IAAIP,OAAAA,GAAkB;AACpB,IAAA,OAAO,KAAKD,KAAAA,CAAMC,OAAAA;AACpB;AAEA,EAAA,IAAIM,UAAAA,GAAqB;AACvB,IAAA,MAAME,QAAAA,GAAW,IAAA,CAAKT,KAAAA,CAAMS,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,CAAQC,OAAuBC,GAAAA,EAA0B;AACvE,IAAA,MAAMC,iBAAiBF,KAAAA,CAAME,cAAAA;AAC7B,IAAA,IAAIA,cAAAA,KAAmBA,cAAAA,YAA0BC,SAAAA,IAAaD,cAAAA,CAAeE,MAAAA,CAAAA,EAAS;AACpF,MAAA,MAAM,EAAEC,MAAAA,EAAM,GAAK,MAAM,KAAKC,gBAAAA,CAC5B;QACE,GAAGN,KAAAA;QACHI,MAAAA,EAAQF;AACV,OAAA,EACAD,GAAAA,CAAAA;AAEF,MAAA,OAAOI,MAAAA;AACT;AAEA,IAAA,MAAM,EACJE,YAAAA,EACAC,KAAAA,EACAC,QAAAA,EAAU,EAAEC,UAAUC,EAAAA,EAAE,EAAE,GACxB,MAAMC,YAAAA,CAAa;MACrBC,WAAAA,EAAa,CAAA;MACb,GAAI,MAAM,IAAA,CAAKC,cAAAA,CAAed,KAAAA,CAAAA;AAC9Be,MAAAA,WAAAA,EAAad,GAAAA,CAAIe;KACnB,CAAA;AAEA,IAAA,OAAO,IAAIC,eAAAA,CACT,IAAA,CAAKC,iBAAAA,CAAkBR,QAAAA,EAAUC,EAAAA,CAAAA,EACjCQ,iBAAAA,CAAkBX,KAAAA,CAAAA,EAClBD,YAAAA,CAAAA;AAEJ;AAEA,EAAA,MAAgBD,iBACd,EAAEF,MAAAA,EAAQ,GAAGJ,KAAAA,IACbC,GAAAA,EACmC;AACnC,IAAA,MAAM,EAAEI,MAAAA,EAAQI,QAAAA,EAAUF,cAAcC,KAAAA,EAAK,GAAK,MAAMI,YAAAA,CAAa;MACnEC,WAAAA,EAAa,CAAA;MACb,GAAI,MAAM,IAAA,CAAKC,cAAAA,CAAed,KAAAA,CAAAA;AAC9Be,MAAAA,WAAAA,EAAad,GAAAA,CAAIe,MAAAA;AACjBX,MAAAA,MAAAA,EAAAA,CAAS,MAAA;AACP,QAAA,IAAID,kBAAkBD,SAAAA,EAAW;AAC/B,UAAA,MAAM,CAACiB,IAAAA,EAAMC,WAAAA,CAAAA,GAAe;AAAC,YAAA,QAAA;YAAUjB,MAAAA,CAAOiB;;AAC9C,UAAA,MAAMC,MAAAA,GAASlB,OAAOmB,MAAAA,IAAUnB,MAAAA;AAChC,UAAA,IAAIkB,kBAAkBE,QAAAA,EAAU;AAC9B,YAAA,OAAOC,OAAOC,KAAAA,CAAM;cAAEC,OAAAA,EAASvB,MAAAA;AAAQgB,cAAAA,IAAAA;AAAMC,cAAAA;aAAY,CAAA;AAC3D;AACA,UAAA,IAAIC,kBAAkBM,OAAAA,EAAS;AAC7B,YAAA,OAAOH,OAAOI,MAAAA,CAAO;AACnBC,cAAAA,OAAAA,EAASR,MAAAA,CAAOQ,OAAAA;cAChBV,IAAAA,EAAM,EAAA;AACNC,cAAAA,WAAAA,EAAajB,MAAAA,CAAOiB;aACtB,CAAA;AACF;AACA,UAAA,OAAOI,OAAOM,MAAAA,CAAO;AAAE3B,YAAAA,MAAAA;AAAQgB,YAAAA,IAAAA;AAAMC,YAAAA;WAAY,CAAA;AACnD;AACA,QAAA,IAAIjB,OAAOA,MAAAA,EAAQ;AACjB,UAAA,OAAOqB,OAAOM,MAAAA,CAAO;YACnB3B,MAAAA,EAAQ4B,UAAAA,CAAc5B,OAAOA,MAAM,CAAA;AACnCgB,YAAAA,IAAAA,EAAMhB,MAAAA,CAAOgB,IAAAA;AACbC,YAAAA,WAAAA,EAAajB,MAAAA,CAAOiB;WACtB,CAAA;AACF;AACA,QAAA,OAAOI,OAAOQ,IAAAA,CAAK;AAAEb,UAAAA,IAAAA,EAAMhB,MAAAA,CAAOgB,IAAAA;AAAMC,UAAAA,WAAAA,EAAajB,MAAAA,CAAOiB;SAAY,CAAA;OAC1E;KACF,CAAA;AAEA,IAAA,OAAO;MACLU,MAAAA,EAAQ1B,MAAAA;AACRA,MAAAA,MAAAA,EAAQ,IAAIY,eAAAA,CACV;QAAC,IAAIiB,gBAAAA,CAAiBC,KAAKC,SAAAA,CAAU/B,MAAAA,EAAQ,MAAM,CAAA,CAAA,EAAIgC,MAAAA,EAAW5B,QAAAA,CAASE,EAAE;SAC7EQ,iBAAAA,CAAkBX,KAAAA,GAClBD,YAAAA;AAEJ,KAAA;AACF;EAEA,OAAO+B,aAAAA,CAActC,OAAuBC,GAAAA,EAA0B;AACpE,IAAA,MAAMC,iBAAiBF,KAAAA,CAAME,cAAAA;AAC7B,IAAA,IAAIA,cAAAA,KAAmBA,cAAAA,YAA0BC,SAAAA,IAAaD,cAAAA,CAAeE,MAAAA,CAAAA,EAAS;AACpF,MAAA,MAAM,EAAEC,MAAAA,EAAM,GAAK,MAAM,KAAKC,gBAAAA,CAC5B;QACE,GAAGN,KAAAA;QACHI,MAAAA,EAAQF;AACV,OAAA,EACAD,GAAAA,CAAAA;AAEF,MAAA,MAAMI,MAAAA;AACN,MAAA;AACF;AAEA,IAAA,IAAI,CAAC,KAAKnB,qBAAAA,IAAyB,CAACqD,QAAQvC,KAAAA,CAAMwC,KAAAA,IAAS,EAAE,CAAA,EAAG;AAC9D,MAAA,MAAM/B,QAAAA,GAAW,MAAM,IAAA,CAAKV,OAAAA,CAAQC,OAAOC,GAAAA,CAAAA;AAC3C,MAAA,MAAMQ,QAAAA;AACN,MAAA;AACF;AAEA,IAAA,MAAM,EACJgC,YACAjC,KAAAA,EAAOkC,YAAAA,EACPnC,cAAcoC,mBAAAA,EACdlC,QAAAA,EAAUmC,eAAAA,EAAe,GACvBC,UAAAA,CAAW;MACbhC,WAAAA,EAAa,CAAA;MACb,GAAI,MAAM,IAAA,CAAKC,cAAAA,CAAed,KAAAA,CAAAA;AAC9Be,MAAAA,WAAAA,EAAad,GAAAA,CAAIe;KACnB,CAAA;AAEA,IAAA,IAAI8B,WAAAA,GAAc,IAAA;AAClB,IAAA,MAAMC,iBAAAA,uBAAwBC,GAAAA,EAAAA;AAC9B,IAAA,WAAA,MAAiBC,SAASR,UAAAA,EAAY;AACpC,MAAA,IAAIS,OAAAA;AACJ,MAAA,QAAQD,MAAME,IAAAA;QACZ,KAAK,YAAA;AACHL,UAAAA,WAAAA,GAAc,KAAA;AACdI,UAAAA,OAAAA,GAAU,IAAIhB,gBAAAA,CAAiBe,KAAAA,CAAMG,MAAM,EAAC,EAAGH,MAAMtC,EAAE,CAAA;AACvD,UAAA,MAAM,IAAIM,eAAAA,CAAgB;AAACiC,YAAAA;AAAQ,WAAA,CAAA;AACnC,UAAA;QACF,KAAK,UAAA;AACHJ,UAAAA,WAAAA,GAAc,KAAA;AACd,UAAA;AACF,QAAA,KAAK,kBAAA,EAAoB;AACvB,UAAA,IAAI,CAAC9C,MAAMqD,sBAAAA,EAAwB;AACjC,YAAA;AACF;AAEA,UAAA,MAAMC,KAAAA,GAAsB;YAC1BH,IAAAA,EAAM,WAAA;AACNI,YAAAA,QAAAA,EAAUN,KAAAA,CAAMM,QAAAA;AAChBC,YAAAA,UAAAA,EAAYP,KAAAA,CAAMtC,EAAAA;YAClBX,KAAAA,EAAO;AACT,WAAA;AACA+C,UAAAA,iBAAAA,CAAkBU,GAAAA,CAAIR,KAAAA,CAAMtC,EAAAA,EAAI2C,KAAAA,CAAAA;AAChC,UAAA,MAAMJ,WAAU,IAAIhB,gBAAAA,CAAiBoB,OAAO,EAAC,EAAGL,MAAMtC,EAAE,CAAA;AACxD,UAAA,MAAM,IAAIM,eAAAA,CAAgB;AAACiC,YAAAA;AAAQ,WAAA,CAAA;AACnC,UAAA;AACF;AACA,QAAA,KAAK,kBAAA,EAAoB;AACvB,UAAA,IAAI,CAAClD,MAAMqD,sBAAAA,EAAwB;AACjC,YAAA;AACF;AAEA,UAAA,IAAIJ,MAAMS,KAAAA,EAAO;AACf,YAAA,MAAMJ,KAAAA,GAAQP,iBAAAA,CAAkBY,GAAAA,CAAIV,KAAAA,CAAMtC,EAAE,CAAA;AAC5C,YAAA,MAAMuC,QAAAA,GAAU,IAAIhB,gBAAAA,CAAiB;cAAE,GAAGoB,KAAAA;AAAOtD,cAAAA,KAAAA,EAAOiD,KAAAA,CAAMS;aAAM,EAAG,EAAC,EAAGT,KAAAA,CAAMtC,EAAE,CAAA;AACnF,YAAA,MAAM,IAAIM,eAAAA,CAAgB;AAACiC,cAAAA;AAAQ,aAAA,CAAA;AACrC;AACA,UAAA;AACF;AACA,QAAA,KAAK,WAAA,EAAa;AAChBJ,UAAAA,WAAAA,GAAc,KAAA;AACd,UAAA,MAAMc,gBAAAA,GAAmBb,iBAAAA,CAAkBY,GAAAA,CAAIV,KAAAA,CAAMO,UAAU,CAAA;AAC/D,UAAA,IAAII,gBAAAA,EAAkB;AACpBb,YAAAA,iBAAAA,CAAkBc,MAAAA,CAAOZ,MAAMO,UAAU,CAAA;AACzC,YAAA;AACF;AACAN,UAAAA,OAAAA,GAAU,IAAIhB,gBAAAA,CACZ;AACEiB,YAAAA,IAAAA,EAAMF,KAAAA,CAAME,IAAAA;AACZK,YAAAA,UAAAA,EAAYP,KAAAA,CAAMO,UAAAA;AAClBD,YAAAA,QAAAA,EAAUN,KAAAA,CAAMM,QAAAA;AAChBvD,YAAAA,KAAAA,EAAOiD,KAAAA,CAAMjD;WACf,EACA,EAAC,EACDiD,KAAAA,CAAMO,UAAU,CAAA;AAElB,UAAA,MAAM,IAAIvC,eAAAA,CAAgB;AAACiC,YAAAA;AAAQ,WAAA,CAAA;AACnC,UAAA;AACF;QACA,KAAK,OAAA;AACH,UAAA,MAAM,IAAIY,eAAe,iBAAA,EAAmB;YAACb,KAAAA,CAAMc;AAAe,WAAA,CAAA;QACpE,KAAK,aAAA;AACHjB,UAAAA,WAAAA,GAAc,KAAA;AACdI,UAAAA,OAAAA,GAAU,IAAIc,WAAAA,CACZ;AACEb,YAAAA,IAAAA,EAAMF,KAAAA,CAAME,IAAAA;AACZK,YAAAA,UAAAA,EAAYP,KAAAA,CAAMO,UAAAA;AAClBD,YAAAA,QAAAA,EAAUN,KAAAA,CAAMM,QAAAA;AAChBlD,YAAAA,MAAAA,EAAQ4C,KAAAA,CAAM5C;AAChB,WAAA,EACA,EAAC,EACD,CAAA,YAAA,EAAe4C,KAAAA,CAAMO,UAAU,CAAA,CAAE,CAAA;AAEnC,UAAA,MAAM,IAAIvC,eAAAA,CAAgB;AAACiC,YAAAA;AAAQ,WAAA,CAAA;AACnC,UAAA;AAKJ;AACF;AAEA,IAAA,IAAIJ,WAAAA,IAAe,CAAC7C,GAAAA,CAAIe,MAAAA,CAAOiD,OAAAA,EAAS;AACtC,MAAA,MAAM,IAAIH,eAAe,+BAAA,CAAA;AAC3B;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,CAACtD,KAAAA,EAAOD,YAAAA,EAAc2D,CAAAA,CAAAA,GAAK,MAAMC,QAAQC,GAAAA,CAAI;AACjD1B,QAAAA,YAAAA;AACAC,QAAAA,mBAAAA;AACAC,QAAAA;AACD,OAAA,CAAA;AACD,MAAA,MAAMyB,SAAAA,GAAY,IAAIpD,eAAAA,CAAgB,EAAE,CAAA;AACxCoD,MAAAA,SAAAA,CAAU7D,KAAAA,GAAQW,kBAAkBX,KAAAA,CAAAA;AACpC6D,MAAAA,SAAAA,CAAU9D,YAAAA,GAAeA,YAAAA;AACzB,MAAA,MAAM8D,SAAAA;AACR,KAAA,CAAA,OAASC,CAAAA,EAAG;AACV,MAAA,IAAI,CAACrE,GAAAA,CAAIe,MAAAA,CAAOiD,OAAAA,EAAS;AACvB,QAAA,MAAMK,CAAAA;AACR;AACF;AACF;AAEA,EAAA,MAAgBxD,eACdd,KAAAA,EACkE;AAClE,IAAA,MAAMwC,KAAAA,GAAQ,MAAM2B,OAAAA,CAAQC,GAAAA,CAAAA,CACzBpE,KAAAA,CAAMwC,SAAS,EAAA,EAAI+B,GAAAA,CAAI,OAAOC,IAAAA,MAAU;AACvCpD,MAAAA,IAAAA,EAAMoD,IAAAA,CAAKpD,IAAAA;AACXC,MAAAA,WAAAA,EAAamD,IAAAA,CAAKnD,WAAAA;AAClBoD,MAAAA,WAAAA,EAAazC,UAAAA,CAAW,MAAMwC,IAAAA,CAAKE,kBAAAA,EAAkB;AACvD,KAAA,CAAA,CAAA,CAAA;AAGF,IAAA,MAAMhE,QAAAA,GAAWV,KAAAA,CAAMU,QAAAA,CAAS6D,GAAAA,CAAI,CAACI,GAAAA,KAAAA;AACnC,MAAA,IAAIA,eAAeC,aAAAA,EAAe;AAChCD,QAAAA,GAAAA,GAAME,oBAAoBF,GAAAA,CAAAA;AAC5B;AAEA,MAAA,IAAIA,eAAezC,gBAAAA,EAAkB;AACnC,QAAA,OAAO;UAAE4C,IAAAA,EAAM,WAAA;AAAaC,UAAAA,OAAAA,EAASJ,GAAAA,CAAII;AAAQ,SAAA;AACnD,OAAA,MAAA,IAAWJ,eAAeX,WAAAA,EAAa;AACrC,QAAA,OAAO;UAAEc,IAAAA,EAAM,MAAA;AAAQC,UAAAA,OAAAA,EAASJ,GAAAA,CAAII;AAAQ,SAAA;AAC9C,OAAA,MAAA,IAAWJ,eAAeK,WAAAA,EAAa;AACrC,QAAA,OAAO;UAAEF,IAAAA,EAAM,MAAA;AAAQC,UAAAA,OAAAA,EAASJ,GAAAA,CAAII;AAAQ,SAAA;AAC9C,OAAA,MAAA,IAAWJ,eAAeM,aAAAA,EAAe;AACvC,QAAA,OAAO;UAAEH,IAAAA,EAAM,QAAA;UAAUC,OAAAA,EAASJ,GAAAA,CAAII,QAAQR,GAAAA,CAAI,CAACW,SAASA,IAAAA,CAAK9B,IAAI,CAAA,CAAE+B,IAAAA,CAAK,IAAA;AAAM,SAAA;AACpF;AACA,MAAA,OAAO;AAAEL,QAAAA,IAAAA,EAAMH,GAAAA,CAAIG,IAAAA;AAAMC,QAAAA,OAAAA,EAASJ,GAAAA,CAAII;AAAQ,OAAA;KAChD,CAAA;AAEA,IAAA,IAAIK,UAAAA;AACJ,IAAA,IAAIpF,KAAAA,CAAMoF,UAAAA,IAAcpF,KAAAA,CAAMoF,UAAAA,YAAsBC,IAAAA,EAAM;AACxD,MAAA,IAAI,IAAA,CAAKC,iBAAAA,CAAkBC,QAAAA,CAAS,QAAA,CAAA,EAAW;AAC7CH,QAAAA,UAAAA,GAAa;UACXjC,IAAAA,EAAM,MAAA;AACNI,UAAAA,QAAAA,EAAUvD,MAAMoF,UAAAA,CAAWhE;AAC7B,SAAA;OACF,MAAO;AACL,QAAA,IAAA,CAAKoE,MAAAA,CAAOC,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAC7D;AACF,KAAA,MAAA,IAAWzF,MAAMoF,UAAAA,EAAY;AAC3B,MAAA,IAAI,IAAA,CAAKE,iBAAAA,CAAkBC,QAAAA,CAASvF,KAAAA,CAAMoF,UAAU,CAAA,EAAG;AACrDA,QAAAA,UAAAA,GAAapF,KAAAA,CAAMoF,UAAAA;OACrB,MAAO;AACL,QAAA,IAAA,CAAKI,MAAAA,CAAOC,IAAAA,CAAK,CAAA,iCAAA,EAAoCzF,KAAAA,CAAMoF,UAAU,CAAA,mBAAA,CAAqB,CAAA;AAC5F;AACF;AAEA,IAAA,OAAO;AACL,MAAA,GAAG,IAAA,CAAKM,UAAAA;MACR,GAAG1F,KAAAA;AACHoF,MAAAA,UAAAA;AACAjG,MAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AACZqD,MAAAA,KAAAA,EAAOmD,SAASnD,KAAAA,EAAO,CAAC,EAAEpB,IAAAA,EAAM,GAAGoD,MAAAA,KAAW;AAACpD,QAAAA,IAAAA;AAAMoD,QAAAA;AAAK,OAAA,CAAA;AAC1D9D,MAAAA;AACF,KAAA;AACF;AAEUQ,EAAAA,iBAAAA,CACRR,UACAC,EAAAA,EACW;AACX,IAAA,IAAID,QAAAA,CAASkF,SAAS,CAAA,EAAG;AACvBjF,MAAAA,EAAAA,GAAK0B,MAAAA;AACP;AACA,IAAA,OAAO3B,QAAAA,CAASmF,OAAAA,CAAQ,CAAClB,GAAAA,KAAAA;AACvB,MAAA,IAAIA,GAAAA,CAAIG,SAAS,MAAA,EAAQ;AACvB,QAAA,OAAO,IAAId,WAAAA,CACTW,GAAAA,CAAII,OAAAA,CAAQe,MAAAA,CAAO,CAACZ,IAAAA,KAASA,IAAAA,CAAK/B,IAAAA,KAAS,aAAA,CAAA,EAC3CwB,GAAAA,CAAIoB,iBACJpF,EAAAA,CAAAA;AAEJ;AACA,MAAA,OAAO,IAAIuB,gBAAAA,CACTyC,GAAAA,CAAII,OAAAA,EACJJ,GAAAA,CAAIoB,iBACJpF,EAAAA,CAAAA;KAEJ,CAAA;AACF;EAEAqF,cAAAA,GAAiB;AACf,IAAA,OAAO;AACL,MAAA,GAAG,MAAMA,cAAAA,EAAAA;AACTtG,MAAAA,UAAAA,EAAY,IAAA,CAAKA,UAAAA;AACjBN,MAAAA,OAAAA,EAAS,IAAA,CAAKA,OAAAA;AACdF,MAAAA,qBAAAA,EAAuB,IAAA,CAAKA;AAC9B,KAAA;AACF;AAEA,EAAA,MAAM+G,aAAa,EAAEvG,UAAAA,EAAYN,OAAAA,EAAS,GAAG8G,UAAAA,EAAoD;AAC/F,IAAA,MAAMC,QAAAA,GAAW,MAAMnH,SAAAA,CAAUoH,QAAAA,CAAS,GAAG1G,UAAAA,CAAAA,CAAAA,EAAcN,OAAAA,CAAAA,CAAS,CAAA;AACpE,IAAA,IAAI,EAAE+G,oBAAoBpH,eAAAA,CAAAA,EAAkB;AAC1C,MAAA,MAAM,IAAIsH,MAAM,4BAAA,CAAA;AAClB;AACAF,IAAAA,QAAAA,CAASG,OAAAA,EAAO;AAChBC,IAAAA,MAAAA,CAAOC,OAAO,IAAA,EAAM;MAClB,GAAGN,QAAAA;AACH/G,MAAAA,KAAAA,EAAOgH,QAAAA,CAAShH;KAClB,CAAA;AACF;AACF","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,CAAkB;AACvBd,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>, 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<string>({\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"]}
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<string>, string>;
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<string>, string>;
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,CAAkB;AACvBd,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>, 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<string>({\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"]}
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
- const reasoning = message?.reasoning_content;
123
- if (reasoning) {
122
+ if (message?.reasoning_content) {
124
123
  const msg = new message_cjs.AssistantMessage({
125
124
  type: "text",
126
- text: reasoning
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: typeof content.output.value === "string" ? content.output.value : JSON.stringify(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
- const reasoning = message?.reasoning_content;
117
- if (reasoning) {
116
+ if (message?.reasoning_content) {
118
117
  const msg = new AssistantMessage({
119
118
  type: "text",
120
- text: reasoning
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: typeof content.output.value === "string" ? content.output.value : JSON.stringify(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":";;;;;;;;;;;;;;;AA4BA,MAAOA,IAAAA,GAAO,iBAAA,CAAkB,sBAAA,CAAuB,SAAA,CAAU,IAAA;AAY1D,MAAMC,yBAAyBC,SAAAA,CAAAA;EAxCtC;;;;AAyCqBC,EAAAA,MAAAA;EACHC,OAAAA,GAA4BC,OAAAA,CAAQC,KAAKC,KAAAA,CAAM;IAC7DC,SAAAA,EAAW;AAAC,MAAA,SAAA;AAAW,MAAA,SAAA;AAAW,MAAA;;IAClCC,OAAAA,EAAS;GACX,CAAA;EACgBC,iBAAAA,GAAkD;AAAC,IAAA,MAAA;AAAQ,IAAA;;AAE3E,EAAA,IAAIC,UAAAA,GAAa;AACf,IAAA,OAAO,SAAA;AACT;AAEA,EAAA,WAAA,CACkBC,OAAAA,GAAUC,MAAAA,CAAO,oBAAA,EAAsB,2BAAA,GACvDV,MAAAA,EACA;AACA,IAAA,KAAA,EAAK,EAAA,KAHWS,OAAAA,GAAAA,OAAAA;AAIhB,IAAA,IAAA,CAAKT,MAAAA,GAASW,aAAAA,CAAcC,MAAAA,CAAOZ,MAAAA,CAAAA;AACrC;AAEAa,EAAAA,MAAAA,CAAOA,MAAAA,EAAoB;AACzB,IAAA,KAAA,CAAMA,OAAOA,MAAAA,CAAAA;AACb,IAAA,KAAA,MAAWC,IAAAA,IAAQ;AAAC,MAAA;AAA0C,KAAA,EAAA;AAC5D,MAAA,IAAI,IAAA,CAAKC,UAAAA,CAAWD,IAAAA,CAAAA,KAAUE,MAAAA,EAAW;AACvC,QAAA,IAAA,CAAKD,UAAAA,CAAWD,IAAAA,CAAAA,GAAQE,MAAAA;AACxB,QAAA,MAAM,IAAIC,mBAAAA,CACR,CAAA,SAAA,EAAYH,IAAAA,CAAAA,qDAAAA,CAA2D,CAAA;AAE3E;AACF;AACA,IAAA,OAAO,IAAA;AACT;EAEA,MAAgBI,OAAAA,CAAQC,OAAuBC,GAAAA,EAAyB;AACtE,IAAA,MAAM,EAAEC,MAAAA,EAAM,GAAK,MAAM,IAAA,CAAKrB,MAAAA,CAAOsB,SAASC,QAAAA,CAAS;MACrD,GAAI,MAAM,IAAA,CAAKC,YAAAA,CAAaL,KAAAA,CAAAA;AAC5BM,MAAAA,MAAAA,EAAQL,GAAAA,CAAIK;KACd,CAAA;AACA,IAAA,MAAM,EAAEC,QAAAA,EAAUC,YAAAA,EAAcC,KAAAA,EAAK,GAAK,IAAA,CAAKC,aAAAA,CAC7CR,MAAAA,CAAOS,OAAAA,EACPT,MAAAA,CAAOO,KAAAA,EACPP,MAAAA,CAAOU,EAAE,CAAA;AAEX,IAAA,OAAO,IAAIC,eAAAA,CAAgBN,QAAAA,EAAUE,KAAAA,EAAOD,YAAAA,CAAAA;AAC9C;EAEA,OAAOM,aAAAA,CAAcd,OAAuBC,GAAAA,EAA0B;AAEpE,IAAA,MAAMc,MAAAA,GAAS,MAAM,IAAA,CAAKlC,MAAAA,CAAOsB,SAASa,cAAAA,CAAe;MACvD,GAAI,MAAM,IAAA,CAAKX,YAAAA,CAAaL,KAAAA,CAAAA;AAC5BM,MAAAA,MAAAA,EAAQL,GAAAA,CAAIK,MAAAA;MACZW,YAAAA,EAAc;KAChB,CAAA;AAEA,IAAA,MAAMC,WAAAA,uBAAkBC,GAAAA,EAAAA;AACxB,IAAA,WAAA,MAAiBC,OAAOL,MAAAA,EAAQ;AAC9B,MAAA,IAAId,GAAAA,CAAIK,OAAOe,OAAAA,EAAS;AACtBN,QAAAA,MAAAA,CAAOO,UAAAA,CAAWC,KAAAA,CAAMtB,GAAAA,CAAIK,MAAAA,CAAOe,OAAO,CAAA;AAC1C,QAAA;AACF;AACA,MAAA,IAAI,CAACG,KAAAA,CAAMC,OAAAA,CAAQL,GAAAA,CAAIM,IAAAA,EAAMf,OAAAA,CAAAA,EAAU;AACrC,QAAA;AACF;AACA,MAAA,MAAM,EAAEJ,QAAAA,EAAUC,YAAAA,EAAcC,KAAAA,EAAK,GAAK,KAAKC,aAAAA,CAC7CU,GAAAA,CAAIM,IAAAA,CAAKf,OAAAA,CAAQgB,IAAI,CAAC,EAAEC,KAAAA,EAAO,GAAGC,QAAAA,MAAc;QAAE,GAAGA,MAAAA;QAAQC,OAAAA,EAASF;AAAM,OAAA,CAAA,GAC5ER,GAAAA,CAAIM,IAAAA,CAAKjB,OACTW,GAAAA,CAAIM,IAAAA,CAAKd,IACTM,WAAAA,CAAAA;AAEF,MAAA,MAAM,IAAIL,eAAAA,CAAgBN,QAAAA,EAAUE,KAAAA,EAAOD,YAAAA,CAAAA;AAC7C;AACF;EAEUE,aAAAA,CACRC,OAAAA,EACAF,KAAAA,EACAG,EAAAA,EACAmB,iBAAAA,EACA;AACA,IAAA,IAAI,CAACA,iBAAAA,EAAmB;AACtBA,MAAAA,iBAAAA,uBAAwBZ,GAAAA,EAAAA;AAC1B;AAEA,IAAA,MAAMa,eAAAA,mBAAkB,MAAA,CAAA,CACtBC,UAAAA,EACAC,YAAAA,KAAAA;AAIA,MAAA,IAAI,CAACA,YAAAA,IAAgB,CAACD,UAAAA,EAAY;AAChC,QAAA,CAACC,YAAAA,EAAcD,UAAAA,CAAAA,GAAcE,OAAAA,CAAQJ,iBAAAA,EAAmB;AAAC,UAAA,EAAA;AAAI,UAAA;AAAG,SAAA,CAAA;AAClE;AACA,MAAA,IAAI,CAACE,UAAAA,EAAY;AACfA,QAAAA,UAAAA,GAAaF,iBAAAA,CAAkBK,GAAAA,CAAIF,YAAAA,CAAAA,IAAiB,EAAA;AACtD;AACA,MAAA,IAAI,CAACD,UAAAA,EAAY;AACfA,QAAAA,UAAAA,GAAa,iBAAiBI,WAAAA,CAAY,EAAA,CAAA,CAAIC,QAAAA,CAAS,KAAA,CAAA,CAAA,CAAA;AACzD;AACAP,MAAAA,iBAAAA,CAAkBQ,GAAAA,CAAIL,cAAcD,UAAAA,CAAAA;AACpC,MAAA,OAAO;AACLA,QAAAA,UAAAA;QACAO,QAAAA,EAAUN;AACZ,OAAA;KACF,EApBwB,iBAAA,CAAA;AAsBxB,IAAA,OAAO;MACL1B,YAAAA,EAAciC,QAAAA,CAAS9B,SAAS,CAACkB,MAAAA,KAAWa,QAAQb,MAAAA,EAAQc,aAAAA,CAAAA,CAAAA,EACxDA,aAAAA;AACJlC,MAAAA,KAAAA,EAAOA,KAAAA,GACH;AACEmC,QAAAA,gBAAAA,EAAkBnC,MAAMoC,iBAAAA,IAAqB,CAAA;AAC7CC,QAAAA,YAAAA,EAAcrC,MAAMsC,aAAAA,IAAiB,CAAA;AACrCC,QAAAA,WAAAA,EAAavC,MAAMwC,YAAAA,IAAgB;OACrC,GACApD,MAAAA;AACJU,MAAAA,QAAAA,EAAUI,OAAAA,CACPuC,OAAAA,CAAQ,CAAC,EAAEpB,SAAO,KAAE;AACnB,QAAA,MAAMvB,WAAsB,EAAA;AAG5B,QAAA,MAAM4C,YAAYrB,OAAAA,EAASsB,iBAAAA;AAC3B,QAAA,IAAID,SAAAA,EAAW;AACb,UAAA,MAAME,GAAAA,GAAM,IAAIC,gBAAAA,CAAiB;YAAEC,IAAAA,EAAM,MAAA;YAAQC,IAAAA,EAAML;WAAU,EAAG,IAAIvC,EAAAA,CAAAA;AACxEL,UAAAA,QAAAA,CAASkD,KAAKJ,GAAAA,CAAAA;AAChB;AACA,QAAA,IAAIvB,SAAS4B,OAAAA,EAAS;AACpB,UAAA,MAAML,GAAAA,GAAM,IAAIC,gBAAAA,CAAiB;YAAEC,IAAAA,EAAM,MAAA;AAAQC,YAAAA,IAAAA,EAAM1B,OAAAA,CAAQ4B;WAAQ,EAAG,IAAI9C,EAAAA,CAAAA;AAC9EL,UAAAA,QAAAA,CAASkD,KAAKJ,GAAAA,CAAAA;AAChB;AACA,QAAA,IAAIvB,OAAAA,EAAS6B,UAAAA,IAAc7B,OAAAA,CAAQ6B,UAAAA,CAAWC,SAAS,CAAA,EAAG;AACxD,UAAA,MAAMC,SAAyB,EAAA;AAC/B,UAAA,KAAA,MAAWC,QAAAA,IAAYhC,QAAQ6B,UAAAA,EAAY;AACzCE,YAAAA,MAAAA,CAAOJ,IAAAA,CAAK;cACVF,IAAAA,EAAM,WAAA;AACN,cAAA,GAAGvB,eAAAA,CAAgB8B,QAAAA,CAASlD,EAAAA,EAAIkD,QAAAA,CAASC,SAASpE,IAAI,CAAA;AACtDK,cAAAA,KAAAA,EAAO8D,SAASC,QAAAA,CAASC;aAC3B,CAAA;AACF;AACA,UAAA,MAAMX,MAAM,IAAIC,gBAAAA,CAAiBO,MAAAA,EAAQ,IAAIjD,EAAAA,CAAAA;AAC7CL,UAAAA,QAAAA,CAASkD,KAAKJ,GAAAA,CAAAA;AAChB;AACA,QAAA,IAAIvB,SAASmC,OAAAA,EAAS;AACpB,UAAA,MAAMZ,GAAAA,GAAM,IAAIC,gBAAAA,CAAiB;YAAEC,IAAAA,EAAM,MAAA;AAAQC,YAAAA,IAAAA,EAAM1B,OAAAA,CAAQmC;WAAQ,EAAG,IAAIrD,EAAAA,CAAAA;AAC9EL,UAAAA,QAAAA,CAASkD,KAAKJ,GAAAA,CAAAA;AAChB;AACA,QAAA,OAAO9C,QAAAA;OACT,CAAA,CACC2D,OAAOC,QAAAA;AACZ,KAAA;AACF;AAEA,EAAA,MAAgB9D,aAAa+D,SAAAA,EAAoD;AAC/E,IAAA,MAAMpE,KAAAA,GAAwB;AAAE,MAAA,GAAG,IAAA,CAAKJ,UAAAA;MAAY,GAAGwE;AAAU,KAAA;AACjE,IAAA,MAAMC,KAAAA,GAAkC,MAAMC,OAAAA,CAAQC,GAAAA,CAAAA,CACnDvE,KAAAA,CAAMqE,SAAS,EAAA,EAAI1C,GAAAA,CAAI,OAAO6C,IAAAA,MAAU;MACvCjB,IAAAA,EAAM,UAAA;MACNQ,QAAAA,EAAU;AACRpE,QAAAA,IAAAA,EAAM6E,IAAAA,CAAK7E,IAAAA;AACX8E,QAAAA,WAAAA,EAAaD,IAAAA,CAAKC,WAAAA;QAClB7E,UAAAA,EAAY,MAAM4E,KAAKE,kBAAAA;AACzB;AACF,KAAA,CAAA,CAAA,CAAA;AAGF,IAAA,MAAMC,UAAAA,GAAsE;MAC1EC,UAAAA,EAAY/E,MAAAA;MACZgF,gBAAAA,EAAkBhF;AACpB,KAAA;AACA,IAAA,IAAIG,MAAM4E,UAAAA,EAAY;AACpB,MAAA,IAAI5E,KAAAA,CAAM4E,sBAAsBE,IAAAA,EAAM;AACpCH,QAAAA,UAAAA,CAAWC,UAAAA,GAAa;UACtBrB,IAAAA,EAAM,UAAA;UACNQ,QAAAA,EAAU;AAAEpE,YAAAA,IAAAA,EAAMK,MAAM4E,UAAAA,CAAWjF;AAAK;AAC1C,SAAA;AACF,OAAA,MAAA,IAAW,IAAA,CAAKP,iBAAAA,CAAkB2F,QAAAA,CAAS/E,KAAAA,CAAM4E,UAAU,CAAA,EAAG;AAC5DD,QAAAA,UAAAA,CAAWE,mBAAmB7E,KAAAA,CAAM4E,UAAAA;AACtC;AACF;AAEA,IAAA,OAAO;AACLtF,MAAAA,OAAAA,EAAS,IAAA,CAAKA,OAAAA;AACdiB,MAAAA,QAAAA,EAAUP,KAAAA,CAAMO,QAAAA,CAAS2C,OAAAA,CAAQ,CAACpB,OAAAA,KAAAA;AAChC,QAAA,IAAIA,mBAAmBkD,WAAAA,EAAa;AAClC,UAAA,OAAOlD,OAAAA,CAAQ4B,OAAAA,CAAQ/B,GAAAA,CACrB,CAAC+B,OAAAA,MAAkC;YACjCuB,IAAAA,EAAM,MAAA;YACNvB,OAAAA,EACE,OAAOA,OAAAA,CAAQwB,MAAAA,CAAOC,KAAAA,KAAU,QAAA,GAC5BzB,QAAQwB,MAAAA,CAAOC,KAAAA,GACfC,IAAAA,CAAKC,SAAAA,CAAU3B,OAAAA,CAAAA;AACrB4B,YAAAA,YAAAA,EAAc5B,OAAAA,CAAQzB;WACxB,CAAA,CAAA;AAEJ,SAAA,MAAA,IAAWH,mBAAmByD,aAAAA,EAAe;AAC3C,UAAA,OAAOzD,OAAAA,CAAQ4B,OAAAA,CAAQ/B,GAAAA,CACrB,CAAC+B,OAAAA,MAAoC;YACnCuB,IAAAA,EAAM,QAAA;AACNvB,YAAAA,OAAAA,EAASA,OAAAA,CAAQF;WACnB,CAAA,CAAA;AAEJ,SAAA,MAAA,IAAW1B,mBAAmBwB,gBAAAA,EAAkB;AAC9C,UAAA,OAAOxB,OAAAA,CAAQ4B,OAAAA,CAAQ/B,GAAAA,CACrB,CAAC+B,OAAAA,MAAuC;YACtCuB,IAAAA,EAAM,WAAA;YACN,GAAIvB,OAAAA,CAAQH,SAAS,MAAA,IAAU;AAC7BG,cAAAA,OAAAA,EAASA,OAAAA,CAAQF;AACnB,aAAA;YACA,GAAIE,OAAAA,CAAQH,SAAS,WAAA,IAAe;AAClC3C,cAAAA,EAAAA,EAAI8C,OAAAA,CAAQzB,UAAAA;cACZsB,IAAAA,EAAM,UAAA;cACNQ,QAAAA,EAAU;AACRpE,gBAAAA,IAAAA,EAAM+D,OAAAA,CAAQlB,QAAAA;gBACdwB,SAAAA,EAAWoB,IAAAA,CAAKC,SAAAA,CAAU3B,OAAAA,CAAQ1D,KAAK;AACzC;AACF,aAAA;AACA,YAAA,GAAA,CAAI,MAAA;AACF,cAAA,IAAI0D,OAAAA,CAAQH,SAAS,MAAA,EAAQ;AAC3B,gBAAA,MAAM,IAAIiC,MAAM,8CAAA,CAAA;AAClB;AACA,cAAA,OAAO,EAAC;aACV;WACF,CAAA,CAAA;SAEJ,MAAO;AACL,UAAA,OAAO;AAAC1D,YAAAA,OAAAA,CAAQ2D,OAAAA;;AAClB;OACF,CAAA;AACAC,MAAAA,OAAAA,EAAS,KAAK7G,MAAAA,CAAO6G,OAAAA;AACrBC,MAAAA,SAAAA,EAAW,KAAK9G,MAAAA,CAAO8G,SAAAA;MACvBtB,KAAAA,EAAOuB,OAAAA,CAAQvB,KAAAA,CAAAA,GAASxE,MAAAA,GAAYwE,KAAAA;MACpCwB,cAAAA,EAAgBhG,MAAAA;AAChB,MAAA,GAAIG,MAAM6F,cAAAA,IAAkB;QAC1BA,cAAAA,EAAgB;AAAEtC,UAAAA,IAAAA,EAAM7E,IAAAA,CAAKoH;AAAY;AAC3C,OAAA;AACAC,MAAAA,IAAAA,EAAM/F,KAAAA,CAAM+F,IAAAA;AACZC,MAAAA,gBAAAA,EAAkBhG,KAAAA,CAAMgG,gBAAAA;AACxBC,MAAAA,WAAAA,EAAajG,KAAAA,CAAMiG,WAAAA;AACnBC,MAAAA,CAAAA,EAAGlG,KAAAA,CAAMkG,CAAAA;AACTC,MAAAA,SAAAA,EAAWnG,KAAAA,CAAMmG,SAAAA;AACjBC,MAAAA,eAAAA,EAAiBpG,KAAAA,CAAMoG,eAAAA;AACvBC,MAAAA,IAAAA,EAAMrG,KAAAA,CAAMsG,aAAAA;AACZC,MAAAA,IAAAA,EAAMvG,KAAAA,CAAMuG,IAAAA;MACZ,GAAG5B;AACL,KAAA;AACF;EAEA6B,cAAAA,GAAiB;AACf,IAAA,OAAO;AACL,MAAA,GAAG,MAAMA,cAAAA,EAAAA;AACTlH,MAAAA,OAAAA,EAAS,IAAA,CAAKA,OAAAA;MACdM,UAAAA,EAAY6G,WAAAA,CAAY,KAAK7G,UAAU,CAAA;AACvCf,MAAAA,MAAAA,EAAQ,IAAA,CAAKA;AACf,KAAA;AACF;AAEA6H,EAAAA,YAAAA,CAAaC,QAAAA,EAAkD;AAC7DC,IAAAA,MAAAA,CAAOC,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF","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<{