@falai/agent 0.9.2 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +281 -42
  2. package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
  3. package/dist/adapters/MemoryAdapter.js.map +1 -0
  4. package/dist/adapters/MongoAdapter.d.ts.map +1 -0
  5. package/dist/adapters/MongoAdapter.js.map +1 -0
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
  7. package/dist/adapters/OpenSearchAdapter.js.map +1 -0
  8. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  9. package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
  10. package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
  11. package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
  12. package/dist/adapters/PrismaAdapter.js.map +1 -0
  13. package/dist/adapters/RedisAdapter.d.ts.map +1 -0
  14. package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
  15. package/dist/adapters/RedisAdapter.js.map +1 -0
  16. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
  17. package/dist/adapters/SQLiteAdapter.js.map +1 -0
  18. package/dist/adapters/index.d.ts.map +1 -0
  19. package/dist/adapters/index.js.map +1 -0
  20. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
  21. package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
  22. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
  23. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
  24. package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
  25. package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
  26. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
  27. package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
  28. package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
  29. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/adapters/index.js.map +1 -0
  31. package/dist/cjs/constants/index.js.map +1 -0
  32. package/dist/cjs/{src/core → core}/Agent.d.ts +16 -1
  33. package/dist/cjs/core/Agent.d.ts.map +1 -0
  34. package/dist/cjs/{src/core → core}/Agent.js +63 -2
  35. package/dist/cjs/core/Agent.js.map +1 -0
  36. package/dist/cjs/core/BatchExecutor.d.ts +353 -0
  37. package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
  38. package/dist/cjs/core/BatchExecutor.js +850 -0
  39. package/dist/cjs/core/BatchExecutor.js.map +1 -0
  40. package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
  41. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
  42. package/dist/cjs/core/BatchPromptBuilder.js +217 -0
  43. package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
  44. package/dist/cjs/core/Events.js.map +1 -0
  45. package/dist/cjs/core/PersistenceManager.js.map +1 -0
  46. package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
  47. package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
  49. package/dist/cjs/core/PromptComposer.js.map +1 -0
  50. package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
  51. package/dist/cjs/core/ResponseEngine.js +211 -0
  52. package/dist/cjs/core/ResponseEngine.js.map +1 -0
  53. package/dist/{src → cjs}/core/ResponseModal.d.ts +45 -0
  54. package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
  55. package/dist/cjs/{src/core → core}/ResponseModal.js +752 -74
  56. package/dist/cjs/core/ResponseModal.js.map +1 -0
  57. package/dist/{src → cjs}/core/ResponsePipeline.d.ts +2 -2
  58. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
  59. package/dist/cjs/{src/core → core}/ResponsePipeline.js +13 -6
  60. package/dist/cjs/core/ResponsePipeline.js.map +1 -0
  61. package/dist/{src → cjs}/core/Route.d.ts +34 -5
  62. package/dist/cjs/core/Route.d.ts.map +1 -0
  63. package/dist/cjs/{src/core → core}/Route.js +196 -19
  64. package/dist/cjs/core/Route.js.map +1 -0
  65. package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +30 -5
  66. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
  67. package/dist/cjs/{src/core → core}/RoutingEngine.js +330 -80
  68. package/dist/cjs/core/RoutingEngine.js.map +1 -0
  69. package/dist/cjs/core/SessionManager.js.map +1 -0
  70. package/dist/{src → cjs}/core/Step.d.ts +31 -10
  71. package/dist/cjs/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/{src/core → core}/Step.js +105 -10
  73. package/dist/cjs/core/Step.js.map +1 -0
  74. package/dist/cjs/core/ToolManager.js.map +1 -0
  75. package/dist/{src → cjs}/index.d.ts +4 -1
  76. package/dist/cjs/index.d.ts.map +1 -0
  77. package/dist/cjs/{src/index.js → index.js} +12 -1
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
  80. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  81. package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
  82. package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
  83. package/dist/cjs/providers/GeminiProvider.js.map +1 -0
  84. package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
  85. package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
  86. package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
  87. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
  88. package/dist/cjs/providers/index.js.map +1 -0
  89. package/dist/cjs/{src/types → types}/agent.d.ts +15 -3
  90. package/dist/cjs/types/agent.d.ts.map +1 -0
  91. package/dist/cjs/types/agent.js.map +1 -0
  92. package/dist/{src → cjs}/types/ai.js.map +1 -1
  93. package/dist/cjs/types/history.js.map +1 -0
  94. package/dist/cjs/{src/types → types}/index.d.ts +2 -1
  95. package/dist/{src → cjs}/types/index.d.ts.map +1 -1
  96. package/dist/cjs/{src/types → types}/index.js +6 -1
  97. package/dist/cjs/types/index.js.map +1 -0
  98. package/dist/cjs/types/persistence.js.map +1 -0
  99. package/dist/cjs/{src/types → types}/route.d.ts +111 -12
  100. package/dist/cjs/types/route.d.ts.map +1 -0
  101. package/dist/cjs/{src/types → types}/route.js.map +1 -1
  102. package/dist/cjs/types/session.js.map +1 -0
  103. package/dist/cjs/types/template.d.ts +88 -0
  104. package/dist/cjs/types/template.d.ts.map +1 -0
  105. package/dist/cjs/types/tool.js.map +1 -0
  106. package/dist/cjs/utils/clone.js.map +1 -0
  107. package/dist/cjs/utils/condition.d.ts +38 -0
  108. package/dist/cjs/utils/condition.d.ts.map +1 -0
  109. package/dist/cjs/utils/condition.js +168 -0
  110. package/dist/cjs/utils/condition.js.map +1 -0
  111. package/dist/cjs/utils/event.js.map +1 -0
  112. package/dist/cjs/utils/history.js.map +1 -0
  113. package/dist/cjs/utils/id.js.map +1 -0
  114. package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
  115. package/dist/cjs/utils/index.d.ts.map +1 -0
  116. package/dist/cjs/{src/utils → utils}/index.js +12 -1
  117. package/dist/cjs/utils/index.js.map +1 -0
  118. package/dist/cjs/utils/json.d.ts +16 -0
  119. package/dist/cjs/utils/json.d.ts.map +1 -0
  120. package/dist/cjs/utils/json.js +47 -0
  121. package/dist/cjs/utils/json.js.map +1 -0
  122. package/dist/cjs/utils/logger.js.map +1 -0
  123. package/dist/{src → cjs}/utils/retry.d.ts +0 -3
  124. package/dist/cjs/utils/retry.d.ts.map +1 -0
  125. package/dist/cjs/{src/utils → utils}/retry.js +8 -7
  126. package/dist/cjs/utils/retry.js.map +1 -0
  127. package/dist/cjs/utils/session.js.map +1 -0
  128. package/dist/{src → cjs}/utils/template.d.ts +48 -0
  129. package/dist/cjs/utils/template.d.ts.map +1 -0
  130. package/dist/cjs/{src/utils → utils}/template.js +100 -0
  131. package/dist/cjs/utils/template.js.map +1 -0
  132. package/dist/constants/index.d.ts.map +1 -0
  133. package/dist/constants/index.js.map +1 -0
  134. package/dist/{src/core → core}/Agent.d.ts +16 -1
  135. package/dist/core/Agent.d.ts.map +1 -0
  136. package/dist/{src/core → core}/Agent.js +64 -3
  137. package/dist/core/Agent.js.map +1 -0
  138. package/dist/core/BatchExecutor.d.ts +353 -0
  139. package/dist/core/BatchExecutor.d.ts.map +1 -0
  140. package/dist/core/BatchExecutor.js +845 -0
  141. package/dist/core/BatchExecutor.js.map +1 -0
  142. package/dist/core/BatchPromptBuilder.d.ts +86 -0
  143. package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
  144. package/dist/core/BatchPromptBuilder.js +213 -0
  145. package/dist/core/BatchPromptBuilder.js.map +1 -0
  146. package/dist/core/Events.d.ts.map +1 -0
  147. package/dist/core/Events.js.map +1 -0
  148. package/dist/core/PersistenceManager.d.ts.map +1 -0
  149. package/dist/core/PersistenceManager.js.map +1 -0
  150. package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
  151. package/dist/core/PromptComposer.d.ts.map +1 -0
  152. package/dist/{src/core → core}/PromptComposer.js +45 -8
  153. package/dist/core/PromptComposer.js.map +1 -0
  154. package/dist/core/ResponseEngine.d.ts.map +1 -0
  155. package/dist/core/ResponseEngine.js +207 -0
  156. package/dist/core/ResponseEngine.js.map +1 -0
  157. package/dist/{cjs/src/core → core}/ResponseModal.d.ts +45 -0
  158. package/dist/core/ResponseModal.d.ts.map +1 -0
  159. package/dist/{src/core → core}/ResponseModal.js +752 -74
  160. package/dist/core/ResponseModal.js.map +1 -0
  161. package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +2 -2
  162. package/dist/core/ResponsePipeline.d.ts.map +1 -0
  163. package/dist/{src/core → core}/ResponsePipeline.js +13 -6
  164. package/dist/core/ResponsePipeline.js.map +1 -0
  165. package/dist/{cjs/src/core → core}/Route.d.ts +34 -5
  166. package/dist/core/Route.d.ts.map +1 -0
  167. package/dist/{src/core → core}/Route.js +195 -18
  168. package/dist/core/Route.js.map +1 -0
  169. package/dist/{src/core → core}/RoutingEngine.d.ts +30 -5
  170. package/dist/core/RoutingEngine.d.ts.map +1 -0
  171. package/dist/{src/core → core}/RoutingEngine.js +310 -60
  172. package/dist/core/RoutingEngine.js.map +1 -0
  173. package/dist/core/SessionManager.d.ts.map +1 -0
  174. package/dist/core/SessionManager.js.map +1 -0
  175. package/dist/{cjs/src/core → core}/Step.d.ts +31 -10
  176. package/dist/core/Step.d.ts.map +1 -0
  177. package/dist/{src/core → core}/Step.js +104 -9
  178. package/dist/core/Step.js.map +1 -0
  179. package/dist/core/ToolManager.d.ts.map +1 -0
  180. package/dist/core/ToolManager.js.map +1 -0
  181. package/dist/{cjs/src/index.d.ts → index.d.ts} +4 -1
  182. package/dist/index.d.ts.map +1 -0
  183. package/dist/{src/index.js → index.js} +3 -0
  184. package/dist/index.js.map +1 -0
  185. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  186. package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
  187. package/dist/providers/AnthropicProvider.js.map +1 -0
  188. package/dist/providers/GeminiProvider.d.ts.map +1 -0
  189. package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
  190. package/dist/providers/GeminiProvider.js.map +1 -0
  191. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  192. package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
  193. package/dist/providers/OpenAIProvider.js.map +1 -0
  194. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  195. package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
  196. package/dist/providers/OpenRouterProvider.js.map +1 -0
  197. package/dist/providers/index.d.ts.map +1 -0
  198. package/dist/providers/index.js.map +1 -0
  199. package/dist/{src/types → types}/agent.d.ts +15 -3
  200. package/dist/types/agent.d.ts.map +1 -0
  201. package/dist/types/agent.js.map +1 -0
  202. package/dist/types/ai.d.ts.map +1 -0
  203. package/dist/types/ai.js.map +1 -0
  204. package/dist/types/history.d.ts.map +1 -0
  205. package/dist/types/history.js.map +1 -0
  206. package/dist/{src/types → types}/index.d.ts +2 -1
  207. package/dist/types/index.d.ts.map +1 -0
  208. package/dist/{src/types → types}/index.js +1 -0
  209. package/dist/types/index.js.map +1 -0
  210. package/dist/types/persistence.d.ts.map +1 -0
  211. package/dist/types/persistence.js.map +1 -0
  212. package/dist/{src/types → types}/route.d.ts +111 -12
  213. package/dist/types/route.d.ts.map +1 -0
  214. package/dist/{src/types → types}/route.js.map +1 -1
  215. package/dist/types/routing.d.ts.map +1 -0
  216. package/dist/{cjs/src/types → types}/routing.js.map +1 -1
  217. package/dist/types/schema.d.ts.map +1 -0
  218. package/dist/{cjs/src/types → types}/schema.js.map +1 -1
  219. package/dist/types/session.d.ts.map +1 -0
  220. package/dist/{src/types → types}/session.js.map +1 -1
  221. package/dist/types/template.d.ts +88 -0
  222. package/dist/types/template.d.ts.map +1 -0
  223. package/dist/{cjs/src/types → types}/template.js.map +1 -1
  224. package/dist/types/tool.d.ts.map +1 -0
  225. package/dist/types/tool.js.map +1 -0
  226. package/dist/utils/clone.d.ts.map +1 -0
  227. package/dist/utils/clone.js.map +1 -0
  228. package/dist/utils/condition.d.ts +38 -0
  229. package/dist/utils/condition.d.ts.map +1 -0
  230. package/dist/utils/condition.js +161 -0
  231. package/dist/utils/condition.js.map +1 -0
  232. package/dist/utils/event.d.ts.map +1 -0
  233. package/dist/utils/event.js.map +1 -0
  234. package/dist/utils/history.d.ts.map +1 -0
  235. package/dist/utils/history.js.map +1 -0
  236. package/dist/utils/id.d.ts.map +1 -0
  237. package/dist/utils/id.js.map +1 -0
  238. package/dist/{src/utils → utils}/index.d.ts +3 -1
  239. package/dist/utils/index.d.ts.map +1 -0
  240. package/dist/{src/utils → utils}/index.js +5 -1
  241. package/dist/utils/index.js.map +1 -0
  242. package/dist/utils/json.d.ts +16 -0
  243. package/dist/utils/json.d.ts.map +1 -0
  244. package/dist/utils/json.js +43 -0
  245. package/dist/utils/json.js.map +1 -0
  246. package/dist/utils/logger.d.ts.map +1 -0
  247. package/dist/utils/logger.js.map +1 -0
  248. package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
  249. package/dist/utils/retry.d.ts.map +1 -0
  250. package/dist/{src/utils → utils}/retry.js +5 -4
  251. package/dist/utils/retry.js.map +1 -0
  252. package/dist/utils/session.d.ts.map +1 -0
  253. package/dist/utils/session.js.map +1 -0
  254. package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
  255. package/dist/utils/template.d.ts.map +1 -0
  256. package/dist/{src/utils → utils}/template.js +98 -0
  257. package/dist/utils/template.js.map +1 -0
  258. package/docs/README.md +1 -0
  259. package/docs/api/README.md +237 -12
  260. package/docs/api/overview.md +206 -3
  261. package/docs/architecture/data-extraction-flow.md +363 -0
  262. package/docs/architecture/multi-step-execution.md +243 -0
  263. package/docs/core/agent/README.md +156 -5
  264. package/docs/core/agent/rules-and-prohibitions.md +113 -0
  265. package/docs/core/agent/session-management.md +1 -1
  266. package/docs/core/ai-integration/prompt-composition.md +135 -0
  267. package/docs/core/ai-integration/response-processing.md +146 -0
  268. package/docs/core/conversation-flows/data-collection.md +143 -0
  269. package/docs/core/conversation-flows/routes.md +2 -2
  270. package/docs/core/conversation-flows/step-transitions.md +132 -0
  271. package/docs/core/conversation-flows/steps.md +112 -0
  272. package/docs/core/error-handling.md +193 -0
  273. package/docs/core/routing/intelligent-routing.md +118 -0
  274. package/docs/guides/getting-started/README.md +284 -3
  275. package/docs/guides/migration/README.md +27 -0
  276. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  277. package/docs/guides/migration/multi-step-execution.md +373 -0
  278. package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
  279. package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
  280. package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
  281. package/examples/advanced-patterns/streaming-responses.ts +2 -2
  282. package/examples/ai-providers/anthropic-integration.ts +4 -4
  283. package/examples/ai-providers/openai-integration.ts +1 -1
  284. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  285. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  286. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  287. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  288. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  289. package/examples/conversation-flows/completion-transitions.ts +48 -7
  290. package/examples/core-concepts/basic-agent.ts +54 -33
  291. package/examples/core-concepts/schema-driven-extraction.ts +33 -9
  292. package/examples/core-concepts/session-management.ts +51 -16
  293. package/examples/integrations/database-integration.ts +6 -6
  294. package/examples/integrations/healthcare-integration.ts +10 -10
  295. package/examples/integrations/search-integration.ts +8 -8
  296. package/examples/integrations/server-session-management.ts +8 -8
  297. package/examples/persistence/database-persistence.ts +15 -15
  298. package/examples/persistence/memory-sessions.ts +3 -3
  299. package/examples/persistence/redis-persistence.ts +7 -9
  300. package/examples/tools/data-enrichment-tools.ts +4 -4
  301. package/package.json +6 -4
  302. package/src/adapters/PrismaAdapter.ts +3 -2
  303. package/src/adapters/RedisAdapter.ts +3 -3
  304. package/src/core/Agent.ts +78 -2
  305. package/src/core/BatchExecutor.ts +1166 -0
  306. package/src/core/BatchPromptBuilder.ts +293 -0
  307. package/src/core/PromptComposer.ts +53 -16
  308. package/src/core/ResponseEngine.ts +168 -29
  309. package/src/core/ResponseModal.ts +954 -74
  310. package/src/core/ResponsePipeline.ts +17 -9
  311. package/src/core/Route.ts +223 -22
  312. package/src/core/RoutingEngine.ts +426 -83
  313. package/src/core/Step.ts +144 -16
  314. package/src/index.ts +19 -0
  315. package/src/providers/AnthropicProvider.ts +17 -17
  316. package/src/providers/GeminiProvider.ts +129 -60
  317. package/src/providers/OpenAIProvider.ts +18 -18
  318. package/src/providers/OpenRouterProvider.ts +18 -18
  319. package/src/types/agent.ts +15 -3
  320. package/src/types/index.ts +12 -1
  321. package/src/types/route.ts +131 -12
  322. package/src/types/template.ts +70 -2
  323. package/src/utils/condition.ts +190 -0
  324. package/src/utils/index.ts +12 -0
  325. package/src/utils/json.ts +46 -0
  326. package/src/utils/retry.ts +5 -4
  327. package/src/utils/template.ts +109 -0
  328. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
  329. package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
  330. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
  331. package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
  332. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
  333. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
  334. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  335. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
  336. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
  337. package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
  338. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
  339. package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
  340. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
  341. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
  342. package/dist/cjs/src/adapters/index.d.ts.map +0 -1
  343. package/dist/cjs/src/adapters/index.js.map +0 -1
  344. package/dist/cjs/src/constants/index.d.ts.map +0 -1
  345. package/dist/cjs/src/constants/index.js.map +0 -1
  346. package/dist/cjs/src/core/Agent.d.ts.map +0 -1
  347. package/dist/cjs/src/core/Agent.js.map +0 -1
  348. package/dist/cjs/src/core/Events.d.ts.map +0 -1
  349. package/dist/cjs/src/core/Events.js.map +0 -1
  350. package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
  351. package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
  352. package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
  353. package/dist/cjs/src/core/PromptComposer.js.map +0 -1
  354. package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
  355. package/dist/cjs/src/core/ResponseEngine.js +0 -84
  356. package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
  357. package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
  358. package/dist/cjs/src/core/ResponseModal.js.map +0 -1
  359. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
  360. package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
  361. package/dist/cjs/src/core/Route.d.ts.map +0 -1
  362. package/dist/cjs/src/core/Route.js.map +0 -1
  363. package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
  364. package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
  365. package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
  366. package/dist/cjs/src/core/SessionManager.js.map +0 -1
  367. package/dist/cjs/src/core/Step.d.ts.map +0 -1
  368. package/dist/cjs/src/core/Step.js.map +0 -1
  369. package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
  370. package/dist/cjs/src/core/ToolManager.js.map +0 -1
  371. package/dist/cjs/src/index.d.ts.map +0 -1
  372. package/dist/cjs/src/index.js.map +0 -1
  373. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
  374. package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
  375. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
  376. package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
  377. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
  378. package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
  379. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
  380. package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
  381. package/dist/cjs/src/providers/index.d.ts.map +0 -1
  382. package/dist/cjs/src/providers/index.js.map +0 -1
  383. package/dist/cjs/src/types/agent.d.ts.map +0 -1
  384. package/dist/cjs/src/types/agent.js.map +0 -1
  385. package/dist/cjs/src/types/ai.d.ts.map +0 -1
  386. package/dist/cjs/src/types/ai.js.map +0 -1
  387. package/dist/cjs/src/types/history.d.ts.map +0 -1
  388. package/dist/cjs/src/types/history.js.map +0 -1
  389. package/dist/cjs/src/types/index.d.ts.map +0 -1
  390. package/dist/cjs/src/types/index.js.map +0 -1
  391. package/dist/cjs/src/types/persistence.d.ts.map +0 -1
  392. package/dist/cjs/src/types/persistence.js.map +0 -1
  393. package/dist/cjs/src/types/route.d.ts.map +0 -1
  394. package/dist/cjs/src/types/routing.d.ts.map +0 -1
  395. package/dist/cjs/src/types/schema.d.ts.map +0 -1
  396. package/dist/cjs/src/types/session.d.ts.map +0 -1
  397. package/dist/cjs/src/types/session.js.map +0 -1
  398. package/dist/cjs/src/types/template.d.ts +0 -30
  399. package/dist/cjs/src/types/template.d.ts.map +0 -1
  400. package/dist/cjs/src/types/tool.d.ts.map +0 -1
  401. package/dist/cjs/src/types/tool.js.map +0 -1
  402. package/dist/cjs/src/utils/clone.d.ts.map +0 -1
  403. package/dist/cjs/src/utils/clone.js.map +0 -1
  404. package/dist/cjs/src/utils/event.d.ts.map +0 -1
  405. package/dist/cjs/src/utils/event.js.map +0 -1
  406. package/dist/cjs/src/utils/history.d.ts.map +0 -1
  407. package/dist/cjs/src/utils/history.js.map +0 -1
  408. package/dist/cjs/src/utils/id.d.ts.map +0 -1
  409. package/dist/cjs/src/utils/id.js.map +0 -1
  410. package/dist/cjs/src/utils/index.d.ts.map +0 -1
  411. package/dist/cjs/src/utils/index.js.map +0 -1
  412. package/dist/cjs/src/utils/logger.d.ts.map +0 -1
  413. package/dist/cjs/src/utils/logger.js.map +0 -1
  414. package/dist/cjs/src/utils/retry.d.ts.map +0 -1
  415. package/dist/cjs/src/utils/retry.js.map +0 -1
  416. package/dist/cjs/src/utils/session.d.ts.map +0 -1
  417. package/dist/cjs/src/utils/session.js.map +0 -1
  418. package/dist/cjs/src/utils/template.d.ts.map +0 -1
  419. package/dist/cjs/src/utils/template.js.map +0 -1
  420. package/dist/src/adapters/MemoryAdapter.js.map +0 -1
  421. package/dist/src/adapters/MongoAdapter.js.map +0 -1
  422. package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
  423. package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
  424. package/dist/src/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/src/adapters/RedisAdapter.js.map +0 -1
  426. package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
  427. package/dist/src/adapters/index.js.map +0 -1
  428. package/dist/src/constants/index.js.map +0 -1
  429. package/dist/src/core/Agent.d.ts.map +0 -1
  430. package/dist/src/core/Agent.js.map +0 -1
  431. package/dist/src/core/Events.js.map +0 -1
  432. package/dist/src/core/PersistenceManager.js.map +0 -1
  433. package/dist/src/core/PromptComposer.d.ts.map +0 -1
  434. package/dist/src/core/PromptComposer.js.map +0 -1
  435. package/dist/src/core/ResponseEngine.js +0 -80
  436. package/dist/src/core/ResponseEngine.js.map +0 -1
  437. package/dist/src/core/ResponseModal.d.ts.map +0 -1
  438. package/dist/src/core/ResponseModal.js.map +0 -1
  439. package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
  440. package/dist/src/core/ResponsePipeline.js.map +0 -1
  441. package/dist/src/core/Route.d.ts.map +0 -1
  442. package/dist/src/core/Route.js.map +0 -1
  443. package/dist/src/core/RoutingEngine.d.ts.map +0 -1
  444. package/dist/src/core/RoutingEngine.js.map +0 -1
  445. package/dist/src/core/SessionManager.js.map +0 -1
  446. package/dist/src/core/Step.d.ts.map +0 -1
  447. package/dist/src/core/Step.js.map +0 -1
  448. package/dist/src/core/ToolManager.js.map +0 -1
  449. package/dist/src/index.d.ts.map +0 -1
  450. package/dist/src/index.js.map +0 -1
  451. package/dist/src/providers/AnthropicProvider.js.map +0 -1
  452. package/dist/src/providers/GeminiProvider.js.map +0 -1
  453. package/dist/src/providers/OpenAIProvider.js.map +0 -1
  454. package/dist/src/providers/OpenRouterProvider.js.map +0 -1
  455. package/dist/src/providers/index.js.map +0 -1
  456. package/dist/src/types/agent.d.ts.map +0 -1
  457. package/dist/src/types/agent.js.map +0 -1
  458. package/dist/src/types/history.js.map +0 -1
  459. package/dist/src/types/index.js.map +0 -1
  460. package/dist/src/types/persistence.js.map +0 -1
  461. package/dist/src/types/route.d.ts.map +0 -1
  462. package/dist/src/types/template.d.ts +0 -30
  463. package/dist/src/types/template.d.ts.map +0 -1
  464. package/dist/src/types/tool.js.map +0 -1
  465. package/dist/src/utils/clone.js.map +0 -1
  466. package/dist/src/utils/event.js.map +0 -1
  467. package/dist/src/utils/history.js.map +0 -1
  468. package/dist/src/utils/id.js.map +0 -1
  469. package/dist/src/utils/index.d.ts.map +0 -1
  470. package/dist/src/utils/index.js.map +0 -1
  471. package/dist/src/utils/logger.js.map +0 -1
  472. package/dist/src/utils/retry.d.ts.map +0 -1
  473. package/dist/src/utils/retry.js.map +0 -1
  474. package/dist/src/utils/session.js.map +0 -1
  475. package/dist/src/utils/template.d.ts.map +0 -1
  476. package/dist/src/utils/template.js.map +0 -1
  477. /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
  478. /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  479. /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
  480. /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
  481. /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
  482. /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  483. /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
  484. /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  485. /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
  486. /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
  487. /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
  488. /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  489. /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
  490. /package/dist/{src/adapters → adapters}/index.js +0 -0
  491. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
  492. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
  493. /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  494. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
  495. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
  496. /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
  497. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
  498. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
  499. /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  500. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
  501. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
  502. /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  503. /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
  504. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
  505. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
  506. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
  507. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
  508. /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  509. /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
  510. /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
  511. /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
  512. /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
  513. /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
  514. /package/dist/cjs/{src/constants → constants}/index.js +0 -0
  515. /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
  516. /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
  517. /package/dist/cjs/{src/core → core}/Events.js +0 -0
  518. /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
  519. /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
  520. /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
  521. /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
  522. /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
  523. /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
  524. /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
  525. /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
  526. /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
  527. /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
  528. /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  529. /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
  530. /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  531. /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  532. /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
  533. /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  534. /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
  535. /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
  536. /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
  537. /package/dist/cjs/{src/providers → providers}/index.js +0 -0
  538. /package/dist/cjs/{src/types → types}/agent.js +0 -0
  539. /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
  540. /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
  541. /package/dist/cjs/{src/types → types}/ai.js +0 -0
  542. /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
  543. /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
  544. /package/dist/cjs/{src/types → types}/history.js +0 -0
  545. /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
  546. /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
  547. /package/dist/cjs/{src/types → types}/persistence.js +0 -0
  548. /package/dist/cjs/{src/types → types}/route.js +0 -0
  549. /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
  550. /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
  551. /package/dist/cjs/{src/types → types}/routing.js +0 -0
  552. /package/dist/{src → cjs}/types/routing.js.map +0 -0
  553. /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
  554. /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
  555. /package/dist/cjs/{src/types → types}/schema.js +0 -0
  556. /package/dist/{src → cjs}/types/schema.js.map +0 -0
  557. /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
  558. /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
  559. /package/dist/cjs/{src/types → types}/session.js +0 -0
  560. /package/dist/cjs/{src/types → types}/template.js +0 -0
  561. /package/dist/{src → cjs}/types/template.js.map +0 -0
  562. /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
  563. /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
  564. /package/dist/cjs/{src/types → types}/tool.js +0 -0
  565. /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
  566. /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
  567. /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
  568. /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
  569. /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
  570. /package/dist/cjs/{src/utils → utils}/event.js +0 -0
  571. /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
  572. /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
  573. /package/dist/cjs/{src/utils → utils}/history.js +0 -0
  574. /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
  575. /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
  576. /package/dist/cjs/{src/utils → utils}/id.js +0 -0
  577. /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
  578. /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
  579. /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
  580. /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
  581. /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
  582. /package/dist/cjs/{src/utils → utils}/session.js +0 -0
  583. /package/dist/{src/constants → constants}/index.d.ts +0 -0
  584. /package/dist/{src/constants → constants}/index.js +0 -0
  585. /package/dist/{src/core → core}/Events.d.ts +0 -0
  586. /package/dist/{src/core → core}/Events.js +0 -0
  587. /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
  588. /package/dist/{src/core → core}/PersistenceManager.js +0 -0
  589. /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
  590. /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
  591. /package/dist/{src/core → core}/SessionManager.js +0 -0
  592. /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
  593. /package/dist/{src/core → core}/ToolManager.js +0 -0
  594. /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  595. /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  596. /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  597. /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  598. /package/dist/{src/providers → providers}/index.d.ts +0 -0
  599. /package/dist/{src/providers → providers}/index.js +0 -0
  600. /package/dist/{src/types → types}/agent.js +0 -0
  601. /package/dist/{src/types → types}/ai.d.ts +0 -0
  602. /package/dist/{src/types → types}/ai.js +0 -0
  603. /package/dist/{src/types → types}/history.d.ts +0 -0
  604. /package/dist/{src/types → types}/history.js +0 -0
  605. /package/dist/{src/types → types}/persistence.d.ts +0 -0
  606. /package/dist/{src/types → types}/persistence.js +0 -0
  607. /package/dist/{src/types → types}/route.js +0 -0
  608. /package/dist/{src/types → types}/routing.d.ts +0 -0
  609. /package/dist/{src/types → types}/routing.js +0 -0
  610. /package/dist/{src/types → types}/schema.d.ts +0 -0
  611. /package/dist/{src/types → types}/schema.js +0 -0
  612. /package/dist/{src/types → types}/session.d.ts +0 -0
  613. /package/dist/{src/types → types}/session.js +0 -0
  614. /package/dist/{src/types → types}/template.js +0 -0
  615. /package/dist/{src/types → types}/tool.d.ts +0 -0
  616. /package/dist/{src/types → types}/tool.js +0 -0
  617. /package/dist/{src/utils → utils}/clone.d.ts +0 -0
  618. /package/dist/{src/utils → utils}/clone.js +0 -0
  619. /package/dist/{src/utils → utils}/event.d.ts +0 -0
  620. /package/dist/{src/utils → utils}/event.js +0 -0
  621. /package/dist/{src/utils → utils}/history.d.ts +0 -0
  622. /package/dist/{src/utils → utils}/history.js +0 -0
  623. /package/dist/{src/utils → utils}/id.d.ts +0 -0
  624. /package/dist/{src/utils → utils}/id.js +0 -0
  625. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  626. /package/dist/{src/utils → utils}/logger.js +0 -0
  627. /package/dist/{src/utils → utils}/session.d.ts +0 -0
  628. /package/dist/{src/utils → utils}/session.js +0 -0
