@falai/agent 2.6.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryAdapter.js +32 -36
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.d.ts +1 -1
- package/dist/adapters/MongoAdapter.d.ts.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +3 -3
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +18 -13
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter.js +3 -3
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.d.ts +2 -1
- package/dist/adapters/RedisAdapter.d.ts.map +1 -1
- package/dist/adapters/RedisAdapter.js +77 -27
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +9 -31
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +13 -13
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/sessionRow.d.ts +22 -0
- package/dist/adapters/sessionRow.d.ts.map +1 -0
- package/dist/adapters/sessionRow.js +48 -0
- package/dist/adapters/sessionRow.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +39 -43
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +4 -4
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +6 -6
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +20 -15
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +7 -7
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts +2 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +81 -31
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +11 -33
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/index.d.ts +13 -13
- package/dist/cjs/adapters/index.d.ts.map +1 -1
- package/dist/cjs/adapters/index.js +14 -14
- package/dist/cjs/adapters/index.js.map +1 -1
- package/dist/cjs/adapters/sessionRow.d.ts +22 -0
- package/dist/cjs/adapters/sessionRow.d.ts.map +1 -0
- package/dist/cjs/adapters/sessionRow.js +52 -0
- package/dist/cjs/adapters/sessionRow.js.map +1 -0
- package/dist/cjs/core/Agent.d.ts +19 -11
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +102 -64
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +12 -22
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.js +46 -49
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -1
- package/dist/cjs/core/BranchEvaluator.d.ts +4 -4
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -1
- package/dist/cjs/core/BranchEvaluator.js +6 -6
- package/dist/cjs/core/BranchEvaluator.js.map +1 -1
- package/dist/cjs/core/CompactionEngine.d.ts +16 -3
- package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
- package/dist/cjs/core/CompactionEngine.js +30 -6
- package/dist/cjs/core/CompactionEngine.js.map +1 -1
- package/dist/cjs/core/DirectiveChainTracker.d.ts +1 -1
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -1
- package/dist/cjs/core/DirectiveChainTracker.js +5 -5
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -1
- package/dist/cjs/core/Events.d.ts +1 -1
- package/dist/cjs/core/Events.d.ts.map +1 -1
- package/dist/cjs/core/Events.js +15 -15
- package/dist/cjs/core/Events.js.map +1 -1
- package/dist/cjs/core/Flow.d.ts +4 -4
- package/dist/cjs/core/Flow.d.ts.map +1 -1
- package/dist/cjs/core/Flow.js +15 -15
- package/dist/cjs/core/Flow.js.map +1 -1
- package/dist/cjs/core/FlowRouter.d.ts +4 -4
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -1
- package/dist/cjs/core/FlowRouter.js +92 -70
- package/dist/cjs/core/FlowRouter.js.map +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +10 -10
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +4 -4
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +13 -13
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +2 -2
- package/dist/cjs/core/PromptSectionCache.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +4 -4
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +7 -7
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseGenerationError.d.ts.map +1 -1
- package/dist/cjs/core/ResponseGenerationError.js +3 -5
- package/dist/cjs/core/ResponseGenerationError.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +39 -10
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +195 -72
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +50 -12
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +301 -158
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SessionFinalizer.d.ts +4 -4
- package/dist/cjs/core/SessionFinalizer.d.ts.map +1 -1
- package/dist/cjs/core/SessionFinalizer.js +36 -9
- package/dist/cjs/core/SessionFinalizer.js.map +1 -1
- package/dist/cjs/core/SessionManager.d.ts +15 -6
- package/dist/cjs/core/SessionManager.d.ts.map +1 -1
- package/dist/cjs/core/SessionManager.js +49 -22
- package/dist/cjs/core/SessionManager.js.map +1 -1
- package/dist/cjs/core/SignalCoordinator.d.ts +5 -5
- package/dist/cjs/core/SignalCoordinator.d.ts.map +1 -1
- package/dist/cjs/core/SignalCoordinator.js +12 -12
- package/dist/cjs/core/SignalCoordinator.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +4 -4
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -1
- package/dist/cjs/core/SignalEvaluator.js +6 -6
- package/dist/cjs/core/SignalEvaluator.js.map +1 -1
- package/dist/cjs/core/SignalProcessor.d.ts +6 -6
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -1
- package/dist/cjs/core/SignalProcessor.js +17 -89
- package/dist/cjs/core/SignalProcessor.js.map +1 -1
- package/dist/cjs/core/Step.d.ts +5 -5
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +65 -17
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StepLifecycle.d.ts +18 -8
- package/dist/cjs/core/StepLifecycle.d.ts.map +1 -1
- package/dist/cjs/core/StepLifecycle.js +103 -20
- package/dist/cjs/core/StepLifecycle.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js +30 -6
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolLoopExecutor.d.ts +8 -4
- package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -1
- package/dist/cjs/core/ToolLoopExecutor.js +189 -97
- package/dist/cjs/core/ToolLoopExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +6 -6
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +102 -79
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +2 -2
- package/dist/cjs/core/createAgent.d.ts.map +1 -1
- package/dist/cjs/core/createAgent.js +2 -2
- package/dist/cjs/core/createAgent.js.map +1 -1
- package/dist/cjs/core/flow-namespace.d.ts +16 -1
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -1
- package/dist/cjs/core/flow-namespace.js +26 -4
- package/dist/cjs/core/flow-namespace.js.map +1 -1
- package/dist/cjs/core/toolGates.d.ts +1 -1
- package/dist/cjs/core/toolGates.d.ts.map +1 -1
- package/dist/cjs/core/toolGates.js +3 -3
- package/dist/cjs/core/toolGates.js.map +1 -1
- package/dist/cjs/index.d.ts +50 -45
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +96 -88
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +25 -35
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +30 -426
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.d.ts +13 -34
- package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.js +17 -51
- package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +22 -75
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +32 -558
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +14 -20
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +26 -135
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.js +40 -496
- package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +14 -20
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +21 -28
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts +20 -24
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.js +22 -38
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts +94 -0
- package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -0
- package/dist/cjs/providers/ProviderAdapter.js +257 -0
- package/dist/cjs/providers/ProviderAdapter.js.map +1 -0
- package/dist/cjs/providers/index.d.ts +21 -18
- package/dist/cjs/providers/index.d.ts.map +1 -1
- package/dist/cjs/providers/index.js +23 -21
- package/dist/cjs/providers/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +37 -11
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/ai.d.ts +11 -21
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/compaction.d.ts +2 -2
- package/dist/cjs/types/compaction.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +16 -20
- package/dist/cjs/types/errors.d.ts.map +1 -1
- package/dist/cjs/types/errors.js +17 -18
- package/dist/cjs/types/errors.js.map +1 -1
- package/dist/cjs/types/flow.d.ts +56 -39
- package/dist/cjs/types/flow.d.ts.map +1 -1
- package/dist/cjs/types/history.d.ts +1 -1
- package/dist/cjs/types/history.d.ts.map +1 -1
- package/dist/cjs/types/index.d.ts +17 -17
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +14 -14
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +2 -2
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +4 -4
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +3 -3
- package/dist/cjs/types/signals.d.ts.map +1 -1
- package/dist/cjs/types/template.d.ts +2 -2
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +4 -2
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +1 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js +6 -6
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/event.d.ts +1 -1
- package/dist/cjs/utils/event.d.ts.map +1 -1
- package/dist/cjs/utils/event.js +2 -2
- package/dist/cjs/utils/event.js.map +1 -1
- package/dist/cjs/utils/history.d.ts +2 -2
- package/dist/cjs/utils/history.d.ts.map +1 -1
- package/dist/cjs/utils/history.js +15 -15
- package/dist/cjs/utils/history.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +11 -13
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +57 -58
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/serialize.d.ts +17 -0
- package/dist/cjs/utils/serialize.d.ts.map +1 -1
- package/dist/cjs/utils/serialize.js +33 -0
- package/dist/cjs/utils/serialize.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +23 -3
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +40 -8
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/cjs/utils/template.d.ts +3 -3
- package/dist/cjs/utils/template.d.ts.map +1 -1
- package/dist/cjs/utils/template.js +5 -5
- package/dist/cjs/utils/template.js.map +1 -1
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +1 -1
- package/dist/core/Agent.d.ts +19 -11
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +53 -15
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +12 -22
- package/dist/core/AutoChainExecutor.d.ts.map +1 -1
- package/dist/core/AutoChainExecutor.js +27 -30
- package/dist/core/AutoChainExecutor.js.map +1 -1
- package/dist/core/BranchEvaluator.d.ts +4 -4
- package/dist/core/BranchEvaluator.d.ts.map +1 -1
- package/dist/core/BranchEvaluator.js +2 -2
- package/dist/core/BranchEvaluator.js.map +1 -1
- package/dist/core/CompactionEngine.d.ts +16 -3
- package/dist/core/CompactionEngine.d.ts.map +1 -1
- package/dist/core/CompactionEngine.js +30 -6
- package/dist/core/CompactionEngine.js.map +1 -1
- package/dist/core/DirectiveChainTracker.d.ts +1 -1
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -1
- package/dist/core/DirectiveChainTracker.js +2 -2
- package/dist/core/DirectiveChainTracker.js.map +1 -1
- package/dist/core/Events.d.ts +1 -1
- package/dist/core/Events.d.ts.map +1 -1
- package/dist/core/Events.js +1 -1
- package/dist/core/Events.js.map +1 -1
- package/dist/core/Flow.d.ts +4 -4
- package/dist/core/Flow.d.ts.map +1 -1
- package/dist/core/Flow.js +3 -3
- package/dist/core/Flow.js.map +1 -1
- package/dist/core/FlowRouter.d.ts +4 -4
- package/dist/core/FlowRouter.d.ts.map +1 -1
- package/dist/core/FlowRouter.js +36 -14
- package/dist/core/FlowRouter.js.map +1 -1
- package/dist/core/PersistenceManager.d.ts +1 -1
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +3 -3
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +4 -4
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +3 -3
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +2 -2
- package/dist/core/PromptSectionCache.d.ts.map +1 -1
- package/dist/core/ResponseEngine.d.ts +4 -4
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +2 -2
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseGenerationError.d.ts.map +1 -1
- package/dist/core/ResponseGenerationError.js +3 -5
- package/dist/core/ResponseGenerationError.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +39 -10
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +152 -29
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +50 -12
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +232 -89
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SessionFinalizer.d.ts +4 -4
- package/dist/core/SessionFinalizer.d.ts.map +1 -1
- package/dist/core/SessionFinalizer.js +32 -5
- package/dist/core/SessionFinalizer.js.map +1 -1
- package/dist/core/SessionManager.d.ts +15 -6
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +46 -19
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/SignalCoordinator.d.ts +5 -5
- package/dist/core/SignalCoordinator.d.ts.map +1 -1
- package/dist/core/SignalCoordinator.js +2 -2
- package/dist/core/SignalCoordinator.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +4 -4
- package/dist/core/SignalEvaluator.d.ts.map +1 -1
- package/dist/core/SignalEvaluator.js +2 -2
- package/dist/core/SignalEvaluator.js.map +1 -1
- package/dist/core/SignalProcessor.d.ts +6 -6
- package/dist/core/SignalProcessor.d.ts.map +1 -1
- package/dist/core/SignalProcessor.js +7 -79
- package/dist/core/SignalProcessor.js.map +1 -1
- package/dist/core/Step.d.ts +5 -5
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +53 -5
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StepLifecycle.d.ts +18 -8
- package/dist/core/StepLifecycle.d.ts.map +1 -1
- package/dist/core/StepLifecycle.js +98 -15
- package/dist/core/StepLifecycle.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +1 -1
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js +29 -5
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolLoopExecutor.d.ts +8 -4
- package/dist/core/ToolLoopExecutor.d.ts.map +1 -1
- package/dist/core/ToolLoopExecutor.js +157 -65
- package/dist/core/ToolLoopExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +6 -6
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +44 -21
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +2 -2
- package/dist/core/createAgent.d.ts.map +1 -1
- package/dist/core/createAgent.js +1 -1
- package/dist/core/createAgent.js.map +1 -1
- package/dist/core/flow-namespace.d.ts +16 -1
- package/dist/core/flow-namespace.d.ts.map +1 -1
- package/dist/core/flow-namespace.js +23 -1
- package/dist/core/flow-namespace.js.map +1 -1
- package/dist/core/toolGates.d.ts +1 -1
- package/dist/core/toolGates.d.ts.map +1 -1
- package/dist/core/toolGates.js +1 -1
- package/dist/core/toolGates.js.map +1 -1
- package/dist/index.d.ts +50 -45
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -30
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +25 -35
- package/dist/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/AnthropicProvider.js +30 -423
- package/dist/providers/AnthropicProvider.js.map +1 -1
- package/dist/providers/DeepSeekProvider.d.ts +13 -34
- package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/DeepSeekProvider.js +16 -47
- package/dist/providers/DeepSeekProvider.js.map +1 -1
- package/dist/providers/GeminiProvider.d.ts +22 -75
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +32 -558
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
- package/dist/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/providers/GenericOpenAICompatibleProvider.js +13 -16
- package/dist/providers/GenericOpenAICompatibleProvider.js.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.d.ts +26 -135
- package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.js +39 -495
- package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +14 -20
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +20 -24
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +20 -24
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +21 -34
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/providers/ProviderAdapter.d.ts +94 -0
- package/dist/providers/ProviderAdapter.d.ts.map +1 -0
- package/dist/providers/ProviderAdapter.js +251 -0
- package/dist/providers/ProviderAdapter.js.map +1 -0
- package/dist/providers/index.d.ts +21 -18
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +13 -10
- package/dist/providers/index.js.map +1 -1
- package/dist/types/agent.d.ts +37 -11
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/ai.d.ts +11 -21
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/compaction.d.ts +2 -2
- package/dist/types/compaction.d.ts.map +1 -1
- package/dist/types/errors.d.ts +16 -20
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +15 -16
- package/dist/types/errors.js.map +1 -1
- package/dist/types/flow.d.ts +56 -39
- package/dist/types/flow.d.ts.map +1 -1
- package/dist/types/history.d.ts +1 -1
- package/dist/types/history.d.ts.map +1 -1
- package/dist/types/index.d.ts +17 -17
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -4
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +2 -2
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/session.d.ts +4 -4
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +3 -3
- package/dist/types/signals.d.ts.map +1 -1
- package/dist/types/template.d.ts +2 -2
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +4 -2
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +1 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js +2 -2
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/event.d.ts +1 -1
- package/dist/utils/event.d.ts.map +1 -1
- package/dist/utils/event.js +1 -1
- package/dist/utils/event.js.map +1 -1
- package/dist/utils/history.d.ts +2 -2
- package/dist/utils/history.d.ts.map +1 -1
- package/dist/utils/history.js +1 -1
- package/dist/utils/history.js.map +1 -1
- package/dist/utils/index.d.ts +11 -13
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +11 -12
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/serialize.d.ts +17 -0
- package/dist/utils/serialize.d.ts.map +1 -1
- package/dist/utils/serialize.js +31 -0
- package/dist/utils/serialize.js.map +1 -1
- package/dist/utils/session.d.ts +23 -3
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +35 -6
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/template.d.ts +3 -3
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +1 -1
- package/dist/utils/template.js.map +1 -1
- package/docs/concepts/architecture.md +3 -3
- package/docs/concepts/directives.md +1 -1
- package/docs/guides/error-handling.md +46 -45
- package/docs/guides/flow-control.md +8 -1
- package/docs/guides/instructions.md +15 -6
- package/docs/guides/persistence.md +12 -5
- package/docs/guides/streaming.md +10 -0
- package/docs/migration/README.md +4 -0
- package/docs/migration/v2-3-to-v2-4.md +4 -0
- package/docs/migration/v2-6-to-v2-7.md +246 -0
- package/docs/reference/adapters.md +15 -1
- package/docs/reference/branches.md +2 -0
- package/docs/reference/create-agent.md +28 -0
- package/docs/reference/directive.md +1 -1
- package/docs/reference/errors.md +30 -32
- package/docs/reference/providers.md +63 -60
- package/docs/reference/step.md +28 -21
- package/docs/reference/tool.md +14 -5
- package/docs/start/02-first-agent.md +8 -4
- package/docs/start/03-collect-data.md +19 -10
- package/examples/01-quickstart.ts +2 -2
- package/examples/02-data-extraction.ts +1 -1
- package/examples/03-tools.ts +1 -1
- package/examples/04-instructions.ts +2 -2
- package/examples/05-branching.ts +3 -3
- package/examples/06-flow-control.ts +3 -3
- package/examples/07-streaming.ts +1 -1
- package/examples/08-persistence.ts +2 -2
- package/examples/09-signals.ts +1 -1
- package/examples/tsconfig.json +6 -3
- package/package.json +9 -7
- package/src/adapters/MemoryAdapter.ts +33 -37
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +4 -4
- package/src/adapters/PostgreSQLAdapter.ts +26 -21
- package/src/adapters/PrismaAdapter.ts +4 -4
- package/src/adapters/RedisAdapter.ts +84 -37
- package/src/adapters/SQLiteAdapter.ts +13 -34
- package/src/adapters/index.ts +13 -13
- package/src/adapters/sessionRow.ts +57 -0
- package/src/core/Agent.ts +64 -18
- package/src/core/AutoChainExecutor.ts +44 -57
- package/src/core/BranchEvaluator.ts +5 -5
- package/src/core/CompactionEngine.ts +42 -8
- package/src/core/DirectiveChainTracker.ts +3 -3
- package/src/core/Events.ts +2 -2
- package/src/core/Flow.ts +9 -9
- package/src/core/FlowRouter.ts +46 -20
- package/src/core/PersistenceManager.ts +4 -4
- package/src/core/PromptComposer.ts +8 -8
- package/src/core/PromptSectionCache.ts +2 -2
- package/src/core/ResponseEngine.ts +6 -6
- package/src/core/ResponseGenerationError.ts +3 -6
- package/src/core/ResponseModal.ts +205 -39
- package/src/core/ResponsePipeline.ts +301 -107
- package/src/core/SessionFinalizer.ts +40 -10
- package/src/core/SessionManager.ts +61 -27
- package/src/core/SignalCoordinator.ts +7 -7
- package/src/core/SignalEvaluator.ts +6 -6
- package/src/core/SignalProcessor.ts +13 -93
- package/src/core/Step.ts +87 -10
- package/src/core/StepLifecycle.ts +129 -26
- package/src/core/StreamingToolExecutor.ts +33 -8
- package/src/core/ToolLoopExecutor.ts +206 -80
- package/src/core/ToolManager.ts +53 -26
- package/src/core/createAgent.ts +2 -2
- package/src/core/flow-namespace.ts +31 -2
- package/src/core/toolGates.ts +2 -2
- package/src/index.ts +59 -45
- package/src/providers/AnthropicProvider.ts +44 -595
- package/src/providers/DeepSeekProvider.ts +27 -92
- package/src/providers/GeminiProvider.ts +41 -752
- package/src/providers/GenericOpenAICompatibleProvider.ts +19 -27
- package/src/providers/OpenAICompatibleProvider.ts +58 -764
- package/src/providers/OpenAIProvider.ts +31 -55
- package/src/providers/OpenRouterProvider.ts +40 -70
- package/src/providers/ProviderAdapter.ts +368 -0
- package/src/providers/index.ts +21 -23
- package/src/types/agent.ts +36 -11
- package/src/types/ai.ts +11 -21
- package/src/types/compaction.ts +2 -2
- package/src/types/errors.ts +17 -35
- package/src/types/flow.ts +44 -46
- package/src/types/history.ts +1 -1
- package/src/types/index.ts +18 -17
- package/src/types/persistence.ts +2 -2
- package/src/types/session.ts +4 -4
- package/src/types/signals.ts +3 -3
- package/src/types/template.ts +2 -2
- package/src/types/tool.ts +4 -2
- package/src/utils/condition.ts +3 -3
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +3 -3
- package/src/utils/index.ts +14 -15
- package/src/utils/serialize.ts +38 -0
- package/src/utils/session.ts +46 -9
- package/src/utils/template.ts +3 -3
- package/dist/cjs/core/DirectiveBus.d.ts +0 -88
- package/dist/cjs/core/DirectiveBus.d.ts.map +0 -1
- package/dist/cjs/core/DirectiveBus.js +0 -196
- package/dist/cjs/core/DirectiveBus.js.map +0 -1
- package/dist/cjs/providers/errorClassification.d.ts +0 -61
- package/dist/cjs/providers/errorClassification.d.ts.map +0 -1
- package/dist/cjs/providers/errorClassification.js +0 -123
- package/dist/cjs/providers/errorClassification.js.map +0 -1
- package/dist/cjs/utils/retry.d.ts +0 -67
- package/dist/cjs/utils/retry.d.ts.map +0 -1
- package/dist/cjs/utils/retry.js +0 -201
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/core/DirectiveBus.d.ts +0 -88
- package/dist/core/DirectiveBus.d.ts.map +0 -1
- package/dist/core/DirectiveBus.js +0 -192
- package/dist/core/DirectiveBus.js.map +0 -1
- package/dist/providers/errorClassification.d.ts +0 -61
- package/dist/providers/errorClassification.d.ts.map +0 -1
- package/dist/providers/errorClassification.js +0 -116
- package/dist/providers/errorClassification.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -67
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js +0 -193
- package/dist/utils/retry.js.map +0 -1
- package/src/core/DirectiveBus.ts +0 -248
- package/src/providers/errorClassification.ts +0 -172
- package/src/utils/retry.ts +0 -274
|
@@ -11,15 +11,17 @@ order: 10
|
|
|
11
11
|
|
|
12
12
|
Providers are the strategy plug between an `Agent` and a model vendor. Every provider implements the same `AiProvider` interface, so the Agent itself stays vendor-agnostic. Pass an instance to `createAgent({ provider })` and the agent talks to that vendor for every turn (and for compaction, if you wire it in).
|
|
13
13
|
|
|
14
|
-
`@falai/agent` ships five built-in providers. All five accept an `apiKey` and a required `model`, support `backupModels` for automatic failover
|
|
14
|
+
`@falai/agent` ships five built-in providers. All five accept an `apiKey` and a required `model`, support `backupModels` for automatic failover, and take the same neutral `RequestConfig` for sampling defaults.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
|
19
|
-
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
16
|
+
There are no vendor SDKs behind them. Every provider is a thin binding over [`@providerkit/core`](https://www.npmjs.com/package/@providerkit/core), which speaks each vendor's REST API over `fetch` — so installing this package does not install one vendor's SDK for a consumer who uses another.
|
|
17
|
+
|
|
18
|
+
| Provider | Class | Options | Wire |
|
|
19
|
+
|----------|-------|---------|------|
|
|
20
|
+
| Google Gemini | `GeminiProvider` | `GeminiProviderOptions` | `generateContent` (SSE) |
|
|
21
|
+
| OpenAI | `OpenAIProvider` | `OpenAIProviderOptions` | Responses API |
|
|
22
|
+
| Anthropic Claude | `AnthropicProvider` | `AnthropicProviderOptions` | Messages API |
|
|
23
|
+
| OpenRouter | `OpenRouterProvider` | `OpenRouterProviderOptions` | chat completions |
|
|
24
|
+
| DeepSeek | `DeepSeekProvider` | `DeepSeekProviderOptions` | chat completions |
|
|
23
25
|
|
|
24
26
|
## Capabilities
|
|
25
27
|
|
|
@@ -63,11 +65,11 @@ import {
|
|
|
63
65
|
|
|
64
66
|
const provider =
|
|
65
67
|
process.env.PROVIDER === "openai"
|
|
66
|
-
? new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY!, model: "gpt-5.
|
|
68
|
+
? new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY!, model: "gpt-5.6" })
|
|
67
69
|
: process.env.PROVIDER === "anthropic"
|
|
68
|
-
? new AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY!, model: "claude-sonnet-
|
|
70
|
+
? new AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY!, model: "claude-sonnet-5" })
|
|
69
71
|
: process.env.PROVIDER === "openrouter"
|
|
70
|
-
? new OpenRouterProvider({ apiKey: process.env.OPENROUTER_API_KEY!, model: "anthropic/claude-sonnet-
|
|
72
|
+
? new OpenRouterProvider({ apiKey: process.env.OPENROUTER_API_KEY!, model: "anthropic/claude-sonnet-5" })
|
|
71
73
|
: process.env.PROVIDER === "deepseek"
|
|
72
74
|
? new DeepSeekProvider({ apiKey: process.env.DEEPSEEK_API_KEY!, model: "deepseek-chat" })
|
|
73
75
|
: new GeminiProvider({ apiKey: process.env.GEMINI_API_KEY!, model: "gemini-3.1-pro-preview" });
|
|
@@ -86,8 +88,10 @@ interface GeminiProviderOptions {
|
|
|
86
88
|
apiKey: string;
|
|
87
89
|
model: string;
|
|
88
90
|
backupModels?: string[];
|
|
89
|
-
|
|
91
|
+
baseUrl?: string;
|
|
92
|
+
config?: RequestConfig; // temperature, topP, maxTokens, stopSequences
|
|
90
93
|
retryConfig?: { timeout?: number; retries?: number };
|
|
94
|
+
fetchImpl?: typeof fetch; // scripted wire, for tests
|
|
91
95
|
}
|
|
92
96
|
```
|
|
93
97
|
|
|
@@ -95,12 +99,13 @@ interface GeminiProviderOptions {
|
|
|
95
99
|
|
|
96
100
|
| Field | Type | Required | Default | Notes |
|
|
97
101
|
|-------|------|----------|---------|-------|
|
|
98
|
-
| `apiKey` | `string` | yes | — | Throws if empty. |
|
|
102
|
+
| `apiKey` | `string` | yes* | — | Throws if empty (unless `client` is set). |
|
|
99
103
|
| `model` | `string` | yes | — | Use the model id, e.g. `"gemini-3.1-pro-preview"`. |
|
|
100
|
-
| `backupModels` | `string[]` | no | `[]` | Tried in order on
|
|
104
|
+
| `backupModels` | `string[]` | no | `[]` | Tried in order on retriable failures (rate limits, overload, timeouts, network). |
|
|
101
105
|
| `config` | `Partial<GenerateContentConfig>` | no | — | Vendor-typed defaults (e.g. `temperature`, `systemInstruction`). |
|
|
102
|
-
| `retryConfig.timeout` | `number` | no | `60000` | Per-attempt timeout in ms. |
|
|
106
|
+
| `retryConfig.timeout` | `number` | no | `60000` | Per-attempt timeout in ms. On streams it also bounds time-to-first-token. |
|
|
103
107
|
| `retryConfig.retries` | `number` | no | `3` | Total attempts before giving up. |
|
|
108
|
+
| `client` | `GoogleGenAI` | no | — | Pre-configured SDK client; overrides the internally-constructed one. Intended for tests injecting scripted transports; production callers should pass `apiKey`. |
|
|
104
109
|
|
|
105
110
|
### Example
|
|
106
111
|
|
|
@@ -136,9 +141,9 @@ interface OpenAIProviderOptions {
|
|
|
136
141
|
|-------|------|----------|---------|-------|
|
|
137
142
|
| `apiKey` | `string` | yes | — | Throws if empty. |
|
|
138
143
|
| `organization` | `string` | no | — | Forwarded as `OpenAI-Organization`. |
|
|
139
|
-
| `model` | `string` | yes | — | e.g. `"gpt-5.
|
|
144
|
+
| `model` | `string` | yes | — | e.g. `"gpt-5.6"`, `"gpt-5.4-mini"`. |
|
|
140
145
|
| `backupModels` | `string[]` | no | `[]` | Tried in order on overload/rate-limit errors. |
|
|
141
|
-
| `config` |
|
|
146
|
+
| `config` | `RequestConfig` | no | — | Defaults for `temperature`, `topP`, `maxTokens`, `stopSequences`. |
|
|
142
147
|
| `retryConfig.timeout` | `number` | no | `60000` | Per-attempt timeout in ms. |
|
|
143
148
|
| `retryConfig.retries` | `number` | no | `3` | Total attempts. |
|
|
144
149
|
|
|
@@ -147,7 +152,7 @@ interface OpenAIProviderOptions {
|
|
|
147
152
|
```typescript
|
|
148
153
|
const openai = new OpenAIProvider({
|
|
149
154
|
apiKey: process.env.OPENAI_API_KEY!,
|
|
150
|
-
model: "gpt-5.
|
|
155
|
+
model: "gpt-5.6",
|
|
151
156
|
organization: "org_abc",
|
|
152
157
|
config: { temperature: 0.2 },
|
|
153
158
|
});
|
|
@@ -166,6 +171,7 @@ interface AnthropicProviderOptions {
|
|
|
166
171
|
backupModels?: string[];
|
|
167
172
|
config?: Partial<Omit<MessageCreateParamsNonStreaming, "model" | "messages">>;
|
|
168
173
|
retryConfig?: { timeout?: number; retries?: number };
|
|
174
|
+
client?: Anthropic; // pre-configured SDK client override
|
|
169
175
|
}
|
|
170
176
|
```
|
|
171
177
|
|
|
@@ -173,20 +179,21 @@ interface AnthropicProviderOptions {
|
|
|
173
179
|
|
|
174
180
|
| Field | Type | Required | Default | Notes |
|
|
175
181
|
|-------|------|----------|---------|-------|
|
|
176
|
-
| `apiKey` | `string` | yes | — | Throws if empty. |
|
|
177
|
-
| `model` | `string` | yes | — | e.g. `"claude-sonnet-
|
|
178
|
-
| `backupModels` | `string[]` | no | `[]` | Tried in order on
|
|
179
|
-
| `config` |
|
|
180
|
-
| `retryConfig.timeout` | `number` | no | `60000` | Per-attempt timeout in ms. |
|
|
182
|
+
| `apiKey` | `string` | yes* | — | Throws if empty (unless `client` is set). |
|
|
183
|
+
| `model` | `string` | yes | — | e.g. `"claude-sonnet-5"`, `"claude-opus-5"`. |
|
|
184
|
+
| `backupModels` | `string[]` | no | `[]` | Tried in order on retriable failures (rate limits, overload incl. 529, timeouts, network). |
|
|
185
|
+
| `config` | `RequestConfig` | no | — | Defaults for `temperature`, `topP`, `maxTokens`, `stopSequences`. `maxTokens` falls back to 4096 if neither it nor `parameters.maxOutputTokens` is set. |
|
|
186
|
+
| `retryConfig.timeout` | `number` | no | `60000` | Per-attempt timeout in ms. On streams it also bounds time-to-first-token. |
|
|
181
187
|
| `retryConfig.retries` | `number` | no | `3` | Total attempts. |
|
|
188
|
+
| `client` | `Anthropic` | no | — | Pre-configured SDK client; overrides the internally-constructed one. Intended for tests injecting scripted transports; production callers should pass `apiKey`. |
|
|
182
189
|
|
|
183
190
|
### Example
|
|
184
191
|
|
|
185
192
|
```typescript
|
|
186
193
|
const anthropic = new AnthropicProvider({
|
|
187
194
|
apiKey: process.env.ANTHROPIC_API_KEY!,
|
|
188
|
-
model: "claude-sonnet-
|
|
189
|
-
config: {
|
|
195
|
+
model: "claude-sonnet-5",
|
|
196
|
+
config: { maxTokens: 8192 },
|
|
190
197
|
});
|
|
191
198
|
```
|
|
192
199
|
|
|
@@ -215,7 +222,7 @@ interface OpenRouterProviderOptions {
|
|
|
215
222
|
| Field | Type | Required | Default | Notes |
|
|
216
223
|
|-------|------|----------|---------|-------|
|
|
217
224
|
| `apiKey` | `string` | yes | — | Throws if empty. |
|
|
218
|
-
| `model` | `string` | yes | — | OpenRouter model id, e.g. `"anthropic/claude-sonnet-
|
|
225
|
+
| `model` | `string` | yes | — | OpenRouter model id, e.g. `"anthropic/claude-sonnet-5"`. See [openrouter.ai/models](https://openrouter.ai/models). |
|
|
219
226
|
| `backupModels` | `string[]` | no | `[]` | Tried in order on overload/capacity errors. |
|
|
220
227
|
| `siteUrl` | `string` | no | `""` | Sent as `HTTP-Referer` for OpenRouter rankings. |
|
|
221
228
|
| `siteName` | `string` | no | `""` | Sent as `X-Title` for OpenRouter rankings. |
|
|
@@ -228,8 +235,8 @@ interface OpenRouterProviderOptions {
|
|
|
228
235
|
```typescript
|
|
229
236
|
const openrouter = new OpenRouterProvider({
|
|
230
237
|
apiKey: process.env.OPENROUTER_API_KEY!,
|
|
231
|
-
model: "anthropic/claude-sonnet-
|
|
232
|
-
backupModels: ["openai/gpt-5.
|
|
238
|
+
model: "anthropic/claude-sonnet-5",
|
|
239
|
+
backupModels: ["openai/gpt-5.6", "google/gemini-3.1-pro-preview"],
|
|
233
240
|
siteName: "My App",
|
|
234
241
|
});
|
|
235
242
|
```
|
|
@@ -278,12 +285,11 @@ const deepseek = new DeepSeekProvider({
|
|
|
278
285
|
|
|
279
286
|
## Building a custom OpenAI-compatible provider
|
|
280
287
|
|
|
281
|
-
Many vendors (Groq, Together, Fireworks, …) expose OpenAI-compatible chat-completions APIs. Instead of implementing `AiProvider` from scratch, subclass the exported `OpenAICompatibleProvider` base class —
|
|
288
|
+
Many vendors (Groq, Together, Fireworks, …) expose OpenAI-compatible chat-completions APIs. Instead of implementing `AiProvider` from scratch, subclass the exported `OpenAICompatibleProvider` base class — history and tool translation, streaming, tool-call assembly, backup-model fallback, retries and normalized `ProviderError`s all come with it. `OpenAIProvider`, `OpenRouterProvider`, and `DeepSeekProvider` are themselves thin subclasses.
|
|
282
289
|
|
|
283
|
-
A minimal subclass supplies the
|
|
290
|
+
A minimal subclass supplies the endpoint, naming, and capabilities:
|
|
284
291
|
|
|
285
292
|
```typescript
|
|
286
|
-
import OpenAI from "openai";
|
|
287
293
|
import {
|
|
288
294
|
OpenAICompatibleProvider,
|
|
289
295
|
type ProviderCapabilities,
|
|
@@ -299,23 +305,20 @@ export class GroqProvider extends OpenAICompatibleProvider {
|
|
|
299
305
|
supportsPromptCaching: false,
|
|
300
306
|
};
|
|
301
307
|
|
|
302
|
-
protected readonly logLabel = "GROQ"; // tag in log lines
|
|
303
|
-
protected readonly displayName = "Groq"; // name in retry/error messages
|
|
304
|
-
|
|
305
308
|
constructor(options: { apiKey: string; model: string; backupModels?: string[] }) {
|
|
306
309
|
super({
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
}),
|
|
310
|
+
id: "groq",
|
|
311
|
+
apiKey: options.apiKey,
|
|
312
|
+
baseUrl: "https://api.groq.com/openai",
|
|
311
313
|
model: options.model,
|
|
314
|
+
structuredOutput: "json_schema",
|
|
312
315
|
backupModels: options.backupModels,
|
|
313
316
|
});
|
|
314
317
|
}
|
|
315
318
|
}
|
|
316
319
|
```
|
|
317
320
|
|
|
318
|
-
That is a complete, working provider.
|
|
321
|
+
That is a complete, working provider. Vendor-specific wire behaviour is not this layer's job any more: it lives in `@providerkit/core`, which the provider classes are thin bindings over. `DeepSeekProvider` is the reference pattern for what is left here — an id, a base URL, the structured-output mode the endpoint actually supports, and its capabilities. To bind a core provider this package does not ship a class for, subclass `ProviderAdapter` directly.
|
|
319
322
|
|
|
320
323
|
## Errors
|
|
321
324
|
|
|
@@ -326,10 +329,14 @@ All five providers share the same construction-time guards and runtime failure m
|
|
|
326
329
|
| `apiKey` is empty or missing | `Error("<vendor> API key is required")` | Thrown from the constructor. |
|
|
327
330
|
| `model` is empty or missing | `Error("Model is required. ...")` | Thrown from the constructor. |
|
|
328
331
|
| Vendor returns no text and no tool calls | `Error("No response from <vendor>")` | Surfaces as a `ResponseGenerationError` once it bubbles through the agent. |
|
|
329
|
-
| Primary and every backup model fail | `ProviderError` with a normalized `code` | After exhausting retries and `backupModels`.
|
|
332
|
+
| Primary and every backup model fail | `ProviderError` with a normalized `code` | After exhausting retries and `backupModels`. Propagates bare out of `respond()`. |
|
|
330
333
|
| Anthropic streaming with `system: undefined` | Vendor 400 | Set `config.system` or rely on history-derived system messages. |
|
|
331
334
|
|
|
332
|
-
The retry/backup logic only kicks in for transient errors:
|
|
335
|
+
The retry/backup logic only kicks in for **transient** errors: rate limits, overload and availability, timeouts, and network faults. Deterministic failures — a wrong key, an exhausted balance, an invalid request, a caller's abort — fail fast without burning the retry budget. Classification reads the response BODY before its status, because vendors file the same cause under whatever status they like.
|
|
336
|
+
|
|
337
|
+
Only failures *before the first chunk* are retried: past that the stream is committed, and a retry would replay text the reader has already seen. The same rule governs the walk to a backup model. `retryConfig.timeout` is the silence deadline — the wait allowed before the first byte, and between any two after it — so a stream that opens and stalls is treated as failed while a long, healthy one is left alone.
|
|
338
|
+
|
|
339
|
+
A model the endpoint will not serve also walks to the next model on the list, which is what the list is for.
|
|
333
340
|
|
|
334
341
|
### `ProviderError`
|
|
335
342
|
|
|
@@ -338,27 +345,23 @@ Terminal failures — after retries and backup models are exhausted — throw th
|
|
|
338
345
|
```typescript
|
|
339
346
|
import { ProviderError } from "@falai/agent";
|
|
340
347
|
|
|
341
|
-
type
|
|
342
|
-
| '
|
|
343
|
-
| '
|
|
344
|
-
| '
|
|
345
|
-
| '
|
|
346
|
-
| '
|
|
347
|
-
| '
|
|
348
|
-
| '
|
|
349
|
-
| '
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
console.error(err.provider, err.code); // e.g. "openai" "rate_limited"
|
|
356
|
-
console.error(err.cause); // original SDK error
|
|
357
|
-
}
|
|
358
|
-
}
|
|
348
|
+
type ErrorKind =
|
|
349
|
+
| 'aborted' // the caller pressed Stop — never retried
|
|
350
|
+
| 'timeout' // our deadline, or a 408
|
|
351
|
+
| 'network' // never reached the provider
|
|
352
|
+
| 'overload' // theirs and temporary — retry, and try another model
|
|
353
|
+
| 'rate' // per-minute throttle — wait, or rotate key or model
|
|
354
|
+
| 'quota' // balance or usage window exhausted — waiting will not fix it
|
|
355
|
+
| 'entitlement' // the plan never included this API
|
|
356
|
+
| 'auth' // the key is wrong, not the request
|
|
357
|
+
| 'model' // the model id is not served here
|
|
358
|
+
| 'context' // the prompt outgrew the window — send less
|
|
359
|
+
| 'content' // safety filter or refusal
|
|
360
|
+
| 'invalid' // any other 4xx — a bug in what we sent
|
|
361
|
+
| 'unknown'
|
|
359
362
|
```
|
|
360
363
|
|
|
361
|
-
When the failure
|
|
364
|
+
When the failure surfaces through `agent.respond(...)`, the `ProviderError` propagates **bare** — catch it with `instanceof`, no unwrapping. (On streaming turns, errors arrive wrapped as `ResponseGenerationError` on the final chunk's `error` field, with the original on `.cause`.) See [Errors](./errors.md).
|
|
362
365
|
|
|
363
366
|
## Related
|
|
364
367
|
|
package/docs/reference/step.md
CHANGED
|
@@ -101,30 +101,33 @@ interface StepLifecycleHooks<TContext = unknown, TData = unknown> {
|
|
|
101
101
|
| `skip` | `(ctx) => boolean \| Promise<boolean>` or array | no | — | Code-evaluated skip predicates (OR semantics). When any predicate returns `true`, the step is bypassed. Only code predicates — no AI strings. |
|
|
102
102
|
| `tools` | `(string \| Tool<TContext, TData>)[]` | no | `[]` | Tools available during this step. Strings are resolved against the agent's tool registry; objects are inline tools. Stacked on top of agent and flow scopes. |
|
|
103
103
|
| `instructions` | `Instruction<TContext, TData>[]` | no | `[]` | Step-scoped behavioural statements (`kind: 'must' \| 'never' \| 'should'`). Active only while this step is current. See [Instruction](./instruction.md). |
|
|
104
|
-
| `prepare` | function, tool id, or `Tool` object | no | — |
|
|
105
|
-
| `finalize` | function, tool id, or `Tool` object | no | — |
|
|
106
|
-
| `hooks` | `StepLifecycleHooks<TContext, TData>` | no | — |
|
|
104
|
+
| `prepare` | function, tool id, or `Tool` object | no | — | Pre-LLM hook. Receives `(context, data?)` and returns `void \| PrepareResult` (a Directive may be returned too). `PrepareResult` includes the pre-LLM augmentation fields `appendPrompt: string[]` and `injectTools: Tool[]` — honored by auto steps; other step kinds drop them with a loud warning. |
|
|
105
|
+
| `finalize` | function, tool id, or `Tool` object | no | — | Post-generation hook, runs before persistence. Same shape as `prepare`. A returned `goTo`/`goToStep`/`reset`/`complete` redirects the **next** turn; state writes land immediately. |
|
|
106
|
+
| `hooks` | `StepLifecycleHooks<TContext, TData>` | no | — | Alternative spelling of `prepare`/`finalize` (`hooks.prepare`, `hooks.finalize`). Both spellings run when declared together — shorthand first, then the hook, returns merged via Algorithm 4. |
|
|
107
107
|
| `branches` | `BranchEntry<TContext, TData>[]` | no | — | Explicit source-local fork. Evaluated after `finalize`, before linear successor selection. The first entry whose `if`/`when` passes wins; its `then` resolves to a step id, a flow id, or a `Directive`. See [Branches](./branches.md). |
|
|
108
108
|
|
|
109
109
|
### Lifecycle hooks
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
`finalize`
|
|
113
|
-
|
|
111
|
+
Two hook positions exist per step: `prepare` (before generation) and
|
|
112
|
+
`finalize` (after generation, before persistence). Each is reachable
|
|
113
|
+
through a top-level field, a `hooks.*` entry, or both — declaring both
|
|
114
|
+
runs them in sequence (shorthand first) with their returns merged by
|
|
115
|
+
Algorithm 4 (`flow.merge`).
|
|
114
116
|
|
|
115
|
-
|
|
|
116
|
-
|
|
117
|
-
| `
|
|
118
|
-
| `
|
|
119
|
-
| `finalize` | After the LLM call and tool loop complete. | `void \| Directive` | `void \| PrepareResult` | Validate collected data, redirect with `goTo` / `goToStep`, complete the flow. |
|
|
120
|
-
| `onExit` | When the step is left (next step entered, flow completed, aborted). | `void` | n/a | Emit telemetry. Cannot influence flow control. |
|
|
117
|
+
| Position | When it fires | May return | Use it for |
|
|
118
|
+
|----------|---------------|------------|------------|
|
|
119
|
+
| `prepare` / `hooks.prepare` | Before routing on the step's turn (non-auto steps). | `void \| PrepareResult` | Write session/context state, redirect the current turn with `goToStep`/`goTo`/`reset` (queued as `pendingDirective` and applied by routing this turn). |
|
|
120
|
+
| `finalize` / `hooks.finalize` | After generation completes, BEFORE the session is persisted. | `void \| PrepareResult` | Validate collected data, write state, queue a redirect for the next turn (`pendingDirective`), e.g. `{ complete: { next: { goTo: 'Checkout' } } }`. |
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
`
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
122
|
+
Handler directives merge through the canonical algorithm and are
|
|
123
|
+
validated with `flow.validate`. State writes
|
|
124
|
+
(`dataUpdate`/`contextUpdate`) apply immediately to the turn session,
|
|
125
|
+
so auto-save captures them even if this is the conversation's last
|
|
126
|
+
turn.
|
|
127
|
+
|
|
128
|
+
Note for **auto steps**: their `prepare` runs inside the auto-chain,
|
|
129
|
+
where pre-LLM fields (`appendPrompt`, `injectTools`, `halt`, `reply`)
|
|
130
|
+
are honored directly.
|
|
128
131
|
|
|
129
132
|
### Resolution within a step
|
|
130
133
|
|
|
@@ -133,12 +136,12 @@ For one step, the engine walks this sequence per turn:
|
|
|
133
136
|
1. Evaluate `if` (code, AND) and `when` (AI: positive OR, `!` exclusions inhibit) — fails skip the step entirely.
|
|
134
137
|
2. Evaluate `skip` (code, OR) — true means bypass and fall through.
|
|
135
138
|
3. Check `requires` — refuse entry if any required field is missing.
|
|
136
|
-
4. Run `
|
|
139
|
+
4. Run `prepare` / `hooks.prepare`. Its merged directive applies state writes immediately; position fields queue as `pendingDirective` for this turn's routing.
|
|
137
140
|
5. **LLM step**: call the LLM with the step's prompt, tools, and instructions; tool loop runs until completion. **Auto step**: skip the LLM call. **Reply step**: render `reply` as the verbatim assistant message.
|
|
138
|
-
6. Run `finalize` / `hooks.finalize
|
|
141
|
+
6. Run `finalize` / `hooks.finalize` (before persistence). State writes land now; position fields queue for the next turn.
|
|
139
142
|
7. Evaluate `branches`. The first entry whose `if`/`when` passes wins; its `then` resolves to a step id, a flow id, or a full `Directive`. If no entry matches, fall through.
|
|
140
143
|
8. Linear successor / AI step selection.
|
|
141
|
-
9.
|
|
144
|
+
9. Persist the session (auto-save) after finalize has run.
|
|
142
145
|
|
|
143
146
|
## Examples
|
|
144
147
|
|
|
@@ -317,6 +320,10 @@ following are thrown synchronously when the agent is built:
|
|
|
317
320
|
`reset`).
|
|
318
321
|
- `FlowConfigurationError` — a `branches[i].then` Directive contains
|
|
319
322
|
an empty `goTo: {}`.
|
|
323
|
+
- `FlowConfigurationError` — a tool-based `prepare`/`finalize` (tool id
|
|
324
|
+
or `Tool` object) is combined with `hooks.prepare`/`hooks.finalize`.
|
|
325
|
+
A step can only have one handler per position — remove one or inline
|
|
326
|
+
the tool call inside a function.
|
|
320
327
|
|
|
321
328
|
Runtime errors that surface from a step's hook execution include
|
|
322
329
|
`DataValidationError` (invalid collected data), `ToolExecutionError`
|
package/docs/reference/tool.md
CHANGED
|
@@ -251,15 +251,24 @@ export const bookHotel: Tool<Ctx, Data, { id: string }> = {
|
|
|
251
251
|
};
|
|
252
252
|
```
|
|
253
253
|
|
|
254
|
+
## Directive wiring and turn semantics
|
|
255
|
+
|
|
256
|
+
Tool-emitted directives work end-to-end: both `ctx.dispatch(directive)` calls and `{ directive }` returns are collected during execution, merged via Algorithm 4, and delivered to the engine in the same turn.
|
|
257
|
+
|
|
258
|
+
- **State fields** (`dataUpdate`, `contextUpdate`) apply immediately.
|
|
259
|
+
- **A `reply` directive short-circuits the tool loop** — its verbatim text becomes the final assistant message with no follow-up LLM call.
|
|
260
|
+
- **Control-flow fields** (`goTo`, `goToStep`, `reset`, …) queue on `session.pendingDirective` and steer the *next* turn (same deferred semantics as `agent.dispatch()`).
|
|
261
|
+
|
|
262
|
+
A handler that **throws** (or a call to an unregistered tool) never crashes the turn: the executor reports a failure result *to the model* — a `role: "tool"` message shaped `{"success":false,"error":"…"}` — so it can react to the failed call instead of the framework fabricating a success.
|
|
263
|
+
|
|
254
264
|
## Errors
|
|
255
265
|
|
|
256
|
-
Misuse surfaces as typed errors from
|
|
266
|
+
Misuse surfaces as typed errors from registration-time validation; execution-time problems degrade to failed tool results rather than thrown errors:
|
|
257
267
|
|
|
258
|
-
- `
|
|
268
|
+
- `ToolCreationError` — invalid tool definition at registration (missing id/handler, duplicate id, bad schema).
|
|
259
269
|
- `FlowConfigurationError` — a returned `directive` is malformed (e.g., two position fields set, or `goTo` references an unknown flow/step).
|
|
260
|
-
- `
|
|
261
|
-
|
|
262
|
-
Permission denials (`checkPermissions` returning `allowed: false`) are surfaced as a structured tool result with `success: false` and `error: <reason>` rather than a thrown error — this keeps the AI's reasoning loop intact.
|
|
270
|
+
- Execution failures — a thrown handler, `success: false` return, permission denial, failed `validateInput`, timeout, or unknown tool name all become structured `success: false` tool results surfaced to the model, keeping the AI's reasoning loop intact.
|
|
271
|
+
- `DataValidationError` — `dataUpdate` violates the agent schema (logged; the call reports failure instead of applying the write).
|
|
263
272
|
|
|
264
273
|
## Related
|
|
265
274
|
|
|
@@ -32,7 +32,9 @@ const agent = createAgent({
|
|
|
32
32
|
}],
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
-
const response = await agent.respond(
|
|
35
|
+
const response = await agent.respond({
|
|
36
|
+
history: [{ role: "user", content: "Hi, I'm Alice" }],
|
|
37
|
+
});
|
|
36
38
|
console.log(response.message);
|
|
37
39
|
```
|
|
38
40
|
|
|
@@ -110,14 +112,16 @@ requiredFields: ["name"],
|
|
|
110
112
|
|
|
111
113
|
For this agent, completion happens on the first turn. For a longer flow, the gate would force more steps before the model wraps up.
|
|
112
114
|
|
|
113
|
-
### `agent.respond(
|
|
115
|
+
### `agent.respond(params)`
|
|
114
116
|
|
|
115
117
|
```typescript
|
|
116
|
-
const response = await agent.respond(
|
|
118
|
+
const response = await agent.respond({
|
|
119
|
+
history: [{ role: "user", content: "Hi, I'm Alice" }],
|
|
120
|
+
});
|
|
117
121
|
console.log(response.message);
|
|
118
122
|
```
|
|
119
123
|
|
|
120
|
-
`respond(
|
|
124
|
+
`respond(params)` runs one turn end to end: route to a flow, extract data, walk auto-step chains, call the LLM, deliver the assistant message, persist. `params` takes `history` (required — the conversation so far as `{ role, content }[]`) and optionally `session`, `contextOverride`, and `signal`. When no session is passed, the agent manages one internally; pass an explicit session (see below) for server-side, multi-conversation use. It returns an `AgentResponse` with the fields you usually want on hand:
|
|
121
125
|
|
|
122
126
|
| Field | Type | What it is |
|
|
123
127
|
|-------|------|------------|
|
|
@@ -147,16 +147,15 @@ The pattern is consistent: the schema describes the universe of possible data, e
|
|
|
147
147
|
Run the file with a single message that contains all three fields:
|
|
148
148
|
|
|
149
149
|
```typescript
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
);
|
|
150
|
+
const response = await agent.respond({
|
|
151
|
+
history: [
|
|
152
|
+
{ role: "user", content: "I want a hotel in Lisbon for two people next Friday." },
|
|
153
|
+
],
|
|
154
|
+
});
|
|
156
155
|
|
|
157
156
|
console.log(response.message);
|
|
158
|
-
console.log(response.data);
|
|
159
|
-
console.log(response.currentStep?.id);
|
|
157
|
+
console.log(response.session?.data);
|
|
158
|
+
console.log(response.session?.currentStep?.id);
|
|
160
159
|
```
|
|
161
160
|
|
|
162
161
|
The output is roughly:
|
|
@@ -176,7 +175,13 @@ Three things happened in one turn:
|
|
|
176
175
|
Try a message with one missing field:
|
|
177
176
|
|
|
178
177
|
```typescript
|
|
179
|
-
await agent.respond(
|
|
178
|
+
await agent.respond({
|
|
179
|
+
history: [
|
|
180
|
+
{ role: "user", content: "I want a hotel in Lisbon" },
|
|
181
|
+
{ role: "assistant", content: "Sure — when do you travel?" },
|
|
182
|
+
{ role: "user", content: "Book me a hotel in Lisbon next Friday." },
|
|
183
|
+
],
|
|
184
|
+
});
|
|
180
185
|
```
|
|
181
186
|
|
|
182
187
|
The extractor populates `city` and `checkIn`. `ask_city` and `ask_check_in` both skip — their `collect` keys are present. `ask_guests` does *not* skip — `guests` is undefined — so the engine enters it and the assistant asks how many people are travelling.
|
|
@@ -184,7 +189,11 @@ The extractor populates `city` and `checkIn`. `ask_city` and `ask_check_in` both
|
|
|
184
189
|
Try the inverse: a message with only one field.
|
|
185
190
|
|
|
186
191
|
```typescript
|
|
187
|
-
await agent.respond(
|
|
192
|
+
await agent.respond({
|
|
193
|
+
history: [
|
|
194
|
+
{ role: "user", content: "I'd like to go to Lisbon." },
|
|
195
|
+
],
|
|
196
|
+
});
|
|
188
197
|
```
|
|
189
198
|
|
|
190
199
|
The extractor populates `city` only. `ask_city` skips, `ask_check_in` enters next (its `requires: ["city"]` is satisfied), and the assistant asks for the check-in date. Three turns later, the same `confirm` step runs.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/** @intent Minimal agent: one flow, one step, one response.
|
|
2
2
|
* @teaches createAgent, GeminiProvider, Flow, Step, respond
|
|
3
3
|
* @readAfter docs/start/02-first-agent.md */
|
|
4
|
-
import { createAgent, GeminiProvider } from "../src";
|
|
4
|
+
import { createAgent, GeminiProvider } from "../src/index.js";
|
|
5
5
|
|
|
6
6
|
if (!process.env.GEMINI_API_KEY) throw new Error("Set GEMINI_API_KEY");
|
|
7
7
|
|
|
8
8
|
const agent = createAgent({
|
|
9
9
|
name: "Greeter",
|
|
10
|
-
provider: new GeminiProvider({ apiKey: process.env.GEMINI_API_KEY, model: "gemini-3.
|
|
10
|
+
provider: new GeminiProvider({ apiKey: process.env.GEMINI_API_KEY, model: "gemini-3.5-flash-lite" }),
|
|
11
11
|
schema: { type: "object", properties: { name: { type: "string" } } },
|
|
12
12
|
flows: [{
|
|
13
13
|
title: "Greet",
|
|
@@ -40,7 +40,7 @@ const agent = createAgent<Record<string, never>, BookingData>({
|
|
|
40
40
|
name: "Booking Agent",
|
|
41
41
|
provider: new GeminiProvider({
|
|
42
42
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
43
|
-
model: "gemini-3.
|
|
43
|
+
model: "gemini-3.5-flash-lite",
|
|
44
44
|
}),
|
|
45
45
|
schema,
|
|
46
46
|
flows: [
|
package/examples/03-tools.ts
CHANGED
|
@@ -99,7 +99,7 @@ const agent = createAgent<AppContext, AppData>({
|
|
|
99
99
|
name: "BookingAgent",
|
|
100
100
|
provider: new GeminiProvider({
|
|
101
101
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
102
|
-
model: "gemini-3.
|
|
102
|
+
model: "gemini-3.5-flash-lite",
|
|
103
103
|
}),
|
|
104
104
|
schema: {
|
|
105
105
|
type: "object",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Read next: docs/guides/instructions.md
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { createAgent, GeminiProvider } from "../src";
|
|
7
|
+
import { createAgent, GeminiProvider } from "../src/index.js";
|
|
8
8
|
|
|
9
9
|
if (!process.env.GEMINI_API_KEY) throw new Error("Set GEMINI_API_KEY");
|
|
10
10
|
|
|
@@ -22,7 +22,7 @@ const agent = createAgent<unknown, SupportData>({
|
|
|
22
22
|
name: "SupportBot",
|
|
23
23
|
provider: new GeminiProvider({
|
|
24
24
|
apiKey: process.env.GEMINI_API_KEY,
|
|
25
|
-
model: "gemini-3.
|
|
25
|
+
model: "gemini-3.5-flash-lite",
|
|
26
26
|
}),
|
|
27
27
|
schema: {
|
|
28
28
|
type: "object",
|
package/examples/05-branching.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** @intent Demonstrates step.branches — source-local forks with if, when, and Directive targets.
|
|
2
2
|
* @teaches BranchEntry, BranchMap, if-only fork, when-only fork, combined if+when, mixed targets
|
|
3
3
|
* @readAfter docs/guides/branching.md */
|
|
4
|
-
import { createAgent, GeminiProvider } from "../src";
|
|
5
|
-
import type { BranchMap, Directive, FlowOptions, StepOptions } from "../src";
|
|
4
|
+
import { createAgent, GeminiProvider } from "../src/index.js";
|
|
5
|
+
import type { BranchMap, Directive, FlowOptions, StepOptions } from "../src/index.js";
|
|
6
6
|
|
|
7
7
|
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ interface Data { intent: string; query: string; answer: string }
|
|
|
13
13
|
|
|
14
14
|
const provider = new GeminiProvider({
|
|
15
15
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
16
|
-
model: "gemini-3.
|
|
16
|
+
model: "gemini-3.5-flash-lite",
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
// ─── Steps with branches ─────────────────────────────────────────────────────
|
|
@@ -19,7 +19,7 @@ const agent = createAgent<{}, AppData>({
|
|
|
19
19
|
name: "FlowControlDemo",
|
|
20
20
|
provider: new GeminiProvider({
|
|
21
21
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
22
|
-
model: "gemini-3.
|
|
22
|
+
model: "gemini-3.5-flash-lite",
|
|
23
23
|
}),
|
|
24
24
|
schema: {
|
|
25
25
|
type: "object",
|
|
@@ -45,8 +45,8 @@ const agent = createAgent<{}, AppData>({
|
|
|
45
45
|
// When the user confirms, complete with a chained directive
|
|
46
46
|
// that moves to the "Checkout" flow.
|
|
47
47
|
hooks: {
|
|
48
|
-
finalize: (
|
|
49
|
-
if (data
|
|
48
|
+
finalize: (_context, data) => {
|
|
49
|
+
if (data?.confirmed) {
|
|
50
50
|
const d: Directive<{}, AppData> = {
|
|
51
51
|
complete: { next: { goTo: "Checkout" }, reason: "User confirmed" },
|
|
52
52
|
};
|
package/examples/07-streaming.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/** @intent Session persistence with MemoryAdapter: implicit default, explicit wiring, and sessionId for cross-turn continuity.
|
|
2
2
|
* @teaches MemoryAdapter, PersistenceConfig, sessionId, session resumption
|
|
3
3
|
* @readAfter docs/guides/persistence.md */
|
|
4
|
-
import { createAgent, GeminiProvider, MemoryAdapter } from "../src";
|
|
4
|
+
import { createAgent, GeminiProvider, MemoryAdapter } from "../src/index.js";
|
|
5
5
|
|
|
6
6
|
if (!process.env.GEMINI_API_KEY) throw new Error("Set GEMINI_API_KEY");
|
|
7
7
|
|
|
8
8
|
const provider = new GeminiProvider({
|
|
9
9
|
apiKey: process.env.GEMINI_API_KEY,
|
|
10
|
-
model: "gemini-3.
|
|
10
|
+
model: "gemini-3.5-flash-lite",
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
const schema = {
|
package/examples/09-signals.ts
CHANGED
|
@@ -100,7 +100,7 @@ const agent = createAgent<AppContext, AppData>({
|
|
|
100
100
|
name: "SupportAgent",
|
|
101
101
|
provider: new GeminiProvider({
|
|
102
102
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
103
|
-
model: "gemini-3.
|
|
103
|
+
model: "gemini-3.5-flash-lite",
|
|
104
104
|
}),
|
|
105
105
|
context: { supportTier: "free" },
|
|
106
106
|
schema: {
|
package/examples/tsconfig.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
3
|
"target": "ES2022",
|
|
4
|
-
"module": "
|
|
4
|
+
"module": "node16",
|
|
5
5
|
"lib": [
|
|
6
6
|
"ES2022",
|
|
7
7
|
"DOM"
|
|
8
8
|
],
|
|
9
|
-
"moduleResolution": "
|
|
10
|
-
"types": [
|
|
9
|
+
"moduleResolution": "node16",
|
|
10
|
+
"types": [
|
|
11
|
+
"node"
|
|
12
|
+
],
|
|
11
13
|
"strict": true,
|
|
12
14
|
"esModuleInterop": true,
|
|
13
15
|
"skipLibCheck": true,
|
|
@@ -15,6 +17,7 @@
|
|
|
15
17
|
"resolveJsonModule": true,
|
|
16
18
|
"allowSyntheticDefaultImports": true,
|
|
17
19
|
"noEmit": true,
|
|
20
|
+
"allowImportingTsExtensions": true,
|
|
18
21
|
"paths": {
|
|
19
22
|
"@falai/agent": [
|
|
20
23
|
"../src/index.ts"
|