@falai/agent 0.8.1 → 0.9.0-alpha-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +306 -133
- package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/{core → cjs/src/core}/Agent.d.ts +65 -67
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1433 -0
- package/dist/cjs/src/core/Agent.js.map +1 -0
- package/dist/cjs/src/core/Events.d.ts +26 -0
- package/dist/cjs/src/core/Events.d.ts.map +1 -0
- package/dist/cjs/src/core/Events.js +144 -0
- package/dist/cjs/src/core/Events.js.map +1 -0
- package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +50 -20
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +84 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +446 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +126 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/Route.js +116 -20
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +76 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +197 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +96 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +206 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
- package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/{index.js → src/index.js} +21 -19
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/{types → src/types}/agent.d.ts +52 -33
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/{types → cjs/src/types}/history.d.ts +76 -18
- package/dist/cjs/src/types/history.d.ts.map +1 -0
- package/dist/cjs/src/types/history.js +33 -0
- package/dist/cjs/src/types/history.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +20 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +30 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/{types → src/types}/route.d.ts +85 -31
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/route.js.map +1 -1
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/routing.js.map +1 -1
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/schema.js.map +1 -1
- package/dist/cjs/src/types/session.d.ts +70 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +30 -0
- package/dist/cjs/src/types/template.d.ts.map +1 -0
- package/dist/cjs/src/types/template.js +3 -0
- package/dist/cjs/src/types/template.js.map +1 -0
- package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/tool.js.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts +8 -0
- package/dist/cjs/src/utils/clone.d.ts.map +1 -0
- package/dist/cjs/src/utils/clone.js +36 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/{utils → src/utils}/event.js +2 -2
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +31 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +128 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +13 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +49 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js.map +1 -0
- package/dist/cjs/src/utils/session.d.ts +51 -0
- package/dist/cjs/src/utils/session.d.ts.map +1 -0
- package/dist/cjs/{types → src/utils}/session.js +34 -11
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +107 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +283 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/{cjs → src}/core/Agent.d.ts +65 -67
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1429 -0
- package/dist/src/core/Agent.js.map +1 -0
- package/dist/src/core/Events.d.ts +26 -0
- package/dist/src/core/Events.d.ts.map +1 -0
- package/dist/src/core/Events.js +137 -0
- package/dist/src/core/Events.js.map +1 -0
- package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +47 -17
- package/dist/src/core/PersistenceManager.js.map +1 -0
- package/dist/src/core/PromptComposer.d.ts +27 -0
- package/dist/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/src/core/PromptComposer.js +153 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +31 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +80 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +143 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +442 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +126 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/{core → src/core}/Route.js +116 -20
- package/dist/src/core/Route.js.map +1 -0
- package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +98 -104
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +76 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +193 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +96 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +202 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolExecutor.d.ts +43 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +70 -0
- package/dist/src/core/ToolExecutor.js.map +1 -0
- package/dist/{cjs → src}/index.d.ts +7 -15
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -7
- package/dist/src/index.js.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/{types → src/types}/agent.d.ts +52 -33
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/{types → src/types}/ai.d.ts +7 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/{cjs → src}/types/ai.js.map +1 -1
- package/dist/{cjs → src}/types/history.d.ts +76 -18
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +30 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/types/index.d.ts +20 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +10 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/{cjs → src}/types/persistence.d.ts +39 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/{types → src/types}/route.d.ts +85 -31
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/{types → src/types}/route.js.map +1 -1
- package/dist/src/types/session.d.ts +70 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +30 -0
- package/dist/src/types/template.d.ts.map +1 -0
- package/dist/src/types/template.js +2 -0
- package/dist/src/types/template.js.map +1 -0
- package/dist/{types → src/types}/tool.d.ts +6 -8
- package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
- package/dist/{types → src/types}/tool.js.map +1 -1
- package/dist/src/utils/clone.d.ts +8 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/clone.js +33 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/{cjs → src}/utils/event.d.ts +1 -1
- package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
- package/dist/{utils → src/utils}/event.js +1 -1
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +31 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +121 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +13 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +19 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/session.d.ts +51 -0
- package/dist/src/utils/session.d.ts.map +1 -0
- package/dist/{types → src/utils}/session.js +32 -11
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +107 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +276 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/README.md +174 -68
- package/docs/{API_REFERENCE.md → api/README.md} +890 -251
- package/docs/api/overview.md +798 -0
- package/docs/core/agent/README.md +642 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +143 -94
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
- package/docs/core/ai-integration/prompt-composition.md +196 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +165 -0
- package/docs/core/conversation-flows/data-collection.md +545 -0
- package/docs/core/conversation-flows/route-dsl.md +479 -0
- package/docs/core/conversation-flows/routes.md +61 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +130 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +339 -0
- package/docs/core/tools/tool-definition.md +346 -0
- package/docs/core/tools/tool-execution.md +815 -0
- package/docs/core/tools/tool-scoping.md +628 -0
- package/docs/guides/getting-started/README.md +384 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
- package/examples/ai-providers/anthropic-integration.ts +377 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
- package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +112 -105
- package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
- package/examples/core-concepts/schema-driven-extraction.ts +301 -0
- package/examples/core-concepts/session-management.ts +394 -0
- package/examples/integrations/database-integration.ts +615 -0
- package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
- package/examples/integrations/server-session-management.ts +299 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
- package/examples/persistence/memory-sessions.ts +506 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
- package/examples/tools/basic-tools.ts +550 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
- package/package.json +14 -10
- package/src/adapters/MemoryAdapter.ts +74 -46
- package/src/adapters/MongoAdapter.ts +33 -24
- package/src/adapters/OpenSearchAdapter.ts +41 -37
- package/src/adapters/PostgreSQLAdapter.ts +35 -24
- package/src/adapters/PrismaAdapter.ts +69 -27
- package/src/adapters/RedisAdapter.ts +38 -26
- package/src/adapters/SQLiteAdapter.ts +32 -22
- package/src/core/Agent.ts +1093 -478
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +77 -47
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +118 -38
- package/src/core/ResponsePipeline.ts +715 -0
- package/src/core/Route.ts +168 -51
- package/src/core/RoutingEngine.ts +178 -209
- package/src/core/SessionManager.ts +241 -0
- package/src/core/Step.ts +149 -67
- package/src/core/ToolExecutor.ts +37 -42
- package/src/index.ts +31 -37
- package/src/providers/AnthropicProvider.ts +71 -5
- package/src/providers/GeminiProvider.ts +83 -2
- package/src/providers/OpenAIProvider.ts +95 -3
- package/src/providers/OpenRouterProvider.ts +102 -2
- package/src/types/agent.ts +48 -36
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +43 -7
- package/src/types/persistence.ts +46 -28
- package/src/types/route.ts +104 -45
- package/src/types/session.ts +19 -213
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +9 -11
- package/src/utils/clone.ts +36 -0
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +143 -0
- package/src/utils/index.ts +53 -0
- package/src/utils/session.ts +229 -0
- package/src/utils/template.ts +335 -0
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -966
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/DomainRegistry.d.ts +0 -36
- package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
- package/dist/cjs/core/DomainRegistry.js +0 -72
- package/dist/cjs/core/DomainRegistry.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -41
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -99
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -24
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -127
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -14
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -56
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -90
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -72
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -150
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/Tool.d.ts +0 -39
- package/dist/cjs/core/Tool.d.ts.map +0 -1
- package/dist/cjs/core/Tool.js +0 -34
- package/dist/cjs/core/Tool.js.map +0 -1
- package/dist/cjs/core/ToolExecutor.d.ts +0 -29
- package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/core/Transition.d.ts +0 -32
- package/dist/cjs/core/Transition.d.ts.map +0 -1
- package/dist/cjs/core/Transition.js +0 -89
- package/dist/cjs/core/Transition.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/types/agent.d.ts.map +0 -1
- package/dist/cjs/types/agent.js.map +0 -1
- package/dist/cjs/types/ai.d.ts.map +0 -1
- package/dist/cjs/types/history.d.ts.map +0 -1
- package/dist/cjs/types/history.js +0 -37
- package/dist/cjs/types/history.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -12
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -12
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/session.d.ts +0 -104
- package/dist/cjs/types/session.d.ts.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/core/Agent.d.ts.map +0 -1
- package/dist/core/Agent.js +0 -962
- package/dist/core/Agent.js.map +0 -1
- package/dist/core/DomainRegistry.d.ts +0 -36
- package/dist/core/DomainRegistry.d.ts.map +0 -1
- package/dist/core/DomainRegistry.js +0 -68
- package/dist/core/DomainRegistry.js.map +0 -1
- package/dist/core/Events.d.ts +0 -41
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -94
- package/dist/core/Events.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -24
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -123
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -14
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -52
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/Route.d.ts +0 -90
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/core/Step.d.ts +0 -72
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -146
- package/dist/core/Step.js.map +0 -1
- package/dist/core/Tool.d.ts +0 -39
- package/dist/core/Tool.d.ts.map +0 -1
- package/dist/core/Tool.js +0 -31
- package/dist/core/Tool.js.map +0 -1
- package/dist/core/ToolExecutor.d.ts +0 -29
- package/dist/core/ToolExecutor.d.ts.map +0 -1
- package/dist/core/ToolExecutor.js +0 -69
- package/dist/core/ToolExecutor.js.map +0 -1
- package/dist/core/Transition.d.ts +0 -32
- package/dist/core/Transition.d.ts.map +0 -1
- package/dist/core/Transition.js +0 -85
- package/dist/core/Transition.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/providers/AnthropicProvider.js.map +0 -1
- package/dist/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/providers/GeminiProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/providers/OpenRouterProvider.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/ai.js.map +0 -1
- package/dist/types/history.d.ts.map +0 -1
- package/dist/types/history.js +0 -34
- package/dist/types/history.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -104
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js.map +0 -1
- package/dist/types/tool.d.ts.map +0 -1
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/docs/AGENT.md +0 -535
- package/docs/DOCS.md +0 -263
- package/docs/DOMAINS.md +0 -735
- package/docs/EXAMPLES.md +0 -467
- package/docs/GETTING_STARTED.md +0 -424
- package/docs/PERSISTENCE.md +0 -815
- package/docs/PROVIDERS.md +0 -612
- package/docs/ROUTES.md +0 -1085
- package/docs/STEPS.md +0 -883
- package/examples/business-onboarding.ts +0 -791
- package/examples/custom-database-persistence.ts +0 -574
- package/examples/domain-scoping.ts +0 -366
- package/examples/travel-agent.ts +0 -584
- package/src/core/DomainRegistry.ts +0 -80
- package/src/core/Tool.ts +0 -112
- package/src/core/Transition.ts +0 -115
- /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
- /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
- /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/cjs/{constants → src/constants}/index.js +0 -0
- /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/index.js +0 -0
- /package/dist/cjs/{types → src/types}/agent.js +0 -0
- /package/dist/cjs/{types → src/types}/ai.js +0 -0
- /package/dist/cjs/{types → src/types}/persistence.js +0 -0
- /package/dist/cjs/{types → src/types}/route.js +0 -0
- /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/routing.js +0 -0
- /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/schema.js +0 -0
- /package/dist/cjs/{types → src/types}/tool.js +0 -0
- /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/id.js +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
- /package/dist/{adapters → src/adapters}/index.js +0 -0
- /package/dist/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
- /package/dist/{constants → src/constants}/index.js +0 -0
- /package/dist/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
- /package/dist/{providers → src/providers}/index.js +0 -0
- /package/dist/{types → src/types}/agent.js +0 -0
- /package/dist/{types → src/types}/ai.js +0 -0
- /package/dist/{types → src/types}/persistence.js +0 -0
- /package/dist/{types → src/types}/route.js +0 -0
- /package/dist/{types → src/types}/routing.d.ts +0 -0
- /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
- /package/dist/{types → src/types}/routing.js +0 -0
- /package/dist/{cjs → src}/types/routing.js.map +0 -0
- /package/dist/{types → src/types}/schema.d.ts +0 -0
- /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
- /package/dist/{types → src/types}/schema.js +0 -0
- /package/dist/{cjs → src}/types/schema.js.map +0 -0
- /package/dist/{types → src/types}/tool.js +0 -0
- /package/dist/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/id.js +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/logger.js +0 -0
- /package/dist/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/retry.js +0 -0
- /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# Prompt Composition
|
|
2
|
+
|
|
3
|
+
@fali/agent automatically builds comprehensive prompts for AI providers by combining agent configuration, route context, conversation history, and current session state.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The `PromptComposer` class is responsible for constructing detailed prompts that provide AI models with all necessary context to make intelligent routing and response decisions.
|
|
8
|
+
|
|
9
|
+
## Prompt Structure
|
|
10
|
+
|
|
11
|
+
Prompts are built with multiple sections in a specific order:
|
|
12
|
+
|
|
13
|
+
1. **Agent Identity** - Core agent persona and personality
|
|
14
|
+
2. **Routing Overview** - Available routes and current context
|
|
15
|
+
3. **Knowledge Base** - Agent and route-specific knowledge
|
|
16
|
+
4. **Guidelines & Rules** - Behavioral constraints and preferences
|
|
17
|
+
5. **Conversation History** - Previous messages and context
|
|
18
|
+
6. **Current Session** - Active route, collected data, and step state
|
|
19
|
+
7. **Task-Specific Instructions** - Route-specific prompts and schemas
|
|
20
|
+
|
|
21
|
+
## Agent Identity Section
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Agent configuration contributes to identity
|
|
25
|
+
const agent = new Agent({
|
|
26
|
+
name: "TravelBot",
|
|
27
|
+
description: "AI assistant for travel planning and booking",
|
|
28
|
+
goal: "Help users plan perfect trips efficiently",
|
|
29
|
+
personality: "Friendly, knowledgeable, and efficient",
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This generates:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
You are TravelBot, an AI assistant for travel planning and booking.
|
|
37
|
+
Your goal is to help users plan perfect trips efficiently.
|
|
38
|
+
You are friendly, knowledgeable, and efficient.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Routing Overview Section
|
|
42
|
+
|
|
43
|
+
Provides the AI with information about available conversation routes:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Available Routes:
|
|
47
|
+
1. Flight Booking - Help users book flights
|
|
48
|
+
2. Hotel Reservation - Find and book accommodations
|
|
49
|
+
3. Travel Itinerary - Create detailed trip plans
|
|
50
|
+
4. Customer Support - Handle travel-related questions
|
|
51
|
+
|
|
52
|
+
Current Route: Flight Booking
|
|
53
|
+
Route Description: Help users book flights with the best options
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Knowledge Base Integration
|
|
57
|
+
|
|
58
|
+
Agent and route knowledge bases are formatted and included:
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
const agent = new Agent({
|
|
62
|
+
knowledgeBase: {
|
|
63
|
+
company: "Acme Travel - Premium travel services since 1995",
|
|
64
|
+
policies: {
|
|
65
|
+
cancellation: "Free cancellation up to 24 hours before departure",
|
|
66
|
+
refund: "Refunds processed within 3-5 business days",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Guidelines & Rules Section
|
|
73
|
+
|
|
74
|
+
Combines agent-level and route-level behavioral constraints:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Guidelines:
|
|
78
|
+
- Always be polite and helpful
|
|
79
|
+
- Ask clarifying questions when needed
|
|
80
|
+
- Provide options rather than single recommendations
|
|
81
|
+
|
|
82
|
+
Rules for this route:
|
|
83
|
+
- Always confirm flight details before booking
|
|
84
|
+
- Never share personal information
|
|
85
|
+
- Use specific date formats (YYYY-MM-DD)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Conversation History
|
|
89
|
+
|
|
90
|
+
Recent conversation history with context updates:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Previous Messages:
|
|
94
|
+
User: I want to book a flight to Paris
|
|
95
|
+
Assistant: I'd be happy to help you book a flight to Paris. When would you like to travel?
|
|
96
|
+
|
|
97
|
+
User: Next week, for 3 nights
|
|
98
|
+
Assistant: Great! Let me check flights for next week. Could you tell me which airport you'd like to depart from?
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Session State
|
|
102
|
+
|
|
103
|
+
Current session information including:
|
|
104
|
+
|
|
105
|
+
- Active route and step
|
|
106
|
+
- Collected data (with privacy filtering)
|
|
107
|
+
- Route progress and completion status
|
|
108
|
+
|
|
109
|
+
## Dynamic Schema Generation
|
|
110
|
+
|
|
111
|
+
For data collection steps, the prompt includes JSON schemas:
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
// Route schema
|
|
115
|
+
schema: {
|
|
116
|
+
type: "object",
|
|
117
|
+
properties: {
|
|
118
|
+
destination: { type: "string" },
|
|
119
|
+
departureDate: { type: "string", format: "date" },
|
|
120
|
+
passengers: { type: "number", minimum: 1 }
|
|
121
|
+
},
|
|
122
|
+
required: ["destination", "departureDate"]
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Generates:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
Extract the following information from the user's response:
|
|
130
|
+
- destination: string - Where the user wants to fly
|
|
131
|
+
- departureDate: string (date format) - When they want to depart
|
|
132
|
+
- passengers: number (minimum 1) - How many people are traveling
|
|
133
|
+
|
|
134
|
+
Return extracted data as valid JSON matching this schema.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Tool Integration
|
|
138
|
+
|
|
139
|
+
When tools are available, they're described in the prompt:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
Available Tools:
|
|
143
|
+
1. searchFlights - Search for available flights
|
|
144
|
+
Parameters:
|
|
145
|
+
- origin: string - Departure airport code
|
|
146
|
+
- destination: string - Arrival airport code
|
|
147
|
+
- date: string - Travel date (YYYY-MM-DD)
|
|
148
|
+
|
|
149
|
+
2. checkWeather - Get weather forecast
|
|
150
|
+
Parameters:
|
|
151
|
+
- location: string - City or airport code
|
|
152
|
+
- date: string - Date for forecast
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Context Updates
|
|
156
|
+
|
|
157
|
+
Real-time context changes are included:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
Current Context:
|
|
161
|
+
- User tier: premium
|
|
162
|
+
- Preferred language: English
|
|
163
|
+
- Last login: 2024-01-15
|
|
164
|
+
- Current location: New York
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Route-Specific Customization
|
|
168
|
+
|
|
169
|
+
Routes can override agent-level settings:
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
const supportRoute = agent.createRoute({
|
|
173
|
+
title: "Customer Support",
|
|
174
|
+
personality: "Extra patient and detailed when explaining issues",
|
|
175
|
+
knowledgeBase: {
|
|
176
|
+
supportHours: "24/7 for premium members, 9-5 EST for others",
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Performance Optimization
|
|
182
|
+
|
|
183
|
+
Prompts are optimized for token efficiency:
|
|
184
|
+
|
|
185
|
+
- Knowledge bases are formatted as clean markdown
|
|
186
|
+
- Redundant information is deduplicated
|
|
187
|
+
- Context is truncated when approaching token limits
|
|
188
|
+
- Only relevant route information is included
|
|
189
|
+
|
|
190
|
+
## Best Practices
|
|
191
|
+
|
|
192
|
+
- Keep knowledge bases structured and concise
|
|
193
|
+
- Use clear, specific guidelines rather than vague instructions
|
|
194
|
+
- Leverage route-specific overrides for specialized behavior
|
|
195
|
+
- Monitor token usage and optimize prompt length
|
|
196
|
+
- Test prompts with different AI providers for consistency
|
|
@@ -0,0 +1,515 @@
|
|
|
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.
|