@falai/agent 0.1.0-alpha2
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 +797 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts +17 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js +21 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts +10 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js +13 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/cjs/src/core/Agent.d.ts +232 -0
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +741 -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/cjs/src/core/PersistenceManager.d.ts +98 -0
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/src/core/PersistenceManager.js +261 -0
- 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 +194 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +202 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
- package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseModal.js +1588 -0
- package/dist/cjs/src/core/ResponseModal.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +549 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +181 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/src/core/Route.js +541 -0
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.js +961 -0
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +94 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +239 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +170 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +448 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolManager.d.ts +234 -0
- package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
- package/dist/cjs/src/core/ToolManager.js +1117 -0
- package/dist/cjs/src/core/ToolManager.js.map +1 -0
- package/dist/cjs/src/index.d.ts +44 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +88 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/GeminiProvider.js +489 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts +13 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js +16 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/src/types/agent.d.ts +181 -0
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js +21 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/src/types/ai.d.ts +143 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js +6 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/cjs/src/types/history.d.ts +178 -0
- 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 +22 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +37 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/cjs/src/types/persistence.d.ts +209 -0
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js +7 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/src/types/route.d.ts +238 -0
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/src/types/route.js +6 -0
- package/dist/cjs/src/types/route.js.map +1 -0
- package/dist/cjs/src/types/routing.d.ts +16 -0
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/cjs/src/types/routing.js +3 -0
- package/dist/cjs/src/types/routing.js.map +1 -0
- package/dist/cjs/src/types/schema.d.ts +22 -0
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/cjs/src/types/schema.js +3 -0
- package/dist/cjs/src/types/schema.js.map +1 -0
- package/dist/cjs/src/types/session.d.ts +65 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +88 -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/src/types/tool.d.ts +130 -0
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/src/types/tool.js +19 -0
- package/dist/cjs/src/types/tool.js.map +1 -0
- 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 +32 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/cjs/src/utils/condition.d.ts +38 -0
- package/dist/cjs/src/utils/condition.d.ts.map +1 -0
- package/dist/cjs/src/utils/condition.js +168 -0
- package/dist/cjs/src/utils/condition.js.map +1 -0
- package/dist/cjs/src/utils/event.d.ts +6 -0
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/src/utils/event.js +20 -0
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +60 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +274 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts +25 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js +70 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +15 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +64 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/json.d.ts +16 -0
- package/dist/cjs/src/utils/json.d.ts.map +1 -0
- package/dist/cjs/src/utils/json.js +47 -0
- package/dist/cjs/src/utils/json.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts +10 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js +23 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts +10 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js +76 -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/src/utils/session.js +170 -0
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +155 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +383 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/src/adapters/MemoryAdapter.js +198 -0
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/src/adapters/MongoAdapter.d.ts +97 -0
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/src/adapters/MongoAdapter.js +164 -0
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/src/adapters/OpenSearchAdapter.js +454 -0
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/src/adapters/PrismaAdapter.js +362 -0
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/src/adapters/RedisAdapter.d.ts +71 -0
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/src/adapters/RedisAdapter.js +227 -0
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/src/adapters/SQLiteAdapter.js +308 -0
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.d.ts +17 -0
- package/dist/src/adapters/index.d.ts.map +1 -0
- package/dist/src/adapters/index.js +11 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.d.ts +10 -0
- package/dist/src/constants/index.d.ts.map +1 -0
- package/dist/src/constants/index.js +10 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/core/Agent.d.ts +232 -0
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +737 -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/src/core/PersistenceManager.d.ts +98 -0
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/src/core/PersistenceManager.js +257 -0
- 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 +190 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +32 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +198 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponseModal.d.ts +222 -0
- package/dist/src/core/ResponseModal.d.ts.map +1 -0
- package/dist/src/core/ResponseModal.js +1583 -0
- package/dist/src/core/ResponseModal.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +175 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +545 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +181 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/src/core/Route.js +537 -0
- package/dist/src/core/Route.js.map +1 -0
- package/dist/src/core/RoutingEngine.d.ts +159 -0
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/src/core/RoutingEngine.js +957 -0
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +94 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +235 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +170 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +444 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolManager.d.ts +234 -0
- package/dist/src/core/ToolManager.d.ts.map +1 -0
- package/dist/src/core/ToolManager.js +1111 -0
- package/dist/src/core/ToolManager.js.map +1 -0
- package/dist/src/index.d.ts +44 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +37 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/providers/AnthropicProvider.d.ts +43 -0
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/src/providers/AnthropicProvider.js +370 -0
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/src/providers/GeminiProvider.d.ts +58 -0
- package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/src/providers/GeminiProvider.js +485 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/src/providers/OpenAIProvider.d.ts +52 -0
- package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/src/providers/OpenAIProvider.js +388 -0
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
- package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/src/providers/OpenRouterProvider.js +402 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.d.ts +13 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/providers/index.js +9 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/src/types/agent.d.ts +181 -0
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js +18 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/src/types/ai.d.ts +143 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/src/types/ai.js +5 -0
- package/dist/src/types/ai.js.map +1 -0
- package/dist/src/types/history.d.ts +178 -0
- 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 +22 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +12 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/persistence.d.ts +209 -0
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js +6 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/src/types/route.d.ts +238 -0
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/src/types/route.js +5 -0
- package/dist/src/types/route.js.map +1 -0
- package/dist/src/types/routing.d.ts +16 -0
- package/dist/src/types/routing.d.ts.map +1 -0
- package/dist/src/types/routing.js +2 -0
- package/dist/src/types/routing.js.map +1 -0
- package/dist/src/types/schema.d.ts +22 -0
- package/dist/src/types/schema.d.ts.map +1 -0
- package/dist/src/types/schema.js +2 -0
- package/dist/src/types/schema.js.map +1 -0
- package/dist/src/types/session.d.ts +65 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +88 -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/src/types/tool.d.ts +130 -0
- package/dist/src/types/tool.d.ts.map +1 -0
- package/dist/src/types/tool.js +16 -0
- package/dist/src/types/tool.js.map +1 -0
- 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 +29 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/src/utils/condition.d.ts +38 -0
- package/dist/src/utils/condition.d.ts.map +1 -0
- package/dist/src/utils/condition.js +161 -0
- package/dist/src/utils/condition.js.map +1 -0
- package/dist/src/utils/event.d.ts +6 -0
- package/dist/src/utils/event.d.ts.map +1 -0
- package/dist/src/utils/event.js +17 -0
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +60 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +263 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.d.ts +25 -0
- package/dist/src/utils/id.d.ts.map +1 -0
- package/dist/src/utils/id.js +64 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +15 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +23 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/json.d.ts +16 -0
- package/dist/src/utils/json.d.ts.map +1 -0
- package/dist/src/utils/json.js +43 -0
- package/dist/src/utils/json.js.map +1 -0
- package/dist/src/utils/logger.d.ts +10 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +17 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.d.ts +10 -0
- package/dist/src/utils/retry.d.ts.map +1 -0
- package/dist/src/utils/retry.js +71 -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/src/utils/session.js +160 -0
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +155 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +374 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/CONTRIBUTING.md +521 -0
- package/docs/README.md +228 -0
- package/docs/api/README.md +3258 -0
- package/docs/api/overview.md +1134 -0
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/core/agent/README.md +902 -0
- package/docs/core/agent/context-management.md +796 -0
- package/docs/core/agent/session-management.md +641 -0
- package/docs/core/ai-integration/prompt-composition.md +220 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +287 -0
- package/docs/core/conversation-flows/data-collection.md +623 -0
- package/docs/core/conversation-flows/route-dsl.md +502 -0
- package/docs/core/conversation-flows/routes.md +247 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +154 -0
- package/docs/core/error-handling.md +638 -0
- package/docs/core/persistence/adapters.md +255 -0
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +466 -0
- package/docs/core/tools/tool-definition.md +970 -0
- package/docs/core/tools/tool-scoping.md +819 -0
- package/docs/guides/advanced-patterns/publishing.md +186 -0
- package/docs/guides/error-handling-patterns.md +578 -0
- package/docs/guides/getting-started/README.md +696 -0
- package/docs/guides/migration/README.md +72 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/response-modal-refactor.md +518 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
- package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
- package/examples/advanced-patterns/streaming-responses.ts +578 -0
- package/examples/ai-providers/anthropic-integration.ts +388 -0
- package/examples/ai-providers/openai-integration.ts +228 -0
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +318 -0
- package/examples/core-concepts/basic-agent.ts +503 -0
- package/examples/core-concepts/modern-streaming-api.ts +309 -0
- package/examples/core-concepts/schema-driven-extraction.ts +332 -0
- package/examples/core-concepts/session-management.ts +494 -0
- package/examples/integrations/database-integration.ts +630 -0
- package/examples/integrations/healthcare-integration.ts +595 -0
- package/examples/integrations/search-integration.ts +530 -0
- package/examples/integrations/server-session-management.ts +307 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/persistence/database-persistence.ts +583 -0
- package/examples/persistence/memory-sessions.ts +495 -0
- package/examples/persistence/prisma-schema.example.prisma +74 -0
- package/examples/persistence/redis-persistence.ts +488 -0
- package/examples/tools/basic-tools.ts +765 -0
- package/examples/tools/data-enrichment-tools.ts +593 -0
- package/package.json +125 -0
- package/src/adapters/MemoryAdapter.ts +273 -0
- package/src/adapters/MongoAdapter.ts +304 -0
- package/src/adapters/OpenSearchAdapter.ts +670 -0
- package/src/adapters/PostgreSQLAdapter.ts +428 -0
- package/src/adapters/PrismaAdapter.ts +553 -0
- package/src/adapters/RedisAdapter.ts +377 -0
- package/src/adapters/SQLiteAdapter.ts +459 -0
- package/src/adapters/index.ts +43 -0
- package/src/constants/index.ts +10 -0
- package/src/core/Agent.ts +970 -0
- package/src/core/Events.ts +164 -0
- package/src/core/PersistenceManager.ts +353 -0
- package/src/core/PromptComposer.ts +253 -0
- package/src/core/ResponseEngine.ts +306 -0
- package/src/core/ResponseModal.ts +2050 -0
- package/src/core/ResponsePipeline.ts +864 -0
- package/src/core/Route.ts +677 -0
- package/src/core/RoutingEngine.ts +1396 -0
- package/src/core/SessionManager.ts +297 -0
- package/src/core/Step.ts +593 -0
- package/src/core/ToolManager.ts +1394 -0
- package/src/index.ts +155 -0
- package/src/providers/AnthropicProvider.ts +560 -0
- package/src/providers/GeminiProvider.ts +683 -0
- package/src/providers/OpenAIProvider.ts +602 -0
- package/src/providers/OpenRouterProvider.ts +613 -0
- package/src/providers/index.ts +16 -0
- package/src/types/agent.ts +196 -0
- package/src/types/ai.ts +158 -0
- package/src/types/history.ts +206 -0
- package/src/types/index.ts +119 -0
- package/src/types/persistence.ts +251 -0
- package/src/types/route.ts +272 -0
- package/src/types/routing.ts +18 -0
- package/src/types/schema.ts +23 -0
- package/src/types/session.ts +74 -0
- package/src/types/template.ts +104 -0
- package/src/types/tool.ts +174 -0
- package/src/utils/clone.ts +34 -0
- package/src/utils/condition.ts +190 -0
- package/src/utils/event.ts +16 -0
- package/src/utils/history.ts +306 -0
- package/src/utils/id.ts +73 -0
- package/src/utils/index.ts +69 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/logger.ts +19 -0
- package/src/utils/retry.ts +97 -0
- package/src/utils/session.ts +204 -0
- package/src/utils/template.ts +444 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Gemini AI provider implementation with retry and backup models
|
|
3
|
+
*/
|
|
4
|
+
import type { GenerateContentConfig } from "@google/genai";
|
|
5
|
+
import type { AiProvider, GenerateMessageInput, GenerateMessageOutput, GenerateMessageStreamChunk, AgentStructuredResponse } from "../types";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for Gemini provider
|
|
8
|
+
* Uses types from @google/genai package
|
|
9
|
+
*/
|
|
10
|
+
export interface GeminiProviderOptions {
|
|
11
|
+
/** Gemini API key */
|
|
12
|
+
apiKey: string;
|
|
13
|
+
/** Model to use (required) - e.g., "models/gemini-2.5-pro" */
|
|
14
|
+
model: string;
|
|
15
|
+
/** Backup models to try if primary fails (default: []) */
|
|
16
|
+
backupModels?: string[];
|
|
17
|
+
/** Default generation config - uses GenerateContentConfig from @google/genai */
|
|
18
|
+
config?: Partial<GenerateContentConfig>;
|
|
19
|
+
/** Retry configuration */
|
|
20
|
+
retryConfig?: {
|
|
21
|
+
timeout?: number;
|
|
22
|
+
retries?: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Gemini provider implementation with backup models and retry logic
|
|
27
|
+
*/
|
|
28
|
+
export declare class GeminiProvider implements AiProvider {
|
|
29
|
+
readonly name = "gemini";
|
|
30
|
+
private genAI;
|
|
31
|
+
private primaryModel;
|
|
32
|
+
private backupModels;
|
|
33
|
+
private config?;
|
|
34
|
+
private retryConfig;
|
|
35
|
+
constructor(options: GeminiProviderOptions);
|
|
36
|
+
/**
|
|
37
|
+
* Adapt common schema format to Gemini's specific requirements.
|
|
38
|
+
* Gemini has strict validation:
|
|
39
|
+
* - OBJECT types MUST have non-empty properties
|
|
40
|
+
* - Empty objects cause 400 Bad Request errors
|
|
41
|
+
* - Uses Gemini's Schema type with Type enums
|
|
42
|
+
*
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
private adaptSchemaForGemini;
|
|
46
|
+
/**
|
|
47
|
+
* Map common JSON Schema type strings to Gemini's Type enum
|
|
48
|
+
* @private
|
|
49
|
+
*/
|
|
50
|
+
private mapToGeminiType;
|
|
51
|
+
generateMessage<TContext = unknown, TStructured = AgentStructuredResponse>(input: GenerateMessageInput<TContext>): Promise<GenerateMessageOutput<TStructured>>;
|
|
52
|
+
generateMessageStream<TContext = unknown, TStructured = AgentStructuredResponse>(input: GenerateMessageInput<TContext>): AsyncGenerator<GenerateMessageStreamChunk<TStructured>>;
|
|
53
|
+
private generateWithBackup;
|
|
54
|
+
private generateWithModel;
|
|
55
|
+
private generateStreamWithBackup;
|
|
56
|
+
private generateStreamWithModel;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=GeminiProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EAItB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EAExB,MAAM,UAAU,CAAC;AAUlB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxC,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AA0ED;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAiC;IAChD,OAAO,CAAC,WAAW,CAAuC;gBAE9C,OAAO,EAAE,qBAAqB;IAqB1C;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAoE5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAsBjB,eAAe,CACnB,QAAQ,GAAG,OAAO,EAClB,WAAW,GAAG,uBAAuB,EAErC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAIvC,qBAAqB,CAC1B,QAAQ,GAAG,OAAO,EAClB,WAAW,GAAG,uBAAuB,EAErC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,cAAc,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;YAI5C,kBAAkB;YA6DlB,iBAAiB;YA8JhB,wBAAwB;YA6DxB,uBAAuB;CA+HvC"}
|
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Gemini AI provider implementation with retry and backup models
|
|
3
|
+
*/
|
|
4
|
+
import { GoogleGenAI, Type } from "@google/genai";
|
|
5
|
+
import { withTimeoutAndRetry } from "../utils/retry";
|
|
6
|
+
import { tryParseJSONResponse } from "../utils/json";
|
|
7
|
+
import { logger } from "../utils/logger";
|
|
8
|
+
const DEFAULT_RETRY_CONFIG = {
|
|
9
|
+
timeout: 60000,
|
|
10
|
+
retries: 3,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Type guard to check if error is ErrorWithStatus
|
|
14
|
+
*/
|
|
15
|
+
function isErrorWithStatus(error) {
|
|
16
|
+
return (typeof error === "object" &&
|
|
17
|
+
error !== null &&
|
|
18
|
+
("status" in error || "code" in error || "message" in error));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Safely extract error message
|
|
22
|
+
*/
|
|
23
|
+
function getErrorMessage(error) {
|
|
24
|
+
if (error instanceof Error) {
|
|
25
|
+
return error.message;
|
|
26
|
+
}
|
|
27
|
+
if (isErrorWithStatus(error) && error.message) {
|
|
28
|
+
return error.message;
|
|
29
|
+
}
|
|
30
|
+
return String(error);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Determines if an error should trigger backup model usage
|
|
34
|
+
*/
|
|
35
|
+
const shouldUseBackupModel = (error) => {
|
|
36
|
+
if (!isErrorWithStatus(error)) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
// Server errors
|
|
40
|
+
if (error.status === 500 || error.status === 503) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
// Rate limiting
|
|
44
|
+
if (error.status === 429) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
// Model overloaded or unavailable
|
|
48
|
+
if (error.code === "overloaded") {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
const message = getErrorMessage(error);
|
|
52
|
+
if (message.includes("overloaded") ||
|
|
53
|
+
message.includes("unavailable") ||
|
|
54
|
+
message.includes("not available") ||
|
|
55
|
+
message.includes("internal error") ||
|
|
56
|
+
message.includes("Internal error") ||
|
|
57
|
+
message.includes("INTERNAL")) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Gemini provider implementation with backup models and retry logic
|
|
64
|
+
*/
|
|
65
|
+
export class GeminiProvider {
|
|
66
|
+
constructor(options) {
|
|
67
|
+
this.name = "gemini";
|
|
68
|
+
const { apiKey, model, backupModels = [], config, retryConfig } = options;
|
|
69
|
+
if (!apiKey) {
|
|
70
|
+
throw new Error("Gemini API key is required");
|
|
71
|
+
}
|
|
72
|
+
if (!model) {
|
|
73
|
+
throw new Error("Model is required. Example: 'models/gemini-2.5-pro'");
|
|
74
|
+
}
|
|
75
|
+
this.genAI = new GoogleGenAI({ apiKey });
|
|
76
|
+
this.primaryModel = model;
|
|
77
|
+
this.backupModels = backupModels;
|
|
78
|
+
this.config = config;
|
|
79
|
+
this.retryConfig = {
|
|
80
|
+
timeout: retryConfig?.timeout || DEFAULT_RETRY_CONFIG.timeout,
|
|
81
|
+
retries: retryConfig?.retries || DEFAULT_RETRY_CONFIG.retries,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Adapt common schema format to Gemini's specific requirements.
|
|
86
|
+
* Gemini has strict validation:
|
|
87
|
+
* - OBJECT types MUST have non-empty properties
|
|
88
|
+
* - Empty objects cause 400 Bad Request errors
|
|
89
|
+
* - Uses Gemini's Schema type with Type enums
|
|
90
|
+
*
|
|
91
|
+
* @private
|
|
92
|
+
*/
|
|
93
|
+
adaptSchemaForGemini(schema) {
|
|
94
|
+
const geminiSchema = {};
|
|
95
|
+
// Convert type
|
|
96
|
+
if (schema.type) {
|
|
97
|
+
if (Array.isArray(schema.type)) {
|
|
98
|
+
// For now, take the first type (Gemini doesn't support union types the same way)
|
|
99
|
+
geminiSchema.type = this.mapToGeminiType(schema.type[0]);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
geminiSchema.type = this.mapToGeminiType(schema.type);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Handle description
|
|
106
|
+
if (schema.description) {
|
|
107
|
+
geminiSchema.description = schema.description;
|
|
108
|
+
}
|
|
109
|
+
// Handle nullable
|
|
110
|
+
if (schema.nullable !== undefined) {
|
|
111
|
+
geminiSchema.nullable = schema.nullable;
|
|
112
|
+
}
|
|
113
|
+
// Handle enum
|
|
114
|
+
if (schema.enum) {
|
|
115
|
+
geminiSchema.enum = schema.enum;
|
|
116
|
+
}
|
|
117
|
+
// Handle object properties - Gemini requires non-empty properties for OBJECT type
|
|
118
|
+
if (geminiSchema.type === Type.OBJECT ||
|
|
119
|
+
schema.type === "object" ||
|
|
120
|
+
(Array.isArray(schema.type) && schema.type.includes("object"))) {
|
|
121
|
+
if (!schema.properties || Object.keys(schema.properties).length === 0) {
|
|
122
|
+
logger.warn("[GeminiProvider] Gemini requires OBJECT types to have non-empty properties. Converting empty object to STRING.");
|
|
123
|
+
geminiSchema.type = Type.STRING;
|
|
124
|
+
return geminiSchema;
|
|
125
|
+
}
|
|
126
|
+
// Recursively convert nested properties
|
|
127
|
+
geminiSchema.properties = {};
|
|
128
|
+
for (const [key, value] of Object.entries(schema.properties)) {
|
|
129
|
+
geminiSchema.properties[key] = this.adaptSchemaForGemini(value);
|
|
130
|
+
}
|
|
131
|
+
// Handle required fields
|
|
132
|
+
if (schema.required && schema.required.length > 0) {
|
|
133
|
+
geminiSchema.required = schema.required;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Handle array items
|
|
137
|
+
if (geminiSchema.type === Type.ARRAY ||
|
|
138
|
+
schema.type === "array" ||
|
|
139
|
+
(Array.isArray(schema.type) && schema.type.includes("array"))) {
|
|
140
|
+
if (schema.items) {
|
|
141
|
+
geminiSchema.items = this.adaptSchemaForGemini(schema.items);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return geminiSchema;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Map common JSON Schema type strings to Gemini's Type enum
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
mapToGeminiType(type) {
|
|
151
|
+
switch (type.toLowerCase()) {
|
|
152
|
+
case "string":
|
|
153
|
+
return Type.STRING;
|
|
154
|
+
case "number":
|
|
155
|
+
return Type.NUMBER;
|
|
156
|
+
case "integer":
|
|
157
|
+
return Type.INTEGER;
|
|
158
|
+
case "boolean":
|
|
159
|
+
return Type.BOOLEAN;
|
|
160
|
+
case "array":
|
|
161
|
+
return Type.ARRAY;
|
|
162
|
+
case "object":
|
|
163
|
+
return Type.OBJECT;
|
|
164
|
+
default:
|
|
165
|
+
logger.warn(`[GeminiProvider] Unknown type "${type}", defaulting to STRING`);
|
|
166
|
+
return Type.STRING;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async generateMessage(input) {
|
|
170
|
+
return this.generateWithBackup(input);
|
|
171
|
+
}
|
|
172
|
+
async *generateMessageStream(input) {
|
|
173
|
+
yield* this.generateStreamWithBackup(input);
|
|
174
|
+
}
|
|
175
|
+
async generateWithBackup(input) {
|
|
176
|
+
// Try primary model first
|
|
177
|
+
try {
|
|
178
|
+
return await this.generateWithModel(this.primaryModel, input);
|
|
179
|
+
}
|
|
180
|
+
catch (primaryError) {
|
|
181
|
+
const primaryErrMsg = getErrorMessage(primaryError);
|
|
182
|
+
logger.warn(`[GEMINI] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`);
|
|
183
|
+
if (!shouldUseBackupModel(primaryError)) {
|
|
184
|
+
throw primaryError;
|
|
185
|
+
}
|
|
186
|
+
logger.debug(`[GEMINI] Trying backup models`);
|
|
187
|
+
let lastBackupError = primaryError;
|
|
188
|
+
for (let i = 0; i < this.backupModels.length; i++) {
|
|
189
|
+
const backupModel = this.backupModels[i];
|
|
190
|
+
logger.debug(`[GEMINI] Trying backup model ${i + 1}/${this.backupModels.length}: ${backupModel}`);
|
|
191
|
+
try {
|
|
192
|
+
const result = await this.generateWithModel(backupModel, input);
|
|
193
|
+
logger.debug(`[GEMINI] Backup model ${backupModel} succeeded`);
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
catch (backupError) {
|
|
197
|
+
const backupErrMsg = getErrorMessage(backupError);
|
|
198
|
+
logger.warn(`[GEMINI] Backup model ${backupModel} failed: ${backupErrMsg}`);
|
|
199
|
+
lastBackupError = backupError;
|
|
200
|
+
if (!shouldUseBackupModel(backupError) &&
|
|
201
|
+
i < this.backupModels.length - 1) {
|
|
202
|
+
logger.debug(`[GEMINI] Backup model error doesn't qualify for further attempts`);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const lastBackupErrMsg = getErrorMessage(lastBackupError);
|
|
208
|
+
logger.error(`[GEMINI] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`);
|
|
209
|
+
throw lastBackupError;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async generateWithModel(model, input) {
|
|
213
|
+
const operation = async () => {
|
|
214
|
+
// Schema-required: configure response schema
|
|
215
|
+
const configOverride = { ...this.config };
|
|
216
|
+
// Handle tools and JSON schema - Gemini doesn't support both simultaneously
|
|
217
|
+
const hasTools = input.tools && input.tools.length > 0;
|
|
218
|
+
const hasJsonSchema = input.parameters?.jsonSchema;
|
|
219
|
+
if (hasTools && hasJsonSchema) {
|
|
220
|
+
logger.debug(`[GeminiProvider] Both tools and JSON schema provided. Prioritizing function calling - JSON schema will be ignored.`);
|
|
221
|
+
}
|
|
222
|
+
if (hasTools) {
|
|
223
|
+
const toolNames = input.tools?.map((tool) => tool.name || tool.id) || [];
|
|
224
|
+
logger.debug(`[GeminiProvider] Configuring ${toolNames.length} tools for model ${model}:`, toolNames);
|
|
225
|
+
configOverride.tools = [
|
|
226
|
+
{
|
|
227
|
+
functionDeclarations: input.tools?.map((tool) => ({
|
|
228
|
+
name: tool.name || tool.id,
|
|
229
|
+
description: tool.description || "",
|
|
230
|
+
parameters: tool.parameters, // JSON schema
|
|
231
|
+
})),
|
|
232
|
+
},
|
|
233
|
+
];
|
|
234
|
+
}
|
|
235
|
+
else if (hasJsonSchema) {
|
|
236
|
+
// Only set JSON schema if no tools are present
|
|
237
|
+
configOverride.responseMimeType = "application/json";
|
|
238
|
+
// Adapt common schema format to Gemini's specific requirements
|
|
239
|
+
configOverride.responseSchema = input.parameters ? this.adaptSchemaForGemini(input.parameters.jsonSchema) : {};
|
|
240
|
+
}
|
|
241
|
+
let response;
|
|
242
|
+
try {
|
|
243
|
+
response = await this.genAI.models.generateContent({
|
|
244
|
+
model,
|
|
245
|
+
contents: input.prompt,
|
|
246
|
+
config: configOverride,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
logger.error(`[GeminiProvider] API call failed:`, error);
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
// Extract tool calls from response first
|
|
254
|
+
const toolCalls = [];
|
|
255
|
+
// Check for function calls in the response content
|
|
256
|
+
if (response.candidates && response.candidates[0]?.content?.parts) {
|
|
257
|
+
for (const part of response.candidates[0].content.parts) {
|
|
258
|
+
if (part.functionCall) {
|
|
259
|
+
toolCalls.push({
|
|
260
|
+
toolName: part.functionCall.name || "",
|
|
261
|
+
arguments: part.functionCall.args,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Debug logging for response structure
|
|
267
|
+
if (!response.text && toolCalls.length === 0) {
|
|
268
|
+
logger.debug(`[GeminiProvider] Debug - Response structure:`, {
|
|
269
|
+
hasText: !!response.text,
|
|
270
|
+
candidatesCount: response.candidates?.length || 0,
|
|
271
|
+
firstCandidateContent: response.candidates?.[0]?.content,
|
|
272
|
+
firstCandidateParts: response.candidates?.[0]?.content?.parts?.length || 0,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
// Try to get text from response, handling function calls properly
|
|
276
|
+
let message = "";
|
|
277
|
+
try {
|
|
278
|
+
message = response.text || "";
|
|
279
|
+
}
|
|
280
|
+
catch (textError) {
|
|
281
|
+
// Sometimes response.text throws when there are function calls
|
|
282
|
+
logger.debug(`[GeminiProvider] Could not get response.text (likely due to function calls):`, textError);
|
|
283
|
+
// Try to extract text parts manually
|
|
284
|
+
if (response.candidates && response.candidates[0]?.content?.parts) {
|
|
285
|
+
const textParts = response.candidates[0].content.parts
|
|
286
|
+
.filter(part => part.text)
|
|
287
|
+
.map(part => part.text)
|
|
288
|
+
.join('');
|
|
289
|
+
message = textParts;
|
|
290
|
+
logger.debug(`[GeminiProvider] Extracted text from parts:`, message);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Only throw error if we have no text AND no function calls
|
|
294
|
+
if (!message && toolCalls.length === 0) {
|
|
295
|
+
logger.error(`[GeminiProvider] Empty response - no text or function calls`);
|
|
296
|
+
logger.error(`[GeminiProvider] Response candidates:`, response.candidates);
|
|
297
|
+
throw new Error("No response from Gemini");
|
|
298
|
+
}
|
|
299
|
+
// Log when we have function calls but no text (this is normal)
|
|
300
|
+
if (toolCalls.length > 0 && !message) {
|
|
301
|
+
logger.debug(`[GeminiProvider] Function calls detected without text message:`, toolCalls.map(tc => tc.toolName));
|
|
302
|
+
}
|
|
303
|
+
else if (toolCalls.length > 0 && message) {
|
|
304
|
+
logger.debug(`[GeminiProvider] Response has both text and function calls:`, {
|
|
305
|
+
messageLength: message.length,
|
|
306
|
+
toolCalls: toolCalls.map(tc => tc.toolName),
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
// Parse JSON response if schema was provided
|
|
310
|
+
let structured;
|
|
311
|
+
if (input.parameters?.jsonSchema) {
|
|
312
|
+
const parsed = tryParseJSONResponse(message);
|
|
313
|
+
if (parsed) {
|
|
314
|
+
structured = parsed;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
logger.warn("[GeminiProvider] Failed to parse JSON response, treating as plain text");
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// If tools were used, include them in structured response
|
|
321
|
+
if (toolCalls.length > 0) {
|
|
322
|
+
structured = {
|
|
323
|
+
message: structured?.message || message,
|
|
324
|
+
toolCalls,
|
|
325
|
+
...structured,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
message,
|
|
330
|
+
metadata: {
|
|
331
|
+
model,
|
|
332
|
+
tokensUsed: response.usageMetadata?.totalTokenCount,
|
|
333
|
+
promptTokens: response.usageMetadata?.promptTokenCount,
|
|
334
|
+
completionTokens: response.usageMetadata?.candidatesTokenCount,
|
|
335
|
+
},
|
|
336
|
+
structured,
|
|
337
|
+
};
|
|
338
|
+
};
|
|
339
|
+
return withTimeoutAndRetry(operation, this.retryConfig.timeout, this.retryConfig.retries, `Gemini ${model}`);
|
|
340
|
+
}
|
|
341
|
+
async *generateStreamWithBackup(input) {
|
|
342
|
+
// Try primary model first
|
|
343
|
+
try {
|
|
344
|
+
yield* this.generateStreamWithModel(this.primaryModel, input);
|
|
345
|
+
}
|
|
346
|
+
catch (primaryError) {
|
|
347
|
+
const primaryErrMsg = getErrorMessage(primaryError);
|
|
348
|
+
logger.warn(`[GEMINI] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`);
|
|
349
|
+
if (!shouldUseBackupModel(primaryError)) {
|
|
350
|
+
throw primaryError;
|
|
351
|
+
}
|
|
352
|
+
logger.debug(`[GEMINI] Trying backup models for streaming`);
|
|
353
|
+
let lastBackupError = primaryError;
|
|
354
|
+
for (let i = 0; i < this.backupModels.length; i++) {
|
|
355
|
+
const backupModel = this.backupModels[i];
|
|
356
|
+
logger.debug(`[GEMINI] Trying backup model ${i + 1}/${this.backupModels.length}: ${backupModel}`);
|
|
357
|
+
try {
|
|
358
|
+
yield* this.generateStreamWithModel(backupModel, input);
|
|
359
|
+
logger.debug(`[GEMINI] Backup model ${backupModel} succeeded`);
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
catch (backupError) {
|
|
363
|
+
const backupErrMsg = getErrorMessage(backupError);
|
|
364
|
+
logger.warn(`[GEMINI] Backup model ${backupModel} failed: ${backupErrMsg}`);
|
|
365
|
+
lastBackupError = backupError;
|
|
366
|
+
if (!shouldUseBackupModel(backupError) &&
|
|
367
|
+
i < this.backupModels.length - 1) {
|
|
368
|
+
logger.debug(`[GEMINI] Backup model error doesn't qualify for further attempts`);
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
const lastBackupErrMsg = getErrorMessage(lastBackupError);
|
|
374
|
+
logger.error(`[GEMINI] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`);
|
|
375
|
+
throw lastBackupError;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
async *generateStreamWithModel(model, input) {
|
|
379
|
+
// Streaming: request JSON if schema provided
|
|
380
|
+
const configOverride = { ...this.config };
|
|
381
|
+
// Handle tools and JSON schema - Gemini doesn't support both simultaneously
|
|
382
|
+
const hasTools = input.tools && input.tools.length > 0;
|
|
383
|
+
const hasJsonSchema = input.parameters?.jsonSchema;
|
|
384
|
+
if (hasTools && hasJsonSchema) {
|
|
385
|
+
logger.debug(`[GeminiProvider] Both tools and JSON schema provided. Prioritizing function calling - JSON schema will be ignored.`);
|
|
386
|
+
}
|
|
387
|
+
if (hasTools) {
|
|
388
|
+
const toolNames = input.tools?.map((tool) => tool.name || tool.id) || [];
|
|
389
|
+
logger.debug(`[GeminiProvider] Configuring ${toolNames.length} tools for streaming:`, toolNames);
|
|
390
|
+
configOverride.tools = [
|
|
391
|
+
{
|
|
392
|
+
functionDeclarations: input.tools?.map((tool) => ({
|
|
393
|
+
name: tool.name || tool.id,
|
|
394
|
+
description: tool.description || "",
|
|
395
|
+
parameters: tool.parameters,
|
|
396
|
+
})),
|
|
397
|
+
},
|
|
398
|
+
];
|
|
399
|
+
}
|
|
400
|
+
else if (hasJsonSchema) {
|
|
401
|
+
// Only set JSON schema if no tools are present
|
|
402
|
+
configOverride.responseMimeType = "application/json";
|
|
403
|
+
// Adapt common schema format to Gemini's specific requirements
|
|
404
|
+
configOverride.responseSchema = input.parameters ? this.adaptSchemaForGemini(input.parameters.jsonSchema) : {};
|
|
405
|
+
}
|
|
406
|
+
let stream;
|
|
407
|
+
try {
|
|
408
|
+
stream = await this.genAI.models.generateContentStream({
|
|
409
|
+
model,
|
|
410
|
+
contents: input.prompt,
|
|
411
|
+
config: configOverride,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
logger.error(`[GeminiProvider] Streaming API call failed:`, error);
|
|
416
|
+
throw error;
|
|
417
|
+
}
|
|
418
|
+
let accumulated = "";
|
|
419
|
+
let promptTokenCount = 0;
|
|
420
|
+
let candidatesTokenCount = 0;
|
|
421
|
+
let totalTokenCount = 0;
|
|
422
|
+
const toolCalls = [];
|
|
423
|
+
for await (const chunk of stream) {
|
|
424
|
+
const delta = chunk.text || "";
|
|
425
|
+
// Extract tool calls from chunk
|
|
426
|
+
if (chunk.candidates && chunk.candidates[0]?.content?.parts) {
|
|
427
|
+
for (const part of chunk.candidates[0].content.parts) {
|
|
428
|
+
if (part.functionCall) {
|
|
429
|
+
toolCalls.push({
|
|
430
|
+
toolName: part.functionCall.name || "",
|
|
431
|
+
arguments: part.functionCall.args,
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
if (delta) {
|
|
437
|
+
accumulated += delta;
|
|
438
|
+
yield {
|
|
439
|
+
delta,
|
|
440
|
+
accumulated,
|
|
441
|
+
done: false,
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
// Update token counts if available
|
|
445
|
+
if (chunk.usageMetadata) {
|
|
446
|
+
promptTokenCount = chunk.usageMetadata.promptTokenCount || 0;
|
|
447
|
+
candidatesTokenCount = chunk.usageMetadata.candidatesTokenCount || 0;
|
|
448
|
+
totalTokenCount = chunk.usageMetadata.totalTokenCount || 0;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
// Parse JSON response if schema was provided
|
|
452
|
+
let structured;
|
|
453
|
+
if (input.parameters?.jsonSchema && accumulated) {
|
|
454
|
+
const parsed = tryParseJSONResponse(accumulated);
|
|
455
|
+
if (parsed) {
|
|
456
|
+
structured = parsed;
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
logger.warn("[GeminiProvider] Failed to parse JSON response in stream, treating as plain text");
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
// If tools were used, include them in structured response
|
|
463
|
+
if (toolCalls.length > 0) {
|
|
464
|
+
structured = {
|
|
465
|
+
message: structured?.message || accumulated,
|
|
466
|
+
toolCalls,
|
|
467
|
+
...structured,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
// Yield final chunk
|
|
471
|
+
yield {
|
|
472
|
+
delta: "",
|
|
473
|
+
accumulated,
|
|
474
|
+
done: true,
|
|
475
|
+
metadata: {
|
|
476
|
+
model,
|
|
477
|
+
tokensUsed: totalTokenCount,
|
|
478
|
+
promptTokens: promptTokenCount,
|
|
479
|
+
completionTokens: candidatesTokenCount,
|
|
480
|
+
},
|
|
481
|
+
structured: structured,
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
//# sourceMappingURL=GeminiProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAUlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,oBAAoB,GAAG;IAC3B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,CAAC;CACX,CAAC;AAgCF;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAW,EAAE;IACvD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IACE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,cAAc;IAQzB,YAAY,OAA8B;QAP1B,SAAI,GAAG,QAAQ,CAAC;QAQ9B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAE1E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG;YACjB,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO;YAC7D,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO;SAC9D,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACK,oBAAoB,CAAC,MAAwB;QACnD,MAAM,YAAY,GAAW,EAAE,CAAC;QAEhC,eAAe;QACf,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,iFAAiF;gBACjF,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAChD,CAAC;QAED,kBAAkB;QAClB,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC1C,CAAC;QAED,cAAc;QACd,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,IAAgB,CAAC;QAC9C,CAAC;QAED,kFAAkF;QAClF,IACE,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM;YACjC,MAAM,CAAC,IAAI,KAAK,QAAQ;YACxB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAC9D,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtE,MAAM,CAAC,IAAI,CACT,gHAAgH,CACjH,CAAC;gBACF,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;gBAChC,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,wCAAwC;YACxC,YAAY,CAAC,UAAU,GAAG,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7D,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAClE,CAAC;YAED,yBAAyB;YACzB,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IACE,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;YAChC,MAAM,CAAC,IAAI,KAAK,OAAO;YACvB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAC7D,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,IAAY;QAClC,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,OAAO,CAAC;YACtB,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,OAAO,CAAC;YACtB,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,KAAK,CAAC;YACpB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB;gBACE,MAAM,CAAC,IAAI,CACT,kCAAkC,IAAI,yBAAyB,CAChE,CAAC;gBACF,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAInB,KAAqC;QAErC,OAAO,IAAI,CAAC,kBAAkB,CAAwB,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,CAAC,qBAAqB,CAI1B,KAAqC;QAErC,KAAK,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAwB,KAAK,CAAC,CAAC;IACrE,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAI9B,KAAqC;QAErC,0BAA0B;QAC1B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,YAAqB,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CACT,0BAA0B,IAAI,CAAC,YAAY,YAAY,aAAa,EAAE,CACvE,CAAC;YAEF,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,MAAM,YAAY,CAAC;YACrB,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAE9C,IAAI,eAAe,GAAY,YAAY,CAAC;YAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,CAAC,KAAK,CACV,gCAAgC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAC3D,KAAK,WAAW,EAAE,CACnB,CAAC;gBAEF,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBAChE,MAAM,CAAC,KAAK,CAAC,yBAAyB,WAAW,YAAY,CAAC,CAAC;oBAC/D,OAAO,MAA4C,CAAC;gBACtD,CAAC;gBAAC,OAAO,WAAoB,EAAE,CAAC;oBAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;oBAClD,MAAM,CAAC,IAAI,CACT,yBAAyB,WAAW,YAAY,YAAY,EAAE,CAC/D,CAAC;oBACF,eAAe,GAAG,WAAW,CAAC;oBAE9B,IACE,CAAC,oBAAoB,CAAC,WAAW,CAAC;wBAClC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;wBACD,MAAM,CAAC,KAAK,CACV,kEAAkE,CACnE,CAAC;wBACF,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CACV,wCAAwC,aAAa,kBAAkB,gBAAgB,EAAE,CAC1F,CAAC;YACF,MAAM,eAAe,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAI7B,KAAa,EACb,KAAqC;QAErC,MAAM,SAAS,GAAG,KAAK,IAAoC,EAAE;YAC3D,6CAA6C;YAC7C,MAAM,cAAc,GAAmC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAE1E,4EAA4E;YAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACvD,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;YAEnD,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,oHAAoH,CAAC,CAAC;YACrI,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBACzE,MAAM,CAAC,KAAK,CAAC,gCAAgC,SAAS,CAAC,MAAM,oBAAoB,KAAK,GAAG,EAAE,SAAS,CAAC,CAAC;gBACtG,cAAc,CAAC,KAAK,GAAG;oBACrB;wBACE,oBAAoB,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;4BAChD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;4BAC1B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;4BACnC,UAAU,EAAE,IAAI,CAAC,UAA+C,EAAE,cAAc;yBACjF,CAAC,CAAC;qBACJ;iBACF,CAAC;YAEJ,CAAC;iBAAM,IAAI,aAAa,EAAE,CAAC;gBACzB,+CAA+C;gBAC/C,cAAc,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;gBACrD,+DAA+D;gBAC/D,cAAc,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAC1E,KAAK,CAAC,UAAU,CAAC,UAAU,CAC5B,CAAC,CAAC,CAAC,EAAE,CAAC;YACT,CAAC;YAED,IAAI,QAAiC,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;oBACjD,KAAK;oBACL,QAAQ,EAAE,KAAK,CAAC,MAAM;oBACtB,MAAM,EAAE,cAAc;iBACvB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;gBACzD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,yCAAyC;YACzC,MAAM,SAAS,GAGV,EAAE,CAAC;YAER,mDAAmD;YACnD,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAClE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACxD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,SAAS,CAAC,IAAI,CAAC;4BACb,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE;4BACtC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAA+B;yBAC7D,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,uCAAuC;YACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE;oBAC3D,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;oBACxB,eAAe,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;oBACjD,qBAAqB,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO;oBACxD,mBAAmB,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;iBAC3E,CAAC,CAAC;YACL,CAAC;YACD,kEAAkE;YAClE,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,+DAA+D;gBAC/D,MAAM,CAAC,KAAK,CAAC,8EAA8E,EAAE,SAAS,CAAC,CAAC;gBAExG,qCAAqC;gBACrC,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;oBAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;yBACnD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;yBACzB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;yBACtB,IAAI,CAAC,EAAE,CAAC,CAAC;oBACZ,OAAO,GAAG,SAAS,CAAC;oBACpB,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;YAED,4DAA4D;YAC5D,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;gBAC5E,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC3E,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,+DAA+D;YAC/D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,gEAAgE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnH,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,6DAA6D,EAAE;oBAC1E,aAAa,EAAE,OAAO,CAAC,MAAM;oBAC7B,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC;iBAC5C,CAAC,CAAC;YACL,CAAC;YAID,6CAA6C;YAC7C,IAAI,UAA+C,CAAC;YACpD,IAAI,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBAC7C,IAAI,MAAM,EAAE,CAAC;oBACX,UAAU,GAAG,MAAiC,CAAC;gBACjD,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;YAED,0DAA0D;YAC1D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,UAAU,GAAG;oBACX,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO;oBACvC,SAAS;oBACT,GAAG,UAAU;iBACa,CAAC;YAC/B,CAAC;YAED,OAAO;gBACL,OAAO;gBACP,QAAQ,EAAE;oBACR,KAAK;oBACL,UAAU,EAAE,QAAQ,CAAC,aAAa,EAAE,eAAe;oBACnD,YAAY,EAAE,QAAQ,CAAC,aAAa,EAAE,gBAAgB;oBACtD,gBAAgB,EAAE,QAAQ,CAAC,aAAa,EAAE,oBAAoB;iBAC/D;gBACD,UAAU;aACX,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,mBAAmB,CACxB,SAAS,EACT,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,UAAU,KAAK,EAAE,CAC6B,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,CAAC,wBAAwB,CAIrC,KAAqC;QAErC,0BAA0B;QAC1B,IAAI,CAAC;YACH,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,YAAqB,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CACT,0BAA0B,IAAI,CAAC,YAAY,YAAY,aAAa,EAAE,CACvE,CAAC;YAEF,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,MAAM,YAAY,CAAC;YACrB,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAE5D,IAAI,eAAe,GAAY,YAAY,CAAC;YAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,CAAC,KAAK,CACV,gCAAgC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAC3D,KAAK,WAAW,EAAE,CACnB,CAAC;gBAEF,IAAI,CAAC;oBACH,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBACxD,MAAM,CAAC,KAAK,CAAC,yBAAyB,WAAW,YAAY,CAAC,CAAC;oBAC/D,OAAO;gBACT,CAAC;gBAAC,OAAO,WAAoB,EAAE,CAAC;oBAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;oBAClD,MAAM,CAAC,IAAI,CACT,yBAAyB,WAAW,YAAY,YAAY,EAAE,CAC/D,CAAC;oBACF,eAAe,GAAG,WAAW,CAAC;oBAE9B,IACE,CAAC,oBAAoB,CAAC,WAAW,CAAC;wBAClC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;wBACD,MAAM,CAAC,KAAK,CACV,kEAAkE,CACnE,CAAC;wBACF,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CACV,wCAAwC,aAAa,kBAAkB,gBAAgB,EAAE,CAC1F,CAAC;YACF,MAAM,eAAe,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,CAAC,uBAAuB,CAIpC,KAAa,EACb,KAAqC;QAErC,6CAA6C;QAC7C,MAAM,cAAc,GAAmC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE1E,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;QAEnD,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,oHAAoH,CAAC,CAAC;QACrI,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACzE,MAAM,CAAC,KAAK,CAAC,gCAAgC,SAAS,CAAC,MAAM,uBAAuB,EAAE,SAAS,CAAC,CAAC;YACjG,cAAc,CAAC,KAAK,GAAG;gBACrB;oBACE,oBAAoB,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAChD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;wBAC1B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;wBACnC,UAAU,EAAE,IAAI,CAAC,UAA+C;qBACjE,CAAC,CAAC;iBACJ;aACF,CAAC;QAEJ,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,+CAA+C;YAC/C,cAAc,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;YACrD,+DAA+D;YAC/D,cAAc,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAC1E,KAAK,CAAC,UAAU,CAAC,UAAU,CAC5B,CAAC,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;QAED,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC;gBACrD,KAAK;gBACL,QAAQ,EAAE,KAAK,CAAC,MAAM;gBACtB,MAAM,EAAE,cAAc;aACvB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,MAAM,SAAS,GAGV,EAAE,CAAC;QAER,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YAE/B,gCAAgC;YAChC,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACrD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,SAAS,CAAC,IAAI,CAAC;4BACb,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE;4BACtC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAA+B;yBAC7D,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,WAAW,IAAI,KAAK,CAAC;gBACrB,MAAM;oBACJ,KAAK;oBACL,WAAW;oBACX,IAAI,EAAE,KAAK;iBACZ,CAAC;YACJ,CAAC;YAED,mCAAmC;YACnC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBAC7D,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,oBAAoB,IAAI,CAAC,CAAC;gBACrE,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,eAAe,IAAI,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,IAAI,UAA+C,CAAC;QACpD,IAAI,KAAK,CAAC,UAAU,EAAE,UAAU,IAAI,WAAW,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,GAAG,MAAiC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,UAAU,GAAG;gBACX,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,WAAW;gBAC3C,SAAS;gBACT,GAAG,UAAU;aACa,CAAC;QAC/B,CAAC;QAED,oBAAoB;QACpB,MAAM;YACJ,KAAK,EAAE,EAAE;YACT,WAAW;YACX,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE;gBACR,KAAK;gBACL,UAAU,EAAE,eAAe;gBAC3B,YAAY,EAAE,gBAAgB;gBAC9B,gBAAgB,EAAE,oBAAoB;aACvC;YACD,UAAU,EAAE,UAAqC;SAClD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI provider implementation with retry and backup models
|
|
3
|
+
*/
|
|
4
|
+
import type { ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions";
|
|
5
|
+
import type { AiProvider, GenerateMessageInput, GenerateMessageOutput, GenerateMessageStreamChunk, AgentStructuredResponse } from "../types";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for OpenAI provider
|
|
8
|
+
* Uses types from openai package
|
|
9
|
+
*/
|
|
10
|
+
export interface OpenAIProviderOptions {
|
|
11
|
+
/** OpenAI API key */
|
|
12
|
+
apiKey: string;
|
|
13
|
+
/** Organization ID (optional) */
|
|
14
|
+
organization?: string;
|
|
15
|
+
/** Model to use (required) - e.g., "gpt-5", "gpt-5-mini" */
|
|
16
|
+
model: string;
|
|
17
|
+
/** Backup models to try if primary fails (default: []) */
|
|
18
|
+
backupModels?: string[];
|
|
19
|
+
/** Default parameters - uses ChatCompletionCreateParamsNonStreaming from openai package */
|
|
20
|
+
config?: Partial<Omit<ChatCompletionCreateParamsNonStreaming, "model" | "messages">>;
|
|
21
|
+
/** Retry configuration */
|
|
22
|
+
retryConfig?: {
|
|
23
|
+
timeout?: number;
|
|
24
|
+
retries?: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* OpenAI provider implementation with backup models and retry logic
|
|
29
|
+
*/
|
|
30
|
+
export declare class OpenAIProvider implements AiProvider {
|
|
31
|
+
readonly name = "openai";
|
|
32
|
+
private client;
|
|
33
|
+
private primaryModel;
|
|
34
|
+
private backupModels;
|
|
35
|
+
private config?;
|
|
36
|
+
private retryConfig;
|
|
37
|
+
constructor(options: OpenAIProviderOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Adapt common schema format to OpenAI's format.
|
|
40
|
+
* OpenAI uses standard JSON Schema, so this is mostly a passthrough.
|
|
41
|
+
*
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
private adaptSchemaForOpenAI;
|
|
45
|
+
generateMessage<TContext = unknown, TStructured = AgentStructuredResponse>(input: GenerateMessageInput<TContext>): Promise<GenerateMessageOutput<TStructured>>;
|
|
46
|
+
generateMessageStream<TContext = unknown, TStructured = AgentStructuredResponse>(input: GenerateMessageInput<TContext>): AsyncGenerator<GenerateMessageStreamChunk<TStructured>>;
|
|
47
|
+
private generateWithBackup;
|
|
48
|
+
private generateWithModel;
|
|
49
|
+
private generateStreamWithBackup;
|
|
50
|
+
private generateStreamWithModel;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=OpenAIProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAEhG,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EAExB,MAAM,UAAU,CAAC;AASlB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,OAAO,CACd,IAAI,CAAC,sCAAsC,EAAE,OAAO,GAAG,UAAU,CAAC,CACnE,CAAC;IACF,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAwED;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,CAEb;IACF,OAAO,CAAC,WAAW,CAAuC;gBAE9C,OAAO,EAAE,qBAAqB;IAiC1C;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAQtB,eAAe,CACnB,QAAQ,GAAG,OAAO,EAClB,WAAW,GAAG,uBAAuB,EAErC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAIvC,qBAAqB,CAC1B,QAAQ,GAAG,OAAO,EAClB,WAAW,GAAG,uBAAuB,EAErC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,cAAc,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;YAI5C,kBAAkB;YAiElB,iBAAiB;YAwIhB,wBAAwB;YAoExB,uBAAuB;CAyIvC"}
|