@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
|
@@ -168,18 +168,26 @@ const agent = new Agent<CustomerContext, CustomerData>({
|
|
|
168
168
|
},
|
|
169
169
|
],
|
|
170
170
|
|
|
171
|
-
//
|
|
171
|
+
// Enhanced behavioral guidelines with ConditionTemplate
|
|
172
172
|
guidelines: [
|
|
173
173
|
{
|
|
174
|
-
condition:
|
|
174
|
+
condition: [
|
|
175
|
+
"Customer seems frustrated or upset", // AI context
|
|
176
|
+
(ctx) => ctx.data?.priority === 'high' // Programmatic check
|
|
177
|
+
],
|
|
175
178
|
action: "Apologize sincerely and offer to escalate to human agent",
|
|
176
179
|
enabled: true,
|
|
177
180
|
},
|
|
178
181
|
{
|
|
179
|
-
condition:
|
|
182
|
+
condition: (ctx) => ctx.accountTier === 'premium', // Function-only condition
|
|
180
183
|
action: "Provide expedited service and additional options",
|
|
181
184
|
enabled: true,
|
|
182
185
|
},
|
|
186
|
+
{
|
|
187
|
+
condition: "User is asking for help with billing", // String-only condition
|
|
188
|
+
action: "Be extra careful with financial information and offer phone support",
|
|
189
|
+
enabled: true,
|
|
190
|
+
},
|
|
183
191
|
],
|
|
184
192
|
|
|
185
193
|
// Global tools available to all routes
|
|
@@ -366,7 +374,7 @@ const agent = new Agent<CustomerContext, CustomerData>({
|
|
|
366
374
|
{
|
|
367
375
|
title: "Technical Support",
|
|
368
376
|
description: "Help with technical issues",
|
|
369
|
-
|
|
377
|
+
when: ["user reports technical problem"],
|
|
370
378
|
// NEW: Routes specify required fields instead of schemas
|
|
371
379
|
requiredFields: ["customerName", "email", "issueType", "issueDescription"],
|
|
372
380
|
optionalFields: ["phone", "priority"],
|
|
@@ -379,7 +387,7 @@ const agent = new Agent<CustomerContext, CustomerData>({
|
|
|
379
387
|
{
|
|
380
388
|
title: "Billing Inquiry",
|
|
381
389
|
description: "Handle billing and payment questions",
|
|
382
|
-
|
|
390
|
+
when: ["user asks about billing or payment"],
|
|
383
391
|
requiredFields: ["customerName", "email", "issueType"],
|
|
384
392
|
initialStep: {
|
|
385
393
|
prompt:
|
|
@@ -416,6 +424,113 @@ const routes = agent.getRoutes();
|
|
|
416
424
|
console.log(routes.map((r) => r.title)); // ["Customer Support", ...]
|
|
417
425
|
```
|
|
418
426
|
|
|
427
|
+
## Enhanced Guideline System
|
|
428
|
+
|
|
429
|
+
### Flexible Guideline Conditions
|
|
430
|
+
|
|
431
|
+
Guidelines now support the powerful `ConditionTemplate` system, allowing for more sophisticated behavioral control:
|
|
432
|
+
|
|
433
|
+
```typescript
|
|
434
|
+
// String-only condition (AI context)
|
|
435
|
+
agent.addGuideline({
|
|
436
|
+
condition: "User is asking for technical help",
|
|
437
|
+
action: "Provide detailed technical explanations with examples"
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
// Function-only condition (programmatic)
|
|
441
|
+
agent.addGuideline({
|
|
442
|
+
condition: (ctx) => ctx.data?.userType === 'premium',
|
|
443
|
+
action: "Offer priority support and additional features"
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
// Mixed array condition (hybrid approach)
|
|
447
|
+
agent.addGuideline({
|
|
448
|
+
condition: [
|
|
449
|
+
"User seems confused or needs clarification", // AI context
|
|
450
|
+
(ctx) => ctx.data?.attemptCount > 2 // Programmatic check
|
|
451
|
+
],
|
|
452
|
+
action: "Slow down, use simpler language, and offer to connect with human support"
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
// Complex conditional guidelines
|
|
456
|
+
agent.addGuideline({
|
|
457
|
+
condition: [
|
|
458
|
+
"User is reporting a critical issue", // AI context
|
|
459
|
+
(ctx) => ctx.data?.accountTier === 'enterprise', // Account check
|
|
460
|
+
(ctx) => new Date().getHours() >= 9 && new Date().getHours() <= 17 // Business hours
|
|
461
|
+
],
|
|
462
|
+
action: "Immediately escalate to senior technical support and provide direct contact information"
|
|
463
|
+
});
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### Guideline Evaluation Logic
|
|
467
|
+
|
|
468
|
+
Guidelines use **AND logic** for arrays - all conditions must be met:
|
|
469
|
+
|
|
470
|
+
- **String conditions**: Provide context to AI for guideline matching
|
|
471
|
+
- **Function conditions**: Must return `true` for guideline to activate
|
|
472
|
+
- **Arrays**: All functions must return `true`, strings provide AI context
|
|
473
|
+
|
|
474
|
+
### Context-Aware Guidelines
|
|
475
|
+
|
|
476
|
+
Guidelines can access both agent context and collected data:
|
|
477
|
+
|
|
478
|
+
```typescript
|
|
479
|
+
interface SupportContext {
|
|
480
|
+
userTier: 'free' | 'premium' | 'enterprise';
|
|
481
|
+
supportTicketCount: number;
|
|
482
|
+
lastContactDate?: Date;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
interface SupportData {
|
|
486
|
+
issueType?: string;
|
|
487
|
+
severity?: 'low' | 'medium' | 'high' | 'critical';
|
|
488
|
+
previousAttempts?: number;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
agent.addGuideline({
|
|
492
|
+
condition: [
|
|
493
|
+
"User has contacted support multiple times recently", // AI context
|
|
494
|
+
(ctx) => ctx.context?.supportTicketCount > 3, // Context check
|
|
495
|
+
(ctx) => ctx.data?.severity === 'high' // Data check
|
|
496
|
+
],
|
|
497
|
+
action: "Acknowledge their patience, apologize for the inconvenience, and prioritize their case"
|
|
498
|
+
});
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Dynamic Guideline Activation
|
|
502
|
+
|
|
503
|
+
Guidelines can be activated based on conversation state:
|
|
504
|
+
|
|
505
|
+
```typescript
|
|
506
|
+
// Time-based guidelines
|
|
507
|
+
agent.addGuideline({
|
|
508
|
+
condition: (ctx) => {
|
|
509
|
+
const hour = new Date().getHours();
|
|
510
|
+
return hour < 9 || hour > 17; // Outside business hours
|
|
511
|
+
},
|
|
512
|
+
action: "Inform user that live support is available during business hours (9 AM - 5 PM)"
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
// Progress-based guidelines
|
|
516
|
+
agent.addGuideline({
|
|
517
|
+
condition: [
|
|
518
|
+
"User is making good progress", // AI context
|
|
519
|
+
(ctx) => Object.keys(ctx.data || {}).length > 3 // Has collected significant data
|
|
520
|
+
],
|
|
521
|
+
action: "Acknowledge their cooperation and let them know we're almost done"
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
// Route-specific guidelines
|
|
525
|
+
agent.addGuideline({
|
|
526
|
+
condition: [
|
|
527
|
+
"User is in the payment process", // AI context
|
|
528
|
+
(ctx) => ctx.session?.currentRoute?.id === 'payment_flow' // Route check
|
|
529
|
+
],
|
|
530
|
+
action: "Be extra careful with payment information and confirm all details before processing"
|
|
531
|
+
});
|
|
532
|
+
```
|
|
533
|
+
|
|
419
534
|
## Tool Integration
|
|
420
535
|
|
|
421
536
|
### Agent-Level Tools
|
|
@@ -589,7 +589,7 @@ For simple question-answering without step:
|
|
|
589
589
|
```typescript
|
|
590
590
|
const qnaRoute = agent.createRoute({
|
|
591
591
|
title: "Company Q&A",
|
|
592
|
-
|
|
592
|
+
when: ["User asks about company"],
|
|
593
593
|
// NO schema - stepless!
|
|
594
594
|
});
|
|
595
595
|
|
|
@@ -218,3 +218,138 @@ Prompts are optimized for token efficiency:
|
|
|
218
218
|
- Leverage route-specific overrides for specialized behavior
|
|
219
219
|
- Monitor token usage and optimize prompt length
|
|
220
220
|
- Test prompts with different AI providers for consistency
|
|
221
|
+
|
|
222
|
+
## BatchPromptBuilder for Multi-Step Execution
|
|
223
|
+
|
|
224
|
+
When multiple steps execute in a single batch, the `BatchPromptBuilder` combines their prompts into a single coherent prompt.
|
|
225
|
+
|
|
226
|
+
### Combined Prompt Structure
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
[Agent Identity & Personality]
|
|
230
|
+
[Route Context]
|
|
231
|
+
|
|
232
|
+
## Current Conversation Flow
|
|
233
|
+
|
|
234
|
+
You are handling multiple aspects of this conversation in a single response.
|
|
235
|
+
|
|
236
|
+
### Step 1: [Step Description]
|
|
237
|
+
[Step Prompt]
|
|
238
|
+
|
|
239
|
+
### Step 2: [Step Description]
|
|
240
|
+
[Step Prompt]
|
|
241
|
+
|
|
242
|
+
[... additional steps ...]
|
|
243
|
+
|
|
244
|
+
## Data Collection
|
|
245
|
+
|
|
246
|
+
Extract the following information from your response:
|
|
247
|
+
- field1 (type): description
|
|
248
|
+
- field2 (type): description
|
|
249
|
+
|
|
250
|
+
## Response Format
|
|
251
|
+
|
|
252
|
+
Return JSON with:
|
|
253
|
+
- message: Your response to the user
|
|
254
|
+
- [collected fields as top-level properties]
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### How Prompts Are Merged
|
|
258
|
+
|
|
259
|
+
The `BatchPromptBuilder` preserves each step's intent while creating a unified prompt:
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
// Individual step prompts
|
|
263
|
+
const step1 = { prompt: "What's your name?", collect: ["name"] };
|
|
264
|
+
const step2 = { prompt: "What's your email?", collect: ["email"] };
|
|
265
|
+
const step3 = { prompt: "How can I help?", collect: ["request"] };
|
|
266
|
+
|
|
267
|
+
// Combined prompt includes all three
|
|
268
|
+
const result = await batchPromptBuilder.buildBatchPrompt({
|
|
269
|
+
steps: [step1, step2, step3],
|
|
270
|
+
route,
|
|
271
|
+
history,
|
|
272
|
+
context,
|
|
273
|
+
session,
|
|
274
|
+
agentOptions,
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
// result.prompt contains unified prompt
|
|
278
|
+
// result.collectFields = ["name", "email", "request"]
|
|
279
|
+
// result.stepCount = 3
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Collect Fields Aggregation
|
|
283
|
+
|
|
284
|
+
All `collect` fields from all steps are combined and deduplicated:
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
// Steps with overlapping collect fields
|
|
288
|
+
const steps = [
|
|
289
|
+
{ collect: ["name", "email"] },
|
|
290
|
+
{ collect: ["email", "phone"] }, // email appears twice
|
|
291
|
+
{ collect: ["preferences"] }
|
|
292
|
+
];
|
|
293
|
+
|
|
294
|
+
// Combined collect fields (deduplicated)
|
|
295
|
+
// ["name", "email", "phone", "preferences"]
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Schema-Aware Field Descriptions
|
|
299
|
+
|
|
300
|
+
When the agent has a schema, field descriptions are included in the prompt:
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
// Agent schema
|
|
304
|
+
const schema = {
|
|
305
|
+
properties: {
|
|
306
|
+
email: { type: "string", format: "email", description: "User's email address" },
|
|
307
|
+
guests: { type: "number", minimum: 1, description: "Number of guests" }
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
// Generated data collection section:
|
|
312
|
+
// ## Data Collection
|
|
313
|
+
// Extract the following information from your response:
|
|
314
|
+
// - email (string): User's email address
|
|
315
|
+
// - guests (number): Number of guests
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Single vs Multi-Step Prompts
|
|
319
|
+
|
|
320
|
+
The prompt structure adapts based on batch size:
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
// Single step batch
|
|
324
|
+
// ## Current Step
|
|
325
|
+
// [Step prompt]
|
|
326
|
+
|
|
327
|
+
// Multi-step batch
|
|
328
|
+
// ## Current Conversation Flow
|
|
329
|
+
// You are handling multiple aspects of this conversation in a single response.
|
|
330
|
+
// ### Step 1: ...
|
|
331
|
+
// ### Step 2: ...
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Using BatchPromptBuilder
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
import { BatchPromptBuilder } from "@falai/agent";
|
|
338
|
+
|
|
339
|
+
const builder = new BatchPromptBuilder<MyContext, MyData>();
|
|
340
|
+
|
|
341
|
+
const result = await builder.buildBatchPrompt({
|
|
342
|
+
steps: batchResult.steps,
|
|
343
|
+
route: currentRoute,
|
|
344
|
+
history: conversationHistory,
|
|
345
|
+
context: agentContext,
|
|
346
|
+
session: currentSession,
|
|
347
|
+
agentOptions: agent.getAgentOptions(),
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
// Use result.prompt for LLM call
|
|
351
|
+
const llmResponse = await provider.generateMessage({
|
|
352
|
+
prompt: result.prompt,
|
|
353
|
+
// ...
|
|
354
|
+
});
|
|
355
|
+
```
|
|
@@ -277,6 +277,150 @@ Built-in monitoring capabilities:
|
|
|
277
277
|
- **Debug logging** - Detailed processing traces
|
|
278
278
|
- **Performance profiling** - Identify bottlenecks
|
|
279
279
|
|
|
280
|
+
## Batch Execution Response Fields
|
|
281
|
+
|
|
282
|
+
When using multi-step execution, the `AgentResponse` includes additional fields for batch execution information.
|
|
283
|
+
|
|
284
|
+
### New AgentResponse Fields
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
interface AgentResponse<TData = unknown> {
|
|
288
|
+
/** The generated message */
|
|
289
|
+
message: string;
|
|
290
|
+
/** Updated session state */
|
|
291
|
+
session?: SessionState<TData>;
|
|
292
|
+
/** Tool calls made during response */
|
|
293
|
+
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
294
|
+
/** Whether the route is complete */
|
|
295
|
+
isRouteComplete?: boolean;
|
|
296
|
+
|
|
297
|
+
// Multi-step execution fields
|
|
298
|
+
/** Steps executed in this response */
|
|
299
|
+
executedSteps?: StepRef[];
|
|
300
|
+
/** Why execution stopped */
|
|
301
|
+
stoppedReason?: StoppedReason;
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### executedSteps Array
|
|
306
|
+
|
|
307
|
+
Lists all steps that were executed in the batch:
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
const response = await agent.respond("Book Grand Hotel for 2 on Friday");
|
|
311
|
+
|
|
312
|
+
console.log(response.executedSteps);
|
|
313
|
+
// [
|
|
314
|
+
// { id: "ask-hotel", routeId: "booking" },
|
|
315
|
+
// { id: "ask-guests", routeId: "booking" },
|
|
316
|
+
// { id: "ask-date", routeId: "booking" }
|
|
317
|
+
// ]
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Each `StepRef` contains:
|
|
321
|
+
- `id` - The step identifier
|
|
322
|
+
- `routeId` - The route this step belongs to
|
|
323
|
+
|
|
324
|
+
### stoppedReason Field
|
|
325
|
+
|
|
326
|
+
Indicates why batch execution stopped:
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
type StoppedReason =
|
|
330
|
+
| 'needs_input' // Step requires uncollected data
|
|
331
|
+
| 'end_route' // Reached END_ROUTE
|
|
332
|
+
| 'route_complete' // All Steps processed
|
|
333
|
+
| 'prepare_error' // Error in prepare hook
|
|
334
|
+
| 'llm_error' // Error during LLM call
|
|
335
|
+
| 'validation_error' // Error validating collected data
|
|
336
|
+
| 'finalize_error'; // Error in finalize hook (non-fatal)
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### BatchExecutionResult Structure
|
|
340
|
+
|
|
341
|
+
The internal batch execution result provides detailed information:
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
interface BatchExecutionResult<TData = unknown> {
|
|
345
|
+
/** The generated message */
|
|
346
|
+
message: string;
|
|
347
|
+
/** Updated session state */
|
|
348
|
+
session: SessionState<TData>;
|
|
349
|
+
/** Steps that were executed */
|
|
350
|
+
executedSteps: StepRef[];
|
|
351
|
+
/** Why execution stopped */
|
|
352
|
+
stoppedReason: StoppedReason;
|
|
353
|
+
/** Collected data from the batch */
|
|
354
|
+
collectedData?: Partial<TData>;
|
|
355
|
+
/** Any errors that occurred */
|
|
356
|
+
error?: BatchExecutionError;
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Error Information
|
|
361
|
+
|
|
362
|
+
When errors occur, detailed information is available:
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
interface BatchExecutionError {
|
|
366
|
+
/** Type of error that occurred */
|
|
367
|
+
type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
|
|
368
|
+
'llm_call' | 'data_validation' | 'finalize_hook';
|
|
369
|
+
/** Error message */
|
|
370
|
+
message: string;
|
|
371
|
+
/** Step where error occurred (if applicable) */
|
|
372
|
+
stepId?: string;
|
|
373
|
+
/** Additional error details */
|
|
374
|
+
details?: unknown;
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Using Response Fields
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
const response = await agent.respond("Complete my booking");
|
|
382
|
+
|
|
383
|
+
// Check what was executed
|
|
384
|
+
console.log(`Executed ${response.executedSteps?.length || 0} steps`);
|
|
385
|
+
|
|
386
|
+
// Check why execution stopped
|
|
387
|
+
switch (response.stoppedReason) {
|
|
388
|
+
case 'needs_input':
|
|
389
|
+
console.log("Waiting for more information from user");
|
|
390
|
+
break;
|
|
391
|
+
case 'route_complete':
|
|
392
|
+
case 'end_route':
|
|
393
|
+
console.log("Route finished successfully");
|
|
394
|
+
break;
|
|
395
|
+
case 'validation_error':
|
|
396
|
+
console.log("Data validation issues:", response.error);
|
|
397
|
+
break;
|
|
398
|
+
default:
|
|
399
|
+
console.log("Stopped due to:", response.stoppedReason);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Check route completion
|
|
403
|
+
if (response.isRouteComplete) {
|
|
404
|
+
console.log("All required data collected");
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Session State After Batch
|
|
409
|
+
|
|
410
|
+
The session state reflects the final step position:
|
|
411
|
+
|
|
412
|
+
```typescript
|
|
413
|
+
const response = await agent.respond("Book for 2 guests");
|
|
414
|
+
|
|
415
|
+
// Session shows current position
|
|
416
|
+
console.log(response.session?.currentStep);
|
|
417
|
+
// { id: "ask-date", routeId: "booking" }
|
|
418
|
+
|
|
419
|
+
// Session data includes all collected values
|
|
420
|
+
console.log(response.session?.data);
|
|
421
|
+
// { hotel: "Grand Hotel", guests: 2 }
|
|
422
|
+
```
|
|
423
|
+
|
|
280
424
|
## Best Practices
|
|
281
425
|
|
|
282
426
|
- Design schemas for reliable AI extraction
|
|
@@ -285,3 +429,5 @@ Built-in monitoring capabilities:
|
|
|
285
429
|
- Use streaming for better user experience
|
|
286
430
|
- Leverage tool results for context enrichment
|
|
287
431
|
- Validate data at multiple levels (schema + business rules)
|
|
432
|
+
- Check `executedSteps` to understand batch behavior
|
|
433
|
+
- Handle different `stoppedReason` values appropriately
|
|
@@ -13,6 +13,149 @@ The agent-level data collection system provides:
|
|
|
13
13
|
- **Natural Conversations**: AI handles information gathering conversationally
|
|
14
14
|
- **Validation & Enrichment**: Agent-level lifecycle hooks for data processing
|
|
15
15
|
- **Session Persistence**: Data survives across conversation turns and route transitions
|
|
16
|
+
- **Batch Data Collection**: Multiple steps can collect data in a single LLM call
|
|
17
|
+
|
|
18
|
+
## Data Collection Across Batched Steps
|
|
19
|
+
|
|
20
|
+
When multiple steps execute in a single batch, data collection works across all steps simultaneously.
|
|
21
|
+
|
|
22
|
+
### How Batch Data Collection Works
|
|
23
|
+
|
|
24
|
+
1. **Gather collect fields** - All `collect` fields from all steps in the batch are combined
|
|
25
|
+
2. **Single LLM call** - The combined prompt instructs the LLM to extract all fields
|
|
26
|
+
3. **Extract from response** - All specified fields are extracted from the LLM response
|
|
27
|
+
4. **Validate against schema** - Collected data is validated against the agent schema
|
|
28
|
+
5. **Update session** - All collected values are merged into session data
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// Batch with 3 steps, each collecting different fields
|
|
32
|
+
const batch = [
|
|
33
|
+
{ collect: ["name"] },
|
|
34
|
+
{ collect: ["email", "phone"] },
|
|
35
|
+
{ collect: ["preferences"] }
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
// Combined collection: ["name", "email", "phone", "preferences"]
|
|
39
|
+
// Single LLM response extracts all fields at once
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Pre-Extraction and Batch Determination
|
|
43
|
+
|
|
44
|
+
Pre-extraction happens **before** batch determination and directly impacts which steps can be batched:
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// User message: "I'm John, email john@example.com, I prefer dark mode"
|
|
48
|
+
|
|
49
|
+
// Phase 1: Pre-extraction
|
|
50
|
+
const preExtracted = {
|
|
51
|
+
name: "John",
|
|
52
|
+
email: "john@example.com",
|
|
53
|
+
preferences: { theme: "dark" }
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Phase 2: Batch determination (with pre-extracted data merged)
|
|
57
|
+
// Step 1: collect: ["name"] → name exists → doesn't need input
|
|
58
|
+
// Step 2: collect: ["email"] → email exists → doesn't need input
|
|
59
|
+
// Step 3: collect: ["preferences"] → preferences exists → doesn't need input
|
|
60
|
+
// Result: All 3 steps batched together
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Pre-Extraction Configuration
|
|
64
|
+
|
|
65
|
+
Pre-extraction is automatic when routes define data fields:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
// Option 1: Route-level required fields
|
|
69
|
+
agent.createRoute({
|
|
70
|
+
title: "Booking",
|
|
71
|
+
requiredFields: ["hotel", "date", "guests"],
|
|
72
|
+
// Pre-extraction enabled automatically
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Option 2: Route-level optional fields
|
|
76
|
+
agent.createRoute({
|
|
77
|
+
title: "Booking",
|
|
78
|
+
optionalFields: ["specialRequests"],
|
|
79
|
+
// Pre-extraction enabled automatically
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Option 3: Steps with collect arrays
|
|
83
|
+
agent.createRoute({
|
|
84
|
+
title: "Booking",
|
|
85
|
+
steps: [
|
|
86
|
+
{ collect: ["hotel"] }, // Pre-extraction enabled automatically
|
|
87
|
+
]
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Batch Collection Example
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
const response = await agent.respond(
|
|
95
|
+
"I'm Alice, alice@example.com, and I want to book for 2 guests"
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
// Response includes all collected data
|
|
99
|
+
console.log(response.session.data);
|
|
100
|
+
// {
|
|
101
|
+
// name: "Alice",
|
|
102
|
+
// email: "alice@example.com",
|
|
103
|
+
// guests: 2
|
|
104
|
+
// }
|
|
105
|
+
|
|
106
|
+
// Shows which steps executed
|
|
107
|
+
console.log(response.executedSteps);
|
|
108
|
+
// [
|
|
109
|
+
// { id: "ask-name", routeId: "booking" },
|
|
110
|
+
// { id: "ask-email", routeId: "booking" },
|
|
111
|
+
// { id: "ask-guests", routeId: "booking" }
|
|
112
|
+
// ]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Validation Across Batch
|
|
116
|
+
|
|
117
|
+
Data validation happens after collection for all fields:
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// Agent schema defines validation rules
|
|
121
|
+
const agent = new Agent({
|
|
122
|
+
schema: {
|
|
123
|
+
type: "object",
|
|
124
|
+
properties: {
|
|
125
|
+
email: { type: "string", format: "email" },
|
|
126
|
+
guests: { type: "number", minimum: 1, maximum: 10 }
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// If validation fails for any field:
|
|
132
|
+
const response = await agent.respond("Book for 100 guests");
|
|
133
|
+
|
|
134
|
+
// Response includes validation errors
|
|
135
|
+
if (response.stoppedReason === 'validation_error') {
|
|
136
|
+
console.log(response.error);
|
|
137
|
+
// {
|
|
138
|
+
// type: 'data_validation',
|
|
139
|
+
// message: 'Validation failed for 1 field(s): guests',
|
|
140
|
+
// details: [{ field: 'guests', message: 'Value exceeds maximum of 10' }]
|
|
141
|
+
// }
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Partial Data Preservation
|
|
146
|
+
|
|
147
|
+
Even when validation fails, valid partial data is preserved:
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// User provides valid name but invalid email
|
|
151
|
+
const response = await agent.respond("I'm John, email: not-an-email");
|
|
152
|
+
|
|
153
|
+
// Valid data is still collected
|
|
154
|
+
console.log(response.session.data.name); // "John"
|
|
155
|
+
|
|
156
|
+
// Invalid data triggers validation error
|
|
157
|
+
console.log(response.stoppedReason); // "validation_error"
|
|
158
|
+
```
|
|
16
159
|
|
|
17
160
|
## Agent-Level Schema Definition
|
|
18
161
|
|
|
@@ -44,7 +44,7 @@ const agent = new Agent<{}, HotelData>({
|
|
|
44
44
|
const bookingRoute = agent.createRoute({
|
|
45
45
|
title: "Hotel Booking",
|
|
46
46
|
description: "Help users book hotel accommodations",
|
|
47
|
-
|
|
47
|
+
when: ["User wants to book a hotel"],
|
|
48
48
|
requiredFields: ["destination", "checkIn", "checkOut", "guests", "customerName", "email"],
|
|
49
49
|
optionalFields: ["roomType", "phone", "specialRequests"]
|
|
50
50
|
});
|
|
@@ -52,7 +52,7 @@ const bookingRoute = agent.createRoute({
|
|
|
52
52
|
const customerServiceRoute = agent.createRoute({
|
|
53
53
|
title: "Customer Service",
|
|
54
54
|
description: "Help with booking issues",
|
|
55
|
-
|
|
55
|
+
when: ["User needs help with existing booking"],
|
|
56
56
|
requiredFields: ["customerName", "email"], // Minimal requirements
|
|
57
57
|
optionalFields: ["phone", "destination"]
|
|
58
58
|
});
|