@falai/agent 0.8.1 → 0.9.0-alpha-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (652) hide show
  1. package/README.md +306 -133
  2. package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
  3. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
  4. package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  5. package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
  6. package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
  7. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
  8. package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
  9. package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
  10. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  11. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  12. package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  13. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
  14. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  15. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  16. package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  17. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
  18. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  19. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
  20. package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  21. package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
  22. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  23. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
  24. package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
  25. package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
  26. package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
  27. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  28. package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  29. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/src/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/src/adapters/index.js.map +1 -0
  32. package/dist/cjs/src/constants/index.d.ts.map +1 -0
  33. package/dist/cjs/src/constants/index.js.map +1 -0
  34. package/dist/{core → cjs/src/core}/Agent.d.ts +65 -67
  35. package/dist/cjs/src/core/Agent.d.ts.map +1 -0
  36. package/dist/cjs/src/core/Agent.js +1433 -0
  37. package/dist/cjs/src/core/Agent.js.map +1 -0
  38. package/dist/cjs/src/core/Events.d.ts +26 -0
  39. package/dist/cjs/src/core/Events.d.ts.map +1 -0
  40. package/dist/cjs/src/core/Events.js +144 -0
  41. package/dist/cjs/src/core/Events.js.map +1 -0
  42. package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
  43. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
  44. package/dist/cjs/{core → src/core}/PersistenceManager.js +50 -20
  45. package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
  46. package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
  47. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/src/core/PromptComposer.js +157 -0
  49. package/dist/cjs/src/core/PromptComposer.js.map +1 -0
  50. package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
  51. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
  52. package/dist/cjs/src/core/ResponseEngine.js +84 -0
  53. package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
  54. package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
  55. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
  56. package/dist/cjs/src/core/ResponsePipeline.js +446 -0
  57. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
  58. package/dist/cjs/src/core/Route.d.ts +126 -0
  59. package/dist/cjs/src/core/Route.d.ts.map +1 -0
  60. package/dist/cjs/{core → src/core}/Route.js +116 -20
  61. package/dist/cjs/src/core/Route.js.map +1 -0
  62. package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
  63. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
  64. package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
  65. package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
  66. package/dist/cjs/src/core/SessionManager.d.ts +76 -0
  67. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
  68. package/dist/cjs/src/core/SessionManager.js +197 -0
  69. package/dist/cjs/src/core/SessionManager.js.map +1 -0
  70. package/dist/cjs/src/core/Step.d.ts +96 -0
  71. package/dist/cjs/src/core/Step.d.ts.map +1 -0
  72. package/dist/cjs/src/core/Step.js +206 -0
  73. package/dist/cjs/src/core/Step.js.map +1 -0
  74. package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
  75. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
  76. package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
  77. package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
  78. package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
  79. package/dist/cjs/src/index.d.ts.map +1 -0
  80. package/dist/cjs/{index.js → src/index.js} +21 -19
  81. package/dist/cjs/src/index.js.map +1 -0
  82. package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  83. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
  84. package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
  85. package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
  86. package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
  87. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
  88. package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
  89. package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  91. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
  92. package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
  93. package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
  94. package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
  95. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
  96. package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
  97. package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
  98. package/dist/cjs/src/providers/index.d.ts.map +1 -0
  99. package/dist/cjs/src/providers/index.js.map +1 -0
  100. package/dist/cjs/{types → src/types}/agent.d.ts +52 -33
  101. package/dist/cjs/src/types/agent.d.ts.map +1 -0
  102. package/dist/cjs/src/types/agent.js.map +1 -0
  103. package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
  104. package/dist/cjs/src/types/ai.d.ts.map +1 -0
  105. package/dist/cjs/src/types/ai.js.map +1 -0
  106. package/dist/{types → cjs/src/types}/history.d.ts +76 -18
  107. package/dist/cjs/src/types/history.d.ts.map +1 -0
  108. package/dist/cjs/src/types/history.js +33 -0
  109. package/dist/cjs/src/types/history.js.map +1 -0
  110. package/dist/cjs/src/types/index.d.ts +20 -0
  111. package/dist/cjs/src/types/index.d.ts.map +1 -0
  112. package/dist/cjs/src/types/index.js +30 -0
  113. package/dist/cjs/src/types/index.js.map +1 -0
  114. package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
  115. package/dist/cjs/src/types/persistence.d.ts.map +1 -0
  116. package/dist/cjs/src/types/persistence.js.map +1 -0
  117. package/dist/cjs/{types → src/types}/route.d.ts +85 -31
  118. package/dist/cjs/src/types/route.d.ts.map +1 -0
  119. package/dist/cjs/{types → src/types}/route.js.map +1 -1
  120. package/dist/cjs/src/types/routing.d.ts.map +1 -0
  121. package/dist/{types → cjs/src/types}/routing.js.map +1 -1
  122. package/dist/cjs/src/types/schema.d.ts.map +1 -0
  123. package/dist/{types → cjs/src/types}/schema.js.map +1 -1
  124. package/dist/cjs/src/types/session.d.ts +70 -0
  125. package/dist/cjs/src/types/session.d.ts.map +1 -0
  126. package/dist/cjs/src/types/session.js +6 -0
  127. package/dist/cjs/src/types/session.js.map +1 -0
  128. package/dist/cjs/src/types/template.d.ts +30 -0
  129. package/dist/cjs/src/types/template.d.ts.map +1 -0
  130. package/dist/cjs/src/types/template.js +3 -0
  131. package/dist/cjs/src/types/template.js.map +1 -0
  132. package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
  133. package/dist/cjs/src/types/tool.d.ts.map +1 -0
  134. package/dist/cjs/{types → src/types}/tool.js.map +1 -1
  135. package/dist/cjs/src/utils/clone.d.ts +8 -0
  136. package/dist/cjs/src/utils/clone.d.ts.map +1 -0
  137. package/dist/cjs/src/utils/clone.js +36 -0
  138. package/dist/cjs/src/utils/clone.js.map +1 -0
  139. package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
  140. package/dist/cjs/src/utils/event.d.ts.map +1 -0
  141. package/dist/cjs/{utils → src/utils}/event.js +2 -2
  142. package/dist/cjs/src/utils/event.js.map +1 -0
  143. package/dist/cjs/src/utils/history.d.ts +31 -0
  144. package/dist/cjs/src/utils/history.d.ts.map +1 -0
  145. package/dist/cjs/src/utils/history.js +128 -0
  146. package/dist/cjs/src/utils/history.js.map +1 -0
  147. package/dist/cjs/src/utils/id.d.ts.map +1 -0
  148. package/dist/cjs/src/utils/id.js.map +1 -0
  149. package/dist/cjs/src/utils/index.d.ts +13 -0
  150. package/dist/cjs/src/utils/index.d.ts.map +1 -0
  151. package/dist/cjs/src/utils/index.js +49 -0
  152. package/dist/cjs/src/utils/index.js.map +1 -0
  153. package/dist/cjs/src/utils/logger.d.ts.map +1 -0
  154. package/dist/cjs/src/utils/logger.js.map +1 -0
  155. package/dist/cjs/src/utils/retry.d.ts.map +1 -0
  156. package/dist/cjs/src/utils/retry.js.map +1 -0
  157. package/dist/cjs/src/utils/session.d.ts +51 -0
  158. package/dist/cjs/src/utils/session.d.ts.map +1 -0
  159. package/dist/cjs/{types → src/utils}/session.js +34 -11
  160. package/dist/cjs/src/utils/session.js.map +1 -0
  161. package/dist/cjs/src/utils/template.d.ts +107 -0
  162. package/dist/cjs/src/utils/template.d.ts.map +1 -0
  163. package/dist/cjs/src/utils/template.js +283 -0
  164. package/dist/cjs/src/utils/template.js.map +1 -0
  165. package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
  166. package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
  167. package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
  168. package/dist/src/adapters/MemoryAdapter.js.map +1 -0
  169. package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
  170. package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
  171. package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
  172. package/dist/src/adapters/MongoAdapter.js.map +1 -0
  173. package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
  174. package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
  175. package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
  176. package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
  177. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
  178. package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  179. package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
  180. package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
  181. package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
  182. package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
  183. package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
  184. package/dist/src/adapters/PrismaAdapter.js.map +1 -0
  185. package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
  186. package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
  187. package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
  188. package/dist/src/adapters/RedisAdapter.js.map +1 -0
  189. package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
  190. package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
  191. package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
  192. package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
  193. package/dist/src/adapters/index.js.map +1 -0
  194. package/dist/src/constants/index.js.map +1 -0
  195. package/dist/{cjs → src}/core/Agent.d.ts +65 -67
  196. package/dist/src/core/Agent.d.ts.map +1 -0
  197. package/dist/src/core/Agent.js +1429 -0
  198. package/dist/src/core/Agent.js.map +1 -0
  199. package/dist/src/core/Events.d.ts +26 -0
  200. package/dist/src/core/Events.d.ts.map +1 -0
  201. package/dist/src/core/Events.js +137 -0
  202. package/dist/src/core/Events.js.map +1 -0
  203. package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
  204. package/dist/src/core/PersistenceManager.d.ts.map +1 -0
  205. package/dist/{core → src/core}/PersistenceManager.js +47 -17
  206. package/dist/src/core/PersistenceManager.js.map +1 -0
  207. package/dist/src/core/PromptComposer.d.ts +27 -0
  208. package/dist/src/core/PromptComposer.d.ts.map +1 -0
  209. package/dist/src/core/PromptComposer.js +153 -0
  210. package/dist/src/core/PromptComposer.js.map +1 -0
  211. package/dist/src/core/ResponseEngine.d.ts +31 -0
  212. package/dist/src/core/ResponseEngine.d.ts.map +1 -0
  213. package/dist/src/core/ResponseEngine.js +80 -0
  214. package/dist/src/core/ResponseEngine.js.map +1 -0
  215. package/dist/src/core/ResponsePipeline.d.ts +143 -0
  216. package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
  217. package/dist/src/core/ResponsePipeline.js +442 -0
  218. package/dist/src/core/ResponsePipeline.js.map +1 -0
  219. package/dist/src/core/Route.d.ts +126 -0
  220. package/dist/src/core/Route.d.ts.map +1 -0
  221. package/dist/{core → src/core}/Route.js +116 -20
  222. package/dist/src/core/Route.js.map +1 -0
  223. package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
  224. package/dist/src/core/RoutingEngine.d.ts.map +1 -0
  225. package/dist/{core → src/core}/RoutingEngine.js +98 -104
  226. package/dist/src/core/RoutingEngine.js.map +1 -0
  227. package/dist/src/core/SessionManager.d.ts +76 -0
  228. package/dist/src/core/SessionManager.d.ts.map +1 -0
  229. package/dist/src/core/SessionManager.js +193 -0
  230. package/dist/src/core/SessionManager.js.map +1 -0
  231. package/dist/src/core/Step.d.ts +96 -0
  232. package/dist/src/core/Step.d.ts.map +1 -0
  233. package/dist/src/core/Step.js +202 -0
  234. package/dist/src/core/Step.js.map +1 -0
  235. package/dist/src/core/ToolExecutor.d.ts +43 -0
  236. package/dist/src/core/ToolExecutor.d.ts.map +1 -0
  237. package/dist/src/core/ToolExecutor.js +70 -0
  238. package/dist/src/core/ToolExecutor.js.map +1 -0
  239. package/dist/{cjs → src}/index.d.ts +7 -15
  240. package/dist/src/index.d.ts.map +1 -0
  241. package/dist/{index.js → src/index.js} +6 -7
  242. package/dist/src/index.js.map +1 -0
  243. package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
  244. package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
  245. package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
  246. package/dist/src/providers/AnthropicProvider.js.map +1 -0
  247. package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
  248. package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
  249. package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
  250. package/dist/src/providers/GeminiProvider.js.map +1 -0
  251. package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
  252. package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
  253. package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
  254. package/dist/src/providers/OpenAIProvider.js.map +1 -0
  255. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
  256. package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
  257. package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
  258. package/dist/src/providers/OpenRouterProvider.js.map +1 -0
  259. package/dist/src/providers/index.js.map +1 -0
  260. package/dist/{types → src/types}/agent.d.ts +52 -33
  261. package/dist/src/types/agent.d.ts.map +1 -0
  262. package/dist/src/types/agent.js.map +1 -0
  263. package/dist/{types → src/types}/ai.d.ts +7 -0
  264. package/dist/src/types/ai.d.ts.map +1 -0
  265. package/dist/{cjs → src}/types/ai.js.map +1 -1
  266. package/dist/{cjs → src}/types/history.d.ts +76 -18
  267. package/dist/src/types/history.d.ts.map +1 -0
  268. package/dist/src/types/history.js +30 -0
  269. package/dist/src/types/history.js.map +1 -0
  270. package/dist/src/types/index.d.ts +20 -0
  271. package/dist/src/types/index.d.ts.map +1 -0
  272. package/dist/src/types/index.js +10 -0
  273. package/dist/src/types/index.js.map +1 -0
  274. package/dist/{cjs → src}/types/persistence.d.ts +39 -23
  275. package/dist/src/types/persistence.d.ts.map +1 -0
  276. package/dist/src/types/persistence.js.map +1 -0
  277. package/dist/{types → src/types}/route.d.ts +85 -31
  278. package/dist/src/types/route.d.ts.map +1 -0
  279. package/dist/{types → src/types}/route.js.map +1 -1
  280. package/dist/src/types/session.d.ts +70 -0
  281. package/dist/src/types/session.d.ts.map +1 -0
  282. package/dist/src/types/session.js +5 -0
  283. package/dist/src/types/session.js.map +1 -0
  284. package/dist/src/types/template.d.ts +30 -0
  285. package/dist/src/types/template.d.ts.map +1 -0
  286. package/dist/src/types/template.js +2 -0
  287. package/dist/src/types/template.js.map +1 -0
  288. package/dist/{types → src/types}/tool.d.ts +6 -8
  289. package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
  290. package/dist/{types → src/types}/tool.js.map +1 -1
  291. package/dist/src/utils/clone.d.ts +8 -0
  292. package/dist/src/utils/clone.d.ts.map +1 -0
  293. package/dist/src/utils/clone.js +33 -0
  294. package/dist/src/utils/clone.js.map +1 -0
  295. package/dist/{cjs → src}/utils/event.d.ts +1 -1
  296. package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
  297. package/dist/{utils → src/utils}/event.js +1 -1
  298. package/dist/src/utils/event.js.map +1 -0
  299. package/dist/src/utils/history.d.ts +31 -0
  300. package/dist/src/utils/history.d.ts.map +1 -0
  301. package/dist/src/utils/history.js +121 -0
  302. package/dist/src/utils/history.js.map +1 -0
  303. package/dist/src/utils/id.js.map +1 -0
  304. package/dist/src/utils/index.d.ts +13 -0
  305. package/dist/src/utils/index.d.ts.map +1 -0
  306. package/dist/src/utils/index.js +19 -0
  307. package/dist/src/utils/index.js.map +1 -0
  308. package/dist/src/utils/logger.js.map +1 -0
  309. package/dist/src/utils/retry.js.map +1 -0
  310. package/dist/src/utils/session.d.ts +51 -0
  311. package/dist/src/utils/session.d.ts.map +1 -0
  312. package/dist/{types → src/utils}/session.js +32 -11
  313. package/dist/src/utils/session.js.map +1 -0
  314. package/dist/src/utils/template.d.ts +107 -0
  315. package/dist/src/utils/template.d.ts.map +1 -0
  316. package/dist/src/utils/template.js +276 -0
  317. package/dist/src/utils/template.js.map +1 -0
  318. package/docs/README.md +174 -68
  319. package/docs/{API_REFERENCE.md → api/README.md} +890 -251
  320. package/docs/api/overview.md +798 -0
  321. package/docs/core/agent/README.md +642 -0
  322. package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +143 -94
  323. package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
  324. package/docs/core/ai-integration/prompt-composition.md +196 -0
  325. package/docs/core/ai-integration/providers.md +515 -0
  326. package/docs/core/ai-integration/response-processing.md +165 -0
  327. package/docs/core/conversation-flows/data-collection.md +545 -0
  328. package/docs/core/conversation-flows/route-dsl.md +479 -0
  329. package/docs/core/conversation-flows/routes.md +61 -0
  330. package/docs/core/conversation-flows/step-transitions.md +595 -0
  331. package/docs/core/conversation-flows/steps.md +130 -0
  332. package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
  333. package/docs/core/persistence/session-storage.md +644 -0
  334. package/docs/core/routing/intelligent-routing.md +339 -0
  335. package/docs/core/tools/tool-definition.md +346 -0
  336. package/docs/core/tools/tool-execution.md +815 -0
  337. package/docs/core/tools/tool-scoping.md +628 -0
  338. package/docs/guides/getting-started/README.md +384 -0
  339. package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
  340. package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
  341. package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
  342. package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
  343. package/examples/ai-providers/anthropic-integration.ts +377 -0
  344. package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
  345. package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +112 -105
  346. package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
  347. package/examples/core-concepts/schema-driven-extraction.ts +301 -0
  348. package/examples/core-concepts/session-management.ts +394 -0
  349. package/examples/integrations/database-integration.ts +615 -0
  350. package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
  351. package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
  352. package/examples/integrations/server-session-management.ts +299 -0
  353. package/examples/persistence/custom-adapter.ts +529 -0
  354. package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
  355. package/examples/persistence/memory-sessions.ts +506 -0
  356. package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
  357. package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
  358. package/examples/tools/basic-tools.ts +550 -0
  359. package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
  360. package/package.json +14 -10
  361. package/src/adapters/MemoryAdapter.ts +74 -46
  362. package/src/adapters/MongoAdapter.ts +33 -24
  363. package/src/adapters/OpenSearchAdapter.ts +41 -37
  364. package/src/adapters/PostgreSQLAdapter.ts +35 -24
  365. package/src/adapters/PrismaAdapter.ts +69 -27
  366. package/src/adapters/RedisAdapter.ts +38 -26
  367. package/src/adapters/SQLiteAdapter.ts +32 -22
  368. package/src/core/Agent.ts +1093 -478
  369. package/src/core/Events.ts +100 -112
  370. package/src/core/PersistenceManager.ts +77 -47
  371. package/src/core/PromptComposer.ts +158 -85
  372. package/src/core/ResponseEngine.ts +118 -38
  373. package/src/core/ResponsePipeline.ts +715 -0
  374. package/src/core/Route.ts +168 -51
  375. package/src/core/RoutingEngine.ts +178 -209
  376. package/src/core/SessionManager.ts +241 -0
  377. package/src/core/Step.ts +149 -67
  378. package/src/core/ToolExecutor.ts +37 -42
  379. package/src/index.ts +31 -37
  380. package/src/providers/AnthropicProvider.ts +71 -5
  381. package/src/providers/GeminiProvider.ts +83 -2
  382. package/src/providers/OpenAIProvider.ts +95 -3
  383. package/src/providers/OpenRouterProvider.ts +102 -2
  384. package/src/types/agent.ts +48 -36
  385. package/src/types/ai.ts +7 -0
  386. package/src/types/history.ts +91 -18
  387. package/src/types/index.ts +43 -7
  388. package/src/types/persistence.ts +46 -28
  389. package/src/types/route.ts +104 -45
  390. package/src/types/session.ts +19 -213
  391. package/src/types/template.ts +36 -0
  392. package/src/types/tool.ts +9 -11
  393. package/src/utils/clone.ts +36 -0
  394. package/src/utils/event.ts +1 -1
  395. package/src/utils/history.ts +143 -0
  396. package/src/utils/index.ts +53 -0
  397. package/src/utils/session.ts +229 -0
  398. package/src/utils/template.ts +335 -0
  399. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  400. package/dist/adapters/MemoryAdapter.js.map +0 -1
  401. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  402. package/dist/adapters/MongoAdapter.js.map +0 -1
  403. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  404. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  405. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  406. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  407. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  408. package/dist/adapters/PrismaAdapter.js.map +0 -1
  409. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  410. package/dist/adapters/RedisAdapter.js.map +0 -1
  411. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  412. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  413. package/dist/adapters/index.d.ts.map +0 -1
  414. package/dist/adapters/index.js.map +0 -1
  415. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  416. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  417. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  418. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  419. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  420. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  421. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  422. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  423. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  424. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  425. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  426. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  427. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  428. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  429. package/dist/cjs/adapters/index.js.map +0 -1
  430. package/dist/cjs/constants/index.js.map +0 -1
  431. package/dist/cjs/core/Agent.d.ts.map +0 -1
  432. package/dist/cjs/core/Agent.js +0 -966
  433. package/dist/cjs/core/Agent.js.map +0 -1
  434. package/dist/cjs/core/DomainRegistry.d.ts +0 -36
  435. package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
  436. package/dist/cjs/core/DomainRegistry.js +0 -72
  437. package/dist/cjs/core/DomainRegistry.js.map +0 -1
  438. package/dist/cjs/core/Events.d.ts +0 -41
  439. package/dist/cjs/core/Events.d.ts.map +0 -1
  440. package/dist/cjs/core/Events.js +0 -99
  441. package/dist/cjs/core/Events.js.map +0 -1
  442. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  443. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  444. package/dist/cjs/core/PromptComposer.d.ts +0 -24
  445. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  446. package/dist/cjs/core/PromptComposer.js +0 -127
  447. package/dist/cjs/core/PromptComposer.js.map +0 -1
  448. package/dist/cjs/core/ResponseEngine.d.ts +0 -14
  449. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  450. package/dist/cjs/core/ResponseEngine.js +0 -56
  451. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  452. package/dist/cjs/core/Route.d.ts +0 -90
  453. package/dist/cjs/core/Route.d.ts.map +0 -1
  454. package/dist/cjs/core/Route.js.map +0 -1
  455. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  456. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  457. package/dist/cjs/core/Step.d.ts +0 -72
  458. package/dist/cjs/core/Step.d.ts.map +0 -1
  459. package/dist/cjs/core/Step.js +0 -150
  460. package/dist/cjs/core/Step.js.map +0 -1
  461. package/dist/cjs/core/Tool.d.ts +0 -39
  462. package/dist/cjs/core/Tool.d.ts.map +0 -1
  463. package/dist/cjs/core/Tool.js +0 -34
  464. package/dist/cjs/core/Tool.js.map +0 -1
  465. package/dist/cjs/core/ToolExecutor.d.ts +0 -29
  466. package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
  467. package/dist/cjs/core/ToolExecutor.js.map +0 -1
  468. package/dist/cjs/core/Transition.d.ts +0 -32
  469. package/dist/cjs/core/Transition.d.ts.map +0 -1
  470. package/dist/cjs/core/Transition.js +0 -89
  471. package/dist/cjs/core/Transition.js.map +0 -1
  472. package/dist/cjs/index.d.ts.map +0 -1
  473. package/dist/cjs/index.js.map +0 -1
  474. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  475. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  476. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  477. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  478. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  479. package/dist/cjs/providers/index.js.map +0 -1
  480. package/dist/cjs/types/agent.d.ts.map +0 -1
  481. package/dist/cjs/types/agent.js.map +0 -1
  482. package/dist/cjs/types/ai.d.ts.map +0 -1
  483. package/dist/cjs/types/history.d.ts.map +0 -1
  484. package/dist/cjs/types/history.js +0 -37
  485. package/dist/cjs/types/history.js.map +0 -1
  486. package/dist/cjs/types/index.d.ts +0 -12
  487. package/dist/cjs/types/index.d.ts.map +0 -1
  488. package/dist/cjs/types/index.js +0 -12
  489. package/dist/cjs/types/index.js.map +0 -1
  490. package/dist/cjs/types/persistence.d.ts.map +0 -1
  491. package/dist/cjs/types/persistence.js.map +0 -1
  492. package/dist/cjs/types/route.d.ts.map +0 -1
  493. package/dist/cjs/types/session.d.ts +0 -104
  494. package/dist/cjs/types/session.d.ts.map +0 -1
  495. package/dist/cjs/types/session.js.map +0 -1
  496. package/dist/cjs/utils/event.js.map +0 -1
  497. package/dist/cjs/utils/id.js.map +0 -1
  498. package/dist/cjs/utils/logger.js.map +0 -1
  499. package/dist/cjs/utils/retry.js.map +0 -1
  500. package/dist/constants/index.d.ts.map +0 -1
  501. package/dist/constants/index.js.map +0 -1
  502. package/dist/core/Agent.d.ts.map +0 -1
  503. package/dist/core/Agent.js +0 -962
  504. package/dist/core/Agent.js.map +0 -1
  505. package/dist/core/DomainRegistry.d.ts +0 -36
  506. package/dist/core/DomainRegistry.d.ts.map +0 -1
  507. package/dist/core/DomainRegistry.js +0 -68
  508. package/dist/core/DomainRegistry.js.map +0 -1
  509. package/dist/core/Events.d.ts +0 -41
  510. package/dist/core/Events.d.ts.map +0 -1
  511. package/dist/core/Events.js +0 -94
  512. package/dist/core/Events.js.map +0 -1
  513. package/dist/core/PersistenceManager.d.ts.map +0 -1
  514. package/dist/core/PersistenceManager.js.map +0 -1
  515. package/dist/core/PromptComposer.d.ts +0 -24
  516. package/dist/core/PromptComposer.d.ts.map +0 -1
  517. package/dist/core/PromptComposer.js +0 -123
  518. package/dist/core/PromptComposer.js.map +0 -1
  519. package/dist/core/ResponseEngine.d.ts +0 -14
  520. package/dist/core/ResponseEngine.d.ts.map +0 -1
  521. package/dist/core/ResponseEngine.js +0 -52
  522. package/dist/core/ResponseEngine.js.map +0 -1
  523. package/dist/core/Route.d.ts +0 -90
  524. package/dist/core/Route.d.ts.map +0 -1
  525. package/dist/core/Route.js.map +0 -1
  526. package/dist/core/RoutingEngine.d.ts.map +0 -1
  527. package/dist/core/RoutingEngine.js.map +0 -1
  528. package/dist/core/Step.d.ts +0 -72
  529. package/dist/core/Step.d.ts.map +0 -1
  530. package/dist/core/Step.js +0 -146
  531. package/dist/core/Step.js.map +0 -1
  532. package/dist/core/Tool.d.ts +0 -39
  533. package/dist/core/Tool.d.ts.map +0 -1
  534. package/dist/core/Tool.js +0 -31
  535. package/dist/core/Tool.js.map +0 -1
  536. package/dist/core/ToolExecutor.d.ts +0 -29
  537. package/dist/core/ToolExecutor.d.ts.map +0 -1
  538. package/dist/core/ToolExecutor.js +0 -69
  539. package/dist/core/ToolExecutor.js.map +0 -1
  540. package/dist/core/Transition.d.ts +0 -32
  541. package/dist/core/Transition.d.ts.map +0 -1
  542. package/dist/core/Transition.js +0 -85
  543. package/dist/core/Transition.js.map +0 -1
  544. package/dist/index.d.ts.map +0 -1
  545. package/dist/index.js.map +0 -1
  546. package/dist/providers/AnthropicProvider.d.ts.map +0 -1
  547. package/dist/providers/AnthropicProvider.js.map +0 -1
  548. package/dist/providers/GeminiProvider.d.ts.map +0 -1
  549. package/dist/providers/GeminiProvider.js.map +0 -1
  550. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  551. package/dist/providers/OpenAIProvider.js.map +0 -1
  552. package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
  553. package/dist/providers/OpenRouterProvider.js.map +0 -1
  554. package/dist/providers/index.d.ts.map +0 -1
  555. package/dist/providers/index.js.map +0 -1
  556. package/dist/types/agent.d.ts.map +0 -1
  557. package/dist/types/agent.js.map +0 -1
  558. package/dist/types/ai.d.ts.map +0 -1
  559. package/dist/types/ai.js.map +0 -1
  560. package/dist/types/history.d.ts.map +0 -1
  561. package/dist/types/history.js +0 -34
  562. package/dist/types/history.js.map +0 -1
  563. package/dist/types/index.d.ts +0 -12
  564. package/dist/types/index.d.ts.map +0 -1
  565. package/dist/types/index.js +0 -6
  566. package/dist/types/index.js.map +0 -1
  567. package/dist/types/persistence.d.ts.map +0 -1
  568. package/dist/types/persistence.js.map +0 -1
  569. package/dist/types/route.d.ts.map +0 -1
  570. package/dist/types/routing.d.ts.map +0 -1
  571. package/dist/types/schema.d.ts.map +0 -1
  572. package/dist/types/session.d.ts +0 -104
  573. package/dist/types/session.d.ts.map +0 -1
  574. package/dist/types/session.js.map +0 -1
  575. package/dist/types/tool.d.ts.map +0 -1
  576. package/dist/utils/event.d.ts.map +0 -1
  577. package/dist/utils/event.js.map +0 -1
  578. package/dist/utils/id.d.ts.map +0 -1
  579. package/dist/utils/id.js.map +0 -1
  580. package/dist/utils/logger.d.ts.map +0 -1
  581. package/dist/utils/logger.js.map +0 -1
  582. package/dist/utils/retry.d.ts.map +0 -1
  583. package/dist/utils/retry.js.map +0 -1
  584. package/docs/AGENT.md +0 -535
  585. package/docs/DOCS.md +0 -263
  586. package/docs/DOMAINS.md +0 -735
  587. package/docs/EXAMPLES.md +0 -467
  588. package/docs/GETTING_STARTED.md +0 -424
  589. package/docs/PERSISTENCE.md +0 -815
  590. package/docs/PROVIDERS.md +0 -612
  591. package/docs/ROUTES.md +0 -1085
  592. package/docs/STEPS.md +0 -883
  593. package/examples/business-onboarding.ts +0 -791
  594. package/examples/custom-database-persistence.ts +0 -574
  595. package/examples/domain-scoping.ts +0 -366
  596. package/examples/travel-agent.ts +0 -584
  597. package/src/core/DomainRegistry.ts +0 -80
  598. package/src/core/Tool.ts +0 -112
  599. package/src/core/Transition.ts +0 -115
  600. /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
  601. /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
  602. /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
  603. /package/dist/cjs/{constants → src/constants}/index.js +0 -0
  604. /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
  605. /package/dist/cjs/{providers → src/providers}/index.js +0 -0
  606. /package/dist/cjs/{types → src/types}/agent.js +0 -0
  607. /package/dist/cjs/{types → src/types}/ai.js +0 -0
  608. /package/dist/cjs/{types → src/types}/persistence.js +0 -0
  609. /package/dist/cjs/{types → src/types}/route.js +0 -0
  610. /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
  611. /package/dist/cjs/{types → src/types}/routing.js +0 -0
  612. /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
  613. /package/dist/cjs/{types → src/types}/schema.js +0 -0
  614. /package/dist/cjs/{types → src/types}/tool.js +0 -0
  615. /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
  616. /package/dist/cjs/{utils → src/utils}/id.js +0 -0
  617. /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
  618. /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
  619. /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
  620. /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
  621. /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
  622. /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
  623. /package/dist/{adapters → src/adapters}/index.js +0 -0
  624. /package/dist/{constants → src/constants}/index.d.ts +0 -0
  625. /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
  626. /package/dist/{constants → src/constants}/index.js +0 -0
  627. /package/dist/{providers → src/providers}/index.d.ts +0 -0
  628. /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
  629. /package/dist/{providers → src/providers}/index.js +0 -0
  630. /package/dist/{types → src/types}/agent.js +0 -0
  631. /package/dist/{types → src/types}/ai.js +0 -0
  632. /package/dist/{types → src/types}/persistence.js +0 -0
  633. /package/dist/{types → src/types}/route.js +0 -0
  634. /package/dist/{types → src/types}/routing.d.ts +0 -0
  635. /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
  636. /package/dist/{types → src/types}/routing.js +0 -0
  637. /package/dist/{cjs → src}/types/routing.js.map +0 -0
  638. /package/dist/{types → src/types}/schema.d.ts +0 -0
  639. /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
  640. /package/dist/{types → src/types}/schema.js +0 -0
  641. /package/dist/{cjs → src}/types/schema.js.map +0 -0
  642. /package/dist/{types → src/types}/tool.js +0 -0
  643. /package/dist/{utils → src/utils}/id.d.ts +0 -0
  644. /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
  645. /package/dist/{utils → src/utils}/id.js +0 -0
  646. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
  647. /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
  648. /package/dist/{utils → src/utils}/logger.js +0 -0
  649. /package/dist/{utils → src/utils}/retry.d.ts +0 -0
  650. /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
  651. /package/dist/{utils → src/utils}/retry.js +0 -0
  652. /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
