@falai/agent 1.2.8 → 2.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 +40 -886
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +9 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +5 -5
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +30 -11
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +5 -5
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/constants/index.d.ts +0 -9
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +2 -11
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +119 -153
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +471 -324
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/cjs/core/AutoChainExecutor.js +297 -0
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
- package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/BranchEvaluator.js +130 -0
- package/dist/cjs/core/BranchEvaluator.js.map +1 -0
- package/dist/cjs/core/DirectiveBus.d.ts +88 -0
- package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveBus.js +196 -0
- package/dist/cjs/core/DirectiveBus.js.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.js +121 -0
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
- package/dist/cjs/core/Flow.d.ts +186 -0
- package/dist/cjs/core/Flow.d.ts.map +1 -0
- package/dist/cjs/core/Flow.js +550 -0
- package/dist/cjs/core/Flow.js.map +1 -0
- package/dist/cjs/core/FlowRouter.d.ts +182 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
- package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
- package/dist/cjs/core/FlowRouter.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.d.ts +2 -2
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +7 -7
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +21 -8
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +182 -105
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
- package/dist/cjs/core/PromptSectionCache.js +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +18 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +38 -36
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +73 -56
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +1191 -1014
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +509 -136
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/SignalEvaluator.js +333 -0
- package/dist/cjs/core/SignalEvaluator.js.map +1 -0
- package/dist/cjs/core/SignalProcessor.d.ts +152 -0
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
- package/dist/cjs/core/SignalProcessor.js +562 -0
- package/dist/cjs/core/SignalProcessor.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +43 -32
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +221 -126
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +44 -13
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +174 -91
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/core/flow-namespace.d.ts +49 -0
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
- package/dist/cjs/core/flow-namespace.js +171 -0
- package/dist/cjs/core/flow-namespace.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +183 -54
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +0 -6
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/ai.d.ts +3 -3
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +15 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +22 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/flow.d.ts +513 -0
- package/dist/cjs/types/flow.d.ts.map +1 -0
- package/dist/cjs/types/{route.js → flow.js} +2 -2
- package/dist/cjs/types/flow.js.map +1 -0
- package/dist/cjs/types/index.d.ts +7 -6
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +6 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +11 -7
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/routing.d.ts +1 -1
- package/dist/cjs/types/routing.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +24 -23
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +248 -0
- package/dist/cjs/types/signals.d.ts.map +1 -0
- package/dist/cjs/types/signals.js +11 -0
- package/dist/cjs/types/signals.js.map +1 -0
- package/dist/cjs/types/template.d.ts +2 -8
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +36 -29
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +7 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/id.d.ts +13 -5
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +24 -10
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -2
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +44 -5
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +197 -38
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/constants/index.d.ts +0 -9
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -9
- package/dist/constants/index.js.map +1 -1
- package/dist/core/Agent.d.ts +119 -153
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +472 -325
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +107 -0
- package/dist/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/core/AutoChainExecutor.js +293 -0
- package/dist/core/AutoChainExecutor.js.map +1 -0
- package/dist/core/BranchEvaluator.d.ts +54 -0
- package/dist/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/core/BranchEvaluator.js +126 -0
- package/dist/core/BranchEvaluator.js.map +1 -0
- package/dist/core/DirectiveBus.d.ts +88 -0
- package/dist/core/DirectiveBus.d.ts.map +1 -0
- package/dist/core/DirectiveBus.js +192 -0
- package/dist/core/DirectiveBus.js.map +1 -0
- package/dist/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/core/DirectiveChainTracker.js +117 -0
- package/dist/core/DirectiveChainTracker.js.map +1 -0
- package/dist/core/Flow.d.ts +186 -0
- package/dist/core/Flow.d.ts.map +1 -0
- package/dist/core/Flow.js +546 -0
- package/dist/core/Flow.js.map +1 -0
- package/dist/core/FlowRouter.d.ts +182 -0
- package/dist/core/FlowRouter.d.ts.map +1 -0
- package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
- package/dist/core/FlowRouter.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts +2 -2
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +7 -7
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +21 -8
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +183 -106
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +1 -1
- package/dist/core/PromptSectionCache.js +1 -1
- package/dist/core/ResponseEngine.d.ts +18 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +38 -36
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +73 -56
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +1193 -1016
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +124 -26
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +509 -137
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +86 -0
- package/dist/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/core/SignalEvaluator.js +326 -0
- package/dist/core/SignalEvaluator.js.map +1 -0
- package/dist/core/SignalProcessor.d.ts +152 -0
- package/dist/core/SignalProcessor.d.ts.map +1 -0
- package/dist/core/SignalProcessor.js +555 -0
- package/dist/core/SignalProcessor.js.map +1 -0
- package/dist/core/Step.d.ts +43 -32
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +220 -126
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +44 -13
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +174 -91
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +35 -0
- package/dist/core/createAgent.d.ts.map +1 -0
- package/dist/core/createAgent.js +36 -0
- package/dist/core/createAgent.js.map +1 -0
- package/dist/core/flow-namespace.d.ts +49 -0
- package/dist/core/flow-namespace.d.ts.map +1 -0
- package/dist/core/flow-namespace.js +168 -0
- package/dist/core/flow-namespace.js.map +1 -0
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/types/agent.d.ts +183 -54
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/ai.d.ts +3 -3
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +18 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/flow.d.ts +513 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +5 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +7 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +11 -7
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/routing.d.ts +1 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -23
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +248 -0
- package/dist/types/signals.d.ts.map +1 -0
- package/dist/types/signals.js +10 -0
- package/dist/types/signals.js.map +1 -0
- package/dist/types/template.d.ts +2 -8
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +36 -29
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +7 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/id.d.ts +13 -5
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +44 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +193 -37
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +15 -202
- package/docs/concepts/architecture.md +281 -0
- package/docs/concepts/directives.md +400 -0
- package/docs/concepts/pipeline.md +399 -0
- package/docs/guides/branching.md +263 -0
- package/docs/guides/compaction.md +163 -0
- package/docs/guides/conditions.md +167 -0
- package/docs/guides/error-handling.md +176 -0
- package/docs/guides/flow-control.md +409 -0
- package/docs/guides/instructions.md +210 -0
- package/docs/guides/persistence.md +182 -0
- package/docs/guides/streaming.md +137 -0
- package/docs/migration/README.md +15 -0
- package/docs/migration/route-to-flow.md +560 -0
- package/docs/migration/v1-to-v2.md +909 -0
- package/docs/reference/adapters.md +481 -0
- package/docs/reference/branches.md +241 -0
- package/docs/reference/create-agent.md +186 -0
- package/docs/reference/directive.md +243 -0
- package/docs/reference/errors.md +122 -0
- package/docs/reference/flow.md +238 -0
- package/docs/reference/instruction.md +177 -0
- package/docs/reference/pre-directive.md +131 -0
- package/docs/reference/providers.md +227 -0
- package/docs/reference/signals.md +356 -0
- package/docs/reference/step.md +339 -0
- package/docs/reference/tool.md +269 -0
- package/docs/start/01-install.md +81 -0
- package/docs/start/02-first-agent.md +196 -0
- package/docs/start/03-collect-data.md +222 -0
- package/docs/start/04-add-tools.md +276 -0
- package/docs/start/05-go-to-production.md +216 -0
- package/examples/01-quickstart.ts +20 -0
- package/examples/02-data-extraction.ts +90 -0
- package/examples/03-tools.ts +136 -0
- package/examples/04-instructions.ts +100 -0
- package/examples/05-branching.ts +140 -0
- package/examples/06-flow-control.ts +103 -0
- package/examples/07-streaming.ts +69 -0
- package/examples/08-persistence.ts +98 -0
- package/examples/09-signals.ts +144 -0
- package/examples/tsconfig.json +30 -0
- package/package.json +2 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +10 -8
- package/src/adapters/PostgreSQLAdapter.ts +26 -10
- package/src/adapters/PrismaAdapter.ts +6 -6
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +31 -12
- package/src/constants/index.ts +2 -10
- package/src/core/Agent.ts +585 -374
- package/src/core/AutoChainExecutor.ts +440 -0
- package/src/core/BranchEvaluator.ts +167 -0
- package/src/core/DirectiveBus.ts +248 -0
- package/src/core/DirectiveChainTracker.ts +144 -0
- package/src/core/Flow.ts +666 -0
- package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
- package/src/core/PersistenceManager.ts +8 -8
- package/src/core/PromptComposer.ts +209 -140
- package/src/core/PromptSectionCache.ts +1 -1
- package/src/core/ResponseEngine.ts +61 -46
- package/src/core/ResponseModal.ts +1453 -1240
- package/src/core/ResponsePipeline.ts +655 -175
- package/src/core/SignalEvaluator.ts +420 -0
- package/src/core/SignalProcessor.ts +723 -0
- package/src/core/Step.ts +279 -176
- package/src/core/StreamingToolExecutor.ts +4 -4
- package/src/core/ToolManager.ts +200 -97
- package/src/core/createAgent.ts +40 -0
- package/src/core/flow-namespace.ts +219 -0
- package/src/index.ts +42 -36
- package/src/types/agent.ts +182 -53
- package/src/types/ai.ts +3 -3
- package/src/types/errors.ts +18 -0
- package/src/types/flow.ts +590 -0
- package/src/types/index.ts +43 -16
- package/src/types/persistence.ts +12 -8
- package/src/types/routing.ts +1 -1
- package/src/types/session.ts +26 -23
- package/src/types/signals.ts +321 -0
- package/src/types/template.ts +3 -11
- package/src/types/tool.ts +50 -42
- package/src/utils/condition.ts +13 -4
- package/src/utils/id.ts +27 -9
- package/src/utils/index.ts +6 -2
- package/src/utils/session.ts +238 -42
- package/dist/cjs/core/BatchExecutor.d.ts +0 -359
- package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
- package/dist/cjs/core/BatchExecutor.js +0 -861
- package/dist/cjs/core/BatchExecutor.js.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.js +0 -223
- package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -180
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -542
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -185
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -336
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/route.js.map +0 -1
- package/dist/core/BatchExecutor.d.ts +0 -359
- package/dist/core/BatchExecutor.d.ts.map +0 -1
- package/dist/core/BatchExecutor.js +0 -856
- package/dist/core/BatchExecutor.js.map +0 -1
- package/dist/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/core/BatchPromptBuilder.js +0 -219
- package/dist/core/BatchPromptBuilder.js.map +0 -1
- package/dist/core/Route.d.ts +0 -180
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -538
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -185
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/types/route.d.ts +0 -336
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/route.js +0 -5
- package/dist/types/route.js.map +0 -1
- package/docs/CONTRIBUTING.md +0 -521
- package/docs/api/README.md +0 -3299
- package/docs/api/overview.md +0 -1410
- package/docs/architecture/data-extraction-flow.md +0 -360
- package/docs/architecture/multi-step-execution.md +0 -277
- package/docs/core/agent/README.md +0 -938
- package/docs/core/agent/context-management.md +0 -796
- package/docs/core/agent/rules-and-prohibitions.md +0 -113
- package/docs/core/agent/session-management.md +0 -693
- package/docs/core/ai-integration/prompt-composition.md +0 -355
- package/docs/core/ai-integration/providers.md +0 -515
- package/docs/core/ai-integration/response-processing.md +0 -433
- package/docs/core/conversation-flows/data-collection.md +0 -772
- package/docs/core/conversation-flows/route-dsl.md +0 -509
- package/docs/core/conversation-flows/routes.md +0 -249
- package/docs/core/conversation-flows/step-transitions.md +0 -731
- package/docs/core/conversation-flows/steps.md +0 -268
- package/docs/core/error-handling.md +0 -830
- package/docs/core/persistence/adapters.md +0 -255
- package/docs/core/persistence/session-storage.md +0 -656
- package/docs/core/routing/intelligent-routing.md +0 -470
- package/docs/core/tools/enhanced-tool.md +0 -186
- package/docs/core/tools/streaming-execution.md +0 -161
- package/docs/core/tools/tool-definition.md +0 -970
- package/docs/core/tools/tool-scoping.md +0 -819
- package/docs/guides/advanced-patterns/publishing.md +0 -186
- package/docs/guides/context-compaction.md +0 -96
- package/docs/guides/error-handling-patterns.md +0 -578
- package/docs/guides/getting-started/README.md +0 -795
- package/docs/guides/migration/README.md +0 -101
- package/docs/guides/migration/flexible-routing-conditions.md +0 -375
- package/docs/guides/migration/multi-step-execution.md +0 -393
- package/docs/guides/migration/response-modal-refactor.md +0 -518
- package/docs/guides/prompt-optimization.md +0 -164
- package/examples/advanced-patterns/context-compaction.ts +0 -223
- package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
- package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
- package/examples/advanced-patterns/streaming-responses.ts +0 -656
- package/examples/ai-providers/anthropic-integration.ts +0 -388
- package/examples/ai-providers/openai-integration.ts +0 -228
- package/examples/condition-patterns/function-only-conditions.ts +0 -365
- package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
- package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +0 -296
- package/examples/conversation-flows/completion-transitions.ts +0 -318
- package/examples/core-concepts/basic-agent.ts +0 -503
- package/examples/core-concepts/modern-streaming-api.ts +0 -309
- package/examples/core-concepts/schema-driven-extraction.ts +0 -332
- package/examples/core-concepts/session-management.ts +0 -494
- package/examples/integrations/database-integration.ts +0 -631
- package/examples/integrations/healthcare-integration.ts +0 -595
- package/examples/integrations/search-integration.ts +0 -530
- package/examples/integrations/server-session-management.ts +0 -307
- package/examples/persistence/custom-adapter.ts +0 -526
- package/examples/persistence/database-persistence.ts +0 -583
- package/examples/persistence/memory-sessions.ts +0 -495
- package/examples/persistence/prisma-schema.example.prisma +0 -74
- package/examples/persistence/redis-persistence.ts +0 -488
- package/examples/tools/basic-tools.ts +0 -765
- package/examples/tools/data-enrichment-tools.ts +0 -593
- package/examples/tools/enhanced-tool-metadata.ts +0 -268
- package/examples/tools/streaming-tool-execution.ts +0 -283
- package/src/core/BatchExecutor.ts +0 -1187
- package/src/core/BatchPromptBuilder.ts +0 -299
- package/src/core/Route.ts +0 -678
- package/src/types/route.ts +0 -392
|
@@ -1,515 +0,0 @@
|
|
|
1
|
-
# AI Provider Integrations
|
|
2
|
-
|
|
3
|
-
@falai/agent provides unified interfaces for multiple AI providers, enabling seamless switching between models and automatic fallback handling.
|
|
4
|
-
|
|
5
|
-
## Supported Providers
|
|
6
|
-
|
|
7
|
-
### OpenAI Provider
|
|
8
|
-
|
|
9
|
-
Full-featured integration with GPT models, including backup model support and structured outputs.
|
|
10
|
-
|
|
11
|
-
```typescript
|
|
12
|
-
import { OpenAIProvider } from "@falai/agent";
|
|
13
|
-
|
|
14
|
-
const provider = new OpenAIProvider({
|
|
15
|
-
apiKey: process.env.OPENAI_API_KEY,
|
|
16
|
-
model: "gpt-5",
|
|
17
|
-
backupModels: ["gpt-4"], // Fallback models
|
|
18
|
-
config: {
|
|
19
|
-
temperature: 0.7,
|
|
20
|
-
max_tokens: 1000,
|
|
21
|
-
},
|
|
22
|
-
retryConfig: {
|
|
23
|
-
timeout: 30000,
|
|
24
|
-
retries: 3,
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
**Features:**
|
|
30
|
-
|
|
31
|
-
- ✅ GPT-4, GPT-5, and all OpenAI models
|
|
32
|
-
- ✅ Backup model fallback on failures
|
|
33
|
-
- ✅ Structured outputs with JSON Schema
|
|
34
|
-
- ✅ Tool calling support
|
|
35
|
-
- ✅ Streaming responses
|
|
36
|
-
- ✅ Automatic retry logic
|
|
37
|
-
|
|
38
|
-
### Google Gemini Provider
|
|
39
|
-
|
|
40
|
-
Integration with Google's Gemini models through Vertex AI or AI Studio.
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
import { GeminiProvider } from "@falai/agent";
|
|
44
|
-
|
|
45
|
-
const provider = new GeminiProvider({
|
|
46
|
-
apiKey: process.env.GEMINI_API_KEY,
|
|
47
|
-
model: "gemini-pro",
|
|
48
|
-
config: {
|
|
49
|
-
safetySettings: [
|
|
50
|
-
{
|
|
51
|
-
category: "HARM_CATEGORY_HARASSMENT",
|
|
52
|
-
threshold: "BLOCK_MEDIUM_AND_ABOVE",
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**Features:**
|
|
60
|
-
|
|
61
|
-
- ✅ Gemini 2.0, 2.5 Pro, and Flash models
|
|
62
|
-
- ✅ Safety settings and content filtering
|
|
63
|
-
- ✅ Multimodal capabilities (text, images)
|
|
64
|
-
- ✅ Function calling support
|
|
65
|
-
- ✅ Streaming responses
|
|
66
|
-
|
|
67
|
-
### Anthropic Claude Provider
|
|
68
|
-
|
|
69
|
-
Integration with Anthropic's Claude models via their API.
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
import { AnthropicProvider } from "@falai/agent";
|
|
73
|
-
|
|
74
|
-
const provider = new AnthropicProvider({
|
|
75
|
-
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
76
|
-
model: "claude-sonnet-4.5",
|
|
77
|
-
config: {
|
|
78
|
-
maxTokens: 4096,
|
|
79
|
-
temperature: 0.7,
|
|
80
|
-
},
|
|
81
|
-
});
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**Features:**
|
|
85
|
-
|
|
86
|
-
- ✅ Claude 4 Opus, Sonnet, and Haiku
|
|
87
|
-
- ✅ Constitutional AI safety
|
|
88
|
-
- ✅ Excellent reasoning capabilities
|
|
89
|
-
- ✅ Tool calling support
|
|
90
|
-
- ✅ Streaming responses
|
|
91
|
-
|
|
92
|
-
### OpenRouter Provider
|
|
93
|
-
|
|
94
|
-
Unified access to multiple AI models through OpenRouter's API.
|
|
95
|
-
|
|
96
|
-
```typescript
|
|
97
|
-
import { OpenRouterProvider } from "@falai/agent";
|
|
98
|
-
|
|
99
|
-
const provider = new OpenRouterProvider({
|
|
100
|
-
apiKey: process.env.OPENROUTER_API_KEY,
|
|
101
|
-
model: "anthropic/claude-sonnet-4",
|
|
102
|
-
siteUrl: "https://your-app.com",
|
|
103
|
-
siteName: "Your App Name",
|
|
104
|
-
});
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
**Features:**
|
|
108
|
-
|
|
109
|
-
- ✅ Access to 100+ AI models
|
|
110
|
-
- ✅ Unified pricing and billing
|
|
111
|
-
- ✅ Automatic model routing
|
|
112
|
-
- ✅ Fallback model support
|
|
113
|
-
- ✅ Streaming responses
|
|
114
|
-
|
|
115
|
-
## Provider Configuration
|
|
116
|
-
|
|
117
|
-
### Common Options
|
|
118
|
-
|
|
119
|
-
All providers support these configuration options:
|
|
120
|
-
|
|
121
|
-
```typescript
|
|
122
|
-
interface BaseProviderOptions {
|
|
123
|
-
model: string; // Primary model to use
|
|
124
|
-
backupModels?: string[]; // Fallback models on failure
|
|
125
|
-
temperature?: number; // Response randomness (0-2)
|
|
126
|
-
maxTokens?: number; // Maximum response length
|
|
127
|
-
timeout?: number; // Request timeout in ms
|
|
128
|
-
retries?: number; // Number of retry attempts
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Advanced Configuration
|
|
133
|
-
|
|
134
|
-
```typescript
|
|
135
|
-
const provider = new OpenAIProvider({
|
|
136
|
-
apiKey: process.env.OPENAI_API_KEY,
|
|
137
|
-
model: "gpt-5",
|
|
138
|
-
|
|
139
|
-
// Model-specific parameters
|
|
140
|
-
config: {
|
|
141
|
-
temperature: 0.1, // Low randomness for consistent responses
|
|
142
|
-
top_p: 0.9, // Nucleus sampling
|
|
143
|
-
frequency_penalty: 0.1, // Reduce repetition
|
|
144
|
-
presence_penalty: 0.1, // Encourage topic diversity
|
|
145
|
-
max_tokens: 2048,
|
|
146
|
-
},
|
|
147
|
-
|
|
148
|
-
// Fallback configuration
|
|
149
|
-
backupModels: [
|
|
150
|
-
"gpt-4.1", // Try GPT-4 if turbo fails
|
|
151
|
-
"gpt-4", // Final fallback
|
|
152
|
-
],
|
|
153
|
-
|
|
154
|
-
// Retry configuration
|
|
155
|
-
retryConfig: {
|
|
156
|
-
timeout: 60000, // 60 second timeout
|
|
157
|
-
retries: 3, // Retry up to 3 times
|
|
158
|
-
},
|
|
159
|
-
});
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
## Unified Interface
|
|
163
|
-
|
|
164
|
-
All providers implement the same interface:
|
|
165
|
-
|
|
166
|
-
```typescript
|
|
167
|
-
interface AiProvider {
|
|
168
|
-
name: string;
|
|
169
|
-
|
|
170
|
-
// Synchronous response generation
|
|
171
|
-
generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>;
|
|
172
|
-
|
|
173
|
-
// Streaming response generation
|
|
174
|
-
generateMessageStream(
|
|
175
|
-
input: GenerateMessageInput
|
|
176
|
-
): AsyncGenerator<GenerateMessageStreamChunk>;
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Input Format
|
|
181
|
-
|
|
182
|
-
```typescript
|
|
183
|
-
interface GenerateMessageInput<TContext = unknown> {
|
|
184
|
-
prompt: string; // The prompt to send
|
|
185
|
-
history: Event[]; // Conversation history
|
|
186
|
-
context?: TContext; // Additional context data
|
|
187
|
-
tools?: ToolDefinition[]; // Available tools
|
|
188
|
-
parameters?: {
|
|
189
|
-
jsonSchema?: StructuredSchema; // Response schema
|
|
190
|
-
schemaName?: string; // Schema identifier
|
|
191
|
-
maxOutputTokens?: number; // Token limit
|
|
192
|
-
reasoning?: { effort: "low" | "medium" | "high" };
|
|
193
|
-
};
|
|
194
|
-
signal?: AbortSignal; // Cancellation support
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
### Output Format
|
|
199
|
-
|
|
200
|
-
```typescript
|
|
201
|
-
interface GenerateMessageOutput<TStructured = AgentStructuredResponse> {
|
|
202
|
-
message: string; // Main response text
|
|
203
|
-
metadata: {
|
|
204
|
-
model: string; // Model used
|
|
205
|
-
tokensUsed: number; // Total tokens consumed
|
|
206
|
-
promptTokens: number; // Input tokens
|
|
207
|
-
completionTokens: number; // Output tokens
|
|
208
|
-
finishReason?: string; // Why generation stopped
|
|
209
|
-
};
|
|
210
|
-
structured?: TStructured; // Structured data if schema provided
|
|
211
|
-
}
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
## Tool Calling Support
|
|
215
|
-
|
|
216
|
-
All providers support tool calling with consistent interfaces:
|
|
217
|
-
|
|
218
|
-
```typescript
|
|
219
|
-
const input: GenerateMessageInput = {
|
|
220
|
-
prompt: "What's the weather in Paris?",
|
|
221
|
-
history: conversationHistory,
|
|
222
|
-
tools: [
|
|
223
|
-
{
|
|
224
|
-
id: "get_weather",
|
|
225
|
-
description: "Get current weather for a location",
|
|
226
|
-
parameters: {
|
|
227
|
-
type: "object",
|
|
228
|
-
properties: {
|
|
229
|
-
location: { type: "string", description: "City name" },
|
|
230
|
-
},
|
|
231
|
-
required: ["location"],
|
|
232
|
-
},
|
|
233
|
-
},
|
|
234
|
-
],
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
const response = await provider.generateMessage(input);
|
|
238
|
-
|
|
239
|
-
// Check for tool calls
|
|
240
|
-
if (response.structured?.toolCalls) {
|
|
241
|
-
for (const toolCall of response.structured.toolCalls) {
|
|
242
|
-
console.log(`AI wants to call: ${toolCall.toolName}`);
|
|
243
|
-
console.log(`With arguments:`, toolCall.arguments);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
## Streaming Responses
|
|
249
|
-
|
|
250
|
-
Real-time response generation with chunked output:
|
|
251
|
-
|
|
252
|
-
```typescript
|
|
253
|
-
const stream = provider.generateMessageStream(input);
|
|
254
|
-
|
|
255
|
-
for await (const chunk of stream) {
|
|
256
|
-
if (chunk.delta) {
|
|
257
|
-
process.stdout.write(chunk.delta); // Real-time output
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
if (chunk.done) {
|
|
261
|
-
console.log("\nGeneration complete!");
|
|
262
|
-
console.log("Total tokens:", chunk.metadata?.tokensUsed);
|
|
263
|
-
console.log("Structured data:", chunk.structured);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
## Error Handling & Fallbacks
|
|
269
|
-
|
|
270
|
-
### Automatic Fallbacks
|
|
271
|
-
|
|
272
|
-
Providers automatically try backup models on failures:
|
|
273
|
-
|
|
274
|
-
```typescript
|
|
275
|
-
const provider = new OpenAIProvider({
|
|
276
|
-
apiKey: process.env.OPENAI_API_KEY,
|
|
277
|
-
model: "gpt-5",
|
|
278
|
-
backupModels: ["gpt-4.1", "gpt-4"],
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
// If gpt-4 fails (rate limit, server error, etc.)
|
|
282
|
-
// Automatically tries gpt-4.1, then gpt-4
|
|
283
|
-
const response = await provider.generateMessage(input);
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
### Error Classification
|
|
287
|
-
|
|
288
|
-
Different error types trigger different fallback behaviors:
|
|
289
|
-
|
|
290
|
-
```typescript
|
|
291
|
-
// Server errors (5xx) → Try backup models
|
|
292
|
-
// Rate limits (429) → Try backup models
|
|
293
|
-
// Invalid requests (4xx) → Don't retry
|
|
294
|
-
// Timeouts → Retry with same model
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
### Custom Error Handling
|
|
298
|
-
|
|
299
|
-
```typescript
|
|
300
|
-
try {
|
|
301
|
-
const response = await provider.generateMessage(input);
|
|
302
|
-
} catch (error) {
|
|
303
|
-
if (error.code === "rate_limit_exceeded") {
|
|
304
|
-
// Handle rate limiting
|
|
305
|
-
await delay(60000); // Wait 1 minute
|
|
306
|
-
return retryWithBackoff();
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
if (error.code === "model_not_available") {
|
|
310
|
-
// Switch to different provider
|
|
311
|
-
return fallbackProvider.generateMessage(input);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
throw error;
|
|
315
|
-
}
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
## Performance Optimization
|
|
319
|
-
|
|
320
|
-
### Connection Reuse
|
|
321
|
-
|
|
322
|
-
Reuse provider instances for better performance:
|
|
323
|
-
|
|
324
|
-
```typescript
|
|
325
|
-
// ✅ Good: Reuse provider instance
|
|
326
|
-
const provider = new OpenAIProvider({ apiKey, model: "gpt-4" });
|
|
327
|
-
|
|
328
|
-
const agent1 = new Agent({ provider });
|
|
329
|
-
const agent2 = new Agent({ provider }); // Same instance
|
|
330
|
-
|
|
331
|
-
// ❌ Bad: Create new instance each time
|
|
332
|
-
const agent3 = new Agent({
|
|
333
|
-
provider: new OpenAIProvider({ apiKey, model: "gpt-4" }),
|
|
334
|
-
});
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### Request Batching
|
|
338
|
-
|
|
339
|
-
Group related requests to reduce latency:
|
|
340
|
-
|
|
341
|
-
```typescript
|
|
342
|
-
// Process multiple conversations efficiently
|
|
343
|
-
const responses = await Promise.all([
|
|
344
|
-
agent1.respond({ history: history1 }),
|
|
345
|
-
agent2.respond({ history: history2 }),
|
|
346
|
-
agent3.respond({ history: history3 }),
|
|
347
|
-
]);
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
### Caching
|
|
351
|
-
|
|
352
|
-
Cache responses for similar prompts:
|
|
353
|
-
|
|
354
|
-
```typescript
|
|
355
|
-
const cache = new Map();
|
|
356
|
-
|
|
357
|
-
function getCachedResponse(prompt: string, context: any) {
|
|
358
|
-
const key = hash(`${prompt}-${JSON.stringify(context)}`);
|
|
359
|
-
return cache.get(key);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
function setCachedResponse(prompt: string, context: any, response: any) {
|
|
363
|
-
const key = hash(`${prompt}-${JSON.stringify(context)}`);
|
|
364
|
-
cache.set(key, response);
|
|
365
|
-
}
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
## Monitoring & Observability
|
|
369
|
-
|
|
370
|
-
### Response Metrics
|
|
371
|
-
|
|
372
|
-
Track provider performance and usage:
|
|
373
|
-
|
|
374
|
-
```typescript
|
|
375
|
-
const response = await provider.generateMessage(input);
|
|
376
|
-
|
|
377
|
-
console.log("Provider:", response.metadata?.model);
|
|
378
|
-
console.log("Tokens used:", response.metadata?.tokensUsed);
|
|
379
|
-
console.log("Prompt tokens:", response.metadata?.promptTokens);
|
|
380
|
-
console.log("Completion tokens:", response.metadata?.completionTokens);
|
|
381
|
-
console.log("Finish reason:", response.metadata?.finishReason);
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
### Cost Tracking
|
|
385
|
-
|
|
386
|
-
Monitor API usage costs:
|
|
387
|
-
|
|
388
|
-
```typescript
|
|
389
|
-
const costTracker = {
|
|
390
|
-
openai: {
|
|
391
|
-
"gpt-5": { prompt: 0.03, completion: 0.06 },
|
|
392
|
-
"gpt-4": { prompt: 0.002, completion: 0.002 },
|
|
393
|
-
},
|
|
394
|
-
};
|
|
395
|
-
|
|
396
|
-
function calculateCost(metadata: ResponseMetadata): number {
|
|
397
|
-
const rates = costTracker[metadata.model];
|
|
398
|
-
if (!rates) return 0;
|
|
399
|
-
|
|
400
|
-
return (
|
|
401
|
-
((metadata.promptTokens || 0) * rates.prompt) / 1000 +
|
|
402
|
-
((metadata.completionTokens || 0) * rates.completion) / 1000
|
|
403
|
-
);
|
|
404
|
-
}
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
### Health Monitoring
|
|
408
|
-
|
|
409
|
-
Track provider availability and latency:
|
|
410
|
-
|
|
411
|
-
```typescript
|
|
412
|
-
const healthChecks = new Map();
|
|
413
|
-
|
|
414
|
-
async function checkProviderHealth(provider: AiProvider): Promise<boolean> {
|
|
415
|
-
const startTime = Date.now();
|
|
416
|
-
|
|
417
|
-
try {
|
|
418
|
-
await provider.generateMessage({
|
|
419
|
-
prompt: "Hello",
|
|
420
|
-
history: [],
|
|
421
|
-
});
|
|
422
|
-
|
|
423
|
-
const latency = Date.now() - startTime;
|
|
424
|
-
healthChecks.set(provider.name, { healthy: true, latency });
|
|
425
|
-
return true;
|
|
426
|
-
} catch (error) {
|
|
427
|
-
healthChecks.set(provider.name, { healthy: false, error: error.message });
|
|
428
|
-
return false;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
## Custom Provider Implementation
|
|
434
|
-
|
|
435
|
-
Create providers for unsupported AI services:
|
|
436
|
-
|
|
437
|
-
```typescript
|
|
438
|
-
import {
|
|
439
|
-
AiProvider,
|
|
440
|
-
GenerateMessageInput,
|
|
441
|
-
GenerateMessageOutput,
|
|
442
|
-
} from "@falai/agent";
|
|
443
|
-
|
|
444
|
-
class CustomProvider implements AiProvider {
|
|
445
|
-
name = "custom";
|
|
446
|
-
|
|
447
|
-
async generateMessage(
|
|
448
|
-
input: GenerateMessageInput
|
|
449
|
-
): Promise<GenerateMessageOutput> {
|
|
450
|
-
// Implement your AI service integration
|
|
451
|
-
const response = await callCustomAI(input.prompt, input.context);
|
|
452
|
-
|
|
453
|
-
return {
|
|
454
|
-
message: response.text,
|
|
455
|
-
metadata: {
|
|
456
|
-
model: "custom-model-v1",
|
|
457
|
-
tokensUsed: response.tokens,
|
|
458
|
-
promptTokens: input.prompt.split(" ").length,
|
|
459
|
-
completionTokens: response.text.split(" ").length,
|
|
460
|
-
},
|
|
461
|
-
structured: response.structured,
|
|
462
|
-
};
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
async *generateMessageStream(input: GenerateMessageInput) {
|
|
466
|
-
// Implement streaming if supported
|
|
467
|
-
const stream = await callCustomAIStream(input.prompt, input.context);
|
|
468
|
-
|
|
469
|
-
for await (const chunk of stream) {
|
|
470
|
-
yield {
|
|
471
|
-
delta: chunk.text,
|
|
472
|
-
accumulated: chunk.fullText,
|
|
473
|
-
done: chunk.finished,
|
|
474
|
-
metadata: chunk.metadata,
|
|
475
|
-
};
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
## Best Practices
|
|
482
|
-
|
|
483
|
-
### Provider Selection
|
|
484
|
-
|
|
485
|
-
1. **Task Matching**: Choose providers based on task requirements
|
|
486
|
-
|
|
487
|
-
- OpenAI GPT-4: Complex reasoning, creative tasks
|
|
488
|
-
- Anthropic Claude: Safety-focused, analytical tasks
|
|
489
|
-
- Google Gemini: Multimodal, fast responses
|
|
490
|
-
- OpenRouter: Cost optimization, model experimentation
|
|
491
|
-
|
|
492
|
-
2. **Cost Optimization**: Use appropriate models for task complexity
|
|
493
|
-
|
|
494
|
-
- Simple tasks: GPT-4.1, Claude Haiku, Gemini Flash
|
|
495
|
-
- Complex tasks: GPT-5, Claude Sonnet, Gemini Pro
|
|
496
|
-
|
|
497
|
-
3. **Reliability**: Configure backup models for production
|
|
498
|
-
- Always have fallback options
|
|
499
|
-
- Monitor error rates and switch providers if needed
|
|
500
|
-
|
|
501
|
-
### Configuration
|
|
502
|
-
|
|
503
|
-
1. **Temperature**: Lower for deterministic tasks, higher for creative
|
|
504
|
-
2. **Max Tokens**: Set appropriate limits to control costs
|
|
505
|
-
3. **Timeouts**: Configure reasonable timeouts for your use case
|
|
506
|
-
4. **Retries**: Enable retries for transient failures
|
|
507
|
-
|
|
508
|
-
### Monitoring
|
|
509
|
-
|
|
510
|
-
1. **Track Usage**: Monitor token consumption and costs
|
|
511
|
-
2. **Error Rates**: Alert on high error rates
|
|
512
|
-
3. **Latency**: Monitor response times
|
|
513
|
-
4. **Fallback Usage**: Track how often backup models are used
|
|
514
|
-
|
|
515
|
-
The AI provider system enables flexible, reliable integration with multiple AI services while maintaining a consistent interface for the @falai/agent framework.
|