@falai/agent 0.9.2 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +281 -42
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryAdapter.js.map +1 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.d.ts +16 -1
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +63 -2
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/BatchExecutor.d.ts +353 -0
- package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
- package/dist/cjs/core/BatchExecutor.js +850 -0
- package/dist/cjs/core/BatchExecutor.js.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.js +217 -0
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
- package/dist/cjs/core/PromptComposer.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +211 -0
- package/dist/cjs/core/ResponseEngine.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseModal.d.ts +45 -0
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +752 -74
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +2 -2
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +34 -5
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Route.js +196 -19
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +330 -80
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/{src → cjs}/core/Step.d.ts +31 -10
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Step.js +105 -10
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +4 -1
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +12 -1
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/{src/types → types}/agent.d.ts +15 -3
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/{src → cjs}/types/ai.js.map +1 -1
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/{src/types → types}/index.d.ts +2 -1
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +6 -1
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/cjs/{src/types → types}/route.d.ts +111 -12
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/{src/types → types}/route.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -0
- package/dist/cjs/types/template.d.ts +88 -0
- package/dist/cjs/types/template.d.ts.map +1 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/condition.d.ts +38 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -0
- package/dist/cjs/utils/condition.js +168 -0
- package/dist/cjs/utils/condition.js.map +1 -0
- package/dist/cjs/utils/event.js.map +1 -0
- package/dist/cjs/utils/history.js.map +1 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/json.d.ts +16 -0
- package/dist/cjs/utils/json.d.ts.map +1 -0
- package/dist/cjs/utils/json.js +47 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{src → cjs}/utils/retry.d.ts +0 -3
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/retry.js +8 -7
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/session.js.map +1 -0
- package/dist/{src → cjs}/utils/template.d.ts +48 -0
- package/dist/cjs/utils/template.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/template.js +100 -0
- package/dist/cjs/utils/template.js.map +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/{src/core → core}/Agent.d.ts +16 -1
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +64 -3
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/BatchExecutor.d.ts +353 -0
- package/dist/core/BatchExecutor.d.ts.map +1 -0
- package/dist/core/BatchExecutor.js +845 -0
- package/dist/core/BatchExecutor.js.map +1 -0
- package/dist/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/core/BatchPromptBuilder.js +213 -0
- package/dist/core/BatchPromptBuilder.js.map +1 -0
- package/dist/core/Events.d.ts.map +1 -0
- package/dist/core/Events.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -0
- package/dist/{src/core → core}/PromptComposer.js +45 -8
- package/dist/core/PromptComposer.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -0
- package/dist/core/ResponseEngine.js +207 -0
- package/dist/core/ResponseEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponseModal.d.ts +45 -0
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +752 -74
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +2 -2
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +34 -5
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/{src/core → core}/Route.js +195 -18
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +310 -60
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/Step.d.ts +31 -10
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/{src/core → core}/Step.js +104 -9
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +4 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +3 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/types → types}/agent.d.ts +15 -3
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js.map +1 -0
- package/dist/{src/types → types}/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/{src/types → types}/route.d.ts +111 -12
- package/dist/types/route.d.ts.map +1 -0
- package/dist/{src/types → types}/route.js.map +1 -1
- package/dist/types/routing.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/routing.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/schema.js.map +1 -1
- package/dist/types/session.d.ts.map +1 -0
- package/dist/{src/types → types}/session.js.map +1 -1
- package/dist/types/template.d.ts +88 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/template.js.map +1 -1
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/clone.d.ts.map +1 -0
- package/dist/utils/clone.js.map +1 -0
- package/dist/utils/condition.d.ts +38 -0
- package/dist/utils/condition.d.ts.map +1 -0
- package/dist/utils/condition.js +161 -0
- package/dist/utils/condition.js.map +1 -0
- package/dist/utils/event.d.ts.map +1 -0
- package/dist/utils/event.js.map +1 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/{src/utils → utils}/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{src/utils → utils}/index.js +5 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +16 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{src/utils → utils}/retry.js +5 -4
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/{src/utils → utils}/template.js +98 -0
- package/dist/utils/template.js.map +1 -0
- package/docs/README.md +1 -0
- package/docs/api/README.md +237 -12
- package/docs/api/overview.md +206 -3
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/architecture/multi-step-execution.md +243 -0
- package/docs/core/agent/README.md +156 -5
- package/docs/core/agent/rules-and-prohibitions.md +113 -0
- package/docs/core/agent/session-management.md +1 -1
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +146 -0
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +2 -2
- package/docs/core/conversation-flows/step-transitions.md +132 -0
- package/docs/core/conversation-flows/steps.md +112 -0
- package/docs/core/error-handling.md +193 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/guides/getting-started/README.md +284 -3
- package/docs/guides/migration/README.md +27 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +373 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
- package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
- package/examples/advanced-patterns/streaming-responses.ts +2 -2
- package/examples/ai-providers/anthropic-integration.ts +4 -4
- package/examples/ai-providers/openai-integration.ts +1 -1
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +48 -7
- package/examples/core-concepts/basic-agent.ts +54 -33
- package/examples/core-concepts/schema-driven-extraction.ts +33 -9
- package/examples/core-concepts/session-management.ts +51 -16
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +10 -10
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +8 -8
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +3 -3
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/data-enrichment-tools.ts +4 -4
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +78 -2
- package/src/core/BatchExecutor.ts +1166 -0
- package/src/core/BatchPromptBuilder.ts +293 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +168 -29
- package/src/core/ResponseModal.ts +954 -74
- package/src/core/ResponsePipeline.ts +17 -9
- package/src/core/Route.ts +223 -22
- package/src/core/RoutingEngine.ts +426 -83
- package/src/core/Step.ts +144 -16
- package/src/index.ts +19 -0
- package/src/providers/AnthropicProvider.ts +17 -17
- package/src/providers/GeminiProvider.ts +129 -60
- package/src/providers/OpenAIProvider.ts +18 -18
- package/src/providers/OpenRouterProvider.ts +18 -18
- package/src/types/agent.ts +15 -3
- package/src/types/index.ts +12 -1
- package/src/types/route.ts +131 -12
- package/src/types/template.ts +70 -2
- package/src/utils/condition.ts +190 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/retry.ts +5 -4
- package/src/utils/template.ts +109 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/index.d.ts.map +0 -1
- package/dist/cjs/src/adapters/index.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/core/Agent.d.ts.map +0 -1
- package/dist/cjs/src/core/Agent.js.map +0 -1
- package/dist/cjs/src/core/Events.d.ts.map +0 -1
- package/dist/cjs/src/core/Events.js.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/src/core/PromptComposer.js.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.js +0 -84
- package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseModal.js.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/src/core/Route.d.ts.map +0 -1
- package/dist/cjs/src/core/Route.js.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/src/core/SessionManager.js.map +0 -1
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolManager.js.map +0 -1
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/src/providers/index.d.ts.map +0 -1
- package/dist/cjs/src/providers/index.js.map +0 -1
- package/dist/cjs/src/types/agent.d.ts.map +0 -1
- package/dist/cjs/src/types/agent.js.map +0 -1
- package/dist/cjs/src/types/ai.d.ts.map +0 -1
- package/dist/cjs/src/types/ai.js.map +0 -1
- package/dist/cjs/src/types/history.d.ts.map +0 -1
- package/dist/cjs/src/types/history.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +0 -1
- package/dist/cjs/src/types/persistence.js.map +0 -1
- package/dist/cjs/src/types/route.d.ts.map +0 -1
- package/dist/cjs/src/types/routing.d.ts.map +0 -1
- package/dist/cjs/src/types/schema.d.ts.map +0 -1
- package/dist/cjs/src/types/session.d.ts.map +0 -1
- package/dist/cjs/src/types/session.js.map +0 -1
- package/dist/cjs/src/types/template.d.ts +0 -30
- package/dist/cjs/src/types/template.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js.map +0 -1
- package/dist/cjs/src/utils/clone.d.ts.map +0 -1
- package/dist/cjs/src/utils/clone.js.map +0 -1
- package/dist/cjs/src/utils/event.d.ts.map +0 -1
- package/dist/cjs/src/utils/event.js.map +0 -1
- package/dist/cjs/src/utils/history.d.ts.map +0 -1
- package/dist/cjs/src/utils/history.js.map +0 -1
- package/dist/cjs/src/utils/id.d.ts.map +0 -1
- package/dist/cjs/src/utils/id.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/logger.d.ts.map +0 -1
- package/dist/cjs/src/utils/logger.js.map +0 -1
- package/dist/cjs/src/utils/retry.d.ts.map +0 -1
- package/dist/cjs/src/utils/retry.js.map +0 -1
- package/dist/cjs/src/utils/session.d.ts.map +0 -1
- package/dist/cjs/src/utils/session.js.map +0 -1
- package/dist/cjs/src/utils/template.d.ts.map +0 -1
- package/dist/cjs/src/utils/template.js.map +0 -1
- package/dist/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/core/Agent.d.ts.map +0 -1
- package/dist/src/core/Agent.js.map +0 -1
- package/dist/src/core/Events.js.map +0 -1
- package/dist/src/core/PersistenceManager.js.map +0 -1
- package/dist/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/src/core/PromptComposer.js.map +0 -1
- package/dist/src/core/ResponseEngine.js +0 -80
- package/dist/src/core/ResponseEngine.js.map +0 -1
- package/dist/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/src/core/ResponseModal.js.map +0 -1
- package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/src/core/ResponsePipeline.js.map +0 -1
- package/dist/src/core/Route.d.ts.map +0 -1
- package/dist/src/core/Route.js.map +0 -1
- package/dist/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/src/core/RoutingEngine.js.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolManager.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/GeminiProvider.js.map +0 -1
- package/dist/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/types/agent.d.ts.map +0 -1
- package/dist/src/types/agent.js.map +0 -1
- package/dist/src/types/history.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/persistence.js.map +0 -1
- package/dist/src/types/route.d.ts.map +0 -1
- package/dist/src/types/template.d.ts +0 -30
- package/dist/src/types/template.d.ts.map +0 -1
- package/dist/src/types/tool.js.map +0 -1
- package/dist/src/utils/clone.js.map +0 -1
- package/dist/src/utils/event.js.map +0 -1
- package/dist/src/utils/history.js.map +0 -1
- package/dist/src/utils/id.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/session.js.map +0 -1
- package/dist/src/utils/template.d.ts.map +0 -1
- package/dist/src/utils/template.js.map +0 -1
- /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
- /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
- /package/dist/cjs/{src/constants → constants}/index.js +0 -0
- /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/Events.js +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
- /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.js +0 -0
- /package/dist/cjs/{src/types → types}/agent.js +0 -0
- /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/ai.js +0 -0
- /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/history.js +0 -0
- /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/persistence.js +0 -0
- /package/dist/cjs/{src/types → types}/route.js +0 -0
- /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/routing.js +0 -0
- /package/dist/{src → cjs}/types/routing.js.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.js +0 -0
- /package/dist/{src → cjs}/types/schema.js.map +0 -0
- /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/session.js +0 -0
- /package/dist/cjs/{src/types → types}/template.js +0 -0
- /package/dist/{src → cjs}/types/template.js.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.js +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
- /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/event.js +0 -0
- /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/history.js +0 -0
- /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/id.js +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
- /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/session.js +0 -0
- /package/dist/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src/constants → constants}/index.js +0 -0
- /package/dist/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src/core → core}/Events.js +0 -0
- /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.js +0 -0
- /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src/core → core}/ToolManager.js +0 -0
- /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.js +0 -0
- /package/dist/{src/types → types}/agent.js +0 -0
- /package/dist/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src/types → types}/ai.js +0 -0
- /package/dist/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src/types → types}/history.js +0 -0
- /package/dist/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src/types → types}/persistence.js +0 -0
- /package/dist/{src/types → types}/route.js +0 -0
- /package/dist/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src/types → types}/routing.js +0 -0
- /package/dist/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src/types → types}/schema.js +0 -0
- /package/dist/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src/types → types}/session.js +0 -0
- /package/dist/{src/types → types}/template.js +0 -0
- /package/dist/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src/types → types}/tool.js +0 -0
- /package/dist/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src/utils → utils}/clone.js +0 -0
- /package/dist/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src/utils → utils}/event.js +0 -0
- /package/dist/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src/utils → utils}/history.js +0 -0
- /package/dist/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src/utils → utils}/id.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src/utils → utils}/session.js +0 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mixed Array Conditions Example
|
|
3
|
+
*
|
|
4
|
+
* This example demonstrates using mixed array conditions that combine both
|
|
5
|
+
* AI context strings and programmatic functions for sophisticated routing logic.
|
|
6
|
+
* This hybrid approach provides the best of both worlds.
|
|
7
|
+
*
|
|
8
|
+
* Key concepts:
|
|
9
|
+
* - Array conditions combine strings and functions
|
|
10
|
+
* - Strings provide AI context for decision making
|
|
11
|
+
* - Functions provide programmatic validation
|
|
12
|
+
* - AND logic for when conditions (all must be true)
|
|
13
|
+
* - OR logic for skipIf conditions (any can trigger skip)
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import {
|
|
17
|
+
Agent,
|
|
18
|
+
GeminiProvider,
|
|
19
|
+
type Guideline,
|
|
20
|
+
} from "../../src/index";
|
|
21
|
+
|
|
22
|
+
// Context for a healthcare appointment system
|
|
23
|
+
interface HealthcareContext {
|
|
24
|
+
patientId: string;
|
|
25
|
+
patientType: "new" | "returning" | "emergency";
|
|
26
|
+
insuranceVerified: boolean;
|
|
27
|
+
lastVisit?: string;
|
|
28
|
+
medicalHistory: string[];
|
|
29
|
+
currentSymptoms?: string[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Appointment data schema
|
|
33
|
+
interface AppointmentData {
|
|
34
|
+
appointmentType?: "consultation" | "followup" | "emergency" | "routine";
|
|
35
|
+
preferredDate?: string;
|
|
36
|
+
preferredTime?: string;
|
|
37
|
+
symptoms?: string;
|
|
38
|
+
urgencyLevel?: "low" | "medium" | "high" | "critical";
|
|
39
|
+
doctorPreference?: string;
|
|
40
|
+
insuranceApproved?: boolean;
|
|
41
|
+
appointmentConfirmed?: boolean;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const appointmentSchema = {
|
|
45
|
+
type: "object",
|
|
46
|
+
properties: {
|
|
47
|
+
appointmentType: { type: "string", enum: ["consultation", "followup", "emergency", "routine"] },
|
|
48
|
+
preferredDate: { type: "string" },
|
|
49
|
+
preferredTime: { type: "string" },
|
|
50
|
+
symptoms: { type: "string" },
|
|
51
|
+
urgencyLevel: { type: "string", enum: ["low", "medium", "high", "critical"] },
|
|
52
|
+
doctorPreference: { type: "string" },
|
|
53
|
+
insuranceApproved: { type: "boolean" },
|
|
54
|
+
appointmentConfirmed: { type: "boolean" },
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// Create agent with mixed array condition examples
|
|
59
|
+
const agent = new Agent<HealthcareContext, AppointmentData>({
|
|
60
|
+
name: "HealthcareBot",
|
|
61
|
+
description: "A healthcare appointment bot using mixed condition logic",
|
|
62
|
+
provider: new GeminiProvider({
|
|
63
|
+
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
64
|
+
model: "models/gemini-2.5-flash",
|
|
65
|
+
}),
|
|
66
|
+
context: {
|
|
67
|
+
patientId: "pat_12345",
|
|
68
|
+
patientType: "returning",
|
|
69
|
+
insuranceVerified: true,
|
|
70
|
+
lastVisit: "2024-09-15",
|
|
71
|
+
medicalHistory: ["hypertension", "diabetes"],
|
|
72
|
+
currentSymptoms: ["headache", "fatigue"],
|
|
73
|
+
},
|
|
74
|
+
schema: appointmentSchema,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Guidelines with mixed array conditions
|
|
78
|
+
const guidelines: Guideline<HealthcareContext, AppointmentData>[] = [
|
|
79
|
+
{
|
|
80
|
+
// Mixed condition: AI context + programmatic validation
|
|
81
|
+
condition: [
|
|
82
|
+
"Patient mentions severe pain or emergency symptoms",
|
|
83
|
+
(ctx) => ctx.data?.urgencyLevel === "critical" || ctx.data?.urgencyLevel === "high"
|
|
84
|
+
],
|
|
85
|
+
action: "Immediately escalate to emergency protocols and offer urgent appointment slots",
|
|
86
|
+
tags: ["emergency", "urgent"],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
// Mixed condition: AI understanding + insurance check
|
|
90
|
+
condition: [
|
|
91
|
+
"Patient asks about costs or insurance coverage",
|
|
92
|
+
(ctx) => ctx.context?.insuranceVerified === false
|
|
93
|
+
],
|
|
94
|
+
action: "Provide insurance verification assistance and cost estimates",
|
|
95
|
+
tags: ["insurance", "billing"],
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
// Mixed condition: AI context + medical history check
|
|
99
|
+
condition: [
|
|
100
|
+
"Patient mentions chronic condition management",
|
|
101
|
+
(ctx) => (ctx.context?.medicalHistory?.length || 0) > 0
|
|
102
|
+
],
|
|
103
|
+
action: "Reference their medical history and suggest appropriate follow-up care",
|
|
104
|
+
tags: ["chronic-care", "history"],
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
// Add guidelines to agent
|
|
109
|
+
guidelines.forEach(guideline => agent.createGuideline(guideline));
|
|
110
|
+
|
|
111
|
+
// Route 1: Emergency Appointment - Mixed array condition
|
|
112
|
+
agent.createRoute({
|
|
113
|
+
title: "Emergency Appointment",
|
|
114
|
+
description: "Handle urgent medical appointments",
|
|
115
|
+
// Mixed when condition: AI context + programmatic urgency check
|
|
116
|
+
when: [
|
|
117
|
+
"Patient has urgent medical needs or emergency symptoms",
|
|
118
|
+
"Patient mentions severe pain, difficulty breathing, or critical symptoms",
|
|
119
|
+
(ctx) => ctx.data?.urgencyLevel === "critical" || ctx.data?.urgencyLevel === "high"
|
|
120
|
+
],
|
|
121
|
+
// Skip if already confirmed or if it's a routine matter
|
|
122
|
+
skipIf: [
|
|
123
|
+
"appointment already confirmed or patient needs routine care",
|
|
124
|
+
(ctx) => ctx.data?.appointmentConfirmed === true,
|
|
125
|
+
(ctx) => ctx.data?.urgencyLevel === "low"
|
|
126
|
+
],
|
|
127
|
+
requiredFields: ["appointmentType", "symptoms", "urgencyLevel"],
|
|
128
|
+
steps: [
|
|
129
|
+
{
|
|
130
|
+
id: "assess_emergency",
|
|
131
|
+
description: "Assess emergency situation",
|
|
132
|
+
prompt: "I understand this is urgent. Can you describe your symptoms so I can find the earliest available appointment?",
|
|
133
|
+
collect: ["symptoms", "urgencyLevel"],
|
|
134
|
+
// Mixed when condition for step
|
|
135
|
+
when: [
|
|
136
|
+
"need to understand the urgency of the situation",
|
|
137
|
+
(ctx) => !ctx.data?.symptoms || !ctx.data?.urgencyLevel
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
id: "emergency_scheduling",
|
|
142
|
+
description: "Schedule emergency appointment",
|
|
143
|
+
prompt: "Based on your symptoms, I'm scheduling you for an emergency appointment. Let me find the next available slot.",
|
|
144
|
+
requires: ["symptoms", "urgencyLevel"],
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// Route 2: Follow-up Appointment - Mixed array condition
|
|
150
|
+
agent.createRoute({
|
|
151
|
+
title: "Follow-up Appointment",
|
|
152
|
+
description: "Schedule follow-up appointments for existing patients",
|
|
153
|
+
// Mixed when condition: AI context + patient history check
|
|
154
|
+
when: [
|
|
155
|
+
"Patient wants to schedule a follow-up appointment",
|
|
156
|
+
"Patient mentions previous visit or ongoing treatment",
|
|
157
|
+
(ctx) => ctx.context?.patientType === "returning",
|
|
158
|
+
(ctx) => !!ctx.context?.lastVisit
|
|
159
|
+
],
|
|
160
|
+
// Skip if it's clearly an emergency or new patient
|
|
161
|
+
skipIf: [
|
|
162
|
+
"patient has emergency symptoms or is a new patient",
|
|
163
|
+
(ctx) => ctx.context?.patientType === "new",
|
|
164
|
+
(ctx) => ctx.data?.urgencyLevel === "critical"
|
|
165
|
+
],
|
|
166
|
+
requiredFields: ["appointmentType", "preferredDate"],
|
|
167
|
+
optionalFields: ["preferredTime", "doctorPreference"],
|
|
168
|
+
steps: [
|
|
169
|
+
{
|
|
170
|
+
id: "review_history",
|
|
171
|
+
description: "Review patient history",
|
|
172
|
+
prompt: "I see you were last here on your previous visit. How are you feeling since then?",
|
|
173
|
+
// Mixed when condition: AI context + history availability
|
|
174
|
+
when: [
|
|
175
|
+
"need to understand patient's current condition",
|
|
176
|
+
(ctx) => !!ctx.context?.lastVisit
|
|
177
|
+
],
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
id: "schedule_followup",
|
|
181
|
+
description: "Schedule follow-up appointment",
|
|
182
|
+
prompt: "When would you like to schedule your follow-up appointment?",
|
|
183
|
+
collect: ["preferredDate", "preferredTime"],
|
|
184
|
+
// Mixed skipIf: AI context + data check
|
|
185
|
+
skipIf: [
|
|
186
|
+
"appointment details already provided",
|
|
187
|
+
(ctx) => !!ctx.data?.preferredDate && !!ctx.data?.preferredTime
|
|
188
|
+
],
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
// Route 3: New Patient Onboarding - Mixed array condition
|
|
194
|
+
agent.createRoute({
|
|
195
|
+
title: "New Patient Onboarding",
|
|
196
|
+
description: "Handle new patient registration and first appointment",
|
|
197
|
+
// Mixed when condition: AI context + patient type check
|
|
198
|
+
when: [
|
|
199
|
+
"Patient is new to the practice or needs to register",
|
|
200
|
+
"Patient mentions first visit or being a new patient",
|
|
201
|
+
(ctx) => ctx.context?.patientType === "new"
|
|
202
|
+
],
|
|
203
|
+
// Skip if patient is already established
|
|
204
|
+
skipIf: [
|
|
205
|
+
"patient is already registered and has visit history",
|
|
206
|
+
(ctx) => ctx.context?.patientType === "returning",
|
|
207
|
+
(ctx) => (ctx.context?.medicalHistory?.length || 0) > 0
|
|
208
|
+
],
|
|
209
|
+
requiredFields: ["appointmentType"],
|
|
210
|
+
optionalFields: ["symptoms", "doctorPreference"],
|
|
211
|
+
steps: [
|
|
212
|
+
{
|
|
213
|
+
id: "welcome_new_patient",
|
|
214
|
+
description: "Welcome new patient",
|
|
215
|
+
prompt: "Welcome to our practice! As a new patient, I'll help you get registered and schedule your first appointment.",
|
|
216
|
+
// Mixed when condition for welcoming
|
|
217
|
+
when: [
|
|
218
|
+
"patient needs welcome and orientation",
|
|
219
|
+
(ctx) => ctx.context?.patientType === "new"
|
|
220
|
+
],
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
id: "collect_appointment_info",
|
|
224
|
+
description: "Collect appointment information",
|
|
225
|
+
prompt: "What type of appointment would you like to schedule?",
|
|
226
|
+
collect: ["appointmentType"],
|
|
227
|
+
// Mixed skipIf: AI context + data availability
|
|
228
|
+
skipIf: [
|
|
229
|
+
"appointment type already specified",
|
|
230
|
+
(ctx) => !!ctx.data?.appointmentType
|
|
231
|
+
],
|
|
232
|
+
},
|
|
233
|
+
],
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
// Route 4: Insurance Verification - Mixed array condition
|
|
237
|
+
agent.createRoute({
|
|
238
|
+
title: "Insurance Verification",
|
|
239
|
+
description: "Handle insurance verification and approval",
|
|
240
|
+
// Mixed when condition: AI context + insurance status check
|
|
241
|
+
when: [
|
|
242
|
+
"Patient asks about insurance coverage or verification",
|
|
243
|
+
"Patient mentions insurance concerns or billing questions",
|
|
244
|
+
(ctx) => ctx.context?.insuranceVerified === false,
|
|
245
|
+
(ctx) => !ctx.data?.insuranceApproved
|
|
246
|
+
],
|
|
247
|
+
// Skip if insurance is already verified
|
|
248
|
+
skipIf: [
|
|
249
|
+
"insurance already verified and approved",
|
|
250
|
+
(ctx) => ctx.context?.insuranceVerified === true,
|
|
251
|
+
(ctx) => ctx.data?.insuranceApproved === true
|
|
252
|
+
],
|
|
253
|
+
optionalFields: ["insuranceApproved"],
|
|
254
|
+
steps: [
|
|
255
|
+
{
|
|
256
|
+
id: "verify_insurance",
|
|
257
|
+
description: "Verify insurance coverage",
|
|
258
|
+
prompt: "Let me verify your insurance coverage for this appointment.",
|
|
259
|
+
collect: ["insuranceApproved"],
|
|
260
|
+
// Mixed when condition: AI context + verification needed
|
|
261
|
+
when: [
|
|
262
|
+
"insurance verification is required",
|
|
263
|
+
(ctx) => ctx.context?.insuranceVerified === false
|
|
264
|
+
],
|
|
265
|
+
},
|
|
266
|
+
],
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// Route 5: Routine Appointment - Mixed array condition
|
|
270
|
+
agent.createRoute({
|
|
271
|
+
title: "Routine Appointment",
|
|
272
|
+
description: "Schedule routine check-ups and preventive care",
|
|
273
|
+
// Mixed when condition: AI context + routine care indicators
|
|
274
|
+
when: [
|
|
275
|
+
"Patient wants routine check-up or preventive care",
|
|
276
|
+
"Patient mentions annual exam, screening, or wellness visit",
|
|
277
|
+
(ctx) => ctx.data?.urgencyLevel === "low" || !ctx.data?.urgencyLevel,
|
|
278
|
+
(ctx) => !ctx.context?.currentSymptoms || ctx.context.currentSymptoms.length === 0
|
|
279
|
+
],
|
|
280
|
+
// Skip if urgent care is needed
|
|
281
|
+
skipIf: [
|
|
282
|
+
"patient has urgent symptoms or emergency needs",
|
|
283
|
+
(ctx) => ctx.data?.urgencyLevel === "high" || ctx.data?.urgencyLevel === "critical",
|
|
284
|
+
(ctx) => (ctx.context?.currentSymptoms?.length || 0) > 2
|
|
285
|
+
],
|
|
286
|
+
requiredFields: ["appointmentType", "preferredDate"],
|
|
287
|
+
steps: [
|
|
288
|
+
{
|
|
289
|
+
id: "routine_scheduling",
|
|
290
|
+
description: "Schedule routine appointment",
|
|
291
|
+
prompt: "I'd be happy to help you schedule a routine appointment. When would work best for you?",
|
|
292
|
+
collect: ["preferredDate", "preferredTime"],
|
|
293
|
+
// Mixed when condition: AI context + scheduling needs
|
|
294
|
+
when: [
|
|
295
|
+
"need to find convenient appointment time",
|
|
296
|
+
(ctx) => !ctx.data?.preferredDate
|
|
297
|
+
],
|
|
298
|
+
},
|
|
299
|
+
],
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
// Route 6: Appointment Confirmation - Mixed array condition
|
|
303
|
+
agent.createRoute({
|
|
304
|
+
title: "Appointment Confirmation",
|
|
305
|
+
description: "Confirm and finalize appointment details",
|
|
306
|
+
// Mixed when condition: AI context + completion readiness
|
|
307
|
+
when: [
|
|
308
|
+
"Ready to confirm appointment with all details collected",
|
|
309
|
+
"Patient has provided necessary information for scheduling",
|
|
310
|
+
(ctx) => !!ctx.data?.appointmentType && !!ctx.data?.preferredDate,
|
|
311
|
+
(ctx) => !ctx.data?.appointmentConfirmed
|
|
312
|
+
],
|
|
313
|
+
// Skip if already confirmed or missing critical info
|
|
314
|
+
skipIf: [
|
|
315
|
+
"appointment already confirmed or missing required information",
|
|
316
|
+
(ctx) => ctx.data?.appointmentConfirmed === true,
|
|
317
|
+
(ctx) => !ctx.data?.appointmentType
|
|
318
|
+
],
|
|
319
|
+
steps: [
|
|
320
|
+
{
|
|
321
|
+
id: "confirm_appointment",
|
|
322
|
+
description: "Confirm appointment details",
|
|
323
|
+
prompt: "Perfect! Let me confirm your appointment details and send you a confirmation.",
|
|
324
|
+
requires: ["appointmentType", "preferredDate"],
|
|
325
|
+
// Mixed when condition: AI context + confirmation readiness
|
|
326
|
+
when: [
|
|
327
|
+
"all required information collected for confirmation",
|
|
328
|
+
(ctx) => !!ctx.data?.appointmentType && !!ctx.data?.preferredDate
|
|
329
|
+
],
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
// Demonstration function
|
|
335
|
+
async function demonstrateMixedArrayConditions() {
|
|
336
|
+
console.log("=== Mixed Array Conditions Demo ===\n");
|
|
337
|
+
console.log("This demo shows how mixed conditions combine AI context with programmatic logic.\n");
|
|
338
|
+
|
|
339
|
+
const testScenarios = [
|
|
340
|
+
{
|
|
341
|
+
name: "Emergency Situation",
|
|
342
|
+
context: {
|
|
343
|
+
patientType: "returning" as const,
|
|
344
|
+
insuranceVerified: true,
|
|
345
|
+
currentSymptoms: ["chest pain", "shortness of breath"]
|
|
346
|
+
},
|
|
347
|
+
data: { urgencyLevel: "critical" as const },
|
|
348
|
+
message: "I'm having severe chest pain and trouble breathing",
|
|
349
|
+
expectedRoute: "Emergency Appointment"
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
name: "Follow-up Visit",
|
|
353
|
+
context: {
|
|
354
|
+
patientType: "returning" as const,
|
|
355
|
+
insuranceVerified: true,
|
|
356
|
+
lastVisit: "2024-10-01",
|
|
357
|
+
medicalHistory: ["diabetes"]
|
|
358
|
+
},
|
|
359
|
+
message: "I need to schedule a follow-up for my diabetes check",
|
|
360
|
+
expectedRoute: "Follow-up Appointment"
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
name: "New Patient",
|
|
364
|
+
context: {
|
|
365
|
+
patientType: "new" as const,
|
|
366
|
+
insuranceVerified: false,
|
|
367
|
+
medicalHistory: []
|
|
368
|
+
},
|
|
369
|
+
message: "Hi, I'm new to this practice and need to schedule my first appointment",
|
|
370
|
+
expectedRoute: "New Patient Onboarding"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
name: "Insurance Issue",
|
|
374
|
+
context: {
|
|
375
|
+
patientType: "returning" as const,
|
|
376
|
+
insuranceVerified: false
|
|
377
|
+
},
|
|
378
|
+
message: "I'm not sure if my insurance covers this appointment",
|
|
379
|
+
expectedRoute: "Insurance Verification"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
name: "Routine Check-up",
|
|
383
|
+
context: {
|
|
384
|
+
patientType: "returning" as const,
|
|
385
|
+
insuranceVerified: true,
|
|
386
|
+
currentSymptoms: []
|
|
387
|
+
},
|
|
388
|
+
data: { urgencyLevel: "low" as const },
|
|
389
|
+
message: "I'd like to schedule my annual physical exam",
|
|
390
|
+
expectedRoute: "Routine Appointment"
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
name: "Ready for Confirmation",
|
|
394
|
+
context: {
|
|
395
|
+
patientType: "returning" as const,
|
|
396
|
+
insuranceVerified: true
|
|
397
|
+
},
|
|
398
|
+
data: {
|
|
399
|
+
appointmentType: "routine" as const,
|
|
400
|
+
preferredDate: "2024-11-15",
|
|
401
|
+
preferredTime: "10:00 AM"
|
|
402
|
+
},
|
|
403
|
+
message: "Yes, that appointment time works for me",
|
|
404
|
+
expectedRoute: "Appointment Confirmation"
|
|
405
|
+
},
|
|
406
|
+
];
|
|
407
|
+
|
|
408
|
+
for (const scenario of testScenarios) {
|
|
409
|
+
console.log(`🔍 Testing: ${scenario.name}`);
|
|
410
|
+
console.log(`📝 Message: "${scenario.message}"`);
|
|
411
|
+
|
|
412
|
+
// Create agent with specific context for this scenario
|
|
413
|
+
const testAgent = new Agent<HealthcareContext, AppointmentData>({
|
|
414
|
+
name: "TestHealthBot",
|
|
415
|
+
description: "Test bot for mixed conditions",
|
|
416
|
+
provider: new GeminiProvider({
|
|
417
|
+
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
418
|
+
model: "models/gemini-2.5-flash",
|
|
419
|
+
}),
|
|
420
|
+
context: {
|
|
421
|
+
patientId: "test_patient",
|
|
422
|
+
medicalHistory: [],
|
|
423
|
+
...scenario.context,
|
|
424
|
+
},
|
|
425
|
+
schema: appointmentSchema,
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
// Add guidelines to test agent
|
|
429
|
+
guidelines.forEach(guideline => testAgent.createGuideline(guideline));
|
|
430
|
+
|
|
431
|
+
try {
|
|
432
|
+
const response = await testAgent.respond({
|
|
433
|
+
history: [
|
|
434
|
+
{
|
|
435
|
+
role: "user",
|
|
436
|
+
content: scenario.message,
|
|
437
|
+
name: "Patient",
|
|
438
|
+
},
|
|
439
|
+
],
|
|
440
|
+
session: scenario.data ? {
|
|
441
|
+
id: "test-session",
|
|
442
|
+
data: scenario.data,
|
|
443
|
+
} : undefined,
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
console.log(`🎯 Routed to: ${response.session?.currentRoute?.title || "No route"}`);
|
|
447
|
+
console.log(`✅ Expected: ${scenario.expectedRoute}`);
|
|
448
|
+
console.log(`🤖 Response: ${response.message.substring(0, 100)}...`);
|
|
449
|
+
console.log();
|
|
450
|
+
} catch (error) {
|
|
451
|
+
console.log(`❌ Error: ${error}`);
|
|
452
|
+
console.log();
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
console.log("💡 Key Benefits of Mixed Array Conditions:");
|
|
457
|
+
console.log(" - Combines AI understanding with programmatic validation");
|
|
458
|
+
console.log(" - Flexible routing that adapts to both context and data");
|
|
459
|
+
console.log(" - Natural language processing enhanced by business logic");
|
|
460
|
+
console.log(" - Robust decision making with multiple validation layers");
|
|
461
|
+
console.log(" - Best of both worlds: AI context + precise logic");
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Run demonstration
|
|
465
|
+
async function main() {
|
|
466
|
+
try {
|
|
467
|
+
await demonstrateMixedArrayConditions();
|
|
468
|
+
} catch (error) {
|
|
469
|
+
console.error("Error:", error);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
474
|
+
main().catch(console.error);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
export { agent, demonstrateMixedArrayConditions };
|