@falai/agent 0.9.2 → 1.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 +281 -42
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryAdapter.js.map +1 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.d.ts +16 -1
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +63 -2
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/BatchExecutor.d.ts +353 -0
- package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
- package/dist/cjs/core/BatchExecutor.js +850 -0
- package/dist/cjs/core/BatchExecutor.js.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.js +217 -0
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
- package/dist/cjs/core/PromptComposer.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +211 -0
- package/dist/cjs/core/ResponseEngine.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseModal.d.ts +45 -0
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +752 -74
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +2 -2
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +34 -5
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Route.js +196 -19
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +330 -80
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/{src → cjs}/core/Step.d.ts +31 -10
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Step.js +105 -10
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +4 -1
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +12 -1
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/{src/types → types}/agent.d.ts +15 -3
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/{src → cjs}/types/ai.js.map +1 -1
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/{src/types → types}/index.d.ts +2 -1
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +6 -1
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/cjs/{src/types → types}/route.d.ts +111 -12
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/{src/types → types}/route.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -0
- package/dist/cjs/types/template.d.ts +88 -0
- package/dist/cjs/types/template.d.ts.map +1 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/condition.d.ts +38 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -0
- package/dist/cjs/utils/condition.js +168 -0
- package/dist/cjs/utils/condition.js.map +1 -0
- package/dist/cjs/utils/event.js.map +1 -0
- package/dist/cjs/utils/history.js.map +1 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/json.d.ts +16 -0
- package/dist/cjs/utils/json.d.ts.map +1 -0
- package/dist/cjs/utils/json.js +47 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{src → cjs}/utils/retry.d.ts +0 -3
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/retry.js +8 -7
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/session.js.map +1 -0
- package/dist/{src → cjs}/utils/template.d.ts +48 -0
- package/dist/cjs/utils/template.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/template.js +100 -0
- package/dist/cjs/utils/template.js.map +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/{src/core → core}/Agent.d.ts +16 -1
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +64 -3
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/BatchExecutor.d.ts +353 -0
- package/dist/core/BatchExecutor.d.ts.map +1 -0
- package/dist/core/BatchExecutor.js +845 -0
- package/dist/core/BatchExecutor.js.map +1 -0
- package/dist/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/core/BatchPromptBuilder.js +213 -0
- package/dist/core/BatchPromptBuilder.js.map +1 -0
- package/dist/core/Events.d.ts.map +1 -0
- package/dist/core/Events.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -0
- package/dist/{src/core → core}/PromptComposer.js +45 -8
- package/dist/core/PromptComposer.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -0
- package/dist/core/ResponseEngine.js +207 -0
- package/dist/core/ResponseEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponseModal.d.ts +45 -0
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +752 -74
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +2 -2
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +34 -5
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/{src/core → core}/Route.js +195 -18
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +310 -60
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/Step.d.ts +31 -10
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/{src/core → core}/Step.js +104 -9
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +4 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +3 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/types → types}/agent.d.ts +15 -3
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js.map +1 -0
- package/dist/{src/types → types}/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/{src/types → types}/route.d.ts +111 -12
- package/dist/types/route.d.ts.map +1 -0
- package/dist/{src/types → types}/route.js.map +1 -1
- package/dist/types/routing.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/routing.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/schema.js.map +1 -1
- package/dist/types/session.d.ts.map +1 -0
- package/dist/{src/types → types}/session.js.map +1 -1
- package/dist/types/template.d.ts +88 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/template.js.map +1 -1
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/clone.d.ts.map +1 -0
- package/dist/utils/clone.js.map +1 -0
- package/dist/utils/condition.d.ts +38 -0
- package/dist/utils/condition.d.ts.map +1 -0
- package/dist/utils/condition.js +161 -0
- package/dist/utils/condition.js.map +1 -0
- package/dist/utils/event.d.ts.map +1 -0
- package/dist/utils/event.js.map +1 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/{src/utils → utils}/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{src/utils → utils}/index.js +5 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +16 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{src/utils → utils}/retry.js +5 -4
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/{src/utils → utils}/template.js +98 -0
- package/dist/utils/template.js.map +1 -0
- package/docs/README.md +1 -0
- package/docs/api/README.md +237 -12
- package/docs/api/overview.md +206 -3
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/architecture/multi-step-execution.md +243 -0
- package/docs/core/agent/README.md +156 -5
- package/docs/core/agent/rules-and-prohibitions.md +113 -0
- package/docs/core/agent/session-management.md +1 -1
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +146 -0
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +2 -2
- package/docs/core/conversation-flows/step-transitions.md +132 -0
- package/docs/core/conversation-flows/steps.md +112 -0
- package/docs/core/error-handling.md +193 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/guides/getting-started/README.md +284 -3
- package/docs/guides/migration/README.md +27 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +373 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
- package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
- package/examples/advanced-patterns/streaming-responses.ts +2 -2
- package/examples/ai-providers/anthropic-integration.ts +4 -4
- package/examples/ai-providers/openai-integration.ts +1 -1
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +48 -7
- package/examples/core-concepts/basic-agent.ts +54 -33
- package/examples/core-concepts/schema-driven-extraction.ts +33 -9
- package/examples/core-concepts/session-management.ts +51 -16
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +10 -10
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +8 -8
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +3 -3
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/data-enrichment-tools.ts +4 -4
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +78 -2
- package/src/core/BatchExecutor.ts +1166 -0
- package/src/core/BatchPromptBuilder.ts +293 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +168 -29
- package/src/core/ResponseModal.ts +954 -74
- package/src/core/ResponsePipeline.ts +17 -9
- package/src/core/Route.ts +223 -22
- package/src/core/RoutingEngine.ts +426 -83
- package/src/core/Step.ts +144 -16
- package/src/index.ts +19 -0
- package/src/providers/AnthropicProvider.ts +17 -17
- package/src/providers/GeminiProvider.ts +129 -60
- package/src/providers/OpenAIProvider.ts +18 -18
- package/src/providers/OpenRouterProvider.ts +18 -18
- package/src/types/agent.ts +15 -3
- package/src/types/index.ts +12 -1
- package/src/types/route.ts +131 -12
- package/src/types/template.ts +70 -2
- package/src/utils/condition.ts +190 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/retry.ts +5 -4
- package/src/utils/template.ts +109 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/index.d.ts.map +0 -1
- package/dist/cjs/src/adapters/index.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/core/Agent.d.ts.map +0 -1
- package/dist/cjs/src/core/Agent.js.map +0 -1
- package/dist/cjs/src/core/Events.d.ts.map +0 -1
- package/dist/cjs/src/core/Events.js.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/src/core/PromptComposer.js.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.js +0 -84
- package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseModal.js.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/src/core/Route.d.ts.map +0 -1
- package/dist/cjs/src/core/Route.js.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/src/core/SessionManager.js.map +0 -1
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolManager.js.map +0 -1
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/src/providers/index.d.ts.map +0 -1
- package/dist/cjs/src/providers/index.js.map +0 -1
- package/dist/cjs/src/types/agent.d.ts.map +0 -1
- package/dist/cjs/src/types/agent.js.map +0 -1
- package/dist/cjs/src/types/ai.d.ts.map +0 -1
- package/dist/cjs/src/types/ai.js.map +0 -1
- package/dist/cjs/src/types/history.d.ts.map +0 -1
- package/dist/cjs/src/types/history.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +0 -1
- package/dist/cjs/src/types/persistence.js.map +0 -1
- package/dist/cjs/src/types/route.d.ts.map +0 -1
- package/dist/cjs/src/types/routing.d.ts.map +0 -1
- package/dist/cjs/src/types/schema.d.ts.map +0 -1
- package/dist/cjs/src/types/session.d.ts.map +0 -1
- package/dist/cjs/src/types/session.js.map +0 -1
- package/dist/cjs/src/types/template.d.ts +0 -30
- package/dist/cjs/src/types/template.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js.map +0 -1
- package/dist/cjs/src/utils/clone.d.ts.map +0 -1
- package/dist/cjs/src/utils/clone.js.map +0 -1
- package/dist/cjs/src/utils/event.d.ts.map +0 -1
- package/dist/cjs/src/utils/event.js.map +0 -1
- package/dist/cjs/src/utils/history.d.ts.map +0 -1
- package/dist/cjs/src/utils/history.js.map +0 -1
- package/dist/cjs/src/utils/id.d.ts.map +0 -1
- package/dist/cjs/src/utils/id.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/logger.d.ts.map +0 -1
- package/dist/cjs/src/utils/logger.js.map +0 -1
- package/dist/cjs/src/utils/retry.d.ts.map +0 -1
- package/dist/cjs/src/utils/retry.js.map +0 -1
- package/dist/cjs/src/utils/session.d.ts.map +0 -1
- package/dist/cjs/src/utils/session.js.map +0 -1
- package/dist/cjs/src/utils/template.d.ts.map +0 -1
- package/dist/cjs/src/utils/template.js.map +0 -1
- package/dist/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/core/Agent.d.ts.map +0 -1
- package/dist/src/core/Agent.js.map +0 -1
- package/dist/src/core/Events.js.map +0 -1
- package/dist/src/core/PersistenceManager.js.map +0 -1
- package/dist/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/src/core/PromptComposer.js.map +0 -1
- package/dist/src/core/ResponseEngine.js +0 -80
- package/dist/src/core/ResponseEngine.js.map +0 -1
- package/dist/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/src/core/ResponseModal.js.map +0 -1
- package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/src/core/ResponsePipeline.js.map +0 -1
- package/dist/src/core/Route.d.ts.map +0 -1
- package/dist/src/core/Route.js.map +0 -1
- package/dist/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/src/core/RoutingEngine.js.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolManager.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/GeminiProvider.js.map +0 -1
- package/dist/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/types/agent.d.ts.map +0 -1
- package/dist/src/types/agent.js.map +0 -1
- package/dist/src/types/history.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/persistence.js.map +0 -1
- package/dist/src/types/route.d.ts.map +0 -1
- package/dist/src/types/template.d.ts +0 -30
- package/dist/src/types/template.d.ts.map +0 -1
- package/dist/src/types/tool.js.map +0 -1
- package/dist/src/utils/clone.js.map +0 -1
- package/dist/src/utils/event.js.map +0 -1
- package/dist/src/utils/history.js.map +0 -1
- package/dist/src/utils/id.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/session.js.map +0 -1
- package/dist/src/utils/template.d.ts.map +0 -1
- package/dist/src/utils/template.js.map +0 -1
- /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
- /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
- /package/dist/cjs/{src/constants → constants}/index.js +0 -0
- /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/Events.js +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
- /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.js +0 -0
- /package/dist/cjs/{src/types → types}/agent.js +0 -0
- /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/ai.js +0 -0
- /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/history.js +0 -0
- /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/persistence.js +0 -0
- /package/dist/cjs/{src/types → types}/route.js +0 -0
- /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/routing.js +0 -0
- /package/dist/{src → cjs}/types/routing.js.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.js +0 -0
- /package/dist/{src → cjs}/types/schema.js.map +0 -0
- /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/session.js +0 -0
- /package/dist/cjs/{src/types → types}/template.js +0 -0
- /package/dist/{src → cjs}/types/template.js.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.js +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
- /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/event.js +0 -0
- /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/history.js +0 -0
- /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/id.js +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
- /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/session.js +0 -0
- /package/dist/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src/constants → constants}/index.js +0 -0
- /package/dist/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src/core → core}/Events.js +0 -0
- /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.js +0 -0
- /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src/core → core}/ToolManager.js +0 -0
- /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.js +0 -0
- /package/dist/{src/types → types}/agent.js +0 -0
- /package/dist/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src/types → types}/ai.js +0 -0
- /package/dist/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src/types → types}/history.js +0 -0
- /package/dist/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src/types → types}/persistence.js +0 -0
- /package/dist/{src/types → types}/route.js +0 -0
- /package/dist/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src/types → types}/routing.js +0 -0
- /package/dist/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src/types → types}/schema.js +0 -0
- /package/dist/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src/types → types}/session.js +0 -0
- /package/dist/{src/types → types}/template.js +0 -0
- /package/dist/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src/types → types}/tool.js +0 -0
- /package/dist/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src/utils → utils}/clone.js +0 -0
- /package/dist/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src/utils → utils}/event.js +0 -0
- /package/dist/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src/utils → utils}/history.js +0 -0
- /package/dist/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src/utils → utils}/id.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src/utils → utils}/session.js +0 -0
|
@@ -218,3 +218,138 @@ Prompts are optimized for token efficiency:
|
|
|
218
218
|
- Leverage route-specific overrides for specialized behavior
|
|
219
219
|
- Monitor token usage and optimize prompt length
|
|
220
220
|
- Test prompts with different AI providers for consistency
|
|
221
|
+
|
|
222
|
+
## BatchPromptBuilder for Multi-Step Execution
|
|
223
|
+
|
|
224
|
+
When multiple steps execute in a single batch, the `BatchPromptBuilder` combines their prompts into a single coherent prompt.
|
|
225
|
+
|
|
226
|
+
### Combined Prompt Structure
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
[Agent Identity & Personality]
|
|
230
|
+
[Route Context]
|
|
231
|
+
|
|
232
|
+
## Current Conversation Flow
|
|
233
|
+
|
|
234
|
+
You are handling multiple aspects of this conversation in a single response.
|
|
235
|
+
|
|
236
|
+
### Step 1: [Step Description]
|
|
237
|
+
[Step Prompt]
|
|
238
|
+
|
|
239
|
+
### Step 2: [Step Description]
|
|
240
|
+
[Step Prompt]
|
|
241
|
+
|
|
242
|
+
[... additional steps ...]
|
|
243
|
+
|
|
244
|
+
## Data Collection
|
|
245
|
+
|
|
246
|
+
Extract the following information from your response:
|
|
247
|
+
- field1 (type): description
|
|
248
|
+
- field2 (type): description
|
|
249
|
+
|
|
250
|
+
## Response Format
|
|
251
|
+
|
|
252
|
+
Return JSON with:
|
|
253
|
+
- message: Your response to the user
|
|
254
|
+
- [collected fields as top-level properties]
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### How Prompts Are Merged
|
|
258
|
+
|
|
259
|
+
The `BatchPromptBuilder` preserves each step's intent while creating a unified prompt:
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
// Individual step prompts
|
|
263
|
+
const step1 = { prompt: "What's your name?", collect: ["name"] };
|
|
264
|
+
const step2 = { prompt: "What's your email?", collect: ["email"] };
|
|
265
|
+
const step3 = { prompt: "How can I help?", collect: ["request"] };
|
|
266
|
+
|
|
267
|
+
// Combined prompt includes all three
|
|
268
|
+
const result = await batchPromptBuilder.buildBatchPrompt({
|
|
269
|
+
steps: [step1, step2, step3],
|
|
270
|
+
route,
|
|
271
|
+
history,
|
|
272
|
+
context,
|
|
273
|
+
session,
|
|
274
|
+
agentOptions,
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
// result.prompt contains unified prompt
|
|
278
|
+
// result.collectFields = ["name", "email", "request"]
|
|
279
|
+
// result.stepCount = 3
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Collect Fields Aggregation
|
|
283
|
+
|
|
284
|
+
All `collect` fields from all steps are combined and deduplicated:
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
// Steps with overlapping collect fields
|
|
288
|
+
const steps = [
|
|
289
|
+
{ collect: ["name", "email"] },
|
|
290
|
+
{ collect: ["email", "phone"] }, // email appears twice
|
|
291
|
+
{ collect: ["preferences"] }
|
|
292
|
+
];
|
|
293
|
+
|
|
294
|
+
// Combined collect fields (deduplicated)
|
|
295
|
+
// ["name", "email", "phone", "preferences"]
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Schema-Aware Field Descriptions
|
|
299
|
+
|
|
300
|
+
When the agent has a schema, field descriptions are included in the prompt:
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
// Agent schema
|
|
304
|
+
const schema = {
|
|
305
|
+
properties: {
|
|
306
|
+
email: { type: "string", format: "email", description: "User's email address" },
|
|
307
|
+
guests: { type: "number", minimum: 1, description: "Number of guests" }
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
// Generated data collection section:
|
|
312
|
+
// ## Data Collection
|
|
313
|
+
// Extract the following information from your response:
|
|
314
|
+
// - email (string): User's email address
|
|
315
|
+
// - guests (number): Number of guests
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Single vs Multi-Step Prompts
|
|
319
|
+
|
|
320
|
+
The prompt structure adapts based on batch size:
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
// Single step batch
|
|
324
|
+
// ## Current Step
|
|
325
|
+
// [Step prompt]
|
|
326
|
+
|
|
327
|
+
// Multi-step batch
|
|
328
|
+
// ## Current Conversation Flow
|
|
329
|
+
// You are handling multiple aspects of this conversation in a single response.
|
|
330
|
+
// ### Step 1: ...
|
|
331
|
+
// ### Step 2: ...
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Using BatchPromptBuilder
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
import { BatchPromptBuilder } from "@falai/agent";
|
|
338
|
+
|
|
339
|
+
const builder = new BatchPromptBuilder<MyContext, MyData>();
|
|
340
|
+
|
|
341
|
+
const result = await builder.buildBatchPrompt({
|
|
342
|
+
steps: batchResult.steps,
|
|
343
|
+
route: currentRoute,
|
|
344
|
+
history: conversationHistory,
|
|
345
|
+
context: agentContext,
|
|
346
|
+
session: currentSession,
|
|
347
|
+
agentOptions: agent.getAgentOptions(),
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
// Use result.prompt for LLM call
|
|
351
|
+
const llmResponse = await provider.generateMessage({
|
|
352
|
+
prompt: result.prompt,
|
|
353
|
+
// ...
|
|
354
|
+
});
|
|
355
|
+
```
|
|
@@ -277,6 +277,150 @@ Built-in monitoring capabilities:
|
|
|
277
277
|
- **Debug logging** - Detailed processing traces
|
|
278
278
|
- **Performance profiling** - Identify bottlenecks
|
|
279
279
|
|
|
280
|
+
## Batch Execution Response Fields
|
|
281
|
+
|
|
282
|
+
When using multi-step execution, the `AgentResponse` includes additional fields for batch execution information.
|
|
283
|
+
|
|
284
|
+
### New AgentResponse Fields
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
interface AgentResponse<TData = unknown> {
|
|
288
|
+
/** The generated message */
|
|
289
|
+
message: string;
|
|
290
|
+
/** Updated session state */
|
|
291
|
+
session?: SessionState<TData>;
|
|
292
|
+
/** Tool calls made during response */
|
|
293
|
+
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
294
|
+
/** Whether the route is complete */
|
|
295
|
+
isRouteComplete?: boolean;
|
|
296
|
+
|
|
297
|
+
// Multi-step execution fields
|
|
298
|
+
/** Steps executed in this response */
|
|
299
|
+
executedSteps?: StepRef[];
|
|
300
|
+
/** Why execution stopped */
|
|
301
|
+
stoppedReason?: StoppedReason;
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### executedSteps Array
|
|
306
|
+
|
|
307
|
+
Lists all steps that were executed in the batch:
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
const response = await agent.respond("Book Grand Hotel for 2 on Friday");
|
|
311
|
+
|
|
312
|
+
console.log(response.executedSteps);
|
|
313
|
+
// [
|
|
314
|
+
// { id: "ask-hotel", routeId: "booking" },
|
|
315
|
+
// { id: "ask-guests", routeId: "booking" },
|
|
316
|
+
// { id: "ask-date", routeId: "booking" }
|
|
317
|
+
// ]
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Each `StepRef` contains:
|
|
321
|
+
- `id` - The step identifier
|
|
322
|
+
- `routeId` - The route this step belongs to
|
|
323
|
+
|
|
324
|
+
### stoppedReason Field
|
|
325
|
+
|
|
326
|
+
Indicates why batch execution stopped:
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
type StoppedReason =
|
|
330
|
+
| 'needs_input' // Step requires uncollected data
|
|
331
|
+
| 'end_route' // Reached END_ROUTE
|
|
332
|
+
| 'route_complete' // All Steps processed
|
|
333
|
+
| 'prepare_error' // Error in prepare hook
|
|
334
|
+
| 'llm_error' // Error during LLM call
|
|
335
|
+
| 'validation_error' // Error validating collected data
|
|
336
|
+
| 'finalize_error'; // Error in finalize hook (non-fatal)
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### BatchExecutionResult Structure
|
|
340
|
+
|
|
341
|
+
The internal batch execution result provides detailed information:
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
interface BatchExecutionResult<TData = unknown> {
|
|
345
|
+
/** The generated message */
|
|
346
|
+
message: string;
|
|
347
|
+
/** Updated session state */
|
|
348
|
+
session: SessionState<TData>;
|
|
349
|
+
/** Steps that were executed */
|
|
350
|
+
executedSteps: StepRef[];
|
|
351
|
+
/** Why execution stopped */
|
|
352
|
+
stoppedReason: StoppedReason;
|
|
353
|
+
/** Collected data from the batch */
|
|
354
|
+
collectedData?: Partial<TData>;
|
|
355
|
+
/** Any errors that occurred */
|
|
356
|
+
error?: BatchExecutionError;
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Error Information
|
|
361
|
+
|
|
362
|
+
When errors occur, detailed information is available:
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
interface BatchExecutionError {
|
|
366
|
+
/** Type of error that occurred */
|
|
367
|
+
type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
|
|
368
|
+
'llm_call' | 'data_validation' | 'finalize_hook';
|
|
369
|
+
/** Error message */
|
|
370
|
+
message: string;
|
|
371
|
+
/** Step where error occurred (if applicable) */
|
|
372
|
+
stepId?: string;
|
|
373
|
+
/** Additional error details */
|
|
374
|
+
details?: unknown;
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Using Response Fields
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
const response = await agent.respond("Complete my booking");
|
|
382
|
+
|
|
383
|
+
// Check what was executed
|
|
384
|
+
console.log(`Executed ${response.executedSteps?.length || 0} steps`);
|
|
385
|
+
|
|
386
|
+
// Check why execution stopped
|
|
387
|
+
switch (response.stoppedReason) {
|
|
388
|
+
case 'needs_input':
|
|
389
|
+
console.log("Waiting for more information from user");
|
|
390
|
+
break;
|
|
391
|
+
case 'route_complete':
|
|
392
|
+
case 'end_route':
|
|
393
|
+
console.log("Route finished successfully");
|
|
394
|
+
break;
|
|
395
|
+
case 'validation_error':
|
|
396
|
+
console.log("Data validation issues:", response.error);
|
|
397
|
+
break;
|
|
398
|
+
default:
|
|
399
|
+
console.log("Stopped due to:", response.stoppedReason);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Check route completion
|
|
403
|
+
if (response.isRouteComplete) {
|
|
404
|
+
console.log("All required data collected");
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Session State After Batch
|
|
409
|
+
|
|
410
|
+
The session state reflects the final step position:
|
|
411
|
+
|
|
412
|
+
```typescript
|
|
413
|
+
const response = await agent.respond("Book for 2 guests");
|
|
414
|
+
|
|
415
|
+
// Session shows current position
|
|
416
|
+
console.log(response.session?.currentStep);
|
|
417
|
+
// { id: "ask-date", routeId: "booking" }
|
|
418
|
+
|
|
419
|
+
// Session data includes all collected values
|
|
420
|
+
console.log(response.session?.data);
|
|
421
|
+
// { hotel: "Grand Hotel", guests: 2 }
|
|
422
|
+
```
|
|
423
|
+
|
|
280
424
|
## Best Practices
|
|
281
425
|
|
|
282
426
|
- Design schemas for reliable AI extraction
|
|
@@ -285,3 +429,5 @@ Built-in monitoring capabilities:
|
|
|
285
429
|
- Use streaming for better user experience
|
|
286
430
|
- Leverage tool results for context enrichment
|
|
287
431
|
- Validate data at multiple levels (schema + business rules)
|
|
432
|
+
- Check `executedSteps` to understand batch behavior
|
|
433
|
+
- Handle different `stoppedReason` values appropriately
|
|
@@ -13,6 +13,149 @@ The agent-level data collection system provides:
|
|
|
13
13
|
- **Natural Conversations**: AI handles information gathering conversationally
|
|
14
14
|
- **Validation & Enrichment**: Agent-level lifecycle hooks for data processing
|
|
15
15
|
- **Session Persistence**: Data survives across conversation turns and route transitions
|
|
16
|
+
- **Batch Data Collection**: Multiple steps can collect data in a single LLM call
|
|
17
|
+
|
|
18
|
+
## Data Collection Across Batched Steps
|
|
19
|
+
|
|
20
|
+
When multiple steps execute in a single batch, data collection works across all steps simultaneously.
|
|
21
|
+
|
|
22
|
+
### How Batch Data Collection Works
|
|
23
|
+
|
|
24
|
+
1. **Gather collect fields** - All `collect` fields from all steps in the batch are combined
|
|
25
|
+
2. **Single LLM call** - The combined prompt instructs the LLM to extract all fields
|
|
26
|
+
3. **Extract from response** - All specified fields are extracted from the LLM response
|
|
27
|
+
4. **Validate against schema** - Collected data is validated against the agent schema
|
|
28
|
+
5. **Update session** - All collected values are merged into session data
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// Batch with 3 steps, each collecting different fields
|
|
32
|
+
const batch = [
|
|
33
|
+
{ collect: ["name"] },
|
|
34
|
+
{ collect: ["email", "phone"] },
|
|
35
|
+
{ collect: ["preferences"] }
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
// Combined collection: ["name", "email", "phone", "preferences"]
|
|
39
|
+
// Single LLM response extracts all fields at once
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Pre-Extraction and Batch Determination
|
|
43
|
+
|
|
44
|
+
Pre-extraction happens **before** batch determination and directly impacts which steps can be batched:
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// User message: "I'm John, email john@example.com, I prefer dark mode"
|
|
48
|
+
|
|
49
|
+
// Phase 1: Pre-extraction
|
|
50
|
+
const preExtracted = {
|
|
51
|
+
name: "John",
|
|
52
|
+
email: "john@example.com",
|
|
53
|
+
preferences: { theme: "dark" }
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Phase 2: Batch determination (with pre-extracted data merged)
|
|
57
|
+
// Step 1: collect: ["name"] → name exists → doesn't need input
|
|
58
|
+
// Step 2: collect: ["email"] → email exists → doesn't need input
|
|
59
|
+
// Step 3: collect: ["preferences"] → preferences exists → doesn't need input
|
|
60
|
+
// Result: All 3 steps batched together
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Pre-Extraction Configuration
|
|
64
|
+
|
|
65
|
+
Pre-extraction is automatic when routes define data fields:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
// Option 1: Route-level required fields
|
|
69
|
+
agent.createRoute({
|
|
70
|
+
title: "Booking",
|
|
71
|
+
requiredFields: ["hotel", "date", "guests"],
|
|
72
|
+
// Pre-extraction enabled automatically
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Option 2: Route-level optional fields
|
|
76
|
+
agent.createRoute({
|
|
77
|
+
title: "Booking",
|
|
78
|
+
optionalFields: ["specialRequests"],
|
|
79
|
+
// Pre-extraction enabled automatically
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Option 3: Steps with collect arrays
|
|
83
|
+
agent.createRoute({
|
|
84
|
+
title: "Booking",
|
|
85
|
+
steps: [
|
|
86
|
+
{ collect: ["hotel"] }, // Pre-extraction enabled automatically
|
|
87
|
+
]
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Batch Collection Example
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
const response = await agent.respond(
|
|
95
|
+
"I'm Alice, alice@example.com, and I want to book for 2 guests"
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
// Response includes all collected data
|
|
99
|
+
console.log(response.session.data);
|
|
100
|
+
// {
|
|
101
|
+
// name: "Alice",
|
|
102
|
+
// email: "alice@example.com",
|
|
103
|
+
// guests: 2
|
|
104
|
+
// }
|
|
105
|
+
|
|
106
|
+
// Shows which steps executed
|
|
107
|
+
console.log(response.executedSteps);
|
|
108
|
+
// [
|
|
109
|
+
// { id: "ask-name", routeId: "booking" },
|
|
110
|
+
// { id: "ask-email", routeId: "booking" },
|
|
111
|
+
// { id: "ask-guests", routeId: "booking" }
|
|
112
|
+
// ]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Validation Across Batch
|
|
116
|
+
|
|
117
|
+
Data validation happens after collection for all fields:
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// Agent schema defines validation rules
|
|
121
|
+
const agent = new Agent({
|
|
122
|
+
schema: {
|
|
123
|
+
type: "object",
|
|
124
|
+
properties: {
|
|
125
|
+
email: { type: "string", format: "email" },
|
|
126
|
+
guests: { type: "number", minimum: 1, maximum: 10 }
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// If validation fails for any field:
|
|
132
|
+
const response = await agent.respond("Book for 100 guests");
|
|
133
|
+
|
|
134
|
+
// Response includes validation errors
|
|
135
|
+
if (response.stoppedReason === 'validation_error') {
|
|
136
|
+
console.log(response.error);
|
|
137
|
+
// {
|
|
138
|
+
// type: 'data_validation',
|
|
139
|
+
// message: 'Validation failed for 1 field(s): guests',
|
|
140
|
+
// details: [{ field: 'guests', message: 'Value exceeds maximum of 10' }]
|
|
141
|
+
// }
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Partial Data Preservation
|
|
146
|
+
|
|
147
|
+
Even when validation fails, valid partial data is preserved:
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// User provides valid name but invalid email
|
|
151
|
+
const response = await agent.respond("I'm John, email: not-an-email");
|
|
152
|
+
|
|
153
|
+
// Valid data is still collected
|
|
154
|
+
console.log(response.session.data.name); // "John"
|
|
155
|
+
|
|
156
|
+
// Invalid data triggers validation error
|
|
157
|
+
console.log(response.stoppedReason); // "validation_error"
|
|
158
|
+
```
|
|
16
159
|
|
|
17
160
|
## Agent-Level Schema Definition
|
|
18
161
|
|
|
@@ -44,7 +44,7 @@ const agent = new Agent<{}, HotelData>({
|
|
|
44
44
|
const bookingRoute = agent.createRoute({
|
|
45
45
|
title: "Hotel Booking",
|
|
46
46
|
description: "Help users book hotel accommodations",
|
|
47
|
-
|
|
47
|
+
when: ["User wants to book a hotel"],
|
|
48
48
|
requiredFields: ["destination", "checkIn", "checkOut", "guests", "customerName", "email"],
|
|
49
49
|
optionalFields: ["roomType", "phone", "specialRequests"]
|
|
50
50
|
});
|
|
@@ -52,7 +52,7 @@ const bookingRoute = agent.createRoute({
|
|
|
52
52
|
const customerServiceRoute = agent.createRoute({
|
|
53
53
|
title: "Customer Service",
|
|
54
54
|
description: "Help with booking issues",
|
|
55
|
-
|
|
55
|
+
when: ["User needs help with existing booking"],
|
|
56
56
|
requiredFields: ["customerName", "email"], // Minimal requirements
|
|
57
57
|
optionalFields: ["phone", "destination"]
|
|
58
58
|
});
|
|
@@ -12,6 +12,138 @@ Step transitions handle:
|
|
|
12
12
|
- **Route Completion**: Detect when routes reach their end
|
|
13
13
|
- **Loop Prevention**: Avoid infinite traversal in complex flows
|
|
14
14
|
|
|
15
|
+
## Stopping Conditions in Batch Execution
|
|
16
|
+
|
|
17
|
+
When executing multiple steps in a batch, the engine stops for specific reasons indicated by the `stoppedReason` field in the response.
|
|
18
|
+
|
|
19
|
+
### StoppedReason Values
|
|
20
|
+
|
|
21
|
+
| Reason | Description | Behavior |
|
|
22
|
+
|--------|-------------|----------|
|
|
23
|
+
| `needs_input` | Step requires data not yet available | Batch stops, LLM generates response to collect data |
|
|
24
|
+
| `end_route` | Reached END_ROUTE marker | Route is complete, no more steps to execute |
|
|
25
|
+
| `route_complete` | All steps in route processed | Route finished successfully |
|
|
26
|
+
| `prepare_error` | Error in prepare hook | Batch stops, error returned with last successful state |
|
|
27
|
+
| `llm_error` | Error during LLM call | Batch stops, session state preserved |
|
|
28
|
+
| `validation_error` | Data validation failed | Batch continues, errors included in response |
|
|
29
|
+
| `finalize_error` | Error in finalize hook | Non-fatal, logged and execution continues |
|
|
30
|
+
|
|
31
|
+
### Needs-Input Stopping
|
|
32
|
+
|
|
33
|
+
The most common stopping condition. A step needs input when:
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// Step needs input if requires fields are missing
|
|
37
|
+
const step1 = {
|
|
38
|
+
prompt: "Confirm your booking",
|
|
39
|
+
requires: ["hotel", "date"], // Both must be present
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// Step needs input if collecting and no collect fields have data
|
|
43
|
+
const step2 = {
|
|
44
|
+
prompt: "What's your preference?",
|
|
45
|
+
collect: ["preference", "notes"], // Needs input if BOTH are missing
|
|
46
|
+
};
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### End-Route Stopping
|
|
50
|
+
|
|
51
|
+
Batch stops when reaching the END_ROUTE marker:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
const finalStep = confirmStep.nextStep({
|
|
55
|
+
prompt: "Booking confirmed! Anything else?",
|
|
56
|
+
}).endRoute(); // Creates END_ROUTE transition
|
|
57
|
+
|
|
58
|
+
// Response will have:
|
|
59
|
+
// stoppedReason: "end_route"
|
|
60
|
+
// isRouteComplete: true
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Route-Complete Stopping
|
|
64
|
+
|
|
65
|
+
When all steps have been processed without hitting END_ROUTE:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
// If the last step has no transitions and doesn't need input
|
|
69
|
+
const response = await agent.respond("Complete my booking");
|
|
70
|
+
|
|
71
|
+
// Response will have:
|
|
72
|
+
// stoppedReason: "route_complete"
|
|
73
|
+
// isRouteComplete: true
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Transitions Within Batched Execution
|
|
77
|
+
|
|
78
|
+
During batch execution, transitions work as follows:
|
|
79
|
+
|
|
80
|
+
1. **Linear transitions** - Steps connected via `nextStep()` are evaluated sequentially
|
|
81
|
+
2. **SkipIf evaluation** - Each step's `skipIf` is checked before inclusion
|
|
82
|
+
3. **Needs-input check** - If a step needs input, batch stops there
|
|
83
|
+
4. **END_ROUTE detection** - Batch stops when reaching route end
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// Example: Steps A → B → C → END_ROUTE
|
|
87
|
+
// If user provides data for A and B but not C:
|
|
88
|
+
|
|
89
|
+
const response = await agent.respond("Data for A and B");
|
|
90
|
+
|
|
91
|
+
// Batch includes: [A, B]
|
|
92
|
+
// Stops at: C (needs_input)
|
|
93
|
+
// Next call will continue from C
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Error Stopping Conditions
|
|
97
|
+
|
|
98
|
+
Errors during batch execution have different behaviors:
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
// Prepare hook error - stops immediately
|
|
102
|
+
const stepWithPrepare = {
|
|
103
|
+
prompt: "Processing...",
|
|
104
|
+
prepare: async (context, data) => {
|
|
105
|
+
if (!data.valid) throw new Error("Invalid data");
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
// stoppedReason: "prepare_error"
|
|
109
|
+
// Session state: last successful state preserved
|
|
110
|
+
|
|
111
|
+
// LLM error - stops with preserved state
|
|
112
|
+
// stoppedReason: "llm_error"
|
|
113
|
+
// Session state: preserved from before LLM call
|
|
114
|
+
|
|
115
|
+
// Validation error - continues but reports error
|
|
116
|
+
// stoppedReason: "validation_error"
|
|
117
|
+
// Collected data: partial data preserved
|
|
118
|
+
|
|
119
|
+
// Finalize hook error - logged, continues
|
|
120
|
+
// stoppedReason: original reason (not changed)
|
|
121
|
+
// Error: included in response for logging
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Checking Stop Reason in Response
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
const response = await agent.respond("Book a hotel");
|
|
128
|
+
|
|
129
|
+
switch (response.stoppedReason) {
|
|
130
|
+
case 'needs_input':
|
|
131
|
+
console.log("Waiting for user input");
|
|
132
|
+
break;
|
|
133
|
+
case 'end_route':
|
|
134
|
+
case 'route_complete':
|
|
135
|
+
console.log("Route finished:", response.isRouteComplete);
|
|
136
|
+
break;
|
|
137
|
+
case 'prepare_error':
|
|
138
|
+
case 'llm_error':
|
|
139
|
+
console.error("Error occurred:", response.error);
|
|
140
|
+
break;
|
|
141
|
+
case 'validation_error':
|
|
142
|
+
console.warn("Validation issues:", response.error);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
15
147
|
## Conditional Skipping
|
|
16
148
|
|
|
17
149
|
### SkipIf Logic
|