learngraph 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/cjs/components/SkillGraph.js +224 -23
  2. package/dist/cjs/components/SkillGraph.js.map +1 -1
  3. package/dist/cjs/components/hooks.js +10 -0
  4. package/dist/cjs/components/hooks.js.map +1 -1
  5. package/dist/cjs/embeddings/base.js +104 -0
  6. package/dist/cjs/embeddings/base.js.map +1 -0
  7. package/dist/cjs/embeddings/index.js +91 -0
  8. package/dist/cjs/embeddings/index.js.map +1 -0
  9. package/dist/cjs/embeddings/local.js +224 -0
  10. package/dist/cjs/embeddings/local.js.map +1 -0
  11. package/dist/cjs/embeddings/openai.js +169 -0
  12. package/dist/cjs/embeddings/openai.js.map +1 -0
  13. package/dist/cjs/index.js +25 -1
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/llm/graphrag-orchestrator.js +1004 -0
  16. package/dist/cjs/llm/graphrag-orchestrator.js.map +1 -0
  17. package/dist/cjs/llm/index.js +7 -1
  18. package/dist/cjs/llm/index.js.map +1 -1
  19. package/dist/cjs/storage/index.js +15 -1
  20. package/dist/cjs/storage/index.js.map +1 -1
  21. package/dist/cjs/storage/neo4j-graphrag.js +596 -0
  22. package/dist/cjs/storage/neo4j-graphrag.js.map +1 -0
  23. package/dist/cjs/types/graphrag.js +11 -0
  24. package/dist/cjs/types/graphrag.js.map +1 -0
  25. package/dist/esm/components/SkillGraph.js +226 -25
  26. package/dist/esm/components/SkillGraph.js.map +1 -1
  27. package/dist/esm/components/hooks.js +10 -0
  28. package/dist/esm/components/hooks.js.map +1 -1
  29. package/dist/esm/embeddings/base.js +99 -0
  30. package/dist/esm/embeddings/base.js.map +1 -0
  31. package/dist/esm/embeddings/index.js +79 -0
  32. package/dist/esm/embeddings/index.js.map +1 -0
  33. package/dist/esm/embeddings/local.js +219 -0
  34. package/dist/esm/embeddings/local.js.map +1 -0
  35. package/dist/esm/embeddings/openai.js +164 -0
  36. package/dist/esm/embeddings/openai.js.map +1 -0
  37. package/dist/esm/index.js +16 -0
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/llm/graphrag-orchestrator.js +999 -0
  40. package/dist/esm/llm/graphrag-orchestrator.js.map +1 -0
  41. package/dist/esm/llm/index.js +4 -0
  42. package/dist/esm/llm/index.js.map +1 -1
  43. package/dist/esm/storage/index.js +8 -0
  44. package/dist/esm/storage/index.js.map +1 -1
  45. package/dist/esm/storage/neo4j-graphrag.js +591 -0
  46. package/dist/esm/storage/neo4j-graphrag.js.map +1 -0
  47. package/dist/esm/types/graphrag.js +10 -0
  48. package/dist/esm/types/graphrag.js.map +1 -0
  49. package/dist/types/components/SkillGraph.d.ts.map +1 -1
  50. package/dist/types/components/hooks.d.ts.map +1 -1
  51. package/dist/types/embeddings/base.d.ts +51 -0
  52. package/dist/types/embeddings/base.d.ts.map +1 -0
  53. package/dist/types/embeddings/index.d.ts +48 -0
  54. package/dist/types/embeddings/index.d.ts.map +1 -0
  55. package/dist/types/embeddings/local.d.ts +82 -0
  56. package/dist/types/embeddings/local.d.ts.map +1 -0
  57. package/dist/types/embeddings/openai.d.ts +48 -0
  58. package/dist/types/embeddings/openai.d.ts.map +1 -0
  59. package/dist/types/index.d.ts +2 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/llm/graphrag-orchestrator.d.ts +280 -0
  62. package/dist/types/llm/graphrag-orchestrator.d.ts.map +1 -0
  63. package/dist/types/llm/index.d.ts +2 -0
  64. package/dist/types/llm/index.d.ts.map +1 -1
  65. package/dist/types/mcp/tools.d.ts +6 -6
  66. package/dist/types/storage/index.d.ts +2 -0
  67. package/dist/types/storage/index.d.ts.map +1 -1
  68. package/dist/types/storage/neo4j-graphrag.d.ts +106 -0
  69. package/dist/types/storage/neo4j-graphrag.d.ts.map +1 -0
  70. package/dist/types/types/graphrag.d.ts +335 -0
  71. package/dist/types/types/graphrag.d.ts.map +1 -0
  72. package/dist/types/types/index.d.ts +1 -0
  73. package/dist/types/types/index.d.ts.map +1 -1
  74. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/embeddings/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Embedding Adapters
