beeai-framework 0.1.21 → 0.1.23
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.d.cts +6 -10
- package/dist/adapters/a2a/agents/agent.d.ts +6 -10
- 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/serve/agent_executor.d.cts +3 -3
- package/dist/adapters/a2a/serve/agent_executor.d.ts +3 -3
- package/dist/adapters/a2a/serve/server.d.cts +2 -2
- package/dist/adapters/a2a/serve/server.d.ts +2 -2
- package/dist/adapters/acp/agents/agent.d.cts +6 -10
- package/dist/adapters/acp/agents/agent.d.ts +6 -10
- package/dist/adapters/acp/agents/events.d.cts +1 -1
- package/dist/adapters/acp/agents/events.d.ts +1 -1
- package/dist/adapters/agentstack/agents/agent.d.cts +8 -6
- package/dist/adapters/agentstack/agents/agent.d.ts +8 -6
- package/dist/adapters/agentstack/agents/events.d.cts +1 -1
- package/dist/adapters/agentstack/agents/events.d.ts +1 -1
- package/dist/adapters/amazon-bedrock/backend/chat.d.cts +2 -2
- package/dist/adapters/amazon-bedrock/backend/chat.d.ts +2 -2
- package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +2 -2
- package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +2 -2
- package/dist/adapters/anthropic/backend/chat.d.cts +2 -2
- package/dist/adapters/anthropic/backend/chat.d.ts +2 -2
- 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.d.cts +2 -2
- package/dist/adapters/azure-openai/backend/chat.d.ts +2 -2
- package/dist/adapters/azure-openai/backend/embedding.d.cts +2 -2
- package/dist/adapters/azure-openai/backend/embedding.d.ts +2 -2
- 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.d.cts +2 -2
- package/dist/adapters/google-vertex/backend/chat.d.ts +2 -2
- 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.d.cts +2 -2
- package/dist/adapters/groq/backend/chat.d.ts +2 -2
- 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.d.cts +2 -2
- package/dist/adapters/langchain/backend/chat.d.ts +2 -2
- package/dist/adapters/langchain/backend/embedding.d.cts +2 -2
- package/dist/adapters/langchain/backend/embedding.d.ts +2 -2
- package/dist/adapters/langchain/tools.d.cts +1 -1
- package/dist/adapters/langchain/tools.d.ts +1 -1
- package/dist/adapters/ollama/backend/chat.cjs +1 -2
- package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
- package/dist/adapters/ollama/backend/chat.d.cts +2 -3
- package/dist/adapters/ollama/backend/chat.d.ts +2 -3
- package/dist/adapters/ollama/backend/chat.js +1 -2
- package/dist/adapters/ollama/backend/chat.js.map +1 -1
- package/dist/adapters/ollama/backend/embedding.d.cts +2 -2
- package/dist/adapters/ollama/backend/embedding.d.ts +2 -2
- package/dist/adapters/openai/backend/chat.d.cts +2 -2
- package/dist/adapters/openai/backend/chat.d.ts +2 -2
- package/dist/adapters/openai/backend/embedding.d.cts +2 -2
- package/dist/adapters/openai/backend/embedding.d.ts +2 -2
- package/dist/adapters/vercel/backend/chat.cjs +77 -17
- package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
- package/dist/adapters/vercel/backend/chat.d.cts +2 -2
- package/dist/adapters/vercel/backend/chat.d.ts +2 -2
- package/dist/adapters/vercel/backend/chat.js +77 -17
- package/dist/adapters/vercel/backend/chat.js.map +1 -1
- package/dist/adapters/vercel/backend/embedding.d.cts +2 -2
- package/dist/adapters/vercel/backend/embedding.d.ts +2 -2
- package/dist/adapters/vercel/backend/utils.cjs +32 -0
- package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
- package/dist/adapters/vercel/backend/utils.d.cts +6 -4
- package/dist/adapters/vercel/backend/utils.d.ts +6 -4
- package/dist/adapters/vercel/backend/utils.js +31 -1
- package/dist/adapters/vercel/backend/utils.js.map +1 -1
- package/dist/adapters/watsonx/backend/chat.cjs +7 -8
- package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/chat.d.cts +4 -4
- package/dist/adapters/watsonx/backend/chat.d.ts +4 -4
- package/dist/adapters/watsonx/backend/chat.js +7 -8
- 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.d.cts +2 -2
- package/dist/adapters/xai/backend/chat.d.ts +2 -2
- package/dist/{agent-DvvVGvLr.d.cts → agent-BVuc9Nfn.d.cts} +5 -4
- package/dist/{agent-CHebzsQB.d.ts → agent-Cuy8Q4gw.d.ts} +5 -4
- package/dist/agents/base.cjs +5 -2
- package/dist/agents/base.cjs.map +1 -1
- package/dist/agents/base.d.cts +2 -2
- package/dist/agents/base.d.ts +2 -2
- package/dist/agents/base.js +5 -2
- package/dist/agents/base.js.map +1 -1
- 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 +8 -12
- package/dist/agents/experimental/streamlit/agent.d.ts +8 -12
- package/dist/agents/react/agent.d.cts +4 -4
- package/dist/agents/react/agent.d.ts +4 -4
- package/dist/agents/react/runners/base.d.cts +4 -4
- package/dist/agents/react/runners/base.d.ts +4 -4
- package/dist/agents/react/runners/deep-think/runner.d.cts +4 -4
- package/dist/agents/react/runners/deep-think/runner.d.ts +4 -4
- package/dist/agents/react/runners/default/runner.d.cts +5 -5
- package/dist/agents/react/runners/default/runner.d.ts +5 -5
- package/dist/agents/react/runners/granite/runner.d.cts +4 -4
- package/dist/agents/react/runners/granite/runner.d.ts +4 -4
- package/dist/agents/react/types.d.cts +2 -2
- package/dist/agents/react/types.d.ts +2 -2
- package/dist/agents/requirement/agent.cjs +162 -0
- package/dist/agents/requirement/agent.cjs.map +1 -0
- package/dist/agents/requirement/agent.d.cts +29 -0
- package/dist/agents/requirement/agent.d.ts +29 -0
- package/dist/agents/requirement/agent.js +160 -0
- package/dist/agents/requirement/agent.js.map +1 -0
- package/dist/agents/requirement/prompts.cjs +95 -0
- package/dist/agents/requirement/prompts.cjs.map +1 -0
- package/dist/agents/requirement/prompts.d.cts +107 -0
- package/dist/agents/requirement/prompts.d.ts +107 -0
- package/dist/agents/requirement/prompts.js +90 -0
- package/dist/agents/requirement/prompts.js.map +1 -0
- package/dist/agents/requirement/requirements/conditional.cjs +190 -0
- package/dist/agents/requirement/requirements/conditional.cjs.map +1 -0
- package/dist/agents/requirement/requirements/conditional.d.cts +71 -0
- package/dist/agents/requirement/requirements/conditional.d.ts +71 -0
- package/dist/agents/requirement/requirements/conditional.js +188 -0
- package/dist/agents/requirement/requirements/conditional.js.map +1 -0
- package/dist/agents/requirement/requirements/requirement.cjs +107 -0
- package/dist/agents/requirement/requirements/requirement.cjs.map +1 -0
- package/dist/agents/requirement/requirements/requirement.d.cts +59 -0
- package/dist/agents/requirement/requirements/requirement.d.ts +59 -0
- package/dist/agents/requirement/requirements/requirement.js +104 -0
- package/dist/agents/requirement/requirements/requirement.js.map +1 -0
- package/dist/agents/requirement/requirements/utils.cjs +74 -0
- package/dist/agents/requirement/requirements/utils.cjs.map +1 -0
- package/dist/agents/requirement/requirements/utils.d.cts +40 -0
- package/dist/agents/requirement/requirements/utils.d.ts +40 -0
- package/dist/agents/requirement/requirements/utils.js +69 -0
- package/dist/agents/requirement/requirements/utils.js.map +1 -0
- package/dist/agents/requirement/runner.cjs +268 -0
- package/dist/agents/requirement/runner.cjs.map +1 -0
- package/dist/agents/requirement/runner.d.cts +115 -0
- package/dist/agents/requirement/runner.d.ts +115 -0
- package/dist/agents/requirement/runner.js +266 -0
- package/dist/agents/requirement/runner.js.map +1 -0
- package/dist/agents/requirement/types.cjs +40 -0
- package/dist/agents/requirement/types.cjs.map +1 -0
- package/dist/agents/requirement/types.d.cts +24 -0
- package/dist/agents/requirement/types.d.ts +24 -0
- package/dist/agents/requirement/types.js +35 -0
- package/dist/agents/requirement/types.js.map +1 -0
- package/dist/agents/requirement/utils/llm.cjs +202 -0
- package/dist/agents/requirement/utils/llm.cjs.map +1 -0
- package/dist/agents/requirement/utils/llm.d.cts +50 -0
- package/dist/agents/requirement/utils/llm.d.ts +50 -0
- package/dist/agents/requirement/utils/llm.js +199 -0
- package/dist/agents/requirement/utils/llm.js.map +1 -0
- package/dist/agents/requirement/utils/tool.cjs +95 -0
- package/dist/agents/requirement/utils/tool.cjs.map +1 -0
- package/dist/agents/requirement/utils/tool.d.cts +24 -0
- package/dist/agents/requirement/utils/tool.d.ts +24 -0
- package/dist/agents/requirement/utils/tool.js +92 -0
- package/dist/agents/requirement/utils/tool.js.map +1 -0
- package/dist/agents/requirement/utils/toolCallChecker.cjs +61 -0
- package/dist/agents/requirement/utils/toolCallChecker.cjs.map +1 -0
- package/dist/agents/requirement/utils/toolCallChecker.d.cts +28 -0
- package/dist/agents/requirement/utils/toolCallChecker.d.ts +28 -0
- package/dist/agents/requirement/utils/toolCallChecker.js +59 -0
- package/dist/agents/requirement/utils/toolCallChecker.js.map +1 -0
- package/dist/agents/toolCalling/agent.cjs +4 -1
- package/dist/agents/toolCalling/agent.cjs.map +1 -1
- package/dist/agents/toolCalling/agent.d.cts +11 -12
- package/dist/agents/toolCalling/agent.d.ts +11 -12
- package/dist/agents/toolCalling/agent.js +5 -2
- 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 +122 -4
- package/dist/backend/chat.cjs.map +1 -1
- package/dist/backend/chat.d.cts +3 -3
- package/dist/backend/chat.d.ts +3 -3
- package/dist/backend/chat.js +123 -5
- package/dist/backend/chat.js.map +1 -1
- package/dist/backend/core.d.cts +3 -3
- package/dist/backend/core.d.ts +3 -3
- package/dist/backend/embedding.d.cts +2 -2
- package/dist/backend/embedding.d.ts +2 -2
- package/dist/backend/message.cjs +20 -13
- package/dist/backend/message.cjs.map +1 -1
- package/dist/backend/message.d.cts +7 -3
- package/dist/backend/message.d.ts +7 -3
- package/dist/backend/message.js +20 -13
- 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-BQgDlcGa.d.ts → base-CyFx7BRL.d.ts} +5 -3
- package/dist/{base-CwcxwybB.d.cts → base-XfWeXQ-S.d.cts} +5 -3
- package/dist/{chat-CRb3vUVg.d.cts → chat-BOb9n7AJ.d.cts} +7 -8
- package/dist/{chat-C0s-o6ll.d.ts → chat-DrqwUgD8.d.ts} +7 -8
- package/dist/context.cjs +22 -5
- package/dist/context.cjs.map +1 -1
- package/dist/context.d.cts +19 -6
- package/dist/context.d.ts +19 -6
- package/dist/context.js +23 -7
- package/dist/context.js.map +1 -1
- package/dist/emitter/emitter.cjs +21 -14
- package/dist/emitter/emitter.cjs.map +1 -1
- package/dist/emitter/emitter.d.cts +1 -1
- package/dist/emitter/emitter.d.ts +1 -1
- package/dist/emitter/emitter.js +21 -14
- package/dist/emitter/emitter.js.map +1 -1
- package/dist/emitter/types.d.cts +1 -1
- package/dist/emitter/types.d.ts +1 -1
- package/dist/{emitter-CZFbzlUi.d.ts → emitter-36-9MnvA.d.ts} +4 -3
- package/dist/{emitter-DpqUYjXH.d.cts → emitter-jN55XZZq.d.cts} +4 -3
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/internals/fetcher.d.cts +1 -1
- package/dist/internals/fetcher.d.ts +1 -1
- package/dist/internals/helpers/prototype.cjs +5 -0
- package/dist/internals/helpers/prototype.cjs.map +1 -1
- package/dist/internals/helpers/prototype.d.cts +2 -1
- package/dist/internals/helpers/prototype.d.ts +2 -1
- package/dist/internals/helpers/prototype.js +5 -1
- package/dist/internals/helpers/prototype.js.map +1 -1
- package/dist/internals/types.cjs.map +1 -1
- package/dist/internals/types.d.cts +1 -1
- package/dist/internals/types.d.ts +1 -1
- package/dist/internals/types.js.map +1 -1
- package/dist/memory/summarizeMemory.d.cts +2 -2
- package/dist/memory/summarizeMemory.d.ts +2 -2
- package/dist/middleware/streamToolCall.cjs +132 -0
- package/dist/middleware/streamToolCall.cjs.map +1 -0
- package/dist/middleware/streamToolCall.d.cts +94 -0
- package/dist/middleware/streamToolCall.d.ts +94 -0
- package/dist/middleware/streamToolCall.js +130 -0
- package/dist/middleware/streamToolCall.js.map +1 -0
- package/dist/middleware/trajectory.cjs +331 -0
- package/dist/middleware/trajectory.cjs.map +1 -0
- package/dist/middleware/trajectory.d.cts +115 -0
- package/dist/middleware/trajectory.d.ts +115 -0
- package/dist/middleware/trajectory.js +329 -0
- package/dist/middleware/trajectory.js.map +1 -0
- package/dist/parsers/linePrefix.d.cts +1 -1
- package/dist/parsers/linePrefix.d.ts +1 -1
- package/dist/serializer/serializer.cjs +5 -4
- package/dist/serializer/serializer.cjs.map +1 -1
- package/dist/serializer/serializer.d.cts +1 -1
- package/dist/serializer/serializer.d.ts +1 -1
- package/dist/serializer/serializer.js +5 -4
- package/dist/serializer/serializer.js.map +1 -1
- package/dist/serializer/utils.cjs +3 -0
- package/dist/serializer/utils.cjs.map +1 -1
- package/dist/serializer/utils.d.cts +1 -1
- package/dist/serializer/utils.d.ts +1 -1
- package/dist/serializer/utils.js +3 -0
- package/dist/serializer/utils.js.map +1 -1
- package/dist/{serializer-CQxucveV.d.ts → serializer-53t8gGQa.d.ts} +3 -2
- package/dist/{serializer-BKn50Vnx.d.cts → serializer-c51B2z6d.d.cts} +3 -2
- package/dist/template.cjs +20 -0
- package/dist/template.cjs.map +1 -1
- package/dist/template.d.cts +1 -0
- package/dist/template.d.ts +1 -0
- package/dist/template.js +20 -0
- package/dist/template.js.map +1 -1
- package/dist/tools/arxiv.d.cts +1 -1
- package/dist/tools/arxiv.d.ts +1 -1
- package/dist/tools/base.cjs.map +1 -1
- package/dist/tools/base.d.cts +3 -2
- package/dist/tools/base.d.ts +3 -2
- 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.d.cts +1 -1
- package/dist/tools/database/elasticsearch.d.ts +1 -1
- package/dist/tools/database/milvus.d.cts +3 -3
- package/dist/tools/database/milvus.d.ts +3 -3
- package/dist/tools/database/qdrant.d.cts +1 -1
- package/dist/tools/database/qdrant.d.ts +1 -1
- package/dist/tools/database/sql.d.cts +1 -1
- package/dist/tools/database/sql.d.ts +1 -1
- package/dist/tools/handoff.cjs +68 -0
- package/dist/tools/handoff.cjs.map +1 -0
- package/dist/tools/handoff.d.cts +47 -0
- package/dist/tools/handoff.d.ts +47 -0
- package/dist/tools/handoff.js +66 -0
- package/dist/tools/handoff.js.map +1 -0
- 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.d.cts +1 -1
- package/dist/tools/search/base.d.ts +1 -1
- package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
- package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
- package/dist/tools/search/googleSearch.d.cts +1 -1
- package/dist/tools/search/googleSearch.d.ts +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.d.cts +1 -1
- package/dist/tools/search/wikipedia.d.ts +1 -1
- package/dist/tools/similarity.d.cts +1 -1
- package/dist/tools/similarity.d.ts +1 -1
- package/dist/tools/think.cjs +52 -0
- package/dist/tools/think.cjs.map +1 -0
- package/dist/tools/think.d.cts +47 -0
- package/dist/tools/think.d.ts +47 -0
- package/dist/tools/think.js +50 -0
- package/dist/tools/think.js.map +1 -0
- package/dist/tools/weather/openMeteo.d.cts +1 -1
- package/dist/tools/weather/openMeteo.d.ts +1 -1
- package/dist/tools/web/webCrawler.d.cts +1 -1
- package/dist/tools/web/webCrawler.d.ts +1 -1
- package/dist/types-CJwiMH3u.d.ts +213 -0
- package/dist/types-W0QttuP_.d.cts +213 -0
- 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 +11 -11
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
const RequirementAgentSystemPromptInputSchema = z.object({
|
|
4
|
+
role: z.string().optional(),
|
|
5
|
+
instructions: z.string().optional(),
|
|
6
|
+
notes: z.string().optional(),
|
|
7
|
+
finalAnswerName: z.string(),
|
|
8
|
+
finalAnswerSchema: z.string().optional(),
|
|
9
|
+
finalAnswerInstructions: z.string().optional(),
|
|
10
|
+
tools: z.array(z.object({
|
|
11
|
+
name: z.string(),
|
|
12
|
+
description: z.string(),
|
|
13
|
+
inputSchema: z.string(),
|
|
14
|
+
allowed: z.string(),
|
|
15
|
+
reason: z.string().optional()
|
|
16
|
+
}))
|
|
17
|
+
});
|
|
18
|
+
const RequirementAgentTaskPromptInputSchema = z.object({
|
|
19
|
+
prompt: z.string(),
|
|
20
|
+
context: z.string().optional(),
|
|
21
|
+
expectedOutput: z.string().optional()
|
|
22
|
+
});
|
|
23
|
+
const RequirementAgentToolErrorPromptInputSchema = z.object({
|
|
24
|
+
reason: z.string()
|
|
25
|
+
});
|
|
26
|
+
const RequirementAgentToolNoResultPromptInputSchema = z.object({
|
|
27
|
+
toolCall: z.object({
|
|
28
|
+
tool: z.any().optional(),
|
|
29
|
+
input: z.unknown()
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export { RequirementAgentSystemPromptInputSchema, RequirementAgentTaskPromptInputSchema, RequirementAgentToolErrorPromptInputSchema, RequirementAgentToolNoResultPromptInputSchema };
|
|
34
|
+
//# sourceMappingURL=types.js.map
|
|
35
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/agents/requirement/types.ts"],"names":["RequirementAgentSystemPromptInputSchema","z","object","role","string","optional","instructions","notes","finalAnswerName","finalAnswerSchema","finalAnswerInstructions","tools","array","name","description","inputSchema","allowed","reason","RequirementAgentTaskPromptInputSchema","prompt","context","expectedOutput","RequirementAgentToolErrorPromptInputSchema","RequirementAgentToolNoResultPromptInputSchema","toolCall","tool","any","input","unknown"],"mappings":";;AAeO,MAAMA,uCAAAA,GAA0CC,EAAEC,MAAAA,CAAO;EAC9DC,IAAAA,EAAMF,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACzBC,YAAAA,EAAcL,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACjCE,KAAAA,EAAON,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;AAC1BG,EAAAA,eAAAA,EAAiBP,EAAEG,MAAAA,EAAM;EACzBK,iBAAAA,EAAmBR,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACtCK,uBAAAA,EAAyBT,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EAC5CM,KAAAA,EAAOV,CAAAA,CAAEW,KAAAA,CACPX,CAAAA,CAAEC,MAAAA,CAAO;AACPW,IAAAA,IAAAA,EAAMZ,EAAEG,MAAAA,EAAM;AACdU,IAAAA,WAAAA,EAAab,EAAEG,MAAAA,EAAM;AACrBW,IAAAA,WAAAA,EAAad,EAAEG,MAAAA,EAAM;AACrBY,IAAAA,OAAAA,EAASf,EAAEG,MAAAA,EAAM;IACjBa,MAAAA,EAAQhB,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA;AACrB,GAAA,CAAA;AAEJ,CAAA;AAEO,MAAMa,qCAAAA,GAAwCjB,EAAEC,MAAAA,CAAO;AAC5DiB,EAAAA,MAAAA,EAAQlB,EAAEG,MAAAA,EAAM;EAChBgB,OAAAA,EAASnB,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EAC5BgB,cAAAA,EAAgBpB,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA;AAC7B,CAAA;AAEO,MAAMiB,0CAAAA,GAA6CrB,EAAEC,MAAAA,CAAO;AACjEe,EAAAA,MAAAA,EAAQhB,EAAEG,MAAAA;AACZ,CAAA;AAEO,MAAMmB,6CAAAA,GAAgDtB,EAAEC,MAAAA,CAAO;AACpEsB,EAAAA,QAAAA,EAAUvB,EAAEC,MAAAA,CAAO;IACjBuB,IAAAA,EAAMxB,CAAAA,CAAEyB,GAAAA,EAAG,CAAGrB,QAAAA,EAAQ;AACtBsB,IAAAA,KAAAA,EAAO1B,EAAE2B,OAAAA;GACX;AACF,CAAA","file":"types.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { AssistantMessage } from \"@/backend/message.js\";\nimport { AnyTool, ToolOutput } from \"@/tools/base.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { ChatModelOutput, ChatModelToolChoice, ChatModelUsage } from \"@/backend/chat.js\";\nimport { BaseAgentRunOptions } from \"@/agents/base.js\";\nimport { z } from \"zod\";\nimport { FinalAnswerTool } from \"@/agents/requirement/utils/tool.js\";\n\nexport const RequirementAgentSystemPromptInputSchema = z.object({\n role: z.string().optional(),\n instructions: z.string().optional(),\n notes: z.string().optional(),\n finalAnswerName: z.string(),\n finalAnswerSchema: z.string().optional(),\n finalAnswerInstructions: z.string().optional(),\n tools: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n inputSchema: z.string(),\n allowed: z.string(),\n reason: z.string().optional(),\n }),\n ),\n});\n\nexport const RequirementAgentTaskPromptInputSchema = z.object({\n prompt: z.string(),\n context: z.string().optional(),\n expectedOutput: z.string().optional(),\n});\n\nexport const RequirementAgentToolErrorPromptInputSchema = z.object({\n reason: z.string(),\n});\n\nexport const RequirementAgentToolNoResultPromptInputSchema = z.object({\n toolCall: z.object({\n tool: z.any().optional(),\n input: z.unknown(),\n }),\n});\n\n// Template collection\nexport interface RequirementAgentTemplates {\n system: PromptTemplate<typeof RequirementAgentSystemPromptInputSchema>;\n task: PromptTemplate<typeof RequirementAgentTaskPromptInputSchema>;\n toolError: PromptTemplate<typeof RequirementAgentToolErrorPromptInputSchema>;\n toolNoResult: PromptTemplate<typeof RequirementAgentToolNoResultPromptInputSchema>;\n}\n\n// Run state types\nexport interface RequirementAgentRunStateStep {\n id: string;\n iteration: number;\n tool: AnyTool | null;\n input: unknown;\n output: ToolOutput;\n error: FrameworkError | null;\n}\n\nexport interface RequirementAgentRunState {\n answer: AssistantMessage | null;\n result: unknown;\n memory: BaseMemory;\n iteration: number;\n steps: RequirementAgentRunStateStep[];\n usage: ChatModelUsage;\n // cost: ChatModelCost; TODO: not supported yet\n}\n\n// Agent output\nexport interface RequirementAgentOutput {\n result: AssistantMessage;\n memory: BaseMemory;\n state: RequirementAgentRunState;\n}\n\n// Internal request structure\nexport interface RequirementAgentRequest {\n tools: AnyTool[];\n allowedTools: AnyTool[];\n reasonByTool: WeakMap<AnyTool, string | undefined>;\n hiddenTools: AnyTool[];\n toolChoice: ChatModelToolChoice;\n finalAnswer: FinalAnswerTool;\n canStop: boolean;\n}\n\n// Execution configuration\nexport interface RequirementAgentExecutionConfig {\n maxRetriesPerStep?: number;\n totalMaxRetries?: number;\n maxIterations?: number;\n}\n\n// Run input and options\nexport interface RequirementAgentRunInput {\n prompt: string | null;\n context?: string;\n expectedOutput?: string | z.ZodSchema;\n}\n\nexport interface RequirementAgentRunOptions extends BaseAgentRunOptions {\n execution?: RequirementAgentExecutionConfig;\n}\n\n// Event callback types\nexport interface RequirementAgentCallbacks {\n start: (data: { state: RequirementAgentRunState; request: RequirementAgentRequest }) => void;\n success: (data: { state: RequirementAgentRunState; response: ChatModelOutput }) => void;\n finalAnswer: (data: {\n state: RequirementAgentRunState;\n output: string;\n delta: string;\n outputStructured: unknown;\n }) => void;\n}\n"]}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var base_cjs$1 = require('../../../tools/base.cjs');
|
|
4
|
+
var base_cjs = require('../../base.cjs');
|
|
5
|
+
var message_cjs = require('../../../backend/message.cjs');
|
|
6
|
+
var remeda = require('remeda');
|
|
7
|
+
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
|
+
class RequirementsReasoner {
|
|
11
|
+
static {
|
|
12
|
+
__name(this, "RequirementsReasoner");
|
|
13
|
+
}
|
|
14
|
+
tools;
|
|
15
|
+
entries = [];
|
|
16
|
+
context;
|
|
17
|
+
finalAnswer;
|
|
18
|
+
constructor(tools, finalAnswer, context) {
|
|
19
|
+
this.tools = [
|
|
20
|
+
...tools,
|
|
21
|
+
finalAnswer
|
|
22
|
+
];
|
|
23
|
+
this.finalAnswer = finalAnswer;
|
|
24
|
+
this.context = context;
|
|
25
|
+
}
|
|
26
|
+
async update(requirements) {
|
|
27
|
+
this.entries = [];
|
|
28
|
+
for (const requirement of requirements) {
|
|
29
|
+
this.entries.push(requirement);
|
|
30
|
+
}
|
|
31
|
+
for (const entry of this.entries) {
|
|
32
|
+
const emitter = this.context.emitter.child({
|
|
33
|
+
groupId: remeda.toCamelCase(entry.name),
|
|
34
|
+
creator: entry
|
|
35
|
+
});
|
|
36
|
+
emitter.namespace.push("requirement");
|
|
37
|
+
const tools = [
|
|
38
|
+
...this.tools
|
|
39
|
+
];
|
|
40
|
+
await emitter.emit("init", {
|
|
41
|
+
tools
|
|
42
|
+
});
|
|
43
|
+
await entry.init(tools, this.context);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
findToolByName(name) {
|
|
47
|
+
const tool = this.tools.find((t) => t.name === name);
|
|
48
|
+
if (!tool) {
|
|
49
|
+
throw new Error(`Tool '${name}' not found in (${this.tools.map((t) => t.name).join(", ")}).`);
|
|
50
|
+
}
|
|
51
|
+
return tool;
|
|
52
|
+
}
|
|
53
|
+
async createRequest(state, forceTool, extraRules = []) {
|
|
54
|
+
const hidden = [];
|
|
55
|
+
const allowed = [];
|
|
56
|
+
const allTools = [
|
|
57
|
+
...this.tools
|
|
58
|
+
];
|
|
59
|
+
const reasonByTool = /* @__PURE__ */ new WeakMap();
|
|
60
|
+
let preventStop = false;
|
|
61
|
+
const preventStepRefs = [];
|
|
62
|
+
let forced = null;
|
|
63
|
+
let forcedLevel = 0;
|
|
64
|
+
const rulesByTool = /* @__PURE__ */ new Map();
|
|
65
|
+
for (const tool of this.tools) {
|
|
66
|
+
rulesByTool.set(tool.name, []);
|
|
67
|
+
}
|
|
68
|
+
for (const requirement of this.entries.filter((e) => e.enabled)) {
|
|
69
|
+
const generatedRules = await requirement.run(state);
|
|
70
|
+
for (const rule of generatedRules) {
|
|
71
|
+
const tool = this.findToolByName(rule.target);
|
|
72
|
+
const rules = rulesByTool.get(tool.name) || [];
|
|
73
|
+
rules.push({
|
|
74
|
+
priority: requirement.priority,
|
|
75
|
+
rule,
|
|
76
|
+
requirement
|
|
77
|
+
});
|
|
78
|
+
rulesByTool.set(tool.name, rules);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for (const rule of extraRules) {
|
|
82
|
+
if (!rulesByTool.has(rule.target)) {
|
|
83
|
+
throw new Error(`Tool '${rule.target}' not found.`);
|
|
84
|
+
}
|
|
85
|
+
const rules = rulesByTool.get(rule.target);
|
|
86
|
+
const priority = rules.length > 0 ? Math.max(...rules.map((r) => r.priority)) + 1 : 1;
|
|
87
|
+
rules.push({
|
|
88
|
+
priority,
|
|
89
|
+
rule,
|
|
90
|
+
requirement: null
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
for (const [toolName, rules] of rulesByTool.entries()) {
|
|
94
|
+
const tool = this.findToolByName(toolName);
|
|
95
|
+
rules.sort((a, b) => b.priority - a.priority);
|
|
96
|
+
const maxPriority = rules.length > 0 ? rules[0].priority : 1;
|
|
97
|
+
let isAllowed = true;
|
|
98
|
+
let isForced = false;
|
|
99
|
+
let isHidden = false;
|
|
100
|
+
let isPreventStop = false;
|
|
101
|
+
for (const ruleEntry of rules) {
|
|
102
|
+
const rule = ruleEntry.rule;
|
|
103
|
+
if (!rule.allowed) {
|
|
104
|
+
isAllowed = false;
|
|
105
|
+
}
|
|
106
|
+
if (rule.hidden) {
|
|
107
|
+
isHidden = true;
|
|
108
|
+
}
|
|
109
|
+
if (rule.forced) {
|
|
110
|
+
isForced = true;
|
|
111
|
+
}
|
|
112
|
+
if (rule.preventStop) {
|
|
113
|
+
isPreventStop = true;
|
|
114
|
+
preventStepRefs.push(ruleEntry);
|
|
115
|
+
}
|
|
116
|
+
if (rule.reason) {
|
|
117
|
+
reasonByTool.set(tool, rule.reason);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (isAllowed && isHidden) {
|
|
121
|
+
isAllowed = false;
|
|
122
|
+
}
|
|
123
|
+
if (isAllowed) {
|
|
124
|
+
if (!allowed.includes(tool)) {
|
|
125
|
+
allowed.push(tool);
|
|
126
|
+
}
|
|
127
|
+
if (isForced && (!forced || forcedLevel < maxPriority)) {
|
|
128
|
+
forced = tool;
|
|
129
|
+
forcedLevel = maxPriority;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (isHidden) {
|
|
133
|
+
if (!hidden.includes(tool)) {
|
|
134
|
+
hidden.push(tool);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (isPreventStop) {
|
|
138
|
+
preventStop = true;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (forced) {
|
|
142
|
+
allowed.length = 0;
|
|
143
|
+
if (!allowed.includes(forced)) {
|
|
144
|
+
allowed.push(forced);
|
|
145
|
+
}
|
|
146
|
+
if (!allowed.includes(this.finalAnswer)) {
|
|
147
|
+
allowed.push(this.finalAnswer);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (preventStop && forced !== this.finalAnswer) {
|
|
151
|
+
const finalAnswerIndex = allowed.indexOf(this.finalAnswer);
|
|
152
|
+
if (finalAnswerIndex !== -1) {
|
|
153
|
+
allowed.splice(finalAnswerIndex, 1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (allowed.length === 0) {
|
|
157
|
+
throw new base_cjs.AgentError("One of the generated rules is preventing the agent from continuing. This indicates that the provided requirements may conflict with each other. See the following rules and their attached requirements that are preventing the agent from continuing.\n" + JSON.stringify(preventStepRefs, null, 2));
|
|
158
|
+
}
|
|
159
|
+
let toolChoice = forced || "required";
|
|
160
|
+
if (allowed.length === 1) {
|
|
161
|
+
toolChoice = allowed[0];
|
|
162
|
+
}
|
|
163
|
+
if (!(toolChoice instanceof base_cjs$1.Tool) && !forceTool && !preventStop) {
|
|
164
|
+
toolChoice = "auto";
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
tools: allTools,
|
|
168
|
+
allowedTools: allowed,
|
|
169
|
+
reasonByTool,
|
|
170
|
+
toolChoice,
|
|
171
|
+
finalAnswer: this.finalAnswer,
|
|
172
|
+
hiddenTools: hidden,
|
|
173
|
+
canStop: !preventStop
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async function createSystemMessage(template, request) {
|
|
178
|
+
return new message_cjs.SystemMessage(template.render({
|
|
179
|
+
tools: await Promise.all(request.tools.filter((tool) => !request.hiddenTools.includes(tool)).map(async (tool) => ({
|
|
180
|
+
name: tool.name,
|
|
181
|
+
description: tool.description,
|
|
182
|
+
inputSchema: JSON.stringify(await tool.inputSchema(), null, 2),
|
|
183
|
+
allowed: String(request.allowedTools.includes(tool)),
|
|
184
|
+
reason: request.reasonByTool.get(tool)
|
|
185
|
+
}))),
|
|
186
|
+
finalAnswerName: request.finalAnswer.name,
|
|
187
|
+
finalAnswerSchema: request.finalAnswer.customSchema ? JSON.stringify(request.finalAnswer.inputSchema, null, 2) : void 0,
|
|
188
|
+
finalAnswerInstructions: request.finalAnswer.instructions,
|
|
189
|
+
// default
|
|
190
|
+
role: void 0,
|
|
191
|
+
// default
|
|
192
|
+
instructions: void 0,
|
|
193
|
+
// default
|
|
194
|
+
notes: void 0
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
__name(createSystemMessage, "createSystemMessage");
|
|
198
|
+
|
|
199
|
+
exports.RequirementsReasoner = RequirementsReasoner;
|
|
200
|
+
exports.createSystemMessage = createSystemMessage;
|
|
201
|
+
//# sourceMappingURL=llm.cjs.map
|
|
202
|
+
//# sourceMappingURL=llm.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/agents/requirement/utils/llm.ts"],"names":["RequirementsReasoner","tools","entries","context","finalAnswer","update","requirements","requirement","push","entry","emitter","child","groupId","toCamelCase","name","creator","namespace","emit","init","findToolByName","tool","find","t","Error","map","join","createRequest","state","forceTool","extraRules","hidden","allowed","allTools","reasonByTool","WeakMap","preventStop","preventStepRefs","forced","forcedLevel","rulesByTool","Map","set","filter","e","enabled","generatedRules","run","rule","target","rules","get","priority","has","length","Math","max","r","toolName","sort","a","b","maxPriority","isAllowed","isForced","isHidden","isPreventStop","ruleEntry","reason","includes","finalAnswerIndex","indexOf","splice","AgentError","JSON","stringify","toolChoice","Tool","allowedTools","hiddenTools","canStop","createSystemMessage","template","request","SystemMessage","render","Promise","all","description","inputSchema","String","finalAnswerName","finalAnswerSchema","customSchema","undefined","finalAnswerInstructions","instructions","role","notes"],"mappings":"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","file":"llm.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { RunContext } from \"@/context.js\";\nimport { AgentError } from \"@/agents/base.js\";\nimport { SystemMessage } from \"@/backend/message.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport {\n RequirementAgentRequest,\n RequirementAgentRunState,\n RequirementAgentSystemPromptInputSchema,\n} from \"@/agents/requirement/types.js\";\nimport {\n Requirement,\n RequirementCallbacks,\n Rule,\n} from \"@/agents/requirement/requirements/requirement.js\";\nimport { FinalAnswerTool } from \"./tool.js\";\nimport { ChatModelToolChoice } from \"@/backend/chat.js\";\nimport { toCamelCase } from \"remeda\";\n\ninterface RuleEntry {\n rule: Rule;\n requirement: Requirement | null;\n priority: number;\n}\n\n/**\n * Manages requirements and generates requests for the agent\n */\nexport class RequirementsReasoner {\n protected tools: AnyTool[];\n protected entries: Requirement[] = [];\n protected context: RunContext<any>;\n public readonly finalAnswer: FinalAnswerTool;\n\n constructor(tools: AnyTool[], finalAnswer: FinalAnswerTool, context: RunContext<any>) {\n this.tools = [...tools, finalAnswer];\n this.finalAnswer = finalAnswer;\n this.context = context;\n }\n\n async update(requirements: Requirement[]): Promise<void> {\n this.entries = [];\n\n for (const requirement of requirements) {\n this.entries.push(requirement);\n }\n\n for (const entry of this.entries) {\n const emitter = this.context.emitter.child<RequirementCallbacks>({\n groupId: toCamelCase(entry.name),\n creator: entry,\n });\n emitter.namespace.push(\"requirement\");\n\n const tools = [...this.tools];\n await emitter.emit(\"init\", { tools });\n await entry.init(tools, this.context);\n }\n }\n\n protected findToolByName(name: string): AnyTool {\n const tool = this.tools.find((t) => t.name === name);\n if (!tool) {\n throw new Error(`Tool '${name}' not found in (${this.tools.map((t) => t.name).join(\", \")}).`);\n }\n return tool;\n }\n\n async createRequest(\n state: RequirementAgentRunState,\n forceTool: boolean,\n extraRules: Rule[] = [],\n ): Promise<RequirementAgentRequest> {\n const hidden: AnyTool[] = [];\n const allowed: AnyTool[] = [];\n const allTools: AnyTool[] = [...this.tools];\n const reasonByTool = new WeakMap<AnyTool, string | undefined>();\n\n let preventStop = false;\n const preventStepRefs: RuleEntry[] = [];\n\n let forced: AnyTool | null = null;\n let forcedLevel = 0;\n const rulesByTool = new Map<string, RuleEntry[]>();\n\n // Initialize rules map\n for (const tool of this.tools) {\n rulesByTool.set(tool.name, []);\n }\n\n // Group rules from requirements\n for (const requirement of this.entries.filter((e) => e.enabled)) {\n const generatedRules = await requirement.run(state);\n for (const rule of generatedRules) {\n const tool = this.findToolByName(rule.target);\n const rules = rulesByTool.get(tool.name) || [];\n rules.push({\n priority: requirement.priority,\n rule,\n requirement,\n });\n rulesByTool.set(tool.name, rules);\n }\n }\n\n // Add extra rules\n for (const rule of extraRules) {\n if (!rulesByTool.has(rule.target)) {\n throw new Error(`Tool '${rule.target}' not found.`);\n }\n\n const rules = rulesByTool.get(rule.target)!;\n const priority = rules.length > 0 ? Math.max(...rules.map((r) => r.priority)) + 1 : 1;\n rules.push({\n priority,\n rule,\n requirement: null,\n });\n }\n\n // Aggregate rules and infer required tool\n for (const [toolName, rules] of rulesByTool.entries()) {\n const tool = this.findToolByName(toolName);\n rules.sort((a, b) => b.priority - a.priority); // DESC\n\n const maxPriority = rules.length > 0 ? rules[0].priority : 1;\n let isAllowed = true;\n let isForced = false;\n let isHidden = false;\n let isPreventStop = false;\n\n for (const ruleEntry of rules) {\n const rule = ruleEntry.rule;\n if (!rule.allowed) {\n isAllowed = false;\n }\n if (rule.hidden) {\n isHidden = true;\n }\n if (rule.forced) {\n isForced = true;\n }\n if (rule.preventStop) {\n isPreventStop = true;\n preventStepRefs.push(ruleEntry);\n }\n if (rule.reason) {\n reasonByTool.set(tool, rule.reason);\n }\n }\n\n if (isAllowed && isHidden) {\n isAllowed = false;\n }\n\n if (isAllowed) {\n if (!allowed.includes(tool)) {\n allowed.push(tool);\n }\n if (isForced && (!forced || forcedLevel < maxPriority)) {\n forced = tool;\n forcedLevel = maxPriority;\n }\n }\n if (isHidden) {\n if (!hidden.includes(tool)) {\n hidden.push(tool);\n }\n }\n if (isPreventStop) {\n preventStop = true;\n }\n }\n\n // If forced tool is set, only allow it and final answer\n if (forced) {\n allowed.length = 0;\n if (!allowed.includes(forced)) {\n allowed.push(forced);\n }\n if (!allowed.includes(this.finalAnswer as any)) {\n allowed.push(this.finalAnswer as any);\n }\n }\n\n // If prevent stop is set and forced is not final answer, remove final answer\n if (preventStop && forced !== this.finalAnswer) {\n const finalAnswerIndex = allowed.indexOf(this.finalAnswer);\n if (finalAnswerIndex !== -1) {\n allowed.splice(finalAnswerIndex, 1);\n }\n }\n\n if (allowed.length === 0) {\n throw new AgentError(\n \"One of the generated rules is preventing the agent from continuing. \" +\n \"This indicates that the provided requirements may conflict with each other. \" +\n \"See the following rules and their attached requirements that are preventing the agent from continuing.\\n\" +\n JSON.stringify(preventStepRefs, null, 2),\n );\n }\n\n let toolChoice: ChatModelToolChoice = forced || \"required\";\n if (allowed.length === 1) {\n toolChoice = allowed[0];\n }\n\n // Override to auto if not forcing and not preventing stop\n if (!(toolChoice instanceof Tool) && !forceTool && !preventStop) {\n toolChoice = \"auto\";\n }\n\n return {\n tools: allTools,\n allowedTools: allowed,\n reasonByTool,\n toolChoice,\n finalAnswer: this.finalAnswer,\n hiddenTools: hidden,\n canStop: !preventStop,\n };\n }\n}\n\n/**\n * Create system message from template and request\n */\nexport async function createSystemMessage(\n template: PromptTemplate<typeof RequirementAgentSystemPromptInputSchema>,\n request: RequirementAgentRequest,\n): Promise<SystemMessage> {\n return new SystemMessage(\n template.render({\n tools: await Promise.all(\n request.tools\n .filter((tool) => !request.hiddenTools.includes(tool))\n .map(async (tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: JSON.stringify(await tool.inputSchema(), null, 2),\n allowed: String(request.allowedTools.includes(tool)),\n reason: request.reasonByTool.get(tool),\n })),\n ),\n finalAnswerName: request.finalAnswer.name,\n finalAnswerSchema: request.finalAnswer.customSchema\n ? JSON.stringify(request.finalAnswer.inputSchema, null, 2)\n : undefined,\n finalAnswerInstructions: request.finalAnswer.instructions, // default\n role: undefined, // default\n instructions: undefined, // default\n notes: undefined, // default\n }),\n );\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AnyTool } from '../../../tools/base.cjs';
|
|
2
|
+
import { RunContext } from '../../../context.cjs';
|
|
3
|
+
import { SystemMessage } from '../../../backend/message.cjs';
|
|
4
|
+
import { PromptTemplate } from '../../../template.cjs';
|
|
5
|
+
import { F as FinalAnswerTool, R as RequirementAgentRunState, a as RequirementAgentRequest, b as RequirementAgentSystemPromptInputSchema } from '../../../types-W0QttuP_.cjs';
|
|
6
|
+
import { Requirement, Rule } from '../requirements/requirement.cjs';
|
|
7
|
+
import 'ajv';
|
|
8
|
+
import '../../../errors.cjs';
|
|
9
|
+
import '../../../internals/types.cjs';
|
|
10
|
+
import '../../../internals/helpers/guards.cjs';
|
|
11
|
+
import '../../../internals/serializable.cjs';
|
|
12
|
+
import 'promise-based-task';
|
|
13
|
+
import '../../../cache/base.cjs';
|
|
14
|
+
import '../../../internals/helpers/schema.cjs';
|
|
15
|
+
import 'zod';
|
|
16
|
+
import 'zod-to-json-schema';
|
|
17
|
+
import '../../../emitter-jN55XZZq.cjs';
|
|
18
|
+
import '../../../internals/helpers/promise.cjs';
|
|
19
|
+
import 'ai';
|
|
20
|
+
import '../../../memory/base.cjs';
|
|
21
|
+
import '../../../chat-BOb9n7AJ.cjs';
|
|
22
|
+
import '../../../backend/constants.cjs';
|
|
23
|
+
import '../../../logger/logger.cjs';
|
|
24
|
+
import 'pino';
|
|
25
|
+
import '../../../base-XfWeXQ-S.cjs';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Copyright 2025 © BeeAI a Series of LF Projects, LLC
|
|
29
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Manages requirements and generates requests for the agent
|
|
34
|
+
*/
|
|
35
|
+
declare class RequirementsReasoner {
|
|
36
|
+
protected tools: AnyTool[];
|
|
37
|
+
protected entries: Requirement[];
|
|
38
|
+
protected context: RunContext<any>;
|
|
39
|
+
readonly finalAnswer: FinalAnswerTool;
|
|
40
|
+
constructor(tools: AnyTool[], finalAnswer: FinalAnswerTool, context: RunContext<any>);
|
|
41
|
+
update(requirements: Requirement[]): Promise<void>;
|
|
42
|
+
protected findToolByName(name: string): AnyTool;
|
|
43
|
+
createRequest(state: RequirementAgentRunState, forceTool: boolean, extraRules?: Rule[]): Promise<RequirementAgentRequest>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create system message from template and request
|
|
47
|
+
*/
|
|
48
|
+
declare function createSystemMessage(template: PromptTemplate<typeof RequirementAgentSystemPromptInputSchema>, request: RequirementAgentRequest): Promise<SystemMessage>;
|
|
49
|
+
|
|
50
|
+
export { RequirementsReasoner, createSystemMessage };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AnyTool } from '../../../tools/base.js';
|
|
2
|
+
import { RunContext } from '../../../context.js';
|
|
3
|
+
import { SystemMessage } from '../../../backend/message.js';
|
|
4
|
+
import { PromptTemplate } from '../../../template.js';
|
|
5
|
+
import { F as FinalAnswerTool, R as RequirementAgentRunState, a as RequirementAgentRequest, b as RequirementAgentSystemPromptInputSchema } from '../../../types-CJwiMH3u.js';
|
|
6
|
+
import { Requirement, Rule } from '../requirements/requirement.js';
|
|
7
|
+
import 'ajv';
|
|
8
|
+
import '../../../errors.js';
|
|
9
|
+
import '../../../internals/types.js';
|
|
10
|
+
import '../../../internals/helpers/guards.js';
|
|
11
|
+
import '../../../internals/serializable.js';
|
|
12
|
+
import 'promise-based-task';
|
|
13
|
+
import '../../../cache/base.js';
|
|
14
|
+
import '../../../internals/helpers/schema.js';
|
|
15
|
+
import 'zod';
|
|
16
|
+
import 'zod-to-json-schema';
|
|
17
|
+
import '../../../emitter-36-9MnvA.js';
|
|
18
|
+
import '../../../internals/helpers/promise.js';
|
|
19
|
+
import 'ai';
|
|
20
|
+
import '../../../memory/base.js';
|
|
21
|
+
import '../../../chat-DrqwUgD8.js';
|
|
22
|
+
import '../../../backend/constants.js';
|
|
23
|
+
import '../../../logger/logger.js';
|
|
24
|
+
import 'pino';
|
|
25
|
+
import '../../../base-CyFx7BRL.js';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Copyright 2025 © BeeAI a Series of LF Projects, LLC
|
|
29
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Manages requirements and generates requests for the agent
|
|
34
|
+
*/
|
|
35
|
+
declare class RequirementsReasoner {
|
|
36
|
+
protected tools: AnyTool[];
|
|
37
|
+
protected entries: Requirement[];
|
|
38
|
+
protected context: RunContext<any>;
|
|
39
|
+
readonly finalAnswer: FinalAnswerTool;
|
|
40
|
+
constructor(tools: AnyTool[], finalAnswer: FinalAnswerTool, context: RunContext<any>);
|
|
41
|
+
update(requirements: Requirement[]): Promise<void>;
|
|
42
|
+
protected findToolByName(name: string): AnyTool;
|
|
43
|
+
createRequest(state: RequirementAgentRunState, forceTool: boolean, extraRules?: Rule[]): Promise<RequirementAgentRequest>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create system message from template and request
|
|
47
|
+
*/
|
|
48
|
+
declare function createSystemMessage(template: PromptTemplate<typeof RequirementAgentSystemPromptInputSchema>, request: RequirementAgentRequest): Promise<SystemMessage>;
|
|
49
|
+
|
|
50
|
+
export { RequirementsReasoner, createSystemMessage };
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { Tool } from '../../../tools/base.js';
|
|
2
|
+
import { AgentError } from '../../base.js';
|
|
3
|
+
import { SystemMessage } from '../../../backend/message.js';
|
|
4
|
+
import { toCamelCase } from 'remeda';
|
|
5
|
+
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
class RequirementsReasoner {
|
|
9
|
+
static {
|
|
10
|
+
__name(this, "RequirementsReasoner");
|
|
11
|
+
}
|
|
12
|
+
tools;
|
|
13
|
+
entries = [];
|
|
14
|
+
context;
|
|
15
|
+
finalAnswer;
|
|
16
|
+
constructor(tools, finalAnswer, context) {
|
|
17
|
+
this.tools = [
|
|
18
|
+
...tools,
|
|
19
|
+
finalAnswer
|
|
20
|
+
];
|
|
21
|
+
this.finalAnswer = finalAnswer;
|
|
22
|
+
this.context = context;
|
|
23
|
+
}
|
|
24
|
+
async update(requirements) {
|
|
25
|
+
this.entries = [];
|
|
26
|
+
for (const requirement of requirements) {
|
|
27
|
+
this.entries.push(requirement);
|
|
28
|
+
}
|
|
29
|
+
for (const entry of this.entries) {
|
|
30
|
+
const emitter = this.context.emitter.child({
|
|
31
|
+
groupId: toCamelCase(entry.name),
|
|
32
|
+
creator: entry
|
|
33
|
+
});
|
|
34
|
+
emitter.namespace.push("requirement");
|
|
35
|
+
const tools = [
|
|
36
|
+
...this.tools
|
|
37
|
+
];
|
|
38
|
+
await emitter.emit("init", {
|
|
39
|
+
tools
|
|
40
|
+
});
|
|
41
|
+
await entry.init(tools, this.context);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
findToolByName(name) {
|
|
45
|
+
const tool = this.tools.find((t) => t.name === name);
|
|
46
|
+
if (!tool) {
|
|
47
|
+
throw new Error(`Tool '${name}' not found in (${this.tools.map((t) => t.name).join(", ")}).`);
|
|
48
|
+
}
|
|
49
|
+
return tool;
|
|
50
|
+
}
|
|
51
|
+
async createRequest(state, forceTool, extraRules = []) {
|
|
52
|
+
const hidden = [];
|
|
53
|
+
const allowed = [];
|
|
54
|
+
const allTools = [
|
|
55
|
+
...this.tools
|
|
56
|
+
];
|
|
57
|
+
const reasonByTool = /* @__PURE__ */ new WeakMap();
|
|
58
|
+
let preventStop = false;
|
|
59
|
+
const preventStepRefs = [];
|
|
60
|
+
let forced = null;
|
|
61
|
+
let forcedLevel = 0;
|
|
62
|
+
const rulesByTool = /* @__PURE__ */ new Map();
|
|
63
|
+
for (const tool of this.tools) {
|
|
64
|
+
rulesByTool.set(tool.name, []);
|
|
65
|
+
}
|
|
66
|
+
for (const requirement of this.entries.filter((e) => e.enabled)) {
|
|
67
|
+
const generatedRules = await requirement.run(state);
|
|
68
|
+
for (const rule of generatedRules) {
|
|
69
|
+
const tool = this.findToolByName(rule.target);
|
|
70
|
+
const rules = rulesByTool.get(tool.name) || [];
|
|
71
|
+
rules.push({
|
|
72
|
+
priority: requirement.priority,
|
|
73
|
+
rule,
|
|
74
|
+
requirement
|
|
75
|
+
});
|
|
76
|
+
rulesByTool.set(tool.name, rules);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const rule of extraRules) {
|
|
80
|
+
if (!rulesByTool.has(rule.target)) {
|
|
81
|
+
throw new Error(`Tool '${rule.target}' not found.`);
|
|
82
|
+
}
|
|
83
|
+
const rules = rulesByTool.get(rule.target);
|
|
84
|
+
const priority = rules.length > 0 ? Math.max(...rules.map((r) => r.priority)) + 1 : 1;
|
|
85
|
+
rules.push({
|
|
86
|
+
priority,
|
|
87
|
+
rule,
|
|
88
|
+
requirement: null
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
for (const [toolName, rules] of rulesByTool.entries()) {
|
|
92
|
+
const tool = this.findToolByName(toolName);
|
|
93
|
+
rules.sort((a, b) => b.priority - a.priority);
|
|
94
|
+
const maxPriority = rules.length > 0 ? rules[0].priority : 1;
|
|
95
|
+
let isAllowed = true;
|
|
96
|
+
let isForced = false;
|
|
97
|
+
let isHidden = false;
|
|
98
|
+
let isPreventStop = false;
|
|
99
|
+
for (const ruleEntry of rules) {
|
|
100
|
+
const rule = ruleEntry.rule;
|
|
101
|
+
if (!rule.allowed) {
|
|
102
|
+
isAllowed = false;
|
|
103
|
+
}
|
|
104
|
+
if (rule.hidden) {
|
|
105
|
+
isHidden = true;
|
|
106
|
+
}
|
|
107
|
+
if (rule.forced) {
|
|
108
|
+
isForced = true;
|
|
109
|
+
}
|
|
110
|
+
if (rule.preventStop) {
|
|
111
|
+
isPreventStop = true;
|
|
112
|
+
preventStepRefs.push(ruleEntry);
|
|
113
|
+
}
|
|
114
|
+
if (rule.reason) {
|
|
115
|
+
reasonByTool.set(tool, rule.reason);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (isAllowed && isHidden) {
|
|
119
|
+
isAllowed = false;
|
|
120
|
+
}
|
|
121
|
+
if (isAllowed) {
|
|
122
|
+
if (!allowed.includes(tool)) {
|
|
123
|
+
allowed.push(tool);
|
|
124
|
+
}
|
|
125
|
+
if (isForced && (!forced || forcedLevel < maxPriority)) {
|
|
126
|
+
forced = tool;
|
|
127
|
+
forcedLevel = maxPriority;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (isHidden) {
|
|
131
|
+
if (!hidden.includes(tool)) {
|
|
132
|
+
hidden.push(tool);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (isPreventStop) {
|
|
136
|
+
preventStop = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (forced) {
|
|
140
|
+
allowed.length = 0;
|
|
141
|
+
if (!allowed.includes(forced)) {
|
|
142
|
+
allowed.push(forced);
|
|
143
|
+
}
|
|
144
|
+
if (!allowed.includes(this.finalAnswer)) {
|
|
145
|
+
allowed.push(this.finalAnswer);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (preventStop && forced !== this.finalAnswer) {
|
|
149
|
+
const finalAnswerIndex = allowed.indexOf(this.finalAnswer);
|
|
150
|
+
if (finalAnswerIndex !== -1) {
|
|
151
|
+
allowed.splice(finalAnswerIndex, 1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (allowed.length === 0) {
|
|
155
|
+
throw new AgentError("One of the generated rules is preventing the agent from continuing. This indicates that the provided requirements may conflict with each other. See the following rules and their attached requirements that are preventing the agent from continuing.\n" + JSON.stringify(preventStepRefs, null, 2));
|
|
156
|
+
}
|
|
157
|
+
let toolChoice = forced || "required";
|
|
158
|
+
if (allowed.length === 1) {
|
|
159
|
+
toolChoice = allowed[0];
|
|
160
|
+
}
|
|
161
|
+
if (!(toolChoice instanceof Tool) && !forceTool && !preventStop) {
|
|
162
|
+
toolChoice = "auto";
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
tools: allTools,
|
|
166
|
+
allowedTools: allowed,
|
|
167
|
+
reasonByTool,
|
|
168
|
+
toolChoice,
|
|
169
|
+
finalAnswer: this.finalAnswer,
|
|
170
|
+
hiddenTools: hidden,
|
|
171
|
+
canStop: !preventStop
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async function createSystemMessage(template, request) {
|
|
176
|
+
return new SystemMessage(template.render({
|
|
177
|
+
tools: await Promise.all(request.tools.filter((tool) => !request.hiddenTools.includes(tool)).map(async (tool) => ({
|
|
178
|
+
name: tool.name,
|
|
179
|
+
description: tool.description,
|
|
180
|
+
inputSchema: JSON.stringify(await tool.inputSchema(), null, 2),
|
|
181
|
+
allowed: String(request.allowedTools.includes(tool)),
|
|
182
|
+
reason: request.reasonByTool.get(tool)
|
|
183
|
+
}))),
|
|
184
|
+
finalAnswerName: request.finalAnswer.name,
|
|
185
|
+
finalAnswerSchema: request.finalAnswer.customSchema ? JSON.stringify(request.finalAnswer.inputSchema, null, 2) : void 0,
|
|
186
|
+
finalAnswerInstructions: request.finalAnswer.instructions,
|
|
187
|
+
// default
|
|
188
|
+
role: void 0,
|
|
189
|
+
// default
|
|
190
|
+
instructions: void 0,
|
|
191
|
+
// default
|
|
192
|
+
notes: void 0
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
195
|
+
__name(createSystemMessage, "createSystemMessage");
|
|
196
|
+
|
|
197
|
+
export { RequirementsReasoner, createSystemMessage };
|
|
198
|
+
//# sourceMappingURL=llm.js.map
|
|
199
|
+
//# sourceMappingURL=llm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/agents/requirement/utils/llm.ts"],"names":["RequirementsReasoner","tools","entries","context","finalAnswer","update","requirements","requirement","push","entry","emitter","child","groupId","toCamelCase","name","creator","namespace","emit","init","findToolByName","tool","find","t","Error","map","join","createRequest","state","forceTool","extraRules","hidden","allowed","allTools","reasonByTool","WeakMap","preventStop","preventStepRefs","forced","forcedLevel","rulesByTool","Map","set","filter","e","enabled","generatedRules","run","rule","target","rules","get","priority","has","length","Math","max","r","toolName","sort","a","b","maxPriority","isAllowed","isForced","isHidden","isPreventStop","ruleEntry","reason","includes","finalAnswerIndex","indexOf","splice","AgentError","JSON","stringify","toolChoice","Tool","allowedTools","hiddenTools","canStop","createSystemMessage","template","request","SystemMessage","render","Promise","all","description","inputSchema","String","finalAnswerName","finalAnswerSchema","customSchema","undefined","finalAnswerInstructions","instructions","role","notes"],"mappings":"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","file":"llm.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { RunContext } from \"@/context.js\";\nimport { AgentError } from \"@/agents/base.js\";\nimport { SystemMessage } from \"@/backend/message.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport {\n RequirementAgentRequest,\n RequirementAgentRunState,\n RequirementAgentSystemPromptInputSchema,\n} from \"@/agents/requirement/types.js\";\nimport {\n Requirement,\n RequirementCallbacks,\n Rule,\n} from \"@/agents/requirement/requirements/requirement.js\";\nimport { FinalAnswerTool } from \"./tool.js\";\nimport { ChatModelToolChoice } from \"@/backend/chat.js\";\nimport { toCamelCase } from \"remeda\";\n\ninterface RuleEntry {\n rule: Rule;\n requirement: Requirement | null;\n priority: number;\n}\n\n/**\n * Manages requirements and generates requests for the agent\n */\nexport class RequirementsReasoner {\n protected tools: AnyTool[];\n protected entries: Requirement[] = [];\n protected context: RunContext<any>;\n public readonly finalAnswer: FinalAnswerTool;\n\n constructor(tools: AnyTool[], finalAnswer: FinalAnswerTool, context: RunContext<any>) {\n this.tools = [...tools, finalAnswer];\n this.finalAnswer = finalAnswer;\n this.context = context;\n }\n\n async update(requirements: Requirement[]): Promise<void> {\n this.entries = [];\n\n for (const requirement of requirements) {\n this.entries.push(requirement);\n }\n\n for (const entry of this.entries) {\n const emitter = this.context.emitter.child<RequirementCallbacks>({\n groupId: toCamelCase(entry.name),\n creator: entry,\n });\n emitter.namespace.push(\"requirement\");\n\n const tools = [...this.tools];\n await emitter.emit(\"init\", { tools });\n await entry.init(tools, this.context);\n }\n }\n\n protected findToolByName(name: string): AnyTool {\n const tool = this.tools.find((t) => t.name === name);\n if (!tool) {\n throw new Error(`Tool '${name}' not found in (${this.tools.map((t) => t.name).join(\", \")}).`);\n }\n return tool;\n }\n\n async createRequest(\n state: RequirementAgentRunState,\n forceTool: boolean,\n extraRules: Rule[] = [],\n ): Promise<RequirementAgentRequest> {\n const hidden: AnyTool[] = [];\n const allowed: AnyTool[] = [];\n const allTools: AnyTool[] = [...this.tools];\n const reasonByTool = new WeakMap<AnyTool, string | undefined>();\n\n let preventStop = false;\n const preventStepRefs: RuleEntry[] = [];\n\n let forced: AnyTool | null = null;\n let forcedLevel = 0;\n const rulesByTool = new Map<string, RuleEntry[]>();\n\n // Initialize rules map\n for (const tool of this.tools) {\n rulesByTool.set(tool.name, []);\n }\n\n // Group rules from requirements\n for (const requirement of this.entries.filter((e) => e.enabled)) {\n const generatedRules = await requirement.run(state);\n for (const rule of generatedRules) {\n const tool = this.findToolByName(rule.target);\n const rules = rulesByTool.get(tool.name) || [];\n rules.push({\n priority: requirement.priority,\n rule,\n requirement,\n });\n rulesByTool.set(tool.name, rules);\n }\n }\n\n // Add extra rules\n for (const rule of extraRules) {\n if (!rulesByTool.has(rule.target)) {\n throw new Error(`Tool '${rule.target}' not found.`);\n }\n\n const rules = rulesByTool.get(rule.target)!;\n const priority = rules.length > 0 ? Math.max(...rules.map((r) => r.priority)) + 1 : 1;\n rules.push({\n priority,\n rule,\n requirement: null,\n });\n }\n\n // Aggregate rules and infer required tool\n for (const [toolName, rules] of rulesByTool.entries()) {\n const tool = this.findToolByName(toolName);\n rules.sort((a, b) => b.priority - a.priority); // DESC\n\n const maxPriority = rules.length > 0 ? rules[0].priority : 1;\n let isAllowed = true;\n let isForced = false;\n let isHidden = false;\n let isPreventStop = false;\n\n for (const ruleEntry of rules) {\n const rule = ruleEntry.rule;\n if (!rule.allowed) {\n isAllowed = false;\n }\n if (rule.hidden) {\n isHidden = true;\n }\n if (rule.forced) {\n isForced = true;\n }\n if (rule.preventStop) {\n isPreventStop = true;\n preventStepRefs.push(ruleEntry);\n }\n if (rule.reason) {\n reasonByTool.set(tool, rule.reason);\n }\n }\n\n if (isAllowed && isHidden) {\n isAllowed = false;\n }\n\n if (isAllowed) {\n if (!allowed.includes(tool)) {\n allowed.push(tool);\n }\n if (isForced && (!forced || forcedLevel < maxPriority)) {\n forced = tool;\n forcedLevel = maxPriority;\n }\n }\n if (isHidden) {\n if (!hidden.includes(tool)) {\n hidden.push(tool);\n }\n }\n if (isPreventStop) {\n preventStop = true;\n }\n }\n\n // If forced tool is set, only allow it and final answer\n if (forced) {\n allowed.length = 0;\n if (!allowed.includes(forced)) {\n allowed.push(forced);\n }\n if (!allowed.includes(this.finalAnswer as any)) {\n allowed.push(this.finalAnswer as any);\n }\n }\n\n // If prevent stop is set and forced is not final answer, remove final answer\n if (preventStop && forced !== this.finalAnswer) {\n const finalAnswerIndex = allowed.indexOf(this.finalAnswer);\n if (finalAnswerIndex !== -1) {\n allowed.splice(finalAnswerIndex, 1);\n }\n }\n\n if (allowed.length === 0) {\n throw new AgentError(\n \"One of the generated rules is preventing the agent from continuing. \" +\n \"This indicates that the provided requirements may conflict with each other. \" +\n \"See the following rules and their attached requirements that are preventing the agent from continuing.\\n\" +\n JSON.stringify(preventStepRefs, null, 2),\n );\n }\n\n let toolChoice: ChatModelToolChoice = forced || \"required\";\n if (allowed.length === 1) {\n toolChoice = allowed[0];\n }\n\n // Override to auto if not forcing and not preventing stop\n if (!(toolChoice instanceof Tool) && !forceTool && !preventStop) {\n toolChoice = \"auto\";\n }\n\n return {\n tools: allTools,\n allowedTools: allowed,\n reasonByTool,\n toolChoice,\n finalAnswer: this.finalAnswer,\n hiddenTools: hidden,\n canStop: !preventStop,\n };\n }\n}\n\n/**\n * Create system message from template and request\n */\nexport async function createSystemMessage(\n template: PromptTemplate<typeof RequirementAgentSystemPromptInputSchema>,\n request: RequirementAgentRequest,\n): Promise<SystemMessage> {\n return new SystemMessage(\n template.render({\n tools: await Promise.all(\n request.tools\n .filter((tool) => !request.hiddenTools.includes(tool))\n .map(async (tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: JSON.stringify(await tool.inputSchema(), null, 2),\n allowed: String(request.allowedTools.includes(tool)),\n reason: request.reasonByTool.get(tool),\n })),\n ),\n finalAnswerName: request.finalAnswer.name,\n finalAnswerSchema: request.finalAnswer.customSchema\n ? JSON.stringify(request.finalAnswer.inputSchema, null, 2)\n : undefined,\n finalAnswerInstructions: request.finalAnswer.instructions, // default\n role: undefined, // default\n instructions: undefined, // default\n notes: undefined, // default\n }),\n );\n}\n"]}
|