@falai/agent 1.2.8 → 2.0.1
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/README.md +40 -886
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +9 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +5 -5
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +30 -11
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +5 -5
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/constants/index.d.ts +0 -9
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +2 -11
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +119 -153
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +471 -324
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/cjs/core/AutoChainExecutor.js +297 -0
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
- package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/BranchEvaluator.js +130 -0
- package/dist/cjs/core/BranchEvaluator.js.map +1 -0
- package/dist/cjs/core/DirectiveBus.d.ts +88 -0
- package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveBus.js +196 -0
- package/dist/cjs/core/DirectiveBus.js.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.js +121 -0
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
- package/dist/cjs/core/Flow.d.ts +186 -0
- package/dist/cjs/core/Flow.d.ts.map +1 -0
- package/dist/cjs/core/Flow.js +550 -0
- package/dist/cjs/core/Flow.js.map +1 -0
- package/dist/cjs/core/FlowRouter.d.ts +182 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
- package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
- package/dist/cjs/core/FlowRouter.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.d.ts +2 -2
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +7 -7
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +21 -8
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +182 -105
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
- package/dist/cjs/core/PromptSectionCache.js +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +18 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +38 -36
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +73 -56
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +1191 -1014
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +509 -136
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/SignalEvaluator.js +333 -0
- package/dist/cjs/core/SignalEvaluator.js.map +1 -0
- package/dist/cjs/core/SignalProcessor.d.ts +152 -0
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
- package/dist/cjs/core/SignalProcessor.js +562 -0
- package/dist/cjs/core/SignalProcessor.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +43 -32
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +221 -126
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +44 -13
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +174 -91
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/core/flow-namespace.d.ts +49 -0
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
- package/dist/cjs/core/flow-namespace.js +171 -0
- package/dist/cjs/core/flow-namespace.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +1 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +183 -54
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +0 -6
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/ai.d.ts +3 -3
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +15 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +22 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/flow.d.ts +513 -0
- package/dist/cjs/types/flow.d.ts.map +1 -0
- package/dist/cjs/types/{route.js → flow.js} +2 -2
- package/dist/cjs/types/flow.js.map +1 -0
- package/dist/cjs/types/index.d.ts +7 -6
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +6 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +11 -7
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/routing.d.ts +1 -1
- package/dist/cjs/types/routing.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +24 -23
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +248 -0
- package/dist/cjs/types/signals.d.ts.map +1 -0
- package/dist/cjs/types/signals.js +11 -0
- package/dist/cjs/types/signals.js.map +1 -0
- package/dist/cjs/types/template.d.ts +2 -8
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +36 -29
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +7 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/id.d.ts +13 -5
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +24 -10
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -2
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +44 -5
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +197 -38
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/constants/index.d.ts +0 -9
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -9
- package/dist/constants/index.js.map +1 -1
- package/dist/core/Agent.d.ts +119 -153
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +472 -325
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +107 -0
- package/dist/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/core/AutoChainExecutor.js +293 -0
- package/dist/core/AutoChainExecutor.js.map +1 -0
- package/dist/core/BranchEvaluator.d.ts +54 -0
- package/dist/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/core/BranchEvaluator.js +126 -0
- package/dist/core/BranchEvaluator.js.map +1 -0
- package/dist/core/DirectiveBus.d.ts +88 -0
- package/dist/core/DirectiveBus.d.ts.map +1 -0
- package/dist/core/DirectiveBus.js +192 -0
- package/dist/core/DirectiveBus.js.map +1 -0
- package/dist/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/core/DirectiveChainTracker.js +117 -0
- package/dist/core/DirectiveChainTracker.js.map +1 -0
- package/dist/core/Flow.d.ts +186 -0
- package/dist/core/Flow.d.ts.map +1 -0
- package/dist/core/Flow.js +546 -0
- package/dist/core/Flow.js.map +1 -0
- package/dist/core/FlowRouter.d.ts +182 -0
- package/dist/core/FlowRouter.d.ts.map +1 -0
- package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
- package/dist/core/FlowRouter.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts +2 -2
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +7 -7
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +21 -8
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +183 -106
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +1 -1
- package/dist/core/PromptSectionCache.js +1 -1
- package/dist/core/ResponseEngine.d.ts +18 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +38 -36
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +73 -56
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +1193 -1016
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +124 -26
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +509 -137
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +86 -0
- package/dist/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/core/SignalEvaluator.js +326 -0
- package/dist/core/SignalEvaluator.js.map +1 -0
- package/dist/core/SignalProcessor.d.ts +152 -0
- package/dist/core/SignalProcessor.d.ts.map +1 -0
- package/dist/core/SignalProcessor.js +555 -0
- package/dist/core/SignalProcessor.js.map +1 -0
- package/dist/core/Step.d.ts +43 -32
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +220 -126
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +44 -13
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +174 -91
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +35 -0
- package/dist/core/createAgent.d.ts.map +1 -0
- package/dist/core/createAgent.js +36 -0
- package/dist/core/createAgent.js.map +1 -0
- package/dist/core/flow-namespace.d.ts +49 -0
- package/dist/core/flow-namespace.d.ts.map +1 -0
- package/dist/core/flow-namespace.js +168 -0
- package/dist/core/flow-namespace.js.map +1 -0
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +1 -1
- package/dist/providers/AnthropicProvider.js +1 -1
- package/dist/providers/GeminiProvider.d.ts +1 -1
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +1 -1
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +1 -1
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +1 -1
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/types/agent.d.ts +183 -54
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/ai.d.ts +3 -3
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +18 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/flow.d.ts +513 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +5 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +7 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +11 -7
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/routing.d.ts +1 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -23
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +248 -0
- package/dist/types/signals.d.ts.map +1 -0
- package/dist/types/signals.js +10 -0
- package/dist/types/signals.js.map +1 -0
- package/dist/types/template.d.ts +2 -8
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +36 -29
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +7 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/id.d.ts +13 -5
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +44 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +193 -37
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +22 -200
- package/docs/concepts/architecture.md +281 -0
- package/docs/concepts/directives.md +400 -0
- package/docs/concepts/pipeline.md +399 -0
- package/docs/guides/branching.md +263 -0
- package/docs/guides/compaction.md +163 -0
- package/docs/guides/conditions.md +167 -0
- package/docs/guides/error-handling.md +176 -0
- package/docs/guides/flow-control.md +409 -0
- package/docs/guides/instructions.md +210 -0
- package/docs/guides/persistence.md +182 -0
- package/docs/guides/streaming.md +137 -0
- package/docs/migration/README.md +14 -0
- package/docs/migration/route-to-flow.md +561 -0
- package/docs/migration/v1-to-v2.md +909 -0
- package/docs/reference/adapters.md +481 -0
- package/docs/reference/branches.md +241 -0
- package/docs/reference/create-agent.md +186 -0
- package/docs/reference/directive.md +243 -0
- package/docs/reference/errors.md +122 -0
- package/docs/reference/flow.md +238 -0
- package/docs/reference/instruction.md +177 -0
- package/docs/reference/pre-directive.md +131 -0
- package/docs/reference/providers.md +227 -0
- package/docs/reference/signals.md +356 -0
- package/docs/reference/step.md +339 -0
- package/docs/reference/tool.md +269 -0
- package/docs/start/01-install.md +81 -0
- package/docs/start/02-first-agent.md +196 -0
- package/docs/start/03-collect-data.md +222 -0
- package/docs/start/04-add-tools.md +276 -0
- package/docs/start/05-go-to-production.md +216 -0
- package/examples/01-quickstart.ts +20 -0
- package/examples/02-data-extraction.ts +90 -0
- package/examples/03-tools.ts +136 -0
- package/examples/04-instructions.ts +100 -0
- package/examples/05-branching.ts +140 -0
- package/examples/06-flow-control.ts +103 -0
- package/examples/07-streaming.ts +69 -0
- package/examples/08-persistence.ts +98 -0
- package/examples/09-signals.ts +144 -0
- package/examples/tsconfig.json +30 -0
- package/package.json +2 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +10 -8
- package/src/adapters/PostgreSQLAdapter.ts +26 -10
- package/src/adapters/PrismaAdapter.ts +6 -6
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +31 -12
- package/src/constants/index.ts +2 -10
- package/src/core/Agent.ts +585 -374
- package/src/core/AutoChainExecutor.ts +440 -0
- package/src/core/BranchEvaluator.ts +167 -0
- package/src/core/DirectiveBus.ts +248 -0
- package/src/core/DirectiveChainTracker.ts +144 -0
- package/src/core/Flow.ts +666 -0
- package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
- package/src/core/PersistenceManager.ts +8 -8
- package/src/core/PromptComposer.ts +209 -140
- package/src/core/PromptSectionCache.ts +1 -1
- package/src/core/ResponseEngine.ts +61 -46
- package/src/core/ResponseModal.ts +1453 -1240
- package/src/core/ResponsePipeline.ts +655 -175
- package/src/core/SignalEvaluator.ts +420 -0
- package/src/core/SignalProcessor.ts +723 -0
- package/src/core/Step.ts +279 -176
- package/src/core/StreamingToolExecutor.ts +4 -4
- package/src/core/ToolManager.ts +200 -97
- package/src/core/createAgent.ts +40 -0
- package/src/core/flow-namespace.ts +219 -0
- package/src/index.ts +42 -36
- package/src/providers/AnthropicProvider.ts +2 -2
- package/src/providers/GeminiProvider.ts +2 -2
- package/src/providers/OpenAIProvider.ts +2 -2
- package/src/types/agent.ts +182 -53
- package/src/types/ai.ts +3 -3
- package/src/types/errors.ts +18 -0
- package/src/types/flow.ts +590 -0
- package/src/types/index.ts +43 -16
- package/src/types/persistence.ts +12 -8
- package/src/types/routing.ts +1 -1
- package/src/types/session.ts +26 -23
- package/src/types/signals.ts +321 -0
- package/src/types/template.ts +3 -11
- package/src/types/tool.ts +50 -42
- package/src/utils/condition.ts +13 -4
- package/src/utils/id.ts +27 -9
- package/src/utils/index.ts +6 -2
- package/src/utils/session.ts +238 -42
- package/dist/cjs/core/BatchExecutor.d.ts +0 -359
- package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
- package/dist/cjs/core/BatchExecutor.js +0 -861
- package/dist/cjs/core/BatchExecutor.js.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.js +0 -223
- package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -180
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -542
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -185
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -336
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/route.js.map +0 -1
- package/dist/core/BatchExecutor.d.ts +0 -359
- package/dist/core/BatchExecutor.d.ts.map +0 -1
- package/dist/core/BatchExecutor.js +0 -856
- package/dist/core/BatchExecutor.js.map +0 -1
- package/dist/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/core/BatchPromptBuilder.js +0 -219
- package/dist/core/BatchPromptBuilder.js.map +0 -1
- package/dist/core/Route.d.ts +0 -180
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -538
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -185
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/types/route.d.ts +0 -336
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/route.js +0 -5
- package/dist/types/route.js.map +0 -1
- package/docs/CONTRIBUTING.md +0 -521
- package/docs/api/README.md +0 -3299
- package/docs/api/overview.md +0 -1410
- package/docs/architecture/data-extraction-flow.md +0 -360
- package/docs/architecture/multi-step-execution.md +0 -277
- package/docs/core/agent/README.md +0 -938
- package/docs/core/agent/context-management.md +0 -796
- package/docs/core/agent/rules-and-prohibitions.md +0 -113
- package/docs/core/agent/session-management.md +0 -693
- package/docs/core/ai-integration/prompt-composition.md +0 -355
- package/docs/core/ai-integration/providers.md +0 -515
- package/docs/core/ai-integration/response-processing.md +0 -433
- package/docs/core/conversation-flows/data-collection.md +0 -772
- package/docs/core/conversation-flows/route-dsl.md +0 -509
- package/docs/core/conversation-flows/routes.md +0 -249
- package/docs/core/conversation-flows/step-transitions.md +0 -731
- package/docs/core/conversation-flows/steps.md +0 -268
- package/docs/core/error-handling.md +0 -830
- package/docs/core/persistence/adapters.md +0 -255
- package/docs/core/persistence/session-storage.md +0 -656
- package/docs/core/routing/intelligent-routing.md +0 -470
- package/docs/core/tools/enhanced-tool.md +0 -186
- package/docs/core/tools/streaming-execution.md +0 -161
- package/docs/core/tools/tool-definition.md +0 -970
- package/docs/core/tools/tool-scoping.md +0 -819
- package/docs/guides/advanced-patterns/publishing.md +0 -186
- package/docs/guides/context-compaction.md +0 -96
- package/docs/guides/error-handling-patterns.md +0 -578
- package/docs/guides/getting-started/README.md +0 -795
- package/docs/guides/migration/README.md +0 -101
- package/docs/guides/migration/flexible-routing-conditions.md +0 -375
- package/docs/guides/migration/multi-step-execution.md +0 -393
- package/docs/guides/migration/response-modal-refactor.md +0 -518
- package/docs/guides/prompt-optimization.md +0 -164
- package/examples/advanced-patterns/context-compaction.ts +0 -223
- package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
- package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
- package/examples/advanced-patterns/streaming-responses.ts +0 -656
- package/examples/ai-providers/anthropic-integration.ts +0 -388
- package/examples/ai-providers/openai-integration.ts +0 -228
- package/examples/condition-patterns/function-only-conditions.ts +0 -365
- package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
- package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +0 -296
- package/examples/conversation-flows/completion-transitions.ts +0 -318
- package/examples/core-concepts/basic-agent.ts +0 -503
- package/examples/core-concepts/modern-streaming-api.ts +0 -309
- package/examples/core-concepts/schema-driven-extraction.ts +0 -332
- package/examples/core-concepts/session-management.ts +0 -494
- package/examples/integrations/database-integration.ts +0 -631
- package/examples/integrations/healthcare-integration.ts +0 -595
- package/examples/integrations/search-integration.ts +0 -530
- package/examples/integrations/server-session-management.ts +0 -307
- package/examples/persistence/custom-adapter.ts +0 -526
- package/examples/persistence/database-persistence.ts +0 -583
- package/examples/persistence/memory-sessions.ts +0 -495
- package/examples/persistence/prisma-schema.example.prisma +0 -74
- package/examples/persistence/redis-persistence.ts +0 -488
- package/examples/tools/basic-tools.ts +0 -765
- package/examples/tools/data-enrichment-tools.ts +0 -593
- package/examples/tools/enhanced-tool-metadata.ts +0 -268
- package/examples/tools/streaming-tool-execution.ts +0 -283
- package/src/core/BatchExecutor.ts +0 -1187
- package/src/core/BatchPromptBuilder.ts +0 -299
- package/src/core/Route.ts +0 -678
- package/src/types/route.ts +0 -392
|
@@ -1,518 +0,0 @@
|
|
|
1
|
-
# ResponseModal Refactor Migration Guide
|
|
2
|
-
|
|
3
|
-
This guide helps you migrate from the legacy response APIs to the new ResponseModal architecture introduced in the latest version. The refactor provides better architecture, modern streaming APIs, and improved maintainability while maintaining full backward compatibility.
|
|
4
|
-
|
|
5
|
-
## 📋 Table of Contents
|
|
6
|
-
|
|
7
|
-
- [Overview](#overview)
|
|
8
|
-
- [What Changed](#what-changed)
|
|
9
|
-
- [Backward Compatibility](#backward-compatibility)
|
|
10
|
-
- [New Modern APIs](#new-modern-apis)
|
|
11
|
-
- [Migration Strategies](#migration-strategies)
|
|
12
|
-
- [Side-by-Side Comparisons](#side-by-side-comparisons)
|
|
13
|
-
- [Benefits of Migration](#benefits-of-migration)
|
|
14
|
-
- [Troubleshooting](#troubleshooting)
|
|
15
|
-
|
|
16
|
-
## Overview
|
|
17
|
-
|
|
18
|
-
The ResponseModal refactor centralizes all response generation logic into a dedicated `ResponseModal` class, providing:
|
|
19
|
-
|
|
20
|
-
- **🏗️ Better Architecture**: Separation of concerns between Agent configuration and response generation
|
|
21
|
-
- **🚀 Modern APIs**: Simple `stream()` and `generate()` methods with automatic session management
|
|
22
|
-
- **🔄 Backward Compatibility**: All existing `respond()` and `respondStream()` methods work unchanged
|
|
23
|
-
- **⚡ Performance**: Unified response logic eliminates code duplication
|
|
24
|
-
- **🛠️ Maintainability**: Centralized response logic is easier to test and maintain
|
|
25
|
-
|
|
26
|
-
## What Changed
|
|
27
|
-
|
|
28
|
-
### Internal Architecture
|
|
29
|
-
|
|
30
|
-
```mermaid
|
|
31
|
-
graph TD
|
|
32
|
-
subgraph "Before: Monolithic Agent"
|
|
33
|
-
A1[Agent Class<br/>2000+ lines] --> RL[Response Logic]
|
|
34
|
-
A1 --> SM[Session Management]
|
|
35
|
-
A1 --> RE[Response Engine]
|
|
36
|
-
A1 --> RP[Response Pipeline]
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
subgraph "After: Separated Concerns"
|
|
40
|
-
A2[Agent Class<br/>Simplified] --> RM[ResponseModal]
|
|
41
|
-
A2 --> SM2[Session Management]
|
|
42
|
-
RM --> RE2[Response Engine]
|
|
43
|
-
RM --> RP2[Response Pipeline]
|
|
44
|
-
RM --> UL[Unified Logic]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
style A1 fill:#ffcccc
|
|
48
|
-
style A2 fill:#ccffcc
|
|
49
|
-
style RM fill:#ccffcc
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### New Classes
|
|
53
|
-
|
|
54
|
-
- **`ResponseModal<TContext, TData>`**: Handles all response generation logic
|
|
55
|
-
- **`ResponseGenerationError`**: Specialized error handling for response failures
|
|
56
|
-
- **New interfaces**: `StreamOptions`, `GenerateOptions`, `ResponseModalOptions`
|
|
57
|
-
|
|
58
|
-
### New Methods
|
|
59
|
-
|
|
60
|
-
- **`agent.stream(message, options?)`**: Modern streaming API with automatic session management
|
|
61
|
-
- **`responseModal.generate(message, options?)`**: Modern non-streaming API (internal)
|
|
62
|
-
|
|
63
|
-
## Backward Compatibility
|
|
64
|
-
|
|
65
|
-
**✅ All existing code continues to work without changes.**
|
|
66
|
-
|
|
67
|
-
```typescript
|
|
68
|
-
// These methods work exactly the same as before
|
|
69
|
-
const response = await agent.respond({ history, session });
|
|
70
|
-
const stream = agent.respondStream({ history, session });
|
|
71
|
-
const chatResponse = await agent.chat("Hello");
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
The only difference is that these methods now delegate to the internal `ResponseModal` class for better architecture.
|
|
75
|
-
|
|
76
|
-
## New Modern APIs
|
|
77
|
-
|
|
78
|
-
### Modern Streaming: `agent.stream()`
|
|
79
|
-
|
|
80
|
-
The new `stream()` method provides a much simpler interface for streaming responses:
|
|
81
|
-
|
|
82
|
-
```typescript
|
|
83
|
-
// NEW: Modern streaming API
|
|
84
|
-
for await (const chunk of agent.stream("Hello, how are you?")) {
|
|
85
|
-
if (chunk.delta) {
|
|
86
|
-
process.stdout.write(chunk.delta);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (chunk.done) {
|
|
90
|
-
console.log("Stream complete!");
|
|
91
|
-
// Session history is automatically updated
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
**Key Features:**
|
|
97
|
-
- 🎯 Simple interface: just pass the message
|
|
98
|
-
- 🔄 Automatic session management
|
|
99
|
-
- 🌊 Same streaming performance as `respondStream()`
|
|
100
|
-
- 🛑 Supports AbortSignal for cancellation
|
|
101
|
-
- ⚙️ Optional context override
|
|
102
|
-
|
|
103
|
-
### Options Support
|
|
104
|
-
|
|
105
|
-
```typescript
|
|
106
|
-
// With options
|
|
107
|
-
for await (const chunk of agent.stream("Explain quantum computing", {
|
|
108
|
-
contextOverride: { userId: "123" },
|
|
109
|
-
signal: abortController.signal
|
|
110
|
-
})) {
|
|
111
|
-
// Handle chunk
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## Migration Strategies
|
|
116
|
-
|
|
117
|
-
### Strategy 1: Gradual Migration (Recommended)
|
|
118
|
-
|
|
119
|
-
Migrate to modern APIs gradually while keeping existing code working:
|
|
120
|
-
|
|
121
|
-
```typescript
|
|
122
|
-
// Phase 1: Keep existing code working
|
|
123
|
-
const response = await agent.respond({ history, session }); // ✅ Still works
|
|
124
|
-
|
|
125
|
-
// Phase 2: Start using modern APIs for new features
|
|
126
|
-
for await (const chunk of agent.stream("New feature message")) {
|
|
127
|
-
// Handle streaming
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Phase 3: Gradually replace old APIs when convenient
|
|
131
|
-
// Old: agent.respondStream({ history: agent.session.getHistory() })
|
|
132
|
-
// New: agent.stream("message")
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### Strategy 2: Full Migration
|
|
136
|
-
|
|
137
|
-
Replace all streaming calls with the modern API:
|
|
138
|
-
|
|
139
|
-
```typescript
|
|
140
|
-
// Before: Manual session management
|
|
141
|
-
await agent.session.addMessage("user", userMessage);
|
|
142
|
-
for await (const chunk of agent.respondStream({
|
|
143
|
-
history: agent.session.getHistory()
|
|
144
|
-
})) {
|
|
145
|
-
// Handle chunk
|
|
146
|
-
if (chunk.done) {
|
|
147
|
-
await agent.session.addMessage("assistant", chunk.accumulated);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// After: Automatic session management
|
|
152
|
-
for await (const chunk of agent.stream(userMessage)) {
|
|
153
|
-
// Handle chunk - session is automatically managed
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Strategy 3: Hybrid Approach
|
|
158
|
-
|
|
159
|
-
Use modern APIs for new code, keep legacy APIs for complex existing implementations:
|
|
160
|
-
|
|
161
|
-
```typescript
|
|
162
|
-
// Complex existing code - keep using respondStream()
|
|
163
|
-
const complexResponse = await agent.respondStream({
|
|
164
|
-
history: customHistory,
|
|
165
|
-
session: customSession,
|
|
166
|
-
contextOverride: complexContext,
|
|
167
|
-
signal: customSignal
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
// Simple new code - use modern stream()
|
|
171
|
-
for await (const chunk of agent.stream("Simple question")) {
|
|
172
|
-
// Handle chunk
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
## Side-by-Side Comparisons
|
|
177
|
-
|
|
178
|
-
### Basic Streaming
|
|
179
|
-
|
|
180
|
-
```typescript
|
|
181
|
-
// ❌ OLD WAY: respondStream() - Manual session management
|
|
182
|
-
await agent.session.addMessage("user", "What is TypeScript?");
|
|
183
|
-
let fullMessage = "";
|
|
184
|
-
|
|
185
|
-
for await (const chunk of agent.respondStream({
|
|
186
|
-
history: agent.session.getHistory()
|
|
187
|
-
})) {
|
|
188
|
-
if (chunk.delta) {
|
|
189
|
-
process.stdout.write(chunk.delta);
|
|
190
|
-
fullMessage += chunk.delta;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (chunk.done) {
|
|
194
|
-
await agent.session.addMessage("assistant", fullMessage);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// ✅ NEW WAY: stream() - Automatic session management
|
|
199
|
-
for await (const chunk of agent.stream("What is TypeScript?")) {
|
|
200
|
-
if (chunk.delta) {
|
|
201
|
-
process.stdout.write(chunk.delta);
|
|
202
|
-
}
|
|
203
|
-
// Session is automatically updated when done
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### Multi-turn Conversations
|
|
208
|
-
|
|
209
|
-
```typescript
|
|
210
|
-
// ❌ OLD WAY: Manual history management
|
|
211
|
-
const messages = ["Hello", "How are you?", "Tell me about AI"];
|
|
212
|
-
|
|
213
|
-
for (const message of messages) {
|
|
214
|
-
await agent.session.addMessage("user", message);
|
|
215
|
-
|
|
216
|
-
let response = "";
|
|
217
|
-
for await (const chunk of agent.respondStream({
|
|
218
|
-
history: agent.session.getHistory()
|
|
219
|
-
})) {
|
|
220
|
-
if (chunk.delta) response += chunk.delta;
|
|
221
|
-
if (chunk.done) {
|
|
222
|
-
await agent.session.addMessage("assistant", response);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// ✅ NEW WAY: Automatic session management
|
|
228
|
-
const messages = ["Hello", "How are you?", "Tell me about AI"];
|
|
229
|
-
|
|
230
|
-
for (const message of messages) {
|
|
231
|
-
for await (const chunk of agent.stream(message)) {
|
|
232
|
-
if (chunk.delta) process.stdout.write(chunk.delta);
|
|
233
|
-
// Session automatically updated
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### With Abort Signals
|
|
239
|
-
|
|
240
|
-
```typescript
|
|
241
|
-
// ❌ OLD WAY: Complex parameter structure
|
|
242
|
-
const abortController = new AbortController();
|
|
243
|
-
await agent.session.addMessage("user", "Long story please");
|
|
244
|
-
|
|
245
|
-
for await (const chunk of agent.respondStream({
|
|
246
|
-
history: agent.session.getHistory(),
|
|
247
|
-
signal: abortController.signal
|
|
248
|
-
})) {
|
|
249
|
-
// Handle chunk
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
// ✅ NEW WAY: Simple options structure
|
|
253
|
-
const abortController = new AbortController();
|
|
254
|
-
|
|
255
|
-
for await (const chunk of agent.stream("Long story please", {
|
|
256
|
-
signal: abortController.signal
|
|
257
|
-
})) {
|
|
258
|
-
// Handle chunk
|
|
259
|
-
}
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
### Context Override
|
|
263
|
-
|
|
264
|
-
```typescript
|
|
265
|
-
// ❌ OLD WAY: Complex parameter passing
|
|
266
|
-
for await (const chunk of agent.respondStream({
|
|
267
|
-
history: agent.session.getHistory(),
|
|
268
|
-
contextOverride: { userId: "123" }
|
|
269
|
-
})) {
|
|
270
|
-
// Handle chunk
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// ✅ NEW WAY: Clean options structure
|
|
274
|
-
for await (const chunk of agent.stream("Hello", {
|
|
275
|
-
contextOverride: { userId: "123" }
|
|
276
|
-
})) {
|
|
277
|
-
// Handle chunk
|
|
278
|
-
}
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
## Benefits of Migration
|
|
282
|
-
|
|
283
|
-
### 1. Simplified Code
|
|
284
|
-
|
|
285
|
-
**Before:**
|
|
286
|
-
```typescript
|
|
287
|
-
// 6 lines of manual session management
|
|
288
|
-
await agent.session.addMessage("user", userMessage);
|
|
289
|
-
let fullResponse = "";
|
|
290
|
-
for await (const chunk of agent.respondStream({ history: agent.session.getHistory() })) {
|
|
291
|
-
if (chunk.delta) fullResponse += chunk.delta;
|
|
292
|
-
if (chunk.done) await agent.session.addMessage("assistant", fullResponse);
|
|
293
|
-
}
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
**After:**
|
|
297
|
-
```typescript
|
|
298
|
-
// 3 lines with automatic session management
|
|
299
|
-
for await (const chunk of agent.stream(userMessage)) {
|
|
300
|
-
if (chunk.delta) process.stdout.write(chunk.delta);
|
|
301
|
-
}
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
### 2. Reduced Errors
|
|
305
|
-
|
|
306
|
-
Common mistakes eliminated:
|
|
307
|
-
- ❌ Forgetting to add user message to session
|
|
308
|
-
- ❌ Forgetting to add assistant response to session
|
|
309
|
-
- ❌ Incorrect history management
|
|
310
|
-
- ❌ Session state inconsistencies
|
|
311
|
-
|
|
312
|
-
### 3. Better Performance
|
|
313
|
-
|
|
314
|
-
- Unified response logic eliminates code duplication
|
|
315
|
-
- Optimized session management
|
|
316
|
-
- Reduced memory allocations
|
|
317
|
-
|
|
318
|
-
### 4. Improved Maintainability
|
|
319
|
-
|
|
320
|
-
- Centralized response logic in `ResponseModal`
|
|
321
|
-
- Better error handling with `ResponseGenerationError`
|
|
322
|
-
- Cleaner separation of concerns
|
|
323
|
-
|
|
324
|
-
## Troubleshooting
|
|
325
|
-
|
|
326
|
-
### Common Migration Issues
|
|
327
|
-
|
|
328
|
-
#### Issue: "My existing code stopped working"
|
|
329
|
-
|
|
330
|
-
**Solution:** This shouldn't happen! All existing APIs are fully backward compatible. If you're experiencing issues:
|
|
331
|
-
|
|
332
|
-
```typescript
|
|
333
|
-
// These should all still work exactly as before
|
|
334
|
-
const response = await agent.respond({ history, session });
|
|
335
|
-
const stream = agent.respondStream({ history, session });
|
|
336
|
-
const chat = await agent.chat("Hello");
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
#### Issue: "Session history is not being updated with stream()"
|
|
340
|
-
|
|
341
|
-
**Solution:** The modern `stream()` API automatically manages session history. You don't need to manually call `addMessage()`:
|
|
342
|
-
|
|
343
|
-
```typescript
|
|
344
|
-
// ❌ Don't do this with stream()
|
|
345
|
-
await agent.session.addMessage("user", "Hello");
|
|
346
|
-
for await (const chunk of agent.stream("Hello")) {
|
|
347
|
-
// This will duplicate the message!
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// ✅ Do this instead
|
|
351
|
-
for await (const chunk of agent.stream("Hello")) {
|
|
352
|
-
// Session is automatically managed
|
|
353
|
-
}
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
#### Issue: "I need custom history with stream()"
|
|
357
|
-
|
|
358
|
-
**Solution:** Use the `history` option to override session history:
|
|
359
|
-
|
|
360
|
-
```typescript
|
|
361
|
-
// Use custom history without affecting session
|
|
362
|
-
for await (const chunk of agent.stream("Hello", {
|
|
363
|
-
history: customHistory
|
|
364
|
-
})) {
|
|
365
|
-
// Uses custom history, doesn't update session
|
|
366
|
-
}
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
#### Issue: "ResponseGenerationError in my error handling"
|
|
370
|
-
|
|
371
|
-
**Solution:** Update error handling to check for the new error type:
|
|
372
|
-
|
|
373
|
-
```typescript
|
|
374
|
-
try {
|
|
375
|
-
const response = await agent.respond(params);
|
|
376
|
-
} catch (error) {
|
|
377
|
-
if (error instanceof ResponseGenerationError) {
|
|
378
|
-
console.log("Response generation failed:", error.message);
|
|
379
|
-
console.log("Phase:", error.details?.phase);
|
|
380
|
-
console.log("Original error:", error.details?.originalError);
|
|
381
|
-
} else {
|
|
382
|
-
// Handle other errors
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
### Performance Considerations
|
|
388
|
-
|
|
389
|
-
#### Memory Usage
|
|
390
|
-
|
|
391
|
-
The new architecture is more memory-efficient:
|
|
392
|
-
- Unified response logic reduces code duplication
|
|
393
|
-
- Better session state management
|
|
394
|
-
- Optimized streaming pipeline
|
|
395
|
-
|
|
396
|
-
#### Streaming Performance
|
|
397
|
-
|
|
398
|
-
Both APIs have identical streaming performance:
|
|
399
|
-
- `respondStream()` and `stream()` use the same underlying logic
|
|
400
|
-
- No performance penalty for using modern APIs
|
|
401
|
-
- Same chunk delivery timing and throughput
|
|
402
|
-
|
|
403
|
-
### Debugging Tips
|
|
404
|
-
|
|
405
|
-
#### Enable Debug Mode
|
|
406
|
-
|
|
407
|
-
```typescript
|
|
408
|
-
const agent = new Agent({
|
|
409
|
-
// ... other options
|
|
410
|
-
debug: true // Enable detailed logging
|
|
411
|
-
});
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
#### Access ResponseModal Directly (Advanced)
|
|
415
|
-
|
|
416
|
-
```typescript
|
|
417
|
-
// For advanced debugging only
|
|
418
|
-
const responseModal = (agent as any).responseModal;
|
|
419
|
-
console.log("ResponseModal instance:", responseModal);
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
#### Check Session State
|
|
423
|
-
|
|
424
|
-
```typescript
|
|
425
|
-
// Monitor session state during streaming
|
|
426
|
-
for await (const chunk of agent.stream("Hello")) {
|
|
427
|
-
if (chunk.done) {
|
|
428
|
-
console.log("Session messages:", agent.session.getHistory().length);
|
|
429
|
-
console.log("Session data:", agent.session.getData());
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
## Best Practices
|
|
435
|
-
|
|
436
|
-
### 1. Use Modern APIs for New Code
|
|
437
|
-
|
|
438
|
-
```typescript
|
|
439
|
-
// ✅ Recommended for new implementations
|
|
440
|
-
for await (const chunk of agent.stream("Hello")) {
|
|
441
|
-
// Handle chunk
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
// ❌ Avoid for new code (but still supported)
|
|
445
|
-
for await (const chunk of agent.respondStream({ history })) {
|
|
446
|
-
// More complex
|
|
447
|
-
}
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
### 2. Migrate Gradually
|
|
451
|
-
|
|
452
|
-
```typescript
|
|
453
|
-
// Phase 1: Keep existing complex code
|
|
454
|
-
const complexResponse = await agent.respondStream({
|
|
455
|
-
history: customHistory,
|
|
456
|
-
session: customSession,
|
|
457
|
-
contextOverride: complexContext
|
|
458
|
-
});
|
|
459
|
-
|
|
460
|
-
// Phase 2: Use modern APIs for simple cases
|
|
461
|
-
for await (const chunk of agent.stream("Simple question")) {
|
|
462
|
-
// Handle chunk
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
// Phase 3: Migrate complex code when convenient
|
|
466
|
-
```
|
|
467
|
-
|
|
468
|
-
### 3. Handle Errors Appropriately
|
|
469
|
-
|
|
470
|
-
```typescript
|
|
471
|
-
try {
|
|
472
|
-
for await (const chunk of agent.stream("Hello")) {
|
|
473
|
-
// Handle chunk
|
|
474
|
-
}
|
|
475
|
-
} catch (error) {
|
|
476
|
-
if (error instanceof ResponseGenerationError) {
|
|
477
|
-
// Handle response-specific errors
|
|
478
|
-
console.log("Response failed:", error.details?.phase);
|
|
479
|
-
} else if (error.name === "AbortError") {
|
|
480
|
-
// Handle cancellation
|
|
481
|
-
console.log("Stream was cancelled");
|
|
482
|
-
} else {
|
|
483
|
-
// Handle other errors
|
|
484
|
-
console.error("Unexpected error:", error);
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
```
|
|
488
|
-
|
|
489
|
-
### 4. Use AbortSignal for Long Operations
|
|
490
|
-
|
|
491
|
-
```typescript
|
|
492
|
-
const controller = new AbortController();
|
|
493
|
-
setTimeout(() => controller.abort(), 30000); // 30s timeout
|
|
494
|
-
|
|
495
|
-
for await (const chunk of agent.stream("Complex question", {
|
|
496
|
-
signal: controller.signal
|
|
497
|
-
})) {
|
|
498
|
-
// Handle chunk
|
|
499
|
-
}
|
|
500
|
-
```
|
|
501
|
-
|
|
502
|
-
## Conclusion
|
|
503
|
-
|
|
504
|
-
The ResponseModal refactor provides significant improvements in architecture, usability, and maintainability while maintaining full backward compatibility. You can:
|
|
505
|
-
|
|
506
|
-
1. **Keep existing code working** - No immediate changes required
|
|
507
|
-
2. **Adopt modern APIs gradually** - Migrate at your own pace
|
|
508
|
-
3. **Benefit from improved architecture** - Better performance and maintainability
|
|
509
|
-
4. **Use simpler APIs for new features** - `stream()` is much easier than `respondStream()`
|
|
510
|
-
|
|
511
|
-
The modern `stream()` API is the recommended approach for new streaming implementations, but your existing `respondStream()` code will continue to work exactly as before.
|
|
512
|
-
|
|
513
|
-
---
|
|
514
|
-
|
|
515
|
-
**Need Help?**
|
|
516
|
-
- Check the [examples](../../../examples/) directory for complete working examples
|
|
517
|
-
- Review the [API documentation](../../api/) for detailed method signatures
|
|
518
|
-
- Look at the [streaming examples](../../../examples/advanced-patterns/streaming-responses.ts) for side-by-side comparisons
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
# Prompt Optimization
|
|
2
|
-
|
|
3
|
-
The `PromptSectionCache` optimizes prompt generation by memoizing static sections across turns and recomputing only dynamic sections per-turn. Combined with the native history format change, this reduces redundant computation and token usage.
|
|
4
|
-
|
|
5
|
-
## Section Types
|
|
6
|
-
|
|
7
|
-
Prompt sections are classified as either static or dynamic:
|
|
8
|
-
|
|
9
|
-
| Type | Behavior | Examples |
|
|
10
|
-
|---|---|---|
|
|
11
|
-
| `static` | Cached after first computation, reused across turns | Agent identity, glossary, knowledge base, route descriptions, scoring rules |
|
|
12
|
-
| `dynamic` | Recomputed on every `resolveAll()` call | Instructions, directives, available tools, guidelines |
|
|
13
|
-
|
|
14
|
-
Static sections only change when the underlying state changes (context update, session switch, route change). Dynamic sections depend on per-turn state and are always fresh.
|
|
15
|
-
|
|
16
|
-
## Configuration
|
|
17
|
-
|
|
18
|
-
Prompt caching is enabled by default. Configure it via the `promptCache` option on the agent:
|
|
19
|
-
|
|
20
|
-
```typescript
|
|
21
|
-
import { Agent } from "@falai/agent";
|
|
22
|
-
|
|
23
|
-
const agent = new Agent({
|
|
24
|
-
name: "MyAgent",
|
|
25
|
-
provider: anthropicProvider,
|
|
26
|
-
promptCache: {
|
|
27
|
-
enabled: true, // default: true
|
|
28
|
-
volatileKeys: [], // keys that always recompute, even if registered as static
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### PromptCacheConfig
|
|
34
|
-
|
|
35
|
-
| Option | Type | Default | Description |
|
|
36
|
-
|---|---|---|---|
|
|
37
|
-
| `enabled` | `boolean` | `true` | Enable/disable section memoization |
|
|
38
|
-
| `volatileKeys` | `string[]` | `[]` | Section keys forced to recompute every turn |
|
|
39
|
-
|
|
40
|
-
Set `enabled: false` to disable caching entirely (useful for debugging):
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
const agent = new Agent({
|
|
44
|
-
name: "DebugAgent",
|
|
45
|
-
provider: anthropicProvider,
|
|
46
|
-
promptCache: { enabled: false },
|
|
47
|
-
});
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## PromptSectionCache API
|
|
51
|
-
|
|
52
|
-
### `register(key, type, compute)`
|
|
53
|
-
|
|
54
|
-
Register a section with a unique key, type (`'static'` or `'dynamic'`), and a compute function.
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
cache.register("agentMeta", "static", async () => {
|
|
58
|
-
return "## Agent Identity\nYou are MyAgent.";
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
cache.register("directives", "dynamic", () => {
|
|
62
|
-
return "## Directives\n- Address the user's question";
|
|
63
|
-
});
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### `get(key)`
|
|
67
|
-
|
|
68
|
-
Retrieve a section's value. Static sections return the cached value when available; dynamic sections always recompute.
|
|
69
|
-
|
|
70
|
-
### `resolveAll()`
|
|
71
|
-
|
|
72
|
-
Resolve all registered sections in registration order. Returns `(string | null)[]`.
|
|
73
|
-
|
|
74
|
-
### `invalidate(key)`
|
|
75
|
-
|
|
76
|
-
Force a specific section to recompute on the next `resolveAll()` call.
|
|
77
|
-
|
|
78
|
-
```typescript
|
|
79
|
-
cache.invalidate("knowledgeBase");
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### `invalidateAll()`
|
|
83
|
-
|
|
84
|
-
Force all sections to recompute. Called automatically on session change or `/clear`.
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
cache.invalidateAll();
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Automatic Cache Invalidation
|
|
91
|
-
|
|
92
|
-
The framework invalidates relevant caches automatically when state changes:
|
|
93
|
-
|
|
94
|
-
| Event | Sections Invalidated |
|
|
95
|
-
|---|---|
|
|
96
|
-
| `agent.updateContext()` | `agentMeta`, `knowledgeBase` |
|
|
97
|
-
| Session change / clear | All sections (`invalidateAll()`) |
|
|
98
|
-
| Route switch | Route-dependent sections (active routes, route rules, route knowledge base) |
|
|
99
|
-
|
|
100
|
-
No manual cache management is needed for typical usage.
|
|
101
|
-
|
|
102
|
-
## Native History Format
|
|
103
|
-
|
|
104
|
-
History is now sent as native provider messages via `GenerateMessageInput.history` instead of being JSON-serialized into the system prompt. This saves tokens (no JSON overhead) and lets providers optimize for their native message format.
|
|
105
|
-
|
|
106
|
-
### Migration from `addInteractionHistory()`
|
|
107
|
-
|
|
108
|
-
The `PromptComposer.addInteractionHistory()` method is deprecated. If you were calling it directly:
|
|
109
|
-
|
|
110
|
-
**Before:**
|
|
111
|
-
```typescript
|
|
112
|
-
const pc = new PromptComposer(context);
|
|
113
|
-
await pc.addAgentMeta(agentOptions);
|
|
114
|
-
await pc.addInteractionHistory(history); // embedded in prompt string
|
|
115
|
-
await pc.addLastMessage(lastMessage);
|
|
116
|
-
const prompt = await pc.build();
|
|
117
|
-
|
|
118
|
-
const response = await provider.generateMessage({ prompt, history: [] });
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
**After:**
|
|
122
|
-
```typescript
|
|
123
|
-
const pc = new PromptComposer(context, cache);
|
|
124
|
-
await pc.addAgentMeta(agentOptions);
|
|
125
|
-
// No addInteractionHistory() — history flows natively
|
|
126
|
-
const prompt = await pc.build();
|
|
127
|
-
|
|
128
|
-
const response = await provider.generateMessage({ prompt, history });
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
The `addInteractionHistory()` method still works for backward compatibility but is marked `@deprecated` and will be removed in a future version.
|
|
132
|
-
|
|
133
|
-
## Manual Cache Usage
|
|
134
|
-
|
|
135
|
-
You can use `PromptSectionCache` directly for custom prompt pipelines:
|
|
136
|
-
|
|
137
|
-
```typescript
|
|
138
|
-
import { PromptSectionCache } from "@falai/agent";
|
|
139
|
-
|
|
140
|
-
const cache = new PromptSectionCache({ enabled: true });
|
|
141
|
-
|
|
142
|
-
cache.register("identity", "static", () => "You are a helpful assistant.");
|
|
143
|
-
cache.register("tools", "dynamic", () => "Available: search, calculate");
|
|
144
|
-
|
|
145
|
-
// First call: both sections computed
|
|
146
|
-
const sections1 = await cache.resolveAll(); // ["You are a helpful assistant.", "Available: search, calculate"]
|
|
147
|
-
|
|
148
|
-
// Second call: identity served from cache, tools recomputed
|
|
149
|
-
const sections2 = await cache.resolveAll();
|
|
150
|
-
|
|
151
|
-
// Invalidate a specific section
|
|
152
|
-
cache.invalidate("identity");
|
|
153
|
-
|
|
154
|
-
// Next call: identity recomputed, tools recomputed (always)
|
|
155
|
-
const sections3 = await cache.resolveAll();
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
## Key Properties
|
|
159
|
-
|
|
160
|
-
- **Static sections cache** — computed once per session, reused across turns until invalidated
|
|
161
|
-
- **Dynamic sections recompute** — always fresh on every `resolveAll()` call
|
|
162
|
-
- **Automatic invalidation** — context updates, session changes, and route switches trigger targeted invalidation
|
|
163
|
-
- **Configurable** — disable caching or mark specific keys as volatile
|
|
164
|
-
- **Backward compatible** — `addInteractionHistory()` still works, just deprecated
|