@falai/agent 0.9.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +304 -72
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryAdapter.js.map +1 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/{src → cjs}/core/Agent.d.ts +25 -6
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +121 -37
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/BatchExecutor.d.ts +353 -0
- package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
- package/dist/cjs/core/BatchExecutor.js +842 -0
- package/dist/cjs/core/BatchExecutor.js.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.js +201 -0
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
- package/dist/cjs/core/PromptComposer.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +202 -0
- package/dist/cjs/core/ResponseEngine.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseModal.d.ts +54 -3
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +807 -121
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +10 -6
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +60 -25
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +46 -10
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/core/Route.js +541 -0
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +35 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +360 -98
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/{src → cjs}/core/SessionManager.d.ts +9 -1
- package/dist/cjs/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/SessionManager.js +27 -5
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +170 -0
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/core/Step.js +448 -0
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.d.ts +234 -0
- package/dist/cjs/core/ToolManager.d.ts.map +1 -0
- package/dist/cjs/core/ToolManager.js +1117 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +5 -3
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +16 -3
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/{src/types → types}/agent.d.ts +12 -4
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/{src → cjs}/types/ai.js.map +1 -1
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/{src/types → types}/index.d.ts +5 -3
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +8 -1
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/cjs/{src/types → types}/route.d.ts +116 -15
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/{src/types → types}/route.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -0
- package/dist/cjs/types/template.d.ts +88 -0
- package/dist/cjs/types/template.d.ts.map +1 -0
- package/dist/cjs/types/tool.d.ts +130 -0
- package/dist/cjs/types/tool.d.ts.map +1 -0
- package/dist/cjs/types/tool.js +19 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/condition.d.ts +38 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -0
- package/dist/cjs/utils/condition.js +168 -0
- package/dist/cjs/utils/condition.js.map +1 -0
- package/dist/cjs/utils/event.js.map +1 -0
- package/dist/cjs/utils/history.js.map +1 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/json.d.ts +16 -0
- package/dist/cjs/utils/json.d.ts.map +1 -0
- package/dist/cjs/utils/json.js +47 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{src → cjs}/utils/retry.d.ts +0 -3
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/retry.js +8 -7
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/session.js.map +1 -0
- package/dist/{src → cjs}/utils/template.d.ts +48 -0
- package/dist/cjs/utils/template.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/template.js +100 -0
- package/dist/cjs/utils/template.js.map +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/{cjs/src/core → core}/Agent.d.ts +25 -6
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +122 -38
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/BatchExecutor.d.ts +353 -0
- package/dist/core/BatchExecutor.d.ts.map +1 -0
- package/dist/core/BatchExecutor.js +837 -0
- package/dist/core/BatchExecutor.js.map +1 -0
- package/dist/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/core/BatchPromptBuilder.js +197 -0
- package/dist/core/BatchPromptBuilder.js.map +1 -0
- package/dist/core/Events.d.ts.map +1 -0
- package/dist/core/Events.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -0
- package/dist/{src/core → core}/PromptComposer.js +45 -8
- package/dist/core/PromptComposer.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -0
- package/dist/core/ResponseEngine.js +198 -0
- package/dist/core/ResponseEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponseModal.d.ts +54 -3
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +807 -121
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +10 -6
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +60 -25
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +46 -10
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/core/Route.js +537 -0
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +35 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +343 -81
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/SessionManager.d.ts +9 -1
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/{src/core → core}/SessionManager.js +27 -5
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/Step.d.ts +170 -0
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/core/Step.js +444 -0
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts +234 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js +1111 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +5 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +4 -1
- package/dist/index.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/types → types}/agent.d.ts +12 -4
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js.map +1 -0
- package/dist/{src/types → types}/index.d.ts +5 -3
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/{src/types → types}/route.d.ts +116 -15
- package/dist/types/route.d.ts.map +1 -0
- package/dist/{src/types → types}/route.js.map +1 -1
- package/dist/types/routing.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/routing.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/schema.js.map +1 -1
- package/dist/types/session.d.ts.map +1 -0
- package/dist/{src/types → types}/session.js.map +1 -1
- package/dist/types/template.d.ts +88 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/template.js.map +1 -1
- package/dist/types/tool.d.ts +130 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +16 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/clone.d.ts.map +1 -0
- package/dist/utils/clone.js.map +1 -0
- package/dist/utils/condition.d.ts +38 -0
- package/dist/utils/condition.d.ts.map +1 -0
- package/dist/utils/condition.js +161 -0
- package/dist/utils/condition.js.map +1 -0
- package/dist/utils/event.d.ts.map +1 -0
- package/dist/utils/event.js.map +1 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/{src/utils → utils}/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{src/utils → utils}/index.js +5 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +16 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{src/utils → utils}/retry.js +5 -4
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/{src/utils → utils}/template.js +98 -0
- package/dist/utils/template.js.map +1 -0
- package/docs/CONTRIBUTING.md +40 -0
- package/docs/README.md +12 -5
- package/docs/api/README.md +295 -56
- package/docs/api/overview.md +272 -31
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/architecture/multi-step-execution.md +243 -0
- package/docs/core/agent/README.md +120 -5
- package/docs/core/agent/session-management.md +153 -6
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +261 -4
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +132 -2
- package/docs/core/conversation-flows/step-transitions.md +132 -0
- package/docs/core/conversation-flows/steps.md +112 -0
- package/docs/core/error-handling.md +831 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/core/tools/tool-definition.md +684 -60
- package/docs/core/tools/tool-scoping.md +244 -53
- package/docs/guides/error-handling-patterns.md +578 -0
- package/docs/guides/getting-started/README.md +423 -31
- package/docs/guides/migration/README.md +23 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +303 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +107 -30
- package/examples/advanced-patterns/persistent-onboarding.ts +70 -48
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
- package/examples/advanced-patterns/streaming-responses.ts +2 -2
- package/examples/ai-providers/anthropic-integration.ts +13 -9
- package/examples/ai-providers/openai-integration.ts +12 -8
- 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 +48 -7
- package/examples/core-concepts/basic-agent.ts +158 -98
- package/examples/core-concepts/schema-driven-extraction.ts +43 -16
- package/examples/core-concepts/session-management.ts +117 -29
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +25 -39
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +11 -11
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +6 -6
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/basic-tools.ts +293 -89
- package/examples/tools/data-enrichment-tools.ts +189 -79
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +152 -46
- package/src/core/BatchExecutor.ts +1156 -0
- package/src/core/BatchPromptBuilder.ts +275 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +143 -4
- package/src/core/ResponseModal.ts +1035 -137
- package/src/core/ResponsePipeline.ts +99 -65
- package/src/core/Route.ts +262 -34
- package/src/core/RoutingEngine.ts +467 -120
- package/src/core/SessionManager.ts +39 -7
- package/src/core/Step.ts +338 -32
- package/src/core/ToolManager.ts +1394 -0
- package/src/index.ts +27 -3
- package/src/providers/AnthropicProvider.ts +17 -17
- package/src/providers/GeminiProvider.ts +129 -60
- package/src/providers/OpenAIProvider.ts +18 -18
- package/src/providers/OpenRouterProvider.ts +18 -18
- package/src/types/agent.ts +12 -4
- package/src/types/index.ts +25 -3
- package/src/types/route.ts +136 -15
- package/src/types/template.ts +70 -2
- package/src/types/tool.ts +116 -25
- package/src/utils/condition.ts +190 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/retry.ts +5 -4
- package/src/utils/template.ts +109 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/index.d.ts.map +0 -1
- package/dist/cjs/src/adapters/index.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/core/Agent.d.ts.map +0 -1
- package/dist/cjs/src/core/Agent.js.map +0 -1
- package/dist/cjs/src/core/Events.d.ts.map +0 -1
- package/dist/cjs/src/core/Events.js.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/src/core/PromptComposer.js.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.js +0 -84
- package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseModal.js.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/src/core/Route.d.ts.map +0 -1
- package/dist/cjs/src/core/Route.js +0 -343
- package/dist/cjs/src/core/Route.js.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/src/core/SessionManager.js.map +0 -1
- package/dist/cjs/src/core/Step.d.ts +0 -96
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js +0 -206
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.js +0 -84
- package/dist/cjs/src/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/src/providers/index.d.ts.map +0 -1
- package/dist/cjs/src/providers/index.js.map +0 -1
- package/dist/cjs/src/types/agent.d.ts.map +0 -1
- package/dist/cjs/src/types/agent.js.map +0 -1
- package/dist/cjs/src/types/ai.d.ts.map +0 -1
- package/dist/cjs/src/types/ai.js.map +0 -1
- package/dist/cjs/src/types/history.d.ts.map +0 -1
- package/dist/cjs/src/types/history.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +0 -1
- package/dist/cjs/src/types/persistence.js.map +0 -1
- package/dist/cjs/src/types/route.d.ts.map +0 -1
- package/dist/cjs/src/types/routing.d.ts.map +0 -1
- package/dist/cjs/src/types/schema.d.ts.map +0 -1
- package/dist/cjs/src/types/session.d.ts.map +0 -1
- package/dist/cjs/src/types/session.js.map +0 -1
- package/dist/cjs/src/types/template.d.ts +0 -30
- package/dist/cjs/src/types/template.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.d.ts +0 -60
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js +0 -6
- package/dist/cjs/src/types/tool.js.map +0 -1
- package/dist/cjs/src/utils/clone.d.ts.map +0 -1
- package/dist/cjs/src/utils/clone.js.map +0 -1
- package/dist/cjs/src/utils/event.d.ts.map +0 -1
- package/dist/cjs/src/utils/event.js.map +0 -1
- package/dist/cjs/src/utils/history.d.ts.map +0 -1
- package/dist/cjs/src/utils/history.js.map +0 -1
- package/dist/cjs/src/utils/id.d.ts.map +0 -1
- package/dist/cjs/src/utils/id.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/logger.d.ts.map +0 -1
- package/dist/cjs/src/utils/logger.js.map +0 -1
- package/dist/cjs/src/utils/retry.d.ts.map +0 -1
- package/dist/cjs/src/utils/retry.js.map +0 -1
- package/dist/cjs/src/utils/session.d.ts.map +0 -1
- package/dist/cjs/src/utils/session.js.map +0 -1
- package/dist/cjs/src/utils/template.d.ts.map +0 -1
- package/dist/cjs/src/utils/template.js.map +0 -1
- package/dist/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/core/Agent.d.ts.map +0 -1
- package/dist/src/core/Agent.js.map +0 -1
- package/dist/src/core/Events.js.map +0 -1
- package/dist/src/core/PersistenceManager.js.map +0 -1
- package/dist/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/src/core/PromptComposer.js.map +0 -1
- package/dist/src/core/ResponseEngine.js +0 -80
- package/dist/src/core/ResponseEngine.js.map +0 -1
- package/dist/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/src/core/ResponseModal.js.map +0 -1
- package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/src/core/ResponsePipeline.js.map +0 -1
- package/dist/src/core/Route.d.ts.map +0 -1
- package/dist/src/core/Route.js +0 -339
- package/dist/src/core/Route.js.map +0 -1
- package/dist/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/src/core/RoutingEngine.js.map +0 -1
- package/dist/src/core/SessionManager.d.ts.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts +0 -96
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js +0 -202
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolExecutor.d.ts +0 -45
- package/dist/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/src/core/ToolExecutor.js +0 -80
- package/dist/src/core/ToolExecutor.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/GeminiProvider.js.map +0 -1
- package/dist/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/types/agent.d.ts.map +0 -1
- package/dist/src/types/agent.js.map +0 -1
- package/dist/src/types/history.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/persistence.js.map +0 -1
- package/dist/src/types/route.d.ts.map +0 -1
- package/dist/src/types/template.d.ts +0 -30
- package/dist/src/types/template.d.ts.map +0 -1
- package/dist/src/types/tool.d.ts +0 -60
- package/dist/src/types/tool.d.ts.map +0 -1
- package/dist/src/types/tool.js +0 -5
- package/dist/src/types/tool.js.map +0 -1
- package/dist/src/utils/clone.js.map +0 -1
- package/dist/src/utils/event.js.map +0 -1
- package/dist/src/utils/history.js.map +0 -1
- package/dist/src/utils/id.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/session.js.map +0 -1
- package/dist/src/utils/template.d.ts.map +0 -1
- package/dist/src/utils/template.js.map +0 -1
- package/docs/core/tools/tool-execution.md +0 -815
- package/src/core/ToolExecutor.ts +0 -126
- /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
- /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
- /package/dist/cjs/{src/constants → constants}/index.js +0 -0
- /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/Events.js +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.js +0 -0
- /package/dist/cjs/{src/types → types}/agent.js +0 -0
- /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/ai.js +0 -0
- /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/history.js +0 -0
- /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/persistence.js +0 -0
- /package/dist/cjs/{src/types → types}/route.js +0 -0
- /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/routing.js +0 -0
- /package/dist/{src → cjs}/types/routing.js.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.js +0 -0
- /package/dist/{src → cjs}/types/schema.js.map +0 -0
- /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/session.js +0 -0
- /package/dist/cjs/{src/types → types}/template.js +0 -0
- /package/dist/{src → cjs}/types/template.js.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
- /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/event.js +0 -0
- /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/history.js +0 -0
- /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/id.js +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
- /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/session.js +0 -0
- /package/dist/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src/constants → constants}/index.js +0 -0
- /package/dist/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src/core → core}/Events.js +0 -0
- /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.js +0 -0
- /package/dist/{src/types → types}/agent.js +0 -0
- /package/dist/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src/types → types}/ai.js +0 -0
- /package/dist/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src/types → types}/history.js +0 -0
- /package/dist/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src/types → types}/persistence.js +0 -0
- /package/dist/{src/types → types}/route.js +0 -0
- /package/dist/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src/types → types}/routing.js +0 -0
- /package/dist/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src/types → types}/schema.js +0 -0
- /package/dist/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src/types → types}/session.js +0 -0
- /package/dist/{src/types → types}/template.js +0 -0
- /package/dist/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src/utils → utils}/clone.js +0 -0
- /package/dist/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src/utils → utils}/event.js +0 -0
- /package/dist/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src/utils → utils}/history.js +0 -0
- /package/dist/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src/utils → utils}/id.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src/utils → utils}/session.js +0 -0
package/src/index.ts
CHANGED
|
@@ -18,8 +18,9 @@ export type {
|
|
|
18
18
|
export { adaptEvent, convertHistoryToEvents } from "./core/Events";
|
|
19
19
|
export { PersistenceManager } from "./core/PersistenceManager";
|
|
20
20
|
export { SessionManager } from "./core/SessionManager";
|
|
21
|
-
export {
|
|
22
|
-
export type
|
|
21
|
+
export { ToolManager, ToolCreationError, ToolExecutionError } from "./core/ToolManager";
|
|
22
|
+
export { BatchExecutor, needsInput, type NeedsInputStep, type DetermineBatchParams } from "./core/BatchExecutor";
|
|
23
|
+
export { BatchPromptBuilder, type BuildBatchPromptParams, type BatchPromptResult } from "./core/BatchPromptBuilder";
|
|
23
24
|
|
|
24
25
|
// Providers
|
|
25
26
|
export { GeminiProvider } from "./providers/GeminiProvider";
|
|
@@ -72,6 +73,12 @@ export { END_ROUTE, END_ROUTE_ID } from "./constants";
|
|
|
72
73
|
// Utils
|
|
73
74
|
export { generateRouteId, generateStepId, generateToolId } from "./utils/id";
|
|
74
75
|
export { formatKnowledgeBase } from "./utils/template";
|
|
76
|
+
export {
|
|
77
|
+
ConditionEvaluator,
|
|
78
|
+
createConditionEvaluator,
|
|
79
|
+
extractAIContextStrings,
|
|
80
|
+
hasProgrammaticConditions
|
|
81
|
+
} from "./utils/condition";
|
|
75
82
|
export {
|
|
76
83
|
normalizeHistory,
|
|
77
84
|
historyItemToEvent,
|
|
@@ -87,6 +94,7 @@ export {
|
|
|
87
94
|
// Types
|
|
88
95
|
export type {
|
|
89
96
|
AgentOptions,
|
|
97
|
+
AgentResponse,
|
|
90
98
|
Term,
|
|
91
99
|
Guideline,
|
|
92
100
|
GuidelineMatch,
|
|
@@ -102,7 +110,6 @@ export type {
|
|
|
102
110
|
StepRef,
|
|
103
111
|
RouteOptions,
|
|
104
112
|
StepOptions,
|
|
105
|
-
StepResult,
|
|
106
113
|
RouteTransitionConfig,
|
|
107
114
|
RouteCompletionHandler,
|
|
108
115
|
SessionState,
|
|
@@ -111,6 +118,13 @@ export type {
|
|
|
111
118
|
ToolResult,
|
|
112
119
|
ToolHandler,
|
|
113
120
|
Tool,
|
|
121
|
+
|
|
122
|
+
DataEnrichmentConfig,
|
|
123
|
+
ValidationConfig,
|
|
124
|
+
ValidationError,
|
|
125
|
+
ApiCallConfig,
|
|
126
|
+
ComputationConfig,
|
|
127
|
+
ToolScope,
|
|
114
128
|
AiProvider,
|
|
115
129
|
GenerateMessageInput,
|
|
116
130
|
GenerateMessageOutput,
|
|
@@ -133,10 +147,20 @@ export type {
|
|
|
133
147
|
PersistenceAdapter,
|
|
134
148
|
Template,
|
|
135
149
|
TemplateContext,
|
|
150
|
+
ConditionTemplate,
|
|
151
|
+
ConditionEvaluationResult,
|
|
136
152
|
UserHistoryItem,
|
|
137
153
|
AssistantHistoryItem,
|
|
138
154
|
ToolHistoryItem,
|
|
139
155
|
SystemHistoryItem,
|
|
156
|
+
// Multi-step execution types
|
|
157
|
+
StoppedReason,
|
|
158
|
+
BatchResult,
|
|
159
|
+
BatchExecutionResult,
|
|
160
|
+
BatchExecutionEvent,
|
|
161
|
+
BatchExecutionEventType,
|
|
162
|
+
BatchExecutionTiming,
|
|
163
|
+
BatchExecutionError,
|
|
140
164
|
} from "./types";
|
|
141
165
|
export { CompositionMode, EventKind, MessageRole } from "./types";
|
|
142
166
|
export { createSession, enterRoute, enterStep, mergeCollected } from "./utils";
|
|
@@ -15,7 +15,7 @@ import type {
|
|
|
15
15
|
GenerateMessageStreamChunk,
|
|
16
16
|
AgentStructuredResponse,
|
|
17
17
|
} from "../types";
|
|
18
|
-
import { withTimeoutAndRetry } from "../utils
|
|
18
|
+
import { withTimeoutAndRetry, logger } from "../utils";
|
|
19
19
|
|
|
20
20
|
const DEFAULT_RETRY_CONFIG = {
|
|
21
21
|
timeout: 60000,
|
|
@@ -184,7 +184,7 @@ export class AnthropicProvider implements AiProvider {
|
|
|
184
184
|
);
|
|
185
185
|
} catch (primaryError: unknown) {
|
|
186
186
|
const primaryErrMsg = getErrorMessage(primaryError);
|
|
187
|
-
|
|
187
|
+
logger.warn(
|
|
188
188
|
`[ANTHROPIC] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
|
|
189
189
|
);
|
|
190
190
|
|
|
@@ -192,13 +192,13 @@ export class AnthropicProvider implements AiProvider {
|
|
|
192
192
|
throw primaryError;
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
|
|
195
|
+
logger.debug(`[ANTHROPIC] Trying backup models`);
|
|
196
196
|
|
|
197
197
|
let lastBackupError: unknown = primaryError;
|
|
198
198
|
|
|
199
199
|
for (let i = 0; i < this.backupModels.length; i++) {
|
|
200
200
|
const backupModel = this.backupModels[i];
|
|
201
|
-
|
|
201
|
+
logger.debug(
|
|
202
202
|
`[ANTHROPIC] Trying backup model ${i + 1}/${
|
|
203
203
|
this.backupModels.length
|
|
204
204
|
}: ${backupModel}`
|
|
@@ -209,11 +209,11 @@ export class AnthropicProvider implements AiProvider {
|
|
|
209
209
|
backupModel,
|
|
210
210
|
input
|
|
211
211
|
);
|
|
212
|
-
|
|
212
|
+
logger.debug(`[ANTHROPIC] Backup model ${backupModel} succeeded`);
|
|
213
213
|
return result;
|
|
214
214
|
} catch (backupError: unknown) {
|
|
215
215
|
const backupErrMsg = getErrorMessage(backupError);
|
|
216
|
-
|
|
216
|
+
logger.warn(
|
|
217
217
|
`[ANTHROPIC] Backup model ${backupModel} failed: ${backupErrMsg}`
|
|
218
218
|
);
|
|
219
219
|
lastBackupError = backupError;
|
|
@@ -222,7 +222,7 @@ export class AnthropicProvider implements AiProvider {
|
|
|
222
222
|
!shouldUseBackupModel(backupError) &&
|
|
223
223
|
i < this.backupModels.length - 1
|
|
224
224
|
) {
|
|
225
|
-
|
|
225
|
+
logger.debug(
|
|
226
226
|
`[ANTHROPIC] Backup model error doesn't qualify for further attempts`
|
|
227
227
|
);
|
|
228
228
|
break;
|
|
@@ -231,7 +231,7 @@ export class AnthropicProvider implements AiProvider {
|
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
const lastBackupErrMsg = getErrorMessage(lastBackupError);
|
|
234
|
-
|
|
234
|
+
logger.error(
|
|
235
235
|
`[ANTHROPIC] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
|
|
236
236
|
);
|
|
237
237
|
throw lastBackupError;
|
|
@@ -325,7 +325,7 @@ export class AnthropicProvider implements AiProvider {
|
|
|
325
325
|
try {
|
|
326
326
|
structured = JSON.parse(message) as AgentStructuredResponse;
|
|
327
327
|
} catch (error) {
|
|
328
|
-
|
|
328
|
+
logger.warn("[ANTHROPIC] Failed to parse JSON response:", error);
|
|
329
329
|
// Fall back to treating the message as plain text
|
|
330
330
|
}
|
|
331
331
|
}
|
|
@@ -375,7 +375,7 @@ export class AnthropicProvider implements AiProvider {
|
|
|
375
375
|
);
|
|
376
376
|
} catch (primaryError: unknown) {
|
|
377
377
|
const primaryErrMsg = getErrorMessage(primaryError);
|
|
378
|
-
|
|
378
|
+
logger.warn(
|
|
379
379
|
`[ANTHROPIC] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
|
|
380
380
|
);
|
|
381
381
|
|
|
@@ -383,13 +383,13 @@ export class AnthropicProvider implements AiProvider {
|
|
|
383
383
|
throw primaryError;
|
|
384
384
|
}
|
|
385
385
|
|
|
386
|
-
|
|
386
|
+
logger.debug(`[ANTHROPIC] Trying backup models for streaming`);
|
|
387
387
|
|
|
388
388
|
let lastBackupError: unknown = primaryError;
|
|
389
389
|
|
|
390
390
|
for (let i = 0; i < this.backupModels.length; i++) {
|
|
391
391
|
const backupModel = this.backupModels[i];
|
|
392
|
-
|
|
392
|
+
logger.debug(
|
|
393
393
|
`[ANTHROPIC] Trying backup model ${i + 1}/${
|
|
394
394
|
this.backupModels.length
|
|
395
395
|
}: ${backupModel}`
|
|
@@ -400,11 +400,11 @@ export class AnthropicProvider implements AiProvider {
|
|
|
400
400
|
backupModel,
|
|
401
401
|
input
|
|
402
402
|
);
|
|
403
|
-
|
|
403
|
+
logger.debug(`[ANTHROPIC] Backup model ${backupModel} succeeded`);
|
|
404
404
|
return;
|
|
405
405
|
} catch (backupError: unknown) {
|
|
406
406
|
const backupErrMsg = getErrorMessage(backupError);
|
|
407
|
-
|
|
407
|
+
logger.warn(
|
|
408
408
|
`[ANTHROPIC] Backup model ${backupModel} failed: ${backupErrMsg}`
|
|
409
409
|
);
|
|
410
410
|
lastBackupError = backupError;
|
|
@@ -413,7 +413,7 @@ export class AnthropicProvider implements AiProvider {
|
|
|
413
413
|
!shouldUseBackupModel(backupError) &&
|
|
414
414
|
i < this.backupModels.length - 1
|
|
415
415
|
) {
|
|
416
|
-
|
|
416
|
+
logger.debug(
|
|
417
417
|
`[ANTHROPIC] Backup model error doesn't qualify for further attempts`
|
|
418
418
|
);
|
|
419
419
|
break;
|
|
@@ -422,7 +422,7 @@ export class AnthropicProvider implements AiProvider {
|
|
|
422
422
|
}
|
|
423
423
|
|
|
424
424
|
const lastBackupErrMsg = getErrorMessage(lastBackupError);
|
|
425
|
-
|
|
425
|
+
logger.error(
|
|
426
426
|
`[ANTHROPIC] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
|
|
427
427
|
);
|
|
428
428
|
throw lastBackupError;
|
|
@@ -526,7 +526,7 @@ export class AnthropicProvider implements AiProvider {
|
|
|
526
526
|
try {
|
|
527
527
|
structured = JSON.parse(accumulated) as AgentStructuredResponse;
|
|
528
528
|
} catch (error) {
|
|
529
|
-
|
|
529
|
+
logger.warn(
|
|
530
530
|
"[ANTHROPIC] Failed to parse JSON response in stream:",
|
|
531
531
|
error
|
|
532
532
|
);
|
|
@@ -20,6 +20,8 @@ import type {
|
|
|
20
20
|
StructuredSchema,
|
|
21
21
|
} from "../types";
|
|
22
22
|
import { withTimeoutAndRetry } from "../utils/retry";
|
|
23
|
+
import { tryParseJSONResponse } from "../utils/json";
|
|
24
|
+
import { logger } from "../utils/logger";
|
|
23
25
|
|
|
24
26
|
const DEFAULT_RETRY_CONFIG = {
|
|
25
27
|
timeout: 60000,
|
|
@@ -194,7 +196,7 @@ export class GeminiProvider implements AiProvider {
|
|
|
194
196
|
(Array.isArray(schema.type) && schema.type.includes("object"))
|
|
195
197
|
) {
|
|
196
198
|
if (!schema.properties || Object.keys(schema.properties).length === 0) {
|
|
197
|
-
|
|
199
|
+
logger.warn(
|
|
198
200
|
"[GeminiProvider] Gemini requires OBJECT types to have non-empty properties. Converting empty object to STRING."
|
|
199
201
|
);
|
|
200
202
|
geminiSchema.type = Type.STRING;
|
|
@@ -246,7 +248,7 @@ export class GeminiProvider implements AiProvider {
|
|
|
246
248
|
case "object":
|
|
247
249
|
return Type.OBJECT;
|
|
248
250
|
default:
|
|
249
|
-
|
|
251
|
+
logger.warn(
|
|
250
252
|
`[GeminiProvider] Unknown type "${type}", defaulting to STRING`
|
|
251
253
|
);
|
|
252
254
|
return Type.STRING;
|
|
@@ -282,7 +284,7 @@ export class GeminiProvider implements AiProvider {
|
|
|
282
284
|
return await this.generateWithModel(this.primaryModel, input);
|
|
283
285
|
} catch (primaryError: unknown) {
|
|
284
286
|
const primaryErrMsg = getErrorMessage(primaryError);
|
|
285
|
-
|
|
287
|
+
logger.warn(
|
|
286
288
|
`[GEMINI] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
|
|
287
289
|
);
|
|
288
290
|
|
|
@@ -290,25 +292,24 @@ export class GeminiProvider implements AiProvider {
|
|
|
290
292
|
throw primaryError;
|
|
291
293
|
}
|
|
292
294
|
|
|
293
|
-
|
|
295
|
+
logger.debug(`[GEMINI] Trying backup models`);
|
|
294
296
|
|
|
295
297
|
let lastBackupError: unknown = primaryError;
|
|
296
298
|
|
|
297
299
|
for (let i = 0; i < this.backupModels.length; i++) {
|
|
298
300
|
const backupModel = this.backupModels[i];
|
|
299
|
-
|
|
300
|
-
`[GEMINI] Trying backup model ${i + 1}/${
|
|
301
|
-
this.backupModels.length
|
|
301
|
+
logger.debug(
|
|
302
|
+
`[GEMINI] Trying backup model ${i + 1}/${this.backupModels.length
|
|
302
303
|
}: ${backupModel}`
|
|
303
304
|
);
|
|
304
305
|
|
|
305
306
|
try {
|
|
306
307
|
const result = await this.generateWithModel(backupModel, input);
|
|
307
|
-
|
|
308
|
+
logger.debug(`[GEMINI] Backup model ${backupModel} succeeded`);
|
|
308
309
|
return result as GenerateMessageOutput<TStructured>;
|
|
309
310
|
} catch (backupError: unknown) {
|
|
310
311
|
const backupErrMsg = getErrorMessage(backupError);
|
|
311
|
-
|
|
312
|
+
logger.warn(
|
|
312
313
|
`[GEMINI] Backup model ${backupModel} failed: ${backupErrMsg}`
|
|
313
314
|
);
|
|
314
315
|
lastBackupError = backupError;
|
|
@@ -317,7 +318,7 @@ export class GeminiProvider implements AiProvider {
|
|
|
317
318
|
!shouldUseBackupModel(backupError) &&
|
|
318
319
|
i < this.backupModels.length - 1
|
|
319
320
|
) {
|
|
320
|
-
|
|
321
|
+
logger.debug(
|
|
321
322
|
`[GEMINI] Backup model error doesn't qualify for further attempts`
|
|
322
323
|
);
|
|
323
324
|
break;
|
|
@@ -326,7 +327,7 @@ export class GeminiProvider implements AiProvider {
|
|
|
326
327
|
}
|
|
327
328
|
|
|
328
329
|
const lastBackupErrMsg = getErrorMessage(lastBackupError);
|
|
329
|
-
|
|
330
|
+
logger.error(
|
|
330
331
|
`[GEMINI] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
|
|
331
332
|
);
|
|
332
333
|
throw lastBackupError;
|
|
@@ -344,40 +345,49 @@ export class GeminiProvider implements AiProvider {
|
|
|
344
345
|
// Schema-required: configure response schema
|
|
345
346
|
const configOverride: Partial<GenerateContentConfig> = { ...this.config };
|
|
346
347
|
|
|
347
|
-
//
|
|
348
|
-
|
|
348
|
+
// Handle tools and JSON schema - Gemini doesn't support both simultaneously
|
|
349
|
+
const hasTools = input.tools && input.tools.length > 0;
|
|
350
|
+
const hasJsonSchema = input.parameters?.jsonSchema;
|
|
351
|
+
|
|
352
|
+
if (hasTools && hasJsonSchema) {
|
|
353
|
+
logger.debug(`[GeminiProvider] Both tools and JSON schema provided. Prioritizing function calling - JSON schema will be ignored.`);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (hasTools) {
|
|
357
|
+
const toolNames = input.tools?.map((tool) => tool.name || tool.id) || [];
|
|
358
|
+
logger.debug(`[GeminiProvider] Configuring ${toolNames.length} tools for model ${model}:`, toolNames);
|
|
349
359
|
configOverride.tools = [
|
|
350
360
|
{
|
|
351
|
-
functionDeclarations: input.tools
|
|
361
|
+
functionDeclarations: input.tools?.map((tool) => ({
|
|
352
362
|
name: tool.name || tool.id,
|
|
353
363
|
description: tool.description || "",
|
|
354
364
|
parameters: tool.parameters as FunctionDeclaration["parameters"], // JSON schema
|
|
355
365
|
})),
|
|
356
366
|
},
|
|
357
367
|
];
|
|
358
|
-
}
|
|
359
368
|
|
|
360
|
-
if (
|
|
369
|
+
} else if (hasJsonSchema) {
|
|
370
|
+
// Only set JSON schema if no tools are present
|
|
361
371
|
configOverride.responseMimeType = "application/json";
|
|
362
372
|
// Adapt common schema format to Gemini's specific requirements
|
|
363
|
-
configOverride.responseSchema = this.adaptSchemaForGemini(
|
|
373
|
+
configOverride.responseSchema = input.parameters ? this.adaptSchemaForGemini(
|
|
364
374
|
input.parameters.jsonSchema
|
|
365
|
-
);
|
|
375
|
+
) : {};
|
|
366
376
|
}
|
|
367
377
|
|
|
368
|
-
|
|
369
|
-
|
|
378
|
+
let response: GenerateContentResponse;
|
|
379
|
+
try {
|
|
380
|
+
response = await this.genAI.models.generateContent({
|
|
370
381
|
model,
|
|
371
382
|
contents: input.prompt,
|
|
372
383
|
config: configOverride,
|
|
373
384
|
});
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
throw new Error("No response from Gemini");
|
|
385
|
+
} catch (error: unknown) {
|
|
386
|
+
logger.error(`[GeminiProvider] API call failed:`, error);
|
|
387
|
+
throw error;
|
|
378
388
|
}
|
|
379
389
|
|
|
380
|
-
// Extract tool calls from response
|
|
390
|
+
// Extract tool calls from response first
|
|
381
391
|
const toolCalls: Array<{
|
|
382
392
|
toolName: string;
|
|
383
393
|
arguments: Record<string, unknown>;
|
|
@@ -395,21 +405,68 @@ export class GeminiProvider implements AiProvider {
|
|
|
395
405
|
}
|
|
396
406
|
}
|
|
397
407
|
|
|
408
|
+
// Debug logging for response structure
|
|
409
|
+
if (!response.text && toolCalls.length === 0) {
|
|
410
|
+
logger.debug(`[GeminiProvider] Debug - Response structure:`, {
|
|
411
|
+
hasText: !!response.text,
|
|
412
|
+
candidatesCount: response.candidates?.length || 0,
|
|
413
|
+
firstCandidateContent: response.candidates?.[0]?.content,
|
|
414
|
+
firstCandidateParts: response.candidates?.[0]?.content?.parts?.length || 0,
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
// Try to get text from response, handling function calls properly
|
|
418
|
+
let message = "";
|
|
419
|
+
try {
|
|
420
|
+
message = response.text || "";
|
|
421
|
+
} catch (textError) {
|
|
422
|
+
// Sometimes response.text throws when there are function calls
|
|
423
|
+
logger.debug(`[GeminiProvider] Could not get response.text (likely due to function calls):`, textError);
|
|
424
|
+
|
|
425
|
+
// Try to extract text parts manually
|
|
426
|
+
if (response.candidates && response.candidates[0]?.content?.parts) {
|
|
427
|
+
const textParts = response.candidates[0].content.parts
|
|
428
|
+
.filter(part => part.text)
|
|
429
|
+
.map(part => part.text)
|
|
430
|
+
.join('');
|
|
431
|
+
message = textParts;
|
|
432
|
+
logger.debug(`[GeminiProvider] Extracted text from parts:`, message);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Only throw error if we have no text AND no function calls
|
|
437
|
+
if (!message && toolCalls.length === 0) {
|
|
438
|
+
logger.error(`[GeminiProvider] Empty response - no text or function calls`);
|
|
439
|
+
logger.error(`[GeminiProvider] Response candidates:`, response.candidates);
|
|
440
|
+
throw new Error("No response from Gemini");
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
// Log when we have function calls but no text (this is normal)
|
|
444
|
+
if (toolCalls.length > 0 && !message) {
|
|
445
|
+
logger.debug(`[GeminiProvider] Function calls detected without text message:`, toolCalls.map(tc => tc.toolName));
|
|
446
|
+
} else if (toolCalls.length > 0 && message) {
|
|
447
|
+
logger.debug(`[GeminiProvider] Response has both text and function calls:`, {
|
|
448
|
+
messageLength: message.length,
|
|
449
|
+
toolCalls: toolCalls.map(tc => tc.toolName),
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
|
|
398
455
|
// Parse JSON response if schema was provided
|
|
399
456
|
let structured: AgentStructuredResponse | undefined;
|
|
400
457
|
if (input.parameters?.jsonSchema) {
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
458
|
+
const parsed = tryParseJSONResponse(message);
|
|
459
|
+
if (parsed) {
|
|
460
|
+
structured = parsed as AgentStructuredResponse;
|
|
461
|
+
} else {
|
|
462
|
+
logger.warn("[GeminiProvider] Failed to parse JSON response, treating as plain text");
|
|
406
463
|
}
|
|
407
464
|
}
|
|
408
465
|
|
|
409
466
|
// If tools were used, include them in structured response
|
|
410
467
|
if (toolCalls.length > 0) {
|
|
411
468
|
structured = {
|
|
412
|
-
message,
|
|
469
|
+
message: structured?.message || message,
|
|
413
470
|
toolCalls,
|
|
414
471
|
...structured,
|
|
415
472
|
} as AgentStructuredResponse;
|
|
@@ -446,7 +503,7 @@ export class GeminiProvider implements AiProvider {
|
|
|
446
503
|
yield* this.generateStreamWithModel(this.primaryModel, input);
|
|
447
504
|
} catch (primaryError: unknown) {
|
|
448
505
|
const primaryErrMsg = getErrorMessage(primaryError);
|
|
449
|
-
|
|
506
|
+
logger.warn(
|
|
450
507
|
`[GEMINI] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
|
|
451
508
|
);
|
|
452
509
|
|
|
@@ -454,25 +511,24 @@ export class GeminiProvider implements AiProvider {
|
|
|
454
511
|
throw primaryError;
|
|
455
512
|
}
|
|
456
513
|
|
|
457
|
-
|
|
514
|
+
logger.debug(`[GEMINI] Trying backup models for streaming`);
|
|
458
515
|
|
|
459
516
|
let lastBackupError: unknown = primaryError;
|
|
460
517
|
|
|
461
518
|
for (let i = 0; i < this.backupModels.length; i++) {
|
|
462
519
|
const backupModel = this.backupModels[i];
|
|
463
|
-
|
|
464
|
-
`[GEMINI] Trying backup model ${i + 1}/${
|
|
465
|
-
this.backupModels.length
|
|
520
|
+
logger.debug(
|
|
521
|
+
`[GEMINI] Trying backup model ${i + 1}/${this.backupModels.length
|
|
466
522
|
}: ${backupModel}`
|
|
467
523
|
);
|
|
468
524
|
|
|
469
525
|
try {
|
|
470
526
|
yield* this.generateStreamWithModel(backupModel, input);
|
|
471
|
-
|
|
527
|
+
logger.debug(`[GEMINI] Backup model ${backupModel} succeeded`);
|
|
472
528
|
return;
|
|
473
529
|
} catch (backupError: unknown) {
|
|
474
530
|
const backupErrMsg = getErrorMessage(backupError);
|
|
475
|
-
|
|
531
|
+
logger.warn(
|
|
476
532
|
`[GEMINI] Backup model ${backupModel} failed: ${backupErrMsg}`
|
|
477
533
|
);
|
|
478
534
|
lastBackupError = backupError;
|
|
@@ -481,7 +537,7 @@ export class GeminiProvider implements AiProvider {
|
|
|
481
537
|
!shouldUseBackupModel(backupError) &&
|
|
482
538
|
i < this.backupModels.length - 1
|
|
483
539
|
) {
|
|
484
|
-
|
|
540
|
+
logger.debug(
|
|
485
541
|
`[GEMINI] Backup model error doesn't qualify for further attempts`
|
|
486
542
|
);
|
|
487
543
|
break;
|
|
@@ -490,7 +546,7 @@ export class GeminiProvider implements AiProvider {
|
|
|
490
546
|
}
|
|
491
547
|
|
|
492
548
|
const lastBackupErrMsg = getErrorMessage(lastBackupError);
|
|
493
|
-
|
|
549
|
+
logger.error(
|
|
494
550
|
`[GEMINI] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
|
|
495
551
|
);
|
|
496
552
|
throw lastBackupError;
|
|
@@ -507,32 +563,47 @@ export class GeminiProvider implements AiProvider {
|
|
|
507
563
|
// Streaming: request JSON if schema provided
|
|
508
564
|
const configOverride: Partial<GenerateContentConfig> = { ...this.config };
|
|
509
565
|
|
|
510
|
-
//
|
|
511
|
-
|
|
566
|
+
// Handle tools and JSON schema - Gemini doesn't support both simultaneously
|
|
567
|
+
const hasTools = input.tools && input.tools.length > 0;
|
|
568
|
+
const hasJsonSchema = input.parameters?.jsonSchema;
|
|
569
|
+
|
|
570
|
+
if (hasTools && hasJsonSchema) {
|
|
571
|
+
logger.debug(`[GeminiProvider] Both tools and JSON schema provided. Prioritizing function calling - JSON schema will be ignored.`);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
if (hasTools) {
|
|
575
|
+
const toolNames = input.tools?.map((tool) => tool.name || tool.id) || [];
|
|
576
|
+
logger.debug(`[GeminiProvider] Configuring ${toolNames.length} tools for streaming:`, toolNames);
|
|
512
577
|
configOverride.tools = [
|
|
513
578
|
{
|
|
514
|
-
functionDeclarations: input.tools
|
|
579
|
+
functionDeclarations: input.tools?.map((tool) => ({
|
|
515
580
|
name: tool.name || tool.id,
|
|
516
581
|
description: tool.description || "",
|
|
517
582
|
parameters: tool.parameters as FunctionDeclaration["parameters"],
|
|
518
583
|
})),
|
|
519
584
|
},
|
|
520
585
|
];
|
|
521
|
-
}
|
|
522
586
|
|
|
523
|
-
if (
|
|
587
|
+
} else if (hasJsonSchema) {
|
|
588
|
+
// Only set JSON schema if no tools are present
|
|
524
589
|
configOverride.responseMimeType = "application/json";
|
|
525
590
|
// Adapt common schema format to Gemini's specific requirements
|
|
526
|
-
configOverride.responseSchema = this.adaptSchemaForGemini(
|
|
591
|
+
configOverride.responseSchema = input.parameters ? this.adaptSchemaForGemini(
|
|
527
592
|
input.parameters.jsonSchema
|
|
528
|
-
);
|
|
593
|
+
) : {};
|
|
529
594
|
}
|
|
530
595
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
596
|
+
let stream;
|
|
597
|
+
try {
|
|
598
|
+
stream = await this.genAI.models.generateContentStream({
|
|
599
|
+
model,
|
|
600
|
+
contents: input.prompt,
|
|
601
|
+
config: configOverride,
|
|
602
|
+
});
|
|
603
|
+
} catch (error: unknown) {
|
|
604
|
+
logger.error(`[GeminiProvider] Streaming API call failed:`, error);
|
|
605
|
+
throw error;
|
|
606
|
+
}
|
|
536
607
|
|
|
537
608
|
let accumulated = "";
|
|
538
609
|
let promptTokenCount = 0;
|
|
@@ -578,20 +649,18 @@ export class GeminiProvider implements AiProvider {
|
|
|
578
649
|
// Parse JSON response if schema was provided
|
|
579
650
|
let structured: AgentStructuredResponse | undefined;
|
|
580
651
|
if (input.parameters?.jsonSchema && accumulated) {
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
error
|
|
587
|
-
);
|
|
652
|
+
const parsed = tryParseJSONResponse(accumulated);
|
|
653
|
+
if (parsed) {
|
|
654
|
+
structured = parsed as AgentStructuredResponse;
|
|
655
|
+
} else {
|
|
656
|
+
logger.warn("[GeminiProvider] Failed to parse JSON response in stream, treating as plain text");
|
|
588
657
|
}
|
|
589
658
|
}
|
|
590
659
|
|
|
591
660
|
// If tools were used, include them in structured response
|
|
592
661
|
if (toolCalls.length > 0) {
|
|
593
662
|
structured = {
|
|
594
|
-
message: accumulated,
|
|
663
|
+
message: structured?.message || accumulated,
|
|
595
664
|
toolCalls,
|
|
596
665
|
...structured,
|
|
597
666
|
} as AgentStructuredResponse;
|