@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.
- package/.env.example +21 -0
- package/LICENSE +21 -0
- package/README.md +629 -0
- package/dist/examples/character-generator/character-generator.messages.d.ts +9 -0
- package/dist/examples/character-generator/character-generator.messages.d.ts.map +1 -0
- package/dist/examples/character-generator/character-generator.messages.js +54 -0
- package/dist/examples/character-generator/character-generator.messages.js.map +1 -0
- package/dist/examples/character-generator/character-generator.usecase.d.ts +129 -0
- package/dist/examples/character-generator/character-generator.usecase.d.ts.map +1 -0
- package/dist/examples/character-generator/character-generator.usecase.js +209 -0
- package/dist/examples/character-generator/character-generator.usecase.js.map +1 -0
- package/dist/examples/character-generator/create-character.messages.d.ts +11 -0
- package/dist/examples/character-generator/create-character.messages.d.ts.map +1 -0
- package/dist/examples/character-generator/create-character.messages.js +38 -0
- package/dist/examples/character-generator/create-character.messages.js.map +1 -0
- package/dist/examples/flat-formatter-demo/product-preset.example.d.ts +99 -0
- package/dist/examples/flat-formatter-demo/product-preset.example.d.ts.map +1 -0
- package/dist/examples/flat-formatter-demo/product-preset.example.js +85 -0
- package/dist/examples/flat-formatter-demo/product-preset.example.js.map +1 -0
- package/dist/examples/simple-chat/chat.controller.d.ts +15 -0
- package/dist/examples/simple-chat/chat.controller.d.ts.map +1 -0
- package/dist/examples/simple-chat/chat.controller.js +39 -0
- package/dist/examples/simple-chat/chat.controller.js.map +1 -0
- package/dist/examples/simple-chat/chat.messages.d.ts +10 -0
- package/dist/examples/simple-chat/chat.messages.d.ts.map +1 -0
- package/dist/examples/simple-chat/chat.messages.js +17 -0
- package/dist/examples/simple-chat/chat.messages.js.map +1 -0
- package/dist/examples/simple-chat/chat.usecase.d.ts +33 -0
- package/dist/examples/simple-chat/chat.usecase.d.ts.map +1 -0
- package/dist/examples/simple-chat/chat.usecase.js +40 -0
- package/dist/examples/simple-chat/chat.usecase.js.map +1 -0
- package/dist/examples/simple-chat/index.d.ts +3 -0
- package/dist/examples/simple-chat/index.d.ts.map +1 -0
- package/dist/examples/simple-chat/index.js +57 -0
- package/dist/examples/simple-chat/index.js.map +1 -0
- package/dist/examples/story-generator/story-generator.messages.d.ts +13 -0
- package/dist/examples/story-generator/story-generator.messages.d.ts.map +1 -0
- package/dist/examples/story-generator/story-generator.messages.js +41 -0
- package/dist/examples/story-generator/story-generator.messages.js.map +1 -0
- package/dist/examples/story-generator/story-generator.usecase.d.ts +115 -0
- package/dist/examples/story-generator/story-generator.usecase.d.ts.map +1 -0
- package/dist/examples/story-generator/story-generator.usecase.js +121 -0
- package/dist/examples/story-generator/story-generator.usecase.js.map +1 -0
- package/dist/examples/tweet-generator/tweet-generator.messages.d.ts +15 -0
- package/dist/examples/tweet-generator/tweet-generator.messages.d.ts.map +1 -0
- package/dist/examples/tweet-generator/tweet-generator.messages.js +40 -0
- package/dist/examples/tweet-generator/tweet-generator.messages.js.map +1 -0
- package/dist/examples/tweet-generator/tweet-generator.usecase.d.ts +92 -0
- package/dist/examples/tweet-generator/tweet-generator.usecase.d.ts.map +1 -0
- package/dist/examples/tweet-generator/tweet-generator.usecase.js +116 -0
- package/dist/examples/tweet-generator/tweet-generator.usecase.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/controllers/base/base.controller.d.ts +16 -0
- package/dist/middleware/controllers/base/base.controller.d.ts.map +1 -0
- package/dist/middleware/controllers/base/base.controller.js +38 -0
- package/dist/middleware/controllers/base/base.controller.js.map +1 -0
- package/dist/middleware/controllers/base/index.d.ts +2 -0
- package/dist/middleware/controllers/base/index.d.ts.map +1 -0
- package/dist/middleware/controllers/base/index.js +19 -0
- package/dist/middleware/controllers/base/index.js.map +1 -0
- package/dist/middleware/index.d.ts +7 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +27 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/services/data-flow-logger/data-flow-logger.service.d.ts +127 -0
- package/dist/middleware/services/data-flow-logger/data-flow-logger.service.d.ts.map +1 -0
- package/dist/middleware/services/data-flow-logger/data-flow-logger.service.js +341 -0
- package/dist/middleware/services/data-flow-logger/data-flow-logger.service.js.map +1 -0
- package/dist/middleware/services/data-flow-logger/index.d.ts +2 -0
- package/dist/middleware/services/data-flow-logger/index.d.ts.map +1 -0
- package/dist/middleware/services/data-flow-logger/index.js +18 -0
- package/dist/middleware/services/data-flow-logger/index.js.map +1 -0
- package/dist/middleware/services/flat-formatter/flat-formatter.service.d.ts +86 -0
- package/dist/middleware/services/flat-formatter/flat-formatter.service.d.ts.map +1 -0
- package/dist/middleware/services/flat-formatter/flat-formatter.service.js +333 -0
- package/dist/middleware/services/flat-formatter/flat-formatter.service.js.map +1 -0
- package/dist/middleware/services/flat-formatter/index.d.ts +4 -0
- package/dist/middleware/services/flat-formatter/index.d.ts.map +1 -0
- package/dist/middleware/services/flat-formatter/index.js +28 -0
- package/dist/middleware/services/flat-formatter/index.js.map +1 -0
- package/dist/middleware/services/flat-formatter/presets/base-preset.d.ts +68 -0
- package/dist/middleware/services/flat-formatter/presets/base-preset.d.ts.map +1 -0
- package/dist/middleware/services/flat-formatter/presets/base-preset.js +238 -0
- package/dist/middleware/services/flat-formatter/presets/base-preset.js.map +1 -0
- package/dist/middleware/services/flat-formatter/presets/index.d.ts +5 -0
- package/dist/middleware/services/flat-formatter/presets/index.d.ts.map +1 -0
- package/dist/middleware/services/flat-formatter/presets/index.js +28 -0
- package/dist/middleware/services/flat-formatter/presets/index.js.map +1 -0
- package/dist/middleware/services/flat-formatter/presets/types/entity-types.d.ts +23 -0
- package/dist/middleware/services/flat-formatter/presets/types/entity-types.d.ts.map +1 -0
- package/dist/middleware/services/flat-formatter/presets/types/entity-types.js +3 -0
- package/dist/middleware/services/flat-formatter/presets/types/entity-types.js.map +1 -0
- package/dist/middleware/services/flat-formatter/presets/types/processed-entity-types.d.ts +30 -0
- package/dist/middleware/services/flat-formatter/presets/types/processed-entity-types.d.ts.map +1 -0
- package/dist/middleware/services/flat-formatter/presets/types/processed-entity-types.js +3 -0
- package/dist/middleware/services/flat-formatter/presets/types/processed-entity-types.js.map +1 -0
- package/dist/middleware/services/index.d.ts +10 -0
- package/dist/middleware/services/index.d.ts.map +1 -0
- package/dist/middleware/services/index.js +28 -0
- package/dist/middleware/services/index.js.map +1 -0
- package/dist/middleware/services/json-cleaner/helpers/index.d.ts +3 -0
- package/dist/middleware/services/json-cleaner/helpers/index.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/helpers/index.js +19 -0
- package/dist/middleware/services/json-cleaner/helpers/index.js.map +1 -0
- package/dist/middleware/services/json-cleaner/helpers/json-cleaner.analyzer.d.ts +52 -0
- package/dist/middleware/services/json-cleaner/helpers/json-cleaner.analyzer.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/helpers/json-cleaner.analyzer.js +271 -0
- package/dist/middleware/services/json-cleaner/helpers/json-cleaner.analyzer.js.map +1 -0
- package/dist/middleware/services/json-cleaner/helpers/json-validation.helper.d.ts +83 -0
- package/dist/middleware/services/json-cleaner/helpers/json-validation.helper.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/helpers/json-validation.helper.js +326 -0
- package/dist/middleware/services/json-cleaner/helpers/json-validation.helper.js.map +1 -0
- package/dist/middleware/services/json-cleaner/index.d.ts +9 -0
- package/dist/middleware/services/json-cleaner/index.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/index.js +31 -0
- package/dist/middleware/services/json-cleaner/index.js.map +1 -0
- package/dist/middleware/services/json-cleaner/json-cleaner-logger.d.ts +59 -0
- package/dist/middleware/services/json-cleaner/json-cleaner-logger.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/json-cleaner-logger.js +164 -0
- package/dist/middleware/services/json-cleaner/json-cleaner-logger.js.map +1 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.orchestrator.d.ts +56 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.orchestrator.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.orchestrator.js +178 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.orchestrator.js.map +1 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.service.d.ts +94 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.service.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.service.js +175 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.service.js.map +1 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.types.d.ts +92 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.types.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.types.js +3 -0
- package/dist/middleware/services/json-cleaner/json-cleaner.types.js.map +1 -0
- package/dist/middleware/services/json-cleaner/parsers/index.d.ts +4 -0
- package/dist/middleware/services/json-cleaner/parsers/index.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/parsers/index.js +20 -0
- package/dist/middleware/services/json-cleaner/parsers/index.js.map +1 -0
- package/dist/middleware/services/json-cleaner/parsers/json-extractor.parser.d.ts +32 -0
- package/dist/middleware/services/json-cleaner/parsers/json-extractor.parser.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/parsers/json-extractor.parser.js +148 -0
- package/dist/middleware/services/json-cleaner/parsers/json-extractor.parser.js.map +1 -0
- package/dist/middleware/services/json-cleaner/parsers/markdown.parser.d.ts +19 -0
- package/dist/middleware/services/json-cleaner/parsers/markdown.parser.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/parsers/markdown.parser.js +43 -0
- package/dist/middleware/services/json-cleaner/parsers/markdown.parser.js.map +1 -0
- package/dist/middleware/services/json-cleaner/parsers/think-tag.parser.d.ts +19 -0
- package/dist/middleware/services/json-cleaner/parsers/think-tag.parser.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/parsers/think-tag.parser.js +37 -0
- package/dist/middleware/services/json-cleaner/parsers/think-tag.parser.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-context.d.ts +40 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-context.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-context.js +138 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-context.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-engine.d.ts +74 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-engine.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-engine.js +230 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-engine.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-recipe.d.ts +16 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-recipe.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-recipe.js +179 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/cleaning-recipe.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/conditions.d.ts +88 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/conditions.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/conditions.js +178 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/conditions.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-builder.d.ts +51 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-builder.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-builder.js +219 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-builder.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-steps.d.ts +62 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-steps.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-steps.js +217 -0
- package/dist/middleware/services/json-cleaner/recipe-system/core/recipe-steps.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/factory.d.ts +46 -0
- package/dist/middleware/services/json-cleaner/recipe-system/factory.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/factory.js +52 -0
- package/dist/middleware/services/json-cleaner/recipe-system/factory.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/index.d.ts +12 -0
- package/dist/middleware/services/json-cleaner/recipe-system/index.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/index.js +28 -0
- package/dist/middleware/services/json-cleaner/recipe-system/index.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/operations/detectors.d.ts +55 -0
- package/dist/middleware/services/json-cleaner/recipe-system/operations/detectors.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/operations/detectors.js +348 -0
- package/dist/middleware/services/json-cleaner/recipe-system/operations/detectors.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/operations/fixers.d.ts +70 -0
- package/dist/middleware/services/json-cleaner/recipe-system/operations/fixers.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/operations/fixers.js +568 -0
- package/dist/middleware/services/json-cleaner/recipe-system/operations/fixers.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/recipes/templates.d.ts +11 -0
- package/dist/middleware/services/json-cleaner/recipe-system/recipes/templates.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/recipes/templates.js +103 -0
- package/dist/middleware/services/json-cleaner/recipe-system/recipes/templates.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/types/operation.types.d.ts +171 -0
- package/dist/middleware/services/json-cleaner/recipe-system/types/operation.types.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/types/operation.types.js +3 -0
- package/dist/middleware/services/json-cleaner/recipe-system/types/operation.types.js.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/types/recipe.types.d.ts +224 -0
- package/dist/middleware/services/json-cleaner/recipe-system/types/recipe.types.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/recipe-system/types/recipe.types.js +3 -0
- package/dist/middleware/services/json-cleaner/recipe-system/types/recipe.types.js.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/aggressive.cleaner.d.ts +29 -0
- package/dist/middleware/services/json-cleaner/strategies/aggressive.cleaner.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/aggressive.cleaner.js +128 -0
- package/dist/middleware/services/json-cleaner/strategies/aggressive.cleaner.js.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/base-cleaner.strategy.d.ts +38 -0
- package/dist/middleware/services/json-cleaner/strategies/base-cleaner.strategy.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/base-cleaner.strategy.js +18 -0
- package/dist/middleware/services/json-cleaner/strategies/base-cleaner.strategy.js.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/comma-fixer.cleaner.d.ts +65 -0
- package/dist/middleware/services/json-cleaner/strategies/comma-fixer.cleaner.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/comma-fixer.cleaner.js +420 -0
- package/dist/middleware/services/json-cleaner/strategies/comma-fixer.cleaner.js.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/control-character.cleaner.d.ts +50 -0
- package/dist/middleware/services/json-cleaner/strategies/control-character.cleaner.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/control-character.cleaner.js +416 -0
- package/dist/middleware/services/json-cleaner/strategies/control-character.cleaner.js.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/duplicate-key.cleaner.d.ts +27 -0
- package/dist/middleware/services/json-cleaner/strategies/duplicate-key.cleaner.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/duplicate-key.cleaner.js +84 -0
- package/dist/middleware/services/json-cleaner/strategies/duplicate-key.cleaner.js.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/index.d.ts +8 -0
- package/dist/middleware/services/json-cleaner/strategies/index.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/index.js +24 -0
- package/dist/middleware/services/json-cleaner/strategies/index.js.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/string-escaper.cleaner.d.ts +23 -0
- package/dist/middleware/services/json-cleaner/strategies/string-escaper.cleaner.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/string-escaper.cleaner.js +65 -0
- package/dist/middleware/services/json-cleaner/strategies/string-escaper.cleaner.js.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/structural-repair.cleaner.d.ts +48 -0
- package/dist/middleware/services/json-cleaner/strategies/structural-repair.cleaner.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/strategies/structural-repair.cleaner.js +188 -0
- package/dist/middleware/services/json-cleaner/strategies/structural-repair.cleaner.js.map +1 -0
- package/dist/middleware/services/json-cleaner/utils/console-logger.util.d.ts +50 -0
- package/dist/middleware/services/json-cleaner/utils/console-logger.util.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/utils/console-logger.util.js +95 -0
- package/dist/middleware/services/json-cleaner/utils/console-logger.util.js.map +1 -0
- package/dist/middleware/services/json-cleaner/utils/control-char-diagnostics.util.d.ts +59 -0
- package/dist/middleware/services/json-cleaner/utils/control-char-diagnostics.util.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/utils/control-char-diagnostics.util.js +326 -0
- package/dist/middleware/services/json-cleaner/utils/control-char-diagnostics.util.js.map +1 -0
- package/dist/middleware/services/json-cleaner/utils/index.d.ts +3 -0
- package/dist/middleware/services/json-cleaner/utils/index.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/utils/index.js +19 -0
- package/dist/middleware/services/json-cleaner/utils/index.js.map +1 -0
- package/dist/middleware/services/json-cleaner/utils/json-inspector.util.d.ts +27 -0
- package/dist/middleware/services/json-cleaner/utils/json-inspector.util.d.ts.map +1 -0
- package/dist/middleware/services/json-cleaner/utils/json-inspector.util.js +139 -0
- package/dist/middleware/services/json-cleaner/utils/json-inspector.util.js.map +1 -0
- package/dist/middleware/services/llm/index.d.ts +5 -0
- package/dist/middleware/services/llm/index.d.ts.map +1 -0
- package/dist/middleware/services/llm/index.js +25 -0
- package/dist/middleware/services/llm/index.js.map +1 -0
- package/dist/middleware/services/llm/llm.service.d.ts +43 -0
- package/dist/middleware/services/llm/llm.service.d.ts.map +1 -0
- package/dist/middleware/services/llm/llm.service.js +70 -0
- package/dist/middleware/services/llm/llm.service.js.map +1 -0
- package/dist/middleware/services/llm/providers/base-llm-provider.d.ts +37 -0
- package/dist/middleware/services/llm/providers/base-llm-provider.d.ts.map +1 -0
- package/dist/middleware/services/llm/providers/base-llm-provider.js +41 -0
- package/dist/middleware/services/llm/providers/base-llm-provider.js.map +1 -0
- package/dist/middleware/services/llm/providers/index.d.ts +3 -0
- package/dist/middleware/services/llm/providers/index.d.ts.map +1 -0
- package/dist/middleware/services/llm/providers/index.js +25 -0
- package/dist/middleware/services/llm/providers/index.js.map +1 -0
- package/dist/middleware/services/llm/providers/ollama-provider.d.ts +39 -0
- package/dist/middleware/services/llm/providers/ollama-provider.d.ts.map +1 -0
- package/dist/middleware/services/llm/providers/ollama-provider.js +398 -0
- package/dist/middleware/services/llm/providers/ollama-provider.js.map +1 -0
- package/dist/middleware/services/llm/types/common.types.d.ts +81 -0
- package/dist/middleware/services/llm/types/common.types.d.ts.map +1 -0
- package/dist/middleware/services/llm/types/common.types.js +17 -0
- package/dist/middleware/services/llm/types/common.types.js.map +1 -0
- package/dist/middleware/services/llm/types/index.d.ts +3 -0
- package/dist/middleware/services/llm/types/index.d.ts.map +1 -0
- package/dist/middleware/services/llm/types/index.js +21 -0
- package/dist/middleware/services/llm/types/index.js.map +1 -0
- package/dist/middleware/services/llm/types/ollama.types.d.ts +48 -0
- package/dist/middleware/services/llm/types/ollama.types.d.ts.map +1 -0
- package/dist/middleware/services/llm/types/ollama.types.js +8 -0
- package/dist/middleware/services/llm/types/ollama.types.js.map +1 -0
- package/dist/middleware/services/llm/utils/debug-llm.utils.d.ts +42 -0
- package/dist/middleware/services/llm/utils/debug-llm.utils.d.ts.map +1 -0
- package/dist/middleware/services/llm/utils/debug-llm.utils.js +325 -0
- package/dist/middleware/services/llm/utils/debug-llm.utils.js.map +1 -0
- package/dist/middleware/services/llm/utils/index.d.ts +3 -0
- package/dist/middleware/services/llm/utils/index.d.ts.map +1 -0
- package/dist/middleware/services/llm/utils/index.js +19 -0
- package/dist/middleware/services/llm/utils/index.js.map +1 -0
- package/dist/middleware/services/llm/utils/text-analysis.utils.d.ts +75 -0
- package/dist/middleware/services/llm/utils/text-analysis.utils.d.ts.map +1 -0
- package/dist/middleware/services/llm/utils/text-analysis.utils.js +197 -0
- package/dist/middleware/services/llm/utils/text-analysis.utils.js.map +1 -0
- package/dist/middleware/services/model-parameter-manager/index.d.ts +2 -0
- package/dist/middleware/services/model-parameter-manager/index.d.ts.map +1 -0
- package/dist/middleware/services/model-parameter-manager/index.js +18 -0
- package/dist/middleware/services/model-parameter-manager/index.js.map +1 -0
- package/dist/middleware/services/model-parameter-manager/model-parameter-manager.service.d.ts +165 -0
- package/dist/middleware/services/model-parameter-manager/model-parameter-manager.service.d.ts.map +1 -0
- package/dist/middleware/services/model-parameter-manager/model-parameter-manager.service.js +325 -0
- package/dist/middleware/services/model-parameter-manager/model-parameter-manager.service.js.map +1 -0
- package/dist/middleware/services/request-formatter/index.d.ts +2 -0
- package/dist/middleware/services/request-formatter/index.d.ts.map +1 -0
- package/dist/middleware/services/request-formatter/index.js +18 -0
- package/dist/middleware/services/request-formatter/index.js.map +1 -0
- package/dist/middleware/services/request-formatter/request-formatter.service.d.ts +71 -0
- package/dist/middleware/services/request-formatter/request-formatter.service.d.ts.map +1 -0
- package/dist/middleware/services/request-formatter/request-formatter.service.js +230 -0
- package/dist/middleware/services/request-formatter/request-formatter.service.js.map +1 -0
- package/dist/middleware/services/response-processor.service.d.ts +106 -0
- package/dist/middleware/services/response-processor.service.d.ts.map +1 -0
- package/dist/middleware/services/response-processor.service.js +236 -0
- package/dist/middleware/services/response-processor.service.js.map +1 -0
- package/dist/middleware/services/token-estimator/index.d.ts +2 -0
- package/dist/middleware/services/token-estimator/index.d.ts.map +1 -0
- package/dist/middleware/services/token-estimator/index.js +18 -0
- package/dist/middleware/services/token-estimator/index.js.map +1 -0
- package/dist/middleware/services/token-estimator/token-estimator.service.d.ts +97 -0
- package/dist/middleware/services/token-estimator/token-estimator.service.d.ts.map +1 -0
- package/dist/middleware/services/token-estimator/token-estimator.service.js +190 -0
- package/dist/middleware/services/token-estimator/token-estimator.service.js.map +1 -0
- package/dist/middleware/services/use-case-metrics-logger/index.d.ts +2 -0
- package/dist/middleware/services/use-case-metrics-logger/index.d.ts.map +1 -0
- package/dist/middleware/services/use-case-metrics-logger/index.js +18 -0
- package/dist/middleware/services/use-case-metrics-logger/index.js.map +1 -0
- package/dist/middleware/services/use-case-metrics-logger/use-case-metrics-logger.service.d.ts +89 -0
- package/dist/middleware/services/use-case-metrics-logger/use-case-metrics-logger.service.d.ts.map +1 -0
- package/dist/middleware/services/use-case-metrics-logger/use-case-metrics-logger.service.js +112 -0
- package/dist/middleware/services/use-case-metrics-logger/use-case-metrics-logger.service.js.map +1 -0
- package/dist/middleware/shared/config/app.config.d.ts +3 -0
- package/dist/middleware/shared/config/app.config.d.ts.map +1 -0
- package/dist/middleware/shared/config/app.config.js +76 -0
- package/dist/middleware/shared/config/app.config.js.map +1 -0
- package/dist/middleware/shared/config/index.d.ts +4 -0
- package/dist/middleware/shared/config/index.d.ts.map +1 -0
- package/dist/middleware/shared/config/index.js +21 -0
- package/dist/middleware/shared/config/index.js.map +1 -0
- package/dist/middleware/shared/config/logging.config.d.ts +49 -0
- package/dist/middleware/shared/config/logging.config.d.ts.map +1 -0
- package/dist/middleware/shared/config/logging.config.js +16 -0
- package/dist/middleware/shared/config/logging.config.js.map +1 -0
- package/dist/middleware/shared/config/models.config.d.ts +19 -0
- package/dist/middleware/shared/config/models.config.d.ts.map +1 -0
- package/dist/middleware/shared/config/models.config.js +39 -0
- package/dist/middleware/shared/config/models.config.js.map +1 -0
- package/dist/middleware/shared/constants/index.d.ts +2 -0
- package/dist/middleware/shared/constants/index.d.ts.map +1 -0
- package/dist/middleware/shared/constants/index.js +19 -0
- package/dist/middleware/shared/constants/index.js.map +1 -0
- package/dist/middleware/shared/constants/json-formatting.constants.d.ts +36 -0
- package/dist/middleware/shared/constants/json-formatting.constants.d.ts.map +1 -0
- package/dist/middleware/shared/constants/json-formatting.constants.js +81 -0
- package/dist/middleware/shared/constants/json-formatting.constants.js.map +1 -0
- package/dist/middleware/shared/types/base-request.types.d.ts +27 -0
- package/dist/middleware/shared/types/base-request.types.d.ts.map +1 -0
- package/dist/middleware/shared/types/base-request.types.js +3 -0
- package/dist/middleware/shared/types/base-request.types.js.map +1 -0
- package/dist/middleware/shared/types/client-info.d.ts +8 -0
- package/dist/middleware/shared/types/client-info.d.ts.map +1 -0
- package/dist/middleware/shared/types/client-info.js +3 -0
- package/dist/middleware/shared/types/client-info.js.map +1 -0
- package/dist/middleware/shared/types/index.d.ts +43 -0
- package/dist/middleware/shared/types/index.d.ts.map +1 -0
- package/dist/middleware/shared/types/index.js +20 -0
- package/dist/middleware/shared/types/index.js.map +1 -0
- package/dist/middleware/shared/utils/http.utils.d.ts +25 -0
- package/dist/middleware/shared/utils/http.utils.d.ts.map +1 -0
- package/dist/middleware/shared/utils/http.utils.js +44 -0
- package/dist/middleware/shared/utils/http.utils.js.map +1 -0
- package/dist/middleware/shared/utils/index.d.ts +5 -0
- package/dist/middleware/shared/utils/index.d.ts.map +1 -0
- package/dist/middleware/shared/utils/index.js +22 -0
- package/dist/middleware/shared/utils/index.js.map +1 -0
- package/dist/middleware/shared/utils/logging.utils.d.ts +30 -0
- package/dist/middleware/shared/utils/logging.utils.d.ts.map +1 -0
- package/dist/middleware/shared/utils/logging.utils.js +91 -0
- package/dist/middleware/shared/utils/logging.utils.js.map +1 -0
- package/dist/middleware/shared/utils/memory-management.utils.d.ts +10 -0
- package/dist/middleware/shared/utils/memory-management.utils.d.ts.map +1 -0
- package/dist/middleware/shared/utils/memory-management.utils.js +31 -0
- package/dist/middleware/shared/utils/memory-management.utils.js.map +1 -0
- package/dist/middleware/shared/utils/validation.utils.d.ts +12 -0
- package/dist/middleware/shared/utils/validation.utils.d.ts.map +1 -0
- package/dist/middleware/shared/utils/validation.utils.js +36 -0
- package/dist/middleware/shared/utils/validation.utils.js.map +1 -0
- package/dist/middleware/usecases/base/base-ai.usecase.d.ts +72 -0
- package/dist/middleware/usecases/base/base-ai.usecase.d.ts.map +1 -0
- package/dist/middleware/usecases/base/base-ai.usecase.js +125 -0
- package/dist/middleware/usecases/base/base-ai.usecase.js.map +1 -0
- package/dist/middleware/usecases/base/index.d.ts +2 -0
- package/dist/middleware/usecases/base/index.d.ts.map +1 -0
- package/dist/middleware/usecases/base/index.js +18 -0
- package/dist/middleware/usecases/base/index.js.map +1 -0
- 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
|
+
[](https://www.npmjs.com/package/@loonylabs/llm-middleware)
|
|
9
|
+
[](https://www.npmjs.com/package/@loonylabs/llm-middleware)
|
|
10
|
+
[](#-features)
|
|
11
|
+
[](#-prerequisites)
|
|
12
|
+
[](#-license)
|
|
13
|
+
[](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
|
+
[](https://github.com/loonylabs-dev/llm-middleware/stargazers)
|
|
627
|
+
[](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"}
|