@matperez/coderag 0.1.24

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 (147) hide show
  1. package/README.md +154 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/ast-chunking.d.ts +40 -0
  4. package/dist/ast-chunking.d.ts.map +1 -0
  5. package/dist/ast-chunking.js +88 -0
  6. package/dist/ast-chunking.js.map +1 -0
  7. package/dist/ast-chunking.test.d.ts +5 -0
  8. package/dist/ast-chunking.test.d.ts.map +1 -0
  9. package/dist/ast-chunking.test.js +173 -0
  10. package/dist/ast-chunking.test.js.map +1 -0
  11. package/dist/code-tokenizer.d.ts +62 -0
  12. package/dist/code-tokenizer.d.ts.map +1 -0
  13. package/dist/code-tokenizer.js +129 -0
  14. package/dist/code-tokenizer.js.map +1 -0
  15. package/dist/code-tokenizer.test.d.ts +5 -0
  16. package/dist/code-tokenizer.test.d.ts.map +1 -0
  17. package/dist/code-tokenizer.test.js +96 -0
  18. package/dist/code-tokenizer.test.js.map +1 -0
  19. package/dist/db/client-pg.d.ts +16 -0
  20. package/dist/db/client-pg.d.ts.map +1 -0
  21. package/dist/db/client-pg.js +38 -0
  22. package/dist/db/client-pg.js.map +1 -0
  23. package/dist/db/client.d.ts +36 -0
  24. package/dist/db/client.d.ts.map +1 -0
  25. package/dist/db/client.js +81 -0
  26. package/dist/db/client.js.map +1 -0
  27. package/dist/db/migrations-pg.d.ts +6 -0
  28. package/dist/db/migrations-pg.d.ts.map +1 -0
  29. package/dist/db/migrations-pg.js +88 -0
  30. package/dist/db/migrations-pg.js.map +1 -0
  31. package/dist/db/migrations.d.ts +9 -0
  32. package/dist/db/migrations.d.ts.map +1 -0
  33. package/dist/db/migrations.js +164 -0
  34. package/dist/db/migrations.js.map +1 -0
  35. package/dist/db/schema-pg.d.ts +611 -0
  36. package/dist/db/schema-pg.d.ts.map +1 -0
  37. package/dist/db/schema-pg.js +66 -0
  38. package/dist/db/schema-pg.js.map +1 -0
  39. package/dist/db/schema.d.ts +630 -0
  40. package/dist/db/schema.d.ts.map +1 -0
  41. package/dist/db/schema.js +85 -0
  42. package/dist/db/schema.js.map +1 -0
  43. package/dist/embeddings.d.ts +92 -0
  44. package/dist/embeddings.d.ts.map +1 -0
  45. package/dist/embeddings.js +275 -0
  46. package/dist/embeddings.js.map +1 -0
  47. package/dist/embeddings.test.d.ts +5 -0
  48. package/dist/embeddings.test.d.ts.map +1 -0
  49. package/dist/embeddings.test.js +255 -0
  50. package/dist/embeddings.test.js.map +1 -0
  51. package/dist/hybrid-search.d.ts +47 -0
  52. package/dist/hybrid-search.d.ts.map +1 -0
  53. package/dist/hybrid-search.js +215 -0
  54. package/dist/hybrid-search.js.map +1 -0
  55. package/dist/hybrid-search.test.d.ts +5 -0
  56. package/dist/hybrid-search.test.d.ts.map +1 -0
  57. package/dist/hybrid-search.test.js +252 -0
  58. package/dist/hybrid-search.test.js.map +1 -0
  59. package/dist/incremental-tfidf.d.ts +77 -0
  60. package/dist/incremental-tfidf.d.ts.map +1 -0
  61. package/dist/incremental-tfidf.js +248 -0
  62. package/dist/incremental-tfidf.js.map +1 -0
  63. package/dist/incremental-tfidf.test.d.ts +5 -0
  64. package/dist/incremental-tfidf.test.d.ts.map +1 -0
  65. package/dist/incremental-tfidf.test.js +276 -0
  66. package/dist/incremental-tfidf.test.js.map +1 -0
  67. package/dist/index.d.ts +18 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +19 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/indexer.d.ts +205 -0
  72. package/dist/indexer.d.ts.map +1 -0
  73. package/dist/indexer.js +1331 -0
  74. package/dist/indexer.js.map +1 -0
  75. package/dist/indexer.test.d.ts +12 -0
  76. package/dist/indexer.test.d.ts.map +1 -0
  77. package/dist/indexer.test.js +471 -0
  78. package/dist/indexer.test.js.map +1 -0
  79. package/dist/language-config.d.ts +54 -0
  80. package/dist/language-config.d.ts.map +1 -0
  81. package/dist/language-config.js +75 -0
  82. package/dist/language-config.js.map +1 -0
  83. package/dist/search-cache.d.ts +63 -0
  84. package/dist/search-cache.d.ts.map +1 -0
  85. package/dist/search-cache.js +118 -0
  86. package/dist/search-cache.js.map +1 -0
  87. package/dist/search-cache.test.d.ts +5 -0
  88. package/dist/search-cache.test.d.ts.map +1 -0
  89. package/dist/search-cache.test.js +194 -0
  90. package/dist/search-cache.test.js.map +1 -0
  91. package/dist/storage-factory.d.ts +11 -0
  92. package/dist/storage-factory.d.ts.map +1 -0
  93. package/dist/storage-factory.js +17 -0
  94. package/dist/storage-factory.js.map +1 -0
  95. package/dist/storage-persistent-pg.d.ts +75 -0
  96. package/dist/storage-persistent-pg.d.ts.map +1 -0
  97. package/dist/storage-persistent-pg.js +579 -0
  98. package/dist/storage-persistent-pg.js.map +1 -0
  99. package/dist/storage-persistent-pg.test.d.ts +7 -0
  100. package/dist/storage-persistent-pg.test.d.ts.map +1 -0
  101. package/dist/storage-persistent-pg.test.js +90 -0
  102. package/dist/storage-persistent-pg.test.js.map +1 -0
  103. package/dist/storage-persistent-types.d.ts +110 -0
  104. package/dist/storage-persistent-types.d.ts.map +1 -0
  105. package/dist/storage-persistent-types.js +5 -0
  106. package/dist/storage-persistent-types.js.map +1 -0
  107. package/dist/storage-persistent.d.ts +231 -0
  108. package/dist/storage-persistent.d.ts.map +1 -0
  109. package/dist/storage-persistent.js +897 -0
  110. package/dist/storage-persistent.js.map +1 -0
  111. package/dist/storage-persistent.test.d.ts +5 -0
  112. package/dist/storage-persistent.test.d.ts.map +1 -0
  113. package/dist/storage-persistent.test.js +325 -0
  114. package/dist/storage-persistent.test.js.map +1 -0
  115. package/dist/storage.d.ts +63 -0
  116. package/dist/storage.d.ts.map +1 -0
  117. package/dist/storage.js +67 -0
  118. package/dist/storage.js.map +1 -0
  119. package/dist/storage.test.d.ts +5 -0
  120. package/dist/storage.test.d.ts.map +1 -0
  121. package/dist/storage.test.js +157 -0
  122. package/dist/storage.test.js.map +1 -0
  123. package/dist/tfidf.d.ts +97 -0
  124. package/dist/tfidf.d.ts.map +1 -0
  125. package/dist/tfidf.js +308 -0
  126. package/dist/tfidf.js.map +1 -0
  127. package/dist/tfidf.test.d.ts +5 -0
  128. package/dist/tfidf.test.d.ts.map +1 -0
  129. package/dist/tfidf.test.js +181 -0
  130. package/dist/tfidf.test.js.map +1 -0
  131. package/dist/utils.d.ts +61 -0
  132. package/dist/utils.d.ts.map +1 -0
  133. package/dist/utils.js +264 -0
  134. package/dist/utils.js.map +1 -0
  135. package/dist/utils.test.d.ts +5 -0
  136. package/dist/utils.test.d.ts.map +1 -0
  137. package/dist/utils.test.js +94 -0
  138. package/dist/utils.test.js.map +1 -0
  139. package/dist/vector-storage.d.ts +120 -0
  140. package/dist/vector-storage.d.ts.map +1 -0
  141. package/dist/vector-storage.js +264 -0
  142. package/dist/vector-storage.js.map +1 -0
  143. package/dist/vector-storage.test.d.ts +5 -0
  144. package/dist/vector-storage.test.d.ts.map +1 -0
  145. package/dist/vector-storage.test.js +345 -0
  146. package/dist/vector-storage.test.js.map +1 -0
  147. package/package.json +85 -0
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Database schema for persistent codebase index
3
+ */
4
+ import { index, integer, real, sqliteTable, text } from 'drizzle-orm/sqlite-core';
5
+ /**
6
+ * Indexed files table
7
+ * Stores file metadata and content
8
+ */
9
+ export const files = sqliteTable('files', {
10
+ id: integer('id').primaryKey({ autoIncrement: true }),
11
+ path: text('path').notNull().unique(),
12
+ content: text('content').notNull(),
13
+ hash: text('hash').notNull(),
14
+ size: integer('size').notNull(),
15
+ mtime: integer('mtime').notNull(), // Unix timestamp in milliseconds
16
+ language: text('language'),
17
+ indexedAt: integer('indexed_at').notNull(), // Unix timestamp
18
+ magnitude: real('magnitude').default(0), // Pre-computed TF-IDF vector magnitude for cosine similarity
19
+ tokenCount: integer('token_count').default(0), // Total tokens in document (for BM25 length normalization)
20
+ }, (table) => ({
21
+ pathIdx: index('files_path_idx').on(table.path),
22
+ hashIdx: index('files_hash_idx').on(table.hash),
23
+ }));
24
+ /**
25
+ * Chunks table
26
+ * Stores semantic chunks extracted from files (functions, classes, sections, etc.)
27
+ */
28
+ export const chunks = sqliteTable('chunks', {
29
+ id: integer('id').primaryKey({ autoIncrement: true }),
30
+ fileId: integer('file_id')
31
+ .notNull()
32
+ .references(() => files.id, { onDelete: 'cascade' }),
33
+ content: text('content').notNull(), // Chunk content
34
+ type: text('type').notNull(), // Chunk type (FunctionDeclaration, heading, etc.)
35
+ startLine: integer('start_line').notNull(),
36
+ endLine: integer('end_line').notNull(),
37
+ metadata: text('metadata'), // JSON string for additional metadata
38
+ tokenCount: integer('token_count').default(0), // Tokens in chunk (for BM25)
39
+ magnitude: real('magnitude').default(0), // TF-IDF magnitude for chunk
40
+ }, (table) => ({
41
+ fileIdIdx: index('chunks_file_id_idx').on(table.fileId),
42
+ typeIdx: index('chunks_type_idx').on(table.type),
43
+ }));
44
+ /**
45
+ * TF-IDF vectors table
46
+ * Stores term frequencies and TF-IDF scores per CHUNK (not file)
47
+ */
48
+ export const documentVectors = sqliteTable('document_vectors', {
49
+ id: integer('id').primaryKey({ autoIncrement: true }),
50
+ chunkId: integer('chunk_id')
51
+ .notNull()
52
+ .references(() => chunks.id, { onDelete: 'cascade' }),
53
+ term: text('term').notNull(),
54
+ tf: real('tf').notNull(), // Term frequency
55
+ tfidf: real('tfidf').notNull(), // TF-IDF score
56
+ rawFreq: integer('raw_freq').notNull(), // Raw term count
57
+ }, (table) => ({
58
+ chunkIdIdx: index('vectors_chunk_id_idx').on(table.chunkId),
59
+ termIdx: index('vectors_term_idx').on(table.term),
60
+ tfidfIdx: index('vectors_tfidf_idx').on(table.tfidf),
61
+ termChunkIdx: index('vectors_term_chunk_idx').on(table.term, table.chunkId), // Composite index for search
62
+ }));
63
+ /**
64
+ * IDF (Inverse Document Frequency) table
65
+ * Stores global IDF scores for terms
66
+ */
67
+ export const idfScores = sqliteTable('idf_scores', {
68
+ id: integer('id').primaryKey({ autoIncrement: true }),
69
+ term: text('term').notNull().unique(),
70
+ idf: real('idf').notNull(),
71
+ documentFrequency: integer('document_frequency').notNull(), // How many docs contain this term
72
+ }, (table) => ({
73
+ termIdx: index('idf_term_idx').on(table.term),
74
+ }));
75
+ /**
76
+ * Index metadata table
77
+ * Stores global index information
78
+ */
79
+ export const indexMetadata = sqliteTable('index_metadata', {
80
+ id: integer('id').primaryKey({ autoIncrement: true }),
81
+ key: text('key').notNull().unique(),
82
+ value: text('value').notNull(),
83
+ updatedAt: integer('updated_at').notNull(),
84
+ });
85
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Embedding generation utilities - Pure Functional
3
+ * Uses Vercel AI SDK with OpenAI Provider
4
+ *
5
+ * Design:
6
+ * - Pure functions (no classes)
7
+ * - Immutable data structures
8
+ * - Function composition
9
+ * - Config from environment variables
10
+ */
11
+ /**
12
+ * Embedding Provider Config
13
+ */
14
+ export interface EmbeddingConfig {
15
+ readonly provider: 'openai' | 'openai-compatible' | 'mock';
16
+ readonly model: string;
17
+ readonly dimensions: number;
18
+ readonly apiKey?: string;
19
+ readonly baseURL?: string;
20
+ readonly batchSize?: number;
21
+ }
22
+ /**
23
+ * Embedding Provider Interface
24
+ */
25
+ export interface EmbeddingProvider {
26
+ readonly name: string;
27
+ readonly model: string;
28
+ readonly dimensions: number;
29
+ readonly generateEmbedding: (text: string) => Promise<number[]>;
30
+ readonly generateEmbeddings: (texts: string[]) => Promise<number[][]>;
31
+ }
32
+ /**
33
+ * Generate mock embedding using deterministic hash
34
+ * Used as fallback when OpenAI is not available
35
+ */
36
+ export declare const generateMockEmbedding: (text: string, dimensions: number) => number[];
37
+ /**
38
+ * Create default config from environment
39
+ */
40
+ export declare const createDefaultConfig: () => EmbeddingConfig;
41
+ /**
42
+ * Create OpenAI Embedding Provider (pure function)
43
+ */
44
+ export declare const createOpenAIProvider: (config: EmbeddingConfig) => EmbeddingProvider;
45
+ /**
46
+ * Create Mock Embedding Provider (pure function)
47
+ */
48
+ export declare const createMockProvider: (dimensions?: number) => EmbeddingProvider;
49
+ /**
50
+ * Provider Factory Type
51
+ */
52
+ type ProviderFactory = (config: EmbeddingConfig) => EmbeddingProvider;
53
+ /**
54
+ * Register a provider factory
55
+ */
56
+ export declare const registerProvider: (name: string, factory: ProviderFactory) => void;
57
+ /**
58
+ * Get registered provider names
59
+ */
60
+ export declare const getRegisteredProviders: () => string[];
61
+ /**
62
+ * Create Embedding Provider from config (pure function)
63
+ * Uses provider registry for modularity
64
+ */
65
+ export declare const createEmbeddingProvider: (config: EmbeddingConfig) => EmbeddingProvider;
66
+ /**
67
+ * Get default embedding provider (pure function with I/O)
68
+ */
69
+ export declare const getDefaultEmbeddingProvider: () => Promise<EmbeddingProvider>;
70
+ /**
71
+ * Chunk text into smaller pieces
72
+ * Pure function - no side effects
73
+ */
74
+ export declare const chunkText: (text: string, options?: {
75
+ readonly maxChunkSize?: number;
76
+ readonly overlap?: number;
77
+ }) => readonly string[];
78
+ /**
79
+ * Calculate cosine similarity between two vectors
80
+ * Returns value between -1 and 1 (1 = identical, 0 = orthogonal, -1 = opposite)
81
+ */
82
+ export declare const cosineSimilarity: (vecA: number[], vecB: number[]) => number;
83
+ /**
84
+ * Normalize vector to unit length
85
+ */
86
+ export declare const normalizeVector: (vector: number[]) => number[];
87
+ /**
88
+ * Compose embedding providers (primary + fallback)
89
+ */
90
+ export declare const composeProviders: (primary: EmbeddingProvider, fallback: EmbeddingProvider) => EmbeddingProvider;
91
+ export {};
92
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,mBAAmB,GAAG,MAAM,CAAA;IAC1D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC/D,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;CACrE;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,YAAY,MAAM,KAAG,MAAM,EAuB9E,CAAA;AAkBD;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAO,eAyBtC,CAAA;AAiDD;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,eAAe,KAAG,iBAW9D,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,mBAAiB,KAAG,iBAOrD,CAAA;AAEF;;GAEG;AACH,KAAK,eAAe,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,iBAAiB,CAAA;AAOrE;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,SAAS,eAAe,KAAG,IAEzE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAO,MAAM,EAE/C,CAAA;AAqBD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,eAAe,KAAG,iBAUjE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,QAAa,OAAO,CAAC,iBAAiB,CAG7E,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,GACrB,MAAM,MAAM,EACZ,UAAS;IACR,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CACpB,KACJ,SAAS,MAAM,EAgCjB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,EAAE,MAAM,MAAM,EAAE,KAAG,MAsBjE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,KAAG,MAAM,EAMxD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC5B,SAAS,iBAAiB,EAC1B,UAAU,iBAAiB,KACzB,iBAkBD,CAAA"}
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Embedding generation utilities - Pure Functional
3
+ * Uses Vercel AI SDK with OpenAI Provider
4
+ *
5
+ * Design:
6
+ * - Pure functions (no classes)
7
+ * - Immutable data structures
8
+ * - Function composition
9
+ * - Config from environment variables
10
+ */
11
+ import { createOpenAI } from '@ai-sdk/openai';
12
+ import { embed, embedMany } from 'ai';
13
+ /**
14
+ * Generate mock embedding using deterministic hash
15
+ * Used as fallback when OpenAI is not available
16
+ */
17
+ export const generateMockEmbedding = (text, dimensions) => {
18
+ // Simple hash function for consistency
19
+ const hash = (str) => {
20
+ let h = 0;
21
+ for (let i = 0; i < str.length; i++) {
22
+ h = (Math.imul(31, h) + str.charCodeAt(i)) | 0;
23
+ }
24
+ return h;
25
+ };
26
+ const baseHash = hash(text);
27
+ const vector = [];
28
+ for (let i = 0; i < dimensions; i++) {
29
+ // Generate deterministic pseudo-random values
30
+ const seed = baseHash + i;
31
+ const value = (Math.sin(seed) + Math.cos(seed * 0.5)) / 2;
32
+ vector.push(value);
33
+ }
34
+ // Normalize to unit vector
35
+ const magnitude = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
36
+ return vector.map((val) => val / magnitude);
37
+ };
38
+ /**
39
+ * Get dimensions for OpenAI model
40
+ * Returns undefined for unknown models (must be specified in config)
41
+ */
42
+ const getModelDimensions = (model) => {
43
+ switch (model) {
44
+ case 'text-embedding-3-large':
45
+ return 3072;
46
+ case 'text-embedding-3-small':
47
+ case 'text-embedding-ada-002':
48
+ return 1536;
49
+ default:
50
+ return undefined; // For custom models, dimensions must be specified
51
+ }
52
+ };
53
+ /**
54
+ * Create default config from environment
55
+ */
56
+ export const createDefaultConfig = () => {
57
+ const apiKey = process.env.OPENAI_API_KEY;
58
+ const baseURL = process.env.OPENAI_BASE_URL; // Support custom base URL
59
+ const model = process.env.EMBEDDING_MODEL || 'text-embedding-3-small';
60
+ const customDimensions = process.env.EMBEDDING_DIMENSIONS
61
+ ? parseInt(process.env.EMBEDDING_DIMENSIONS, 10)
62
+ : undefined;
63
+ // Determine provider type
64
+ let provider = 'mock';
65
+ if (apiKey) {
66
+ provider = baseURL ? 'openai-compatible' : 'openai';
67
+ }
68
+ // Get dimensions (from env, model default, or fallback)
69
+ const dimensions = customDimensions || getModelDimensions(model) || 1536;
70
+ return {
71
+ provider,
72
+ model,
73
+ dimensions,
74
+ apiKey,
75
+ baseURL,
76
+ batchSize: 10,
77
+ };
78
+ };
79
+ /**
80
+ * Create OpenAI embedding model instance
81
+ * Supports both official OpenAI and OpenAI-compatible endpoints
82
+ */
83
+ const createEmbeddingModel = (config) => {
84
+ const provider = createOpenAI({
85
+ apiKey: config.apiKey || process.env.OPENAI_API_KEY,
86
+ baseURL: config.baseURL, // Support custom endpoints (OpenRouter, Together AI, etc.)
87
+ });
88
+ return provider.embedding(config.model);
89
+ };
90
+ /**
91
+ * Generate single embedding (OpenAI)
92
+ */
93
+ const generateOpenAIEmbedding = async (model, text, dimensions) => {
94
+ try {
95
+ const { embedding } = await embed({ model, value: text });
96
+ return embedding;
97
+ }
98
+ catch (error) {
99
+ console.error('[WARN] OpenAI embedding failed, falling back to mock:', error);
100
+ return generateMockEmbedding(text, dimensions);
101
+ }
102
+ };
103
+ /**
104
+ * Generate multiple embeddings (OpenAI)
105
+ */
106
+ const generateOpenAIEmbeddings = async (model, texts, dimensions) => {
107
+ try {
108
+ const { embeddings } = await embedMany({ model, values: texts });
109
+ return embeddings;
110
+ }
111
+ catch (error) {
112
+ console.error('[WARN] OpenAI embeddings failed, falling back to mock:', error);
113
+ return texts.map((text) => generateMockEmbedding(text, dimensions));
114
+ }
115
+ };
116
+ /**
117
+ * Create OpenAI Embedding Provider (pure function)
118
+ */
119
+ export const createOpenAIProvider = (config) => {
120
+ const model = createEmbeddingModel(config);
121
+ return {
122
+ name: 'openai',
123
+ model: config.model,
124
+ dimensions: config.dimensions,
125
+ generateEmbedding: (text) => generateOpenAIEmbedding(model, text, config.dimensions),
126
+ generateEmbeddings: (texts) => generateOpenAIEmbeddings(model, texts, config.dimensions),
127
+ };
128
+ };
129
+ /**
130
+ * Create Mock Embedding Provider (pure function)
131
+ */
132
+ export const createMockProvider = (dimensions = 1536) => ({
133
+ name: 'mock',
134
+ model: 'mock',
135
+ dimensions,
136
+ generateEmbedding: (text) => Promise.resolve(generateMockEmbedding(text, dimensions)),
137
+ generateEmbeddings: (texts) => Promise.resolve(texts.map((text) => generateMockEmbedding(text, dimensions))),
138
+ });
139
+ /**
140
+ * Provider Registry (modular design)
141
+ */
142
+ const providerRegistry = new Map();
143
+ /**
144
+ * Register a provider factory
145
+ */
146
+ export const registerProvider = (name, factory) => {
147
+ providerRegistry.set(name, factory);
148
+ };
149
+ /**
150
+ * Get registered provider names
151
+ */
152
+ export const getRegisteredProviders = () => {
153
+ return Array.from(providerRegistry.keys());
154
+ };
155
+ // Register built-in providers
156
+ registerProvider('openai', (config) => {
157
+ console.error(`[INFO] Creating OpenAI provider: ${config.model} (${config.dimensions} dims)`);
158
+ return createOpenAIProvider(config);
159
+ });
160
+ registerProvider('openai-compatible', (config) => {
161
+ console.error(`[INFO] Creating OpenAI-compatible provider: ${config.model} (${config.dimensions} dims)`, config.baseURL ? `at ${config.baseURL}` : '');
162
+ return createOpenAIProvider(config);
163
+ });
164
+ registerProvider('mock', (config) => {
165
+ console.error('[INFO] Creating Mock embedding provider');
166
+ return createMockProvider(config.dimensions);
167
+ });
168
+ /**
169
+ * Create Embedding Provider from config (pure function)
170
+ * Uses provider registry for modularity
171
+ */
172
+ export const createEmbeddingProvider = (config) => {
173
+ const factory = providerRegistry.get(config.provider);
174
+ if (!factory) {
175
+ console.error(`[WARN] Unknown provider '${config.provider}', using mock`);
176
+ const mockFactory = providerRegistry.get('mock');
177
+ return mockFactory?.(config);
178
+ }
179
+ return factory(config);
180
+ };
181
+ /**
182
+ * Get default embedding provider (pure function with I/O)
183
+ */
184
+ export const getDefaultEmbeddingProvider = async () => {
185
+ const config = createDefaultConfig();
186
+ return createEmbeddingProvider(config);
187
+ };
188
+ /**
189
+ * Chunk text into smaller pieces
190
+ * Pure function - no side effects
191
+ */
192
+ export const chunkText = (text, options = {}) => {
193
+ const maxChunkSize = options.maxChunkSize ?? 1000;
194
+ const overlap = options.overlap ?? 100;
195
+ if (text.length === 0) {
196
+ return [];
197
+ }
198
+ const chunks = [];
199
+ let start = 0;
200
+ while (start < text.length) {
201
+ const end = Math.min(start + maxChunkSize, text.length);
202
+ const chunk = text.slice(start, end);
203
+ chunks.push(chunk);
204
+ // If we've reached the end, break
205
+ if (end >= text.length) {
206
+ break;
207
+ }
208
+ // Move start forward, ensuring it advances
209
+ const nextStart = end - overlap;
210
+ if (nextStart <= start) {
211
+ // Avoid infinite loop: ensure we always move forward
212
+ start = end;
213
+ }
214
+ else {
215
+ start = nextStart;
216
+ }
217
+ }
218
+ return chunks;
219
+ };
220
+ /**
221
+ * Calculate cosine similarity between two vectors
222
+ * Returns value between -1 and 1 (1 = identical, 0 = orthogonal, -1 = opposite)
223
+ */
224
+ export const cosineSimilarity = (vecA, vecB) => {
225
+ if (vecA.length !== vecB.length) {
226
+ throw new Error(`Vector dimension mismatch: ${vecA.length} vs ${vecB.length}`);
227
+ }
228
+ const { dotProduct, normA, normB } = vecA.reduce((acc, aVal, i) => {
229
+ const bVal = vecB[i];
230
+ return {
231
+ dotProduct: acc.dotProduct + aVal * bVal,
232
+ normA: acc.normA + aVal * aVal,
233
+ normB: acc.normB + bVal * bVal,
234
+ };
235
+ }, { dotProduct: 0, normA: 0, normB: 0 });
236
+ if (normA === 0 || normB === 0) {
237
+ return 0;
238
+ }
239
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
240
+ };
241
+ /**
242
+ * Normalize vector to unit length
243
+ */
244
+ export const normalizeVector = (vector) => {
245
+ const magnitude = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
246
+ if (magnitude === 0) {
247
+ return vector;
248
+ }
249
+ return vector.map((val) => val / magnitude);
250
+ };
251
+ /**
252
+ * Compose embedding providers (primary + fallback)
253
+ */
254
+ export const composeProviders = (primary, fallback) => ({
255
+ name: `${primary.name}+${fallback.name}`,
256
+ model: primary.model,
257
+ dimensions: primary.dimensions,
258
+ generateEmbedding: async (text) => {
259
+ try {
260
+ return await primary.generateEmbedding(text);
261
+ }
262
+ catch {
263
+ return await fallback.generateEmbedding(text);
264
+ }
265
+ },
266
+ generateEmbeddings: async (texts) => {
267
+ try {
268
+ return await primary.generateEmbeddings(texts);
269
+ }
270
+ catch {
271
+ return await fallback.generateEmbeddings(texts);
272
+ }
273
+ },
274
+ });
275
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for Embedding utilities
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=embeddings.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.test.d.ts","sourceRoot":"","sources":["../src/embeddings.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}