4
+ *
5
+ * This module provides embedding generation for GraphRAG functionality.
6
+ * Embeddings are used to enable semantic search across skills.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.createLocalEmbeddingAdapter = exports.LocalEmbeddingAdapter = exports.createOpenAIEmbeddingAdapter = exports.OpenAIEmbeddingAdapter = exports.DEFAULT_EMBEDDING_CONFIG = exports.EmbeddingError = exports.BaseEmbeddingAdapter = void 0;
12
+ exports.createEmbeddingAdapter = createEmbeddingAdapter;
13
+ exports.createEmbeddingAdapterFromEnv = createEmbeddingAdapterFromEnv;
14
+ // Base classes and utilities
15
+ var base_js_1 = require("./base.js");
16
+ Object.defineProperty(exports, "BaseEmbeddingAdapter", { enumerable: true, get: function () { return base_js_1.BaseEmbeddingAdapter; } });
17
+ Object.defineProperty(exports, "EmbeddingError", { enumerable: true, get: function () { return base_js_1.EmbeddingError; } });
18
+ var base_js_2 = require("./base.js");
19
+ Object.defineProperty(exports, "DEFAULT_EMBEDDING_CONFIG", { enumerable: true, get: function () { return base_js_2.DEFAULT_EMBEDDING_CONFIG; } });
20
+ // OpenAI embeddings
21
+ var openai_js_1 = require("./openai.js");
22
+ Object.defineProperty(exports, "OpenAIEmbeddingAdapter", { enumerable: true, get: function () { return openai_js_1.OpenAIEmbeddingAdapter; } });
23
+ Object.defineProperty(exports, "createOpenAIEmbeddingAdapter", { enumerable: true, get: function () { return openai_js_1.createOpenAIEmbeddingAdapter; } });
24
+ // Local embeddings (no API required)
25
+ var local_js_1 = require("./local.js");
26
+ Object.defineProperty(exports, "LocalEmbeddingAdapter", { enumerable: true, get: function () { return local_js_1.LocalEmbeddingAdapter; } });
27
+ Object.defineProperty(exports, "createLocalEmbeddingAdapter", { enumerable: true, get: function () { return local_js_1.createLocalEmbeddingAdapter; } });
28
+ const openai_js_2 = require("./openai.js");
29
+ const local_js_2 = require("./local.js");
30
+ const base_js_3 = require("./base.js");
31
+ /**
32
+ * Create an embedding adapter from configuration
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * // OpenAI embeddings
37
+ * const openai = createEmbeddingAdapter({
38
+ * provider: 'openai',
39
+ * apiKey: 'sk-...',
40
+ * model: 'text-embedding-3-small',
41
+ * });
42
+ *
43
+ * // Local embeddings (no API key needed)
44
+ * const local = createEmbeddingAdapter({
45
+ * provider: 'local',
46
+ * });
47
+ * ```
48
+ */
49
+ function createEmbeddingAdapter(config) {
50
+ switch (config.provider) {
51
+ case 'openai':
52
+ return new openai_js_2.OpenAIEmbeddingAdapter(config);
53
+ case 'local':
54
+ return new local_js_2.LocalEmbeddingAdapter(config);
55
+ case 'voyage':
56
+ throw new base_js_3.EmbeddingError('Voyage AI embeddings not yet implemented. Use OpenAI or local.', 'NOT_CONFIGURED', 'voyage');
57
+ case 'cohere':
58
+ throw new base_js_3.EmbeddingError('Cohere embeddings not yet implemented. Use OpenAI or local.', 'NOT_CONFIGURED', 'cohere');
59
+ default:
60
+ throw new base_js_3.EmbeddingError(`Unknown embedding provider: ${config.provider}`, 'NOT_CONFIGURED', 'local');
61
+ }
62
+ }
63
+ /**
64
+ * Create an embedding adapter from environment variables
65
+ *
66
+ * Automatically detects available API keys and creates the appropriate adapter.
67
+ * Falls back to local embeddings if no API keys are found.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * // Will use OpenAI if OPENAI_API_KEY is set, otherwise local
72
+ * const adapter = createEmbeddingAdapterFromEnv();
73
+ * ```
74
+ */
75
+ function createEmbeddingAdapterFromEnv() {
76
+ // Check for OpenAI
77
+ const openaiKey = typeof process !== 'undefined' ? process.env.OPENAI_API_KEY : undefined;
78
+ if (openaiKey) {
79
+ return new openai_js_2.OpenAIEmbeddingAdapter({
80
+ provider: 'openai',
81
+ apiKey: openaiKey,
82
+ model: 'text-embedding-3-small',
83
+ });
84
+ }
85
+ // Fall back to local embeddings
86
+ console.warn('No embedding API keys found. Using local embeddings (lower quality).');
87
+ return new local_js_2.LocalEmbeddingAdapter({
88
+ provider: 'local',
89
+ });
90
+ }
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/embeddings/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAmDH,wDA6BC;AAcD,sEAgBC;AA5GD,6BAA6B;AAC7B,qCAAiE;AAAxD,+GAAA,oBAAoB,OAAA;AAAE,yGAAA,cAAc,OAAA;AAE7C,qCAAqD;AAA5C,mHAAA,wBAAwB,OAAA;AAEjC,oBAAoB;AACpB,yCAAmF;AAA1E,mHAAA,sBAAsB,OAAA;AAAE,yHAAA,4BAA4B,OAAA;AAE7D,qCAAqC;AACrC,uCAAgF;AAAvE,iHAAA,qBAAqB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AAkB3D,2CAAqD;AACrD,yCAAmD;AACnD,uCAA2C;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,sBAAsB,CAAC,MAAuB;IAC5D,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,IAAI,kCAAsB,CAAC,MAAM,CAAC,CAAC;QAE5C,KAAK,OAAO;YACV,OAAO,IAAI,gCAAqB,CAAC,MAAM,CAAC,CAAC;QAE3C,KAAK,QAAQ;YACX,MAAM,IAAI,wBAAc,CACtB,gEAAgE,EAChE,gBAAgB,EAChB,QAAQ,CACT,CAAC;QAEJ,KAAK,QAAQ;YACX,MAAM,IAAI,wBAAc,CACtB,6DAA6D,EAC7D,gBAAgB,EAChB,QAAQ,CACT,CAAC;QAEJ;YACE,MAAM,IAAI,wBAAc,CACtB,+BAAgC,MAA0B,CAAC,QAAQ,EAAE,EACrE,gBAAgB,EAChB,OAAO,CACR,CAAC;IACN,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,6BAA6B;IAC3C,mBAAmB;IACnB,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,kCAAsB,CAAC;YAChC,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,wBAAwB;SAChC,CAAC,CAAC;IACL,CAAC;IAED,gCAAgC;IAChC,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACrF,OAAO,IAAI,gCAAqB,CAAC;QAC/B,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ /**
3
+ * Local embedding adapter
4
+ *
5
+ * Provides embedding generation without external API calls.
6
+ * Uses a simple but effective TF-IDF based approach for semantic similarity.
7
+ *
8
+ * For production use with better quality, consider using transformers.js
9
+ * with a model like 'Xenova/all-MiniLM-L6-v2'.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.LocalEmbeddingAdapter = void 0;
15
+ exports.createLocalEmbeddingAdapter = createLocalEmbeddingAdapter;
16
+ const base_js_1 = require("./base.js");
17
+ /**
18
+ * Default dimensions for local embeddings
19
+ */
20
+ const DEFAULT_LOCAL_DIMENSIONS = 384;
21
+ /**
22
+ * Common English stop words to filter out
23
+ */
24
+ const STOP_WORDS = new Set([
25
+ 'a', 'an', 'the', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',
26
+ 'of', 'with', 'by', 'from', 'as', 'is', 'was', 'are', 'were', 'been',
27
+ 'be', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would',
28
+ 'could', 'should', 'may', 'might', 'must', 'shall', 'can', 'need',
29
+ 'dare', 'ought', 'used', 'this', 'that', 'these', 'those', 'i', 'you',
30
+ 'he', 'she', 'it', 'we', 'they', 'what', 'which', 'who', 'whom',
31
+ 'whose', 'where', 'when', 'why', 'how', 'all', 'each', 'every',
32
+ 'both', 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'nor',
33
+ 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just',
34
+ ]);
35
+ /**
36
+ * Simple hash function for consistent vector generation
37
+ */
38
+ function hashCode(str) {
39
+ let hash = 0;
40
+ for (let i = 0; i < str.length; i++) {
41
+ const char = str.charCodeAt(i);
42
+ hash = ((hash << 5) - hash) + char;
43
+ hash = hash & hash; // Convert to 32bit integer
44
+ }
45
+ return hash;
46
+ }
47
+ /**
48
+ * Local embedding adapter using TF-IDF-like approach
49
+ *
50
+ * This provides a simple, fast, offline embedding that works well for
51
+ * finding similar skills based on shared vocabulary and structure.
52
+ */
53
+ class LocalEmbeddingAdapter extends base_js_1.BaseEmbeddingAdapter {
54
+ modelName;
55
+ dims;
56
+ vocabulary = new Map();
57
+ idfScores = new Map();
58
+ documentCount = 0;
59
+ constructor(config) {
60
+ super(config);
61
+ this.modelName = config.model ?? 'local-tfidf';
62
+ this.dims = DEFAULT_LOCAL_DIMENSIONS;
63
+ }
64
+ get provider() {
65
+ return 'local';
66
+ }
67
+ get model() {
68
+ return this.modelName;
69
+ }
70
+ get dimensions() {
71
+ return this.dims;
72
+ }
73
+ isConfigured() {
74
+ return true; // Local adapter is always configured
75
+ }
76
+ /**
77
+ * Tokenize text into normalized tokens
78
+ */
79
+ tokenize(text) {
80
+ return text
81
+ .toLowerCase()
82
+ .replace(/[^a-z0-9\s]/g, ' ')
83
+ .split(/\s+/)
84
+ .filter((token) => token.length > 1 && !STOP_WORDS.has(token));
85
+ }
86
+ /**
87
+ * Calculate term frequency for a document
88
+ */
89
+ calculateTF(tokens) {
90
+ const tf = new Map();
91
+ const maxFreq = Math.max(...Array.from(tokens.reduce((acc, token) => {
92
+ acc.set(token, (acc.get(token) ?? 0) + 1);
93
+ return acc;
94
+ }, new Map()).values()), 1);
95
+ for (const token of tokens) {
96
+ const count = tokens.filter((t) => t === token).length;
97
+ tf.set(token, count / maxFreq);
98
+ }
99
+ return tf;
100
+ }
101
+ /**
102
+ * Generate a deterministic embedding vector from text
103
+ *
104
+ * Uses a combination of:
105
+ * 1. Token-based hashing for semantic representation
106
+ * 2. N-gram features for capturing word relationships
107
+ * 3. Positional encoding for word order sensitivity
108
+ */
109
+ generateEmbedding(text) {
110
+ const tokens = this.tokenize(text);
111
+ const vector = new Array(this.dims).fill(0);
112
+ if (tokens.length === 0) {
113
+ return this.normalizeVector(vector);
114
+ }
115
+ const tf = this.calculateTF(tokens);
116
+ // Generate embedding from tokens with positional encoding
117
+ for (let i = 0; i < tokens.length; i++) {
118
+ const token = tokens[i];
119
+ const baseHash = hashCode(token);
120
+ const positionWeight = 1 / (1 + Math.log(i + 1));
121
+ const tfWeight = tf.get(token) ?? 1;
122
+ // Distribute token influence across multiple dimensions
123
+ for (let j = 0; j < 8; j++) {
124
+ const dimIndex = Math.abs((baseHash + j * 7919) % this.dims);
125
+ const value = Math.sin(baseHash * (j + 1)) * tfWeight * positionWeight;
126
+ vector[dimIndex] += value;
127
+ }
128
+ }
129
+ // Add bigram features
130
+ for (let i = 0; i < tokens.length - 1; i++) {
131
+ const bigram = tokens[i] + '_' + tokens[i + 1];
132
+ const bigramHash = hashCode(bigram);
133
+ const dimIndex = Math.abs(bigramHash % this.dims);
134
+ vector[dimIndex] += 0.5 * Math.sin(bigramHash);
135
+ }
136
+ // Add character-level n-gram features for robustness
137
+ const charNgrams = this.getCharNgrams(text.toLowerCase(), 3);
138
+ for (const ngram of charNgrams) {
139
+ const ngramHash = hashCode(ngram);
140
+ const dimIndex = Math.abs(ngramHash % this.dims);
141
+ vector[dimIndex] += 0.1 * Math.sin(ngramHash);
142
+ }
143
+ return this.normalizeVector(vector);
144
+ }
145
+ /**
146
+ * Extract character n-grams from text
147
+ */
148
+ getCharNgrams(text, n) {
149
+ const ngrams = [];
150
+ const cleanText = text.replace(/\s+/g, ' ');
151
+ for (let i = 0; i <= cleanText.length - n; i++) {
152
+ ngrams.push(cleanText.substring(i, i + n));
153
+ }
154
+ return ngrams;
155
+ }
156
+ async embed(text) {
157
+ const vector = this.generateEmbedding(text);
158
+ return {
159
+ vector,
160
+ dimensions: this.dims,
161
+ model: this.modelName,
162
+ };
163
+ }
164
+ async embedBatch(texts) {
165
+ // Update document statistics for better IDF weighting
166
+ this.documentCount += texts.length;
167
+ const embeddings = await Promise.all(texts.map((text) => this.embed(text)));
168
+ return {
169
+ embeddings,
170
+ };
171
+ }
172
+ /**
173
+ * Build vocabulary from a corpus for improved embeddings
174
+ *
175
+ * Call this with your skill names/descriptions to improve
176
+ * the quality of embeddings through proper IDF weighting.
177
+ */
178
+ buildVocabulary(documents) {
179
+ const documentFreq = new Map();
180
+ this.documentCount = documents.length;
181
+ for (const doc of documents) {
182
+ const tokens = new Set(this.tokenize(doc));
183
+ for (const token of tokens) {
184
+ documentFreq.set(token, (documentFreq.get(token) ?? 0) + 1);
185
+ }
186
+ }
187
+ // Calculate IDF scores
188
+ for (const [token, freq] of documentFreq.entries()) {
189
+ const idf = Math.log(this.documentCount / (1 + freq)) + 1;
190
+ this.idfScores.set(token, idf);
191
+ this.vocabulary.set(token, this.vocabulary.size);
192
+ }
193
+ }
194
+ /**
195
+ * Get vocabulary size
196
+ */
197
+ getVocabularySize() {
198
+ return this.vocabulary.size;
199
+ }
200
+ }
201
+ exports.LocalEmbeddingAdapter = LocalEmbeddingAdapter;
202
+ /**
203
+ * Create a local embedding adapter
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * // Create adapter
208
+ * const adapter = createLocalEmbeddingAdapter();
209
+ *
210
+ * // Optionally build vocabulary for better quality
211
+ * adapter.buildVocabulary(skillDescriptions);
212
+ *
213
+ * // Generate embedding
214
+ * const result = await adapter.embed('Learn to write JavaScript functions');
215
+ * ```
216
+ */
217
+ function createLocalEmbeddingAdapter(model) {
218
+ const config = {
219
+ provider: 'local',
220
+ model,
221
+ };
222
+ return new LocalEmbeddingAdapter(config);
223
+ }
224
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/embeddings/local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI embedding adapter
4
+ *
5
+ * Supports OpenAI's text-embedding models including:
6
+ * - text-embedding-3-small (default, 1536 dims, cheapest)
7
+ * - text-embedding-3-large (3072 dims, highest quality)
8
+ * - text-embedding-ada-002 (legacy, 1536 dims)
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.OpenAIEmbeddingAdapter = void 0;
14
+ exports.createOpenAIEmbeddingAdapter = createOpenAIEmbeddingAdapter;
15
+ const base_js_1 = require("./base.js");
16
+ /**
17
+ * OpenAI embedding model dimensions
18
+ */
19
+ const MODEL_DIMENSIONS = {
20
+ 'text-embedding-3-small': 1536,
21
+ 'text-embedding-3-large': 3072,
22
+ 'text-embedding-ada-002': 1536,
23
+ };
24
+ /**
25
+ * OpenAI embedding adapter
26
+ */
27
+ class OpenAIEmbeddingAdapter extends base_js_1.BaseEmbeddingAdapter {
28
+ apiKey;
29
+ baseUrl;
30
+ modelName;
31
+ dims;
32
+ constructor(config) {
33
+ super(config);
34
+ this.apiKey = config.apiKey;
35
+ this.baseUrl = 'https://api.openai.com/v1';
36
+ this.modelName = config.model ?? 'text-embedding-3-small';
37
+ // Handle custom dimensions for text-embedding-3-* models
38
+ if (config.dimensions && this.modelName.startsWith('text-embedding-3')) {
39
+ this.dims = config.dimensions;
40
+ }
41
+ else {
42
+ this.dims = MODEL_DIMENSIONS[this.modelName] ?? 1536;
43
+ }
44
+ }
45
+ get provider() {
46
+ return 'openai';
47
+ }
48
+ get model() {
49
+ return this.modelName;
50
+ }
51
+ get dimensions() {
52
+ return this.dims;
53
+ }
54
+ isConfigured() {
55
+ return !!this.apiKey;
56
+ }
57
+ async embed(text) {
58
+ const result = await this.embedBatch([text]);
59
+ const embedding = result.embeddings[0];
60
+ if (!embedding) {
61
+ throw new base_js_1.EmbeddingError('No embedding returned', 'INVALID_RESPONSE', this.provider);
62
+ }
63
+ return embedding;
64
+ }
65
+ async embedBatch(texts) {
66
+ if (!this.isConfigured()) {
67
+ throw new base_js_1.EmbeddingError('OpenAI embedding adapter not configured. Set apiKey in config.', 'NOT_CONFIGURED', this.provider);
68
+ }
69
+ if (texts.length === 0) {
70
+ return { embeddings: [], totalTokens: 0 };
71
+ }
72
+ return this.withRetry(async () => {
73
+ const headers = {
74
+ 'Content-Type': 'application/json',
75
+ Authorization: `Bearer ${this.apiKey}`,
76
+ };
77
+ const body = {
78
+ model: this.modelName,
79
+ input: texts,
80
+ };
81
+ // Add dimensions for text-embedding-3-* models with custom dimensions
82
+ const config = this.config;
83
+ if (config.dimensions && this.modelName.startsWith('text-embedding-3')) {
84
+ body.dimensions = config.dimensions;
85
+ }
86
+ const controller = new AbortController();
87
+ const timeout = setTimeout(() => controller.abort(), base_js_1.DEFAULT_EMBEDDING_CONFIG.timeout);
88
+ try {
89
+ const response = await fetch(`${this.baseUrl}/embeddings`, {
90
+ method: 'POST',
91
+ headers,
92
+ body: JSON.stringify(body),
93
+ signal: controller.signal,
94
+ });
95
+ clearTimeout(timeout);
96
+ if (!response.ok) {
97
+ const errorData = (await response.json().catch(() => ({})));
98
+ const errorMessage = errorData.error?.message ?? `HTTP ${response.status}`;
99
+ if (response.status === 429) {
100
+ throw new base_js_1.EmbeddingError(`Rate limit exceeded: ${errorMessage}`, 'RATE_LIMIT', this.provider);
101
+ }
102
+ throw new base_js_1.EmbeddingError(`OpenAI API error: ${errorMessage}`, 'API_ERROR', this.provider);
103
+ }
104
+ const data = (await response.json());
105
+ // Sort by index to ensure correct order
106
+ const sortedData = [...data.data].sort((a, b) => a.index - b.index);
107
+ const embeddings = sortedData.map((item) => ({
108
+ vector: item.embedding,
109
+ dimensions: item.embedding.length,
110
+ model: data.model,
111
+ usage: {
112
+ promptTokens: Math.round(data.usage.prompt_tokens / texts.length),
113
+ totalTokens: Math.round(data.usage.total_tokens / texts.length),
114
+ },
115
+ }));
116
+ return {
117
+ embeddings,
118
+ totalTokens: data.usage.total_tokens,
119
+ };
120
+ }
121
+ catch (error) {
122
+ clearTimeout(timeout);
123
+ if (error instanceof base_js_1.EmbeddingError) {
124
+ throw error;
125
+ }
126
+ if (error instanceof Error) {
127
+ if (error.name === 'AbortError') {
128
+ throw new base_js_1.EmbeddingError('Request timeout', 'TIMEOUT', this.provider, error);
129
+ }
130
+ throw new base_js_1.EmbeddingError(`Network error: ${error.message}`, 'NETWORK_ERROR', this.provider, error);
131
+ }
132
+ throw new base_js_1.EmbeddingError('Unknown error', 'API_ERROR', this.provider);
133
+ }
134
+ });
135
+ }
136
+ }
137
+ exports.OpenAIEmbeddingAdapter = OpenAIEmbeddingAdapter;
138
+ /**
139
+ * Create an OpenAI embedding adapter from environment variables
140
+ *
141
+ * @param model - Model to use (default: 'text-embedding-3-small')
142
+ * @param dimensions - Custom dimensions for text-embedding-3-* models
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * // Using default model (cheapest, good quality)
147
+ * const adapter = createOpenAIEmbeddingAdapter();
148
+ *
149
+ * // Using highest quality model
150
+ * const adapter = createOpenAIEmbeddingAdapter('text-embedding-3-large');
151
+ *
152
+ * // Using smaller dimensions for efficiency
153
+ * const adapter = createOpenAIEmbeddingAdapter('text-embedding-3-small', 512);
154
+ * ```
155
+ */
156
+ function createOpenAIEmbeddingAdapter(model = 'text-embedding-3-small', dimensions, apiKey) {
157
+ const key = apiKey ?? (typeof process !== 'undefined' ? process.env.OPENAI_API_KEY : undefined);
158
+ if (!key) {
159
+ throw new base_js_1.EmbeddingError('OpenAI API key not provided. Set OPENAI_API_KEY environment variable or pass apiKey.', 'NOT_CONFIGURED', 'openai');
160
+ }
161
+ const config = {
162
+ provider: 'openai',
163
+ apiKey: key,
164
+ model,
165
+ dimensions,
166
+ };
167
+ return new OpenAIEmbeddingAdapter(config);
168
+ }
169
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/embeddings/openai.ts"],"names":[],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -42,7 +42,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
42
42
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
43
43
  };
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.PACKAGE_NAME = exports.VERSION = exports.TERMINATION_DEFAULTS = exports.ADAPTIVE_DEFAULTS = exports.createQuestionPool = exports.createAdaptiveEngine = exports.AdaptiveEngine = exports.MASTERY_ENGINE_DEFAULTS = exports.createMasteryEngine = exports.MasteryEngine = exports.IRT_CONFIG_DEFAULTS = exports.estimateAbility = exports.abilityToGradeLevel = exports.abilityToPercentile = exports.selectNextItemMFI = exports.calculateStandardError = exports.calculateTestInformation = exports.calculateInformation = exports.calculateProbabilityDerivative = exports.calculateProbability = exports.createIRTEstimator = exports.IRTEstimator = exports.BKT_CONFIG_DEFAULTS = exports.calculateLogLikelihood = exports.fitBKTParameters = exports.estimateMastery = exports.createBKTEngine = exports.BKTEngine = void 0;
45
+ exports.PACKAGE_NAME = exports.VERSION = exports.GRAPHRAG_DEFAULTS = exports.createNeo4jGraphRAGStorage = exports.Neo4jGraphRAGStorage = exports.createEmbeddingAdapterFromEnv = exports.createEmbeddingAdapter = exports.createLocalEmbeddingAdapter = exports.LocalEmbeddingAdapter = exports.createOpenAIEmbeddingAdapter = exports.OpenAIEmbeddingAdapter = exports.DEFAULT_EMBEDDING_CONFIG = exports.EmbeddingError = exports.BaseEmbeddingAdapter = exports.TERMINATION_DEFAULTS = exports.ADAPTIVE_DEFAULTS = exports.createQuestionPool = exports.createAdaptiveEngine = exports.AdaptiveEngine = exports.MASTERY_ENGINE_DEFAULTS = exports.createMasteryEngine = exports.MasteryEngine = exports.IRT_CONFIG_DEFAULTS = exports.estimateAbility = exports.abilityToGradeLevel = exports.abilityToPercentile = exports.selectNextItemMFI = exports.calculateStandardError = exports.calculateTestInformation = exports.calculateInformation = exports.calculateProbabilityDerivative = exports.calculateProbability = exports.createIRTEstimator = exports.IRTEstimator = exports.BKT_CONFIG_DEFAULTS = exports.calculateLogLikelihood = exports.fitBKTParameters = exports.estimateMastery = exports.createBKTEngine = exports.BKTEngine = void 0;
46
46
  // ─────────────────────────────────────────────────────────────────────────────
