@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.
- package/README.md +154 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/ast-chunking.d.ts +40 -0
- package/dist/ast-chunking.d.ts.map +1 -0
- package/dist/ast-chunking.js +88 -0
- package/dist/ast-chunking.js.map +1 -0
- package/dist/ast-chunking.test.d.ts +5 -0
- package/dist/ast-chunking.test.d.ts.map +1 -0
- package/dist/ast-chunking.test.js +173 -0
- package/dist/ast-chunking.test.js.map +1 -0
- package/dist/code-tokenizer.d.ts +62 -0
- package/dist/code-tokenizer.d.ts.map +1 -0
- package/dist/code-tokenizer.js +129 -0
- package/dist/code-tokenizer.js.map +1 -0
- package/dist/code-tokenizer.test.d.ts +5 -0
- package/dist/code-tokenizer.test.d.ts.map +1 -0
- package/dist/code-tokenizer.test.js +96 -0
- package/dist/code-tokenizer.test.js.map +1 -0
- package/dist/db/client-pg.d.ts +16 -0
- package/dist/db/client-pg.d.ts.map +1 -0
- package/dist/db/client-pg.js +38 -0
- package/dist/db/client-pg.js.map +1 -0
- package/dist/db/client.d.ts +36 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +81 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/migrations-pg.d.ts +6 -0
- package/dist/db/migrations-pg.d.ts.map +1 -0
- package/dist/db/migrations-pg.js +88 -0
- package/dist/db/migrations-pg.js.map +1 -0
- package/dist/db/migrations.d.ts +9 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +164 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/schema-pg.d.ts +611 -0
- package/dist/db/schema-pg.d.ts.map +1 -0
- package/dist/db/schema-pg.js +66 -0
- package/dist/db/schema-pg.js.map +1 -0
- package/dist/db/schema.d.ts +630 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +85 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/embeddings.d.ts +92 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +275 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/embeddings.test.d.ts +5 -0
- package/dist/embeddings.test.d.ts.map +1 -0
- package/dist/embeddings.test.js +255 -0
- package/dist/embeddings.test.js.map +1 -0
- package/dist/hybrid-search.d.ts +47 -0
- package/dist/hybrid-search.d.ts.map +1 -0
- package/dist/hybrid-search.js +215 -0
- package/dist/hybrid-search.js.map +1 -0
- package/dist/hybrid-search.test.d.ts +5 -0
- package/dist/hybrid-search.test.d.ts.map +1 -0
- package/dist/hybrid-search.test.js +252 -0
- package/dist/hybrid-search.test.js.map +1 -0
- package/dist/incremental-tfidf.d.ts +77 -0
- package/dist/incremental-tfidf.d.ts.map +1 -0
- package/dist/incremental-tfidf.js +248 -0
- package/dist/incremental-tfidf.js.map +1 -0
- package/dist/incremental-tfidf.test.d.ts +5 -0
- package/dist/incremental-tfidf.test.d.ts.map +1 -0
- package/dist/incremental-tfidf.test.js +276 -0
- package/dist/incremental-tfidf.test.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +205 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +1331 -0
- package/dist/indexer.js.map +1 -0
- package/dist/indexer.test.d.ts +12 -0
- package/dist/indexer.test.d.ts.map +1 -0
- package/dist/indexer.test.js +471 -0
- package/dist/indexer.test.js.map +1 -0
- package/dist/language-config.d.ts +54 -0
- package/dist/language-config.d.ts.map +1 -0
- package/dist/language-config.js +75 -0
- package/dist/language-config.js.map +1 -0
- package/dist/search-cache.d.ts +63 -0
- package/dist/search-cache.d.ts.map +1 -0
- package/dist/search-cache.js +118 -0
- package/dist/search-cache.js.map +1 -0
- package/dist/search-cache.test.d.ts +5 -0
- package/dist/search-cache.test.d.ts.map +1 -0
- package/dist/search-cache.test.js +194 -0
- package/dist/search-cache.test.js.map +1 -0
- package/dist/storage-factory.d.ts +11 -0
- package/dist/storage-factory.d.ts.map +1 -0
- package/dist/storage-factory.js +17 -0
- package/dist/storage-factory.js.map +1 -0
- package/dist/storage-persistent-pg.d.ts +75 -0
- package/dist/storage-persistent-pg.d.ts.map +1 -0
- package/dist/storage-persistent-pg.js +579 -0
- package/dist/storage-persistent-pg.js.map +1 -0
- package/dist/storage-persistent-pg.test.d.ts +7 -0
- package/dist/storage-persistent-pg.test.d.ts.map +1 -0
- package/dist/storage-persistent-pg.test.js +90 -0
- package/dist/storage-persistent-pg.test.js.map +1 -0
- package/dist/storage-persistent-types.d.ts +110 -0
- package/dist/storage-persistent-types.d.ts.map +1 -0
- package/dist/storage-persistent-types.js +5 -0
- package/dist/storage-persistent-types.js.map +1 -0
- package/dist/storage-persistent.d.ts +231 -0
- package/dist/storage-persistent.d.ts.map +1 -0
- package/dist/storage-persistent.js +897 -0
- package/dist/storage-persistent.js.map +1 -0
- package/dist/storage-persistent.test.d.ts +5 -0
- package/dist/storage-persistent.test.d.ts.map +1 -0
- package/dist/storage-persistent.test.js +325 -0
- package/dist/storage-persistent.test.js.map +1 -0
- package/dist/storage.d.ts +63 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +67 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.test.d.ts +5 -0
- package/dist/storage.test.d.ts.map +1 -0
- package/dist/storage.test.js +157 -0
- package/dist/storage.test.js.map +1 -0
- package/dist/tfidf.d.ts +97 -0
- package/dist/tfidf.d.ts.map +1 -0
- package/dist/tfidf.js +308 -0
- package/dist/tfidf.js.map +1 -0
- package/dist/tfidf.test.d.ts +5 -0
- package/dist/tfidf.test.d.ts.map +1 -0
- package/dist/tfidf.test.js +181 -0
- package/dist/tfidf.test.js.map +1 -0
- package/dist/utils.d.ts +61 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +264 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.d.ts +5 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +94 -0
- package/dist/utils.test.js.map +1 -0
- package/dist/vector-storage.d.ts +120 -0
- package/dist/vector-storage.d.ts.map +1 -0
- package/dist/vector-storage.js +264 -0
- package/dist/vector-storage.js.map +1 -0
- package/dist/vector-storage.test.d.ts +5 -0
- package/dist/vector-storage.test.d.ts.map +1 -0
- package/dist/vector-storage.test.js +345 -0
- package/dist/vector-storage.test.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.test.d.ts","sourceRoot":"","sources":["../src/embeddings.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|