@loonylabs/llm-middleware 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/.env.example +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +629 -0
  4. package/dist/examples/character-generator/character-generator.messages.d.ts +9 -0
  5. package/dist/examples/character-generator/character-generator.messages.d.ts.map +1 -0
  6. package/dist/examples/character-generator/character-generator.messages.js +54 -0
  7. package/dist/examples/character-generator/character-generator.messages.js.map +1 -0
  8. package/dist/examples/character-generator/character-generator.usecase.d.ts +129 -0
  9. package/dist/examples/character-generator/character-generator.usecase.d.ts.map +1 -0
  10. package/dist/examples/character-generator/character-generator.usecase.js +209 -0
  11. package/dist/examples/character-generator/character-generator.usecase.js.map +1 -0
  12. package/dist/examples/character-generator/create-character.messages.d.ts +11 -0
  13. package/dist/examples/character-generator/create-character.messages.d.ts.map +1 -0
  14. package/dist/examples/character-generator/create-character.messages.js +38 -0
  15. package/dist/examples/character-generator/create-character.messages.js.map +1 -0
  16. package/dist/examples/flat-formatter-demo/product-preset.example.d.ts +99 -0
  17. package/dist/examples/flat-formatter-demo/product-preset.example.d.ts.map +1 -0
  18. package/dist/examples/flat-formatter-demo/product-preset.example.js +85 -0
  19. package/dist/examples/flat-formatter-demo/product-preset.example.js.map +1 -0
  20. package/dist/examples/simple-chat/chat.controller.d.ts +15 -0
  21. package/dist/examples/simple-chat/chat.controller.d.ts.map +1 -0
  22. package/dist/examples/simple-chat/chat.controller.js +39 -0
  23. package/dist/examples/simple-chat/chat.controller.js.map +1 -0
  24. package/dist/examples/simple-chat/chat.messages.d.ts +10 -0
  25. package/dist/examples/simple-chat/chat.messages.d.ts.map +1 -0
  26. package/dist/examples/simple-chat/chat.messages.js +17 -0
  27. package/dist/examples/simple-chat/chat.messages.js.map +1 -0
  28. package/dist/examples/simple-chat/chat.usecase.d.ts +33 -0
  29. package/dist/examples/simple-chat/chat.usecase.d.ts.map +1 -0
  30. package/dist/examples/simple-chat/chat.usecase.js +40 -0
  31. package/dist/examples/simple-chat/chat.usecase.js.map +1 -0
  32. package/dist/examples/simple-chat/index.d.ts +3 -0
  33. package/dist/examples/simple-chat/index.d.ts.map +1 -0
  34. package/dist/examples/simple-chat/index.js +57 -0
  35. package/dist/examples/simple-chat/index.js.map +1 -0
  36. package/dist/examples/story-generator/story-generator.messages.d.ts +13 -0
  37. package/dist/examples/story-generator/story-generator.messages.d.ts.map +1 -0
  38. package/dist/examples/story-generator/story-generator.messages.js +41 -0
  39. package/dist/examples/story-generator/story-generator.messages.js.map +1 -0
  40. package/dist/examples/story-generator/story-generator.usecase.d.ts +115 -0
  41. package/dist/examples/story-generator/story-generator.usecase.d.ts.map +1 -0
  42. package/dist/examples/story-generator/story-generator.usecase.js +121 -0
  43. package/dist/examples/story-generator/story-generator.usecase.js.map +1 -0
  44. package/dist/examples/tweet-generator/tweet-generator.messages.d.ts +15 -0
  45. package/dist/examples/tweet-generator/tweet-generator.messages.d.ts.map +1 -0
  46. package/dist/examples/tweet-generator/tweet-generator.messages.js +40 -0
  47. package/dist/examples/tweet-generator/tweet-generator.messages.js.map +1 -0
  48. package/dist/examples/tweet-generator/tweet-generator.usecase.d.ts +92 -0
  49. package/dist/examples/tweet-generator/tweet-generator.usecase.d.ts.map +1 -0
  50. package/dist/examples/tweet-generator/tweet-generator.usecase.js +116 -0
  51. package/dist/examples/tweet-generator/tweet-generator.usecase.js.map +1 -0
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +19 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/middleware/controllers/base/base.controller.d.ts +16 -0
  57. package/dist/middleware/controllers/base/base.controller.d.ts.map +1 -0
  58. package/dist/middleware/controllers/base/base.controller.js +38 -0
  59. package/dist/middleware/controllers/base/base.controller.js.map +1 -0
  60. package/dist/middleware/controllers/base/index.d.ts +2 -0
  61. package/dist/middleware/controllers/base/index.d.ts.map +1 -0
  62. package/dist/middleware/controllers/base/index.js +19 -0
  63. package/dist/middleware/controllers/base/index.js.map +1 -0
  64. package/dist/middleware/index.d.ts +7 -0
  65. package/dist/middleware/index.d.ts.map +1 -0
  66. package/dist/middleware/index.js +27 -0
  67. package/dist/middleware/index.js.map +1 -0
  68. package/dist/middleware/services/data-flow-logger/data-flow-logger.service.d.ts +127 -0
  69. package/dist/middleware/services/data-flow-logger/data-flow-logger.service.d.ts.map +1 -0
  70. package/dist/middleware/services/data-flow-logger/data-flow-logger.service.js +341 -0
  71. package/dist/middleware/services/data-flow-logger/data-flow-logger.service.js.map +1 -0
  72. package/dist/middleware/services/data-flow-logger/index.d.ts +2 -0
  73. package/dist/middleware/services/data-flow-logger/index.d.ts.map +1 -0
  74. package/dist/middleware/services/data-flow-logger/index.js +18 -0
  75. package/dist/middleware/services/data-flow-logger/index.js.map +1 -0
  76. package/dist/middleware/services/flat-formatter/flat-formatter.service.d.ts +86 -0
  77. package/dist/middleware/services/flat-formatter/flat-formatter.service.d.ts.map +1 -0
  78. package/dist/middleware/services/flat-formatter/flat-formatter.service.js +333 -0
  79. package/dist/middleware/services/flat-formatter/flat-formatter.service.js.map +1 -0
  80. package/dist/middleware/services/flat-formatter/index.d.ts +4 -0
  81. package/dist/middleware/services/flat-formatter/index.d.ts.map +1 -0
  82. package/dist/middleware/services/flat-formatter/index.js +28 -0
  83. package/dist/middleware/services/flat-formatter/index.js.map +1 -0
  84. package/dist/middleware/services/flat-formatter/presets/base-preset.d.ts +68 -0
  85. package/dist/middleware/services/flat-formatter/presets/base-preset.d.ts.map +1 -0
  86. package/dist/middleware/services/flat-formatter/presets/base-preset.js +238 -0
  87. package/dist/middleware/services/flat-formatter/presets/base-preset.js.map +1 -0
  88. package/dist/middleware/services/flat-formatter/presets/index.d.ts +5 -0
  89. package/dist/middleware/services/flat-formatter/presets/index.d.ts.map +1 -0
  90. package/dist/middleware/services/flat-formatter/presets/index.js +28 -0
  91. package/dist/middleware/services/flat-formatter/presets/index.js.map +1 -0
  92. package/dist/middleware/services/flat-formatter/presets/types/entity-types.d.ts +23 -0
  93. package/dist/middleware/services/flat-formatter/presets/types/entity-types.d.ts.map +1 -0
  94. package/dist/middleware/services/flat-formatter/presets/types/entity-types.js +3 -0
  95. package/dist/middleware/services/flat-formatter/presets/types/entity-types.js.map +1 -0
  96. package/dist/middleware/services/flat-formatter/presets/types/processed-entity-types.d.ts +30 -0
  97. package/dist/middleware/services/flat-formatter/presets/types/processed-entity-types.d.ts.map +1 -0
  98. package/dist/middleware/services/flat-formatter/presets/types/processed-entity-types.js +3 -0
  99. package/dist/middleware/services/flat-formatter/presets/types/processed-entity-types.js.map +1 -0
  100. package/dist/middleware/services/index.d.ts +10 -0
  101. package/dist/middleware/services/index.d.ts.map +1 -0
  102. package/dist/middleware/services/index.js +28 -0
  103. package/dist/middleware/services/index.js.map +1 -0
  104. package/dist/middleware/services/json-cleaner/helpers/index.d.ts +3 -0
  105. package/dist/middleware/services/json-cleaner/helpers/index.d.ts.map +1 -0
  106. package/dist/middleware/services/json-cleaner/helpers/index.js +19 -0
  107. package/dist/middleware/services/json-cleaner/helpers/index.js.map +1 -0
  108. package/dist/middleware/services/json-cleaner/helpers/json-cleaner.analyzer.d.ts +52 -0
  109. package/dist/middleware/services/json-cleaner/helpers/json-cleaner.analyzer.d.ts.map +1 -0
  110. package/dist/middleware/services/json-cleaner/helpers/json-cleaner.analyzer.js +271 -0
  111. package/dist/middleware/services/json-cleaner/helpers/json-cleaner.analyzer.js.map +1 -0
  112. package/dist/middleware/services/json-cleaner/helpers/json-validation.helper.d.ts +83 -0
  113. package/dist/middleware/services/json-cleaner/helpers/json-validation.helper.d.ts.map +1 -0
  114. package/dist/middleware/services/json-cleaner/helpers/json-validation.helper.js +326 -0
  115. package/dist/middleware/services/json-cleaner/helpers/json-validation.helper.js.map +1 -0
  116. package/dist/middleware/services/json-cleaner/index.d.ts +9 -0
  117. package/dist/middleware/services/json-cleaner/index.d.ts.map +1 -0
  118. package/dist/middleware/services/json-cleaner/index.js +31 -0
  119. package/dist/middleware/services/json-cleaner/index.js.map +1 -0
  120. package/dist/middleware/services/json-cleaner/json-cleaner-logger.d.ts +59 -0
  121. package/dist/middleware/services/json-cleaner/json-cleaner-logger.d.ts.map +1 -0
  122. package/dist/middleware/services/json-cleaner/json-cleaner-logger.js +164 -0
  123. package/dist/middleware/services/json-cleaner/json-cleaner-logger.js.map +1 -0
  124. package/dist/middleware/services/json-cleaner/json-cleaner.orchestrator.d.ts +56 -0
  125. package/dist/middleware/services/json-cleaner/json-cleaner.orchestrator.d.ts.map +1 -0
  126. package/dist/middleware/services/json-cleaner/json-cleaner.orchestrator.js +178 -0
  127. package/dist/middleware/services/json-cleaner/json-cleaner.orchestrator.js.map +1 -0
  128. package/dist/middleware/services/json-cleaner/json-cleaner.service.d.ts +94 -0
  129. package/dist/middleware/services/json-cleaner/json-cleaner.service.d.ts.map +1 -0
  130. package/dist/middleware/services/json-cleaner/json-cleaner.service.js +175 -0
  131. package/dist/middleware/services/json-cleaner/json-cleaner.service.js.map +1 -0
  132. package/dist/middleware/services/json-cleaner/json-cleaner.types.d.ts +92 -0
  133. package/dist/middleware/services/json-cleaner/json-cleaner.types.d.ts.map +1 -0
  134. package/dist/middleware/services/json-cleaner/json-cleaner.types.js +3 -0
  135. package/dist/middleware/services/json-cleaner/json-cleaner.types.js.map +1 -0
  136. package/dist/middleware/services/json-cleaner/parsers/index.d.ts +4 -0
  137. package/dist/middleware/services/json-cleaner/parsers/index.d.ts.map +1 -0
  138. package/dist/middleware/services/json-cleaner/parsers/index.js +20 -0
  139. package/dist/middleware/services/json-cleaner/parsers/index.js.map +1 -0
  140. package/dist/middleware/services/json-cleaner/parsers/json-extractor.parser.d.ts +32 -0
  141. package/dist/middleware/services/json-cleaner/parsers/json-extractor.parser.d.ts.map +1 -0
  142. package/dist/middleware/services/json-cleaner/parsers/json-extractor.parser.js +148 -0
  143. package/dist/middleware/services/json-cleaner/parsers/json-extractor.parser.js.map +1 -0
  144. package/dist/middleware/services/json-cleaner/parsers/markdown.parser.d.ts +19 -0
  145. package/dist/middleware/services/json-cleaner/parsers/markdown.parser.d.ts.map +1 -0
  146. package/dist/middleware/services/json-cleaner/parsers/markdown.parser.js +43 -0
  147. package/dist/middleware/services/json-cleaner/parsers/markdown.parser.js.map +1 -0
  148. package/dist/middleware/services/json-cleaner/parsers/think-tag.parser.d.ts +19 -0
  149. package/dist/middleware/services/json-cleaner/parsers/think-tag.parser.d.ts.map +1 -0
  150. package/dist/middleware/services/json-cleaner/parsers/think-tag.parser.js +37 -0
  151. package/dist/middleware/services/json-cleaner/parsers/think-tag.parser.js.map +1 -0
  152. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-context.d.ts +40 -0
  153. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-context.d.ts.map +1 -0
  154. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-context.js +138 -0
  155. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-context.js.map +1 -0
  156. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-engine.d.ts +74 -0
  157. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-engine.d.ts.map +1 -0
  158. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-engine.js +230 -0
  159. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-engine.js.map +1 -0
  160. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-recipe.d.ts +16 -0
  161. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-recipe.d.ts.map +1 -0
  162. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-recipe.js +179 -0
  163. package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-recipe.js.map +1 -0
  164. package/dist/middleware/services/json-cleaner/recipe-system/core/conditions.d.ts +88 -0
  165. package/dist/middleware/services/json-cleaner/recipe-system/core/conditions.d.ts.map +1 -0
  166. package/dist/middleware/services/json-cleaner/recipe-system/core/conditions.js +178 -0
  167. package/dist/middleware/services/json-cleaner/recipe-system/core/conditions.js.map +1 -0
  168. package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-builder.d.ts +51 -0
  169. package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-builder.d.ts.map +1 -0
  170. package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-builder.js +219 -0
  171. package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-builder.js.map +1 -0
  172. package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-steps.d.ts +62 -0
  173. package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-steps.d.ts.map +1 -0
  174. package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-steps.js +217 -0
  175. package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-steps.js.map +1 -0
  176. package/dist/middleware/services/json-cleaner/recipe-system/factory.d.ts +46 -0
  177. package/dist/middleware/services/json-cleaner/recipe-system/factory.d.ts.map +1 -0
  178. package/dist/middleware/services/json-cleaner/recipe-system/factory.js +52 -0
  179. package/dist/middleware/services/json-cleaner/recipe-system/factory.js.map +1 -0
  180. package/dist/middleware/services/json-cleaner/recipe-system/index.d.ts +12 -0
  181. package/dist/middleware/services/json-cleaner/recipe-system/index.d.ts.map +1 -0
  182. package/dist/middleware/services/json-cleaner/recipe-system/index.js +28 -0
  183. package/dist/middleware/services/json-cleaner/recipe-system/index.js.map +1 -0
  184. package/dist/middleware/services/json-cleaner/recipe-system/operations/detectors.d.ts +55 -0
  185. package/dist/middleware/services/json-cleaner/recipe-system/operations/detectors.d.ts.map +1 -0
  186. package/dist/middleware/services/json-cleaner/recipe-system/operations/detectors.js +348 -0
  187. package/dist/middleware/services/json-cleaner/recipe-system/operations/detectors.js.map +1 -0
  188. package/dist/middleware/services/json-cleaner/recipe-system/operations/fixers.d.ts +70 -0
  189. package/dist/middleware/services/json-cleaner/recipe-system/operations/fixers.d.ts.map +1 -0
  190. package/dist/middleware/services/json-cleaner/recipe-system/operations/fixers.js +568 -0
  191. package/dist/middleware/services/json-cleaner/recipe-system/operations/fixers.js.map +1 -0
  192. package/dist/middleware/services/json-cleaner/recipe-system/recipes/templates.d.ts +11 -0
  193. package/dist/middleware/services/json-cleaner/recipe-system/recipes/templates.d.ts.map +1 -0
  194. package/dist/middleware/services/json-cleaner/recipe-system/recipes/templates.js +103 -0
  195. package/dist/middleware/services/json-cleaner/recipe-system/recipes/templates.js.map +1 -0
  196. package/dist/middleware/services/json-cleaner/recipe-system/types/operation.types.d.ts +171 -0
  197. package/dist/middleware/services/json-cleaner/recipe-system/types/operation.types.d.ts.map +1 -0
  198. package/dist/middleware/services/json-cleaner/recipe-system/types/operation.types.js +3 -0
  199. package/dist/middleware/services/json-cleaner/recipe-system/types/operation.types.js.map +1 -0
  200. package/dist/middleware/services/json-cleaner/recipe-system/types/recipe.types.d.ts +224 -0
  201. package/dist/middleware/services/json-cleaner/recipe-system/types/recipe.types.d.ts.map +1 -0
  202. package/dist/middleware/services/json-cleaner/recipe-system/types/recipe.types.js +3 -0
  203. package/dist/middleware/services/json-cleaner/recipe-system/types/recipe.types.js.map +1 -0
  204. package/dist/middleware/services/json-cleaner/strategies/aggressive.cleaner.d.ts +29 -0
  205. package/dist/middleware/services/json-cleaner/strategies/aggressive.cleaner.d.ts.map +1 -0
  206. package/dist/middleware/services/json-cleaner/strategies/aggressive.cleaner.js +128 -0
  207. package/dist/middleware/services/json-cleaner/strategies/aggressive.cleaner.js.map +1 -0
  208. package/dist/middleware/services/json-cleaner/strategies/base-cleaner.strategy.d.ts +38 -0
  209. package/dist/middleware/services/json-cleaner/strategies/base-cleaner.strategy.d.ts.map +1 -0
  210. package/dist/middleware/services/json-cleaner/strategies/base-cleaner.strategy.js +18 -0
  211. package/dist/middleware/services/json-cleaner/strategies/base-cleaner.strategy.js.map +1 -0
  212. package/dist/middleware/services/json-cleaner/strategies/comma-fixer.cleaner.d.ts +65 -0
  213. package/dist/middleware/services/json-cleaner/strategies/comma-fixer.cleaner.d.ts.map +1 -0
  214. package/dist/middleware/services/json-cleaner/strategies/comma-fixer.cleaner.js +420 -0
  215. package/dist/middleware/services/json-cleaner/strategies/comma-fixer.cleaner.js.map +1 -0
  216. package/dist/middleware/services/json-cleaner/strategies/control-character.cleaner.d.ts +50 -0
  217. package/dist/middleware/services/json-cleaner/strategies/control-character.cleaner.d.ts.map +1 -0
  218. package/dist/middleware/services/json-cleaner/strategies/control-character.cleaner.js +416 -0
  219. package/dist/middleware/services/json-cleaner/strategies/control-character.cleaner.js.map +1 -0
  220. package/dist/middleware/services/json-cleaner/strategies/duplicate-key.cleaner.d.ts +27 -0
  221. package/dist/middleware/services/json-cleaner/strategies/duplicate-key.cleaner.d.ts.map +1 -0
  222. package/dist/middleware/services/json-cleaner/strategies/duplicate-key.cleaner.js +84 -0
  223. package/dist/middleware/services/json-cleaner/strategies/duplicate-key.cleaner.js.map +1 -0
  224. package/dist/middleware/services/json-cleaner/strategies/index.d.ts +8 -0
  225. package/dist/middleware/services/json-cleaner/strategies/index.d.ts.map +1 -0
  226. package/dist/middleware/services/json-cleaner/strategies/index.js +24 -0
  227. package/dist/middleware/services/json-cleaner/strategies/index.js.map +1 -0
  228. package/dist/middleware/services/json-cleaner/strategies/string-escaper.cleaner.d.ts +23 -0
  229. package/dist/middleware/services/json-cleaner/strategies/string-escaper.cleaner.d.ts.map +1 -0
  230. package/dist/middleware/services/json-cleaner/strategies/string-escaper.cleaner.js +65 -0
  231. package/dist/middleware/services/json-cleaner/strategies/string-escaper.cleaner.js.map +1 -0
  232. package/dist/middleware/services/json-cleaner/strategies/structural-repair.cleaner.d.ts +48 -0
  233. package/dist/middleware/services/json-cleaner/strategies/structural-repair.cleaner.d.ts.map +1 -0
  234. package/dist/middleware/services/json-cleaner/strategies/structural-repair.cleaner.js +188 -0
  235. package/dist/middleware/services/json-cleaner/strategies/structural-repair.cleaner.js.map +1 -0
  236. package/dist/middleware/services/json-cleaner/utils/console-logger.util.d.ts +50 -0
  237. package/dist/middleware/services/json-cleaner/utils/console-logger.util.d.ts.map +1 -0
  238. package/dist/middleware/services/json-cleaner/utils/console-logger.util.js +95 -0
  239. package/dist/middleware/services/json-cleaner/utils/console-logger.util.js.map +1 -0
  240. package/dist/middleware/services/json-cleaner/utils/control-char-diagnostics.util.d.ts +59 -0
  241. package/dist/middleware/services/json-cleaner/utils/control-char-diagnostics.util.d.ts.map +1 -0
  242. package/dist/middleware/services/json-cleaner/utils/control-char-diagnostics.util.js +326 -0
  243. package/dist/middleware/services/json-cleaner/utils/control-char-diagnostics.util.js.map +1 -0
  244. package/dist/middleware/services/json-cleaner/utils/index.d.ts +3 -0
  245. package/dist/middleware/services/json-cleaner/utils/index.d.ts.map +1 -0
  246. package/dist/middleware/services/json-cleaner/utils/index.js +19 -0
  247. package/dist/middleware/services/json-cleaner/utils/index.js.map +1 -0
  248. package/dist/middleware/services/json-cleaner/utils/json-inspector.util.d.ts +27 -0
  249. package/dist/middleware/services/json-cleaner/utils/json-inspector.util.d.ts.map +1 -0
  250. package/dist/middleware/services/json-cleaner/utils/json-inspector.util.js +139 -0
  251. package/dist/middleware/services/json-cleaner/utils/json-inspector.util.js.map +1 -0
  252. package/dist/middleware/services/llm/index.d.ts +5 -0
  253. package/dist/middleware/services/llm/index.d.ts.map +1 -0
  254. package/dist/middleware/services/llm/index.js +25 -0
  255. package/dist/middleware/services/llm/index.js.map +1 -0
  256. package/dist/middleware/services/llm/llm.service.d.ts +43 -0
  257. package/dist/middleware/services/llm/llm.service.d.ts.map +1 -0
  258. package/dist/middleware/services/llm/llm.service.js +70 -0
  259. package/dist/middleware/services/llm/llm.service.js.map +1 -0
  260. package/dist/middleware/services/llm/providers/base-llm-provider.d.ts +37 -0
  261. package/dist/middleware/services/llm/providers/base-llm-provider.d.ts.map +1 -0
  262. package/dist/middleware/services/llm/providers/base-llm-provider.js +41 -0
  263. package/dist/middleware/services/llm/providers/base-llm-provider.js.map +1 -0
  264. package/dist/middleware/services/llm/providers/index.d.ts +3 -0
  265. package/dist/middleware/services/llm/providers/index.d.ts.map +1 -0
  266. package/dist/middleware/services/llm/providers/index.js +25 -0
  267. package/dist/middleware/services/llm/providers/index.js.map +1 -0
  268. package/dist/middleware/services/llm/providers/ollama-provider.d.ts +39 -0
  269. package/dist/middleware/services/llm/providers/ollama-provider.d.ts.map +1 -0
  270. package/dist/middleware/services/llm/providers/ollama-provider.js +398 -0
  271. package/dist/middleware/services/llm/providers/ollama-provider.js.map +1 -0
  272. package/dist/middleware/services/llm/types/common.types.d.ts +81 -0
  273. package/dist/middleware/services/llm/types/common.types.d.ts.map +1 -0
  274. package/dist/middleware/services/llm/types/common.types.js +17 -0
  275. package/dist/middleware/services/llm/types/common.types.js.map +1 -0
  276. package/dist/middleware/services/llm/types/index.d.ts +3 -0
  277. package/dist/middleware/services/llm/types/index.d.ts.map +1 -0
  278. package/dist/middleware/services/llm/types/index.js +21 -0
  279. package/dist/middleware/services/llm/types/index.js.map +1 -0
  280. package/dist/middleware/services/llm/types/ollama.types.d.ts +48 -0
  281. package/dist/middleware/services/llm/types/ollama.types.d.ts.map +1 -0
  282. package/dist/middleware/services/llm/types/ollama.types.js +8 -0
  283. package/dist/middleware/services/llm/types/ollama.types.js.map +1 -0
  284. package/dist/middleware/services/llm/utils/debug-llm.utils.d.ts +42 -0
  285. package/dist/middleware/services/llm/utils/debug-llm.utils.d.ts.map +1 -0
  286. package/dist/middleware/services/llm/utils/debug-llm.utils.js +325 -0
  287. package/dist/middleware/services/llm/utils/debug-llm.utils.js.map +1 -0
  288. package/dist/middleware/services/llm/utils/index.d.ts +3 -0
  289. package/dist/middleware/services/llm/utils/index.d.ts.map +1 -0
  290. package/dist/middleware/services/llm/utils/index.js +19 -0
  291. package/dist/middleware/services/llm/utils/index.js.map +1 -0
  292. package/dist/middleware/services/llm/utils/text-analysis.utils.d.ts +75 -0
  293. package/dist/middleware/services/llm/utils/text-analysis.utils.d.ts.map +1 -0
  294. package/dist/middleware/services/llm/utils/text-analysis.utils.js +197 -0
  295. package/dist/middleware/services/llm/utils/text-analysis.utils.js.map +1 -0
  296. package/dist/middleware/services/model-parameter-manager/index.d.ts +2 -0
  297. package/dist/middleware/services/model-parameter-manager/index.d.ts.map +1 -0
  298. package/dist/middleware/services/model-parameter-manager/index.js +18 -0
  299. package/dist/middleware/services/model-parameter-manager/index.js.map +1 -0
  300. package/dist/middleware/services/model-parameter-manager/model-parameter-manager.service.d.ts +165 -0
  301. package/dist/middleware/services/model-parameter-manager/model-parameter-manager.service.d.ts.map +1 -0
  302. package/dist/middleware/services/model-parameter-manager/model-parameter-manager.service.js +325 -0
  303. package/dist/middleware/services/model-parameter-manager/model-parameter-manager.service.js.map +1 -0
  304. package/dist/middleware/services/request-formatter/index.d.ts +2 -0
  305. package/dist/middleware/services/request-formatter/index.d.ts.map +1 -0
  306. package/dist/middleware/services/request-formatter/index.js +18 -0
  307. package/dist/middleware/services/request-formatter/index.js.map +1 -0
  308. package/dist/middleware/services/request-formatter/request-formatter.service.d.ts +71 -0
  309. package/dist/middleware/services/request-formatter/request-formatter.service.d.ts.map +1 -0
  310. package/dist/middleware/services/request-formatter/request-formatter.service.js +230 -0
  311. package/dist/middleware/services/request-formatter/request-formatter.service.js.map +1 -0
  312. package/dist/middleware/services/response-processor.service.d.ts +106 -0
  313. package/dist/middleware/services/response-processor.service.d.ts.map +1 -0
  314. package/dist/middleware/services/response-processor.service.js +236 -0
  315. package/dist/middleware/services/response-processor.service.js.map +1 -0
  316. package/dist/middleware/services/token-estimator/index.d.ts +2 -0
  317. package/dist/middleware/services/token-estimator/index.d.ts.map +1 -0
  318. package/dist/middleware/services/token-estimator/index.js +18 -0
  319. package/dist/middleware/services/token-estimator/index.js.map +1 -0
  320. package/dist/middleware/services/token-estimator/token-estimator.service.d.ts +97 -0
  321. package/dist/middleware/services/token-estimator/token-estimator.service.d.ts.map +1 -0
  322. package/dist/middleware/services/token-estimator/token-estimator.service.js +190 -0
  323. package/dist/middleware/services/token-estimator/token-estimator.service.js.map +1 -0
  324. package/dist/middleware/services/use-case-metrics-logger/index.d.ts +2 -0
  325. package/dist/middleware/services/use-case-metrics-logger/index.d.ts.map +1 -0
  326. package/dist/middleware/services/use-case-metrics-logger/index.js +18 -0
  327. package/dist/middleware/services/use-case-metrics-logger/index.js.map +1 -0
  328. package/dist/middleware/services/use-case-metrics-logger/use-case-metrics-logger.service.d.ts +89 -0
  329. package/dist/middleware/services/use-case-metrics-logger/use-case-metrics-logger.service.d.ts.map +1 -0
  330. package/dist/middleware/services/use-case-metrics-logger/use-case-metrics-logger.service.js +112 -0
  331. package/dist/middleware/services/use-case-metrics-logger/use-case-metrics-logger.service.js.map +1 -0
  332. package/dist/middleware/shared/config/app.config.d.ts +3 -0
  333. package/dist/middleware/shared/config/app.config.d.ts.map +1 -0
  334. package/dist/middleware/shared/config/app.config.js +76 -0
  335. package/dist/middleware/shared/config/app.config.js.map +1 -0
  336. package/dist/middleware/shared/config/index.d.ts +4 -0
  337. package/dist/middleware/shared/config/index.d.ts.map +1 -0
  338. package/dist/middleware/shared/config/index.js +21 -0
  339. package/dist/middleware/shared/config/index.js.map +1 -0
  340. package/dist/middleware/shared/config/logging.config.d.ts +49 -0
  341. package/dist/middleware/shared/config/logging.config.d.ts.map +1 -0
  342. package/dist/middleware/shared/config/logging.config.js +16 -0
  343. package/dist/middleware/shared/config/logging.config.js.map +1 -0
  344. package/dist/middleware/shared/config/models.config.d.ts +19 -0
  345. package/dist/middleware/shared/config/models.config.d.ts.map +1 -0
  346. package/dist/middleware/shared/config/models.config.js +39 -0
  347. package/dist/middleware/shared/config/models.config.js.map +1 -0
  348. package/dist/middleware/shared/constants/index.d.ts +2 -0
  349. package/dist/middleware/shared/constants/index.d.ts.map +1 -0
  350. package/dist/middleware/shared/constants/index.js +19 -0
  351. package/dist/middleware/shared/constants/index.js.map +1 -0
  352. package/dist/middleware/shared/constants/json-formatting.constants.d.ts +36 -0
  353. package/dist/middleware/shared/constants/json-formatting.constants.d.ts.map +1 -0
  354. package/dist/middleware/shared/constants/json-formatting.constants.js +81 -0
  355. package/dist/middleware/shared/constants/json-formatting.constants.js.map +1 -0
  356. package/dist/middleware/shared/types/base-request.types.d.ts +27 -0
  357. package/dist/middleware/shared/types/base-request.types.d.ts.map +1 -0
  358. package/dist/middleware/shared/types/base-request.types.js +3 -0
  359. package/dist/middleware/shared/types/base-request.types.js.map +1 -0
  360. package/dist/middleware/shared/types/client-info.d.ts +8 -0
  361. package/dist/middleware/shared/types/client-info.d.ts.map +1 -0
  362. package/dist/middleware/shared/types/client-info.js +3 -0
  363. package/dist/middleware/shared/types/client-info.js.map +1 -0
  364. package/dist/middleware/shared/types/index.d.ts +43 -0
  365. package/dist/middleware/shared/types/index.d.ts.map +1 -0
  366. package/dist/middleware/shared/types/index.js +20 -0
  367. package/dist/middleware/shared/types/index.js.map +1 -0
  368. package/dist/middleware/shared/utils/http.utils.d.ts +25 -0
  369. package/dist/middleware/shared/utils/http.utils.d.ts.map +1 -0
  370. package/dist/middleware/shared/utils/http.utils.js +44 -0
  371. package/dist/middleware/shared/utils/http.utils.js.map +1 -0
  372. package/dist/middleware/shared/utils/index.d.ts +5 -0
  373. package/dist/middleware/shared/utils/index.d.ts.map +1 -0
  374. package/dist/middleware/shared/utils/index.js +22 -0
  375. package/dist/middleware/shared/utils/index.js.map +1 -0
  376. package/dist/middleware/shared/utils/logging.utils.d.ts +30 -0
  377. package/dist/middleware/shared/utils/logging.utils.d.ts.map +1 -0
  378. package/dist/middleware/shared/utils/logging.utils.js +91 -0
  379. package/dist/middleware/shared/utils/logging.utils.js.map +1 -0
  380. package/dist/middleware/shared/utils/memory-management.utils.d.ts +10 -0
  381. package/dist/middleware/shared/utils/memory-management.utils.d.ts.map +1 -0
  382. package/dist/middleware/shared/utils/memory-management.utils.js +31 -0
  383. package/dist/middleware/shared/utils/memory-management.utils.js.map +1 -0
  384. package/dist/middleware/shared/utils/validation.utils.d.ts +12 -0
  385. package/dist/middleware/shared/utils/validation.utils.d.ts.map +1 -0
  386. package/dist/middleware/shared/utils/validation.utils.js +36 -0
  387. package/dist/middleware/shared/utils/validation.utils.js.map +1 -0
  388. package/dist/middleware/usecases/base/base-ai.usecase.d.ts +72 -0
  389. package/dist/middleware/usecases/base/base-ai.usecase.d.ts.map +1 -0
  390. package/dist/middleware/usecases/base/base-ai.usecase.js +125 -0
  391. package/dist/middleware/usecases/base/base-ai.usecase.js.map +1 -0
  392. package/dist/middleware/usecases/base/index.d.ts +2 -0
  393. package/dist/middleware/usecases/base/index.d.ts.map +1 -0
  394. package/dist/middleware/usecases/base/index.js +18 -0
  395. package/dist/middleware/usecases/base/index.js.map +1 -0
  396. package/package.json +97 -0
