@falai/agent 0.8.1 → 0.9.0-alpha-2
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 +332 -147
- package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/cjs/src/core/Agent.d.ts +223 -0
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1660 -0
- package/dist/cjs/src/core/Agent.js.map +1 -0
- package/dist/cjs/src/core/Events.d.ts +26 -0
- package/dist/cjs/src/core/Events.d.ts.map +1 -0
- package/dist/cjs/src/core/Events.js +144 -0
- package/dist/cjs/src/core/Events.js.map +1 -0
- package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +73 -20
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +84 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +171 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +514 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +145 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/src/core/Route.js +343 -0
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts +129 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +215 -117
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +86 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +217 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +96 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +206 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts +45 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +30 -19
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
- package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/{index.js → src/index.js} +21 -19
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/{types → src/types}/agent.d.ts +80 -41
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/{types → cjs/src/types}/history.d.ts +76 -18
- package/dist/cjs/src/types/history.d.ts.map +1 -0
- package/dist/cjs/src/types/history.js +33 -0
- package/dist/cjs/src/types/history.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +20 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +30 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/{types → cjs/src/types}/persistence.d.ts +38 -23
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/src/types/route.d.ts +235 -0
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/route.js.map +1 -1
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/routing.js.map +1 -1
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/schema.js.map +1 -1
- package/dist/cjs/src/types/session.d.ts +65 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +30 -0
- package/dist/cjs/src/types/template.d.ts.map +1 -0
- package/dist/cjs/src/types/template.js +3 -0
- package/dist/cjs/src/types/template.js.map +1 -0
- package/dist/{types → cjs/src/types}/tool.d.ts +17 -13
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/tool.js.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts +8 -0
- package/dist/cjs/src/utils/clone.d.ts.map +1 -0
- package/dist/cjs/src/utils/clone.js +36 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/{utils → src/utils}/event.js +2 -2
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +31 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +128 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +13 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +49 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js.map +1 -0
- package/dist/cjs/src/utils/session.d.ts +51 -0
- package/dist/cjs/src/utils/session.d.ts.map +1 -0
- package/dist/cjs/{types → src/utils}/session.js +35 -32
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +107 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +283 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/core/Agent.d.ts +223 -0
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1656 -0
- package/dist/src/core/Agent.js.map +1 -0
- package/dist/src/core/Events.d.ts +26 -0
- package/dist/src/core/Events.d.ts.map +1 -0
- package/dist/src/core/Events.js +137 -0
- package/dist/src/core/Events.js.map +1 -0
- package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +71 -18
- package/dist/src/core/PersistenceManager.js.map +1 -0
- package/dist/src/core/PromptComposer.d.ts +27 -0
- package/dist/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/src/core/PromptComposer.js +153 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +32 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +80 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +171 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +510 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +145 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/src/core/Route.js +339 -0
- package/dist/src/core/Route.js.map +1 -0
- package/dist/src/core/RoutingEngine.d.ts +129 -0
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +211 -113
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +86 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +213 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +96 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +202 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolExecutor.d.ts +45 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +80 -0
- package/dist/src/core/ToolExecutor.js.map +1 -0
- package/dist/{cjs → src}/index.d.ts +7 -15
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -7
- package/dist/src/index.js.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/{types → src/types}/agent.d.ts +80 -41
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/{types → src/types}/ai.d.ts +7 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/{cjs → src}/types/ai.js.map +1 -1
- package/dist/{cjs → src}/types/history.d.ts +76 -18
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +30 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/types/index.d.ts +20 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +10 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/{cjs → src}/types/persistence.d.ts +38 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/src/types/route.d.ts +235 -0
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/{types → src/types}/route.js.map +1 -1
- package/dist/src/types/session.d.ts +65 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +30 -0
- package/dist/src/types/template.d.ts.map +1 -0
- package/dist/src/types/template.js +2 -0
- package/dist/src/types/template.js.map +1 -0
- package/dist/{cjs → src}/types/tool.d.ts +17 -13
- package/dist/src/types/tool.d.ts.map +1 -0
- package/dist/{types → src/types}/tool.js.map +1 -1
- package/dist/src/utils/clone.d.ts +8 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/clone.js +33 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/{cjs → src}/utils/event.d.ts +1 -1
- package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
- package/dist/{utils → src/utils}/event.js +1 -1
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +31 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +121 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +13 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +19 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/session.d.ts +51 -0
- package/dist/src/utils/session.d.ts.map +1 -0
- package/dist/{types → src/utils}/session.js +33 -32
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +107 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +276 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/README.md +174 -68
- package/docs/{API_REFERENCE.md → api/README.md} +925 -255
- package/docs/api/overview.md +952 -0
- package/docs/core/agent/README.md +787 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +175 -102
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +117 -69
- package/docs/core/ai-integration/prompt-composition.md +220 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +176 -0
- package/docs/core/conversation-flows/data-collection.md +623 -0
- package/docs/core/conversation-flows/route-dsl.md +502 -0
- package/docs/core/conversation-flows/routes.md +117 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +154 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +348 -0
- package/docs/core/tools/tool-definition.md +346 -0
- package/docs/core/tools/tool-execution.md +815 -0
- package/docs/core/tools/tool-scoping.md +628 -0
- package/docs/guides/getting-started/README.md +406 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +139 -95
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +244 -137
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +130 -84
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +116 -90
- package/examples/ai-providers/anthropic-integration.ts +384 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +57 -63
- package/examples/conversation-flows/completion-transitions.ts +277 -0
- package/examples/core-concepts/basic-agent.ts +443 -0
- package/examples/core-concepts/schema-driven-extraction.ts +305 -0
- package/examples/core-concepts/session-management.ts +406 -0
- package/examples/integrations/database-integration.ts +630 -0
- package/examples/integrations/healthcare-integration.ts +609 -0
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +199 -171
- package/examples/integrations/server-session-management.ts +307 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +215 -272
- package/examples/persistence/memory-sessions.ts +495 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/persistence/redis-persistence.ts +490 -0
- package/examples/tools/basic-tools.ts +561 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +128 -117
- package/package.json +14 -10
- package/src/adapters/MemoryAdapter.ts +74 -46
- package/src/adapters/MongoAdapter.ts +33 -24
- package/src/adapters/OpenSearchAdapter.ts +41 -37
- package/src/adapters/PostgreSQLAdapter.ts +35 -24
- package/src/adapters/PrismaAdapter.ts +69 -27
- package/src/adapters/RedisAdapter.ts +38 -26
- package/src/adapters/SQLiteAdapter.ts +32 -22
- package/src/core/Agent.ts +1431 -526
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +103 -49
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +128 -46
- package/src/core/ResponsePipeline.ts +830 -0
- package/src/core/Route.ts +222 -53
- package/src/core/RoutingEngine.ts +345 -229
- package/src/core/SessionManager.ts +265 -0
- package/src/core/Step.ts +157 -67
- package/src/core/ToolExecutor.ts +52 -43
- package/src/index.ts +31 -37
- package/src/providers/AnthropicProvider.ts +71 -5
- package/src/providers/GeminiProvider.ts +83 -2
- package/src/providers/OpenAIProvider.ts +95 -3
- package/src/providers/OpenRouterProvider.ts +102 -2
- package/src/types/agent.ts +81 -46
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +45 -7
- package/src/types/persistence.ts +45 -28
- package/src/types/route.ts +122 -57
- package/src/types/session.ts +20 -220
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +23 -19
- package/src/utils/clone.ts +36 -0
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +143 -0
- package/src/utils/index.ts +53 -0
- package/src/utils/session.ts +204 -0
- package/src/utils/template.ts +335 -0
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts +0 -197
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -966
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/DomainRegistry.d.ts +0 -36
- package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
- package/dist/cjs/core/DomainRegistry.js +0 -72
- package/dist/cjs/core/DomainRegistry.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -41
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -99
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -24
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -127
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -14
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -56
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -90
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -203
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -109
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -72
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -150
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/Tool.d.ts +0 -39
- package/dist/cjs/core/Tool.d.ts.map +0 -1
- package/dist/cjs/core/Tool.js +0 -34
- package/dist/cjs/core/Tool.js.map +0 -1
- package/dist/cjs/core/ToolExecutor.d.ts +0 -29
- package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/core/Transition.d.ts +0 -32
- package/dist/cjs/core/Transition.d.ts.map +0 -1
- package/dist/cjs/core/Transition.js +0 -89
- package/dist/cjs/core/Transition.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/types/agent.d.ts.map +0 -1
- package/dist/cjs/types/agent.js.map +0 -1
- package/dist/cjs/types/ai.d.ts.map +0 -1
- package/dist/cjs/types/history.d.ts.map +0 -1
- package/dist/cjs/types/history.js +0 -37
- package/dist/cjs/types/history.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -12
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -12
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -175
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/session.d.ts +0 -104
- package/dist/cjs/types/session.d.ts.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/types/tool.d.ts.map +0 -1
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/core/Agent.d.ts +0 -197
- package/dist/core/Agent.d.ts.map +0 -1
- package/dist/core/Agent.js +0 -962
- package/dist/core/Agent.js.map +0 -1
- package/dist/core/DomainRegistry.d.ts +0 -36
- package/dist/core/DomainRegistry.d.ts.map +0 -1
- package/dist/core/DomainRegistry.js +0 -68
- package/dist/core/DomainRegistry.js.map +0 -1
- package/dist/core/Events.d.ts +0 -41
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -94
- package/dist/core/Events.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -24
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -123
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -14
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -52
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/Route.d.ts +0 -90
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -199
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -109
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/core/Step.d.ts +0 -72
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -146
- package/dist/core/Step.js.map +0 -1
- package/dist/core/Tool.d.ts +0 -39
- package/dist/core/Tool.d.ts.map +0 -1
- package/dist/core/Tool.js +0 -31
- package/dist/core/Tool.js.map +0 -1
- package/dist/core/ToolExecutor.d.ts +0 -29
- package/dist/core/ToolExecutor.d.ts.map +0 -1
- package/dist/core/ToolExecutor.js +0 -69
- package/dist/core/ToolExecutor.js.map +0 -1
- package/dist/core/Transition.d.ts +0 -32
- package/dist/core/Transition.d.ts.map +0 -1
- package/dist/core/Transition.js +0 -85
- package/dist/core/Transition.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/providers/AnthropicProvider.js.map +0 -1
- package/dist/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/providers/GeminiProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/providers/OpenRouterProvider.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/ai.js.map +0 -1
- package/dist/types/history.d.ts.map +0 -1
- package/dist/types/history.js +0 -34
- package/dist/types/history.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/route.d.ts +0 -175
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -104
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js.map +0 -1
- package/dist/types/tool.d.ts.map +0 -1
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/docs/AGENT.md +0 -535
- package/docs/DOCS.md +0 -263
- package/docs/DOMAINS.md +0 -735
- package/docs/EXAMPLES.md +0 -467
- package/docs/GETTING_STARTED.md +0 -424
- package/docs/PERSISTENCE.md +0 -815
- package/docs/PROVIDERS.md +0 -612
- package/docs/ROUTES.md +0 -1085
- package/docs/STEPS.md +0 -883
- package/examples/business-onboarding.ts +0 -791
- package/examples/custom-database-persistence.ts +0 -574
- package/examples/declarative-agent.ts +0 -401
- package/examples/domain-scoping.ts +0 -366
- package/examples/healthcare-agent.ts +0 -511
- package/examples/redis-persistence.ts +0 -525
- package/examples/route-transitions.ts +0 -266
- package/examples/travel-agent.ts +0 -584
- package/src/core/DomainRegistry.ts +0 -80
- package/src/core/Tool.ts +0 -112
- package/src/core/Transition.ts +0 -115
- /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
- /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
- /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/cjs/{constants → src/constants}/index.js +0 -0
- /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/index.js +0 -0
- /package/dist/cjs/{types → src/types}/agent.js +0 -0
- /package/dist/cjs/{types → src/types}/ai.js +0 -0
- /package/dist/cjs/{types → src/types}/persistence.js +0 -0
- /package/dist/cjs/{types → src/types}/route.js +0 -0
- /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/routing.js +0 -0
- /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/schema.js +0 -0
- /package/dist/cjs/{types → src/types}/tool.js +0 -0
- /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/id.js +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
- /package/dist/{adapters → src/adapters}/index.js +0 -0
- /package/dist/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
- /package/dist/{constants → src/constants}/index.js +0 -0
- /package/dist/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
- /package/dist/{providers → src/providers}/index.js +0 -0
- /package/dist/{types → src/types}/agent.js +0 -0
- /package/dist/{types → src/types}/ai.js +0 -0
- /package/dist/{types → src/types}/persistence.js +0 -0
- /package/dist/{types → src/types}/route.js +0 -0
- /package/dist/{types → src/types}/routing.d.ts +0 -0
- /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
- /package/dist/{types → src/types}/routing.js +0 -0
- /package/dist/{cjs → src}/types/routing.js.map +0 -0
- /package/dist/{types → src/types}/schema.d.ts +0 -0
- /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
- /package/dist/{types → src/types}/schema.js +0 -0
- /package/dist/{cjs → src}/types/schema.js.map +0 -0
- /package/dist/{types → src/types}/tool.js +0 -0
- /package/dist/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/id.js +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/logger.js +0 -0
- /package/dist/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/retry.js +0 -0
- /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
|
@@ -1,27 +1,33 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Session Management
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
`@falai/agent`
|
|
5
|
+
The `@falai/agent` framework provides **automatic session management** through the `SessionManager` class, eliminating the need for manual session creation, persistence, and state management. Sessions are automatically created, loaded, and saved, allowing developers to focus on building conversation logic rather than managing session lifecycle.
|
|
6
6
|
|
|
7
7
|
## Core Design Principles
|
|
8
8
|
|
|
9
|
-
### 1. 🎯 Schema-First Data Extraction
|
|
9
|
+
### 1. 🎯 Agent-Level Schema-First Data Extraction
|
|
10
10
|
|
|
11
|
-
Define what data to collect upfront using JSON Schema, then extract it reliably:
|
|
11
|
+
Define what data to collect upfront using JSON Schema at the agent level, then extract it reliably across all routes:
|
|
12
12
|
|
|
13
13
|
```typescript
|
|
14
|
-
// Define your data contract
|
|
15
|
-
interface
|
|
14
|
+
// Define your agent-level data contract
|
|
15
|
+
interface TravelData {
|
|
16
16
|
destination: string;
|
|
17
17
|
departureDate: string;
|
|
18
18
|
passengers: number;
|
|
19
19
|
cabinClass: "economy" | "business" | "first";
|
|
20
|
+
hotelPreference?: string;
|
|
21
|
+
budgetRange?: string;
|
|
22
|
+
specialRequests?: string;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
// Agent with centralized schema
|
|
26
|
+
const agent = new Agent<{}, TravelData>({
|
|
27
|
+
name: "Travel Agent",
|
|
28
|
+
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
29
|
+
|
|
30
|
+
// Agent-level schema defines all possible data fields
|
|
25
31
|
schema: {
|
|
26
32
|
type: "object",
|
|
27
33
|
properties: {
|
|
@@ -33,73 +39,106 @@ const route = agent.createRoute<FlightData>({
|
|
|
33
39
|
enum: ["economy", "business", "first"],
|
|
34
40
|
default: "economy",
|
|
35
41
|
},
|
|
42
|
+
hotelPreference: { type: "string" },
|
|
43
|
+
budgetRange: { type: "string" },
|
|
44
|
+
specialRequests: { type: "string" }
|
|
36
45
|
},
|
|
37
46
|
required: ["destination", "departureDate", "passengers"],
|
|
38
|
-
}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// Routes specify required fields instead of schemas
|
|
51
|
+
const flightRoute = agent.createRoute({
|
|
52
|
+
title: "Book Flight",
|
|
53
|
+
description: "Help user book a flight",
|
|
54
|
+
requiredFields: ["destination", "departureDate", "passengers", "cabinClass"],
|
|
55
|
+
optionalFields: ["specialRequests"]
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const hotelRoute = agent.createRoute({
|
|
59
|
+
title: "Book Hotel",
|
|
60
|
+
description: "Help user book accommodation",
|
|
61
|
+
requiredFields: ["destination", "departureDate", "hotelPreference"],
|
|
62
|
+
optionalFields: ["budgetRange", "specialRequests"]
|
|
39
63
|
});
|
|
40
64
|
```
|
|
41
65
|
|
|
42
|
-
**Why?**
|
|
66
|
+
**Why?** Agent-level schema-first extraction provides:
|
|
43
67
|
|
|
44
|
-
- **Type Safety** - Full TypeScript types from definition to extraction
|
|
68
|
+
- **Type Safety** - Full TypeScript types from definition to extraction across all routes
|
|
45
69
|
- **Reliability** - Provider-enforced schemas, not prompt-based parsing
|
|
46
|
-
- **Predictability** - Same data structure every time
|
|
70
|
+
- **Predictability** - Same data structure every time, shared across routes
|
|
47
71
|
- **Efficiency** - Extract multiple fields in one LLM call
|
|
72
|
+
- **Cross-Route Data Sharing** - Data collected by any route is available to all routes
|
|
73
|
+
- **Route Completion** - Routes complete when their required fields are satisfied
|
|
48
74
|
|
|
49
|
-
### 2.
|
|
75
|
+
### 2. 🤖 Automatic Session Management
|
|
50
76
|
|
|
51
|
-
|
|
77
|
+
Sessions are automatically managed through the `SessionManager` class integrated into every `Agent`:
|
|
52
78
|
|
|
53
79
|
```typescript
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
80
|
+
// Server-side: Agent with automatic session management and agent-level data
|
|
81
|
+
const agent = new Agent<{}, TravelData>({
|
|
82
|
+
name: "Travel Agent",
|
|
83
|
+
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
84
|
+
persistence: { adapter: new PrismaAdapter({ prisma }) },
|
|
85
|
+
sessionId: "user-123", // Automatically loads or creates this session
|
|
86
|
+
|
|
87
|
+
// Agent-level schema
|
|
88
|
+
schema: { /* comprehensive travel data schema */ }
|
|
60
89
|
});
|
|
61
90
|
|
|
62
|
-
//
|
|
63
|
-
const response1 = await agent.respond(
|
|
64
|
-
session
|
|
91
|
+
// Simple conversation - no manual session management
|
|
92
|
+
const response1 = await agent.respond("I want to book a flight to Paris");
|
|
93
|
+
console.log(agent.session.id); // Session ID
|
|
94
|
+
console.log(agent.session.getData<TravelData>()); // Agent-level collected data
|
|
65
95
|
|
|
66
|
-
//
|
|
67
|
-
const response2 = await agent.respond(
|
|
68
|
-
|
|
96
|
+
// Continue conversation - session automatically maintained
|
|
97
|
+
const response2 = await agent.respond("Make that Tokyo instead");
|
|
98
|
+
// Session automatically updated with new data in agent-level structure
|
|
69
99
|
|
|
70
|
-
//
|
|
71
|
-
|
|
100
|
+
// Switch to hotel booking - data is shared
|
|
101
|
+
const response3 = await agent.respond("Also book me a hotel in Tokyo");
|
|
102
|
+
// Hotel route can access destination data collected by flight route
|
|
72
103
|
```
|
|
73
104
|
|
|
74
|
-
**
|
|
105
|
+
**SessionManager API:**
|
|
75
106
|
|
|
76
|
-
|
|
107
|
+
The `SessionManager` provides a clean API for session operations:
|
|
77
108
|
|
|
78
109
|
```typescript
|
|
79
|
-
//
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
110
|
+
// Access the session manager
|
|
111
|
+
const sessionManager = agent.session;
|
|
112
|
+
|
|
113
|
+
// Get or create session (works for existing, new, or auto-generated IDs)
|
|
114
|
+
await sessionManager.getOrCreate("user-123");
|
|
115
|
+
await sessionManager.getOrCreate(); // Auto-generates ID
|
|
116
|
+
|
|
117
|
+
// History management
|
|
118
|
+
await sessionManager.addMessage("user", "Hello");
|
|
119
|
+
await sessionManager.addMessage("assistant", "Hi there!");
|
|
120
|
+
const history = sessionManager.getHistory();
|
|
121
|
+
sessionManager.clearHistory();
|
|
122
|
+
|
|
123
|
+
// Data access
|
|
124
|
+
const data = sessionManager.getData<FlightData>();
|
|
125
|
+
await sessionManager.setData({ destination: "Paris" });
|
|
126
|
+
|
|
127
|
+
// Session operations
|
|
128
|
+
await sessionManager.save(); // Manual save (auto-saves on addMessage)
|
|
129
|
+
await sessionManager.delete();
|
|
130
|
+
const newSession = await sessionManager.reset(true); // Preserve history
|
|
94
131
|
```
|
|
95
132
|
|
|
96
|
-
**Why?**
|
|
133
|
+
**Why?** Automatic session management provides:
|
|
97
134
|
|
|
135
|
+
- **Zero Boilerplate** - No manual session creation or persistence code
|
|
136
|
+
- **Server-Friendly** - Perfect for stateless server environments
|
|
98
137
|
- **Always-on Routing** - Users can change their mind mid-conversation
|
|
99
138
|
- **Context Awareness** - Router sees current progress and collected data
|
|
100
|
-
- **Data Persistence** - Collected data
|
|
101
|
-
- **
|
|
102
|
-
- **Session Tracking** -
|
|
139
|
+
- **Data Persistence** - Collected data automatically saved and restored
|
|
140
|
+
- **History Management** - Conversation history automatically maintained
|
|
141
|
+
- **Session Tracking** - Easy session identification for client/server communication
|
|
103
142
|
|
|
104
143
|
### 3. 🔧 Code-Based Step Logic + AI-Driven Transitions
|
|
105
144
|
|
|
@@ -109,7 +148,7 @@ Use TypeScript functions for deterministic flow control AND text conditions for
|
|
|
109
148
|
// Step with smart bypassing based on collected data
|
|
110
149
|
const askDestination = route.initialStep.nextStep({
|
|
111
150
|
id: "ask_destination", // Optional: custom step ID
|
|
112
|
-
|
|
151
|
+
prompt: "Ask where they want to fly",
|
|
113
152
|
collect: ["destination"],
|
|
114
153
|
skipIf: (data) => !!data.destination, // Code-based condition!
|
|
115
154
|
condition: "Customer hasn't specified destination yet", // Text condition for AI
|
|
@@ -117,7 +156,7 @@ const askDestination = route.initialStep.nextStep({
|
|
|
117
156
|
|
|
118
157
|
const askDate = askDestination.nextStep({
|
|
119
158
|
id: "ask_date", // Optional: custom step ID for easier tracking
|
|
120
|
-
|
|
159
|
+
prompt: "Ask about travel dates",
|
|
121
160
|
collect: ["departureDate"],
|
|
122
161
|
skipIf: (data) => !!data.departureDate,
|
|
123
162
|
requires: ["destination"], // Prerequisites
|
|
@@ -133,7 +172,7 @@ You can optionally provide custom IDs for steps to make them easier to track and
|
|
|
133
172
|
```typescript
|
|
134
173
|
const confirmBooking = askDate.nextStep({
|
|
135
174
|
id: "confirm_booking", // ✅ Custom ID instead of auto-generated
|
|
136
|
-
|
|
175
|
+
prompt: "Confirm all booking details",
|
|
137
176
|
requires: ["destination", "departureDate", "passengers"],
|
|
138
177
|
});
|
|
139
178
|
```
|
|
@@ -170,9 +209,16 @@ If you don't provide an ID, one is automatically generated from the route ID and
|
|
|
170
209
|
Tools execute with full context including collected data:
|
|
171
210
|
|
|
172
211
|
```typescript
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
212
|
+
import { Tool } from "@falai/agent";
|
|
213
|
+
|
|
214
|
+
const searchFlights: Tool<Context, [], void, FlightData> = {
|
|
215
|
+
id: "search_flights",
|
|
216
|
+
description: "Search for available flights based on collected data",
|
|
217
|
+
parameters: {
|
|
218
|
+
type: "object",
|
|
219
|
+
properties: {},
|
|
220
|
+
},
|
|
221
|
+
handler: async (toolContext) => {
|
|
176
222
|
const { data, context, history } = toolContext;
|
|
177
223
|
|
|
178
224
|
// Access collected data directly
|
|
@@ -188,8 +234,8 @@ const searchFlights = defineTool<Context, [], void, FlightData>(
|
|
|
188
234
|
departureDateParsed: parseDate(data.departureDate),
|
|
189
235
|
},
|
|
190
236
|
};
|
|
191
|
-
}
|
|
192
|
-
|
|
237
|
+
},
|
|
238
|
+
};
|
|
193
239
|
```
|
|
194
240
|
|
|
195
241
|
**Why?** Tools with data access enable:
|
|
@@ -207,7 +253,10 @@ Routing happens every turn, allowing users to change direction:
|
|
|
207
253
|
// User starts booking a flight
|
|
208
254
|
const response1 = await agent.respond({
|
|
209
255
|
history: [
|
|
210
|
-
|
|
256
|
+
{
|
|
257
|
+
role: "user",
|
|
258
|
+
content: "I want to fly to Paris",
|
|
259
|
+
},
|
|
211
260
|
],
|
|
212
261
|
session,
|
|
213
262
|
});
|
|
@@ -216,11 +265,10 @@ const response1 = await agent.respond({
|
|
|
216
265
|
const response2 = await agent.respond({
|
|
217
266
|
history: [
|
|
218
267
|
...previousHistory,
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
"
|
|
222
|
-
|
|
223
|
-
),
|
|
268
|
+
{
|
|
269
|
+
role: "user",
|
|
270
|
+
content: "Actually, make that Tokyo instead",
|
|
271
|
+
},
|
|
224
272
|
],
|
|
225
273
|
session: response1.session, // Router sees context and switches appropriately
|
|
226
274
|
});
|
|
@@ -372,7 +420,7 @@ const bookingRoute = agent.createRoute<BookingData>({
|
|
|
372
420
|
|
|
373
421
|
bookingRoute.initialStep
|
|
374
422
|
.nextStep({
|
|
375
|
-
|
|
423
|
+
prompt: "Ask destination",
|
|
376
424
|
collect: ["destination"],
|
|
377
425
|
skipIf: (data) => !!data.destination,
|
|
378
426
|
})
|
|
@@ -381,7 +429,7 @@ bookingRoute.initialStep
|
|
|
381
429
|
requires: ["destination"],
|
|
382
430
|
})
|
|
383
431
|
.nextStep({
|
|
384
|
-
|
|
432
|
+
prompt: "Ask dates",
|
|
385
433
|
collect: ["dates"],
|
|
386
434
|
skipIf: (data) => !!data.dates,
|
|
387
435
|
});
|
|
@@ -399,7 +447,7 @@ const qnaRoute = agent.createRoute({
|
|
|
399
447
|
});
|
|
400
448
|
|
|
401
449
|
// Just use initial step
|
|
402
|
-
qnaRoute.initialStep.
|
|
450
|
+
qnaRoute.initialStep.prompt = "Answer from knowledge base";
|
|
403
451
|
```
|
|
404
452
|
|
|
405
453
|
### Mixed Architecture
|
|
@@ -436,9 +484,9 @@ This framework draws inspiration from:
|
|
|
436
484
|
|
|
437
485
|
## Further Reading
|
|
438
486
|
|
|
439
|
-
- [Getting Started Guide](
|
|
487
|
+
- [Getting Started Guide](../guides/getting-started/README.md) - Build your first agent
|
|
440
488
|
- [Session Step Guide](./CONTEXT_MANAGEMENT.md) - Session management patterns
|
|
441
|
-
- [API Reference](
|
|
489
|
+
- [API Reference](../api/README.md) - Complete API documentation
|
|
442
490
|
- [Examples](../examples/) - Real-world implementations
|
|
443
491
|
|
|
444
492
|
---
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Prompt Composition
|
|
2
|
+
|
|
3
|
+
@fali/agent automatically builds comprehensive prompts for AI providers by combining agent configuration, route context, conversation history, and current session state.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The `PromptComposer` class is responsible for constructing detailed prompts that provide AI models with all necessary context to make intelligent routing and response decisions.
|
|
8
|
+
|
|
9
|
+
## Prompt Structure
|
|
10
|
+
|
|
11
|
+
Prompts are built with multiple sections in a specific order:
|
|
12
|
+
|
|
13
|
+
1. **Agent Identity** - Core agent persona and personality
|
|
14
|
+
2. **Routing Overview** - Available routes and current context
|
|
15
|
+
3. **Knowledge Base** - Agent and route-specific knowledge
|
|
16
|
+
4. **Guidelines & Rules** - Behavioral constraints and preferences
|
|
17
|
+
5. **Conversation History** - Previous messages and context
|
|
18
|
+
6. **Current Session** - Active route, collected data, and step state
|
|
19
|
+
7. **Task-Specific Instructions** - Route-specific prompts and schemas
|
|
20
|
+
|
|
21
|
+
## Agent Identity Section
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Agent configuration contributes to identity
|
|
25
|
+
const agent = new Agent({
|
|
26
|
+
name: "TravelBot",
|
|
27
|
+
description: "AI assistant for travel planning and booking",
|
|
28
|
+
goal: "Help users plan perfect trips efficiently",
|
|
29
|
+
personality: "Friendly, knowledgeable, and efficient",
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This generates:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
You are TravelBot, an AI assistant for travel planning and booking.
|
|
37
|
+
Your goal is to help users plan perfect trips efficiently.
|
|
38
|
+
You are friendly, knowledgeable, and efficient.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Routing Overview Section
|
|
42
|
+
|
|
43
|
+
Provides the AI with information about available conversation routes:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Available Routes:
|
|
47
|
+
1. Flight Booking - Help users book flights
|
|
48
|
+
2. Hotel Reservation - Find and book accommodations
|
|
49
|
+
3. Travel Itinerary - Create detailed trip plans
|
|
50
|
+
4. Customer Support - Handle travel-related questions
|
|
51
|
+
|
|
52
|
+
Current Route: Flight Booking
|
|
53
|
+
Route Description: Help users book flights with the best options
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Knowledge Base Integration
|
|
57
|
+
|
|
58
|
+
Agent and route knowledge bases are formatted and included:
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
const agent = new Agent({
|
|
62
|
+
knowledgeBase: {
|
|
63
|
+
company: "Acme Travel - Premium travel services since 1995",
|
|
64
|
+
policies: {
|
|
65
|
+
cancellation: "Free cancellation up to 24 hours before departure",
|
|
66
|
+
refund: "Refunds processed within 3-5 business days",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Guidelines & Rules Section
|
|
73
|
+
|
|
74
|
+
Combines agent-level and route-level behavioral constraints:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Guidelines:
|
|
78
|
+
- Always be polite and helpful
|
|
79
|
+
- Ask clarifying questions when needed
|
|
80
|
+
- Provide options rather than single recommendations
|
|
81
|
+
|
|
82
|
+
Rules for this route:
|
|
83
|
+
- Always confirm flight details before booking
|
|
84
|
+
- Never share personal information
|
|
85
|
+
- Use specific date formats (YYYY-MM-DD)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Conversation History
|
|
89
|
+
|
|
90
|
+
Recent conversation history with context updates:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Previous Messages:
|
|
94
|
+
User: I want to book a flight to Paris
|
|
95
|
+
Assistant: I'd be happy to help you book a flight to Paris. When would you like to travel?
|
|
96
|
+
|
|
97
|
+
User: Next week, for 3 nights
|
|
98
|
+
Assistant: Great! Let me check flights for next week. Could you tell me which airport you'd like to depart from?
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Session State
|
|
102
|
+
|
|
103
|
+
Current session information including:
|
|
104
|
+
|
|
105
|
+
- Active route and step
|
|
106
|
+
- Agent-level collected data (with privacy filtering)
|
|
107
|
+
- Route progress and completion status
|
|
108
|
+
- Cross-route data availability
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Current Session:
|
|
112
|
+
- Route: Flight Booking (2/3 required fields collected)
|
|
113
|
+
- Step: ask_passengers
|
|
114
|
+
- Agent Data: { destination: "Paris", departureDate: "2025-01-15" }
|
|
115
|
+
- Missing Required: passengers
|
|
116
|
+
- Available from other routes: { hotelPreference: "luxury" }
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Dynamic Schema Generation
|
|
120
|
+
|
|
121
|
+
For data collection steps, the prompt includes agent-level JSON schemas:
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// Agent-level schema
|
|
125
|
+
const agent = new Agent<{}, TravelData>({
|
|
126
|
+
schema: {
|
|
127
|
+
type: "object",
|
|
128
|
+
properties: {
|
|
129
|
+
destination: { type: "string" },
|
|
130
|
+
departureDate: { type: "string", format: "date" },
|
|
131
|
+
passengers: { type: "number", minimum: 1 },
|
|
132
|
+
hotelPreference: { type: "string" },
|
|
133
|
+
budgetRange: { type: "string" }
|
|
134
|
+
},
|
|
135
|
+
required: ["destination", "departureDate"]
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
// Route specifies which fields to collect
|
|
140
|
+
const flightRoute = agent.createRoute({
|
|
141
|
+
title: "Flight Booking",
|
|
142
|
+
requiredFields: ["destination", "departureDate", "passengers"],
|
|
143
|
+
optionalFields: ["budgetRange"]
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Generates:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
Extract the following information from the user's response based on the agent schema:
|
|
151
|
+
- destination: string - Where the user wants to fly
|
|
152
|
+
- departureDate: string (date format) - When they want to depart
|
|
153
|
+
- passengers: number (minimum 1) - How many people are traveling
|
|
154
|
+
- budgetRange: string (optional) - Budget preference for the trip
|
|
155
|
+
|
|
156
|
+
Return extracted data as valid JSON matching the agent schema.
|
|
157
|
+
Current route requires: destination, departureDate, passengers
|
|
158
|
+
Route completion: 2/3 required fields collected
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Tool Integration
|
|
162
|
+
|
|
163
|
+
When tools are available, they're described in the prompt:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
Available Tools:
|
|
167
|
+
1. searchFlights - Search for available flights
|
|
168
|
+
Parameters:
|
|
169
|
+
- origin: string - Departure airport code
|
|
170
|
+
- destination: string - Arrival airport code
|
|
171
|
+
- date: string - Travel date (YYYY-MM-DD)
|
|
172
|
+
|
|
173
|
+
2. checkWeather - Get weather forecast
|
|
174
|
+
Parameters:
|
|
175
|
+
- location: string - City or airport code
|
|
176
|
+
- date: string - Date for forecast
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Context Updates
|
|
180
|
+
|
|
181
|
+
Real-time context changes are included:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
Current Context:
|
|
185
|
+
- User tier: premium
|
|
186
|
+
- Preferred language: English
|
|
187
|
+
- Last login: 2024-01-15
|
|
188
|
+
- Current location: New York
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Route-Specific Customization
|
|
192
|
+
|
|
193
|
+
Routes can override agent-level settings:
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
const supportRoute = agent.createRoute({
|
|
197
|
+
title: "Customer Support",
|
|
198
|
+
personality: "Extra patient and detailed when explaining issues",
|
|
199
|
+
knowledgeBase: {
|
|
200
|
+
supportHours: "24/7 for premium members, 9-5 EST for others",
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Performance Optimization
|
|
206
|
+
|
|
207
|
+
Prompts are optimized for token efficiency:
|
|
208
|
+
|
|
209
|
+
- Knowledge bases are formatted as clean markdown
|
|
210
|
+
- Redundant information is deduplicated
|
|
211
|
+
- Context is truncated when approaching token limits
|
|
212
|
+
- Only relevant route information is included
|
|
213
|
+
|
|
214
|
+
## Best Practices
|
|
215
|
+
|
|
216
|
+
- Keep knowledge bases structured and concise
|
|
217
|
+
- Use clear, specific guidelines rather than vague instructions
|
|
218
|
+
- Leverage route-specific overrides for specialized behavior
|
|
219
|
+
- Monitor token usage and optimize prompt length
|
|
220
|
+
- Test prompts with different AI providers for consistency
|