@opencodereview/core 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/anthropic-provider.d.ts +41 -0
- package/dist/ai/anthropic-provider.d.ts.map +1 -0
- package/dist/ai/anthropic-provider.js +139 -0
- package/dist/ai/anthropic-provider.js.map +1 -0
- package/dist/ai/index.d.ts +39 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +41 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/ollama-provider.d.ts +46 -0
- package/dist/ai/ollama-provider.d.ts.map +1 -0
- package/dist/ai/ollama-provider.js +149 -0
- package/dist/ai/ollama-provider.js.map +1 -0
- package/dist/ai/openai-provider.d.ts +44 -0
- package/dist/ai/openai-provider.d.ts.map +1 -0
- package/dist/ai/openai-provider.js +137 -0
- package/dist/ai/openai-provider.js.map +1 -0
- package/dist/ai/orchestrator.d.ts +60 -0
- package/dist/ai/orchestrator.d.ts.map +1 -0
- package/dist/ai/orchestrator.js +188 -0
- package/dist/ai/orchestrator.js.map +1 -0
- package/dist/ai/prompts.d.ts +27 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +112 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/types.d.ts +75 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +10 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai/v4/embedding/index.d.ts +10 -0
- package/dist/ai/v4/embedding/index.d.ts.map +1 -0
- package/dist/ai/v4/embedding/index.js +10 -0
- package/dist/ai/v4/embedding/index.js.map +1 -0
- package/dist/ai/v4/embedding/local.d.ts +68 -0
- package/dist/ai/v4/embedding/local.d.ts.map +1 -0
- package/dist/ai/v4/embedding/local.js +167 -0
- package/dist/ai/v4/embedding/local.js.map +1 -0
- package/dist/ai/v4/embedding/ollama.d.ts +58 -0
- package/dist/ai/v4/embedding/ollama.d.ts.map +1 -0
- package/dist/ai/v4/embedding/ollama.js +101 -0
- package/dist/ai/v4/embedding/ollama.js.map +1 -0
- package/dist/ai/v4/embedding/openai.d.ts +36 -0
- package/dist/ai/v4/embedding/openai.d.ts.map +1 -0
- package/dist/ai/v4/embedding/openai.js +76 -0
- package/dist/ai/v4/embedding/openai.js.map +1 -0
- package/dist/ai/v4/embedding/similarity.d.ts +36 -0
- package/dist/ai/v4/embedding/similarity.d.ts.map +1 -0
- package/dist/ai/v4/embedding/similarity.js +60 -0
- package/dist/ai/v4/embedding/similarity.js.map +1 -0
- package/dist/ai/v4/index.d.ts +51 -0
- package/dist/ai/v4/index.d.ts.map +1 -0
- package/dist/ai/v4/index.js +54 -0
- package/dist/ai/v4/index.js.map +1 -0
- package/dist/ai/v4/llm/anthropic.d.ts +38 -0
- package/dist/ai/v4/llm/anthropic.d.ts.map +1 -0
- package/dist/ai/v4/llm/anthropic.js +86 -0
- package/dist/ai/v4/llm/anthropic.js.map +1 -0
- package/dist/ai/v4/llm/index.d.ts +9 -0
- package/dist/ai/v4/llm/index.d.ts.map +1 -0
- package/dist/ai/v4/llm/index.js +9 -0
- package/dist/ai/v4/llm/index.js.map +1 -0
- package/dist/ai/v4/llm/ollama.d.ts +39 -0
- package/dist/ai/v4/llm/ollama.d.ts.map +1 -0
- package/dist/ai/v4/llm/ollama.js +95 -0
- package/dist/ai/v4/llm/ollama.js.map +1 -0
- package/dist/ai/v4/llm/openai.d.ts +38 -0
- package/dist/ai/v4/llm/openai.d.ts.map +1 -0
- package/dist/ai/v4/llm/openai.js +88 -0
- package/dist/ai/v4/llm/openai.js.map +1 -0
- package/dist/ai/v4/patterns/defect-patterns.d.ts +57 -0
- package/dist/ai/v4/patterns/defect-patterns.d.ts.map +1 -0
- package/dist/ai/v4/patterns/defect-patterns.js +331 -0
- package/dist/ai/v4/patterns/defect-patterns.js.map +1 -0
- package/dist/ai/v4/patterns/index.d.ts +8 -0
- package/dist/ai/v4/patterns/index.d.ts.map +1 -0
- package/dist/ai/v4/patterns/index.js +7 -0
- package/dist/ai/v4/patterns/index.js.map +1 -0
- package/dist/ai/v4/pipeline.d.ts +74 -0
- package/dist/ai/v4/pipeline.d.ts.map +1 -0
- package/dist/ai/v4/pipeline.js +381 -0
- package/dist/ai/v4/pipeline.js.map +1 -0
- package/dist/ai/v4/sla.d.ts +62 -0
- package/dist/ai/v4/sla.d.ts.map +1 -0
- package/dist/ai/v4/sla.js +136 -0
- package/dist/ai/v4/sla.js.map +1 -0
- package/dist/ai/v4/types.d.ts +117 -0
- package/dist/ai/v4/types.d.ts.map +1 -0
- package/dist/ai/v4/types.js +16 -0
- package/dist/ai/v4/types.js.map +1 -0
- package/dist/ai-healer/prompt-builder.d.ts +33 -0
- package/dist/ai-healer/prompt-builder.d.ts.map +1 -0
- package/dist/ai-healer/prompt-builder.js +89 -0
- package/dist/ai-healer/prompt-builder.js.map +1 -0
- package/dist/config/defaults.d.ts +14 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +57 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +33 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +245 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +58 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/v4-config.d.ts +77 -0
- package/dist/config/v4-config.d.ts.map +1 -0
- package/dist/config/v4-config.js +336 -0
- package/dist/config/v4-config.js.map +1 -0
- package/dist/detectors/ai-detector.d.ts +38 -0
- package/dist/detectors/ai-detector.d.ts.map +1 -0
- package/dist/detectors/ai-detector.js +62 -0
- package/dist/detectors/ai-detector.js.map +1 -0
- package/dist/detectors/context-break.d.ts +57 -0
- package/dist/detectors/context-break.d.ts.map +1 -0
- package/dist/detectors/context-break.js +199 -0
- package/dist/detectors/context-break.js.map +1 -0
- package/dist/detectors/deep-hallucination.d.ts +42 -0
- package/dist/detectors/deep-hallucination.d.ts.map +1 -0
- package/dist/detectors/deep-hallucination.js +297 -0
- package/dist/detectors/deep-hallucination.js.map +1 -0
- package/dist/detectors/duplication.d.ts +61 -0
- package/dist/detectors/duplication.d.ts.map +1 -0
- package/dist/detectors/duplication.js +204 -0
- package/dist/detectors/duplication.js.map +1 -0
- package/dist/detectors/hallucination.d.ts +80 -0
- package/dist/detectors/hallucination.d.ts.map +1 -0
- package/dist/detectors/hallucination.js +350 -0
- package/dist/detectors/hallucination.js.map +1 -0
- package/dist/detectors/index.d.ts +35 -0
- package/dist/detectors/index.d.ts.map +1 -0
- package/dist/detectors/index.js +33 -0
- package/dist/detectors/index.js.map +1 -0
- package/dist/detectors/logic-gap.d.ts +58 -0
- package/dist/detectors/logic-gap.d.ts.map +1 -0
- package/dist/detectors/logic-gap.js +284 -0
- package/dist/detectors/logic-gap.js.map +1 -0
- package/dist/detectors/over-engineering.d.ts +44 -0
- package/dist/detectors/over-engineering.d.ts.map +1 -0
- package/dist/detectors/over-engineering.js +257 -0
- package/dist/detectors/over-engineering.js.map +1 -0
- package/dist/detectors/security-pattern.d.ts +43 -0
- package/dist/detectors/security-pattern.d.ts.map +1 -0
- package/dist/detectors/security-pattern.js +235 -0
- package/dist/detectors/security-pattern.js.map +1 -0
- package/dist/detectors/stale-api.d.ts +44 -0
- package/dist/detectors/stale-api.d.ts.map +1 -0
- package/dist/detectors/stale-api.js +160 -0
- package/dist/detectors/stale-api.js.map +1 -0
- package/dist/detectors/type-safety.d.ts +41 -0
- package/dist/detectors/type-safety.d.ts.map +1 -0
- package/dist/detectors/type-safety.js +306 -0
- package/dist/detectors/type-safety.js.map +1 -0
- package/dist/detectors/v4/context-coherence.d.ts +67 -0
- package/dist/detectors/v4/context-coherence.d.ts.map +1 -0
- package/dist/detectors/v4/context-coherence.js +319 -0
- package/dist/detectors/v4/context-coherence.js.map +1 -0
- package/dist/detectors/v4/hallucinated-import.d.ts +52 -0
- package/dist/detectors/v4/hallucinated-import.d.ts.map +1 -0
- package/dist/detectors/v4/hallucinated-import.js +206 -0
- package/dist/detectors/v4/hallucinated-import.js.map +1 -0
- package/dist/detectors/v4/index.d.ts +28 -0
- package/dist/detectors/v4/index.d.ts.map +1 -0
- package/dist/detectors/v4/index.js +40 -0
- package/dist/detectors/v4/index.js.map +1 -0
- package/dist/detectors/v4/over-engineering.d.ts +69 -0
- package/dist/detectors/v4/over-engineering.d.ts.map +1 -0
- package/dist/detectors/v4/over-engineering.js +234 -0
- package/dist/detectors/v4/over-engineering.js.map +1 -0
- package/dist/detectors/v4/security-pattern.d.ts +46 -0
- package/dist/detectors/v4/security-pattern.d.ts.map +1 -0
- package/dist/detectors/v4/security-pattern.js +233 -0
- package/dist/detectors/v4/security-pattern.js.map +1 -0
- package/dist/detectors/v4/stale-api.d.ts +59 -0
- package/dist/detectors/v4/stale-api.d.ts.map +1 -0
- package/dist/detectors/v4/stale-api.js +470 -0
- package/dist/detectors/v4/stale-api.js.map +1 -0
- package/dist/detectors/v4/types.d.ts +74 -0
- package/dist/detectors/v4/types.d.ts.map +1 -0
- package/dist/detectors/v4/types.js +10 -0
- package/dist/detectors/v4/types.js.map +1 -0
- package/dist/diff/filter.d.ts +35 -0
- package/dist/diff/filter.d.ts.map +1 -0
- package/dist/diff/filter.js +65 -0
- package/dist/diff/filter.js.map +1 -0
- package/dist/diff/index.d.ts +9 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +8 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/parser.d.ts +61 -0
- package/dist/diff/parser.d.ts.map +1 -0
- package/dist/diff/parser.js +203 -0
- package/dist/diff/parser.js.map +1 -0
- package/dist/i18n/en.d.ts +18 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +83 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +13 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +14 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/provider.d.ts +54 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +88 -0
- package/dist/i18n/provider.js.map +1 -0
- package/dist/i18n/types.d.ts +37 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +10 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +14 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +83 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.d.ts +113 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +106 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +10 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +9 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/types.d.ts +126 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +33 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/languages/go/index.d.ts +7 -0
- package/dist/languages/go/index.d.ts.map +1 -0
- package/dist/languages/go/index.js +7 -0
- package/dist/languages/go/index.js.map +1 -0
- package/dist/languages/go/parser.d.ts +89 -0
- package/dist/languages/go/parser.d.ts.map +1 -0
- package/dist/languages/go/parser.js +509 -0
- package/dist/languages/go/parser.js.map +1 -0
- package/dist/languages/index.d.ts +13 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +14 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/java/index.d.ts +7 -0
- package/dist/languages/java/index.d.ts.map +1 -0
- package/dist/languages/java/index.js +7 -0
- package/dist/languages/java/index.js.map +1 -0
- package/dist/languages/java/parser.d.ts +82 -0
- package/dist/languages/java/parser.d.ts.map +1 -0
- package/dist/languages/java/parser.js +492 -0
- package/dist/languages/java/parser.js.map +1 -0
- package/dist/languages/kotlin/index.d.ts +7 -0
- package/dist/languages/kotlin/index.d.ts.map +1 -0
- package/dist/languages/kotlin/index.js +7 -0
- package/dist/languages/kotlin/index.js.map +1 -0
- package/dist/languages/kotlin/parser.d.ts +84 -0
- package/dist/languages/kotlin/parser.d.ts.map +1 -0
- package/dist/languages/kotlin/parser.js +507 -0
- package/dist/languages/kotlin/parser.js.map +1 -0
- package/dist/languages/python/index.d.ts +7 -0
- package/dist/languages/python/index.d.ts.map +1 -0
- package/dist/languages/python/index.js +7 -0
- package/dist/languages/python/index.js.map +1 -0
- package/dist/languages/python/parser.d.ts +91 -0
- package/dist/languages/python/parser.d.ts.map +1 -0
- package/dist/languages/python/parser.js +375 -0
- package/dist/languages/python/parser.js.map +1 -0
- package/dist/languages/registry.d.ts +81 -0
- package/dist/languages/registry.d.ts.map +1 -0
- package/dist/languages/registry.js +150 -0
- package/dist/languages/registry.js.map +1 -0
- package/dist/languages/types.d.ts +137 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +10 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/languages/typescript/index.d.ts +7 -0
- package/dist/languages/typescript/index.d.ts.map +1 -0
- package/dist/languages/typescript/index.js +7 -0
- package/dist/languages/typescript/index.js.map +1 -0
- package/dist/languages/typescript/parser.d.ts +51 -0
- package/dist/languages/typescript/parser.d.ts.map +1 -0
- package/dist/languages/typescript/parser.js +286 -0
- package/dist/languages/typescript/parser.js.map +1 -0
- package/dist/license/generator.d.ts +43 -0
- package/dist/license/generator.d.ts.map +1 -0
- package/dist/license/generator.js +72 -0
- package/dist/license/generator.js.map +1 -0
- package/dist/license/index.d.ts +11 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +12 -0
- package/dist/license/index.js.map +1 -0
- package/dist/license/types.d.ts +85 -0
- package/dist/license/types.d.ts.map +1 -0
- package/dist/license/types.js +10 -0
- package/dist/license/types.js.map +1 -0
- package/dist/license/validator.d.ts +77 -0
- package/dist/license/validator.d.ts.map +1 -0
- package/dist/license/validator.js +275 -0
- package/dist/license/validator.js.map +1 -0
- package/dist/parser/extractor.d.ts +31 -0
- package/dist/parser/extractor.d.ts.map +1 -0
- package/dist/parser/extractor.js +10 -0
- package/dist/parser/extractor.js.map +1 -0
- package/dist/parser/extractors/go.d.ts +21 -0
- package/dist/parser/extractors/go.d.ts.map +1 -0
- package/dist/parser/extractors/go.js +569 -0
- package/dist/parser/extractors/go.js.map +1 -0
- package/dist/parser/extractors/index.d.ts +13 -0
- package/dist/parser/extractors/index.d.ts.map +1 -0
- package/dist/parser/extractors/index.js +13 -0
- package/dist/parser/extractors/index.js.map +1 -0
- package/dist/parser/extractors/java.d.ts +24 -0
- package/dist/parser/extractors/java.d.ts.map +1 -0
- package/dist/parser/extractors/java.js +611 -0
- package/dist/parser/extractors/java.js.map +1 -0
- package/dist/parser/extractors/kotlin.d.ts +25 -0
- package/dist/parser/extractors/kotlin.d.ts.map +1 -0
- package/dist/parser/extractors/kotlin.js +665 -0
- package/dist/parser/extractors/kotlin.js.map +1 -0
- package/dist/parser/extractors/python.d.ts +21 -0
- package/dist/parser/extractors/python.d.ts.map +1 -0
- package/dist/parser/extractors/python.js +514 -0
- package/dist/parser/extractors/python.js.map +1 -0
- package/dist/parser/extractors/typescript.d.ts +23 -0
- package/dist/parser/extractors/typescript.d.ts.map +1 -0
- package/dist/parser/extractors/typescript.js +664 -0
- package/dist/parser/extractors/typescript.js.map +1 -0
- package/dist/parser/index.d.ts +15 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +14 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/manager.d.ts +50 -0
- package/dist/parser/manager.d.ts.map +1 -0
- package/dist/parser/manager.js +159 -0
- package/dist/parser/manager.js.map +1 -0
- package/dist/registry/builtins/go-builtins.d.ts +13 -0
- package/dist/registry/builtins/go-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/go-builtins.js +63 -0
- package/dist/registry/builtins/go-builtins.js.map +1 -0
- package/dist/registry/builtins/java-builtins.d.ts +10 -0
- package/dist/registry/builtins/java-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/java-builtins.js +59 -0
- package/dist/registry/builtins/java-builtins.js.map +1 -0
- package/dist/registry/builtins/kotlin-builtins.d.ts +10 -0
- package/dist/registry/builtins/kotlin-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/kotlin-builtins.js +38 -0
- package/dist/registry/builtins/kotlin-builtins.js.map +1 -0
- package/dist/registry/builtins/node-builtins.d.ts +10 -0
- package/dist/registry/builtins/node-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/node-builtins.js +36 -0
- package/dist/registry/builtins/node-builtins.js.map +1 -0
- package/dist/registry/builtins/python-builtins.d.ts +10 -0
- package/dist/registry/builtins/python-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/python-builtins.js +43 -0
- package/dist/registry/builtins/python-builtins.js.map +1 -0
- package/dist/registry/cache.d.ts +53 -0
- package/dist/registry/cache.d.ts.map +1 -0
- package/dist/registry/cache.js +147 -0
- package/dist/registry/cache.js.map +1 -0
- package/dist/registry/go-registry.d.ts +52 -0
- package/dist/registry/go-registry.d.ts.map +1 -0
- package/dist/registry/go-registry.js +148 -0
- package/dist/registry/go-registry.js.map +1 -0
- package/dist/registry/index.d.ts +18 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +21 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/maven-registry.d.ts +57 -0
- package/dist/registry/maven-registry.d.ts.map +1 -0
- package/dist/registry/maven-registry.js +155 -0
- package/dist/registry/maven-registry.js.map +1 -0
- package/dist/registry/npm-registry.d.ts +40 -0
- package/dist/registry/npm-registry.d.ts.map +1 -0
- package/dist/registry/npm-registry.js +155 -0
- package/dist/registry/npm-registry.js.map +1 -0
- package/dist/registry/pypi-registry.d.ts +49 -0
- package/dist/registry/pypi-registry.d.ts.map +1 -0
- package/dist/registry/pypi-registry.js +175 -0
- package/dist/registry/pypi-registry.js.map +1 -0
- package/dist/registry/registry-manager.d.ts +45 -0
- package/dist/registry/registry-manager.d.ts.map +1 -0
- package/dist/registry/registry-manager.js +107 -0
- package/dist/registry/registry-manager.js.map +1 -0
- package/dist/registry/types.d.ts +83 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +12 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/reporter/html-reporter.d.ts +20 -0
- package/dist/reporter/html-reporter.d.ts.map +1 -0
- package/dist/reporter/html-reporter.js +612 -0
- package/dist/reporter/html-reporter.js.map +1 -0
- package/dist/reporter/index.d.ts +28 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +48 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/markdown-reporter.d.ts +16 -0
- package/dist/reporter/markdown-reporter.d.ts.map +1 -0
- package/dist/reporter/markdown-reporter.js +182 -0
- package/dist/reporter/markdown-reporter.js.map +1 -0
- package/dist/reporter/sarif-reporter.d.ts +67 -0
- package/dist/reporter/sarif-reporter.d.ts.map +1 -0
- package/dist/reporter/sarif-reporter.js +73 -0
- package/dist/reporter/sarif-reporter.js.map +1 -0
- package/dist/reporter/terminal-reporter.d.ts +14 -0
- package/dist/reporter/terminal-reporter.d.ts.map +1 -0
- package/dist/reporter/terminal-reporter.js +126 -0
- package/dist/reporter/terminal-reporter.js.map +1 -0
- package/dist/reporter/types.d.ts +43 -0
- package/dist/reporter/types.d.ts.map +1 -0
- package/dist/reporter/types.js +10 -0
- package/dist/reporter/types.js.map +1 -0
- package/dist/reporter/v4-html.d.ts +24 -0
- package/dist/reporter/v4-html.d.ts.map +1 -0
- package/dist/reporter/v4-html.js +359 -0
- package/dist/reporter/v4-html.js.map +1 -0
- package/dist/reporter/v4-terminal.d.ts +55 -0
- package/dist/reporter/v4-terminal.d.ts.map +1 -0
- package/dist/reporter/v4-terminal.js +199 -0
- package/dist/reporter/v4-terminal.js.map +1 -0
- package/dist/scanner/index.d.ts +9 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +9 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/v4-scanner.d.ts +162 -0
- package/dist/scanner/v4-scanner.d.ts.map +1 -0
- package/dist/scanner/v4-scanner.js +327 -0
- package/dist/scanner/v4-scanner.js.map +1 -0
- package/dist/scorer/report.d.ts +52 -0
- package/dist/scorer/report.d.ts.map +1 -0
- package/dist/scorer/report.js +347 -0
- package/dist/scorer/report.js.map +1 -0
- package/dist/scorer/scoring-engine.d.ts +170 -0
- package/dist/scorer/scoring-engine.d.ts.map +1 -0
- package/dist/scorer/scoring-engine.js +308 -0
- package/dist/scorer/scoring-engine.js.map +1 -0
- package/dist/scorer/v4-adapter.d.ts +87 -0
- package/dist/scorer/v4-adapter.d.ts.map +1 -0
- package/dist/scorer/v4-adapter.js +145 -0
- package/dist/scorer/v4-adapter.js.map +1 -0
- package/dist/sla/index.d.ts +7 -0
- package/dist/sla/index.d.ts.map +1 -0
- package/dist/sla/index.js +6 -0
- package/dist/sla/index.js.map +1 -0
- package/dist/sla/tracker.d.ts +70 -0
- package/dist/sla/tracker.d.ts.map +1 -0
- package/dist/sla/tracker.js +151 -0
- package/dist/sla/tracker.js.map +1 -0
- package/dist/sla/types.d.ts +67 -0
- package/dist/sla/types.d.ts.map +1 -0
- package/dist/sla/types.js +42 -0
- package/dist/sla/types.js.map +1 -0
- package/dist/types.d.ts +172 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +69 -0
- package/dist/types.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding providers for the V4 AI pipeline Stage 1.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.4.0
|
|
5
|
+
*/
|
|
6
|
+
export { LocalEmbeddingProvider, tokenize, cosineSimilarity } from './local.js';
|
|
7
|
+
export { findTopMatches } from './similarity.js';
|
|
8
|
+
export { OpenAIEmbeddingProvider } from './openai.js';
|
|
9
|
+
export { OllamaEmbeddingProvider } from './ollama.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Embedding Provider — TF-IDF Based
|
|
3
|
+
*
|
|
4
|
+
* For V4 MVP, we use a simple but effective approach:
|
|
5
|
+
* - TF-IDF vectorization of code blocks
|
|
6
|
+
* - Cosine similarity against defect pattern vectors
|
|
7
|
+
* - No external model dependency (zero binary deps)
|
|
8
|
+
*
|
|
9
|
+
* This can be upgraded to ONNX-based embedding (e.g. all-MiniLM-L6-v2)
|
|
10
|
+
* in the future without changing the EmbeddingProvider interface.
|
|
11
|
+
*
|
|
12
|
+
* @since 0.4.0
|
|
13
|
+
*/
|
|
14
|
+
import type { EmbeddingProvider } from '../types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Tokenize source code into meaningful tokens.
|
|
17
|
+
*
|
|
18
|
+
* Handles:
|
|
19
|
+
* - camelCase splitting: "readFile" → ["read", "file"]
|
|
20
|
+
* - snake_case splitting: "read_file" → ["read", "file"]
|
|
21
|
+
* - Punctuation removal
|
|
22
|
+
* - Number handling
|
|
23
|
+
* - Lowercasing
|
|
24
|
+
*/
|
|
25
|
+
export declare function tokenize(text: string): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Compute cosine similarity between two vectors.
|
|
28
|
+
* Returns a value in [0, 1] where 1 = identical direction.
|
|
29
|
+
*/
|
|
30
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
31
|
+
export declare class LocalEmbeddingProvider implements EmbeddingProvider {
|
|
32
|
+
private maxDimension;
|
|
33
|
+
readonly name = "local-tfidf";
|
|
34
|
+
readonly dimension: number;
|
|
35
|
+
private vocabulary;
|
|
36
|
+
private idfScores;
|
|
37
|
+
private vocabularyBuilt;
|
|
38
|
+
/**
|
|
39
|
+
* @param maxDimension Maximum vocabulary size (vector dimension).
|
|
40
|
+
* Defaults to 512. Vocabulary is truncated to this size by IDF rank.
|
|
41
|
+
*/
|
|
42
|
+
constructor(maxDimension?: number);
|
|
43
|
+
/**
|
|
44
|
+
* Build vocabulary and IDF scores from a corpus of texts.
|
|
45
|
+
* Must be called before embed() to produce meaningful vectors.
|
|
46
|
+
*
|
|
47
|
+
* @param texts Corpus of text documents to build vocabulary from
|
|
48
|
+
*/
|
|
49
|
+
buildVocabulary(texts: string[]): void;
|
|
50
|
+
/**
|
|
51
|
+
* Generate TF-IDF embedding vectors for the given texts.
|
|
52
|
+
*
|
|
53
|
+
* If vocabulary hasn't been built, it will be auto-built from the input texts.
|
|
54
|
+
*
|
|
55
|
+
* @param texts Array of text documents to embed
|
|
56
|
+
* @returns Array of normalized TF-IDF vectors (one per text)
|
|
57
|
+
*/
|
|
58
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
59
|
+
/**
|
|
60
|
+
* Generate a normalized TF-IDF vector for a single text.
|
|
61
|
+
*/
|
|
62
|
+
private embedSingle;
|
|
63
|
+
/**
|
|
64
|
+
* L2-normalize a vector (unit length).
|
|
65
|
+
*/
|
|
66
|
+
private normalize;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAW/C;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBjE;AAID,qBAAa,sBAAuB,YAAW,iBAAiB;IAYlD,OAAO,CAAC,YAAY;IAXhC,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,eAAe,CAAS;IAEhC;;;OAGG;gBACiB,YAAY,GAAE,MAAY;IAI9C;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAyCtC;;;;;;;OAOG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAQjD;;OAEG;IACH,OAAO,CAAC,WAAW;IA0BnB;;OAEG;IACH,OAAO,CAAC,SAAS;CAWlB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Embedding Provider — TF-IDF Based
|
|
3
|
+
*
|
|
4
|
+
* For V4 MVP, we use a simple but effective approach:
|
|
5
|
+
* - TF-IDF vectorization of code blocks
|
|
6
|
+
* - Cosine similarity against defect pattern vectors
|
|
7
|
+
* - No external model dependency (zero binary deps)
|
|
8
|
+
*
|
|
9
|
+
* This can be upgraded to ONNX-based embedding (e.g. all-MiniLM-L6-v2)
|
|
10
|
+
* in the future without changing the EmbeddingProvider interface.
|
|
11
|
+
*
|
|
12
|
+
* @since 0.4.0
|
|
13
|
+
*/
|
|
14
|
+
// ─── Tokenization ──────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Tokenize source code into meaningful tokens.
|
|
17
|
+
*
|
|
18
|
+
* Handles:
|
|
19
|
+
* - camelCase splitting: "readFile" → ["read", "file"]
|
|
20
|
+
* - snake_case splitting: "read_file" → ["read", "file"]
|
|
21
|
+
* - Punctuation removal
|
|
22
|
+
* - Number handling
|
|
23
|
+
* - Lowercasing
|
|
24
|
+
*/
|
|
25
|
+
export function tokenize(text) {
|
|
26
|
+
// Split camelCase and PascalCase
|
|
27
|
+
const camelSplit = text.replace(/([a-z])([A-Z])/g, '$1 $2');
|
|
28
|
+
// Split snake_case
|
|
29
|
+
const snakeSplit = camelSplit.replace(/_/g, ' ');
|
|
30
|
+
// Split on non-alphanumeric characters, lowercase, filter empty
|
|
31
|
+
const tokens = snakeSplit
|
|
32
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
33
|
+
.map(t => t.toLowerCase())
|
|
34
|
+
.filter(t => t.length > 1); // Filter single characters
|
|
35
|
+
return tokens;
|
|
36
|
+
}
|
|
37
|
+
// ─── Cosine Similarity ─────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Compute cosine similarity between two vectors.
|
|
40
|
+
* Returns a value in [0, 1] where 1 = identical direction.
|
|
41
|
+
*/
|
|
42
|
+
export function cosineSimilarity(a, b) {
|
|
43
|
+
if (a.length !== b.length || a.length === 0)
|
|
44
|
+
return 0;
|
|
45
|
+
let dotProduct = 0;
|
|
46
|
+
let normA = 0;
|
|
47
|
+
let normB = 0;
|
|
48
|
+
for (let i = 0; i < a.length; i++) {
|
|
49
|
+
dotProduct += a[i] * b[i];
|
|
50
|
+
normA += a[i] * a[i];
|
|
51
|
+
normB += b[i] * b[i];
|
|
52
|
+
}
|
|
53
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
54
|
+
if (denominator === 0)
|
|
55
|
+
return 0;
|
|
56
|
+
return dotProduct / denominator;
|
|
57
|
+
}
|
|
58
|
+
// ─── Local TF-IDF Embedding Provider ───────────────────────────────
|
|
59
|
+
export class LocalEmbeddingProvider {
|
|
60
|
+
maxDimension;
|
|
61
|
+
name = 'local-tfidf';
|
|
62
|
+
dimension;
|
|
63
|
+
vocabulary = new Map();
|
|
64
|
+
idfScores = new Map();
|
|
65
|
+
vocabularyBuilt = false;
|
|
66
|
+
/**
|
|
67
|
+
* @param maxDimension Maximum vocabulary size (vector dimension).
|
|
68
|
+
* Defaults to 512. Vocabulary is truncated to this size by IDF rank.
|
|
69
|
+
*/
|
|
70
|
+
constructor(maxDimension = 512) {
|
|
71
|
+
this.maxDimension = maxDimension;
|
|
72
|
+
this.dimension = maxDimension;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Build vocabulary and IDF scores from a corpus of texts.
|
|
76
|
+
* Must be called before embed() to produce meaningful vectors.
|
|
77
|
+
*
|
|
78
|
+
* @param texts Corpus of text documents to build vocabulary from
|
|
79
|
+
*/
|
|
80
|
+
buildVocabulary(texts) {
|
|
81
|
+
if (texts.length === 0) {
|
|
82
|
+
this.vocabularyBuilt = true;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Tokenize all documents
|
|
86
|
+
const docTokenSets = texts.map(text => new Set(tokenize(text)));
|
|
87
|
+
// Count document frequency for each token
|
|
88
|
+
const docFreq = new Map();
|
|
89
|
+
for (const tokenSet of docTokenSets) {
|
|
90
|
+
for (const token of tokenSet) {
|
|
91
|
+
docFreq.set(token, (docFreq.get(token) ?? 0) + 1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Compute IDF: log(N / df)
|
|
95
|
+
const N = texts.length;
|
|
96
|
+
const idfEntries = [];
|
|
97
|
+
for (const [token, df] of docFreq.entries()) {
|
|
98
|
+
const idf = Math.log((N + 1) / (df + 1)) + 1; // smoothed IDF
|
|
99
|
+
idfEntries.push([token, idf]);
|
|
100
|
+
}
|
|
101
|
+
// Sort by IDF descending (most discriminative first), take top maxDimension
|
|
102
|
+
idfEntries.sort((a, b) => b[1] - a[1]);
|
|
103
|
+
const selected = idfEntries.slice(0, this.maxDimension);
|
|
104
|
+
// Build vocabulary mapping: token → index
|
|
105
|
+
this.vocabulary.clear();
|
|
106
|
+
this.idfScores.clear();
|
|
107
|
+
for (let i = 0; i < selected.length; i++) {
|
|
108
|
+
const [token, idf] = selected[i];
|
|
109
|
+
this.vocabulary.set(token, i);
|
|
110
|
+
this.idfScores.set(token, idf);
|
|
111
|
+
}
|
|
112
|
+
this.vocabularyBuilt = true;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generate TF-IDF embedding vectors for the given texts.
|
|
116
|
+
*
|
|
117
|
+
* If vocabulary hasn't been built, it will be auto-built from the input texts.
|
|
118
|
+
*
|
|
119
|
+
* @param texts Array of text documents to embed
|
|
120
|
+
* @returns Array of normalized TF-IDF vectors (one per text)
|
|
121
|
+
*/
|
|
122
|
+
async embed(texts) {
|
|
123
|
+
if (!this.vocabularyBuilt) {
|
|
124
|
+
this.buildVocabulary(texts);
|
|
125
|
+
}
|
|
126
|
+
return texts.map(text => this.embedSingle(text));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Generate a normalized TF-IDF vector for a single text.
|
|
130
|
+
*/
|
|
131
|
+
embedSingle(text) {
|
|
132
|
+
const tokens = tokenize(text);
|
|
133
|
+
const vector = new Array(this.dimension).fill(0);
|
|
134
|
+
if (tokens.length === 0)
|
|
135
|
+
return vector;
|
|
136
|
+
// Count term frequencies
|
|
137
|
+
const tf = new Map();
|
|
138
|
+
for (const token of tokens) {
|
|
139
|
+
tf.set(token, (tf.get(token) ?? 0) + 1);
|
|
140
|
+
}
|
|
141
|
+
// Build TF-IDF vector
|
|
142
|
+
for (const [token, count] of tf.entries()) {
|
|
143
|
+
const idx = this.vocabulary.get(token);
|
|
144
|
+
if (idx !== undefined) {
|
|
145
|
+
const termFreq = count / tokens.length; // normalized TF
|
|
146
|
+
const idf = this.idfScores.get(token) ?? 1;
|
|
147
|
+
vector[idx] = termFreq * idf;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// L2 normalize
|
|
151
|
+
return this.normalize(vector);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* L2-normalize a vector (unit length).
|
|
155
|
+
*/
|
|
156
|
+
normalize(vector) {
|
|
157
|
+
let norm = 0;
|
|
158
|
+
for (const v of vector) {
|
|
159
|
+
norm += v * v;
|
|
160
|
+
}
|
|
161
|
+
norm = Math.sqrt(norm);
|
|
162
|
+
if (norm === 0)
|
|
163
|
+
return vector;
|
|
164
|
+
return vector.map(v => v / norm);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,sEAAsE;AAEtE;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,iCAAiC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC5D,mBAAmB;IACnB,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,gEAAgE;IAChE,MAAM,MAAM,GAAG,UAAU;SACtB,KAAK,CAAC,eAAe,CAAC;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sEAAsE;AAEtE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEhC,OAAO,UAAU,GAAG,WAAW,CAAC;AAClC,CAAC;AAED,sEAAsE;AAEtE,MAAM,OAAO,sBAAsB;IAYb;IAXX,IAAI,GAAG,aAAa,CAAC;IACrB,SAAS,CAAS;IAEnB,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC5C,SAAS,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC3C,eAAe,GAAG,KAAK,CAAC;IAEhC;;;OAGG;IACH,YAAoB,eAAuB,GAAG;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAC5C,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,KAAe;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,MAAM,YAAY,GAAkB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/E,0CAA0C;QAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe;YAC7D,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,4EAA4E;QAC5E,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAExD,0CAA0C;QAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAY;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAEvC,yBAAyB;QACzB,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAgB;gBACxD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,eAAe;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,MAAgB;QAChC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAE9B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Embedding Provider
|
|
3
|
+
*
|
|
4
|
+
* Uses Ollama's /api/embed batch API for local embedding generation.
|
|
5
|
+
* Designed for L2 SLA level where a local Ollama server is available.
|
|
6
|
+
*
|
|
7
|
+
* Recommended model: nomic-embed-text (0.3GB, 768 dims, ~0.14s/5 texts batch)
|
|
8
|
+
*
|
|
9
|
+
* @since 0.4.1
|
|
10
|
+
*/
|
|
11
|
+
import type { EmbeddingProvider } from '../types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Ollama embedding provider using the /api/embed batch API.
|
|
14
|
+
*
|
|
15
|
+
* Requires a running Ollama server with an embedding model pulled.
|
|
16
|
+
* Uses batch API (input as array) for efficient embedding generation.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const provider = new OllamaEmbeddingProvider('nomic-embed-text', 'http://localhost:11434');
|
|
21
|
+
* const embeddings = await provider.embed(['hello world', 'foo bar']);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class OllamaEmbeddingProvider implements EmbeddingProvider {
|
|
25
|
+
private model;
|
|
26
|
+
private baseUrl;
|
|
27
|
+
readonly name = "ollama";
|
|
28
|
+
private _dimension;
|
|
29
|
+
/**
|
|
30
|
+
* @param model Ollama embedding model name (default: nomic-embed-text)
|
|
31
|
+
* @param baseUrl Ollama server base URL (default: http://localhost:11434)
|
|
32
|
+
*/
|
|
33
|
+
constructor(model?: string, baseUrl?: string);
|
|
34
|
+
/**
|
|
35
|
+
* Embedding vector dimension.
|
|
36
|
+
* Inferred from the first successful API response.
|
|
37
|
+
* Returns 0 before the first embed() call.
|
|
38
|
+
*/
|
|
39
|
+
get dimension(): number;
|
|
40
|
+
/**
|
|
41
|
+
* Generate embeddings for a batch of texts via Ollama API.
|
|
42
|
+
*
|
|
43
|
+
* Uses the batch /api/embed endpoint with input as an array.
|
|
44
|
+
* Automatically splits into sub-batches of MAX_BATCH_SIZE to avoid timeouts.
|
|
45
|
+
*
|
|
46
|
+
* @param texts Array of text strings to embed
|
|
47
|
+
* @returns Array of embedding vectors (one per text)
|
|
48
|
+
*/
|
|
49
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
50
|
+
/**
|
|
51
|
+
* Send a single batch to the Ollama /api/embed endpoint.
|
|
52
|
+
*
|
|
53
|
+
* Uses the batch API: input is an array of strings,
|
|
54
|
+
* response contains embeddings array matching input order.
|
|
55
|
+
*/
|
|
56
|
+
private embedBatch;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAS7D,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IATjB,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,UAAU,CAAK;IAEvB;;;OAGG;gBAEO,KAAK,GAAE,MAA2B,EAClC,OAAO,GAAE,MAAiC;IAGpD;;;;OAIG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;;;;;OAQG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAejD;;;;;OAKG;YACW,UAAU;CAuCzB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama Embedding Provider
|
|
3
|
+
*
|
|
4
|
+
* Uses Ollama's /api/embed batch API for local embedding generation.
|
|
5
|
+
* Designed for L2 SLA level where a local Ollama server is available.
|
|
6
|
+
*
|
|
7
|
+
* Recommended model: nomic-embed-text (0.3GB, 768 dims, ~0.14s/5 texts batch)
|
|
8
|
+
*
|
|
9
|
+
* @since 0.4.1
|
|
10
|
+
*/
|
|
11
|
+
/** Maximum texts per batch to avoid timeouts */
|
|
12
|
+
const MAX_BATCH_SIZE = 10;
|
|
13
|
+
/**
|
|
14
|
+
* Ollama embedding provider using the /api/embed batch API.
|
|
15
|
+
*
|
|
16
|
+
* Requires a running Ollama server with an embedding model pulled.
|
|
17
|
+
* Uses batch API (input as array) for efficient embedding generation.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const provider = new OllamaEmbeddingProvider('nomic-embed-text', 'http://localhost:11434');
|
|
22
|
+
* const embeddings = await provider.embed(['hello world', 'foo bar']);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export class OllamaEmbeddingProvider {
|
|
26
|
+
model;
|
|
27
|
+
baseUrl;
|
|
28
|
+
name = 'ollama';
|
|
29
|
+
_dimension = 0;
|
|
30
|
+
/**
|
|
31
|
+
* @param model Ollama embedding model name (default: nomic-embed-text)
|
|
32
|
+
* @param baseUrl Ollama server base URL (default: http://localhost:11434)
|
|
33
|
+
*/
|
|
34
|
+
constructor(model = 'nomic-embed-text', baseUrl = 'http://localhost:11434') {
|
|
35
|
+
this.model = model;
|
|
36
|
+
this.baseUrl = baseUrl;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Embedding vector dimension.
|
|
40
|
+
* Inferred from the first successful API response.
|
|
41
|
+
* Returns 0 before the first embed() call.
|
|
42
|
+
*/
|
|
43
|
+
get dimension() {
|
|
44
|
+
return this._dimension;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Generate embeddings for a batch of texts via Ollama API.
|
|
48
|
+
*
|
|
49
|
+
* Uses the batch /api/embed endpoint with input as an array.
|
|
50
|
+
* Automatically splits into sub-batches of MAX_BATCH_SIZE to avoid timeouts.
|
|
51
|
+
*
|
|
52
|
+
* @param texts Array of text strings to embed
|
|
53
|
+
* @returns Array of embedding vectors (one per text)
|
|
54
|
+
*/
|
|
55
|
+
async embed(texts) {
|
|
56
|
+
if (texts.length === 0)
|
|
57
|
+
return [];
|
|
58
|
+
const results = [];
|
|
59
|
+
// Process in batches of MAX_BATCH_SIZE
|
|
60
|
+
for (let i = 0; i < texts.length; i += MAX_BATCH_SIZE) {
|
|
61
|
+
const batch = texts.slice(i, i + MAX_BATCH_SIZE);
|
|
62
|
+
const batchResults = await this.embedBatch(batch);
|
|
63
|
+
results.push(...batchResults);
|
|
64
|
+
}
|
|
65
|
+
return results;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Send a single batch to the Ollama /api/embed endpoint.
|
|
69
|
+
*
|
|
70
|
+
* Uses the batch API: input is an array of strings,
|
|
71
|
+
* response contains embeddings array matching input order.
|
|
72
|
+
*/
|
|
73
|
+
async embedBatch(texts) {
|
|
74
|
+
const url = `${this.baseUrl.replace(/\/+$/, '')}/api/embed`;
|
|
75
|
+
const response = await fetch(url, {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
headers: {
|
|
78
|
+
'Content-Type': 'application/json',
|
|
79
|
+
},
|
|
80
|
+
body: JSON.stringify({
|
|
81
|
+
model: this.model,
|
|
82
|
+
input: texts,
|
|
83
|
+
}),
|
|
84
|
+
signal: AbortSignal.timeout(60_000),
|
|
85
|
+
});
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
const errorBody = await response.text().catch(() => 'unknown error');
|
|
88
|
+
throw new Error(`Ollama embed API error (${response.status}): ${errorBody}`);
|
|
89
|
+
}
|
|
90
|
+
const data = (await response.json());
|
|
91
|
+
if (!data.embeddings || !Array.isArray(data.embeddings)) {
|
|
92
|
+
throw new Error('Ollama embed API returned unexpected format: missing embeddings array');
|
|
93
|
+
}
|
|
94
|
+
// Infer dimension from first result
|
|
95
|
+
if (this._dimension === 0 && data.embeddings.length > 0 && data.embeddings[0]) {
|
|
96
|
+
this._dimension = data.embeddings[0].length;
|
|
97
|
+
}
|
|
98
|
+
return data.embeddings;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,gDAAgD;AAChD,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,uBAAuB;IASxB;IACA;IATD,IAAI,GAAG,QAAQ,CAAC;IACjB,UAAU,GAAG,CAAC,CAAC;IAEvB;;;OAGG;IACH,YACU,QAAgB,kBAAkB,EAClC,UAAkB,wBAAwB;QAD1C,UAAK,GAAL,KAAK,CAA6B;QAClC,YAAO,GAAP,OAAO,CAAmC;IACjD,CAAC;IAEJ;;;;OAIG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,UAAU,CAAC,KAAe;QACtC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC;QAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK;aACb,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,2BAA2B,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAC5D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Embedding Provider
|
|
3
|
+
*
|
|
4
|
+
* Uses OpenAI's text-embedding API for high-quality vector embeddings.
|
|
5
|
+
* Designed for L3 SLA level where remote API calls are acceptable.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
import type { EmbeddingProvider } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* OpenAI embedding provider using the text-embedding-3-small model.
|
|
12
|
+
*
|
|
13
|
+
* Requires an API key. Batches requests to stay within API limits.
|
|
14
|
+
*/
|
|
15
|
+
export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
|
|
16
|
+
private apiKey;
|
|
17
|
+
private model;
|
|
18
|
+
private baseUrl;
|
|
19
|
+
readonly name = "openai";
|
|
20
|
+
readonly dimension: number;
|
|
21
|
+
constructor(apiKey: string, model?: string, baseUrl?: string);
|
|
22
|
+
/**
|
|
23
|
+
* Generate embeddings for a batch of texts via OpenAI API.
|
|
24
|
+
*
|
|
25
|
+
* Automatically splits into sub-batches if texts exceed MAX_BATCH_SIZE.
|
|
26
|
+
*
|
|
27
|
+
* @param texts Array of text strings to embed
|
|
28
|
+
* @returns Array of embedding vectors (one per text)
|
|
29
|
+
*/
|
|
30
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
31
|
+
/**
|
|
32
|
+
* Send a single batch to the OpenAI embeddings API.
|
|
33
|
+
*/
|
|
34
|
+
private embedBatch;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAK7D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IANjB,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAGjB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAiC,EACxC,OAAO,GAAE,MAAoC;IAMvD;;;;;;;OAOG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAejD;;OAEG;YACW,UAAU;CA+BzB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Embedding Provider
|
|
3
|
+
*
|
|
4
|
+
* Uses OpenAI's text-embedding API for high-quality vector embeddings.
|
|
5
|
+
* Designed for L3 SLA level where remote API calls are acceptable.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
/** Maximum texts per batch request to OpenAI embeddings API */
|
|
10
|
+
const MAX_BATCH_SIZE = 2048;
|
|
11
|
+
/**
|
|
12
|
+
* OpenAI embedding provider using the text-embedding-3-small model.
|
|
13
|
+
*
|
|
14
|
+
* Requires an API key. Batches requests to stay within API limits.
|
|
15
|
+
*/
|
|
16
|
+
export class OpenAIEmbeddingProvider {
|
|
17
|
+
apiKey;
|
|
18
|
+
model;
|
|
19
|
+
baseUrl;
|
|
20
|
+
name = 'openai';
|
|
21
|
+
dimension;
|
|
22
|
+
constructor(apiKey, model = 'text-embedding-3-small', baseUrl = 'https://api.openai.com/v1') {
|
|
23
|
+
this.apiKey = apiKey;
|
|
24
|
+
this.model = model;
|
|
25
|
+
this.baseUrl = baseUrl;
|
|
26
|
+
// text-embedding-3-small = 1536, text-embedding-3-large = 3072
|
|
27
|
+
this.dimension = model.includes('large') ? 3072 : 1536;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate embeddings for a batch of texts via OpenAI API.
|
|
31
|
+
*
|
|
32
|
+
* Automatically splits into sub-batches if texts exceed MAX_BATCH_SIZE.
|
|
33
|
+
*
|
|
34
|
+
* @param texts Array of text strings to embed
|
|
35
|
+
* @returns Array of embedding vectors (one per text)
|
|
36
|
+
*/
|
|
37
|
+
async embed(texts) {
|
|
38
|
+
if (texts.length === 0)
|
|
39
|
+
return [];
|
|
40
|
+
const results = [];
|
|
41
|
+
// Process in batches
|
|
42
|
+
for (let i = 0; i < texts.length; i += MAX_BATCH_SIZE) {
|
|
43
|
+
const batch = texts.slice(i, i + MAX_BATCH_SIZE);
|
|
44
|
+
const batchResults = await this.embedBatch(batch);
|
|
45
|
+
results.push(...batchResults);
|
|
46
|
+
}
|
|
47
|
+
return results;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Send a single batch to the OpenAI embeddings API.
|
|
51
|
+
*/
|
|
52
|
+
async embedBatch(texts) {
|
|
53
|
+
const url = `${this.baseUrl}/embeddings`;
|
|
54
|
+
const response = await fetch(url, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: {
|
|
57
|
+
'Content-Type': 'application/json',
|
|
58
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
59
|
+
},
|
|
60
|
+
body: JSON.stringify({
|
|
61
|
+
model: this.model,
|
|
62
|
+
input: texts,
|
|
63
|
+
}),
|
|
64
|
+
signal: AbortSignal.timeout(30_000),
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
const errorBody = await response.text().catch(() => 'unknown error');
|
|
68
|
+
throw new Error(`OpenAI embeddings API error (${response.status}): ${errorBody}`);
|
|
69
|
+
}
|
|
70
|
+
const data = (await response.json());
|
|
71
|
+
// Sort by index to ensure order matches input
|
|
72
|
+
const sorted = data.data.sort((a, b) => a.index - b.index);
|
|
73
|
+
return sorted.map(d => d.embedding);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,+DAA+D;AAC/D,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAKxB;IACA;IACA;IAND,IAAI,GAAG,QAAQ,CAAC;IAChB,SAAS,CAAS;IAE3B,YACU,MAAc,EACd,QAAgB,wBAAwB,EACxC,UAAkB,2BAA2B;QAF7C,WAAM,GAAN,MAAM,CAAQ;QACd,UAAK,GAAL,KAAK,CAAmC;QACxC,YAAO,GAAP,OAAO,CAAsC;QAErD,+DAA+D;QAC/D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,KAAe;QACtC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,aAAa,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK;aACb,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CACjE,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,8CAA8C;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cosine Similarity Utilities
|
|
3
|
+
*
|
|
4
|
+
* Vector similarity functions for the embedding recall stage.
|
|
5
|
+
* Used to compare code block embeddings against defect pattern embeddings.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Compute cosine similarity between two vectors.
|
|
11
|
+
* Returns a value in [-1, 1] where 1 = identical direction, 0 = orthogonal.
|
|
12
|
+
*
|
|
13
|
+
* For TF-IDF vectors (non-negative), range is [0, 1].
|
|
14
|
+
*
|
|
15
|
+
* @param a First vector
|
|
16
|
+
* @param b Second vector
|
|
17
|
+
* @returns Cosine similarity score
|
|
18
|
+
*/
|
|
19
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
20
|
+
/**
|
|
21
|
+
* Find the top-K most similar candidates to a query vector.
|
|
22
|
+
*
|
|
23
|
+
* Returns candidates that exceed the similarity threshold, sorted by
|
|
24
|
+
* descending similarity score, limited to topK results.
|
|
25
|
+
*
|
|
26
|
+
* @param query Query embedding vector
|
|
27
|
+
* @param candidates Array of candidate embedding vectors
|
|
28
|
+
* @param topK Maximum number of results to return
|
|
29
|
+
* @param threshold Minimum similarity score to include (0-1)
|
|
30
|
+
* @returns Array of { index, score } sorted by descending score
|
|
31
|
+
*/
|
|
32
|
+
export declare function findTopMatches(query: number[], candidates: number[][], topK: number, threshold: number): {
|
|
33
|
+
index: number;
|
|
34
|
+
score: number;
|
|
35
|
+
}[];
|
|
36
|
+
//# sourceMappingURL=similarity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similarity.d.ts","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAAE,EAAE,EACtB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAepC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cosine Similarity Utilities
|
|
3
|
+
*
|
|
4
|
+
* Vector similarity functions for the embedding recall stage.
|
|
5
|
+
* Used to compare code block embeddings against defect pattern embeddings.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Compute cosine similarity between two vectors.
|
|
11
|
+
* Returns a value in [-1, 1] where 1 = identical direction, 0 = orthogonal.
|
|
12
|
+
*
|
|
13
|
+
* For TF-IDF vectors (non-negative), range is [0, 1].
|
|
14
|
+
*
|
|
15
|
+
* @param a First vector
|
|
16
|
+
* @param b Second vector
|
|
17
|
+
* @returns Cosine similarity score
|
|
18
|
+
*/
|
|
19
|
+
export function cosineSimilarity(a, b) {
|
|
20
|
+
if (a.length !== b.length || a.length === 0)
|
|
21
|
+
return 0;
|
|
22
|
+
let dotProduct = 0;
|
|
23
|
+
let normA = 0;
|
|
24
|
+
let normB = 0;
|
|
25
|
+
for (let i = 0; i < a.length; i++) {
|
|
26
|
+
dotProduct += a[i] * b[i];
|
|
27
|
+
normA += a[i] * a[i];
|
|
28
|
+
normB += b[i] * b[i];
|
|
29
|
+
}
|
|
30
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
31
|
+
if (denominator === 0)
|
|
32
|
+
return 0;
|
|
33
|
+
return dotProduct / denominator;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Find the top-K most similar candidates to a query vector.
|
|
37
|
+
*
|
|
38
|
+
* Returns candidates that exceed the similarity threshold, sorted by
|
|
39
|
+
* descending similarity score, limited to topK results.
|
|
40
|
+
*
|
|
41
|
+
* @param query Query embedding vector
|
|
42
|
+
* @param candidates Array of candidate embedding vectors
|
|
43
|
+
* @param topK Maximum number of results to return
|
|
44
|
+
* @param threshold Minimum similarity score to include (0-1)
|
|
45
|
+
* @returns Array of { index, score } sorted by descending score
|
|
46
|
+
*/
|
|
47
|
+
export function findTopMatches(query, candidates, topK, threshold) {
|
|
48
|
+
const matches = [];
|
|
49
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
50
|
+
const score = cosineSimilarity(query, candidates[i]);
|
|
51
|
+
if (score >= threshold) {
|
|
52
|
+
matches.push({ index: i, score });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Sort by score descending
|
|
56
|
+
matches.sort((a, b) => b.score - a.score);
|
|
57
|
+
// Return top-K
|
|
58
|
+
return matches.slice(0, topK);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=similarity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similarity.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEhC,OAAO,UAAU,GAAG,WAAW,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAe,EACf,UAAsB,EACtB,IAAY,EACZ,SAAiB;IAEjB,MAAM,OAAO,GAAuC,EAAE,CAAC;IAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAE1C,eAAe;IACf,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC"}
|