@@ -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
- console.warn(
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
- console.warn(
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
- console.warn(
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
- console.log(`[GEMINI] Trying backup models`);
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
- console.log(
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
- console.log(`[GEMINI] Backup model ${backupModel} succeeded`);
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
- console.warn(
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
- console.log(
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
- console.error(
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
- // Add tools if provided
348
- if (input.tools && input.tools.length > 0) {
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.map((tool) => ({
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 (input.parameters?.jsonSchema) {
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
- const response: GenerateContentResponse =
369
- await this.genAI.models.generateContent({
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
- const message = response.text;
376
- if (!message) {
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
- try {
402
- structured = JSON.parse(message) as AgentStructuredResponse;
403
- } catch (error) {
404
- console.warn("[GEMINI] Failed to parse JSON response:", error);
405
- // Fall back to treating the message as plain text
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
- console.warn(
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
- console.log(`[GEMINI] Trying backup models for streaming`);
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
- console.log(
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
- console.log(`[GEMINI] Backup model ${backupModel} succeeded`);
527
+ logger.debug(`[GEMINI] Backup model ${backupModel} succeeded`);
472
528
  return;
473
529
  } catch (backupError: unknown) {
474
530
  const backupErrMsg = getErrorMessage(backupError);
475
- console.warn(
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
- console.log(
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
- console.error(
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
- // Add tools if provided
511
- if (input.tools && input.tools.length > 0) {
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.map((tool) => ({
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 (input.parameters?.jsonSchema) {
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
- const stream = await this.genAI.models.generateContentStream({
532
- model,
533
- contents: input.prompt,
534
- config: configOverride,
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
- try {
582
- structured = JSON.parse(accumulated) as AgentStructuredResponse;
583
- } catch (error) {
584
- console.warn(
585
- "[GEMINI] Failed to parse JSON response in stream:",
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;
@@ -13,7 +13,7 @@ import type {
13
13
  AgentStructuredResponse,
14
14
  StructuredSchema,
15
15
  } from "../types";
16
- import { withTimeoutAndRetry } from "../utils/retry";
16
+ import { withTimeoutAndRetry, logger } from "../utils";
17
17
  import { FunctionParameters } from "openai/resources/shared.mjs";
18
18
 
19
19
  const DEFAULT_RETRY_CONFIG = {
@@ -207,7 +207,7 @@ export class OpenAIProvider implements AiProvider {
207
207
  );
208
208
  } catch (primaryError: unknown) {
209
209
  const primaryErrMsg = getErrorMessage(primaryError);
210
- console.warn(
210
+ logger.warn(
211
211
  `[OPENAI] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
212
212
  );
213
213
 
@@ -215,13 +215,13 @@ export class OpenAIProvider implements AiProvider {
215
215
  throw primaryError;
216
216
  }
217
217
 
218
- console.log(`[OPENAI] Trying backup models`);
218
+ logger.debug(`[OPENAI] Trying backup models`);
219
219
 
220
220
  let lastBackupError: unknown = primaryError;
221
221
 
222
222
  for (let i = 0; i < this.backupModels.length; i++) {
223
223
  const backupModel = this.backupModels[i];
224
- console.log(
224
+ logger.debug(
225
225
  `[OPENAI] Trying backup model ${i + 1}/${
226
226
  this.backupModels.length
227
227
  }: ${backupModel}`
@@ -229,11 +229,11 @@ export class OpenAIProvider implements AiProvider {
229
229
 
230
230
  try {
231
231
  const result = await this.generateWithModel(backupModel, input);
232
- console.log(`[OPENAI] Backup model ${backupModel} succeeded`);
232
+ logger.debug(`[OPENAI] Backup model ${backupModel} succeeded`);
233
233
  return result as GenerateMessageOutput<TStructured>;
234
234
  } catch (backupError: unknown) {
235
235
  const backupErrMsg = getErrorMessage(backupError);
236
- console.warn(
236
+ logger.warn(
237
237
  `[OPENAI] Backup model ${backupModel} failed: ${backupErrMsg}`
238
238
  );
239
239
  lastBackupError = backupError;
@@ -242,7 +242,7 @@ export class OpenAIProvider implements AiProvider {
242
242
  !shouldUseBackupModel(backupError) &&
243
243
  i < this.backupModels.length - 1
244
244
  ) {
245
- console.log(
245
+ logger.debug(
246
246
  `[OPENAI] Backup model error doesn't qualify for further attempts`
247
247
  );
248
248
  break;
@@ -251,7 +251,7 @@ export class OpenAIProvider implements AiProvider {
251
251
  }
252
252
 
253
253
  const lastBackupErrMsg = getErrorMessage(lastBackupError);
254
- console.error(
254
+ logger.error(
255
255
  `[OPENAI] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
256
256
  );
257
257
  throw lastBackupError;
@@ -355,7 +355,7 @@ export class OpenAIProvider implements AiProvider {
355
355
  toolCall.function.arguments
356
356
  ) as Record<string, unknown>;
357
357
  } catch (error) {
358
- console.warn(
358
+ logger.warn(
359
359
  `[OPENAI] Failed to parse tool call arguments: ${getErrorMessage(
360
360
  error
361
361
  )}`
@@ -408,7 +408,7 @@ export class OpenAIProvider implements AiProvider {
408
408
  );
409
409
  } catch (primaryError: unknown) {
410
410
  const primaryErrMsg = getErrorMessage(primaryError);
411
- console.warn(
411
+ logger.warn(
412
412
  `[OPENAI] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
413
413
  );
414
414
 
@@ -416,13 +416,13 @@ export class OpenAIProvider implements AiProvider {
416
416
  throw primaryError;
417
417
  }
418
418
 
419
- console.log(`[OPENAI] Trying backup models for streaming`);
419
+ logger.debug(`[OPENAI] Trying backup models for streaming`);
420
420
 
421
421
  let lastBackupError: unknown = primaryError;
422
422
 
423
423
  for (let i = 0; i < this.backupModels.length; i++) {
424
424
  const backupModel = this.backupModels[i];
425
- console.log(
425
+ logger.debug(
426
426
  `[OPENAI] Trying backup model ${i + 1}/${
427
427
  this.backupModels.length
428
428
  }: ${backupModel}`
@@ -433,11 +433,11 @@ export class OpenAIProvider implements AiProvider {
433
433
  backupModel,
434
434
  input
435
435
  );
436
- console.log(`[OPENAI] Backup model ${backupModel} succeeded`);
436
+ logger.debug(`[OPENAI] Backup model ${backupModel} succeeded`);
437
437
  return;
438
438
  } catch (backupError: unknown) {
439
439
  const backupErrMsg = getErrorMessage(backupError);
440
- console.warn(
440
+ logger.warn(
441
441
  `[OPENAI] Backup model ${backupModel} failed: ${backupErrMsg}`
442
442
  );
443
443
  lastBackupError = backupError;
@@ -446,7 +446,7 @@ export class OpenAIProvider implements AiProvider {
446
446
  !shouldUseBackupModel(backupError) &&
447
447
  i < this.backupModels.length - 1
448
448
  ) {
449
- console.log(
449
+ logger.debug(
450
450
  `[OPENAI] Backup model error doesn't qualify for further attempts`
451
451
  );
452
452
  break;
@@ -455,7 +455,7 @@ export class OpenAIProvider implements AiProvider {
455
455
  }
456
456
 
457
457
  const lastBackupErrMsg = getErrorMessage(lastBackupError);
458
- console.error(
458
+ logger.error(
459
459
  `[OPENAI] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
460
460
  );
461
461
  throw lastBackupError;
@@ -535,7 +535,7 @@ export class OpenAIProvider implements AiProvider {
535
535
  >)
536
536
  : {};
537
537
  } catch (error) {
538
- console.warn(
538
+ logger.warn(
539
539
  `[OPENAI] Failed to parse tool call arguments in stream: ${getErrorMessage(
540
540
  error
541
541
  )}`
@@ -577,7 +577,7 @@ export class OpenAIProvider implements AiProvider {
577
577
  try {
578
578
  structured = JSON.parse(accumulated) as TStructured;
579
579
  } catch (error) {
580
- console.warn(
580
+ logger.warn(
581
581
  "[OPENAI] Failed to parse JSON response in stream:",
582
582
  error
583
583
  );
@@ -15,7 +15,7 @@ import type {
15
15
  GenerateMessageStreamChunk,
16
16
  StructuredSchema,
17
17
  } from "../types";
18
- import { withTimeoutAndRetry } from "../utils/retry";
18
+ import { withTimeoutAndRetry, logger } from "../utils";
19
19
 
20
20
  const DEFAULT_RETRY_CONFIG = {
21
21
  timeout: 60000,
@@ -214,7 +214,7 @@ export class OpenRouterProvider implements AiProvider {
214
214
  return await this.generateWithModel(this.primaryModel, input);
215
215
  } catch (primaryError: unknown) {
216
216
  const primaryErrMsg = getErrorMessage(primaryError);
217
- console.warn(
217
+ logger.warn(
218
218
  `[OPENROUTER] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
219
219
  );
220
220
 
@@ -222,13 +222,13 @@ export class OpenRouterProvider implements AiProvider {
222
222
  throw primaryError;
223
223
  }
224
224
 
225
- console.log(`[OPENROUTER] Trying backup models`);
225
+ logger.debug(`[OPENROUTER] Trying backup models`);
226
226
 
227
227
  let lastBackupError: unknown = primaryError;
228
228
 
229
229
  for (let i = 0; i < this.backupModels.length; i++) {
230
230
  const backupModel = this.backupModels[i];
231
- console.log(
231
+ logger.debug(
232
232
  `[OPENROUTER] Trying backup model ${i + 1}/${
233
233
  this.backupModels.length
234
234
  }: ${backupModel}`
@@ -236,11 +236,11 @@ export class OpenRouterProvider implements AiProvider {
236
236
 
237
237
  try {
238
238
  const result = await this.generateWithModel(backupModel, input);
239
- console.log(`[OPENROUTER] Backup model ${backupModel} succeeded`);
239
+ logger.debug(`[OPENROUTER] Backup model ${backupModel} succeeded`);
240
240
  return result as GenerateMessageOutput<TStructured>;
241
241
  } catch (backupError: unknown) {
242
242
  const backupErrMsg = getErrorMessage(backupError);
243
- console.warn(
243
+ logger.warn(
244
244
  `[OPENROUTER] Backup model ${backupModel} failed: ${backupErrMsg}`
245
245
  );
246
246
  lastBackupError = backupError;
@@ -249,7 +249,7 @@ export class OpenRouterProvider implements AiProvider {
249
249
  !shouldUseBackupModel(backupError) &&
250
250
  i < this.backupModels.length - 1
251
251
  ) {
252
- console.log(
252
+ logger.debug(
253
253
  `[OPENROUTER] Backup model error doesn't qualify for further attempts`
254
254
  );
255
255
  break;
@@ -258,7 +258,7 @@ export class OpenRouterProvider implements AiProvider {
258
258
  }
259
259
 
260
260
  const lastBackupErrMsg = getErrorMessage(lastBackupError);
261
- console.error(
261
+ logger.error(
262
262
  `[OPENROUTER] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
263
263
  );
264
264
  throw lastBackupError;
@@ -364,7 +364,7 @@ export class OpenRouterProvider implements AiProvider {
364
364
  toolCall.function.arguments
365
365
  ) as Record<string, unknown>;
366
366
  } catch (error) {
367
- console.warn(
367
+ logger.warn(
368
368
  `[OPENROUTER] Failed to parse tool call arguments: ${getErrorMessage(
369
369
  error
370
370
  )}`
@@ -413,7 +413,7 @@ export class OpenRouterProvider implements AiProvider {
413
413
  yield* this.generateStreamWithModel(this.primaryModel, input);
414
414
  } catch (primaryError: unknown) {
415
415
  const primaryErrMsg = getErrorMessage(primaryError);
416
- console.warn(
416
+ logger.warn(
417
417
  `[OPENROUTER] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`
418
418
  );
419
419
 
@@ -421,13 +421,13 @@ export class OpenRouterProvider implements AiProvider {
421
421
  throw primaryError;
422
422
  }
423
423
 
424
- console.log(`[OPENROUTER] Trying backup models for streaming`);
424
+ logger.debug(`[OPENROUTER] Trying backup models for streaming`);
425
425
 
426
426
  let lastBackupError: unknown = primaryError;
427
427
 
428
428
  for (let i = 0; i < this.backupModels.length; i++) {
429
429
  const backupModel = this.backupModels[i];
430
- console.log(
430
+ logger.debug(
431
431
  `[OPENROUTER] Trying backup model ${i + 1}/${
432
432
  this.backupModels.length
433
433
  }: ${backupModel}`
@@ -435,11 +435,11 @@ export class OpenRouterProvider implements AiProvider {
435
435
 
436
436
  try {
437
437
  yield* this.generateStreamWithModel(backupModel, input);
438
- console.log(`[OPENROUTER] Backup model ${backupModel} succeeded`);
438
+ logger.debug(`[OPENROUTER] Backup model ${backupModel} succeeded`);
439
439
  return;
440
440
  } catch (backupError: unknown) {
441
441
  const backupErrMsg = getErrorMessage(backupError);
442
- console.warn(
442
+ logger.warn(
443
443
  `[OPENROUTER] Backup model ${backupModel} failed: ${backupErrMsg}`
444
444
  );
445
445
  lastBackupError = backupError;
@@ -448,7 +448,7 @@ export class OpenRouterProvider implements AiProvider {
448
448
  !shouldUseBackupModel(backupError) &&
449
449
  i < this.backupModels.length - 1
450
450
  ) {
451
- console.log(
451
+ logger.debug(
452
452
  `[OPENROUTER] Backup model error doesn't qualify for further attempts`
453
453
  );
454
454
  break;
@@ -457,7 +457,7 @@ export class OpenRouterProvider implements AiProvider {
457
457
  }
458
458
 
459
459
  const lastBackupErrMsg = getErrorMessage(lastBackupError);
460
- console.error(
460
+ logger.error(
461
461
  `[OPENROUTER] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`
462
462
  );
463
463
  throw lastBackupError;
@@ -537,7 +537,7 @@ export class OpenRouterProvider implements AiProvider {
537
537
  >)
538
538
  : {};
539
539
  } catch (error) {
540
- console.warn(
540
+ logger.warn(
541
541
  `[OPENROUTER] Failed to parse tool call arguments in stream: ${getErrorMessage(
542
542
  error
543
543
  )}`
@@ -579,7 +579,7 @@ export class OpenRouterProvider implements AiProvider {
579
579
  try {
580
580
  structured = JSON.parse(accumulated) as TStructured;
581
581
  } catch (error) {
582
- console.warn(
582
+ logger.warn(
583
583
  "[OPENROUTER] Failed to parse JSON response in stream:",
584
584
  error
585
585
  );