@@ -0,0 +1,196 @@
1
+ # Prompt Composition
2
+
3
+ @fali/agent automatically builds comprehensive prompts for AI providers by combining agent configuration, route context, conversation history, and current session state.
4
+
5
+ ## Overview
6
+
7
+ The `PromptComposer` class is responsible for constructing detailed prompts that provide AI models with all necessary context to make intelligent routing and response decisions.
8
+
9
+ ## Prompt Structure
10
+
11
+ Prompts are built with multiple sections in a specific order:
12
+
13
+ 1. **Agent Identity** - Core agent persona and personality
14
+ 2. **Routing Overview** - Available routes and current context
15
+ 3. **Knowledge Base** - Agent and route-specific knowledge
16
+ 4. **Guidelines & Rules** - Behavioral constraints and preferences
17
+ 5. **Conversation History** - Previous messages and context
18
+ 6. **Current Session** - Active route, collected data, and step state
19
+ 7. **Task-Specific Instructions** - Route-specific prompts and schemas
20
+
21
+ ## Agent Identity Section
22
+
23
+ ```typescript
24
+ // Agent configuration contributes to identity
25
+ const agent = new Agent({
26
+ name: "TravelBot",
27
+ description: "AI assistant for travel planning and booking",
28
+ goal: "Help users plan perfect trips efficiently",
29
+ personality: "Friendly, knowledgeable, and efficient",
30
+ });
31
+ ```
32
+
33
+ This generates:
34
+
35
+ ```
36
+ You are TravelBot, an AI assistant for travel planning and booking.
37
+ Your goal is to help users plan perfect trips efficiently.
38
+ You are friendly, knowledgeable, and efficient.
39
+ ```
40
+
41
+ ## Routing Overview Section
42
+
43
+ Provides the AI with information about available conversation routes:
44
+
45
+ ```
46
+ Available Routes:
47
+ 1. Flight Booking - Help users book flights
48
+ 2. Hotel Reservation - Find and book accommodations
49
+ 3. Travel Itinerary - Create detailed trip plans
50
+ 4. Customer Support - Handle travel-related questions
51
+
52
+ Current Route: Flight Booking
53
+ Route Description: Help users book flights with the best options
54
+ ```
55
+
56
+ ## Knowledge Base Integration
57
+
58
+ Agent and route knowledge bases are formatted and included:
59
+
60
+ ```typescript
61
+ const agent = new Agent({
62
+ knowledgeBase: {
63
+ company: "Acme Travel - Premium travel services since 1995",
64
+ policies: {
65
+ cancellation: "Free cancellation up to 24 hours before departure",
66
+ refund: "Refunds processed within 3-5 business days",
67
+ },
68
+ },
69
+ });
70
+ ```
71
+
72
+ ## Guidelines & Rules Section
73
+
74
+ Combines agent-level and route-level behavioral constraints:
75
+
76
+ ```
77
+ Guidelines:
78
+ - Always be polite and helpful
79
+ - Ask clarifying questions when needed
80
+ - Provide options rather than single recommendations
81
+
82
+ Rules for this route:
83
+ - Always confirm flight details before booking
84
+ - Never share personal information
85
+ - Use specific date formats (YYYY-MM-DD)
86
+ ```
87
+
88
+ ## Conversation History
89
+
90
+ Recent conversation history with context updates:
91
+
92
+ ```
93
+ Previous Messages:
94
+ User: I want to book a flight to Paris
95
+ Assistant: I'd be happy to help you book a flight to Paris. When would you like to travel?
96
+
97
+ User: Next week, for 3 nights
98
+ Assistant: Great! Let me check flights for next week. Could you tell me which airport you'd like to depart from?
99
+ ```
100
+
101
+ ## Session State
102
+
103
+ Current session information including:
104
+
105
+ - Active route and step
106
+ - Collected data (with privacy filtering)
107
+ - Route progress and completion status
108
+
109
+ ## Dynamic Schema Generation
110
+
111
+ For data collection steps, the prompt includes JSON schemas:
112
+
113
+ ```typescript
114
+ // Route schema
115
+ schema: {
116
+ type: "object",
117
+ properties: {
118
+ destination: { type: "string" },
119
+ departureDate: { type: "string", format: "date" },
120
+ passengers: { type: "number", minimum: 1 }
121
+ },
122
+ required: ["destination", "departureDate"]
123
+ }
124
+ ```
125
+
126
+ Generates:
127
+
128
+ ```
129
+ Extract the following information from the user's response:
130
+ - destination: string - Where the user wants to fly
131
+ - departureDate: string (date format) - When they want to depart
132
+ - passengers: number (minimum 1) - How many people are traveling
133
+
134
+ Return extracted data as valid JSON matching this schema.
135
+ ```
136
+
137
+ ## Tool Integration
138
+
139
+ When tools are available, they're described in the prompt:
140
+
141
+ ```
142
+ Available Tools:
143
+ 1. searchFlights - Search for available flights
144
+ Parameters:
145
+ - origin: string - Departure airport code
146
+ - destination: string - Arrival airport code
147
+ - date: string - Travel date (YYYY-MM-DD)
148
+
149
+ 2. checkWeather - Get weather forecast
150
+ Parameters:
151
+ - location: string - City or airport code
152
+ - date: string - Date for forecast
153
+ ```
154
+
155
+ ## Context Updates
156
+
157
+ Real-time context changes are included:
158
+
159
+ ```
160
+ Current Context:
161
+ - User tier: premium
162
+ - Preferred language: English
163
+ - Last login: 2024-01-15
164
+ - Current location: New York
165
+ ```
166
+
167
+ ## Route-Specific Customization
168
+
169
+ Routes can override agent-level settings:
170
+
171
+ ```typescript
172
+ const supportRoute = agent.createRoute({
173
+ title: "Customer Support",
174
+ personality: "Extra patient and detailed when explaining issues",
175
+ knowledgeBase: {
176
+ supportHours: "24/7 for premium members, 9-5 EST for others",
177
+ },
178
+ });
179
+ ```
180
+
181
+ ## Performance Optimization
182
+
183
+ Prompts are optimized for token efficiency:
184
+
185
+ - Knowledge bases are formatted as clean markdown
186
+ - Redundant information is deduplicated
187
+ - Context is truncated when approaching token limits
188
+ - Only relevant route information is included
189
+
190
+ ## Best Practices
191
+
192
+ - Keep knowledge bases structured and concise
193
+ - Use clear, specific guidelines rather than vague instructions
194
+ - Leverage route-specific overrides for specialized behavior
195
+ - Monitor token usage and optimize prompt length
196
+ - Test prompts with different AI providers for consistency
@@ -0,0 +1,515 @@
1
+ # AI Provider Integrations
2
+
3
+ @falai/agent provides unified interfaces for multiple AI providers, enabling seamless switching between models and automatic fallback handling.
4
+
5
+ ## Supported Providers
6
+
7
+ ### OpenAI Provider
8
+
9
+ Full-featured integration with GPT models, including backup model support and structured outputs.
10
+
11
+ ```typescript
12
+ import { OpenAIProvider } from "@falai/agent";
13
+
14
+ const provider = new OpenAIProvider({
15
+ apiKey: process.env.OPENAI_API_KEY,
16
+ model: "gpt-5",
17
+ backupModels: ["gpt-4"], // Fallback models
18
+ config: {
19
+ temperature: 0.7,
20
+ max_tokens: 1000,
21
+ },
22
+ retryConfig: {
23
+ timeout: 30000,
24
+ retries: 3,
25
+ },
26
+ });
27
+ ```
28
+
29
+ **Features:**
30
+
31
+ - ✅ GPT-4, GPT-5, and all OpenAI models
32
+ - ✅ Backup model fallback on failures
33
+ - ✅ Structured outputs with JSON Schema
34
+ - ✅ Tool calling support
35
+ - ✅ Streaming responses
36
+ - ✅ Automatic retry logic
37
+
38
+ ### Google Gemini Provider
39
+
40
+ Integration with Google's Gemini models through Vertex AI or AI Studio.
41
+
42
+ ```typescript
43
+ import { GeminiProvider } from "@falai/agent";
44
+
45
+ const provider = new GeminiProvider({
46
+ apiKey: process.env.GEMINI_API_KEY,
47
+ model: "gemini-pro",
48
+ config: {
49
+ safetySettings: [
50
+ {
51
+ category: "HARM_CATEGORY_HARASSMENT",
52
+ threshold: "BLOCK_MEDIUM_AND_ABOVE",
53
+ },
54
+ ],
55
+ },
56
+ });
57
+ ```
58
+
59
+ **Features:**
60
+
61
+ - ✅ Gemini 2.0, 2.5 Pro, and Flash models
62
+ - ✅ Safety settings and content filtering
63
+ - ✅ Multimodal capabilities (text, images)
64
+ - ✅ Function calling support
65
+ - ✅ Streaming responses
66
+
67
+ ### Anthropic Claude Provider
68
+
69
+ Integration with Anthropic's Claude models via their API.
70
+
71
+ ```typescript
72
+ import { AnthropicProvider } from "@falai/agent";
73
+
74
+ const provider = new AnthropicProvider({
75
+ apiKey: process.env.ANTHROPIC_API_KEY,
76
+ model: "claude-sonnet-4.5",
77
+ config: {
78
+ maxTokens: 4096,
79
+ temperature: 0.7,
80
+ },
81
+ });
82
+ ```
83
+
84
+ **Features:**
85
+
86
+ - ✅ Claude 4 Opus, Sonnet, and Haiku
87
+ - ✅ Constitutional AI safety
88
+ - ✅ Excellent reasoning capabilities
89
+ - ✅ Tool calling support
90
+ - ✅ Streaming responses
91
+
92
+ ### OpenRouter Provider
93
+
94
+ Unified access to multiple AI models through OpenRouter's API.
95
+
96
+ ```typescript
97
+ import { OpenRouterProvider } from "@falai/agent";
98
+
99
+ const provider = new OpenRouterProvider({
100
+ apiKey: process.env.OPENROUTER_API_KEY,
101
+ model: "anthropic/claude-sonnet-4",
102
+ siteUrl: "https://your-app.com",
103
+ siteName: "Your App Name",
104
+ });
105
+ ```
106
+
107
+ **Features:**
108
+
109
+ - ✅ Access to 100+ AI models
110
+ - ✅ Unified pricing and billing
111
+ - ✅ Automatic model routing
112
+ - ✅ Fallback model support
113
+ - ✅ Streaming responses
114
+
115
+ ## Provider Configuration
116
+
117
+ ### Common Options
118
+
119
+ All providers support these configuration options:
120
+
121
+ ```typescript
122
+ interface BaseProviderOptions {
123
+ model: string; // Primary model to use
124
+ backupModels?: string[]; // Fallback models on failure
125
+ temperature?: number; // Response randomness (0-2)
126
+ maxTokens?: number; // Maximum response length
127
+ timeout?: number; // Request timeout in ms
128
+ retries?: number; // Number of retry attempts
129
+ }
130
+ ```
131
+
132
+ ### Advanced Configuration
133
+
134
+ ```typescript
135
+ const provider = new OpenAIProvider({
136
+ apiKey: process.env.OPENAI_API_KEY,
137
+ model: "gpt-5",
138
+
139
+ // Model-specific parameters
140
+ config: {
141
+ temperature: 0.1, // Low randomness for consistent responses
142
+ top_p: 0.9, // Nucleus sampling
143
+ frequency_penalty: 0.1, // Reduce repetition
144
+ presence_penalty: 0.1, // Encourage topic diversity
145
+ max_tokens: 2048,
146
+ },
147
+
148
+ // Fallback configuration
149
+ backupModels: [
150
+ "gpt-4.1", // Try GPT-4 if turbo fails
151
+ "gpt-4", // Final fallback
152
+ ],
153
+
154
+ // Retry configuration
155
+ retryConfig: {
156
+ timeout: 60000, // 60 second timeout
157
+ retries: 3, // Retry up to 3 times
158
+ },
159
+ });
160
+ ```
161
+
162
+ ## Unified Interface
163
+
164
+ All providers implement the same interface:
165
+
166
+ ```typescript
167
+ interface AiProvider {
168
+ name: string;
169
+
170
+ // Synchronous response generation
171
+ generateMessage(input: GenerateMessageInput): Promise<GenerateMessageOutput>;
172
+
173
+ // Streaming response generation
174
+ generateMessageStream(
175
+ input: GenerateMessageInput
176
+ ): AsyncGenerator<GenerateMessageStreamChunk>;
177
+ }
178
+ ```
179
+
180
+ ### Input Format
181
+
182
+ ```typescript
183
+ interface GenerateMessageInput<TContext = unknown> {
184
+ prompt: string; // The prompt to send
185
+ history: Event[]; // Conversation history
186
+ context?: TContext; // Additional context data
187
+ tools?: ToolDefinition[]; // Available tools
188
+ parameters?: {
189
+ jsonSchema?: StructuredSchema; // Response schema
190
+ schemaName?: string; // Schema identifier
191
+ maxOutputTokens?: number; // Token limit
192
+ reasoning?: { effort: "low" | "medium" | "high" };
193
+ };
194
+ signal?: AbortSignal; // Cancellation support
195
+ }
196
+ ```
197
+
198
+ ### Output Format
199
+
200
+ ```typescript
201
+ interface GenerateMessageOutput<TStructured = AgentStructuredResponse> {
202
+ message: string; // Main response text
203
+ metadata: {
204
+ model: string; // Model used
205
+ tokensUsed: number; // Total tokens consumed
206
+ promptTokens: number; // Input tokens
207
+ completionTokens: number; // Output tokens
208
+ finishReason?: string; // Why generation stopped
209
+ };
210
+ structured?: TStructured; // Structured data if schema provided
211
+ }
212
+ ```
213
+
214
+ ## Tool Calling Support
215
+
216
+ All providers support tool calling with consistent interfaces:
217
+
218
+ ```typescript
219
+ const input: GenerateMessageInput = {
220
+ prompt: "What's the weather in Paris?",
221
+ history: conversationHistory,
222
+ tools: [
223
+ {
224
+ id: "get_weather",
225
+ description: "Get current weather for a location",
226
+ parameters: {
227
+ type: "object",
228
+ properties: {
229
+ location: { type: "string", description: "City name" },
230
+ },
231
+ required: ["location"],
232
+ },
233
+ },
234
+ ],
235
+ };
236
+
237
+ const response = await provider.generateMessage(input);
238
+
239
+ // Check for tool calls
240
+ if (response.structured?.toolCalls) {
241
+ for (const toolCall of response.structured.toolCalls) {
242
+ console.log(`AI wants to call: ${toolCall.toolName}`);
243
+ console.log(`With arguments:`, toolCall.arguments);
244
+ }
245
+ }
246
+ ```
247
+
248
+ ## Streaming Responses
249
+
250
+ Real-time response generation with chunked output:
251
+
252
+ ```typescript
253
+ const stream = provider.generateMessageStream(input);
254
+
255
+ for await (const chunk of stream) {
256
+ if (chunk.delta) {
257
+ process.stdout.write(chunk.delta); // Real-time output
258
+ }
259
+
260
+ if (chunk.done) {
261
+ console.log("\nGeneration complete!");
262
+ console.log("Total tokens:", chunk.metadata?.tokensUsed);
263
+ console.log("Structured data:", chunk.structured);
264
+ }
265
+ }
266
+ ```
267
+
268
+ ## Error Handling & Fallbacks
269
+
270
+ ### Automatic Fallbacks
271
+
272
+ Providers automatically try backup models on failures:
273
+
274
+ ```typescript
275
+ const provider = new OpenAIProvider({
276
+ apiKey: process.env.OPENAI_API_KEY,
277
+ model: "gpt-5",
278
+ backupModels: ["gpt-4.1", "gpt-4"],
279
+ });
280
+
281
+ // If gpt-4 fails (rate limit, server error, etc.)
282
+ // Automatically tries gpt-4.1, then gpt-4
283
+ const response = await provider.generateMessage(input);
284
+ ```
285
+
286
+ ### Error Classification
287
+
288
+ Different error types trigger different fallback behaviors:
289
+
290
+ ```typescript
291
+ // Server errors (5xx) → Try backup models
292
+ // Rate limits (429) → Try backup models
293
+ // Invalid requests (4xx) → Don't retry
294
+ // Timeouts → Retry with same model
295
+ ```
296
+
297
+ ### Custom Error Handling
298
+
299
+ ```typescript
300
+ try {
301
+ const response = await provider.generateMessage(input);
302
+ } catch (error) {
303
+ if (error.code === "rate_limit_exceeded") {
304
+ // Handle rate limiting
305
+ await delay(60000); // Wait 1 minute
306
+ return retryWithBackoff();
307
+ }
308
+
309
+ if (error.code === "model_not_available") {
310
+ // Switch to different provider
311
+ return fallbackProvider.generateMessage(input);
312
+ }
313
+
314
+ throw error;
315
+ }
316
+ ```
317
+
318
+ ## Performance Optimization
319
+
320
+ ### Connection Reuse
321
+
322
+ Reuse provider instances for better performance:
323
+
324
+ ```typescript
325
+ // ✅ Good: Reuse provider instance
326
+ const provider = new OpenAIProvider({ apiKey, model: "gpt-4" });
327
+
328
+ const agent1 = new Agent({ provider });
329
+ const agent2 = new Agent({ provider }); // Same instance
330
+
331
+ // ❌ Bad: Create new instance each time
332
+ const agent3 = new Agent({
333
+ provider: new OpenAIProvider({ apiKey, model: "gpt-4" }),
334
+ });
335
+ ```
336
+
337
+ ### Request Batching
338
+
339
+ Group related requests to reduce latency:
340
+
341
+ ```typescript
342
+ // Process multiple conversations efficiently
343
+ const responses = await Promise.all([
344
+ agent1.respond({ history: history1 }),
345
+ agent2.respond({ history: history2 }),
346
+ agent3.respond({ history: history3 }),
347
+ ]);
348
+ ```
349
+
350
+ ### Caching
351
+
352
+ Cache responses for similar prompts:
353
+
354
+ ```typescript
355
+ const cache = new Map();
356
+
357
+ function getCachedResponse(prompt: string, context: any) {
358
+ const key = hash(`${prompt}-${JSON.stringify(context)}`);
359
+ return cache.get(key);
360
+ }
361
+
362
+ function setCachedResponse(prompt: string, context: any, response: any) {
363
+ const key = hash(`${prompt}-${JSON.stringify(context)}`);
364
+ cache.set(key, response);
365
+ }
366
+ ```
367
+
368
+ ## Monitoring & Observability
369
+
370
+ ### Response Metrics
371
+
372
+ Track provider performance and usage:
373
+
374
+ ```typescript
375
+ const response = await provider.generateMessage(input);
376
+
377
+ console.log("Provider:", response.metadata?.model);
378
+ console.log("Tokens used:", response.metadata?.tokensUsed);
379
+ console.log("Prompt tokens:", response.metadata?.promptTokens);
380
+ console.log("Completion tokens:", response.metadata?.completionTokens);
381
+ console.log("Finish reason:", response.metadata?.finishReason);
382
+ ```
383
+
384
+ ### Cost Tracking
385
+
386
+ Monitor API usage costs:
387
+
388
+ ```typescript
389
+ const costTracker = {
390
+ openai: {
391
+ "gpt-5": { prompt: 0.03, completion: 0.06 },
392
+ "gpt-4": { prompt: 0.002, completion: 0.002 },
393
+ },
394
+ };
395
+
396
+ function calculateCost(metadata: ResponseMetadata): number {
397
+ const rates = costTracker[metadata.model];
398
+ if (!rates) return 0;
399
+
400
+ return (
401
+ ((metadata.promptTokens || 0) * rates.prompt) / 1000 +
402
+ ((metadata.completionTokens || 0) * rates.completion) / 1000
403
+ );
404
+ }
405
+ ```
406
+
407
+ ### Health Monitoring
408
+
409
+ Track provider availability and latency:
410
+
411
+ ```typescript
412
+ const healthChecks = new Map();
413
+
414
+ async function checkProviderHealth(provider: AiProvider): Promise<boolean> {
415
+ const startTime = Date.now();
416
+
417
+ try {
418
+ await provider.generateMessage({
419
+ prompt: "Hello",
420
+ history: [],
421
+ });
422
+
423
+ const latency = Date.now() - startTime;
424
+ healthChecks.set(provider.name, { healthy: true, latency });
425
+ return true;
426
+ } catch (error) {
427
+ healthChecks.set(provider.name, { healthy: false, error: error.message });
428
+ return false;
429
+ }
430
+ }
431
+ ```
432
+
433
+ ## Custom Provider Implementation
434
+
435
+ Create providers for unsupported AI services:
436
+
437
+ ```typescript
438
+ import {
439
+ AiProvider,
440
+ GenerateMessageInput,
441
+ GenerateMessageOutput,
442
+ } from "@falai/agent";
443
+
444
+ class CustomProvider implements AiProvider {
445
+ name = "custom";
446
+
447
+ async generateMessage(
448
+ input: GenerateMessageInput
449
+ ): Promise<GenerateMessageOutput> {
450
+ // Implement your AI service integration
451
+ const response = await callCustomAI(input.prompt, input.context);
452
+
453
+ return {
454
+ message: response.text,
455
+ metadata: {
456
+ model: "custom-model-v1",
457
+ tokensUsed: response.tokens,
458
+ promptTokens: input.prompt.split(" ").length,
459
+ completionTokens: response.text.split(" ").length,
460
+ },
461
+ structured: response.structured,
462
+ };
463
+ }
464
+
465
+ async *generateMessageStream(input: GenerateMessageInput) {
466
+ // Implement streaming if supported
467
+ const stream = await callCustomAIStream(input.prompt, input.context);
468
+
469
+ for await (const chunk of stream) {
470
+ yield {
471
+ delta: chunk.text,
472
+ accumulated: chunk.fullText,
473
+ done: chunk.finished,
474
+ metadata: chunk.metadata,
475
+ };
476
+ }
477
+ }
478
+ }
479
+ ```
480
+
481
+ ## Best Practices
482
+
483
+ ### Provider Selection
484
+
485
+ 1. **Task Matching**: Choose providers based on task requirements
486
+
487
+ - OpenAI GPT-4: Complex reasoning, creative tasks
488
+ - Anthropic Claude: Safety-focused, analytical tasks
489
+ - Google Gemini: Multimodal, fast responses
490
+ - OpenRouter: Cost optimization, model experimentation
491
+
492
+ 2. **Cost Optimization**: Use appropriate models for task complexity
493
+
494
+ - Simple tasks: GPT-4.1, Claude Haiku, Gemini Flash
495
+ - Complex tasks: GPT-5, Claude Sonnet, Gemini Pro
496
+
497
+ 3. **Reliability**: Configure backup models for production
498
+ - Always have fallback options
499
+ - Monitor error rates and switch providers if needed
500
+
501
+ ### Configuration
502
+
503
+ 1. **Temperature**: Lower for deterministic tasks, higher for creative
504
+ 2. **Max Tokens**: Set appropriate limits to control costs
505
+ 3. **Timeouts**: Configure reasonable timeouts for your use case
506
+ 4. **Retries**: Enable retries for transient failures
507
+
508
+ ### Monitoring
509
+
510
+ 1. **Track Usage**: Monitor token consumption and costs
511
+ 2. **Error Rates**: Alert on high error rates
512
+ 3. **Latency**: Monitor response times
513
+ 4. **Fallback Usage**: Track how often backup models are used
514
+
515
+ The AI provider system enables flexible, reliable integration with multiple AI services while maintaining a consistent interface for the @falai/agent framework.