@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
|
@@ -145,6 +145,115 @@ const dataStep = previousStep.nextStep({
|
|
|
145
145
|
});
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
+
## Multi-Step Batch Execution
|
|
149
|
+
|
|
150
|
+
Steps can execute together in a single LLM call when their data requirements are already satisfied. This reduces unnecessary back-and-forth and minimizes LLM costs.
|
|
151
|
+
|
|
152
|
+
### How Steps Are Batched
|
|
153
|
+
|
|
154
|
+
The execution engine walks through Steps sequentially and includes them in a batch until encountering a Step that needs user input:
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
// Route with 3 steps
|
|
158
|
+
const route = agent.createRoute({
|
|
159
|
+
title: "Booking",
|
|
160
|
+
requiredFields: ["hotel", "date", "guests"],
|
|
161
|
+
initialStep: {
|
|
162
|
+
prompt: "Which hotel?",
|
|
163
|
+
collect: ["hotel"],
|
|
164
|
+
skipIf: (data) => !!data.hotel,
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
const askDate = route.initialStep.nextStep({
|
|
169
|
+
prompt: "What date?",
|
|
170
|
+
collect: ["date"],
|
|
171
|
+
skipIf: (data) => !!data.date,
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
const askGuests = askDate.nextStep({
|
|
175
|
+
prompt: "How many guests?",
|
|
176
|
+
collect: ["guests"],
|
|
177
|
+
skipIf: (data) => data.guests !== undefined,
|
|
178
|
+
});
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
When a user says "Book Grand Hotel for 2 people on Friday":
|
|
182
|
+
1. Pre-extraction captures: `{ hotel: "Grand Hotel", date: "Friday", guests: 2 }`
|
|
183
|
+
2. All steps have their data satisfied (skipIf evaluates to true)
|
|
184
|
+
3. Route completes in a single LLM call
|
|
185
|
+
|
|
186
|
+
### The `requires` Field in Batch Context
|
|
187
|
+
|
|
188
|
+
The `requires` field specifies data prerequisites that must be present before a Step can execute:
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
const confirmStep = askGuests.nextStep({
|
|
192
|
+
prompt: "Confirm booking for {{guests}} guests at {{hotel}} on {{date}}?",
|
|
193
|
+
requires: ["hotel", "date", "guests"], // All must be present
|
|
194
|
+
collect: ["confirmed"],
|
|
195
|
+
});
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Batch behavior:**
|
|
199
|
+
- If any `requires` field is missing from session data (after pre-extraction), the Step **needs input**
|
|
200
|
+
- The batch stops at this Step, and the LLM generates a response to collect the missing data
|
|
201
|
+
|
|
202
|
+
### The `collect` Field in Batch Context
|
|
203
|
+
|
|
204
|
+
The `collect` field specifies which data fields the Step should extract from the conversation:
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
const contactStep = {
|
|
208
|
+
prompt: "What's your email and phone?",
|
|
209
|
+
collect: ["email", "phone"], // Extract both from response
|
|
210
|
+
};
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Batch behavior:**
|
|
214
|
+
- If a Step has `collect` fields and **none** of those fields have data in the session, the Step **needs input**
|
|
215
|
+
- If **any** collect field already has data, the Step doesn't need input and can be included in the batch
|
|
216
|
+
|
|
217
|
+
### SkipIf Evaluation During Batch Determination
|
|
218
|
+
|
|
219
|
+
The `skipIf` condition is evaluated for each Step during batch determination:
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
const premiumStep = {
|
|
223
|
+
prompt: "Would you like premium features?",
|
|
224
|
+
collect: ["wantsPremium"],
|
|
225
|
+
skipIf: (data) => data.userTier === "free", // Skip for free users
|
|
226
|
+
};
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Evaluation rules:**
|
|
230
|
+
1. If `skipIf` evaluates to `true` → Step is skipped, continue to next Step
|
|
231
|
+
2. If `skipIf` evaluates to `false` → Step is evaluated for needs-input
|
|
232
|
+
3. If `skipIf` throws an error → Step is treated as non-skippable (safer to execute than skip)
|
|
233
|
+
|
|
234
|
+
### Batch Execution Example
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
// User provides partial info
|
|
238
|
+
const response1 = await agent.respond("I want to book the Grand Hotel");
|
|
239
|
+
|
|
240
|
+
// Response shows which steps executed
|
|
241
|
+
console.log(response1.executedSteps);
|
|
242
|
+
// [{ id: "ask-hotel", routeId: "booking" }]
|
|
243
|
+
|
|
244
|
+
console.log(response1.stoppedReason);
|
|
245
|
+
// "needs_input" - stopped at ask-date step
|
|
246
|
+
|
|
247
|
+
// User provides remaining info
|
|
248
|
+
const response2 = await agent.respond("2 people on Friday");
|
|
249
|
+
|
|
250
|
+
console.log(response2.executedSteps);
|
|
251
|
+
// [{ id: "ask-date", routeId: "booking" }, { id: "ask-guests", routeId: "booking" }]
|
|
252
|
+
|
|
253
|
+
console.log(response2.stoppedReason);
|
|
254
|
+
// "route_complete"
|
|
255
|
+
```
|
|
256
|
+
|
|
148
257
|
## Best Practices
|
|
149
258
|
|
|
150
259
|
- Keep step prompts clear and focused
|
|
@@ -152,3 +261,6 @@ const dataStep = previousStep.nextStep({
|
|
|
152
261
|
- Leverage schema validation for data integrity
|
|
153
262
|
- Implement error handling in lifecycle hooks
|
|
154
263
|
- Consider user experience in step sequencing
|
|
264
|
+
- Design steps to maximize batching by using `skipIf` conditions
|
|
265
|
+
- Use `requires` to enforce data dependencies between steps
|
|
266
|
+
- Keep `collect` fields focused on what each step actually needs
|
|
@@ -11,6 +11,199 @@ The framework handles errors across multiple layers:
|
|
|
11
11
|
- **Session Data Synchronization** - Consistent error handling for agent-session data operations
|
|
12
12
|
- **Tool Execution Errors** - Graceful handling of tool failures
|
|
13
13
|
- **Validation Errors** - Schema and data validation error recovery
|
|
14
|
+
- **Batch Execution Errors** - Error handling during multi-step batch execution
|
|
15
|
+
|
|
16
|
+
## Batch Execution Error Handling
|
|
17
|
+
|
|
18
|
+
When executing multiple steps in a batch, errors are handled according to their category and severity.
|
|
19
|
+
|
|
20
|
+
### Error Categories
|
|
21
|
+
|
|
22
|
+
| Error Type | Severity | Behavior |
|
|
23
|
+
|------------|----------|----------|
|
|
24
|
+
| `pre_extraction` | Warning | Log warning, continue with empty extraction |
|
|
25
|
+
| `skipif_evaluation` | Warning | Treat step as non-skippable, include in batch |
|
|
26
|
+
| `prepare_hook` | Fatal | Stop batch execution, return error response |
|
|
27
|
+
| `llm_call` | Fatal | Stop batch, preserve last successful session state |
|
|
28
|
+
| `data_validation` | Non-fatal | Include errors in response, preserve partial data |
|
|
29
|
+
| `finalize_hook` | Non-fatal | Log error, continue with remaining hooks |
|
|
30
|
+
|
|
31
|
+
### Pre-Extraction Errors
|
|
32
|
+
|
|
33
|
+
Failures during data extraction from user message:
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// Pre-extraction is an optimization; failure shouldn't block execution
|
|
37
|
+
try {
|
|
38
|
+
const preExtracted = await preExtractData(message, route);
|
|
39
|
+
session = mergeCollected(session, preExtracted);
|
|
40
|
+
} catch (error) {
|
|
41
|
+
// Log warning but continue
|
|
42
|
+
console.warn("Pre-extraction failed:", error.message);
|
|
43
|
+
// Continue with empty extraction result
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### SkipIf Evaluation Errors
|
|
48
|
+
|
|
49
|
+
Exceptions thrown by skipIf conditions:
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
// Safer to execute than skip when condition is indeterminate
|
|
53
|
+
let shouldSkip = false;
|
|
54
|
+
try {
|
|
55
|
+
shouldSkip = await step.evaluateSkipIf(context);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
console.warn(`skipIf error for step ${step.id}, treating as non-skippable`);
|
|
58
|
+
shouldSkip = false; // Include step in batch
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Prepare Hook Errors
|
|
63
|
+
|
|
64
|
+
Failures in step prepare hooks stop batch execution:
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
const response = await agent.respond("Process my request");
|
|
68
|
+
|
|
69
|
+
if (response.stoppedReason === 'prepare_error') {
|
|
70
|
+
console.error("Prepare hook failed:", response.error);
|
|
71
|
+
// {
|
|
72
|
+
// type: 'prepare_hook',
|
|
73
|
+
// message: 'Validation failed in prepare hook',
|
|
74
|
+
// stepId: 'validate-step',
|
|
75
|
+
// details: { ... }
|
|
76
|
+
// }
|
|
77
|
+
|
|
78
|
+
// Session state is preserved from before the failed hook
|
|
79
|
+
console.log(response.session); // Last successful state
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### LLM Call Errors
|
|
84
|
+
|
|
85
|
+
Provider failures, timeouts, and rate limits:
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
const response = await agent.respond("Generate response");
|
|
89
|
+
|
|
90
|
+
if (response.stoppedReason === 'llm_error') {
|
|
91
|
+
console.error("LLM call failed:", response.error);
|
|
92
|
+
// {
|
|
93
|
+
// type: 'llm_call',
|
|
94
|
+
// message: 'Rate limit exceeded',
|
|
95
|
+
// details: { ... }
|
|
96
|
+
// }
|
|
97
|
+
|
|
98
|
+
// Session preserved from before LLM call
|
|
99
|
+
// Can retry with same session
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Data Validation Errors
|
|
104
|
+
|
|
105
|
+
Schema validation failures for collected data:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
const response = await agent.respond("Book for 100 guests");
|
|
109
|
+
|
|
110
|
+
if (response.stoppedReason === 'validation_error') {
|
|
111
|
+
console.warn("Validation failed:", response.error);
|
|
112
|
+
// {
|
|
113
|
+
// type: 'data_validation',
|
|
114
|
+
// message: 'Validation failed for 1 field(s): guests',
|
|
115
|
+
// details: [
|
|
116
|
+
// { field: 'guests', value: 100, message: 'Exceeds maximum of 10' }
|
|
117
|
+
// ]
|
|
118
|
+
// }
|
|
119
|
+
|
|
120
|
+
// Valid partial data is still preserved
|
|
121
|
+
console.log(response.session.data); // Contains valid fields
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Finalize Hook Errors
|
|
126
|
+
|
|
127
|
+
Failures in finalize hooks are logged but don't stop execution:
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// Finalize hooks are for cleanup; one failure shouldn't block others
|
|
131
|
+
const response = await agent.respond("Complete booking");
|
|
132
|
+
|
|
133
|
+
// Even if finalize hooks fail, response is returned
|
|
134
|
+
// Errors are logged and included in response.error if present
|
|
135
|
+
if (response.error?.type === 'finalize_hook') {
|
|
136
|
+
console.warn("Some finalize hooks failed:", response.error.details);
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Partial Progress Preservation
|
|
141
|
+
|
|
142
|
+
Errors preserve partial progress:
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
// Batch: [step1, step2, step3]
|
|
146
|
+
// step2's prepare hook fails
|
|
147
|
+
|
|
148
|
+
const response = await agent.respond("Process all steps");
|
|
149
|
+
|
|
150
|
+
// step1 completed successfully
|
|
151
|
+
// step2 failed during prepare
|
|
152
|
+
// step3 never executed
|
|
153
|
+
|
|
154
|
+
console.log(response.executedSteps);
|
|
155
|
+
// [{ id: "step1", routeId: "route" }]
|
|
156
|
+
|
|
157
|
+
console.log(response.stoppedReason);
|
|
158
|
+
// "prepare_error"
|
|
159
|
+
|
|
160
|
+
// Session contains data from step1
|
|
161
|
+
console.log(response.session.data);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Error Response Structure
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
interface BatchExecutionError {
|
|
168
|
+
/** Type of error that occurred */
|
|
169
|
+
type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
|
|
170
|
+
'llm_call' | 'data_validation' | 'finalize_hook';
|
|
171
|
+
/** Error message */
|
|
172
|
+
message: string;
|
|
173
|
+
/** Step where error occurred (if applicable) */
|
|
174
|
+
stepId?: string;
|
|
175
|
+
/** Additional error details */
|
|
176
|
+
details?: unknown;
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Handling Batch Errors
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
const response = await agent.respond(message);
|
|
184
|
+
|
|
185
|
+
// Check for errors
|
|
186
|
+
if (response.error) {
|
|
187
|
+
switch (response.error.type) {
|
|
188
|
+
case 'prepare_hook':
|
|
189
|
+
// Fatal - batch stopped
|
|
190
|
+
await handlePrepareError(response.error);
|
|
191
|
+
break;
|
|
192
|
+
case 'llm_call':
|
|
193
|
+
// Fatal - can retry
|
|
194
|
+
await retryWithBackoff(() => agent.respond(message));
|
|
195
|
+
break;
|
|
196
|
+
case 'data_validation':
|
|
197
|
+
// Non-fatal - ask user to correct
|
|
198
|
+
await promptForCorrection(response.error.details);
|
|
199
|
+
break;
|
|
200
|
+
case 'finalize_hook':
|
|
201
|
+
// Non-fatal - log and continue
|
|
202
|
+
console.warn("Finalize error:", response.error);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
14
207
|
|
|
15
208
|
## Streaming Error Propagation
|
|
16
209
|
|
|
@@ -29,6 +29,124 @@ Within an active route, the routing engine:
|
|
|
29
29
|
3. **AI Decision**: When multiple candidates exist, uses AI to select the optimal step
|
|
30
30
|
4. **Handles Completion**: Detects route completion and manages transitions
|
|
31
31
|
|
|
32
|
+
## Enhanced Condition System
|
|
33
|
+
|
|
34
|
+
### ConditionTemplate for Routes and Steps
|
|
35
|
+
|
|
36
|
+
The routing system now supports the powerful `ConditionTemplate` type for both route activation and step control:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
// Route with mixed condition types
|
|
40
|
+
agent.createRoute({
|
|
41
|
+
title: "Premium Support",
|
|
42
|
+
when: [
|
|
43
|
+
"User needs premium or priority support", // AI context
|
|
44
|
+
(ctx) => ctx.context?.accountTier === 'premium' // Programmatic check
|
|
45
|
+
],
|
|
46
|
+
skipIf: [
|
|
47
|
+
"Support system is under maintenance", // AI context
|
|
48
|
+
(ctx) => ctx.context?.maintenanceMode === true // Programmatic check
|
|
49
|
+
],
|
|
50
|
+
steps: [
|
|
51
|
+
{
|
|
52
|
+
id: "priority_greeting",
|
|
53
|
+
when: "User should receive priority treatment", // AI context only
|
|
54
|
+
prompt: "Welcome to premium support! How can I assist you today?",
|
|
55
|
+
collect: ["issueType"]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: "technical_help",
|
|
59
|
+
when: [
|
|
60
|
+
"User needs technical assistance", // AI context
|
|
61
|
+
(ctx) => ctx.data?.issueType === 'technical' // Programmatic check
|
|
62
|
+
],
|
|
63
|
+
skipIf: (ctx) => ctx.data?.issueResolved === true, // Function-only skipIf
|
|
64
|
+
prompt: "Let me help you with your technical issue",
|
|
65
|
+
collect: ["issueDescription"]
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Condition Evaluation Logic
|
|
72
|
+
|
|
73
|
+
**Route `when` conditions (AND logic):**
|
|
74
|
+
- All function conditions must return `true`
|
|
75
|
+
- String conditions provide AI context for route scoring
|
|
76
|
+
- Arrays require all functions to pass
|
|
77
|
+
|
|
78
|
+
**Route `skipIf` conditions (OR logic):**
|
|
79
|
+
- Any function returning `true` excludes the route
|
|
80
|
+
- String conditions provide AI context about exclusion reasons
|
|
81
|
+
- Arrays skip if any function returns `true`
|
|
82
|
+
|
|
83
|
+
**Step `when` conditions (AND logic):**
|
|
84
|
+
- All function conditions must return `true` for step to be eligible
|
|
85
|
+
- String conditions help AI understand step purpose
|
|
86
|
+
- Arrays require all functions to pass
|
|
87
|
+
|
|
88
|
+
**Step `skipIf` conditions (OR logic):**
|
|
89
|
+
- Any function returning `true` skips the step
|
|
90
|
+
- String conditions provide AI context about why step is skipped
|
|
91
|
+
- Arrays skip if any function returns `true`
|
|
92
|
+
|
|
93
|
+
### Hybrid Evaluation Process
|
|
94
|
+
|
|
95
|
+
The routing engine now performs a two-phase evaluation:
|
|
96
|
+
|
|
97
|
+
1. **Programmatic Phase**: Execute all function conditions for boolean results
|
|
98
|
+
2. **AI Context Phase**: Include string conditions in AI prompts for intelligent decision-making
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
// Example evaluation flow:
|
|
102
|
+
const routeCondition = [
|
|
103
|
+
"User wants to upgrade their account", // → AI context
|
|
104
|
+
(ctx) => ctx.context?.accountTier !== 'enterprise' // → Must be true
|
|
105
|
+
];
|
|
106
|
+
|
|
107
|
+
// Programmatic: Check if user can upgrade (not already enterprise)
|
|
108
|
+
// AI Context: "User wants to upgrade their account" helps AI understand intent
|
|
109
|
+
// Result: Route eligible if function passes AND AI scores it highly
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Context-Aware Routing
|
|
113
|
+
|
|
114
|
+
Conditions can access comprehensive context:
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
interface RoutingContext {
|
|
118
|
+
userId: string;
|
|
119
|
+
accountTier: 'free' | 'premium' | 'enterprise';
|
|
120
|
+
supportHistory: SupportTicket[];
|
|
121
|
+
currentTime: Date;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
interface AgentData {
|
|
125
|
+
customerName?: string;
|
|
126
|
+
issueType?: string;
|
|
127
|
+
priority?: 'low' | 'medium' | 'high';
|
|
128
|
+
previousAttempts?: number;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Route with context-aware conditions
|
|
132
|
+
agent.createRoute({
|
|
133
|
+
title: "Escalation Support",
|
|
134
|
+
when: [
|
|
135
|
+
"User needs escalated support or is frustrated", // AI context
|
|
136
|
+
(ctx) => ctx.data?.previousAttempts > 2, // Data check
|
|
137
|
+
(ctx) => ctx.context?.supportHistory.length > 5 // Context check
|
|
138
|
+
],
|
|
139
|
+
skipIf: [
|
|
140
|
+
"Issue has been resolved recently", // AI context
|
|
141
|
+
(ctx) => {
|
|
142
|
+
const lastTicket = ctx.context?.supportHistory[0];
|
|
143
|
+
return lastTicket?.status === 'resolved' &&
|
|
144
|
+
(Date.now() - lastTicket.resolvedAt.getTime()) < 24 * 60 * 60 * 1000;
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
32
150
|
## Key Features
|
|
33
151
|
|
|
34
152
|
### Intelligent Route Scoring
|