47
47
  // Core Types
48
48
  // ─────────────────────────────────────────────────────────────────────────────
@@ -82,6 +82,30 @@ Object.defineProperty(exports, "createQuestionPool", { enumerable: true, get: fu
82
82
  Object.defineProperty(exports, "ADAPTIVE_DEFAULTS", { enumerable: true, get: function () { return index_js_1.ADAPTIVE_DEFAULTS; } });
83
83
  Object.defineProperty(exports, "TERMINATION_DEFAULTS", { enumerable: true, get: function () { return index_js_1.TERMINATION_DEFAULTS; } });
84
84
  // ─────────────────────────────────────────────────────────────────────────────
85
+ // Embedding Adapters (for GraphRAG)
86
+ // ─────────────────────────────────────────────────────────────────────────────
87
+ var index_js_2 = require("./embeddings/index.js");
88
+ // Base
89
+ Object.defineProperty(exports, "BaseEmbeddingAdapter", { enumerable: true, get: function () { return index_js_2.BaseEmbeddingAdapter; } });
90
+ Object.defineProperty(exports, "EmbeddingError", { enumerable: true, get: function () { return index_js_2.EmbeddingError; } });
91
+ Object.defineProperty(exports, "DEFAULT_EMBEDDING_CONFIG", { enumerable: true, get: function () { return index_js_2.DEFAULT_EMBEDDING_CONFIG; } });
92
+ // OpenAI
93
+ Object.defineProperty(exports, "OpenAIEmbeddingAdapter", { enumerable: true, get: function () { return index_js_2.OpenAIEmbeddingAdapter; } });
94
+ Object.defineProperty(exports, "createOpenAIEmbeddingAdapter", { enumerable: true, get: function () { return index_js_2.createOpenAIEmbeddingAdapter; } });
95
+ // Local
96
+ Object.defineProperty(exports, "LocalEmbeddingAdapter", { enumerable: true, get: function () { return index_js_2.LocalEmbeddingAdapter; } });
97
+ Object.defineProperty(exports, "createLocalEmbeddingAdapter", { enumerable: true, get: function () { return index_js_2.createLocalEmbeddingAdapter; } });
98
+ // Factory
99
+ Object.defineProperty(exports, "createEmbeddingAdapter", { enumerable: true, get: function () { return index_js_2.createEmbeddingAdapter; } });
100
+ Object.defineProperty(exports, "createEmbeddingAdapterFromEnv", { enumerable: true, get: function () { return index_js_2.createEmbeddingAdapterFromEnv; } });
101
+ // ─────────────────────────────────────────────────────────────────────────────
102
+ // GraphRAG Storage
103
+ // ─────────────────────────────────────────────────────────────────────────────
104
+ var neo4j_graphrag_js_1 = require("./storage/neo4j-graphrag.js");
105
+ Object.defineProperty(exports, "Neo4jGraphRAGStorage", { enumerable: true, get: function () { return neo4j_graphrag_js_1.Neo4jGraphRAGStorage; } });
106
+ Object.defineProperty(exports, "createNeo4jGraphRAGStorage", { enumerable: true, get: function () { return neo4j_graphrag_js_1.createNeo4jGraphRAGStorage; } });
107
+ Object.defineProperty(exports, "GRAPHRAG_DEFAULTS", { enumerable: true, get: function () { return neo4j_graphrag_js_1.GRAPHRAG_DEFAULTS; } });
108
+ // ─────────────────────────────────────────────────────────────────────────────
85
109
  // Package Metadata
86
110
  // ─────────────────────────────────────────────────────────────────────────────
87
111
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;;;;;;;;;;;AAEH,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAChF,mDAAiC;AAEjC,gFAAgF;AAChF,6DAA6D;AAC7D,gFAAgF;AAChF,kDA+B+B;AA9B7B,MAAM;AACN,qGAAA,SAAS,OAAA;AACT,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,4GAAA,gBAAgB,OAAA;AAChB,kHAAA,sBAAsB,OAAA;AACtB,+GAAA,mBAAmB,OAAA;AACnB,MAAM;AACN,wGAAA,YAAY,OAAA;AACZ,8GAAA,kBAAkB,OAAA;AAClB,gHAAA,oBAAoB,OAAA;AACpB,0HAAA,8BAA8B,OAAA;AAC9B,gHAAA,oBAAoB,OAAA;AACpB,oHAAA,wBAAwB,OAAA;AACxB,kHAAA,sBAAsB,OAAA;AACtB,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,+GAAA,mBAAmB,OAAA;AACnB,iBAAiB;AACjB,yGAAA,aAAa,OAAA;AACb,+GAAA,mBAAmB,OAAA;AACnB,mHAAA,uBAAuB,OAAA;AACvB,mBAAmB;AACnB,0GAAA,cAAc,OAAA;AACd,gHAAA,oBAAoB,OAAA;AACpB,8GAAA,kBAAkB,OAAA;AAClB,6GAAA,iBAAiB,OAAA;AACjB,gHAAA,oBAAoB,OAAA;AAGtB,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACU,QAAA,OAAO,GAAG,OAAO,CAAC;AAE/B;;GAEG;AACU,QAAA,YAAY,GAAG,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;;;;;;;;;;;AAEH,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAChF,mDAAiC;AAEjC,gFAAgF;AAChF,6DAA6D;AAC7D,gFAAgF;AAChF,kDA+B+B;AA9B7B,MAAM;AACN,qGAAA,SAAS,OAAA;AACT,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,4GAAA,gBAAgB,OAAA;AAChB,kHAAA,sBAAsB,OAAA;AACtB,+GAAA,mBAAmB,OAAA;AACnB,MAAM;AACN,wGAAA,YAAY,OAAA;AACZ,8GAAA,kBAAkB,OAAA;AAClB,gHAAA,oBAAoB,OAAA;AACpB,0HAAA,8BAA8B,OAAA;AAC9B,gHAAA,oBAAoB,OAAA;AACpB,oHAAA,wBAAwB,OAAA;AACxB,kHAAA,sBAAsB,OAAA;AACtB,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,+GAAA,mBAAmB,OAAA;AACnB,iBAAiB;AACjB,yGAAA,aAAa,OAAA;AACb,+GAAA,mBAAmB,OAAA;AACnB,mHAAA,uBAAuB,OAAA;AACvB,mBAAmB;AACnB,0GAAA,cAAc,OAAA;AACd,gHAAA,oBAAoB,OAAA;AACpB,8GAAA,kBAAkB,OAAA;AAClB,6GAAA,iBAAiB,OAAA;AACjB,gHAAA,oBAAoB,OAAA;AAGtB,gFAAgF;AAChF,oCAAoC;AACpC,gFAAgF;AAChF,kDAc+B;AAb7B,OAAO;AACP,gHAAA,oBAAoB,OAAA;AACpB,0GAAA,cAAc,OAAA;AACd,oHAAA,wBAAwB,OAAA;AACxB,SAAS;AACT,kHAAA,sBAAsB,OAAA;AACtB,wHAAA,4BAA4B,OAAA;AAC5B,QAAQ;AACR,iHAAA,qBAAqB,OAAA;AACrB,uHAAA,2BAA2B,OAAA;AAC3B,UAAU;AACV,kHAAA,sBAAsB,OAAA;AACtB,yHAAA,6BAA6B,OAAA;AAG/B,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAChF,iEAIqC;AAHnC,yHAAA,oBAAoB,OAAA;AACpB,+HAAA,0BAA0B,OAAA;AAC1B,sHAAA,iBAAiB,OAAA;AAGnB,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACU,QAAA,OAAO,GAAG,OAAO,CAAC;AAE/B;;GAEG;AACU,QAAA,YAAY,GAAG,YAAY,CAAC"}