@falai/agent 0.9.2 → 1.0.0
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 +262 -38
- 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 +6 -1
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +42 -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 +842 -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 +201 -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 +202 -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 +686 -66
- 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 +11 -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 +6 -1
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +43 -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 +837 -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 +197 -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 +198 -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 +686 -66
- 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 +11 -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/api/README.md +221 -12
- package/docs/api/overview.md +202 -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 +120 -5
- 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 +23 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +303 -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 +54 -2
- package/src/core/BatchExecutor.ts +1156 -0
- package/src/core/BatchPromptBuilder.ts +275 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +143 -4
- package/src/core/ResponseModal.ts +888 -66
- 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 +11 -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
|
@@ -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
|
|
@@ -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
|