beeai-framework 0.1.19 → 0.1.21
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/a2a/agents/agent.cjs +4 -4
- package/dist/adapters/a2a/agents/agent.cjs.map +1 -1
- package/dist/adapters/a2a/agents/agent.d.cts +2 -2
- package/dist/adapters/a2a/agents/agent.d.ts +2 -2
- package/dist/adapters/a2a/agents/agent.js +4 -4
- package/dist/adapters/a2a/agents/agent.js.map +1 -1
- package/dist/adapters/a2a/agents/events.d.cts +1 -1
- package/dist/adapters/a2a/agents/events.d.ts +1 -1
- package/dist/adapters/a2a/agents/types.d.cts +2 -2
- package/dist/adapters/a2a/agents/types.d.ts +2 -2
- package/dist/adapters/a2a/agents/utils.cjs +2 -2
- package/dist/adapters/a2a/agents/utils.cjs.map +1 -1
- package/dist/adapters/a2a/agents/utils.js +2 -2
- package/dist/adapters/a2a/agents/utils.js.map +1 -1
- package/dist/adapters/a2a/serve/agent_executor.cjs +1 -3
- package/dist/adapters/a2a/serve/agent_executor.cjs.map +1 -1
- package/dist/adapters/a2a/serve/agent_executor.d.cts +4 -3
- package/dist/adapters/a2a/serve/agent_executor.d.ts +4 -3
- package/dist/adapters/a2a/serve/agent_executor.js +1 -3
- package/dist/adapters/a2a/serve/agent_executor.js.map +1 -1
- package/dist/adapters/a2a/serve/server.cjs +15 -0
- package/dist/adapters/a2a/serve/server.cjs.map +1 -1
- package/dist/adapters/a2a/serve/server.d.cts +4 -2
- package/dist/adapters/a2a/serve/server.d.ts +4 -2
- package/dist/adapters/a2a/serve/server.js +15 -0
- package/dist/adapters/a2a/serve/server.js.map +1 -1
- package/dist/adapters/acp/agents/agent.d.cts +2 -2
- package/dist/adapters/acp/agents/agent.d.ts +2 -2
- package/dist/adapters/acp/agents/events.d.cts +1 -1
- package/dist/adapters/acp/agents/events.d.ts +1 -1
- package/dist/adapters/{beeai_platform → agentstack}/agents/agent.cjs +4 -4
- package/dist/adapters/agentstack/agents/agent.cjs.map +1 -0
- package/dist/adapters/{beeai_platform → agentstack}/agents/agent.d.cts +12 -12
- package/dist/adapters/{beeai_platform → agentstack}/agents/agent.d.ts +12 -12
- package/dist/adapters/{beeai_platform → agentstack}/agents/agent.js +4 -4
- package/dist/adapters/agentstack/agents/agent.js.map +1 -0
- package/dist/adapters/agentstack/agents/events.d.cts +23 -0
- package/dist/adapters/agentstack/agents/events.d.ts +23 -0
- package/dist/adapters/{beeai_platform → agentstack}/agents/types.d.cts +4 -4
- package/dist/adapters/{beeai_platform → agentstack}/agents/types.d.ts +4 -4
- package/dist/adapters/amazon-bedrock/backend/chat.cjs +3 -2
- package/dist/adapters/amazon-bedrock/backend/chat.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/chat.d.cts +5 -6
- package/dist/adapters/amazon-bedrock/backend/chat.d.ts +5 -6
- package/dist/adapters/amazon-bedrock/backend/chat.js +3 -2
- package/dist/adapters/amazon-bedrock/backend/chat.js.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/embedding.cjs +2 -2
- package/dist/adapters/amazon-bedrock/backend/embedding.cjs.map +1 -1
- package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +4 -4
- package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +4 -4
- package/dist/adapters/amazon-bedrock/backend/embedding.js +2 -2
- package/dist/adapters/amazon-bedrock/backend/embedding.js.map +1 -1
- package/dist/adapters/anthropic/backend/chat.cjs +3 -2
- package/dist/adapters/anthropic/backend/chat.cjs.map +1 -1
- package/dist/adapters/anthropic/backend/chat.d.cts +5 -6
- package/dist/adapters/anthropic/backend/chat.d.ts +5 -6
- package/dist/adapters/anthropic/backend/chat.js +3 -2
- package/dist/adapters/anthropic/backend/chat.js.map +1 -1
- package/dist/adapters/anthropic/backend/embedding.d.cts +2 -2
- package/dist/adapters/anthropic/backend/embedding.d.ts +2 -2
- package/dist/adapters/azure-openai/backend/chat.cjs +3 -2
- package/dist/adapters/azure-openai/backend/chat.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/chat.d.cts +5 -6
- package/dist/adapters/azure-openai/backend/chat.d.ts +5 -6
- package/dist/adapters/azure-openai/backend/chat.js +3 -2
- package/dist/adapters/azure-openai/backend/chat.js.map +1 -1
- package/dist/adapters/azure-openai/backend/embedding.cjs +2 -2
- package/dist/adapters/azure-openai/backend/embedding.cjs.map +1 -1
- package/dist/adapters/azure-openai/backend/embedding.d.cts +3 -3
- package/dist/adapters/azure-openai/backend/embedding.d.ts +3 -3
- package/dist/adapters/azure-openai/backend/embedding.js +2 -2
- package/dist/adapters/azure-openai/backend/embedding.js.map +1 -1
- package/dist/adapters/dummy/backend/chat.d.cts +2 -2
- package/dist/adapters/dummy/backend/chat.d.ts +2 -2
- package/dist/adapters/dummy/backend/embedding.d.cts +2 -2
- package/dist/adapters/dummy/backend/embedding.d.ts +2 -2
- package/dist/adapters/google-vertex/backend/chat.cjs +3 -2
- package/dist/adapters/google-vertex/backend/chat.cjs.map +1 -1
- package/dist/adapters/google-vertex/backend/chat.d.cts +5 -6
- package/dist/adapters/google-vertex/backend/chat.d.ts +5 -6
- package/dist/adapters/google-vertex/backend/chat.js +3 -2
- package/dist/adapters/google-vertex/backend/chat.js.map +1 -1
- package/dist/adapters/google-vertex/backend/embedding.d.cts +2 -2
- package/dist/adapters/google-vertex/backend/embedding.d.ts +2 -2
- package/dist/adapters/groq/backend/chat.cjs +3 -2
- package/dist/adapters/groq/backend/chat.cjs.map +1 -1
- package/dist/adapters/groq/backend/chat.d.cts +5 -6
- package/dist/adapters/groq/backend/chat.d.ts +5 -6
- package/dist/adapters/groq/backend/chat.js +3 -2
- package/dist/adapters/groq/backend/chat.js.map +1 -1
- package/dist/adapters/groq/backend/embedding.d.cts +2 -2
- package/dist/adapters/groq/backend/embedding.d.ts +2 -2
- package/dist/adapters/langchain/backend/chat.cjs +6 -5
- package/dist/adapters/langchain/backend/chat.cjs.map +1 -1
- package/dist/adapters/langchain/backend/chat.d.cts +2 -2
- package/dist/adapters/langchain/backend/chat.d.ts +2 -2
- package/dist/adapters/langchain/backend/chat.js +6 -5
- package/dist/adapters/langchain/backend/chat.js.map +1 -1
- package/dist/adapters/langchain/backend/embedding.d.cts +3 -3
- package/dist/adapters/langchain/backend/embedding.d.ts +3 -3
- package/dist/adapters/langchain/tools.d.cts +1 -1
- package/dist/adapters/langchain/tools.d.ts +1 -1
- package/dist/adapters/mcp/serve/server.cjs +12 -4
- package/dist/adapters/mcp/serve/server.cjs.map +1 -1
- package/dist/adapters/mcp/serve/server.d.cts +1 -1
- package/dist/adapters/mcp/serve/server.d.ts +1 -1
- package/dist/adapters/mcp/serve/server.js +12 -4
- package/dist/adapters/mcp/serve/server.js.map +1 -1
- package/dist/adapters/ollama/backend/chat.cjs +1 -4
- package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
- package/dist/adapters/ollama/backend/chat.d.cts +4 -4
- package/dist/adapters/ollama/backend/chat.d.ts +4 -4
- package/dist/adapters/ollama/backend/chat.js +1 -4
- package/dist/adapters/ollama/backend/chat.js.map +1 -1
- package/dist/adapters/ollama/backend/client.cjs +2 -2
- package/dist/adapters/ollama/backend/client.cjs.map +1 -1
- package/dist/adapters/ollama/backend/client.d.cts +1 -1
- package/dist/adapters/ollama/backend/client.d.ts +1 -1
- package/dist/adapters/ollama/backend/client.js +1 -1
- package/dist/adapters/ollama/backend/client.js.map +1 -1
- package/dist/adapters/ollama/backend/embedding.cjs.map +1 -1
- package/dist/adapters/ollama/backend/embedding.d.cts +3 -3
- package/dist/adapters/ollama/backend/embedding.d.ts +3 -3
- package/dist/adapters/ollama/backend/embedding.js.map +1 -1
- package/dist/adapters/openai/backend/chat.cjs +3 -2
- package/dist/adapters/openai/backend/chat.cjs.map +1 -1
- package/dist/adapters/openai/backend/chat.d.cts +5 -6
- package/dist/adapters/openai/backend/chat.d.ts +5 -6
- package/dist/adapters/openai/backend/chat.js +3 -2
- package/dist/adapters/openai/backend/chat.js.map +1 -1
- package/dist/adapters/openai/backend/client.cjs +2 -11
- package/dist/adapters/openai/backend/client.cjs.map +1 -1
- package/dist/adapters/openai/backend/client.js +3 -12
- package/dist/adapters/openai/backend/client.js.map +1 -1
- package/dist/adapters/openai/backend/embedding.cjs +2 -2
- package/dist/adapters/openai/backend/embedding.cjs.map +1 -1
- package/dist/adapters/openai/backend/embedding.d.cts +4 -4
- package/dist/adapters/openai/backend/embedding.d.ts +4 -4
- package/dist/adapters/openai/backend/embedding.js +2 -2
- package/dist/adapters/openai/backend/embedding.js.map +1 -1
- package/dist/adapters/vercel/backend/chat.cjs +26 -21
- package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
- package/dist/adapters/vercel/backend/chat.d.cts +6 -4
- package/dist/adapters/vercel/backend/chat.d.ts +6 -4
- package/dist/adapters/vercel/backend/chat.js +27 -22
- package/dist/adapters/vercel/backend/chat.js.map +1 -1
- package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
- package/dist/adapters/vercel/backend/embedding.d.cts +3 -3
- package/dist/adapters/vercel/backend/embedding.d.ts +3 -3
- package/dist/adapters/vercel/backend/embedding.js.map +1 -1
- package/dist/adapters/vercel/backend/utils.cjs +11 -0
- package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
- package/dist/adapters/vercel/backend/utils.d.cts +19 -2
- package/dist/adapters/vercel/backend/utils.d.ts +19 -2
- package/dist/adapters/vercel/backend/utils.js +11 -1
- package/dist/adapters/vercel/backend/utils.js.map +1 -1
- package/dist/adapters/watsonx/backend/chat.cjs +10 -4
- package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/chat.d.cts +2 -2
- package/dist/adapters/watsonx/backend/chat.d.ts +2 -2
- package/dist/adapters/watsonx/backend/chat.js +10 -4
- package/dist/adapters/watsonx/backend/chat.js.map +1 -1
- package/dist/adapters/watsonx/backend/embedding.d.cts +2 -2
- package/dist/adapters/watsonx/backend/embedding.d.ts +2 -2
- package/dist/adapters/xai/backend/chat.cjs +3 -2
- package/dist/adapters/xai/backend/chat.cjs.map +1 -1
- package/dist/adapters/xai/backend/chat.d.cts +5 -6
- package/dist/adapters/xai/backend/chat.d.ts +5 -6
- package/dist/adapters/xai/backend/chat.js +3 -2
- package/dist/adapters/xai/backend/chat.js.map +1 -1
- package/dist/{agent-7NzfPC6d.d.ts → agent-CHebzsQB.d.ts} +4 -4
- package/dist/{agent-B6pOfx0K.d.cts → agent-DvvVGvLr.d.cts} +4 -4
- package/dist/agents/base.d.cts +2 -2
- package/dist/agents/base.d.ts +2 -2
- package/dist/agents/experimental/replan/agent.d.cts +3 -3
- package/dist/agents/experimental/replan/agent.d.ts +3 -3
- package/dist/agents/experimental/replan/prompts.d.cts +1 -1
- package/dist/agents/experimental/replan/prompts.d.ts +1 -1
- package/dist/agents/experimental/streamlit/agent.d.cts +3 -3
- package/dist/agents/experimental/streamlit/agent.d.ts +3 -3
- package/dist/agents/react/agent.d.cts +5 -4
- package/dist/agents/react/agent.d.ts +5 -4
- package/dist/agents/react/prompts.d.cts +1 -1
- package/dist/agents/react/prompts.d.ts +1 -1
- package/dist/agents/react/runners/base.cjs.map +1 -1
- package/dist/agents/react/runners/base.d.cts +5 -4
- package/dist/agents/react/runners/base.d.ts +5 -4
- package/dist/agents/react/runners/base.js.map +1 -1
- package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
- package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
- package/dist/agents/react/runners/deep-think/runner.d.cts +6 -5
- package/dist/agents/react/runners/deep-think/runner.d.ts +6 -5
- package/dist/agents/react/runners/default/runner.cjs.map +1 -1
- package/dist/agents/react/runners/default/runner.d.cts +6 -5
- package/dist/agents/react/runners/default/runner.d.ts +6 -5
- package/dist/agents/react/runners/default/runner.js.map +1 -1
- package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
- package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
- package/dist/agents/react/runners/granite/runner.cjs +4 -2
- package/dist/agents/react/runners/granite/runner.cjs.map +1 -1
- package/dist/agents/react/runners/granite/runner.d.cts +6 -5
- package/dist/agents/react/runners/granite/runner.d.ts +6 -5
- package/dist/agents/react/runners/granite/runner.js +4 -2
- package/dist/agents/react/runners/granite/runner.js.map +1 -1
- package/dist/agents/react/types.d.cts +3 -2
- package/dist/agents/react/types.d.ts +3 -2
- package/dist/agents/toolCalling/agent.cjs +9 -5
- package/dist/agents/toolCalling/agent.cjs.map +1 -1
- package/dist/agents/toolCalling/agent.d.cts +3 -3
- package/dist/agents/toolCalling/agent.d.ts +3 -3
- package/dist/agents/toolCalling/agent.js +9 -5
- package/dist/agents/toolCalling/agent.js.map +1 -1
- package/dist/agents/toolCalling/types.d.cts +1 -1
- package/dist/agents/toolCalling/types.d.ts +1 -1
- package/dist/agents/types.d.cts +2 -2
- package/dist/agents/types.d.ts +2 -2
- package/dist/backend/backend.d.cts +2 -2
- package/dist/backend/backend.d.ts +2 -2
- package/dist/backend/chat.cjs +1 -1
- package/dist/backend/chat.cjs.map +1 -1
- package/dist/backend/chat.d.cts +2 -2
- package/dist/backend/chat.d.ts +2 -2
- package/dist/backend/chat.js +1 -1
- package/dist/backend/chat.js.map +1 -1
- package/dist/backend/core.d.cts +2 -2
- package/dist/backend/core.d.ts +2 -2
- package/dist/backend/embedding.d.cts +2 -2
- package/dist/backend/embedding.d.ts +2 -2
- package/dist/backend/message.cjs +59 -3
- package/dist/backend/message.cjs.map +1 -1
- package/dist/backend/message.d.cts +3 -0
- package/dist/backend/message.d.ts +3 -0
- package/dist/backend/message.js +59 -3
- package/dist/backend/message.js.map +1 -1
- package/dist/backend/utils.d.cts +2 -2
- package/dist/backend/utils.d.ts +2 -2
- package/dist/{base-Bguef5Dg.d.ts → base-BQgDlcGa.d.ts} +1 -1
- package/dist/{base-C1hO5EJe.d.cts → base-CwcxwybB.d.cts} +1 -1
- package/dist/cache/fileCache.cjs.map +1 -1
- package/dist/cache/fileCache.js.map +1 -1
- package/dist/{chat-BBoOSvzm.d.ts → chat-C0s-o6ll.d.ts} +4 -2
- package/dist/{chat-BZ55YQab.d.cts → chat-CRb3vUVg.d.cts} +4 -2
- package/dist/context.d.cts +1 -1
- package/dist/context.d.ts +1 -1
- package/dist/emitter/emitter.d.cts +1 -1
- package/dist/emitter/emitter.d.ts +1 -1
- package/dist/emitter/types.d.cts +1 -1
- package/dist/emitter/types.d.ts +1 -1
- package/dist/{emitter-BqpLJQVb.d.ts → emitter-CZFbzlUi.d.ts} +3 -3
- package/dist/{emitter-pJzHC_AM.d.cts → emitter-DpqUYjXH.d.cts} +3 -3
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/internals/fetcher.d.cts +1 -1
- package/dist/internals/fetcher.d.ts +1 -1
- package/dist/internals/helpers/array.cjs +35 -0
- package/dist/internals/helpers/array.cjs.map +1 -1
- package/dist/internals/helpers/array.d.cts +6 -1
- package/dist/internals/helpers/array.d.ts +6 -1
- package/dist/internals/helpers/array.js +35 -1
- package/dist/internals/helpers/array.js.map +1 -1
- package/dist/internals/helpers/object.cjs +30 -5
- package/dist/internals/helpers/object.cjs.map +1 -1
- package/dist/internals/helpers/object.d.cts +3 -2
- package/dist/internals/helpers/object.d.ts +3 -2
- package/dist/internals/helpers/object.js +29 -5
- package/dist/internals/helpers/object.js.map +1 -1
- package/dist/logger/logger.cjs +8 -4
- package/dist/logger/logger.cjs.map +1 -1
- package/dist/logger/logger.d.cts +21 -15
- package/dist/logger/logger.d.ts +21 -15
- package/dist/logger/logger.js +6 -3
- package/dist/logger/logger.js.map +1 -1
- package/dist/logger/pretty.cjs +2 -2
- package/dist/logger/pretty.cjs.map +1 -1
- package/dist/logger/pretty.js +2 -2
- package/dist/logger/pretty.js.map +1 -1
- package/dist/memory/summarizeMemory.d.cts +2 -2
- package/dist/memory/summarizeMemory.d.ts +2 -2
- package/dist/parsers/linePrefix.cjs.map +1 -1
- package/dist/parsers/linePrefix.d.cts +4 -8
- package/dist/parsers/linePrefix.d.ts +4 -8
- package/dist/parsers/linePrefix.js.map +1 -1
- package/dist/serializer/utils.cjs.map +1 -1
- package/dist/serializer/utils.js.map +1 -1
- package/dist/tools/arxiv.cjs.map +1 -1
- package/dist/tools/arxiv.d.cts +1 -1
- package/dist/tools/arxiv.d.ts +1 -1
- package/dist/tools/arxiv.js.map +1 -1
- package/dist/tools/base.cjs.map +1 -1
- package/dist/tools/base.d.cts +1 -1
- package/dist/tools/base.d.ts +1 -1
- package/dist/tools/base.js.map +1 -1
- package/dist/tools/calculator.d.cts +1 -1
- package/dist/tools/calculator.d.ts +1 -1
- package/dist/tools/custom.d.cts +2 -2
- package/dist/tools/custom.d.ts +2 -2
- package/dist/tools/database/elasticsearch.cjs.map +1 -1
- package/dist/tools/database/elasticsearch.d.cts +1 -1
- package/dist/tools/database/elasticsearch.d.ts +1 -1
- package/dist/tools/database/elasticsearch.js.map +1 -1
- package/dist/tools/database/milvus.cjs +3 -3
- package/dist/tools/database/milvus.cjs.map +1 -1
- package/dist/tools/database/milvus.d.cts +1 -1
- package/dist/tools/database/milvus.d.ts +1 -1
- package/dist/tools/database/milvus.js +3 -3
- package/dist/tools/database/milvus.js.map +1 -1
- package/dist/tools/database/qdrant.cjs +2 -2
- package/dist/tools/database/qdrant.cjs.map +1 -1
- package/dist/tools/database/qdrant.d.cts +1 -1
- package/dist/tools/database/qdrant.d.ts +1 -1
- package/dist/tools/database/qdrant.js +2 -2
- package/dist/tools/database/qdrant.js.map +1 -1
- package/dist/tools/database/sql.cjs.map +1 -1
- package/dist/tools/database/sql.d.cts +1 -1
- package/dist/tools/database/sql.d.ts +1 -1
- package/dist/tools/database/sql.js.map +1 -1
- package/dist/tools/llm.d.cts +2 -2
- package/dist/tools/llm.d.ts +2 -2
- package/dist/tools/mcp.d.cts +1 -1
- package/dist/tools/mcp.d.ts +1 -1
- package/dist/tools/openapi.d.cts +1 -1
- package/dist/tools/openapi.d.ts +1 -1
- package/dist/tools/python/output.d.cts +1 -1
- package/dist/tools/python/output.d.ts +1 -1
- package/dist/tools/python/python.d.cts +2 -2
- package/dist/tools/python/python.d.ts +2 -2
- package/dist/tools/search/base.cjs.map +1 -1
- package/dist/tools/search/base.d.cts +1 -1
- package/dist/tools/search/base.d.ts +1 -1
- package/dist/tools/search/base.js.map +1 -1
- package/dist/tools/search/duckDuckGoSearch.cjs.map +1 -1
- package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
- package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
- package/dist/tools/search/duckDuckGoSearch.js.map +1 -1
- package/dist/tools/search/googleSearch.cjs.map +1 -1
- package/dist/tools/search/googleSearch.d.cts +1 -1
- package/dist/tools/search/googleSearch.d.ts +1 -1
- package/dist/tools/search/googleSearch.js.map +1 -1
- package/dist/tools/search/searXNGSearch.d.cts +1 -1
- package/dist/tools/search/searXNGSearch.d.ts +1 -1
- package/dist/tools/search/wikipedia.cjs +25 -0
- package/dist/tools/search/wikipedia.cjs.map +1 -1
- package/dist/tools/search/wikipedia.d.cts +2 -3
- package/dist/tools/search/wikipedia.d.ts +2 -3
- package/dist/tools/search/wikipedia.js +23 -0
- package/dist/tools/search/wikipedia.js.map +1 -1
- package/dist/tools/similarity.d.cts +1 -1
- package/dist/tools/similarity.d.ts +1 -1
- package/dist/tools/weather/openMeteo.cjs.map +1 -1
- package/dist/tools/weather/openMeteo.d.cts +1 -1
- package/dist/tools/weather/openMeteo.d.ts +1 -1
- package/dist/tools/weather/openMeteo.js.map +1 -1
- package/dist/tools/web/webCrawler.cjs.map +1 -1
- package/dist/tools/web/webCrawler.d.cts +1 -1
- package/dist/tools/web/webCrawler.d.ts +1 -1
- package/dist/tools/web/webCrawler.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/workflows/agent.d.cts +3 -3
- package/dist/workflows/agent.d.ts +3 -3
- package/dist/workflows/workflow.d.cts +1 -1
- package/dist/workflows/workflow.d.ts +1 -1
- package/package.json +68 -67
- package/dist/adapters/beeai_platform/agents/agent.cjs.map +0 -1
- package/dist/adapters/beeai_platform/agents/agent.js.map +0 -1
- package/dist/adapters/beeai_platform/agents/events.d.cts +0 -23
- package/dist/adapters/beeai_platform/agents/events.d.ts +0 -23
- /package/dist/adapters/{beeai_platform → agentstack}/agents/events.cjs +0 -0
- /package/dist/adapters/{beeai_platform → agentstack}/agents/events.cjs.map +0 -0
- /package/dist/adapters/{beeai_platform → agentstack}/agents/events.js +0 -0
- /package/dist/adapters/{beeai_platform → agentstack}/agents/events.js.map +0 -0
- /package/dist/adapters/{beeai_platform → agentstack}/agents/types.cjs +0 -0
- /package/dist/adapters/{beeai_platform → agentstack}/agents/types.cjs.map +0 -0
- /package/dist/adapters/{beeai_platform → agentstack}/agents/types.js +0 -0
- /package/dist/adapters/{beeai_platform → agentstack}/agents/types.js.map +0 -0
package/dist/backend/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/backend/chat.ts"],"names":["ChatModel","Serializable","cache","NullCache","parameters","logger","Logger","root","child","name","toolChoiceSupport","toolCallFallbackViaResponseFormat","modelSupportsToolCalling","create","input","shallowCopy","RunContext","enter","params","signal","abortSignal","run","tools","forceToolCallViaResponseFormat","shouldForceToolCallViaResponseFormat","isEmpty","responseFormat","generateToolUnionSchema","filterToolsByToolChoice","toolChoice","undefined","isToolChoiceSupported","warn","cacheEntry","createCacheAccessor","emitter","emit","chunks","generator","value","stream","_createStream","toAsyncGenerator","_create","controller","AbortController","push","callbacks","abort","aborted","resolve","result","ChatModelOutput","fromChunks","getToolCalls","lastMsg","messages","at","toolCall","parseBrokenJson","text","ChatModelError","isFatal","isRetryable","content","length","type","toolCallId","randomString","toLowerCase","toolName","args","error","reject","createStructure","_createStructure","config","isFunction","fromName","options","providerId","modelId","parseModel","Target","loadModel","schema","jsonSchema","toJsonSchema","systemTemplate","systemPromptTemplate","PromptTemplate","z","object","string","min","template","SystemMessage","render","JSON","stringify","errorTemplate","errors","expected","received","Retryable","executor","response","textResponse","getTextContent","pair","validator","createSchemaValidator","success","context","UserMessage","output","maxRetries","get","createSnapshot","slice","destroy","_","key","ObjectHashKeyFn","Serializer","serialize","map","msg","toPlain","isNew","task","Task","set","delete","Boolean","toolChoiceSupported","choice","Tool","includes","usage","finishReason","final","forEach","cur","merge","other","customMerge","totalTokens","takeBigger","promptTokens","completionTokens","filter","r","AssistantMessage","flatMap","getTextMessages","join","toString","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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { customMerge } from \"@/internals/helpers/object.js\";\nimport { takeBigger } from \"@/internals/helpers/number.js\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext, RunContext } from \"@/context.js\";\nimport { isEmpty, isFunction, randomString } from \"remeda\";\nimport { ObjectHashKeyFn } from \"@/cache/decoratorCache.js\";\nimport { Task } from \"promise-based-task\";\nimport { NullCache } from \"@/cache/nullCache.js\";\nimport { BaseCache } from \"@/cache/base.js\";\nimport {\n filterToolsByToolChoice,\n FullModelName,\n generateToolUnionSchema,\n loadModel,\n parseModel,\n} from \"@/backend/utils.js\";\nimport { ProviderName } from \"@/backend/constants.js\";\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { AssistantMessage, Message, SystemMessage, UserMessage } from \"@/backend/message.js\";\n\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z, ZodSchema, ZodType } from \"zod\";\nimport {\n createSchemaValidator,\n parseBrokenJson,\n toJsonSchema,\n} from \"@/internals/helpers/schema.js\";\nimport { Retryable } from \"@/internals/helpers/retryable.js\";\nimport { SchemaObject, ValidateFunction } from \"ajv\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { toAsyncGenerator } from \"@/internals/helpers/promise.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\nimport { Logger } from \"@/logger/logger.js\";\n\nexport interface ChatModelParameters {\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n temperature?: number;\n topK?: number;\n n?: number;\n presencePenalty?: number;\n seed?: number;\n stopSequences?: string[];\n}\n\ninterface ResponseObjectJson {\n type: \"object-json\";\n schema?: SchemaObject;\n name?: string;\n description?: string;\n}\n\nexport interface ChatModelObjectInput<T> extends ChatModelParameters {\n schema: z.ZodSchema<T> | ResponseObjectJson;\n systemPromptTemplate?: PromptTemplate<ZodType<{ schema: string }>>;\n messages: Message[];\n abortSignal?: AbortSignal;\n maxRetries?: number;\n}\n\nexport interface ChatModelObjectOutput<T> {\n object: T;\n output: ChatModelOutput;\n}\n\nexport type ChatModelToolChoice = \"auto\" | \"none\" | \"required\" | AnyTool;\n\nexport interface ChatModelInput extends ChatModelParameters {\n tools?: AnyTool[];\n abortSignal?: AbortSignal;\n stopSequences?: string[];\n responseFormat?: ZodSchema | ResponseObjectJson;\n toolChoice?: ChatModelToolChoice;\n messages: Message[];\n}\n\nexport type ChatModelFinishReason =\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n\nexport interface ChatModelUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\nexport interface ChatModelEvents {\n newToken?: Callback<{ value: ChatModelOutput; callbacks: { abort: () => void } }>;\n success?: Callback<{ value: ChatModelOutput }>;\n start?: Callback<{ input: ChatModelInput }>;\n error?: Callback<{ input: ChatModelInput; error: FrameworkError }>;\n finish?: Callback<null>;\n}\n\nexport type ChatModelEmitter<A = Record<never, never>> = Emitter<\n ChatModelEvents & Omit<A, keyof ChatModelEvents>\n>;\n\nexport type ChatModelCache = BaseCache<Task<ChatModelOutput[]>>;\nexport type ConfigFn<T> = (value: T) => T;\nexport interface ChatConfig {\n cache?: ChatModelCache | ConfigFn<ChatModelCache>;\n parameters?: ChatModelParameters | ConfigFn<ChatModelParameters>;\n}\n\nexport type ChatModelToolChoiceSupport = \"required\" | \"none\" | \"single\" | \"auto\";\n\nexport abstract class ChatModel extends Serializable {\n public abstract readonly emitter: Emitter<ChatModelEvents>;\n public cache: ChatModelCache = new NullCache();\n public parameters: ChatModelParameters = {};\n protected readonly logger = Logger.root.child({\n name: this.constructor.name,\n });\n\n public readonly toolChoiceSupport: ChatModelToolChoiceSupport[] = [\n \"required\",\n \"none\",\n \"single\",\n \"auto\",\n ];\n public toolCallFallbackViaResponseFormat = true;\n public readonly modelSupportsToolCalling: boolean = true;\n\n abstract get modelId(): string;\n abstract get providerId(): string;\n\n create(input: ChatModelInput & { stream?: boolean }) {\n input = shallowCopy(input);\n\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n if (!this.modelSupportsToolCalling) {\n input.tools = [];\n }\n\n const forceToolCallViaResponseFormat = this.shouldForceToolCallViaResponseFormat(input);\n if (forceToolCallViaResponseFormat && input.tools && !isEmpty(input.tools)) {\n input.responseFormat = await generateToolUnionSchema(\n filterToolsByToolChoice(input.tools, input.toolChoice),\n );\n input.toolChoice = undefined;\n }\n\n if (!this.isToolChoiceSupported(input.toolChoice)) {\n this.logger.warn(\n `The following tool choice value '${input.toolChoice}' is not supported. Ignoring.`,\n );\n input.toolChoice = undefined;\n }\n\n const cacheEntry = await this.createCacheAccessor(input);\n\n try {\n await run.emitter.emit(\"start\", { input });\n const chunks: ChatModelOutput[] = [];\n\n const generator =\n cacheEntry.value ??\n (input.stream\n ? this._createStream(input, run)\n : toAsyncGenerator(this._create(input, run)));\n\n const controller = new AbortController();\n for await (const value of generator) {\n chunks.push(value);\n await run.emitter.emit(\"newToken\", {\n value,\n callbacks: { abort: () => controller.abort() },\n });\n if (controller.signal.aborted) {\n break;\n }\n }\n\n cacheEntry.resolve(chunks);\n const result = ChatModelOutput.fromChunks(chunks);\n\n if (forceToolCallViaResponseFormat && isEmpty(result.getToolCalls())) {\n const lastMsg = result.messages.at(-1)!;\n const toolCall = parseBrokenJson(lastMsg.text);\n if (!toolCall) {\n throw new ChatModelError(\n `Failed to produce a valid tool call. Generate output: ${lastMsg.text}`,\n [],\n {\n isFatal: true,\n isRetryable: false,\n },\n );\n }\n lastMsg.content.length = 0;\n lastMsg.content.push({\n type: \"tool-call\",\n toolCallId: `call_${randomString(8).toLowerCase()}`,\n toolName: toolCall.name, // todo: add types\n args: toolCall.parameters,\n });\n }\n\n await run.emitter.emit(\"success\", { value: result });\n return result;\n } catch (error) {\n await run.emitter.emit(\"error\", { input, error });\n await cacheEntry.reject(error);\n if (error instanceof ChatModelError) {\n throw error;\n } else {\n throw new ChatModelError(`The Chat Model has encountered an error.`, [error]);\n }\n } finally {\n await run.emitter.emit(\"finish\", null);\n }\n },\n );\n }\n\n createStructure<T>(input: ChatModelObjectInput<T>) {\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n return await this._createStructure<T>(input, run);\n },\n );\n }\n\n config({ cache, parameters }: ChatConfig): void {\n if (cache) {\n this.cache = isFunction(cache) ? cache(this.cache) : cache;\n }\n if (parameters) {\n this.parameters = isFunction(parameters) ? parameters(this.parameters) : parameters;\n }\n }\n\n static async fromName(name: FullModelName | ProviderName, options?: ChatModelParameters) {\n const { providerId, modelId } = parseModel(name);\n const Target = await loadModel<ChatModel>(providerId, \"chat\");\n return new Target(modelId || undefined, options);\n }\n\n protected abstract _create(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelOutput>;\n protected abstract _createStream(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): AsyncGenerator<ChatModelOutput, void>;\n\n protected async _createStructure<T>(\n input: ChatModelObjectInput<T>,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const { schema, ...options } = input;\n const jsonSchema = toJsonSchema(schema);\n\n const systemTemplate =\n input.systemPromptTemplate ??\n new PromptTemplate({\n schema: z.object({\n schema: z.string().min(1),\n }),\n template: `You are a helpful assistant that generates only valid JSON adhering to the following JSON Schema.\n\n\\`\\`\\`\n{{schema}}\n\\`\\`\\`\n\nIMPORTANT: You MUST answer with a JSON object that matches the JSON schema above.`,\n });\n\n const messages: Message[] = [\n new SystemMessage(systemTemplate.render({ schema: JSON.stringify(jsonSchema, null, 2) })),\n ...input.messages,\n ];\n\n const errorTemplate = new PromptTemplate({\n schema: z.object({\n errors: z.string(),\n expected: z.string(),\n received: z.string(),\n }),\n template: `Generated object does not match the expected JSON schema!\n\nValidation Errors: {{errors}}`,\n });\n\n return new Retryable<ChatModelObjectOutput<T>>({\n executor: async () => {\n const response = await this._create(\n {\n ...options,\n messages,\n responseFormat: { type: \"object-json\" },\n },\n run,\n );\n\n const textResponse = response.getTextContent();\n const object: T = parseBrokenJson(textResponse, { pair: [\"{\", \"}\"] });\n const validator = createSchemaValidator(schema) as ValidateFunction<T>;\n\n const success = validator(object);\n if (!success) {\n const context = {\n expected: JSON.stringify(jsonSchema),\n received: textResponse,\n errors: JSON.stringify(validator.errors ?? []),\n };\n\n messages.push(new UserMessage(errorTemplate.render(context)));\n throw new ChatModelError(`LLM did not produce a valid output.`, [], {\n context,\n });\n }\n\n return {\n object,\n output: response,\n };\n },\n config: {\n signal: run.signal,\n maxRetries: input?.maxRetries || 1,\n },\n }).get();\n }\n\n createSnapshot() {\n return {\n cache: this.cache,\n emitter: this.emitter,\n parameters: shallowCopy(this.parameters),\n logger: this.logger,\n toolChoiceSupport: this.toolChoiceSupport.slice(),\n toolCallFallbackViaResponseFormat: this.toolCallFallbackViaResponseFormat,\n modelSupportsToolCalling: this.modelSupportsToolCalling,\n };\n }\n\n destroy() {\n this.emitter.destroy();\n }\n\n protected async createCacheAccessor({\n abortSignal: _,\n messages,\n tools = [],\n ...input\n }: ChatModelInput) {\n const key = ObjectHashKeyFn({\n ...input,\n messages: await Serializer.serialize(messages.map((msg) => msg.toPlain())),\n tools: await Serializer.serialize(tools),\n });\n const value = await this.cache.get(key);\n const isNew = value === undefined;\n\n let task: Task<ChatModelOutput[]> | null = null;\n if (isNew) {\n task = new Task();\n await this.cache.set(key, task);\n }\n\n return {\n key,\n value,\n resolve: <T2 extends ChatModelOutput>(value: T2[]) => {\n task?.resolve?.(value);\n },\n reject: async (error: Error) => {\n task?.reject?.(error);\n if (isNew) {\n await this.cache.delete(key);\n }\n },\n };\n }\n\n protected shouldForceToolCallViaResponseFormat({\n tools = [],\n toolChoice,\n responseFormat,\n }: ChatModelInput) {\n if (\n isEmpty(tools) ||\n !toolChoice ||\n toolChoice === \"none\" ||\n toolChoice === \"auto\" ||\n !this.toolCallFallbackViaResponseFormat ||\n Boolean(responseFormat)\n ) {\n return false;\n }\n\n const toolChoiceSupported = this.isToolChoiceSupported(toolChoice);\n return !this.modelSupportsToolCalling || !toolChoiceSupported;\n }\n\n protected isToolChoiceSupported(choice?: ChatModelToolChoice): boolean {\n return (\n !choice ||\n (choice instanceof Tool\n ? this.toolChoiceSupport.includes(\"single\")\n : this.toolChoiceSupport.includes(choice))\n );\n }\n}\n\nexport class ChatModelOutput extends Serializable {\n constructor(\n public readonly messages: Message[],\n public usage?: ChatModelUsage,\n public finishReason?: ChatModelFinishReason,\n ) {\n super();\n }\n\n static fromChunks(chunks: ChatModelOutput[]) {\n const final = new ChatModelOutput([]);\n chunks.forEach((cur) => final.merge(cur));\n return final;\n }\n\n merge(other: ChatModelOutput) {\n this.messages.push(...other.messages);\n this.finishReason = other.finishReason;\n if (this.usage && other.usage) {\n this.usage = customMerge([this.usage, other.usage], {\n totalTokens: takeBigger,\n promptTokens: takeBigger,\n completionTokens: takeBigger,\n });\n } else if (other.usage) {\n this.usage = shallowCopy(other.usage);\n }\n }\n\n getToolCalls() {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.getToolCalls())\n .filter(Boolean);\n }\n\n getTextMessages(): AssistantMessage[] {\n return this.messages.filter((r) => r instanceof AssistantMessage).filter((r) => r.text);\n }\n\n getTextContent(): string {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.text)\n .filter(Boolean)\n .join(\"\");\n }\n\n toString() {\n return this.getTextContent();\n }\n\n createSnapshot() {\n return {\n messages: shallowCopy(this.messages),\n usage: shallowCopy(this.usage),\n finishReason: this.finishReason,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/backend/chat.ts"],"names":["ChatModel","Serializable","cache","NullCache","parameters","logger","Logger","root","child","name","toolChoiceSupport","toolCallFallbackViaResponseFormat","modelSupportsToolCalling","create","input","shallowCopy","RunContext","enter","params","signal","abortSignal","run","tools","forceToolCallViaResponseFormat","shouldForceToolCallViaResponseFormat","isEmpty","responseFormat","generateToolUnionSchema","filterToolsByToolChoice","toolChoice","undefined","isToolChoiceSupported","warn","cacheEntry","createCacheAccessor","emitter","emit","chunks","generator","value","stream","_createStream","toAsyncGenerator","_create","controller","AbortController","push","callbacks","abort","aborted","resolve","result","ChatModelOutput","fromChunks","getToolCalls","lastMsg","messages","at","toolCall","parseBrokenJson","text","ChatModelError","isFatal","isRetryable","content","length","type","toolCallId","randomString","toLowerCase","toolName","error","reject","createStructure","_createStructure","config","isFunction","fromName","options","providerId","modelId","parseModel","Target","loadModel","schema","jsonSchema","toJsonSchema","systemTemplate","systemPromptTemplate","PromptTemplate","z","object","string","min","template","SystemMessage","render","JSON","stringify","errorTemplate","errors","expected","received","Retryable","executor","response","textResponse","getTextContent","pair","validator","createSchemaValidator","success","context","UserMessage","output","maxRetries","get","createSnapshot","slice","destroy","_","key","ObjectHashKeyFn","Serializer","serialize","map","msg","toPlain","isNew","task","Task","set","delete","Boolean","toolChoiceSupported","choice","Tool","includes","usage","finishReason","final","forEach","cur","merge","other","customMerge","totalTokens","takeBigger","promptTokens","completionTokens","filter","r","AssistantMessage","flatMap","getTextMessages","join","toString","loadSnapshot","snapshot","Object","assign"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA4HO,MAAeA,kBAAkBC,YAAAA,CAAAA;EA5HxC;;;AA8HSC,EAAAA,KAAAA,GAAwB,IAAIC,SAAAA,EAAAA;AAC5BC,EAAAA,UAAAA,GAAkC,EAAC;EACvBC,MAAAA,GAASC,MAAAA,CAAOC,KAAKC,KAAAA,CAAM;AAC5CC,IAAAA,IAAAA,EAAM,KAAK,WAAA,CAAYA;GACzB,CAAA;EAEgBC,iBAAAA,GAAkD;AAChE,IAAA,UAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA;;EAEKC,iCAAAA,GAAoC,IAAA;EAC3BC,wBAAAA,GAAoC,IAAA;AAKpDC,EAAAA,MAAAA,CAAOC,KAAAA,EAA8C;AACnDA,IAAAA,KAAAA,GAAQC,YAAYD,KAAAA,CAAAA;AAEpB,IAAA,OAAOE,UAAAA,CAAWC,MAChB,IAAA,EACA;MAAEC,MAAAA,EAAQ;AAACJ,QAAAA;;AAAiBK,MAAAA,MAAAA,EAAQL,KAAAA,EAAOM;AAAY,KAAA,EACvD,OAAOC,GAAAA,KAAAA;AACL,MAAA,IAAI,CAAC,KAAKT,wBAAAA,EAA0B;AAClCE,QAAAA,KAAAA,CAAMQ,QAAQ,EAAA;AAChB;AAEA,MAAA,MAAMC,8BAAAA,GAAiC,IAAA,CAAKC,oCAAAA,CAAqCV,KAAAA,CAAAA;AACjF,MAAA,IAAIS,kCAAkCT,KAAAA,CAAMQ,KAAAA,IAAS,CAACG,OAAAA,CAAQX,KAAAA,CAAMQ,KAAK,CAAA,EAAG;AAC1ER,QAAAA,KAAAA,CAAMY,cAAAA,GAAiB,MAAMC,uBAAAA,CAC3BC,uBAAAA,CAAwBd,MAAMQ,KAAAA,EAAOR,KAAAA,CAAMe,UAAU,CAAA,CAAA;AAEvDf,QAAAA,KAAAA,CAAMe,UAAAA,GAAaC,MAAAA;AACrB;AAEA,MAAA,IAAI,CAAC,IAAA,CAAKC,qBAAAA,CAAsBjB,KAAAA,CAAMe,UAAU,CAAA,EAAG;AACjD,QAAA,IAAA,CAAKxB,MAAAA,CAAO2B,IAAAA,CACV,CAAA,iCAAA,EAAoClB,KAAAA,CAAMe,UAAU,CAAA,6BAAA,CAA+B,CAAA;AAErFf,QAAAA,KAAAA,CAAMe,UAAAA,GAAaC,MAAAA;AACrB;AAEA,MAAA,MAAMG,UAAAA,GAAa,MAAM,IAAA,CAAKC,mBAAAA,CAAoBpB,KAAAA,CAAAA;AAElD,MAAA,IAAI;AACF,QAAA,MAAMO,GAAAA,CAAIc,OAAAA,CAAQC,IAAAA,CAAK,OAAA,EAAS;AAAEtB,UAAAA;SAAM,CAAA;AACxC,QAAA,MAAMuB,SAA4B,EAAA;AAElC,QAAA,MAAMC,SAAAA,GACJL,UAAAA,CAAWM,KAAAA,KACVzB,KAAAA,CAAM0B,SACH,IAAA,CAAKC,aAAAA,CAAc3B,KAAAA,EAAOO,GAAAA,IAC1BqB,gBAAAA,CAAiB,IAAA,CAAKC,OAAAA,CAAQ7B,KAAAA,EAAOO,GAAAA,CAAAA,CAAAA,CAAAA;AAE3C,QAAA,MAAMuB,UAAAA,GAAa,IAAIC,eAAAA,EAAAA;AACvB,QAAA,WAAA,MAAiBN,SAASD,SAAAA,EAAW;AACnCD,UAAAA,MAAAA,CAAOS,KAAKP,KAAAA,CAAAA;AACZ,UAAA,MAAMlB,GAAAA,CAAIc,OAAAA,CAAQC,IAAAA,CAAK,UAAA,EAAY;AACjCG,YAAAA,KAAAA;YACAQ,SAAAA,EAAW;cAAEC,KAAAA,kBAAO,MAAA,CAAA,MAAMJ,UAAAA,CAAWI,KAAAA,EAAK,EAAtB,OAAA;AAAyB;WAC/C,CAAA;AACA,UAAA,IAAIJ,UAAAA,CAAWzB,OAAO8B,OAAAA,EAAS;AAC7B,YAAA;AACF;AACF;AAEAhB,QAAAA,UAAAA,CAAWiB,QAAQb,MAAAA,CAAAA;AACnB,QAAA,MAAMc,MAAAA,GAASC,eAAAA,CAAgBC,UAAAA,CAAWhB,MAAAA,CAAAA;AAE1C,QAAA,IAAId,8BAAAA,IAAkCE,OAAAA,CAAQ0B,MAAAA,CAAOG,YAAAA,EAAY,CAAA,EAAK;AACpE,UAAA,MAAMC,OAAAA,GAAUJ,MAAAA,CAAOK,QAAAA,CAASC,EAAAA,CAAG,CAAA,CAAC,CAAA;AACpC,UAAA,MAAMC,QAAAA,GAAWC,eAAAA,CAAgBJ,OAAAA,CAAQK,IAAI,CAAA;AAC7C,UAAA,IAAI,CAACF,QAAAA,EAAU;AACb,YAAA,MAAM,IAAIG,cAAAA,CACR,CAAA,sDAAA,EAAyDN,QAAQK,IAAI,CAAA,CAAA,EACrE,EAAA,EACA;cACEE,OAAAA,EAAS,IAAA;cACTC,WAAAA,EAAa;aACf,CAAA;AAEJ;AACAR,UAAAA,OAAAA,CAAQS,QAAQC,MAAAA,GAAS,CAAA;AACzBV,UAAAA,OAAAA,CAAQS,QAAQlB,IAAAA,CAAK;YACnBoB,IAAAA,EAAM,WAAA;AACNC,YAAAA,UAAAA,EAAY,CAAA,KAAA,EAAQC,YAAAA,CAAa,CAAA,CAAA,CAAGC,aAAW,CAAA,CAAA;AAC/CC,YAAAA,QAAAA,EAAUZ,QAAAA,CAASjD,IAAAA;;AACnBK,YAAAA,KAAAA,EAAO4C,QAAAA,CAAStD;WAClB,CAAA;AACF;AAEA,QAAA,MAAMiB,GAAAA,CAAIc,OAAAA,CAAQC,IAAAA,CAAK,SAAA,EAAW;UAAEG,KAAAA,EAAOY;SAAO,CAAA;AAClD,QAAA,OAAOA,MAAAA;AACT,OAAA,CAAA,OAASoB,KAAAA,EAAO;AACd,QAAA,MAAMlD,GAAAA,CAAIc,OAAAA,CAAQC,IAAAA,CAAK,OAAA,EAAS;AAAEtB,UAAAA,KAAAA;AAAOyD,UAAAA;SAAM,CAAA;AAC/C,QAAA,MAAMtC,UAAAA,CAAWuC,OAAOD,KAAAA,CAAAA;AACxB,QAAA,IAAIA,iBAAiBV,cAAAA,EAAgB;AACnC,UAAA,MAAMU,KAAAA;SACR,MAAO;AACL,UAAA,MAAM,IAAIV,eAAe,CAAA,wCAAA,CAAA,EAA4C;AAACU,YAAAA;AAAM,WAAA,CAAA;AAC9E;OACF,SAAA;AACE,QAAA,MAAMlD,GAAAA,CAAIc,OAAAA,CAAQC,IAAAA,CAAK,QAAA,EAAU,IAAA,CAAA;AACnC;KACF,CAAA;AAEJ;AAEAqC,EAAAA,eAAAA,CAAmB3D,KAAAA,EAAgC;AACjD,IAAA,OAAOE,UAAAA,CAAWC,MAChB,IAAA,EACA;MAAEC,MAAAA,EAAQ;AAACJ,QAAAA;;AAAiBK,MAAAA,MAAAA,EAAQL,KAAAA,EAAOM;AAAY,KAAA,EACvD,OAAOC,GAAAA,KAAAA;AACL,MAAA,OAAO,MAAM,IAAA,CAAKqD,gBAAAA,CAAoB5D,KAAAA,EAAOO,GAAAA,CAAAA;KAC/C,CAAA;AAEJ;EAEAsD,MAAAA,CAAO,EAAEzE,KAAAA,EAAOE,UAAAA,EAAU,EAAsB;AAC9C,IAAA,IAAIF,KAAAA,EAAO;AACT,MAAA,IAAA,CAAKA,QAAQ0E,UAAAA,CAAW1E,KAAAA,IAASA,KAAAA,CAAM,IAAA,CAAKA,KAAK,CAAA,GAAIA,KAAAA;AACvD;AACA,IAAA,IAAIE,UAAAA,EAAY;AACd,MAAA,IAAA,CAAKA,aAAawE,UAAAA,CAAWxE,UAAAA,IAAcA,UAAAA,CAAW,IAAA,CAAKA,UAAU,CAAA,GAAIA,UAAAA;AAC3E;AACF;EAEA,aAAayE,QAAAA,CAASpE,MAAoCqE,OAAAA,EAA+B;AACvF,IAAA,MAAM,EAAEC,UAAAA,EAAYC,OAAAA,EAAO,GAAKC,WAAWxE,IAAAA,CAAAA;AAC3C,IAAA,MAAMyE,MAAAA,GAAS,MAAMC,SAAAA,CAAqBJ,UAAAA,EAAY,MAAA,CAAA;AACtD,IAAA,OAAO,IAAIG,MAAAA,CAAOF,OAAAA,IAAWlD,MAAAA,EAAWgD,OAAAA,CAAAA;AAC1C;EAWA,MAAgBJ,gBAAAA,CACd5D,OACAO,GAAAA,EACmC;AACnC,IAAA,MAAM,EAAE+D,MAAAA,EAAQ,GAAGN,OAAAA,EAAAA,GAAYhE,KAAAA;AAC/B,IAAA,MAAMuE,UAAAA,GAAaC,aAAaF,MAAAA,CAAAA;AAEhC,IAAA,MAAMG,cAAAA,GACJzE,KAAAA,CAAM0E,oBAAAA,IACN,IAAIC,cAAAA,CAAe;AACjBL,MAAAA,MAAAA,EAAQM,EAAEC,MAAAA,CAAO;AACfP,QAAAA,MAAAA,EAAQM,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,CAAI,CAAA;OACzB,CAAA;MACAC,QAAAA,EAAU,CAAA;;;;;;;KAOZ,CAAA;AAEF,IAAA,MAAMtC,QAAAA,GAAsB;MAC1B,IAAIuC,aAAAA,CAAcR,eAAeS,MAAAA,CAAO;AAAEZ,QAAAA,MAAAA,EAAQa,IAAAA,CAAKC,SAAAA,CAAUb,UAAAA,EAAY,IAAA,EAAM,CAAA;AAAG,OAAA,CAAA,CAAA;SACnFvE,KAAAA,CAAM0C;;AAGX,IAAA,MAAM2C,aAAAA,GAAgB,IAAIV,cAAAA,CAAe;AACvCL,MAAAA,MAAAA,EAAQM,EAAEC,MAAAA,CAAO;AACfS,QAAAA,MAAAA,EAAQV,EAAEE,MAAAA,EAAM;AAChBS,QAAAA,QAAAA,EAAUX,EAAEE,MAAAA,EAAM;AAClBU,QAAAA,QAAAA,EAAUZ,EAAEE,MAAAA;OACd,CAAA;MACAE,QAAAA,EAAU,CAAA;;;KAGZ,CAAA;AAEA,IAAA,OAAO,IAAIS,SAAAA,CAAoC;AAC7CC,MAAAA,QAAAA,kBAAU,MAAA,CAAA,YAAA;AACR,QAAA,MAAMC,QAAAA,GAAW,MAAM,IAAA,CAAK9D,OAAAA,CAC1B;UACE,GAAGmC,OAAAA;AACHtB,UAAAA,QAAAA;UACA9B,cAAAA,EAAgB;YAAEwC,IAAAA,EAAM;AAAc;AACxC,SAAA,EACA7C,GAAAA,CAAAA;AAGF,QAAA,MAAMqF,YAAAA,GAAeD,SAASE,cAAAA,EAAc;AAC5C,QAAA,MAAMhB,MAAAA,GAAYhC,gBAAgB+C,YAAAA,EAAc;UAAEE,IAAAA,EAAM;AAAC,YAAA,GAAA;AAAK,YAAA;;SAAK,CAAA;AACnE,QAAA,MAAMC,SAAAA,GAAYC,sBAAsB1B,MAAAA,CAAAA;AAExC,QAAA,MAAM2B,OAAAA,GAAUF,UAAUlB,MAAAA,CAAAA;AAC1B,QAAA,IAAI,CAACoB,OAAAA,EAAS;AACZ,UAAA,MAAMC,OAAAA,GAAU;YACdX,QAAAA,EAAUJ,IAAAA,CAAKC,UAAUb,UAAAA,CAAAA;YACzBiB,QAAAA,EAAUI,YAAAA;AACVN,YAAAA,MAAAA,EAAQH,IAAAA,CAAKC,SAAAA,CAAUW,SAAAA,CAAUT,MAAAA,IAAU,EAAE;AAC/C,WAAA;AAEA5C,UAAAA,QAAAA,CAASV,KAAK,IAAImE,WAAAA,CAAYd,cAAcH,MAAAA,CAAOgB,OAAAA,CAAAA,CAAAA,CAAAA;AACnD,UAAA,MAAM,IAAInD,cAAAA,CAAe,CAAA,mCAAA,CAAA,EAAuC,EAAA,EAAI;AAClEmD,YAAAA;WACF,CAAA;AACF;AAEA,QAAA,OAAO;AACLrB,UAAAA,MAAAA;UACAuB,MAAAA,EAAQT;AACV,SAAA;OACF,EAhCU,UAAA,CAAA;MAiCV9B,MAAAA,EAAQ;AACNxD,QAAAA,MAAAA,EAAQE,GAAAA,CAAIF,MAAAA;AACZgG,QAAAA,UAAAA,EAAYrG,OAAOqG,UAAAA,IAAc;AACnC;AACF,KAAA,EAAGC,GAAAA,EAAG;AACR;EAEAC,cAAAA,GAAiB;AACf,IAAA,OAAO;AACLnH,MAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AACZiC,MAAAA,OAAAA,EAAS,IAAA,CAAKA,OAAAA;MACd/B,UAAAA,EAAYW,WAAAA,CAAY,KAAKX,UAAU,CAAA;AACvCC,MAAAA,MAAAA,EAAQ,IAAA,CAAKA,MAAAA;MACbK,iBAAAA,EAAmB,IAAA,CAAKA,kBAAkB4G,KAAAA,EAAK;AAC/C3G,MAAAA,iCAAAA,EAAmC,IAAA,CAAKA,iCAAAA;AACxCC,MAAAA,wBAAAA,EAA0B,IAAA,CAAKA;AACjC,KAAA;AACF;EAEA2G,OAAAA,GAAU;AACR,IAAA,IAAA,CAAKpF,QAAQoF,OAAAA,EAAO;AACtB;EAEA,MAAgBrF,mBAAAA,CAAoB,EAClCd,WAAAA,EAAaoG,CAAAA,EACbhE,QAAAA,EACAlC,QAAQ,EAAA,EACR,GAAGR,KAAAA,EAAAA,EACc;AACjB,IAAA,MAAM2G,MAAMC,eAAAA,CAAgB;MAC1B,GAAG5G,KAAAA;MACH0C,QAAAA,EAAU,MAAMmE,UAAAA,CAAWC,SAAAA,CAAUpE,QAAAA,CAASqE,GAAAA,CAAI,CAACC,GAAAA,KAAQA,GAAAA,CAAIC,OAAAA,EAAO,CAAA,CAAA;MACtEzG,KAAAA,EAAO,MAAMqG,UAAAA,CAAWC,SAAAA,CAAUtG,KAAAA;KACpC,CAAA;AACA,IAAA,MAAMiB,KAAAA,GAAQ,MAAM,IAAA,CAAKrC,KAAAA,CAAMkH,IAAIK,GAAAA,CAAAA;AACnC,IAAA,MAAMO,QAAQzF,KAAAA,KAAUT,MAAAA;AAExB,IAAA,IAAImG,IAAAA,GAAuC,IAAA;AAC3C,IAAA,IAAID,KAAAA,EAAO;AACTC,MAAAA,IAAAA,GAAO,IAAIC,IAAAA,EAAAA;AACX,MAAA,MAAM,IAAA,CAAKhI,KAAAA,CAAMiI,GAAAA,CAAIV,GAAAA,EAAKQ,IAAAA,CAAAA;AAC5B;AAEA,IAAA,OAAO;AACLR,MAAAA,GAAAA;AACAlF,MAAAA,KAAAA;AACAW,MAAAA,OAAAA,0BAAsCX,MAAAA,KAAAA;AACpC0F,QAAAA,IAAAA,EAAM/E,UAAUX,MAAAA,CAAAA;OAClB,EAFS,SAAA,CAAA;AAGTiC,MAAAA,MAAAA,gCAAeD,KAAAA,KAAAA;AACb0D,QAAAA,IAAAA,EAAMzD,SAASD,KAAAA,CAAAA;AACf,QAAA,IAAIyD,KAAAA,EAAO;AACT,UAAA,MAAM,IAAA,CAAK9H,KAAAA,CAAMkI,MAAAA,CAAOX,GAAAA,CAAAA;AAC1B;OACF,EALQ,QAAA;AAMV,KAAA;AACF;AAEUjG,EAAAA,oCAAAA,CAAqC,EAC7CF,KAAAA,GAAQ,EAAA,EACRO,UAAAA,EACAH,gBAAc,EACG;AACjB,IAAA,IACED,OAAAA,CAAQH,KAAAA,CAAAA,IACR,CAACO,cACDA,UAAAA,KAAe,MAAA,IACfA,UAAAA,KAAe,MAAA,IACf,CAAC,IAAA,CAAKlB,iCAAAA,IACN0H,OAAAA,CAAQ3G,cAAAA,CAAAA,EACR;AACA,MAAA,OAAO,KAAA;AACT;AAEA,IAAA,MAAM4G,mBAAAA,GAAsB,IAAA,CAAKvG,qBAAAA,CAAsBF,UAAAA,CAAAA;AACvD,IAAA,OAAO,CAAC,IAAA,CAAKjB,wBAAAA,IAA4B,CAAC0H,mBAAAA;AAC5C;AAEUvG,EAAAA,qBAAAA,CAAsBwG,MAAAA,EAAuC;AACrE,IAAA,OACE,CAACA,MAAAA,KACAA,MAAAA,YAAkBC,IAAAA,GACf,IAAA,CAAK9H,iBAAAA,CAAkB+H,QAAAA,CAAS,QAAA,CAAA,GAChC,IAAA,CAAK/H,iBAAAA,CAAkB+H,QAAAA,CAASF,MAAAA,CAAAA,CAAAA;AAExC;AACF;AAEO,MAAMnF,wBAAwBnD,YAAAA,CAAAA;EA9arC;;;;;;EA+aE,WAAA,CACkBuD,QAAAA,EACTkF,OACAC,YAAAA,EACP;AACA,IAAA,KAAA,EAAK,EAAA,KAJWnF,QAAAA,GAAAA,QAAAA,EAAAA,KACTkF,KAAAA,GAAAA,KAAAA,EAAAA,KACAC,YAAAA,GAAAA,YAAAA;AAGT;AAEA,EAAA,OAAOtF,WAAWhB,MAAAA,EAA2B;AAC3C,IAAA,MAAMuG,KAAAA,GAAQ,IAAIxF,eAAAA,CAAgB,EAAE,CAAA;AACpCf,IAAAA,MAAAA,CAAOwG,QAAQ,CAACC,GAAAA,KAAQF,KAAAA,CAAMG,KAAAA,CAAMD,GAAAA,CAAAA,CAAAA;AACpC,IAAA,OAAOF,KAAAA;AACT;AAEAG,EAAAA,KAAAA,CAAMC,KAAAA,EAAwB;AAC5B,IAAA,IAAA,CAAKxF,QAAAA,CAASV,IAAAA,CAAI,GAAIkG,KAAAA,CAAMxF,QAAQ,CAAA;AACpC,IAAA,IAAA,CAAKmF,eAAeK,KAAAA,CAAML,YAAAA;AAC1B,IAAA,IAAI,IAAA,CAAKD,KAAAA,IAASM,KAAAA,CAAMN,KAAAA,EAAO;AAC7B,MAAA,IAAA,CAAKA,QAAQO,WAAAA,CAAY;QAAC,IAAA,CAAKP,KAAAA;QAAOM,KAAAA,CAAMN;AAAQ,OAAA,EAAA;QAClDQ,WAAAA,EAAaC,UAAAA;QACbC,YAAAA,EAAcD,UAAAA;QACdE,gBAAAA,EAAkBF;OACpB,CAAA;AACF,KAAA,MAAA,IAAWH,MAAMN,KAAAA,EAAO;AACtB,MAAA,IAAA,CAAKA,KAAAA,GAAQ3H,WAAAA,CAAYiI,KAAAA,CAAMN,KAAK,CAAA;AACtC;AACF;EAEApF,YAAAA,GAAe;AACb,IAAA,OAAO,KAAKE,QAAAA,CACT8F,MAAAA,CAAO,CAACC,CAAAA,KAAMA,aAAaC,gBAAAA,CAAAA,CAC3BC,OAAAA,CAAQ,CAACF,MAAMA,CAAAA,CAAEjG,YAAAA,EAAY,CAAA,CAC7BgG,OAAOjB,OAAAA,CAAAA;AACZ;EAEAqB,eAAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAKlG,QAAAA,CAAS8F,MAAAA,CAAO,CAACC,CAAAA,KAAMA,CAAAA,YAAaC,gBAAAA,CAAAA,CAAkBF,MAAAA,CAAO,CAACC,CAAAA,KAAMA,CAAAA,CAAE3F,IAAI,CAAA;AACxF;EAEA+C,cAAAA,GAAyB;AACvB,IAAA,OAAO,KAAKnD,QAAAA,CACT8F,MAAAA,CAAO,CAACC,CAAAA,KAAMA,CAAAA,YAAaC,gBAAAA,CAAAA,CAC3BC,OAAAA,CAAQ,CAACF,CAAAA,KAAMA,EAAE3F,IAAI,CAAA,CACrB0F,OAAOjB,OAAAA,CAAAA,CACPsB,KAAK,EAAA,CAAA;AACV;EAEAC,QAAAA,GAAW;AACT,IAAA,OAAO,KAAKjD,cAAAA,EAAc;AAC5B;EAEAU,cAAAA,GAAiB;AACf,IAAA,OAAO;MACL7D,QAAAA,EAAUzC,WAAAA,CAAY,KAAKyC,QAAQ,CAAA;MACnCkF,KAAAA,EAAO3H,WAAAA,CAAY,KAAK2H,KAAK,CAAA;AAC7BC,MAAAA,YAAAA,EAAc,IAAA,CAAKA;AACrB,KAAA;AACF;AAEAkB,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 { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { customMerge } from \"@/internals/helpers/object.js\";\nimport { takeBigger } from \"@/internals/helpers/number.js\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext, RunContext } from \"@/context.js\";\nimport { isEmpty, isFunction, randomString } from \"remeda\";\nimport { ObjectHashKeyFn } from \"@/cache/decoratorCache.js\";\nimport { Task } from \"promise-based-task\";\nimport { NullCache } from \"@/cache/nullCache.js\";\nimport { BaseCache } from \"@/cache/base.js\";\nimport {\n filterToolsByToolChoice,\n FullModelName,\n generateToolUnionSchema,\n loadModel,\n parseModel,\n} from \"@/backend/utils.js\";\nimport { ProviderName } from \"@/backend/constants.js\";\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { AssistantMessage, Message, SystemMessage, UserMessage } from \"@/backend/message.js\";\n\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z, ZodSchema, ZodType } from \"zod\";\nimport {\n createSchemaValidator,\n parseBrokenJson,\n toJsonSchema,\n} from \"@/internals/helpers/schema.js\";\nimport { Retryable } from \"@/internals/helpers/retryable.js\";\nimport { SchemaObject, ValidateFunction } from \"ajv\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { toAsyncGenerator } from \"@/internals/helpers/promise.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\nimport { Logger } from \"@/logger/logger.js\";\n\nexport interface ChatModelParameters {\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n temperature?: number;\n topK?: number;\n n?: number;\n presencePenalty?: number;\n seed?: number;\n stopSequences?: string[];\n}\n\ninterface ResponseObjectJson {\n type: \"object-json\";\n schema?: SchemaObject;\n name?: string;\n description?: string;\n}\n\nexport interface ChatModelObjectInput<T> extends ChatModelParameters {\n schema: z.ZodSchema<T, any, any> | ResponseObjectJson;\n systemPromptTemplate?: PromptTemplate<ZodType<{ schema: string }>>;\n messages: Message[];\n abortSignal?: AbortSignal;\n maxRetries?: number;\n}\n\nexport interface ChatModelObjectOutput<T> {\n object: T;\n output: ChatModelOutput;\n}\n\nexport type ChatModelToolChoice = \"auto\" | \"none\" | \"required\" | AnyTool;\n\nexport interface ChatModelInput extends ChatModelParameters {\n tools?: AnyTool[];\n abortSignal?: AbortSignal;\n stopSequences?: string[];\n responseFormat?: ZodSchema | ResponseObjectJson;\n toolChoice?: ChatModelToolChoice;\n messages: Message[];\n}\n\nexport type ChatModelFinishReason =\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n\nexport interface ChatModelUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n reasoningTokens?: number;\n cachedPromptTokens?: number;\n}\n\nexport interface ChatModelEvents {\n newToken?: Callback<{ value: ChatModelOutput; callbacks: { abort: () => void } }>;\n success?: Callback<{ value: ChatModelOutput }>;\n start?: Callback<{ input: ChatModelInput }>;\n error?: Callback<{ input: ChatModelInput; error: FrameworkError }>;\n finish?: Callback<null>;\n}\n\nexport type ChatModelEmitter<A = Record<never, never>> = Emitter<\n ChatModelEvents & Omit<A, keyof ChatModelEvents>\n>;\n\nexport type ChatModelCache = BaseCache<Task<ChatModelOutput[]>>;\nexport type ConfigFn<T> = (value: T) => T;\nexport interface ChatConfig {\n cache?: ChatModelCache | ConfigFn<ChatModelCache>;\n parameters?: ChatModelParameters | ConfigFn<ChatModelParameters>;\n}\n\nexport type ChatModelToolChoiceSupport = \"required\" | \"none\" | \"single\" | \"auto\";\n\nexport abstract class ChatModel extends Serializable {\n public abstract readonly emitter: Emitter<ChatModelEvents>;\n public cache: ChatModelCache = new NullCache();\n public parameters: ChatModelParameters = {};\n protected readonly logger = Logger.root.child({\n name: this.constructor.name,\n });\n\n public readonly toolChoiceSupport: ChatModelToolChoiceSupport[] = [\n \"required\",\n \"none\",\n \"single\",\n \"auto\",\n ];\n public toolCallFallbackViaResponseFormat = true;\n public readonly modelSupportsToolCalling: boolean = true;\n\n abstract get modelId(): string;\n abstract get providerId(): string;\n\n create(input: ChatModelInput & { stream?: boolean }) {\n input = shallowCopy(input);\n\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n if (!this.modelSupportsToolCalling) {\n input.tools = [];\n }\n\n const forceToolCallViaResponseFormat = this.shouldForceToolCallViaResponseFormat(input);\n if (forceToolCallViaResponseFormat && input.tools && !isEmpty(input.tools)) {\n input.responseFormat = await generateToolUnionSchema(\n filterToolsByToolChoice(input.tools, input.toolChoice),\n );\n input.toolChoice = undefined;\n }\n\n if (!this.isToolChoiceSupported(input.toolChoice)) {\n this.logger.warn(\n `The following tool choice value '${input.toolChoice}' is not supported. Ignoring.`,\n );\n input.toolChoice = undefined;\n }\n\n const cacheEntry = await this.createCacheAccessor(input);\n\n try {\n await run.emitter.emit(\"start\", { input });\n const chunks: ChatModelOutput[] = [];\n\n const generator =\n cacheEntry.value ??\n (input.stream\n ? this._createStream(input, run)\n : toAsyncGenerator(this._create(input, run)));\n\n const controller = new AbortController();\n for await (const value of generator) {\n chunks.push(value);\n await run.emitter.emit(\"newToken\", {\n value,\n callbacks: { abort: () => controller.abort() },\n });\n if (controller.signal.aborted) {\n break;\n }\n }\n\n cacheEntry.resolve(chunks);\n const result = ChatModelOutput.fromChunks(chunks);\n\n if (forceToolCallViaResponseFormat && isEmpty(result.getToolCalls())) {\n const lastMsg = result.messages.at(-1)!;\n const toolCall = parseBrokenJson(lastMsg.text);\n if (!toolCall) {\n throw new ChatModelError(\n `Failed to produce a valid tool call. Generate output: ${lastMsg.text}`,\n [],\n {\n isFatal: true,\n isRetryable: false,\n },\n );\n }\n lastMsg.content.length = 0;\n lastMsg.content.push({\n type: \"tool-call\",\n toolCallId: `call_${randomString(8).toLowerCase()}`,\n toolName: toolCall.name, // todo: add types\n input: toolCall.parameters,\n });\n }\n\n await run.emitter.emit(\"success\", { value: result });\n return result;\n } catch (error) {\n await run.emitter.emit(\"error\", { input, error });\n await cacheEntry.reject(error);\n if (error instanceof ChatModelError) {\n throw error;\n } else {\n throw new ChatModelError(`The Chat Model has encountered an error.`, [error]);\n }\n } finally {\n await run.emitter.emit(\"finish\", null);\n }\n },\n );\n }\n\n createStructure<T>(input: ChatModelObjectInput<T>) {\n return RunContext.enter(\n this,\n { params: [input] as const, signal: input?.abortSignal },\n async (run) => {\n return await this._createStructure<T>(input, run);\n },\n );\n }\n\n config({ cache, parameters }: ChatConfig): void {\n if (cache) {\n this.cache = isFunction(cache) ? cache(this.cache) : cache;\n }\n if (parameters) {\n this.parameters = isFunction(parameters) ? parameters(this.parameters) : parameters;\n }\n }\n\n static async fromName(name: FullModelName | ProviderName, options?: ChatModelParameters) {\n const { providerId, modelId } = parseModel(name);\n const Target = await loadModel<ChatModel>(providerId, \"chat\");\n return new Target(modelId || undefined, options);\n }\n\n protected abstract _create(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelOutput>;\n protected abstract _createStream(\n input: ChatModelInput,\n run: GetRunContext<typeof this>,\n ): AsyncGenerator<ChatModelOutput, void>;\n\n protected async _createStructure<T>(\n input: ChatModelObjectInput<T>,\n run: GetRunContext<typeof this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const { schema, ...options } = input;\n const jsonSchema = toJsonSchema(schema);\n\n const systemTemplate =\n input.systemPromptTemplate ??\n new PromptTemplate({\n schema: z.object({\n schema: z.string().min(1),\n }),\n template: `You are a helpful assistant that generates only valid JSON adhering to the following JSON Schema.\n\n\\`\\`\\`\n{{schema}}\n\\`\\`\\`\n\nIMPORTANT: You MUST answer with a JSON object that matches the JSON schema above.`,\n });\n\n const messages: Message[] = [\n new SystemMessage(systemTemplate.render({ schema: JSON.stringify(jsonSchema, null, 2) })),\n ...input.messages,\n ];\n\n const errorTemplate = new PromptTemplate({\n schema: z.object({\n errors: z.string(),\n expected: z.string(),\n received: z.string(),\n }),\n template: `Generated object does not match the expected JSON schema!\n\nValidation Errors: {{errors}}`,\n });\n\n return new Retryable<ChatModelObjectOutput<T>>({\n executor: async () => {\n const response = await this._create(\n {\n ...options,\n messages,\n responseFormat: { type: \"object-json\" },\n },\n run,\n );\n\n const textResponse = response.getTextContent();\n const object: T = parseBrokenJson(textResponse, { pair: [\"{\", \"}\"] });\n const validator = createSchemaValidator(schema) as ValidateFunction<T>;\n\n const success = validator(object);\n if (!success) {\n const context = {\n expected: JSON.stringify(jsonSchema),\n received: textResponse,\n errors: JSON.stringify(validator.errors ?? []),\n };\n\n messages.push(new UserMessage(errorTemplate.render(context)));\n throw new ChatModelError(`LLM did not produce a valid output.`, [], {\n context,\n });\n }\n\n return {\n object,\n output: response,\n };\n },\n config: {\n signal: run.signal,\n maxRetries: input?.maxRetries || 1,\n },\n }).get();\n }\n\n createSnapshot() {\n return {\n cache: this.cache,\n emitter: this.emitter,\n parameters: shallowCopy(this.parameters),\n logger: this.logger,\n toolChoiceSupport: this.toolChoiceSupport.slice(),\n toolCallFallbackViaResponseFormat: this.toolCallFallbackViaResponseFormat,\n modelSupportsToolCalling: this.modelSupportsToolCalling,\n };\n }\n\n destroy() {\n this.emitter.destroy();\n }\n\n protected async createCacheAccessor({\n abortSignal: _,\n messages,\n tools = [],\n ...input\n }: ChatModelInput) {\n const key = ObjectHashKeyFn({\n ...input,\n messages: await Serializer.serialize(messages.map((msg) => msg.toPlain())),\n tools: await Serializer.serialize(tools),\n });\n const value = await this.cache.get(key);\n const isNew = value === undefined;\n\n let task: Task<ChatModelOutput[]> | null = null;\n if (isNew) {\n task = new Task();\n await this.cache.set(key, task);\n }\n\n return {\n key,\n value,\n resolve: <T2 extends ChatModelOutput>(value: T2[]) => {\n task?.resolve?.(value);\n },\n reject: async (error: Error) => {\n task?.reject?.(error);\n if (isNew) {\n await this.cache.delete(key);\n }\n },\n };\n }\n\n protected shouldForceToolCallViaResponseFormat({\n tools = [],\n toolChoice,\n responseFormat,\n }: ChatModelInput) {\n if (\n isEmpty(tools) ||\n !toolChoice ||\n toolChoice === \"none\" ||\n toolChoice === \"auto\" ||\n !this.toolCallFallbackViaResponseFormat ||\n Boolean(responseFormat)\n ) {\n return false;\n }\n\n const toolChoiceSupported = this.isToolChoiceSupported(toolChoice);\n return !this.modelSupportsToolCalling || !toolChoiceSupported;\n }\n\n protected isToolChoiceSupported(choice?: ChatModelToolChoice): boolean {\n return (\n !choice ||\n (choice instanceof Tool\n ? this.toolChoiceSupport.includes(\"single\")\n : this.toolChoiceSupport.includes(choice))\n );\n }\n}\n\nexport class ChatModelOutput extends Serializable {\n constructor(\n public readonly messages: Message[],\n public usage?: ChatModelUsage,\n public finishReason?: ChatModelFinishReason,\n ) {\n super();\n }\n\n static fromChunks(chunks: ChatModelOutput[]) {\n const final = new ChatModelOutput([]);\n chunks.forEach((cur) => final.merge(cur));\n return final;\n }\n\n merge(other: ChatModelOutput) {\n this.messages.push(...other.messages);\n this.finishReason = other.finishReason;\n if (this.usage && other.usage) {\n this.usage = customMerge([this.usage, other.usage], {\n totalTokens: takeBigger,\n promptTokens: takeBigger,\n completionTokens: takeBigger,\n });\n } else if (other.usage) {\n this.usage = shallowCopy(other.usage);\n }\n }\n\n getToolCalls() {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.getToolCalls())\n .filter(Boolean);\n }\n\n getTextMessages(): AssistantMessage[] {\n return this.messages.filter((r) => r instanceof AssistantMessage).filter((r) => r.text);\n }\n\n getTextContent(): string {\n return this.messages\n .filter((r) => r instanceof AssistantMessage)\n .flatMap((r) => r.text)\n .filter(Boolean)\n .join(\"\");\n }\n\n toString() {\n return this.getTextContent();\n }\n\n createSnapshot() {\n return {\n messages: shallowCopy(this.messages),\n usage: shallowCopy(this.usage),\n finishReason: this.finishReason,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
package/dist/backend/core.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Backend } from './backend.cjs';
|
|
2
|
-
export { k as ChatConfig, m as ChatModel, i as ChatModelCache, h as ChatModelEmitter, g as ChatModelEvents, e as ChatModelFinishReason, d as ChatModelInput, a as ChatModelObjectInput, b as ChatModelObjectOutput, n as ChatModelOutput, C as ChatModelParameters, c as ChatModelToolChoice, l as ChatModelToolChoiceSupport, f as ChatModelUsage, j as ConfigFn } from '../chat-
|
|
2
|
+
export { k as ChatConfig, m as ChatModel, i as ChatModelCache, h as ChatModelEmitter, g as ChatModelEvents, e as ChatModelFinishReason, d as ChatModelInput, a as ChatModelObjectInput, b as ChatModelObjectOutput, n as ChatModelOutput, C as ChatModelParameters, c as ChatModelToolChoice, l as ChatModelToolChoiceSupport, f as ChatModelUsage, j as ConfigFn } from '../chat-CRb3vUVg.cjs';
|
|
3
3
|
export { EmbeddingModel, EmbeddingModelEmitter, EmbeddingModelEvents, EmbeddingModelInput, EmbeddingModelOutput } from './embedding.cjs';
|
|
4
4
|
export { AssistantMessage, CustomMessage, Message, MessageContentPart, MessageInput, MessageMeta, MessageRole, Role, SystemMessage, ToolMessage, UserMessage } from './message.cjs';
|
|
5
5
|
export { BackendError, ChatModelError, EmbeddingModelError } from './errors.cjs';
|
|
@@ -9,7 +9,7 @@ import '../internals/helpers/guards.cjs';
|
|
|
9
9
|
import './constants.cjs';
|
|
10
10
|
import 'ai';
|
|
11
11
|
import '../context.cjs';
|
|
12
|
-
import '../emitter-
|
|
12
|
+
import '../emitter-DpqUYjXH.cjs';
|
|
13
13
|
import '../internals/helpers/promise.cjs';
|
|
14
14
|
import '../errors.cjs';
|
|
15
15
|
import 'promise-based-task';
|
package/dist/backend/core.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Backend } from './backend.js';
|
|
2
|
-
export { k as ChatConfig, m as ChatModel, i as ChatModelCache, h as ChatModelEmitter, g as ChatModelEvents, e as ChatModelFinishReason, d as ChatModelInput, a as ChatModelObjectInput, b as ChatModelObjectOutput, n as ChatModelOutput, C as ChatModelParameters, c as ChatModelToolChoice, l as ChatModelToolChoiceSupport, f as ChatModelUsage, j as ConfigFn } from '../chat-
|
|
2
|
+
export { k as ChatConfig, m as ChatModel, i as ChatModelCache, h as ChatModelEmitter, g as ChatModelEvents, e as ChatModelFinishReason, d as ChatModelInput, a as ChatModelObjectInput, b as ChatModelObjectOutput, n as ChatModelOutput, C as ChatModelParameters, c as ChatModelToolChoice, l as ChatModelToolChoiceSupport, f as ChatModelUsage, j as ConfigFn } from '../chat-C0s-o6ll.js';
|
|
3
3
|
export { EmbeddingModel, EmbeddingModelEmitter, EmbeddingModelEvents, EmbeddingModelInput, EmbeddingModelOutput } from './embedding.js';
|
|
4
4
|
export { AssistantMessage, CustomMessage, Message, MessageContentPart, MessageInput, MessageMeta, MessageRole, Role, SystemMessage, ToolMessage, UserMessage } from './message.js';
|
|
5
5
|
export { BackendError, ChatModelError, EmbeddingModelError } from './errors.js';
|
|
@@ -9,7 +9,7 @@ import '../internals/helpers/guards.js';
|
|
|
9
9
|
import './constants.js';
|
|
10
10
|
import 'ai';
|
|
11
11
|
import '../context.js';
|
|
12
|
-
import '../emitter-
|
|
12
|
+
import '../emitter-CZFbzlUi.js';
|
|
13
13
|
import '../internals/helpers/promise.js';
|
|
14
14
|
import '../errors.js';
|
|
15
15
|
import 'promise-based-task';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Run, GetRunContext } from '../context.cjs';
|
|
2
2
|
import { Serializable } from '../internals/serializable.cjs';
|
|
3
|
-
import { C as Callback, E as Emitter } from '../emitter-
|
|
3
|
+
import { C as Callback, E as Emitter } from '../emitter-DpqUYjXH.cjs';
|
|
4
4
|
import { FrameworkError } from '../errors.cjs';
|
|
5
|
-
import { F as FullModelName } from '../chat-
|
|
5
|
+
import { F as FullModelName } from '../chat-CRb3vUVg.cjs';
|
|
6
6
|
import { ProviderName } from './constants.cjs';
|
|
7
7
|
import '../internals/helpers/promise.cjs';
|
|
8
8
|
import '../internals/types.cjs';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Run, GetRunContext } from '../context.js';
|
|
2
2
|
import { Serializable } from '../internals/serializable.js';
|
|
3
|
-
import { C as Callback, E as Emitter } from '../emitter-
|
|
3
|
+
import { C as Callback, E as Emitter } from '../emitter-CZFbzlUi.js';
|
|
4
4
|
import { FrameworkError } from '../errors.js';
|
|
5
|
-
import { F as FullModelName } from '../chat-
|
|
5
|
+
import { F as FullModelName } from '../chat-C0s-o6ll.js';
|
|
6
6
|
import { ProviderName } from './constants.js';
|
|
7
7
|
import '../internals/helpers/promise.js';
|
|
8
8
|
import '../internals/types.js';
|
package/dist/backend/message.cjs
CHANGED
|
@@ -4,6 +4,10 @@ var serializable_cjs = require('../internals/serializable.cjs');
|
|
|
4
4
|
var utils_cjs = require('../serializer/utils.cjs');
|
|
5
5
|
var zod = require('zod');
|
|
6
6
|
var errors_cjs = require('../errors.cjs');
|
|
7
|
+
var object_cjs = require('../internals/helpers/object.cjs');
|
|
8
|
+
var logger_cjs = require('../logger/logger.cjs');
|
|
9
|
+
var remeda = require('remeda');
|
|
10
|
+
var array_cjs = require('../internals/helpers/array.cjs');
|
|
7
11
|
|
|
8
12
|
var __defProp = Object.defineProperty;
|
|
9
13
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -47,6 +51,14 @@ class Message extends serializable_cjs.Serializable {
|
|
|
47
51
|
content
|
|
48
52
|
];
|
|
49
53
|
}
|
|
54
|
+
for (const chunk of this.content) {
|
|
55
|
+
this.assertContent(chunk);
|
|
56
|
+
}
|
|
57
|
+
this.content = array_cjs.watchArray(this.content, {
|
|
58
|
+
onAdd: this.assertContent
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
assertContent(content) {
|
|
50
62
|
}
|
|
51
63
|
static of({ role, text, meta }) {
|
|
52
64
|
if (role === "user") {
|
|
@@ -113,6 +125,20 @@ class AssistantMessage extends Message {
|
|
|
113
125
|
text
|
|
114
126
|
};
|
|
115
127
|
}
|
|
128
|
+
assertContent(content) {
|
|
129
|
+
if (content.type === "tool-call") {
|
|
130
|
+
const key = "args";
|
|
131
|
+
const args = object_cjs.popProp(content, key);
|
|
132
|
+
if (args !== null && !object_cjs.hasProp(content, "input")) {
|
|
133
|
+
logger_cjs.Logger.root.warn(`The '${key}' property in the AssistantMessage class is deprecated and will be removed. Use the 'input' property for Tool Call content chunks instead.`);
|
|
134
|
+
content.input = args;
|
|
135
|
+
}
|
|
136
|
+
object_cjs.safeDefineProperty(content, key, () => {
|
|
137
|
+
logger_cjs.Logger.root.warn(`The '${key}' property in the Tool Call is deprecated and will be removed. Use the 'input' property instead.`);
|
|
138
|
+
return content.input;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
116
142
|
}
|
|
117
143
|
class ToolMessage extends Message {
|
|
118
144
|
static {
|
|
@@ -126,17 +152,47 @@ class ToolMessage extends Message {
|
|
|
126
152
|
return this.content.filter(isToolResult);
|
|
127
153
|
}
|
|
128
154
|
fromString(text) {
|
|
129
|
-
const
|
|
155
|
+
const schema = zod.z.object({
|
|
130
156
|
type: zod.z.literal("tool-result"),
|
|
131
|
-
result: zod.z.any(),
|
|
132
157
|
toolName: zod.z.string(),
|
|
133
158
|
toolCallId: zod.z.string()
|
|
134
|
-
}).
|
|
159
|
+
}).and(zod.z.object({
|
|
160
|
+
output: zod.z.any()
|
|
161
|
+
}).or(zod.z.object({
|
|
162
|
+
result: zod.z.any()
|
|
163
|
+
})));
|
|
164
|
+
const { success, data } = schema.safeParse(text);
|
|
135
165
|
if (!success) {
|
|
136
166
|
throw new errors_cjs.ValueError(`ToolMessage cannot be created from '${text}'!`);
|
|
137
167
|
}
|
|
138
168
|
return data;
|
|
139
169
|
}
|
|
170
|
+
assertContent(content) {
|
|
171
|
+
const result = object_cjs.popProp(content, "result", null);
|
|
172
|
+
const isError = object_cjs.popProp(content, "isError", false);
|
|
173
|
+
if (result !== null && !object_cjs.hasProp(content, "output")) {
|
|
174
|
+
logger_cjs.Logger.root.warn("The 'result' property in the ToolMessage class is deprecated and will be removed. Use the 'output' property for content chunks instead.");
|
|
175
|
+
if (remeda.isString(result)) {
|
|
176
|
+
content.output = {
|
|
177
|
+
type: isError ? "error-text" : "text",
|
|
178
|
+
value: result
|
|
179
|
+
};
|
|
180
|
+
} else {
|
|
181
|
+
content.output = {
|
|
182
|
+
type: isError ? "error-json" : "json",
|
|
183
|
+
value: result
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
object_cjs.safeDefineProperty(content, "result", () => {
|
|
188
|
+
logger_cjs.Logger.root.warn("The 'result' property of Tool Message is deprecated and will be removed. Use the 'output.value' property instead.");
|
|
189
|
+
return content.output.value;
|
|
190
|
+
});
|
|
191
|
+
object_cjs.safeDefineProperty(content, "isError", () => {
|
|
192
|
+
logger_cjs.Logger.root.warn("The 'isError' property of Tool Message is deprecated and will be removed. Use the 'output.type' property instead.");
|
|
193
|
+
return content.output.type.includes("error");
|
|
194
|
+
});
|
|
195
|
+
}
|
|
140
196
|
}
|
|
141
197
|
class SystemMessage extends Message {
|
|
142
198
|
static {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/backend/message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","merge","other","push","fromChunks","chunks","instance","forEach","chunk","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n merge(other: Message<T, R>) {\n Object.assign(this, other.meta);\n this.content.push(...other.content);\n }\n\n static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2 {\n const instance = new this([]);\n chunks.forEach((chunk) => instance.merge(chunk));\n return instance;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart | FilePart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/backend/message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","meta","createdAt","Date","fromString","Array","isArray","chunk","assertContent","watchArray","onAdd","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","merge","other","push","fromChunks","chunks","instance","forEach","Symbol","iterator","register","getToolCalls","key","args","popProp","hasProp","Logger","root","warn","input","safeDefineProperty","getToolResults","schema","z","object","literal","toolName","string","toolCallId","and","output","any","or","result","success","data","safeParse","ValueError","isError","isString","value","includes","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER"],"mappings":"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","file":"message.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\nimport { hasProp, popProp, safeDefineProperty } from \"@/internals/helpers/object.js\";\nimport { Logger } from \"@/logger/logger.js\";\nimport { isString } from \"remeda\";\nimport { watchArray } from \"@/internals/helpers/array.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n for (const chunk of this.content) {\n this.assertContent(chunk);\n }\n this.content = watchArray(this.content, {\n onAdd: this.assertContent,\n });\n }\n\n protected assertContent(content: T): asserts content is T {}\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n merge(other: Message<T, R>) {\n Object.assign(this, other.meta);\n this.content.push(...other.content);\n }\n\n static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2 {\n const instance = new this([]);\n chunks.forEach((chunk) => instance.merge(chunk));\n return instance;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart | FilePart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n\n protected assertContent(\n content: TextPart | ToolCallPart | FilePart,\n ): asserts content is TextPart | ToolCallPart | FilePart {\n if (content.type === \"tool-call\") {\n const key = \"args\";\n const args = popProp(content as any, key);\n\n if (args !== null && !hasProp(content, \"input\")) {\n Logger.root.warn(\n `The '${key}' property in the AssistantMessage class is deprecated and will be removed. Use the 'input' property for Tool Call content chunks instead.`,\n );\n content.input = args;\n }\n\n safeDefineProperty(content, key as keyof typeof content, () => {\n Logger.root.warn(\n `The '${key}' property in the Tool Call is deprecated and will be removed. Use the 'input' property instead.`,\n );\n return content.input;\n });\n }\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const schema = z\n .object({\n type: z.literal(\"tool-result\"),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .and(z.object({ output: z.any() }).or(z.object({ result: z.any() })));\n\n const { success, data } = schema.safeParse(text);\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n\n protected assertContent(content: ToolResultPart): asserts content is ToolResultPart {\n const result = popProp(content as any, \"result\", null);\n const isError = popProp(content as any, \"isError\", false);\n\n if (result !== null && !hasProp(content, \"output\")) {\n Logger.root.warn(\n \"The 'result' property in the ToolMessage class is deprecated and will be removed. Use the 'output' property for content chunks instead.\",\n );\n if (isString(result)) {\n content.output = { type: isError ? \"error-text\" : \"text\", value: result };\n } else {\n content.output = { type: isError ? \"error-json\" : \"json\", value: result };\n }\n }\n\n safeDefineProperty(content, \"result\" as any, () => {\n Logger.root.warn(\n \"The 'result' property of Tool Message is deprecated and will be removed. Use the 'output.value' property instead.\",\n );\n return content.output.value as any;\n });\n safeDefineProperty(content, \"isError\" as any, () => {\n Logger.root.warn(\n \"The 'isError' property of Tool Message is deprecated and will be removed. Use the 'output.type' property instead.\",\n );\n return content.output.type.includes(\"error\");\n });\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
@@ -24,6 +24,7 @@ declare abstract class Message<T extends MessageContentPart = MessageContentPart
|
|
|
24
24
|
abstract readonly role: R;
|
|
25
25
|
readonly content: T[];
|
|
26
26
|
constructor(content: T | T[] | string, meta?: MessageMeta);
|
|
27
|
+
protected assertContent(content: T): asserts content is T;
|
|
27
28
|
protected abstract fromString(input: string): T;
|
|
28
29
|
static of({ role, text, meta }: MessageInput): Message;
|
|
29
30
|
get text(): string;
|
|
@@ -46,11 +47,13 @@ declare class AssistantMessage extends Message<TextPart | ToolCallPart | FilePar
|
|
|
46
47
|
readonly role = "assistant";
|
|
47
48
|
getToolCalls(): ToolCallPart[];
|
|
48
49
|
protected fromString(text: string): TextPart;
|
|
50
|
+
protected assertContent(content: TextPart | ToolCallPart | FilePart): asserts content is TextPart | ToolCallPart | FilePart;
|
|
49
51
|
}
|
|
50
52
|
declare class ToolMessage extends Message<ToolResultPart> {
|
|
51
53
|
readonly role = "tool";
|
|
52
54
|
getToolResults(): ToolResultPart[];
|
|
53
55
|
protected fromString(text: string): ToolResultPart;
|
|
56
|
+
protected assertContent(content: ToolResultPart): asserts content is ToolResultPart;
|
|
54
57
|
}
|
|
55
58
|
declare class SystemMessage extends Message<TextPart> {
|
|
56
59
|
readonly role: MessageRole;
|
|
@@ -24,6 +24,7 @@ declare abstract class Message<T extends MessageContentPart = MessageContentPart
|
|
|
24
24
|
abstract readonly role: R;
|
|
25
25
|
readonly content: T[];
|
|
26
26
|
constructor(content: T | T[] | string, meta?: MessageMeta);
|
|
27
|
+
protected assertContent(content: T): asserts content is T;
|
|
27
28
|
protected abstract fromString(input: string): T;
|
|
28
29
|
static of({ role, text, meta }: MessageInput): Message;
|
|
29
30
|
get text(): string;
|
|
@@ -46,11 +47,13 @@ declare class AssistantMessage extends Message<TextPart | ToolCallPart | FilePar
|
|
|
46
47
|
readonly role = "assistant";
|
|
47
48
|
getToolCalls(): ToolCallPart[];
|
|
48
49
|
protected fromString(text: string): TextPart;
|
|
50
|
+
protected assertContent(content: TextPart | ToolCallPart | FilePart): asserts content is TextPart | ToolCallPart | FilePart;
|
|
49
51
|
}
|
|
50
52
|
declare class ToolMessage extends Message<ToolResultPart> {
|
|
51
53
|
readonly role = "tool";
|
|
52
54
|
getToolResults(): ToolResultPart[];
|
|
53
55
|
protected fromString(text: string): ToolResultPart;
|
|
56
|
+
protected assertContent(content: ToolResultPart): asserts content is ToolResultPart;
|
|
54
57
|
}
|
|
55
58
|
declare class SystemMessage extends Message<TextPart> {
|
|
56
59
|
readonly role: MessageRole;
|
package/dist/backend/message.js
CHANGED
|
@@ -2,6 +2,10 @@ import { Serializable } from '../internals/serializable.js';
|
|
|
2
2
|
import { shallowCopy } from '../serializer/utils.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { ValueError } from '../errors.js';
|
|
5
|
+
import { popProp, hasProp, safeDefineProperty } from '../internals/helpers/object.js';
|
|
6
|
+
import { Logger } from '../logger/logger.js';
|
|
7
|
+
import { isString } from 'remeda';
|
|
8
|
+
import { watchArray } from '../internals/helpers/array.js';
|
|
5
9
|
|
|
6
10
|
var __defProp = Object.defineProperty;
|
|
7
11
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -45,6 +49,14 @@ class Message extends Serializable {
|
|
|
45
49
|
content
|
|
46
50
|
];
|
|
47
51
|
}
|
|
52
|
+
for (const chunk of this.content) {
|
|
53
|
+
this.assertContent(chunk);
|
|
54
|
+
}
|
|
55
|
+
this.content = watchArray(this.content, {
|
|
56
|
+
onAdd: this.assertContent
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
assertContent(content) {
|
|
48
60
|
}
|
|
49
61
|
static of({ role, text, meta }) {
|
|
50
62
|
if (role === "user") {
|
|
@@ -111,6 +123,20 @@ class AssistantMessage extends Message {
|
|
|
111
123
|
text
|
|
112
124
|
};
|
|
113
125
|
}
|
|
126
|
+
assertContent(content) {
|
|
127
|
+
if (content.type === "tool-call") {
|
|
128
|
+
const key = "args";
|
|
129
|
+
const args = popProp(content, key);
|
|
130
|
+
if (args !== null && !hasProp(content, "input")) {
|
|
131
|
+
Logger.root.warn(`The '${key}' property in the AssistantMessage class is deprecated and will be removed. Use the 'input' property for Tool Call content chunks instead.`);
|
|
132
|
+
content.input = args;
|
|
133
|
+
}
|
|
134
|
+
safeDefineProperty(content, key, () => {
|
|
135
|
+
Logger.root.warn(`The '${key}' property in the Tool Call is deprecated and will be removed. Use the 'input' property instead.`);
|
|
136
|
+
return content.input;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
114
140
|
}
|
|
115
141
|
class ToolMessage extends Message {
|
|
116
142
|
static {
|
|
@@ -124,17 +150,47 @@ class ToolMessage extends Message {
|
|
|
124
150
|
return this.content.filter(isToolResult);
|
|
125
151
|
}
|
|
126
152
|
fromString(text) {
|
|
127
|
-
const
|
|
153
|
+
const schema = z.object({
|
|
128
154
|
type: z.literal("tool-result"),
|
|
129
|
-
result: z.any(),
|
|
130
155
|
toolName: z.string(),
|
|
131
156
|
toolCallId: z.string()
|
|
132
|
-
}).
|
|
157
|
+
}).and(z.object({
|
|
158
|
+
output: z.any()
|
|
159
|
+
}).or(z.object({
|
|
160
|
+
result: z.any()
|
|
161
|
+
})));
|
|
162
|
+
const { success, data } = schema.safeParse(text);
|
|
133
163
|
if (!success) {
|
|
134
164
|
throw new ValueError(`ToolMessage cannot be created from '${text}'!`);
|
|
135
165
|
}
|
|
136
166
|
return data;
|
|
137
167
|
}
|
|
168
|
+
assertContent(content) {
|
|
169
|
+
const result = popProp(content, "result", null);
|
|
170
|
+
const isError = popProp(content, "isError", false);
|
|
171
|
+
if (result !== null && !hasProp(content, "output")) {
|
|
172
|
+
Logger.root.warn("The 'result' property in the ToolMessage class is deprecated and will be removed. Use the 'output' property for content chunks instead.");
|
|
173
|
+
if (isString(result)) {
|
|
174
|
+
content.output = {
|
|
175
|
+
type: isError ? "error-text" : "text",
|
|
176
|
+
value: result
|
|
177
|
+
};
|
|
178
|
+
} else {
|
|
179
|
+
content.output = {
|
|
180
|
+
type: isError ? "error-json" : "json",
|
|
181
|
+
value: result
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
safeDefineProperty(content, "result", () => {
|
|
186
|
+
Logger.root.warn("The 'result' property of Tool Message is deprecated and will be removed. Use the 'output.value' property instead.");
|
|
187
|
+
return content.output.value;
|
|
188
|
+
});
|
|
189
|
+
safeDefineProperty(content, "isError", () => {
|
|
190
|
+
Logger.root.warn("The 'isError' property of Tool Message is deprecated and will be removed. Use the 'output.type' property instead.");
|
|
191
|
+
return content.output.type.includes("error");
|
|
192
|
+
});
|
|
193
|
+
}
|
|
138
194
|
}
|
|
139
195
|
class SystemMessage extends Message {
|
|
140
196
|
static {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/backend/message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","meta","createdAt","Date","fromString","Array","isArray","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","merge","other","push","fromChunks","chunks","instance","forEach","chunk","Symbol","iterator","register","getToolCalls","getToolResults","success","data","z","object","literal","result","any","toolName","string","toolCallId","safeParse","ValueError","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER","input"],"mappings":"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","file":"message.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n }\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n merge(other: Message<T, R>) {\n Object.assign(this, other.meta);\n this.content.push(...other.content);\n }\n\n static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2 {\n const instance = new this([]);\n chunks.forEach((chunk) => instance.merge(chunk));\n return instance;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart | FilePart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const { success, data } = z\n .object({\n type: z.literal(\"tool-result\"),\n result: z.any(),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .safeParse(text);\n\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/backend/message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","meta","createdAt","Date","fromString","Array","isArray","chunk","assertContent","watchArray","onAdd","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","merge","other","push","fromChunks","chunks","instance","forEach","Symbol","iterator","register","getToolCalls","key","args","popProp","hasProp","Logger","root","warn","input","safeDefineProperty","getToolResults","schema","z","object","literal","toolName","string","toolCallId","and","output","any","or","result","success","data","safeParse","ValueError","isError","isString","value","includes","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER"],"mappings":"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","file":"message.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\nimport { hasProp, popProp, safeDefineProperty } from \"@/internals/helpers/object.js\";\nimport { Logger } from \"@/logger/logger.js\";\nimport { isString } from \"remeda\";\nimport { watchArray } from \"@/internals/helpers/array.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n [key: string]: any;\n createdAt?: Date;\n}\n\nexport interface MessageInput {\n role: MessageRole;\n text: string; // TODO\n meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n T extends MessageContentPart = MessageContentPart,\n R extends string = MessageRole | string,\n> extends Serializable {\n public abstract readonly role: R;\n public readonly content: T[];\n\n constructor(\n content: T | T[] | string,\n public readonly meta: MessageMeta = {},\n ) {\n super();\n if (!meta?.createdAt) {\n meta.createdAt = new Date();\n }\n if (typeof content === \"string\") {\n this.content = [this.fromString(content)];\n } else {\n this.content = Array.isArray(content) ? content : [content];\n }\n for (const chunk of this.content) {\n this.assertContent(chunk);\n }\n this.content = watchArray(this.content, {\n onAdd: this.assertContent,\n });\n }\n\n protected assertContent(content: T): asserts content is T {}\n\n protected abstract fromString(input: string): T;\n\n static of({ role, text, meta }: MessageInput): Message {\n if (role === \"user\") {\n return new UserMessage(text, meta);\n } else if (role === \"assistant\") {\n return new AssistantMessage(text, meta);\n } else if (role === \"system\") {\n return new SystemMessage(text, meta);\n } else if (role === \"tool\") {\n return new ToolMessage(text, meta);\n } else {\n return new CustomMessage(role, text, meta);\n }\n }\n\n get text() {\n return this.getTexts()\n .map((c) => c.text)\n .join(\"\");\n }\n\n getTexts() {\n return this.content.filter(isText) as TextPart[];\n }\n\n createSnapshot() {\n return { content: shallowCopy(this.content), meta: shallowCopy(this.meta), role: this.role };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n\n toPlain() {\n return { role: this.role, content: shallowCopy(this.content) } as const;\n }\n\n merge(other: Message<T, R>) {\n Object.assign(this, other.meta);\n this.content.push(...other.content);\n }\n\n static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2 {\n const instance = new this([]);\n chunks.forEach((chunk) => instance.merge(chunk));\n return instance;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.content[Symbol.iterator]();\n }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart | FilePart> {\n public readonly role = \"assistant\";\n\n static {\n this.register();\n }\n\n getToolCalls() {\n return this.content.filter(isToolCall);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n\n protected assertContent(\n content: TextPart | ToolCallPart | FilePart,\n ): asserts content is TextPart | ToolCallPart | FilePart {\n if (content.type === \"tool-call\") {\n const key = \"args\";\n const args = popProp(content as any, key);\n\n if (args !== null && !hasProp(content, \"input\")) {\n Logger.root.warn(\n `The '${key}' property in the AssistantMessage class is deprecated and will be removed. Use the 'input' property for Tool Call content chunks instead.`,\n );\n content.input = args;\n }\n\n safeDefineProperty(content, key as keyof typeof content, () => {\n Logger.root.warn(\n `The '${key}' property in the Tool Call is deprecated and will be removed. Use the 'input' property instead.`,\n );\n return content.input;\n });\n }\n }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n public readonly role = \"tool\";\n\n static {\n this.register();\n }\n\n getToolResults() {\n return this.content.filter(isToolResult);\n }\n\n protected fromString(text: string): ToolResultPart {\n const schema = z\n .object({\n type: z.literal(\"tool-result\"),\n toolName: z.string(),\n toolCallId: z.string(),\n })\n .and(z.object({ output: z.any() }).or(z.object({ result: z.any() })));\n\n const { success, data } = schema.safeParse(text);\n if (!success) {\n throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n }\n\n return data as ToolResultPart;\n }\n\n protected assertContent(content: ToolResultPart): asserts content is ToolResultPart {\n const result = popProp(content as any, \"result\", null);\n const isError = popProp(content as any, \"isError\", false);\n\n if (result !== null && !hasProp(content, \"output\")) {\n Logger.root.warn(\n \"The 'result' property in the ToolMessage class is deprecated and will be removed. Use the 'output' property for content chunks instead.\",\n );\n if (isString(result)) {\n content.output = { type: isError ? \"error-text\" : \"text\", value: result };\n } else {\n content.output = { type: isError ? \"error-json\" : \"json\", value: result };\n }\n }\n\n safeDefineProperty(content, \"result\" as any, () => {\n Logger.root.warn(\n \"The 'result' property of Tool Message is deprecated and will be removed. Use the 'output.value' property instead.\",\n );\n return content.output.value as any;\n });\n safeDefineProperty(content, \"isError\" as any, () => {\n Logger.root.warn(\n \"The 'isError' property of Tool Message is deprecated and will be removed. Use the 'output.type' property instead.\",\n );\n return content.output.type.includes(\"error\");\n });\n }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n public readonly role: MessageRole = \"system\";\n\n static {\n this.register();\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n public readonly role = \"user\";\n\n static {\n this.register();\n }\n\n getImages() {\n return this.content.filter(isImage);\n }\n\n getFiles() {\n return this.content.filter(isFile);\n }\n\n protected fromString(text: string): TextPart {\n return { type: \"text\", text };\n }\n}\n\nexport const Role = {\n ASSISTANT: \"assistant\",\n SYSTEM: \"system\",\n USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n public role: string;\n\n constructor(role: string, content: MessageContentPart | string, meta: MessageMeta = {}) {\n super(content, meta);\n if (!role) {\n throw new ValueError(`Role \"${role}\" must be specified!`);\n }\n this.role = role;\n }\n\n protected fromString(input: string): MessageContentPart {\n return { type: \"text\", text: input };\n }\n}\n"]}
|
package/dist/backend/utils.d.cts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import '../internals/types.cjs';
|
|
2
2
|
import './constants.cjs';
|
|
3
3
|
import '../tools/base.cjs';
|
|
4
|
-
export { F as FullModelName, r as filterToolsByToolChoice, q as generateToolUnionSchema, o as loadModel, p as parseModel } from '../chat-
|
|
4
|
+
export { F as FullModelName, r as filterToolsByToolChoice, q as generateToolUnionSchema, o as loadModel, p as parseModel } from '../chat-CRb3vUVg.cjs';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import '../internals/helpers/guards.cjs';
|
|
7
7
|
import 'ajv';
|
|
8
8
|
import '../context.cjs';
|
|
9
|
-
import '../emitter-
|
|
9
|
+
import '../emitter-DpqUYjXH.cjs';
|
|
10
10
|
import '../internals/serializable.cjs';
|
|
11
11
|
import '../internals/helpers/promise.cjs';
|
|
12
12
|
import '../errors.cjs';
|
package/dist/backend/utils.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import '../internals/types.js';
|
|
2
2
|
import './constants.js';
|
|
3
3
|
import '../tools/base.js';
|
|
4
|
-
export { F as FullModelName, r as filterToolsByToolChoice, q as generateToolUnionSchema, o as loadModel, p as parseModel } from '../chat-
|
|
4
|
+
export { F as FullModelName, r as filterToolsByToolChoice, q as generateToolUnionSchema, o as loadModel, p as parseModel } from '../chat-C0s-o6ll.js';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import '../internals/helpers/guards.js';
|
|
7
7
|
import 'ajv';
|
|
8
8
|
import '../context.js';
|
|
9
|
-
import '../emitter-
|
|
9
|
+
import '../emitter-CZFbzlUi.js';
|
|
10
10
|
import '../internals/serializable.js';
|
|
11
11
|
import '../internals/helpers/promise.js';
|
|
12
12
|
import '../errors.js';
|