beeai-framework 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/amazon-bedrock/backend/client.cjs +3 -1
- package/dist/adapters/amazon-bedrock/backend/client.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/client.js +3 -1
- package/dist/adapters/amazon-bedrock/backend/client.js.map +1 -1
- package/dist/adapters/anthropic/backend/client.cjs +3 -1
- package/dist/adapters/anthropic/backend/client.cjs.map +1 -1
- package/dist/adapters/anthropic/backend/client.js +3 -1
- package/dist/adapters/anthropic/backend/client.js.map +1 -1
- package/dist/adapters/azure-openai/backend/client.cjs +3 -1
- package/dist/adapters/azure-openai/backend/client.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/client.js +3 -1
- package/dist/adapters/azure-openai/backend/client.js.map +1 -1
- package/dist/adapters/google-vertex/backend/client.cjs +3 -1
- package/dist/adapters/google-vertex/backend/client.cjs.map +1 -1
- package/dist/adapters/google-vertex/backend/client.js +3 -1
- package/dist/adapters/google-vertex/backend/client.js.map +1 -1
- package/dist/adapters/groq/backend/client.cjs +3 -1
- package/dist/adapters/groq/backend/client.cjs.map +1 -1
- package/dist/adapters/groq/backend/client.js +3 -1
- package/dist/adapters/groq/backend/client.js.map +1 -1
- package/dist/adapters/ollama/backend/client.cjs +3 -1
- package/dist/adapters/ollama/backend/client.cjs.map +1 -1
- package/dist/adapters/ollama/backend/client.js +3 -1
- package/dist/adapters/ollama/backend/client.js.map +1 -1
- package/dist/adapters/openai/backend/client.cjs +3 -1
- package/dist/adapters/openai/backend/client.cjs.map +1 -1
- package/dist/adapters/openai/backend/client.js +3 -1
- package/dist/adapters/openai/backend/client.js.map +1 -1
- package/dist/adapters/vercel/backend/chat.cjs +7 -3
- package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
- package/dist/adapters/vercel/backend/chat.js +8 -4
- package/dist/adapters/vercel/backend/chat.js.map +1 -1
- package/dist/adapters/vercel/backend/utils.cjs +82 -0
- package/dist/adapters/vercel/backend/utils.cjs.map +1 -0
- package/dist/adapters/vercel/backend/utils.d.cts +30 -0
- package/dist/adapters/vercel/backend/utils.d.ts +30 -0
- package/dist/adapters/vercel/backend/utils.js +78 -0
- package/dist/adapters/vercel/backend/utils.js.map +1 -0
- package/dist/{agent-2C0Z9iYa.d.cts → agent-B60_2RXt.d.cts} +1 -1
- package/dist/{agent-DN_52QhH.d.ts → agent-BgLMNZbc.d.ts} +1 -1
- package/dist/agents/experimental/remote/agent.cjs +107 -61
- package/dist/agents/experimental/remote/agent.cjs.map +1 -1
- package/dist/agents/experimental/remote/agent.d.cts +37 -34
- package/dist/agents/experimental/remote/agent.d.ts +37 -34
- package/dist/agents/experimental/remote/agent.js +108 -62
- package/dist/agents/experimental/remote/agent.js.map +1 -1
- package/dist/agents/react/agent.d.cts +1 -1
- package/dist/agents/react/agent.d.ts +1 -1
- package/dist/agents/react/runners/base.d.cts +1 -1
- package/dist/agents/react/runners/base.d.ts +1 -1
- package/dist/agents/react/runners/deep-think/runner.d.cts +1 -1
- package/dist/agents/react/runners/deep-think/runner.d.ts +1 -1
- package/dist/agents/react/runners/default/runner.d.cts +1 -1
- package/dist/agents/react/runners/default/runner.d.ts +1 -1
- package/dist/agents/react/runners/granite/runner.d.cts +1 -1
- package/dist/agents/react/runners/granite/runner.d.ts +1 -1
- package/dist/internals/fetcher.cjs +31 -8
- package/dist/internals/fetcher.cjs.map +1 -1
- package/dist/internals/fetcher.d.cts +5 -3
- package/dist/internals/fetcher.d.ts +5 -3
- package/dist/internals/fetcher.js +32 -9
- package/dist/internals/fetcher.js.map +1 -1
- package/dist/tools/database/milvus.d.cts +2 -2
- package/dist/tools/database/milvus.d.ts +2 -2
- package/dist/tools/database/qdrant.cjs +174 -0
- package/dist/tools/database/qdrant.cjs.map +1 -0
- package/dist/tools/database/qdrant.d.cts +86 -0
- package/dist/tools/database/qdrant.d.ts +86 -0
- package/dist/tools/database/qdrant.js +171 -0
- package/dist/tools/database/qdrant.js.map +1 -0
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","constructor","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","transformInput","ChatModelOutput","transformMessages","generateObject","temperature","abortSignal","signal","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","streamText","lastChunk","event","message","type","textDelta","toolCallId","toolName","args","ChatModelError","error","ToolMessage","result","Error","Promise","all","map","tool","parameters","getInputJsonSchema","msg","role","content","UserMessage","SystemMessage","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","destroy","Object","assign"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n CoreMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModelV1,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n AssistantMessage,\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\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV1 = LanguageModelV1,\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(await this.transformInput(input));\n\n return new ChatModelOutput(this.transformMessages(messages), usage, finishReason);\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<T>({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n model: this.model,\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,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n response.usage,\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const { fullStream, usage, finishReason, response } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let lastChunk: ChatModelOutput | null = null;\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n message = new AssistantMessage(event.textDelta);\n break;\n case \"tool-call\":\n message = new AssistantMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: event.args,\n });\n break;\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"step-finish\":\n case \"step-start\":\n continue;\n case \"tool-result\":\n message = new ToolMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: event.result,\n });\n break;\n case \"tool-call-streaming-start\":\n case \"tool-call-delta\":\n continue;\n case \"finish\":\n continue;\n default:\n throw new Error(`Unhandled event \"${event.type}\"`);\n }\n lastChunk = new ChatModelOutput([message]);\n yield lastChunk;\n }\n\n if (!lastChunk) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n lastChunk.usage = await usage;\n lastChunk.finishReason = await finishReason;\n await response;\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 parameters: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): CoreMessage => {\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: msg.role, content: msg.content };\n } else if (msg instanceof SystemMessage) {\n return { role: \"user\", content: msg.content };\n }\n return { role: msg.role, content: msg.content } as CoreMessage;\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":["chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","constructor","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","transformInput","ChatModelOutput","transformMessages","generateObject","temperature","abortSignal","signal","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","streamText","lastChunk","event","message","type","textDelta","toolCallId","toolName","args","ChatModelError","error","ToolMessage","result","Error","Promise","all","map","tool","parameters","getInputJsonSchema","msg","CustomMessage","encodeCustomMessage","role","content","UserMessage","SystemMessage","part","text","join","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","destroy","Object","assign"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n CoreMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModelV1,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\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 } from \"@/adapters/vercel/backend/utils.js\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV1 = LanguageModelV1,\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(await this.transformInput(input));\n\n return new ChatModelOutput(this.transformMessages(messages), usage, finishReason);\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<T>({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n model: this.model,\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,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n response.usage,\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const { fullStream, usage, finishReason, response } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let lastChunk: ChatModelOutput | null = null;\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n message = new AssistantMessage(event.textDelta);\n break;\n case \"tool-call\":\n message = new AssistantMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: event.args,\n });\n break;\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"step-finish\":\n case \"step-start\":\n continue;\n case \"tool-result\":\n message = new ToolMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: event.result,\n });\n break;\n case \"tool-call-streaming-start\":\n case \"tool-call-delta\":\n continue;\n case \"finish\":\n continue;\n default:\n throw new Error(`Unhandled event \"${event.type}\"`);\n }\n lastChunk = new ChatModelOutput([message]);\n yield lastChunk;\n }\n\n if (!lastChunk) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n lastChunk.usage = await usage;\n lastChunk.finishReason = await finishReason;\n await response;\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 parameters: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): CoreMessage => {\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 CoreMessage;\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,12 +1,13 @@
|
|
|
1
1
|
import { ChatModel, ChatModelOutput } from '../../../backend/chat.js';
|
|
2
2
|
import { generateText, generateObject, jsonSchema, streamText } from 'ai';
|
|
3
3
|
import { Emitter } from '../../../emitter/emitter.js';
|
|
4
|
-
import { AssistantMessage, ToolMessage, UserMessage, SystemMessage } from '../../../backend/message.js';
|
|
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
8
|
import { ZodSchema, z, ZodArray, ZodEnum } from 'zod';
|
|
9
9
|
import { Tool } from '../../../tools/base.js';
|
|
10
|
+
import { encodeCustomMessage } from './utils.js';
|
|
10
11
|
|
|
11
12
|
var __defProp = Object.defineProperty;
|
|
12
13
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -139,6 +140,9 @@ class VercelChatModel extends ChatModel {
|
|
|
139
140
|
parameters: jsonSchema(await tool.getInputJsonSchema())
|
|
140
141
|
})));
|
|
141
142
|
const messages = input.messages.map((msg) => {
|
|
143
|
+
if (msg instanceof CustomMessage) {
|
|
144
|
+
msg = encodeCustomMessage(msg);
|
|
145
|
+
}
|
|
142
146
|
if (msg instanceof AssistantMessage) {
|
|
143
147
|
return {
|
|
144
148
|
role: "assistant",
|
|
@@ -151,13 +155,13 @@ class VercelChatModel extends ChatModel {
|
|
|
151
155
|
};
|
|
152
156
|
} else if (msg instanceof UserMessage) {
|
|
153
157
|
return {
|
|
154
|
-
role:
|
|
158
|
+
role: "user",
|
|
155
159
|
content: msg.content
|
|
156
160
|
};
|
|
157
161
|
} else if (msg instanceof SystemMessage) {
|
|
158
162
|
return {
|
|
159
|
-
role: "
|
|
160
|
-
content: msg.content
|
|
163
|
+
role: "system",
|
|
164
|
+
content: msg.content.map((part) => part.text).join("\n")
|
|
161
165
|
};
|
|
162
166
|
}
|
|
163
167
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","constructor","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","transformInput","ChatModelOutput","transformMessages","generateObject","temperature","abortSignal","signal","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","streamText","lastChunk","event","message","type","textDelta","toolCallId","toolName","args","ChatModelError","error","ToolMessage","result","Error","Promise","all","map","tool","parameters","getInputJsonSchema","msg","role","content","UserMessage","SystemMessage","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","destroy","Object","assign"],"mappings":";;;;;;;;;;;;AAqDO,MAAeA,wBAEZC,SAAAA,CAAAA;EAvDV;;;;AAwDkBC,EAAAA,OAAAA;AACAC,EAAAA,qBAAAA;AAEhBC,EAAAA,WAAAA,CAA6BC,KAAU,EAAA;AACrC,IAAA,KAAA,EAAK,EAAA,IAAA,CADsBA,KAAAA,GAAAA,KAAAA,EAAAA,KAFbF,qBAAiC,GAAA,IAAA;AAI/C,IAAI,IAAA,CAAC,KAAKG,OAAS,EAAA;AACjB,MAAM,MAAA,IAAIC,WAAW,+BAAA,CAAA;AACvB;AACA,IAAKL,IAAAA,CAAAA,OAAAA,GAAUM,OAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,SAAA;QAAW,IAAKC,CAAAA,UAAAA;AAAY,QAAA;;MACxCC,OAAS,EAAA;KACX,CAAA;AACF;AAEA,EAAA,IAAIP,OAAkB,GAAA;AACpB,IAAA,OAAO,KAAKD,KAAMC,CAAAA,OAAAA;AACpB;AAEA,EAAA,IAAIM,UAAqB,GAAA;AACvB,IAAA,MAAME,QAAW,GAAA,IAAA,CAAKT,KAAMS,CAAAA,QAAAA,CAASC,KAAM,CAAA,GAAA,CAAK,CAAA,CAAA,CAAGA,CAAAA,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA;AAC9D,IAAA,OAAOC,YAAYF,QAAAA,CAAAA;AACrB;EAEA,MAAgBG,OAAAA,CAAQC,OAAuBC,GAA0B,EAAA;AACvE,IAAA,MAAMC,iBAAiBF,KAAME,CAAAA,cAAAA;AAC7B,IAAA,IAAIA,cAAmBA,KAAAA,cAAAA,YAA0BC,SAAaD,IAAAA,cAAAA,CAAeE,MAAS,CAAA,EAAA;AACpF,MAAA,MAAM,EAAEC,MAAAA,EAAW,GAAA,MAAM,KAAKC,gBAC5B,CAAA;QACE,GAAGN,KAAAA;QACHI,MAAQF,EAAAA;AACV,OAAA,EACAD,GAAAA,CAAAA;AAEF,MAAOI,OAAAA,MAAAA;AACT;AAEA,IAAA,MAAM,EACJE,YAAAA,EACAC,KACAC,EAAAA,QAAAA,EAAU,EAAEC,QAAQ,EAAA,EAClB,GAAA,MAAMC,YAAa,CAAA,MAAM,IAAKC,CAAAA,cAAAA,CAAeZ,KAAAA,CAAAA,CAAAA;AAEjD,IAAA,OAAO,IAAIa,eAAgB,CAAA,IAAA,CAAKC,kBAAkBJ,QAAAA,CAAAA,EAAWF,OAAOD,YAAAA,CAAAA;AACtE;AAEA,EAAA,MAAgBD,iBACd,EAAEF,MAAAA,EAAQ,GAAGJ,KAAAA,IACbC,GACmC,EAAA;AACnC,IAAMQ,MAAAA,QAAAA,GAAW,MAAMM,cAAkB,CAAA;MACvCC,WAAa,EAAA,CAAA;MACb,GAAI,MAAM,IAAKJ,CAAAA,cAAAA,CAAeZ,KAAAA,CAAAA;AAC9BiB,MAAAA,WAAAA,EAAahB,GAAIiB,CAAAA,MAAAA;AACjB/B,MAAAA,KAAAA,EAAO,IAAKA,CAAAA,KAAAA;AACZ,MAAA,GAAIiB,kBAAkBD,SAClB,GAAA;AACEC,QAAAA,MAAAA;QACAC,MAAUD,EAAAA,CAAAA,MAAAA,CAAOe,UAAUf,MAAmBgB,aAAAA,QAAAA,GAC1C,WACChB,MAAOe,CAAAA,MAAAA,IAAUf,MAAmBiB,aAAAA,OAAAA,GACnC,MACA,GAAA;OAER,GAAA;AACEjB,QAAAA,MAAAA,EAAQA,OAAOA,MAASkB,GAAAA,UAAAA,CAAclB,OAAOA,MAAM,CAAA,GAAImB,EAAEC,GAAG,EAAA;AAC5DC,QAAAA,UAAAA,EAAYrB,MAAOsB,CAAAA,IAAAA;AACnBC,QAAAA,iBAAAA,EAAmBvB,MAAOwB,CAAAA;AAC5B;KACN,CAAA;AAEA,IAAO,OAAA;AACLC,MAAAA,MAAAA,EAAQpB,QAASoB,CAAAA,MAAAA;AACjBxB,MAAAA,MAAAA,EAAQ,IAAIQ,eACV,CAAA;AAAC,QAAA,IAAIiB,iBAAiBC,IAAKC,CAAAA,SAAAA,CAAUvB,SAASoB,MAAQ,EAAA,IAAA,EAAM,CAAA,CAAA;SAC5DpB,QAASD,CAAAA,KAAAA,EACTC,SAASF,YAAY;AAEzB,KAAA;AACF;EAEA,OAAO0B,aAAAA,CAAcjC,OAAuBC,GAA0B,EAAA;AACpE,IAAI,IAAA,CAAC,KAAKhB,qBAAyB,IAAA,CAACiD,QAAQlC,KAAMmC,CAAAA,KAAAA,IAAS,EAAE,CAAG,EAAA;AAC9D,MAAA,MAAM1B,SAAW,GAAA,MAAM,IAAKV,CAAAA,OAAAA,CAAQC,OAAOC,GAAAA,CAAAA;AAC3C,MAAMQ,MAAAA,SAAAA;AACN,MAAA;AACF;AAEA,IAAA,MAAM,EAAE2B,UAAY5B,EAAAA,KAAAA,EAAOD,YAAcE,EAAAA,QAAAA,KAAa4B,UAAW,CAAA;MAC/D,GAAI,MAAM,IAAKzB,CAAAA,cAAAA,CAAeZ,KAAAA,CAAAA;AAC9BiB,MAAAA,WAAAA,EAAahB,GAAIiB,CAAAA;KACnB,CAAA;AAEA,IAAA,IAAIoB,SAAoC,GAAA,IAAA;AACxC,IAAA,WAAA,MAAiBC,SAASH,UAAY,EAAA;AACpC,MAAII,IAAAA,OAAAA;AACJ,MAAA,QAAQD,MAAME,IAAI;QAChB,KAAK,YAAA;AACHD,UAAU,OAAA,GAAA,IAAIV,gBAAiBS,CAAAA,KAAAA,CAAMG,SAAS,CAAA;AAC9C,UAAA;QACF,KAAK,WAAA;AACHF,UAAAA,OAAAA,GAAU,IAAIV,gBAAiB,CAAA;AAC7BW,YAAAA,IAAAA,EAAMF,KAAME,CAAAA,IAAAA;AACZE,YAAAA,UAAAA,EAAYJ,KAAMI,CAAAA,UAAAA;AAClBC,YAAAA,QAAAA,EAAUL,KAAMK,CAAAA,QAAAA;AAChBC,YAAAA,IAAAA,EAAMN,KAAMM,CAAAA;WACd,CAAA;AACA,UAAA;QACF,KAAK,OAAA;AACH,UAAM,MAAA,IAAIC,eAAe,iBAAmB,EAAA;YAACP,KAAMQ,CAAAA;AAAe,WAAA,CAAA;QACpE,KAAK,aAAA;QACL,KAAK,YAAA;AACH,UAAA;QACF,KAAK,aAAA;AACHP,UAAAA,OAAAA,GAAU,IAAIQ,WAAY,CAAA;AACxBP,YAAAA,IAAAA,EAAMF,KAAME,CAAAA,IAAAA;AACZE,YAAAA,UAAAA,EAAYJ,KAAMI,CAAAA,UAAAA;AAClBC,YAAAA,QAAAA,EAAUL,KAAMK,CAAAA,QAAAA;AAChBK,YAAAA,MAAAA,EAAQV,KAAMU,CAAAA;WAChB,CAAA;AACA,UAAA;QACF,KAAK,2BAAA;QACL,KAAK,iBAAA;AACH,UAAA;QACF,KAAK,QAAA;AACH,UAAA;AACF,QAAA;AACE,UAAA,MAAM,IAAIC,KAAAA,CAAM,CAAoBX,iBAAAA,EAAAA,KAAAA,CAAME,IAAI,CAAG,CAAA,CAAA,CAAA;AACrD;AACAH,MAAAA,SAAAA,GAAY,IAAIzB,eAAgB,CAAA;AAAC2B,QAAAA;AAAQ,OAAA,CAAA;AACzC,MAAMF,MAAAA,SAAAA;AACR;AAEA,IAAA,IAAI,CAACA,SAAW,EAAA;AACd,MAAM,MAAA,IAAIQ,eAAe,+BAAA,CAAA;AAC3B;AACAR,IAAAA,SAAAA,CAAU9B,QAAQ,MAAMA,KAAAA;AACxB8B,IAAAA,SAAAA,CAAU/B,eAAe,MAAMA,YAAAA;AAC/B,IAAME,MAAAA,QAAAA;AACR;AAEA,EAAA,MAAgBG,eACdZ,KACkE,EAAA;AAClE,IAAMmC,MAAAA,KAAAA,GAAQ,MAAMgB,OAAAA,CAAQC,GACzBpD,CAAAA,CAAAA,KAAAA,CAAMmC,SAAS,EAAA,EAAIkB,GAAI,CAAA,OAAOC,IAAU,MAAA;AACvC5B,MAAAA,IAAAA,EAAM4B,IAAK5B,CAAAA,IAAAA;AACXE,MAAAA,WAAAA,EAAa0B,IAAK1B,CAAAA,WAAAA;AAClB2B,MAAAA,UAAAA,EAAYjC,UAAW,CAAA,MAAMgC,IAAKE,CAAAA,kBAAAA,EAAkB;AACtD,KAAA,CAAA,CAAA,CAAA;AAGF,IAAA,MAAM9C,QAAWV,GAAAA,KAAAA,CAAMU,QAAS2C,CAAAA,GAAAA,CAAI,CAACI,GAAAA,KAAAA;AACnC,MAAA,IAAIA,eAAe3B,gBAAkB,EAAA;AACnC,QAAO,OAAA;UAAE4B,IAAM,EAAA,WAAA;AAAaC,UAAAA,OAAAA,EAASF,GAAIE,CAAAA;AAAQ,SAAA;AACnD,OAAA,MAAA,IAAWF,eAAeT,WAAa,EAAA;AACrC,QAAO,OAAA;UAAEU,IAAM,EAAA,MAAA;AAAQC,UAAAA,OAAAA,EAASF,GAAIE,CAAAA;AAAQ,SAAA;AAC9C,OAAA,MAAA,IAAWF,eAAeG,WAAa,EAAA;AACrC,QAAO,OAAA;AAAEF,UAAAA,IAAAA,EAAMD,GAAIC,CAAAA,IAAAA;AAAMC,UAAAA,OAAAA,EAASF,GAAIE,CAAAA;AAAQ,SAAA;AAChD,OAAA,MAAA,IAAWF,eAAeI,aAAe,EAAA;AACvC,QAAO,OAAA;UAAEH,IAAM,EAAA,MAAA;AAAQC,UAAAA,OAAAA,EAASF,GAAIE,CAAAA;AAAQ,SAAA;AAC9C;AACA,MAAO,OAAA;AAAED,QAAAA,IAAAA,EAAMD,GAAIC,CAAAA,IAAAA;AAAMC,QAAAA,OAAAA,EAASF,GAAIE,CAAAA;AAAQ,OAAA;KAChD,CAAA;AAEA,IAAIG,IAAAA,UAAAA;AACJ,IAAA,IAAI9D,KAAM8D,CAAAA,UAAAA,IAAc9D,KAAM8D,CAAAA,UAAAA,YAAsBC,IAAM,EAAA;AACxD,MAAA,IAAI,IAAKC,CAAAA,iBAAAA,CAAkBC,QAAS,CAAA,QAAA,CAAW,EAAA;AAC7CH,QAAa,UAAA,GAAA;UACXrB,IAAM,EAAA,MAAA;AACNG,UAAAA,QAAAA,EAAU5C,MAAM8D,UAAWpC,CAAAA;AAC7B,SAAA;OACK,MAAA;AACL,QAAKwC,IAAAA,CAAAA,MAAAA,CAAOC,KAAK,CAA0C,wCAAA,CAAA,CAAA;AAC7D;AACF,KAAA,MAAA,IAAWnE,MAAM8D,UAAY,EAAA;AAC3B,MAAA,IAAI,IAAKE,CAAAA,iBAAAA,CAAkBC,QAASjE,CAAAA,KAAAA,CAAM8D,UAAU,CAAG,EAAA;AACrDA,QAAAA,UAAAA,GAAa9D,KAAM8D,CAAAA,UAAAA;OACd,MAAA;AACL,QAAA,IAAA,CAAKI,MAAOC,CAAAA,IAAAA,CAAK,CAAoCnE,iCAAAA,EAAAA,KAAAA,CAAM8D,UAAU,CAAqB,mBAAA,CAAA,CAAA;AAC5F;AACF;AAEA,IAAO,OAAA;AACL,MAAA,GAAG,IAAKP,CAAAA,UAAAA;MACR,GAAGvD,KAAAA;AACH8D,MAAAA,UAAAA;AACA3E,MAAAA,KAAAA,EAAO,IAAKA,CAAAA,KAAAA;AACZgD,MAAAA,KAAAA,EAAOiC,SAASjC,KAAO,EAAA,CAAC,EAAET,IAAM,EAAA,GAAG4B,MAAW,KAAA;AAAC5B,QAAAA,IAAAA;AAAM4B,QAAAA;AAAK,OAAA,CAAA;AAC1D5C,MAAAA;AACF,KAAA;AACF;AAEUI,EAAAA,iBAAAA,CAAkBJ,QAAiE,EAAA;AAC3F,IAAOA,OAAAA,QAAAA,CAAS2D,OAAQ,CAAA,CAACZ,GAAAA,KAAAA;AACvB,MAAIA,IAAAA,GAAAA,CAAIC,SAAS,MAAQ,EAAA;AACvB,QAAA,OAAO,IAAIV,WAAAA,CAAYS,GAAIE,CAAAA,OAAAA,EAASF,IAAIa,eAAe,CAAA;AACzD;AACA,MAAA,OAAO,IAAIxC,gBAAAA,CACT2B,GAAIE,CAAAA,OAAAA,EACJF,IAAIa,eAAe,CAAA;KAEvB,CAAA;AACF;EAEAC,cAAiB,GAAA;AACf,IAAO,OAAA;AACL,MAAA,GAAG,MAAMA,cAAAA,EAAAA;AACT7E,MAAAA,UAAAA,EAAY,IAAKA,CAAAA,UAAAA;AACjBN,MAAAA,OAAAA,EAAS,IAAKA,CAAAA,OAAAA;AACdH,MAAAA,qBAAAA,EAAuB,IAAKA,CAAAA;AAC9B,KAAA;AACF;AAEA,EAAA,MAAMuF,aAAa,EAAE9E,UAAAA,EAAYN,OAAS,EAAA,GAAGqF,UAAoD,EAAA;AAC/F,IAAMC,MAAAA,QAAAA,GAAW,MAAM3F,SAAU4F,CAAAA,QAAAA,CAAS,GAAGjF,UAAAA,CAAAA,CAAAA,EAAcN,OAAAA,CAAS,CAAA,CAAA;AACpE,IAAI,IAAA,EAAEsF,oBAAoB5F,eAAkB,CAAA,EAAA;AAC1C,MAAM,MAAA,IAAIoE,MAAM,4BAAA,CAAA;AAClB;AACAwB,IAAAA,QAAAA,CAASE,OAAO,EAAA;AAChBC,IAAAA,MAAAA,CAAOC,OAAO,IAAM,EAAA;MAClB,GAAGL,QAAAA;AACHtF,MAAAA,KAAAA,EAAOuF,QAASvF,CAAAA;KAClB,CAAA;AACF;AACF","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n CoreMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModelV1,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n AssistantMessage,\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\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV1 = LanguageModelV1,\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(await this.transformInput(input));\n\n return new ChatModelOutput(this.transformMessages(messages), usage, finishReason);\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<T>({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n model: this.model,\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,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n response.usage,\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const { fullStream, usage, finishReason, response } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let lastChunk: ChatModelOutput | null = null;\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n message = new AssistantMessage(event.textDelta);\n break;\n case \"tool-call\":\n message = new AssistantMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: event.args,\n });\n break;\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"step-finish\":\n case \"step-start\":\n continue;\n case \"tool-result\":\n message = new ToolMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: event.result,\n });\n break;\n case \"tool-call-streaming-start\":\n case \"tool-call-delta\":\n continue;\n case \"finish\":\n continue;\n default:\n throw new Error(`Unhandled event \"${event.type}\"`);\n }\n lastChunk = new ChatModelOutput([message]);\n yield lastChunk;\n }\n\n if (!lastChunk) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n lastChunk.usage = await usage;\n lastChunk.finishReason = await finishReason;\n await response;\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 parameters: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): CoreMessage => {\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: msg.role, content: msg.content };\n } else if (msg instanceof SystemMessage) {\n return { role: \"user\", content: msg.content };\n }\n return { role: msg.role, content: msg.content } as CoreMessage;\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":["chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","constructor","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","transformInput","ChatModelOutput","transformMessages","generateObject","temperature","abortSignal","signal","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","streamText","lastChunk","event","message","type","textDelta","toolCallId","toolName","args","ChatModelError","error","ToolMessage","result","Error","Promise","all","map","tool","parameters","getInputJsonSchema","msg","CustomMessage","encodeCustomMessage","role","content","UserMessage","SystemMessage","part","text","join","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","destroy","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n CoreMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModelV1,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\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 } from \"@/adapters/vercel/backend/utils.js\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV1 = LanguageModelV1,\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(await this.transformInput(input));\n\n return new ChatModelOutput(this.transformMessages(messages), usage, finishReason);\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<T>({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n model: this.model,\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,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n response.usage,\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const { fullStream, usage, finishReason, response } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let lastChunk: ChatModelOutput | null = null;\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n message = new AssistantMessage(event.textDelta);\n break;\n case \"tool-call\":\n message = new AssistantMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: event.args,\n });\n break;\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"step-finish\":\n case \"step-start\":\n continue;\n case \"tool-result\":\n message = new ToolMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: event.result,\n });\n break;\n case \"tool-call-streaming-start\":\n case \"tool-call-delta\":\n continue;\n case \"finish\":\n continue;\n default:\n throw new Error(`Unhandled event \"${event.type}\"`);\n }\n lastChunk = new ChatModelOutput([message]);\n yield lastChunk;\n }\n\n if (!lastChunk) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n lastChunk.usage = await usage;\n lastChunk.finishReason = await finishReason;\n await response;\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 parameters: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): CoreMessage => {\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 CoreMessage;\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"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var message_cjs = require('../../../backend/message.cjs');
|
|
4
|
+
var remeda = require('remeda');
|
|
5
|
+
var object_cjs = require('../../../internals/helpers/object.cjs');
|
|
6
|
+
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
function encodeCustomMessage(msg) {
|
|
10
|
+
return new message_cjs.UserMessage([
|
|
11
|
+
{
|
|
12
|
+
type: "text",
|
|
13
|
+
text: `#custom_role#${msg.role}#`
|
|
14
|
+
},
|
|
15
|
+
...msg.content.slice()
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
__name(encodeCustomMessage, "encodeCustomMessage");
|
|
19
|
+
function decodeCustomMessage(value) {
|
|
20
|
+
const [_, id, role, ...content] = value.split("#");
|
|
21
|
+
if (id !== "custom_role") {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
role,
|
|
26
|
+
content: content.join("#")
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
__name(decodeCustomMessage, "decodeCustomMessage");
|
|
30
|
+
function unmaskCustomMessage(msg) {
|
|
31
|
+
if (msg.role !== message_cjs.Role.USER) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
for (const key of [
|
|
35
|
+
"content",
|
|
36
|
+
"text"
|
|
37
|
+
]) {
|
|
38
|
+
let value = msg[key];
|
|
39
|
+
if (!value) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(value)) {
|
|
43
|
+
value = value.map((val) => val.type === "text" ? val.text || val.content : null).filter(remeda.isTruthy).join("");
|
|
44
|
+
}
|
|
45
|
+
const decoded = decodeCustomMessage(value);
|
|
46
|
+
if (decoded) {
|
|
47
|
+
msg.role = decoded.role;
|
|
48
|
+
msg[key] = decoded.content;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
__name(unmaskCustomMessage, "unmaskCustomMessage");
|
|
54
|
+
function vercelFetcher(customFetch) {
|
|
55
|
+
return async (url, options) => {
|
|
56
|
+
if (options && remeda.isString(options.body) && (object_cjs.getProp(options.headers, [
|
|
57
|
+
"content-type"
|
|
58
|
+
]) == "application/json" || object_cjs.getProp(options.headers, [
|
|
59
|
+
"Content-Type"
|
|
60
|
+
]) == "application/json")) {
|
|
61
|
+
const body = JSON.parse(options.body);
|
|
62
|
+
if (remeda.isPlainObject(body) && Array.isArray(body.messages)) {
|
|
63
|
+
body.messages.forEach((msg) => {
|
|
64
|
+
if (!remeda.isPlainObject(msg)) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
unmaskCustomMessage(msg);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
options.body = JSON.stringify(body);
|
|
71
|
+
}
|
|
72
|
+
const fetcher = customFetch ?? fetch;
|
|
73
|
+
return await fetcher(url, options);
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
__name(vercelFetcher, "vercelFetcher");
|
|
77
|
+
|
|
78
|
+
exports.decodeCustomMessage = decodeCustomMessage;
|
|
79
|
+
exports.encodeCustomMessage = encodeCustomMessage;
|
|
80
|
+
exports.vercelFetcher = vercelFetcher;
|
|
81
|
+
//# sourceMappingURL=utils.cjs.map
|
|
82
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["encodeCustomMessage","msg","UserMessage","type","text","role","content","slice","decodeCustomMessage","value","_","id","split","join","unmaskCustomMessage","Role","USER","key","Array","isArray","map","val","filter","isTruthy","decoded","vercelFetcher","customFetch","url","options","isString","body","getProp","headers","JSON","parse","isPlainObject","messages","forEach","stringify","fetcher","fetch"],"mappings":"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","file":"utils.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomMessage, Role, UserMessage } from \"@/backend/message.js\";\nimport { isPlainObject, isString, isTruthy } from \"remeda\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport { TextPart } from \"ai\";\n\nexport function encodeCustomMessage(msg: CustomMessage): UserMessage {\n return new UserMessage([\n {\n type: \"text\",\n text: `#custom_role#${msg.role}#`,\n },\n ...(msg.content.slice() as TextPart[]),\n ]);\n}\n\nexport function decodeCustomMessage(value: string) {\n const [_, id, role, ...content] = value.split(\"#\");\n if (id !== \"custom_role\") {\n return;\n }\n return { role, content: content.join(\"#\") };\n}\n\nfunction unmaskCustomMessage(msg: Record<string, any>) {\n if (msg.role !== Role.USER) {\n return;\n }\n\n for (const key of [\"content\", \"text\"]) {\n let value = msg[key];\n if (!value) {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = value\n .map((val) => (val.type === \"text\" ? val.text || val.content : null))\n .filter(isTruthy)\n .join(\"\");\n }\n\n const decoded = decodeCustomMessage(value);\n if (decoded) {\n msg.role = decoded.role;\n msg[key] = decoded.content;\n break;\n }\n }\n}\n\nexport function vercelFetcher(customFetch?: typeof fetch): typeof fetch {\n return async (url, options) => {\n if (\n options &&\n isString(options.body) &&\n (getProp(options.headers, [\"content-type\"]) == \"application/json\" ||\n getProp(options.headers, [\"Content-Type\"]) == \"application/json\")\n ) {\n const body = JSON.parse(options.body);\n if (isPlainObject(body) && Array.isArray(body.messages)) {\n body.messages.forEach((msg) => {\n if (!isPlainObject(msg)) {\n return;\n }\n unmaskCustomMessage(msg);\n });\n }\n options.body = JSON.stringify(body);\n }\n\n const fetcher = customFetch ?? fetch;\n return await fetcher(url, options);\n };\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CustomMessage, UserMessage } from '../../../backend/message.cjs';
|
|
2
|
+
import '../../../internals/serializable.cjs';
|
|
3
|
+
import '../../../internals/types.cjs';
|
|
4
|
+
import '../../../internals/helpers/guards.cjs';
|
|
5
|
+
import 'ai';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Copyright 2025 © BeeAI a Series of LF Projects, LLC
|
|
9
|
+
*
|
|
10
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
+
* you may not use this file except in compliance with the License.
|
|
12
|
+
* You may obtain a copy of the License at
|
|
13
|
+
*
|
|
14
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
+
*
|
|
16
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
+
* See the License for the specific language governing permissions and
|
|
20
|
+
* limitations under the License.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
declare function encodeCustomMessage(msg: CustomMessage): UserMessage;
|
|
24
|
+
declare function decodeCustomMessage(value: string): {
|
|
25
|
+
role: string;
|
|
26
|
+
content: string;
|
|
27
|
+
} | undefined;
|
|
28
|
+
declare function vercelFetcher(customFetch?: typeof fetch): typeof fetch;
|
|
29
|
+
|
|
30
|
+
export { decodeCustomMessage, encodeCustomMessage, vercelFetcher };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CustomMessage, UserMessage } from '../../../backend/message.js';
|
|
2
|
+
import '../../../internals/serializable.js';
|
|
3
|
+
import '../../../internals/types.js';
|
|
4
|
+
import '../../../internals/helpers/guards.js';
|
|
5
|
+
import 'ai';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Copyright 2025 © BeeAI a Series of LF Projects, LLC
|
|
9
|
+
*
|
|
10
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
+
* you may not use this file except in compliance with the License.
|
|
12
|
+
* You may obtain a copy of the License at
|
|
13
|
+
*
|
|
14
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
+
*
|
|
16
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
+
* See the License for the specific language governing permissions and
|
|
20
|
+
* limitations under the License.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
declare function encodeCustomMessage(msg: CustomMessage): UserMessage;
|
|
24
|
+
declare function decodeCustomMessage(value: string): {
|
|
25
|
+
role: string;
|
|
26
|
+
content: string;
|
|
27
|
+
} | undefined;
|
|
28
|
+
declare function vercelFetcher(customFetch?: typeof fetch): typeof fetch;
|
|
29
|
+
|
|
30
|
+
export { decodeCustomMessage, encodeCustomMessage, vercelFetcher };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { UserMessage, Role } from '../../../backend/message.js';
|
|
2
|
+
import { isString, isPlainObject, isTruthy } from 'remeda';
|
|
3
|
+
import { getProp } from '../../../internals/helpers/object.js';
|
|
4
|
+
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
function encodeCustomMessage(msg) {
|
|
8
|
+
return new UserMessage([
|
|
9
|
+
{
|
|
10
|
+
type: "text",
|
|
11
|
+
text: `#custom_role#${msg.role}#`
|
|
12
|
+
},
|
|
13
|
+
...msg.content.slice()
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
__name(encodeCustomMessage, "encodeCustomMessage");
|
|
17
|
+
function decodeCustomMessage(value) {
|
|
18
|
+
const [_, id, role, ...content] = value.split("#");
|
|
19
|
+
if (id !== "custom_role") {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
role,
|
|
24
|
+
content: content.join("#")
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
__name(decodeCustomMessage, "decodeCustomMessage");
|
|
28
|
+
function unmaskCustomMessage(msg) {
|
|
29
|
+
if (msg.role !== Role.USER) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
for (const key of [
|
|
33
|
+
"content",
|
|
34
|
+
"text"
|
|
35
|
+
]) {
|
|
36
|
+
let value = msg[key];
|
|
37
|
+
if (!value) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (Array.isArray(value)) {
|
|
41
|
+
value = value.map((val) => val.type === "text" ? val.text || val.content : null).filter(isTruthy).join("");
|
|
42
|
+
}
|
|
43
|
+
const decoded = decodeCustomMessage(value);
|
|
44
|
+
if (decoded) {
|
|
45
|
+
msg.role = decoded.role;
|
|
46
|
+
msg[key] = decoded.content;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
__name(unmaskCustomMessage, "unmaskCustomMessage");
|
|
52
|
+
function vercelFetcher(customFetch) {
|
|
53
|
+
return async (url, options) => {
|
|
54
|
+
if (options && isString(options.body) && (getProp(options.headers, [
|
|
55
|
+
"content-type"
|
|
56
|
+
]) == "application/json" || getProp(options.headers, [
|
|
57
|
+
"Content-Type"
|
|
58
|
+
]) == "application/json")) {
|
|
59
|
+
const body = JSON.parse(options.body);
|
|
60
|
+
if (isPlainObject(body) && Array.isArray(body.messages)) {
|
|
61
|
+
body.messages.forEach((msg) => {
|
|
62
|
+
if (!isPlainObject(msg)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
unmaskCustomMessage(msg);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
options.body = JSON.stringify(body);
|
|
69
|
+
}
|
|
70
|
+
const fetcher = customFetch ?? fetch;
|
|
71
|
+
return await fetcher(url, options);
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
__name(vercelFetcher, "vercelFetcher");
|
|
75
|
+
|
|
76
|
+
export { decodeCustomMessage, encodeCustomMessage, vercelFetcher };
|
|
77
|
+
//# sourceMappingURL=utils.js.map
|
|
78
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["encodeCustomMessage","msg","UserMessage","type","text","role","content","slice","decodeCustomMessage","value","_","id","split","join","unmaskCustomMessage","Role","USER","key","Array","isArray","map","val","filter","isTruthy","decoded","vercelFetcher","customFetch","url","options","isString","body","getProp","headers","JSON","parse","isPlainObject","messages","forEach","stringify","fetcher","fetch"],"mappings":"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","file":"utils.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomMessage, Role, UserMessage } from \"@/backend/message.js\";\nimport { isPlainObject, isString, isTruthy } from \"remeda\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport { TextPart } from \"ai\";\n\nexport function encodeCustomMessage(msg: CustomMessage): UserMessage {\n return new UserMessage([\n {\n type: \"text\",\n text: `#custom_role#${msg.role}#`,\n },\n ...(msg.content.slice() as TextPart[]),\n ]);\n}\n\nexport function decodeCustomMessage(value: string) {\n const [_, id, role, ...content] = value.split(\"#\");\n if (id !== \"custom_role\") {\n return;\n }\n return { role, content: content.join(\"#\") };\n}\n\nfunction unmaskCustomMessage(msg: Record<string, any>) {\n if (msg.role !== Role.USER) {\n return;\n }\n\n for (const key of [\"content\", \"text\"]) {\n let value = msg[key];\n if (!value) {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = value\n .map((val) => (val.type === \"text\" ? val.text || val.content : null))\n .filter(isTruthy)\n .join(\"\");\n }\n\n const decoded = decodeCustomMessage(value);\n if (decoded) {\n msg.role = decoded.role;\n msg[key] = decoded.content;\n break;\n }\n }\n}\n\nexport function vercelFetcher(customFetch?: typeof fetch): typeof fetch {\n return async (url, options) => {\n if (\n options &&\n isString(options.body) &&\n (getProp(options.headers, [\"content-type\"]) == \"application/json\" ||\n getProp(options.headers, [\"Content-Type\"]) == \"application/json\")\n ) {\n const body = JSON.parse(options.body);\n if (isPlainObject(body) && Array.isArray(body.messages)) {\n body.messages.forEach((msg) => {\n if (!isPlainObject(msg)) {\n return;\n }\n unmaskCustomMessage(msg);\n });\n }\n options.body = JSON.stringify(body);\n }\n\n const fetcher = customFetch ?? fetch;\n return await fetcher(url, options);\n };\n}\n"]}
|
|
@@ -81,4 +81,4 @@ declare class ReActAgent extends BaseAgent<ReActAgentRunInput, ReActAgentRunOutp
|
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
export { BaseRunner as B, type
|
|
84
|
+
export { BaseRunner as B, type ReActAgentInput as R, ReActAgent as a, type ReActAgentRunnerLLMInput as b, type ReActAgentRunnerToolInput as c, type ReActAgentTemplateFactory as d };
|
|
@@ -81,4 +81,4 @@ declare class ReActAgent extends BaseAgent<ReActAgentRunInput, ReActAgentRunOutp
|
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
export { BaseRunner as B, type
|
|
84
|
+
export { BaseRunner as B, type ReActAgentInput as R, ReActAgent as a, type ReActAgentRunnerLLMInput as b, type ReActAgentRunnerToolInput as c, type ReActAgentTemplateFactory as d };
|