cognitive-core 0.0.2 → 0.1.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/README.md +302 -116
- package/SKILL.md +193 -0
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +5 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/mock-provider.d.ts +23 -0
- package/dist/agents/mock-provider.d.ts.map +1 -0
- package/dist/agents/mock-provider.js +71 -0
- package/dist/agents/mock-provider.js.map +1 -0
- package/dist/agents/types.d.ts +98 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +44 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/atlas.d.ts +196 -0
- package/dist/atlas.d.ts.map +1 -0
- package/dist/atlas.js +373 -0
- package/dist/atlas.js.map +1 -0
- package/dist/bin/cognitive-core.d.ts +18 -0
- package/dist/bin/cognitive-core.d.ts.map +1 -0
- package/dist/bin/cognitive-core.js +419 -0
- package/dist/bin/cognitive-core.js.map +1 -0
- package/dist/embeddings/bm25.d.ts +104 -0
- package/dist/embeddings/bm25.d.ts.map +1 -0
- package/dist/embeddings/bm25.js +264 -0
- package/dist/embeddings/bm25.js.map +1 -0
- package/dist/embeddings/index.d.ts +12 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +16 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/manager.d.ts +112 -0
- package/dist/embeddings/manager.d.ts.map +1 -0
- package/dist/embeddings/manager.js +215 -0
- package/dist/embeddings/manager.js.map +1 -0
- package/dist/embeddings/provider.d.ts +101 -0
- package/dist/embeddings/provider.d.ts.map +1 -0
- package/dist/embeddings/provider.js +232 -0
- package/dist/embeddings/provider.js.map +1 -0
- package/dist/embeddings/vector-store.d.ts +101 -0
- package/dist/embeddings/vector-store.d.ts.map +1 -0
- package/dist/embeddings/vector-store.js +256 -0
- package/dist/embeddings/vector-store.js.map +1 -0
- package/dist/factory.d.ts +193 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +109 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +30 -453
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -509
- package/dist/index.js.map +1 -0
- package/dist/learning/analyzer.d.ts +110 -0
- package/dist/learning/analyzer.d.ts.map +1 -0
- package/dist/learning/analyzer.js +213 -0
- package/dist/learning/analyzer.js.map +1 -0
- package/dist/learning/effectiveness.d.ts +158 -0
- package/dist/learning/effectiveness.d.ts.map +1 -0
- package/dist/learning/effectiveness.js +251 -0
- package/dist/learning/effectiveness.js.map +1 -0
- package/dist/learning/index.d.ts +8 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +11 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/llm-extractor.d.ts +88 -0
- package/dist/learning/llm-extractor.d.ts.map +1 -0
- package/dist/learning/llm-extractor.js +372 -0
- package/dist/learning/llm-extractor.js.map +1 -0
- package/dist/learning/meta-learner.d.ts +80 -0
- package/dist/learning/meta-learner.d.ts.map +1 -0
- package/dist/learning/meta-learner.js +355 -0
- package/dist/learning/meta-learner.js.map +1 -0
- package/dist/learning/pipeline.d.ts +65 -0
- package/dist/learning/pipeline.d.ts.map +1 -0
- package/dist/learning/pipeline.js +170 -0
- package/dist/learning/pipeline.js.map +1 -0
- package/dist/learning/playbook-extractor.d.ts +113 -0
- package/dist/learning/playbook-extractor.d.ts.map +1 -0
- package/dist/learning/playbook-extractor.js +523 -0
- package/dist/learning/playbook-extractor.js.map +1 -0
- package/dist/learning/usage-inference.d.ts +82 -0
- package/dist/learning/usage-inference.d.ts.map +1 -0
- package/dist/learning/usage-inference.js +261 -0
- package/dist/learning/usage-inference.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/playbook-server.d.ts +120 -0
- package/dist/mcp/playbook-server.d.ts.map +1 -0
- package/dist/mcp/playbook-server.js +427 -0
- package/dist/mcp/playbook-server.js.map +1 -0
- package/dist/memory/curated-loader.d.ts +62 -0
- package/dist/memory/curated-loader.d.ts.map +1 -0
- package/dist/memory/curated-loader.js +106 -0
- package/dist/memory/curated-loader.js.map +1 -0
- package/dist/memory/experience.d.ts +122 -0
- package/dist/memory/experience.d.ts.map +1 -0
- package/dist/memory/experience.js +392 -0
- package/dist/memory/experience.js.map +1 -0
- package/dist/memory/index.d.ts +6 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +9 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/meta.d.ts +90 -0
- package/dist/memory/meta.d.ts.map +1 -0
- package/dist/memory/meta.js +362 -0
- package/dist/memory/meta.js.map +1 -0
- package/dist/memory/playbook.d.ts +133 -0
- package/dist/memory/playbook.d.ts.map +1 -0
- package/dist/memory/playbook.js +357 -0
- package/dist/memory/playbook.js.map +1 -0
- package/dist/memory/system.d.ts +167 -0
- package/dist/memory/system.d.ts.map +1 -0
- package/dist/memory/system.js +383 -0
- package/dist/memory/system.js.map +1 -0
- package/dist/runtime/backends/acp.d.ts +67 -0
- package/dist/runtime/backends/acp.d.ts.map +1 -0
- package/dist/runtime/backends/acp.js +290 -0
- package/dist/runtime/backends/acp.js.map +1 -0
- package/dist/runtime/backends/index.d.ts +5 -0
- package/dist/runtime/backends/index.d.ts.map +1 -0
- package/dist/runtime/backends/index.js +6 -0
- package/dist/runtime/backends/index.js.map +1 -0
- package/dist/runtime/backends/mock.d.ts +67 -0
- package/dist/runtime/backends/mock.d.ts.map +1 -0
- package/dist/runtime/backends/mock.js +153 -0
- package/dist/runtime/backends/mock.js.map +1 -0
- package/dist/runtime/backends/subprocess.d.ts +56 -0
- package/dist/runtime/backends/subprocess.d.ts.map +1 -0
- package/dist/runtime/backends/subprocess.js +260 -0
- package/dist/runtime/backends/subprocess.js.map +1 -0
- package/dist/runtime/flows/learning.d.ts +73 -0
- package/dist/runtime/flows/learning.d.ts.map +1 -0
- package/dist/runtime/flows/learning.js +116 -0
- package/dist/runtime/flows/learning.js.map +1 -0
- package/dist/runtime/flows/validation.d.ts +122 -0
- package/dist/runtime/flows/validation.d.ts.map +1 -0
- package/dist/runtime/flows/validation.js +223 -0
- package/dist/runtime/flows/validation.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/manager.d.ts +116 -0
- package/dist/runtime/manager.d.ts.map +1 -0
- package/dist/runtime/manager.js +416 -0
- package/dist/runtime/manager.js.map +1 -0
- package/dist/runtime/types.d.ts +138 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/search/evaluator.d.ts +102 -0
- package/dist/search/evaluator.d.ts.map +1 -0
- package/dist/search/evaluator.js +352 -0
- package/dist/search/evaluator.js.map +1 -0
- package/dist/search/index.d.ts +7 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +11 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/refinement-loop.d.ts +73 -0
- package/dist/search/refinement-loop.d.ts.map +1 -0
- package/dist/search/refinement-loop.js +245 -0
- package/dist/search/refinement-loop.js.map +1 -0
- package/dist/search/refinement-types.d.ts +154 -0
- package/dist/search/refinement-types.d.ts.map +1 -0
- package/dist/search/refinement-types.js +99 -0
- package/dist/search/refinement-types.js.map +1 -0
- package/dist/search/router.d.ts +61 -0
- package/dist/search/router.d.ts.map +1 -0
- package/dist/search/router.js +197 -0
- package/dist/search/router.js.map +1 -0
- package/dist/search/solver.d.ts +75 -0
- package/dist/search/solver.d.ts.map +1 -0
- package/dist/search/solver.js +216 -0
- package/dist/search/solver.js.map +1 -0
- package/dist/search/verification-runner.d.ts +125 -0
- package/dist/search/verification-runner.d.ts.map +1 -0
- package/dist/search/verification-runner.js +440 -0
- package/dist/search/verification-runner.js.map +1 -0
- package/dist/surfacing/index.d.ts +2 -0
- package/dist/surfacing/index.d.ts.map +1 -0
- package/dist/surfacing/index.js +2 -0
- package/dist/surfacing/index.js.map +1 -0
- package/dist/surfacing/skill-library.d.ts +158 -0
- package/dist/surfacing/skill-library.d.ts.map +1 -0
- package/dist/surfacing/skill-library.js +429 -0
- package/dist/surfacing/skill-library.js.map +1 -0
- package/dist/types/config.d.ts +1113 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +274 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +14 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +339 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +207 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/meta.d.ts +146 -0
- package/dist/types/meta.d.ts.map +1 -0
- package/dist/types/meta.js +51 -0
- package/dist/types/meta.js.map +1 -0
- package/dist/types/outcome.d.ts +42 -0
- package/dist/types/outcome.d.ts.map +1 -0
- package/dist/types/outcome.js +50 -0
- package/dist/types/outcome.js.map +1 -0
- package/dist/types/playbook.d.ts +119 -0
- package/dist/types/playbook.d.ts.map +1 -0
- package/dist/types/playbook.js +71 -0
- package/dist/types/playbook.js.map +1 -0
- package/dist/types/step.d.ts +44 -0
- package/dist/types/step.d.ts.map +1 -0
- package/dist/types/step.js +32 -0
- package/dist/types/step.js.map +1 -0
- package/dist/types/task.d.ts +91 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +39 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/trajectory.d.ts +221 -0
- package/dist/types/trajectory.d.ts.map +1 -0
- package/dist/types/trajectory.js +60 -0
- package/dist/types/trajectory.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/similarity.d.ts +31 -0
- package/dist/utils/similarity.d.ts.map +1 -0
- package/dist/utils/similarity.js +107 -0
- package/dist/utils/similarity.js.map +1 -0
- package/dist/utils/storage.d.ts +106 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +203 -0
- package/dist/utils/storage.js.map +1 -0
- package/dist/utils/validation.d.ts +129 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +171 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +50 -34
- package/scripts/migrate-to-playbooks.ts +307 -0
- package/src/agents/index.ts +14 -0
- package/src/agents/mock-provider.ts +93 -0
- package/src/agents/types.ts +137 -0
- package/src/atlas.ts +560 -0
- package/src/bin/cognitive-core.ts +470 -0
- package/src/embeddings/bm25.ts +337 -0
- package/src/embeddings/index.ts +39 -0
- package/src/embeddings/manager.ts +288 -0
- package/src/embeddings/provider.ts +311 -0
- package/src/embeddings/vector-store.ts +353 -0
- package/src/factory.ts +263 -0
- package/src/index.ts +246 -0
- package/src/learning/analyzer.ts +335 -0
- package/src/learning/effectiveness.ts +428 -0
- package/src/learning/index.ts +58 -0
- package/src/learning/llm-extractor.ts +542 -0
- package/src/learning/meta-learner.ts +516 -0
- package/src/learning/pipeline.ts +244 -0
- package/src/learning/playbook-extractor.ts +702 -0
- package/src/learning/usage-inference.ts +372 -0
- package/src/mcp/index.ts +12 -0
- package/src/mcp/playbook-server.ts +565 -0
- package/src/memory/curated-loader.ts +160 -0
- package/src/memory/experience.ts +515 -0
- package/src/memory/index.ts +27 -0
- package/src/memory/meta.ts +506 -0
- package/src/memory/playbook.ts +493 -0
- package/src/memory/system.ts +551 -0
- package/src/runtime/backends/acp.ts +378 -0
- package/src/runtime/backends/index.ts +24 -0
- package/src/runtime/backends/mock.ts +218 -0
- package/src/runtime/backends/subprocess.ts +356 -0
- package/src/runtime/flows/learning.ts +183 -0
- package/src/runtime/flows/validation.ts +381 -0
- package/src/runtime/index.ts +53 -0
- package/src/runtime/manager.ts +541 -0
- package/src/runtime/types.ts +157 -0
- package/src/search/evaluator.ts +474 -0
- package/src/search/index.ts +59 -0
- package/src/search/refinement-loop.ts +363 -0
- package/src/search/refinement-types.ts +159 -0
- package/src/search/router.ts +261 -0
- package/src/search/solver.ts +303 -0
- package/src/search/verification-runner.ts +570 -0
- package/src/surfacing/index.ts +6 -0
- package/src/surfacing/skill-library.ts +594 -0
- package/src/types/config.ts +333 -0
- package/src/types/index.ts +130 -0
- package/src/types/memory.ts +270 -0
- package/src/types/meta.ts +218 -0
- package/src/types/outcome.ts +66 -0
- package/src/types/playbook.ts +196 -0
- package/src/types/step.ts +40 -0
- package/src/types/task.ts +52 -0
- package/src/types/trajectory.ts +80 -0
- package/src/utils/index.ts +38 -0
- package/src/utils/similarity.ts +139 -0
- package/src/utils/storage.ts +249 -0
- package/src/utils/validation.ts +286 -0
- package/tests/embeddings/bm25.test.ts +130 -0
- package/tests/embeddings/manager.test.ts +205 -0
- package/tests/integration/atlas.test.ts +266 -0
- package/tests/integration/e2e.test.ts +929 -0
- package/tests/learning/analyzer.test.ts +426 -0
- package/tests/learning/effectiveness.test.ts +542 -0
- package/tests/learning/pipeline.test.ts +176 -0
- package/tests/learning/playbook-extractor-provenance.test.ts +114 -0
- package/tests/learning/usage-inference.test.ts +254 -0
- package/tests/mcp/playbook-server.test.ts +252 -0
- package/tests/memory/experience.test.ts +198 -0
- package/tests/memory/playbook.test.ts +338 -0
- package/tests/memory/provenance.test.ts +639 -0
- package/tests/memory/system.test.ts +325 -0
- package/tests/runtime/agent-manager.test.ts +512 -0
- package/tests/runtime/mock-backend.test.ts +248 -0
- package/tests/search/refinement-loop.test.ts +468 -0
- package/tests/search/refinement.test.ts +267 -0
- package/tests/search/router.test.ts +427 -0
- package/tests/surfacing/skill-library.test.ts +292 -0
- package/tests/types/outcome.test.ts +147 -0
- package/tests/types/step.test.ts +133 -0
- package/tests/types/task.test.ts +158 -0
- package/tests/types/trajectory.test.ts +253 -0
- package/tests/utils/similarity.test.ts +188 -0
- package/tests/utils/validation.test.ts +252 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +22 -0
- package/dist/index.d.mts +0 -466
- package/dist/index.mjs +0 -478
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Provider Interface and Implementations
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified interface for generating embeddings from text.
|
|
5
|
+
* Supports hosted providers (OpenAI, etc.) and local models.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Interface for embedding providers (hosted or local)
|
|
9
|
+
*/
|
|
10
|
+
export interface EmbeddingProvider {
|
|
11
|
+
/** Provider name for logging/debugging */
|
|
12
|
+
readonly name: string;
|
|
13
|
+
/** Embedding dimension */
|
|
14
|
+
readonly dimension: number;
|
|
15
|
+
/** Embed a single text */
|
|
16
|
+
embed(text: string): Promise<number[]>;
|
|
17
|
+
/** Embed multiple texts (batch) */
|
|
18
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* OpenAI embedding provider
|
|
22
|
+
*/
|
|
23
|
+
export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
|
|
24
|
+
readonly name = "openai";
|
|
25
|
+
readonly dimension: number;
|
|
26
|
+
private apiKey;
|
|
27
|
+
private model;
|
|
28
|
+
private baseUrl;
|
|
29
|
+
constructor(options: {
|
|
30
|
+
apiKey: string;
|
|
31
|
+
model?: string;
|
|
32
|
+
dimension?: number;
|
|
33
|
+
baseUrl?: string;
|
|
34
|
+
});
|
|
35
|
+
embed(text: string): Promise<number[]>;
|
|
36
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Anthropic Voyage embedding provider
|
|
40
|
+
* Uses Voyage AI embeddings via Anthropic partnership
|
|
41
|
+
*/
|
|
42
|
+
export declare class VoyageEmbeddingProvider implements EmbeddingProvider {
|
|
43
|
+
readonly name = "voyage";
|
|
44
|
+
readonly dimension: number;
|
|
45
|
+
private apiKey;
|
|
46
|
+
private model;
|
|
47
|
+
constructor(options: {
|
|
48
|
+
apiKey: string;
|
|
49
|
+
model?: string;
|
|
50
|
+
dimension?: number;
|
|
51
|
+
});
|
|
52
|
+
embed(text: string): Promise<number[]>;
|
|
53
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Local embedding provider using @huggingface/transformers
|
|
57
|
+
* Runs transformer models locally in Node.js using ONNX runtime
|
|
58
|
+
*/
|
|
59
|
+
export declare class LocalEmbeddingProvider implements EmbeddingProvider {
|
|
60
|
+
readonly name = "local";
|
|
61
|
+
readonly dimension: number;
|
|
62
|
+
private modelName;
|
|
63
|
+
private extractor;
|
|
64
|
+
private initPromise;
|
|
65
|
+
/** Default model - all-MiniLM-L6-v2 is small and fast with good quality */
|
|
66
|
+
static readonly DEFAULT_MODEL = "sentence-transformers/all-MiniLM-L6-v2";
|
|
67
|
+
/** Dimensions for common models */
|
|
68
|
+
static readonly MODEL_DIMENSIONS: Record<string, number>;
|
|
69
|
+
constructor(options?: {
|
|
70
|
+
modelName?: string;
|
|
71
|
+
modelPath?: string;
|
|
72
|
+
dimension?: number;
|
|
73
|
+
});
|
|
74
|
+
/** Get the model name/path */
|
|
75
|
+
get modelPath(): string;
|
|
76
|
+
private initialize;
|
|
77
|
+
private doInitialize;
|
|
78
|
+
embed(text: string): Promise<number[]>;
|
|
79
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
80
|
+
/**
|
|
81
|
+
* Check if a model is available locally (cached)
|
|
82
|
+
* This can be used to pre-warm the cache
|
|
83
|
+
*/
|
|
84
|
+
isModelCached(): Promise<boolean>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Configuration for embedding providers
|
|
88
|
+
*/
|
|
89
|
+
export interface EmbeddingProviderConfig {
|
|
90
|
+
type: "openai" | "voyage" | "local" | "none";
|
|
91
|
+
apiKey?: string;
|
|
92
|
+
model?: string;
|
|
93
|
+
modelPath?: string;
|
|
94
|
+
dimension?: number;
|
|
95
|
+
baseUrl?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create an embedding provider from configuration
|
|
99
|
+
*/
|
|
100
|
+
export declare function createEmbeddingProvider(config: EmbeddingProviderConfig): EmbeddingProvider | null;
|
|
101
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/embeddings/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Provider Interface and Implementations
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified interface for generating embeddings from text.
|
|
5
|
+
* Supports hosted providers (OpenAI, etc.) and local models.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* OpenAI embedding provider
|
|
9
|
+
*/
|
|
10
|
+
export class OpenAIEmbeddingProvider {
|
|
11
|
+
name = "openai";
|
|
12
|
+
dimension;
|
|
13
|
+
apiKey;
|
|
14
|
+
model;
|
|
15
|
+
baseUrl;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.apiKey = options.apiKey;
|
|
18
|
+
this.model = options.model ?? "text-embedding-3-small";
|
|
19
|
+
this.dimension = options.dimension ?? 1536;
|
|
20
|
+
this.baseUrl = options.baseUrl ?? "https://api.openai.com/v1";
|
|
21
|
+
}
|
|
22
|
+
async embed(text) {
|
|
23
|
+
const [embedding] = await this.embedBatch([text]);
|
|
24
|
+
return embedding;
|
|
25
|
+
}
|
|
26
|
+
async embedBatch(texts) {
|
|
27
|
+
const response = await fetch(`${this.baseUrl}/embeddings`, {
|
|
28
|
+
method: "POST",
|
|
29
|
+
headers: {
|
|
30
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
31
|
+
"Content-Type": "application/json",
|
|
32
|
+
},
|
|
33
|
+
body: JSON.stringify({
|
|
34
|
+
model: this.model,
|
|
35
|
+
input: texts,
|
|
36
|
+
dimensions: this.dimension,
|
|
37
|
+
}),
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
const error = await response.text();
|
|
41
|
+
throw new Error(`OpenAI embedding error: ${response.status} - ${error}`);
|
|
42
|
+
}
|
|
43
|
+
const data = (await response.json());
|
|
44
|
+
// Sort by index to maintain order
|
|
45
|
+
const sorted = data.data.sort((a, b) => a.index - b.index);
|
|
46
|
+
return sorted.map((item) => item.embedding);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Anthropic Voyage embedding provider
|
|
51
|
+
* Uses Voyage AI embeddings via Anthropic partnership
|
|
52
|
+
*/
|
|
53
|
+
export class VoyageEmbeddingProvider {
|
|
54
|
+
name = "voyage";
|
|
55
|
+
dimension;
|
|
56
|
+
apiKey;
|
|
57
|
+
model;
|
|
58
|
+
constructor(options) {
|
|
59
|
+
this.apiKey = options.apiKey;
|
|
60
|
+
this.model = options.model ?? "voyage-2";
|
|
61
|
+
this.dimension = options.dimension ?? 1024;
|
|
62
|
+
}
|
|
63
|
+
async embed(text) {
|
|
64
|
+
const [embedding] = await this.embedBatch([text]);
|
|
65
|
+
return embedding;
|
|
66
|
+
}
|
|
67
|
+
async embedBatch(texts) {
|
|
68
|
+
const response = await fetch("https://api.voyageai.com/v1/embeddings", {
|
|
69
|
+
method: "POST",
|
|
70
|
+
headers: {
|
|
71
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
72
|
+
"Content-Type": "application/json",
|
|
73
|
+
},
|
|
74
|
+
body: JSON.stringify({
|
|
75
|
+
model: this.model,
|
|
76
|
+
input: texts,
|
|
77
|
+
}),
|
|
78
|
+
});
|
|
79
|
+
if (!response.ok) {
|
|
80
|
+
const error = await response.text();
|
|
81
|
+
throw new Error(`Voyage embedding error: ${response.status} - ${error}`);
|
|
82
|
+
}
|
|
83
|
+
const data = (await response.json());
|
|
84
|
+
const sorted = data.data.sort((a, b) => a.index - b.index);
|
|
85
|
+
return sorted.map((item) => item.embedding);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Local embedding provider using @huggingface/transformers
|
|
90
|
+
* Runs transformer models locally in Node.js using ONNX runtime
|
|
91
|
+
*/
|
|
92
|
+
export class LocalEmbeddingProvider {
|
|
93
|
+
name = "local";
|
|
94
|
+
dimension;
|
|
95
|
+
modelName;
|
|
96
|
+
extractor = null;
|
|
97
|
+
initPromise = null;
|
|
98
|
+
/** Default model - all-MiniLM-L6-v2 is small and fast with good quality */
|
|
99
|
+
static DEFAULT_MODEL = "sentence-transformers/all-MiniLM-L6-v2";
|
|
100
|
+
/** Dimensions for common models */
|
|
101
|
+
static MODEL_DIMENSIONS = {
|
|
102
|
+
"sentence-transformers/all-MiniLM-L6-v2": 384,
|
|
103
|
+
"sentence-transformers/all-MiniLM-L12-v2": 384,
|
|
104
|
+
"BAAI/bge-small-en-v1.5": 384,
|
|
105
|
+
"BAAI/bge-base-en-v1.5": 768,
|
|
106
|
+
"intfloat/e5-small-v2": 384,
|
|
107
|
+
"intfloat/e5-base-v2": 768,
|
|
108
|
+
// Keep Xenova aliases for backwards compatibility
|
|
109
|
+
"Xenova/all-MiniLM-L6-v2": 384,
|
|
110
|
+
"Xenova/all-MiniLM-L12-v2": 384,
|
|
111
|
+
"Xenova/bge-small-en-v1.5": 384,
|
|
112
|
+
"Xenova/bge-base-en-v1.5": 768,
|
|
113
|
+
"Xenova/e5-small-v2": 384,
|
|
114
|
+
"Xenova/e5-base-v2": 768,
|
|
115
|
+
};
|
|
116
|
+
constructor(options) {
|
|
117
|
+
this.modelName =
|
|
118
|
+
options?.modelName ??
|
|
119
|
+
options?.modelPath ??
|
|
120
|
+
LocalEmbeddingProvider.DEFAULT_MODEL;
|
|
121
|
+
// Auto-detect dimension from known models or use provided/default
|
|
122
|
+
this.dimension =
|
|
123
|
+
options?.dimension ??
|
|
124
|
+
LocalEmbeddingProvider.MODEL_DIMENSIONS[this.modelName] ??
|
|
125
|
+
384;
|
|
126
|
+
}
|
|
127
|
+
/** Get the model name/path */
|
|
128
|
+
get modelPath() {
|
|
129
|
+
return this.modelName;
|
|
130
|
+
}
|
|
131
|
+
async initialize() {
|
|
132
|
+
if (this.extractor)
|
|
133
|
+
return;
|
|
134
|
+
// Prevent multiple concurrent initializations
|
|
135
|
+
if (this.initPromise) {
|
|
136
|
+
await this.initPromise;
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.initPromise = this.doInitialize();
|
|
140
|
+
await this.initPromise;
|
|
141
|
+
}
|
|
142
|
+
async doInitialize() {
|
|
143
|
+
try {
|
|
144
|
+
// Dynamic import to avoid issues if transformers.js isn't installed
|
|
145
|
+
const { pipeline } = await import("@huggingface/transformers");
|
|
146
|
+
// Create feature-extraction pipeline for embeddings
|
|
147
|
+
this.extractor = await pipeline("feature-extraction", this.modelName, {
|
|
148
|
+
dtype: "fp32", // Use fp32 for better compatibility
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
153
|
+
throw new Error(`Failed to initialize local embedding model "${this.modelName}": ${message}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async embed(text) {
|
|
157
|
+
await this.initialize();
|
|
158
|
+
// Run the extractor
|
|
159
|
+
const output = await this.extractor(text, {
|
|
160
|
+
pooling: "mean", // Mean pooling over tokens
|
|
161
|
+
normalize: true, // L2 normalize the output
|
|
162
|
+
});
|
|
163
|
+
// Convert tensor to array
|
|
164
|
+
return Array.from(output.data);
|
|
165
|
+
}
|
|
166
|
+
async embedBatch(texts) {
|
|
167
|
+
await this.initialize();
|
|
168
|
+
// Process in batch for better efficiency
|
|
169
|
+
const results = [];
|
|
170
|
+
for (const text of texts) {
|
|
171
|
+
const output = await this.extractor(text, {
|
|
172
|
+
pooling: "mean",
|
|
173
|
+
normalize: true,
|
|
174
|
+
});
|
|
175
|
+
results.push(Array.from(output.data));
|
|
176
|
+
}
|
|
177
|
+
return results;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if a model is available locally (cached)
|
|
181
|
+
* This can be used to pre-warm the cache
|
|
182
|
+
*/
|
|
183
|
+
async isModelCached() {
|
|
184
|
+
try {
|
|
185
|
+
const { env } = await import("@huggingface/transformers");
|
|
186
|
+
// Check if model files exist in cache
|
|
187
|
+
// This is a simplified check - the actual cache structure may vary
|
|
188
|
+
return env.cacheDir !== undefined;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Create an embedding provider from configuration
|
|
197
|
+
*/
|
|
198
|
+
export function createEmbeddingProvider(config) {
|
|
199
|
+
switch (config.type) {
|
|
200
|
+
case "openai":
|
|
201
|
+
if (!config.apiKey) {
|
|
202
|
+
throw new Error("OpenAI embedding provider requires apiKey");
|
|
203
|
+
}
|
|
204
|
+
return new OpenAIEmbeddingProvider({
|
|
205
|
+
apiKey: config.apiKey,
|
|
206
|
+
model: config.model,
|
|
207
|
+
dimension: config.dimension,
|
|
208
|
+
baseUrl: config.baseUrl,
|
|
209
|
+
});
|
|
210
|
+
case "voyage":
|
|
211
|
+
if (!config.apiKey) {
|
|
212
|
+
throw new Error("Voyage embedding provider requires apiKey");
|
|
213
|
+
}
|
|
214
|
+
return new VoyageEmbeddingProvider({
|
|
215
|
+
apiKey: config.apiKey,
|
|
216
|
+
model: config.model,
|
|
217
|
+
dimension: config.dimension,
|
|
218
|
+
});
|
|
219
|
+
case "local":
|
|
220
|
+
// Local provider now has sensible defaults
|
|
221
|
+
return new LocalEmbeddingProvider({
|
|
222
|
+
modelName: config.model,
|
|
223
|
+
modelPath: config.modelPath,
|
|
224
|
+
dimension: config.dimension,
|
|
225
|
+
});
|
|
226
|
+
case "none":
|
|
227
|
+
return null;
|
|
228
|
+
default:
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/embeddings/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector Store using sqlite-vec
|
|
3
|
+
*
|
|
4
|
+
* Provides efficient vector similarity search using SQLite with the sqlite-vec extension.
|
|
5
|
+
* sqlite-vec is optimized for in-process vector search without the overhead of external services.
|
|
6
|
+
*/
|
|
7
|
+
import type { MemoryItemType } from './bm25.js';
|
|
8
|
+
export interface VectorSearchResult {
|
|
9
|
+
id: string;
|
|
10
|
+
score: number;
|
|
11
|
+
content: string;
|
|
12
|
+
type: MemoryItemType;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Vector store using sqlite-vec for efficient similarity search
|
|
16
|
+
*/
|
|
17
|
+
export declare class SqliteVectorStore {
|
|
18
|
+
private db;
|
|
19
|
+
private dimension;
|
|
20
|
+
private tableName;
|
|
21
|
+
private initialized;
|
|
22
|
+
constructor(options: {
|
|
23
|
+
dbPath: string;
|
|
24
|
+
dimension: number;
|
|
25
|
+
tableName?: string;
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Initialize the database schema
|
|
29
|
+
*/
|
|
30
|
+
private initialize;
|
|
31
|
+
/**
|
|
32
|
+
* Insert or update a vector with metadata
|
|
33
|
+
*/
|
|
34
|
+
insert(id: string, embedding: number[], type: MemoryItemType, content: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Insert multiple vectors in batch
|
|
37
|
+
*/
|
|
38
|
+
insertBatch(items: Array<{
|
|
39
|
+
id: string;
|
|
40
|
+
embedding: number[];
|
|
41
|
+
type: MemoryItemType;
|
|
42
|
+
content: string;
|
|
43
|
+
}>): void;
|
|
44
|
+
/**
|
|
45
|
+
* Search for similar vectors
|
|
46
|
+
*/
|
|
47
|
+
search(queryEmbedding: number[], options?: {
|
|
48
|
+
k?: number;
|
|
49
|
+
type?: MemoryItemType;
|
|
50
|
+
threshold?: number;
|
|
51
|
+
}): VectorSearchResult[];
|
|
52
|
+
/**
|
|
53
|
+
* Get a vector by ID
|
|
54
|
+
*/
|
|
55
|
+
get(id: string): {
|
|
56
|
+
embedding: number[];
|
|
57
|
+
type: MemoryItemType;
|
|
58
|
+
content: string;
|
|
59
|
+
} | null;
|
|
60
|
+
/**
|
|
61
|
+
* Check if an ID exists
|
|
62
|
+
*/
|
|
63
|
+
has(id: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Delete a vector
|
|
66
|
+
*/
|
|
67
|
+
delete(id: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Get the number of vectors stored
|
|
70
|
+
*/
|
|
71
|
+
get count(): number;
|
|
72
|
+
/**
|
|
73
|
+
* Get count by type
|
|
74
|
+
*/
|
|
75
|
+
countByType(type: MemoryItemType): number;
|
|
76
|
+
/**
|
|
77
|
+
* Clear all vectors
|
|
78
|
+
*/
|
|
79
|
+
clear(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Close the database connection
|
|
82
|
+
*/
|
|
83
|
+
close(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Get database statistics
|
|
86
|
+
*/
|
|
87
|
+
getStats(): {
|
|
88
|
+
totalVectors: number;
|
|
89
|
+
byType: Record<MemoryItemType, number>;
|
|
90
|
+
dimension: number;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a new vector store
|
|
95
|
+
*/
|
|
96
|
+
export declare function createVectorStore(options: {
|
|
97
|
+
dbPath: string;
|
|
98
|
+
dimension: number;
|
|
99
|
+
tableName?: string;
|
|
100
|
+
}): SqliteVectorStore;
|
|
101
|
+
//# sourceMappingURL=vector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../src/embeddings/vector-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAkB;gBAEzB,OAAO,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IAaD;;OAEG;IACH,OAAO,CAAC,UAAU;IA+BlB;;OAEG;IACH,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,GACd,IAAI;IA4BP;;OAEG;IACH,WAAW,CACT,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,EAAE,cAAc,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,GACD,IAAI;IA0BP;;OAEG;IACH,MAAM,CACJ,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,GAAE;QACP,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,cAAc,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,kBAAkB,EAAE;IA+DvB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAsBtF;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAOxB;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAkB3B;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAMlB;IAED;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAQzC;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC;KACnB;CAcF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,iBAAiB,CAEpB"}
|