package/.env.example ADDED
@@ -0,0 +1,21 @@
1
+ # Server Configuration
2
+ PORT=3000
3
+ NODE_ENV=development
4
+
5
+ # Logging Configuration
6
+ LOG_LEVEL=info
7
+
8
+ # LLM Provider Configuration (Ollama Example)
9
+ # IMPORTANT: MODEL1_NAME is REQUIRED for the middleware to work
10
+ MODEL1_NAME=phi3:mini # Required: Your model name (e.g., phi3:mini, llama3:8b, gemma2:2b)
11
+ MODEL1_URL=http://localhost:11434 # Optional: Defaults to localhost:11434 (Ollama default)
12
+ MODEL1_TOKEN=your_model1_token_here # Optional: For authenticated providers
13
+
14
+ # Authentication (Optional)
15
+ AUTH_VALIDATION_TYPE=none
16
+ STATIC_API_KEY=your_static_api_key_here
17
+
18
+ # Database Logging (Optional)
19
+ SUPABASE_URL=your_supabase_url_here
20
+ SUPABASE_KEY=your_supabase_anon_key_here
21
+ SUPABASE_SERVICE_KEY=your_supabase_service_key_here
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Scribomate Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,629 @@
1
+ <div align="center">
2
+
3
+ # 🚀 LLM Middleware
4
+
5
+ *A comprehensive TypeScript middleware library for building robust multi-provider LLM backends with support for Ollama, OpenAI, Anthropic, and Google. Features advanced JSON cleaning, logging, error handling, and more.*
6
+
7
+ <!-- Horizontal Badge Navigation Bar -->
8
+ [![npm version](https://img.shields.io/npm/v/@loonylabs/llm-middleware.svg?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@loonylabs/llm-middleware)
9
+ [![npm downloads](https://img.shields.io/npm/dm/@loonylabs/llm-middleware.svg?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@loonylabs/llm-middleware)
10
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.7+-blue.svg?style=for-the-badge&logo=typescript&logoColor=white)](#-features)
11
+ [![Node.js](https://img.shields.io/badge/Node.js-18+-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)](#-prerequisites)
12
+ [![MIT License](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge&logo=opensource&logoColor=white)](#-license)
13
+ [![GitHub](https://img.shields.io/badge/GitHub-Repository-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/loonylabs-dev/llm-middleware)
14
+
15
+ </div>
16
+
17
+ <!-- Table of Contents -->
18
+ <details>
19
+ <summary>📋 <strong>Table of Contents</strong></summary>
20
+
21
+ - [✨ Features](#-features)
22
+ - [🚀 Quick Start](#-quick-start)
23
+ - [📋 Prerequisites](#-prerequisites)
24
+ - [⚙️ Configuration](#️-configuration)
25
+ - [🏗️ Architecture](#️-architecture)
26
+ - [📖 Documentation](#-documentation)
27
+ - [🧪 Testing and Examples](#-testing-and-examples)
28
+ - [🔧 Advanced Features](#-advanced-features)
29
+ - [🤝 Contributing](#-contributing)
30
+ - [📄 License](#-license)
31
+ - [🙏 Acknowledgments](#-acknowledgments)
32
+ - [🔗 Links](#-links)
33
+
34
+ </details>
35
+
36
+ ---
37
+
38
+ ## ✨ Features
39
+
40
+ - 🏗️ **Clean Architecture**: Base classes and interfaces for scalable AI applications
41
+ - 🤖 **Multi-Provider Architecture**: Extensible provider system with strategy pattern
42
+ - ✅ **Ollama**: Fully supported with comprehensive parameter control
43
+ - 🔜 **OpenAI, Anthropic, Google**: Planned for future releases
44
+ - 🔌 **Pluggable**: Easy to add custom providers - see [LLM Providers Guide](docs/LLM_PROVIDERS.md)
45
+ - 🧹 **JSON Cleaning**: Recipe-based JSON repair system with automatic strategy selection
46
+ - 🎨 **FlatFormatter System**: Advanced data formatting for LLM consumption
47
+ - 📊 **Comprehensive Logging**: Multi-level logging with metadata support
48
+ - ⚙️ **Configuration Management**: Flexible model and application configuration
49
+ - 🛡️ **Error Handling**: Robust error handling and recovery mechanisms
50
+ - 🔧 **TypeScript First**: Full type safety throughout the entire stack
51
+ - 📦 **Modular Design**: Use only what you need
52
+ - 🧪 **Testing Ready**: Includes example implementations and test utilities
53
+
54
+ ## 🚀 Quick Start
55
+
56
+ ### Installation
57
+
58
+ Install from npm:
59
+
60
+ ```bash
61
+ npm install @loonylabs/llm-middleware
62
+ ```
63
+
64
+ Or install directly from GitHub:
65
+
66
+ ```bash
67
+ npm install github:loonylabs-dev/llm-middleware
68
+ ```
69
+
70
+ Or using a specific version/tag:
71
+
72
+ ```bash
73
+ npm install github:loonylabs-dev/llm-middleware#v1.3.0
74
+ ```
75
+
76
+ ### Basic Usage
77
+
78
+ ```typescript
79
+ import { BaseAIUseCase, BaseAIRequest, BaseAIResult } from '@loonylabs/llm-middleware';
80
+
81
+ // Define your request/response interfaces
82
+ interface MyRequest extends BaseAIRequest<string> {
83
+ message: string;
84
+ }
85
+
86
+ interface MyResult extends BaseAIResult {
87
+ response: string;
88
+ }
89
+
90
+ // Create your use case
91
+ class MyChatUseCase extends BaseAIUseCase<string, MyRequest, MyResult> {
92
+ protected readonly systemMessage = "You are a helpful assistant.";
93
+
94
+ // Required: return user message template function
95
+ protected getUserTemplate(): (formattedPrompt: string) => string {
96
+ return (message) => message;
97
+ }
98
+
99
+ protected formatUserMessage(prompt: any): string {
100
+ return typeof prompt === 'string' ? prompt : prompt.message;
101
+ }
102
+
103
+ protected createResult(content: string, usedPrompt: string, thinking?: string): MyResult {
104
+ return {
105
+ generatedContent: content,
106
+ model: this.modelConfig.name,
107
+ usedPrompt: usedPrompt,
108
+ thinking: thinking,
109
+ response: content
110
+ };
111
+ }
112
+ }
113
+ ```
114
+
115
+ <details>
116
+ <summary><strong>🔌 Using the Multi-Provider Architecture</strong></summary>
117
+
118
+ ```typescript
119
+ import { llmService, LLMProvider, ollamaProvider } from '@loonylabs/llm-middleware';
120
+
121
+ // Option 1: Use the LLM Service orchestrator (recommended for flexibility)
122
+ const response1 = await llmService.call(
123
+ "Write a haiku about coding",
124
+ {
125
+ provider: LLMProvider.OLLAMA, // Explicitly specify provider
126
+ model: "llama2",
127
+ temperature: 0.7
128
+ }
129
+ );
130
+
131
+ // Option 2: Use provider directly for provider-specific features
132
+ const response2 = await ollamaProvider.callWithSystemMessage(
133
+ "Write a haiku about coding",
134
+ "You are a creative poet",
135
+ {
136
+ model: "llama2",
137
+ temperature: 0.7,
138
+ // Ollama-specific parameters
139
+ repeat_penalty: 1.1,
140
+ top_k: 40
141
+ }
142
+ );
143
+
144
+ // Set default provider for your application
145
+ llmService.setDefaultProvider(LLMProvider.OLLAMA);
146
+
147
+ // Now calls use Ollama by default
148
+ const response3 = await llmService.call("Hello!", { model: "llama2" });
149
+ ```
150
+
151
+ For more details on the multi-provider system, see the [LLM Providers Guide](docs/LLM_PROVIDERS.md).
152
+
153
+ </details>
154
+
155
+ <details>
156
+ <summary><strong>🎭 Advanced Example with FlatFormatter</strong></summary>
157
+
158
+ ```typescript
159
+ import {
160
+ FlatFormatter,
161
+ personPreset
162
+ } from '@loonylabs/llm-middleware';
163
+
164
+ class ProfileGeneratorUseCase extends BaseAIUseCase {
165
+ protected readonly systemMessage = `You are a professional profile creator.
166
+
167
+ IMPORTANT: Respond with ONLY valid JSON following this schema:
168
+ {
169
+ "name": "Person name",
170
+ "title": "Professional title",
171
+ "summary": "Brief professional overview",
172
+ "skills": "Key skills and expertise",
173
+ "achievements": "Notable accomplishments"
174
+ }`;
175
+
176
+ // Use FlatFormatter and presets for rich context building
177
+ protected formatUserMessage(prompt: any): string {
178
+ const { person, preferences, guidelines } = prompt;
179
+
180
+ const contextSections = [
181
+ // Use preset for structured data
182
+ personPreset.formatForLLM(person, "## PERSON INFO:"),
183
+
184
+ // Use FlatFormatter for custom structures
185
+ `## PREFERENCES:\n${FlatFormatter.flatten(preferences, {
186
+ format: 'bulleted',
187
+ keyValueSeparator: ': '
188
+ })}`,
189
+
190
+ // Format guidelines with FlatFormatter
191
+ `## GUIDELINES:\n${FlatFormatter.flatten(
192
+ guidelines.map(g => ({
193
+ guideline: g,
194
+ priority: "MUST FOLLOW"
195
+ })),
196
+ {
197
+ format: 'numbered',
198
+ entryTitleKey: 'guideline',
199
+ ignoredKeys: ['guideline']
200
+ }
201
+ )}`
202
+ ];
203
+
204
+ return contextSections.join('\n\n');
205
+ }
206
+
207
+ protected createResult(content: string, usedPrompt: string, thinking?: string): MyResult {
208
+ return {
209
+ generatedContent: content,
210
+ model: this.modelConfig.name,
211
+ usedPrompt,
212
+ thinking,
213
+ profile: JSON.parse(content)
214
+ };
215
+ }
216
+ }
217
+
218
+ // Use it
219
+ const profileGen = new ProfileGeneratorUseCase();
220
+ const result = await profileGen.execute({
221
+ prompt: {
222
+ person: { name: "Alice", occupation: "Engineer" },
223
+ preferences: { tone: "professional", length: "concise" },
224
+ guidelines: ["Highlight technical skills", "Include leadership"]
225
+ },
226
+ authToken: "optional-token"
227
+ });
228
+ ```
229
+
230
+ </details>
231
+
232
+ ## 📋 Prerequisites
233
+
234
+ <details>
235
+ <summary><strong>📦 Required Dependencies</strong></summary>
236
+
237
+ - **Node.js** 18+
238
+ - **TypeScript** 4.9+
239
+ - **LLM Provider** configured (e.g., Ollama server for Ollama provider)
240
+
241
+ </details>
242
+
243
+ ## ⚙️ Configuration
244
+
245
+ <details>
246
+ <summary><strong>🔧 Environment Setup</strong></summary>
247
+
248
+ Create a `.env` file in your project root:
249
+
250
+ ```env
251
+ # Server Configuration
252
+ PORT=3000
253
+ NODE_ENV=development
254
+
255
+ # Logging
256
+ LOG_LEVEL=info
257
+
258
+ # LLM Provider Configuration (REQUIRED)
259
+ MODEL1_NAME=phi3:mini # Required: Your model name
260
+ MODEL1_URL=http://localhost:11434 # Optional: Defaults to localhost (Ollama)
261
+ MODEL1_TOKEN=optional-auth-token # Optional: For authenticated providers
262
+ ```
263
+
264
+ **Multi-Provider Support:** Currently, the middleware is fully integrated with Ollama. The architecture supports multiple providers (OpenAI, Anthropic, Google coming soon). See the [LLM Providers Guide](docs/LLM_PROVIDERS.md) for details on the provider system and how to use or add providers.
265
+
266
+ </details>
267
+
268
+ ## 🏗️ Architecture
269
+
270
+ The middleware follows **Clean Architecture** principles:
271
+
272
+ ```
273
+ src/
274
+ ├── middleware/
275
+ │ ├── controllers/base/ # Base HTTP controllers
276
+ │ ├── usecases/base/ # Base AI use cases
277
+ │ ├── services/ # External service integrations
278
+ │ │ ├── llm/ # LLM provider services (Ollama, OpenAI, etc.)
279
+ │ │ ├── json-cleaner/ # JSON repair and validation
280
+ │ │ └── response-processor/ # AI response processing
281
+ │ └── shared/ # Common utilities and types
282
+ │ ├── config/ # Configuration management
283
+ │ ├── types/ # TypeScript interfaces
284
+ │ └── utils/ # Utility functions
285
+ └── examples/ # Example implementations
286
+ └── simple-chat/ # Basic chat example
287
+ ```
288
+
289
+ ## 📖 Documentation
290
+
291
+ - [Getting Started Guide](docs/GETTING_STARTED.md)
292
+ - [Architecture Overview](docs/ARCHITECTURE.md)
293
+ - [LLM Providers Guide](docs/LLM_PROVIDERS.md) - Multi-provider architecture and how to use different LLM services
294
+ - [LLM Provider Parameters](docs/OLLAMA_PARAMETERS.md) - Ollama-specific parameter reference and presets
295
+ - [Request Formatting Guide](docs/REQUEST_FORMATTING.md) - FlatFormatter vs RequestFormatterService
296
+ - [Performance Monitoring](docs/PERFORMANCE_MONITORING.md) - Metrics and logging
297
+ - [API Reference](docs/API_REFERENCE.md)
298
+ - [Examples](docs/EXAMPLES.md)
299
+ - [CHANGELOG](CHANGELOG.md) - Release notes and breaking changes
300
+
301
+ ## 🧪 Testing
302
+
303
+ The middleware includes comprehensive test suites covering unit tests, integration tests, robustness tests, and end-to-end workflows.
304
+
305
+ ### Quick Start
306
+
307
+ ```bash
308
+ # Build the middleware first
309
+ npm run build
310
+
311
+ # Run all automated tests
312
+ npm run test:all
313
+
314
+ # Run unit tests only
315
+ npm run test:unit
316
+ ```
317
+
318
+ **📖 For complete testing documentation**, see **[tests/README.md](tests/README.md)**
319
+
320
+ The test documentation includes:
321
+ - 📋 Quick reference table for all tests
322
+ - 🚀 Detailed test descriptions and prerequisites
323
+ - ⚠️ Troubleshooting guide
324
+ - 🔬 Development workflow best practices
325
+
326
+ ### 🐦 Tweet Generator Example
327
+
328
+ <details>
329
+ <summary><strong>💬 Demonstrating Token Limiting with Social Media Content</strong></summary>
330
+
331
+ The **Tweet Generator** example showcases parameter configuration for controlling output length:
332
+
333
+ ```typescript
334
+ import { TweetGeneratorUseCase } from '@loonylabs/llm-middleware';
335
+
336
+ const tweetGenerator = new TweetGeneratorUseCase();
337
+
338
+ const result = await tweetGenerator.execute({
339
+ prompt: 'The importance of clean code in software development'
340
+ });
341
+
342
+ console.log(result.tweet); // Generated tweet
343
+ console.log(result.characterCount); // Character count
344
+ console.log(result.withinLimit); // true if ≤ 280 chars
345
+ ```
346
+
347
+ **Key Features:**
348
+ - 🎯 **Token Limiting**: Uses `num_predict: 70` to limit output to ~280 characters
349
+ - 📊 **Character Validation**: Automatically checks if output is within Twitter's limit
350
+ - 🎨 **Marketing Preset**: Optimized parameters for engaging, concise content
351
+ - ✅ **Testable**: Integration test verifies parameter effectiveness
352
+
353
+ **Parameter Configuration:**
354
+ ```typescript
355
+ protected getParameterOverrides(): ModelParameterOverrides {
356
+ return {
357
+ num_predict: 70, // Limit to ~280 characters
358
+ temperatureOverride: 0.7,
359
+ repeatPenalty: 1.3,
360
+ frequencyPenalty: 0.3,
361
+ presencePenalty: 0.2,
362
+ topP: 0.9,
363
+ topK: 50,
364
+ repeatLastN: 32
365
+ };
366
+ }
367
+ ```
368
+
369
+ This example demonstrates:
370
+ - How to configure parameters for specific output requirements
371
+ - Token limiting as a practical use case
372
+ - Validation and testing of parameter effectiveness
373
+ - Real-world application (social media content generation)
374
+
375
+ See `src/examples/tweet-generator/` for full implementation.
376
+
377
+ </details>
378
+
379
+ ### 🎯 Example Application
380
+
381
+ <details>
382
+ <summary><strong>🚀 Quick Example Setup</strong></summary>
383
+
384
+ Run the included examples:
385
+
386
+ ```bash
387
+ # Clone the repository
388
+ git clone https://github.com/loonylabs-dev/llm-middleware.git
389
+ cd llm-middleware
390
+
391
+ # Install dependencies
392
+ npm install
393
+
394
+ # Copy environment template
395
+ cp .env.example .env
396
+
397
+ # Start your LLM provider (example for Ollama)
398
+ ollama serve
399
+
400
+ # Run the example
401
+ npm run dev
402
+ ```
403
+
404
+ Test the API:
405
+ ```bash
406
+ curl -X POST http://localhost:3000/api/chat \
407
+ -H "Content-Type: application/json" \
408
+ -d '{"message": "Hello, how are you?"}'
409
+ ```
410
+
411
+ </details>
412
+
413
+ ## 🔧 Advanced Features
414
+
415
+ <details>
416
+ <summary><strong>🧹 Recipe-Based JSON Cleaning System</strong></summary>
417
+
418
+ Advanced JSON repair with automatic strategy selection and modular operations:
419
+
420
+ ```typescript
421
+ import { JsonCleanerService, JsonCleanerFactory } from '@loonylabs/llm-middleware';
422
+
423
+ // Simple usage (async - uses new recipe system with fallback)
424
+ const result = await JsonCleanerService.processResponseAsync(malformedJson);
425
+ console.log(result.cleanedJson);
426
+
427
+ // Legacy sync method (still works)
428
+ const cleaned = JsonCleanerService.processResponse(malformedJson);
429
+
430
+ // Advanced: Quick clean with automatic recipe selection
431
+ const result = await JsonCleanerFactory.quickClean(malformedJson);
432
+ console.log('Success:', result.success);
433
+ console.log('Confidence:', result.confidence);
434
+ console.log('Changes:', result.totalChanges);
435
+ ```
436
+
437
+ **Features:**
438
+ - 🎯 Automatic strategy selection (Conservative/Aggressive/Adaptive)
439
+ - 🔧 Modular detectors & fixers for specific problems
440
+ - ✨ Extracts JSON from Markdown/Think-Tags
441
+ - 🔄 Checkpoint/Rollback support for safe repairs
442
+ - 📊 Detailed metrics (confidence, quality, performance)
443
+ - 🛡️ Fallback to legacy system for compatibility
444
+
445
+ **Available Templates:**
446
+ ```typescript
447
+ import { RecipeTemplates } from '@loonylabs/llm-middleware';
448
+
449
+ const conservativeRecipe = RecipeTemplates.conservative();
450
+ const aggressiveRecipe = RecipeTemplates.aggressive();
451
+ const adaptiveRecipe = RecipeTemplates.adaptive();
452
+ ```
453
+
454
+ See [Recipe System Documentation](src/middleware/services/json-cleaner/recipe-system/README.md) for details.
455
+
456
+ </details>
457
+
458
+ <details>
459
+ <summary><strong>📝 Request Formatting (FlatFormatter & RequestFormatterService)</strong></summary>
460
+
461
+ **For simple data:** Use [FlatFormatter](src/middleware/services/flat-formatter/README.md)
462
+ ```typescript
463
+ const flat = FlatFormatter.flatten({ name: 'Alice', age: 30 });
464
+ ```
465
+
466
+ **For complex nested prompts:** Use RequestFormatterService
467
+ ```typescript
468
+ import { RequestFormatterService } from '@loonylabs/llm-middleware';
469
+
470
+ const prompt = {
471
+ context: { genre: 'sci-fi', tone: 'dark' },
472
+ instruction: 'Write an opening'
473
+ };
474
+
475
+ const formatted = RequestFormatterService.formatUserMessage(
476
+ prompt, (s) => s, 'MyUseCase'
477
+ );
478
+ // Outputs: ## CONTEXT:\ngenre: sci-fi\ntone: dark\n\n## INSTRUCTION:\nWrite an opening
479
+ ```
480
+
481
+ See [Request Formatting Guide](docs/REQUEST_FORMATTING.md) for details.
482
+
483
+ </details>
484
+
485
+ <details>
486
+ <summary><strong>📊 Performance Monitoring & Metrics</strong></summary>
487
+
488
+ Automatic performance tracking with `UseCaseMetricsLoggerService`:
489
+
490
+ ```typescript
491
+ // Automatically logged for all use cases:
492
+ // - Execution time
493
+ // - Token usage (input/output)
494
+ // - Generation speed (tokens/sec)
495
+ // - Parameters used
496
+ ```
497
+
498
+ Metrics appear in console logs:
499
+ ```
500
+ ✅ Completed AI use case [MyUseCase = phi3:mini] SUCCESS
501
+ Time: 2.5s | Input: 120 tokens | Output: 85 tokens | Speed: 34.0 tokens/sec
502
+ ```
503
+
504
+ See [Performance Monitoring Guide](docs/PERFORMANCE_MONITORING.md) for advanced usage.
505
+
506
+ </details>
507
+
508
+ <details>
509
+ <summary><strong>📊 Comprehensive Logging</strong></summary>
510
+
511
+ Multi-level logging with contextual metadata:
512
+
513
+ ```typescript
514
+ import { logger } from '@loonylabs/llm-middleware';
515
+
516
+ logger.info('Operation completed', {
517
+ context: 'MyService',
518
+ metadata: { userId: 123, duration: 150 }
519
+ });
520
+ ```
521
+
522
+ </details>
523
+
524
+ <details>
525
+ <summary><strong>⚙️ Model Configuration</strong></summary>
526
+
527
+ Flexible model management:
528
+
529
+ ```typescript
530
+ import { getModelConfig } from '@loonylabs/llm-middleware';
531
+
532
+ // MODEL1_NAME is required in .env or will throw error
533
+ const config = getModelConfig('MODEL1');
534
+ console.log(config.name); // Value from MODEL1_NAME env variable
535
+ console.log(config.baseUrl); // Value from MODEL1_URL or default localhost
536
+ ```
537
+
538
+ </details>
539
+
540
+ <details>
541
+ <summary><strong>🎛️ Parameter Configuration</strong></summary>
542
+
543
+ LLM-middleware provides fine-grained control over model parameters to optimize output for different use cases:
544
+
545
+ ```typescript
546
+ import { BaseAIUseCase, ModelParameterOverrides } from '@loonylabs/llm-middleware';
547
+
548
+ class MyUseCase extends BaseAIUseCase<MyRequest, MyResult> {
549
+ protected getParameterOverrides(): ModelParameterOverrides {
550
+ return {
551
+ temperatureOverride: 0.8, // Control creativity vs. determinism
552
+ repeatPenalty: 1.3, // Reduce word repetition
553
+ frequencyPenalty: 0.2, // Penalize frequent words
554
+ presencePenalty: 0.2, // Encourage topic diversity
555
+ topP: 0.92, // Nucleus sampling threshold
556
+ topK: 60, // Vocabulary selection limit
557
+ repeatLastN: 128 // Context window for repetition
558
+ };
559
+ }
560
+ }
561
+ ```
562
+
563
+ **Parameter Levels:**
564
+ - **Global defaults**: Set in `ModelParameterManagerService`
565
+ - **Use-case level**: Override via `getParameterOverrides()` method
566
+ - **Request level**: Pass parameters directly in requests
567
+
568
+ **Available Presets:**
569
+
570
+ ```typescript
571
+ import { ModelParameterManagerService } from '@loonylabs/llm-middleware';
572
+
573
+ // Use curated presets for common use cases
574
+ const creativeParams = ModelParameterManagerService.getDefaultParametersForType('creative_writing');
575
+ const factualParams = ModelParameterManagerService.getDefaultParametersForType('factual');
576
+ const poeticParams = ModelParameterManagerService.getDefaultParametersForType('poetic');
577
+ const dialogueParams = ModelParameterManagerService.getDefaultParametersForType('dialogue');
578
+ const technicalParams = ModelParameterManagerService.getDefaultParametersForType('technical');
579
+ const marketingParams = ModelParameterManagerService.getDefaultParametersForType('marketing');
580
+ ```
581
+
582
+ **Presets Include:**
583
+ - 📚 **Creative Writing**: Novels, stories, narrative fiction
584
+ - 📊 **Factual**: Reports, documentation, journalism
585
+ - 🎭 **Poetic**: Poetry, lyrics, artistic expression
586
+ - 💬 **Dialogue**: Character dialogue, conversational content
587
+ - 🔧 **Technical**: Code documentation, API references
588
+ - 📢 **Marketing**: Advertisements, promotional content
589
+
590
+ For detailed documentation about all parameters, value ranges, and preset configurations, see:
591
+ **[Provider Parameters Guide](./docs/OLLAMA_PARAMETERS.md)** (Ollama-specific)
592
+
593
+ </details>
594
+
595
+ ## 🤝 Contributing
596
+
597
+ We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.
598
+
599
+ 1. Fork the repository
600
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
601
+ 3. Commit your changes (`git commit -m 'Add some amazing feature'`)
602
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
603
+ 5. Open a Pull Request
604
+
605
+ ## 📄 License
606
+
607
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
608
+
609
+ ## 🙏 Acknowledgments
610
+
611
+ - [Ollama](https://ollama.ai/) for the amazing local LLM platform
612
+ - The open-source community for inspiration and contributions
613
+
614
+ ## 🔗 Links
615
+
616
+ - [📚 Documentation](https://github.com/loonylabs-dev/llm-middleware/docs)
617
+ - [🐛 Issues](https://github.com/loonylabs-dev/llm-middleware/issues)
618
+ - [📦 NPM Package](https://www.npmjs.com/package/llm-middleware)
619
+
620
+ ---
621
+
622
+ <div align="center">
623
+
624
+ **Made with ❤️ for the AI community**
625
+
626
+ [![GitHub stars](https://img.shields.io/github/stars/loonylabs-dev/llm-middleware?style=social)](https://github.com/loonylabs-dev/llm-middleware/stargazers)
627
+ [![Follow on GitHub](https://img.shields.io/github/followers/loonylabs-dev?style=social&label=Follow)](https://github.com/loonylabs-dev)
628
+
629
+ </div>
@@ -0,0 +1,9 @@
1
+ /**
2
+ * System message for character generation with detailed JSON schema
3
+ */
4
+ export declare const CHARACTER_GENERATOR_SYSTEM_MESSAGE: string;
5
+ /**
6
+ * User template - the formatted context is already complete from formatUserMessage
7
+ */
8
+ export declare const CHARACTER_GENERATOR_USER_TEMPLATE: (formattedContext: string) => string;
9
+ //# sourceMappingURL=character-generator.messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"character-generator.messages.d.ts","sourceRoot":"","sources":["../../../src/examples/character-generator/character-generator.messages.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,kCAAkC,QAuCrC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAAI,kBAAkB,MAAM,KAAG,MAA0B,CAAC"}