lance-context 0.1.0 → 1.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.
Files changed (237) hide show
  1. package/README.md +232 -23
  2. package/dist/__tests__/ast-chunker.test.d.ts +2 -0
  3. package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
  4. package/dist/__tests__/ast-chunker.test.js +307 -0
  5. package/dist/__tests__/ast-chunker.test.js.map +1 -0
  6. package/dist/__tests__/config.test.d.ts +2 -0
  7. package/dist/__tests__/config.test.d.ts.map +1 -0
  8. package/dist/__tests__/config.test.js +242 -0
  9. package/dist/__tests__/config.test.js.map +1 -0
  10. package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
  11. package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
  12. package/dist/__tests__/dashboard/beads.test.js +151 -0
  13. package/dist/__tests__/dashboard/beads.test.js.map +1 -0
  14. package/dist/__tests__/dashboard/index.test.d.ts +2 -0
  15. package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
  16. package/dist/__tests__/dashboard/index.test.js +116 -0
  17. package/dist/__tests__/dashboard/index.test.js.map +1 -0
  18. package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
  19. package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
  20. package/dist/__tests__/dashboard/routes.test.js +125 -0
  21. package/dist/__tests__/dashboard/routes.test.js.map +1 -0
  22. package/dist/__tests__/dashboard/server.test.d.ts +2 -0
  23. package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
  24. package/dist/__tests__/dashboard/server.test.js +75 -0
  25. package/dist/__tests__/dashboard/server.test.js.map +1 -0
  26. package/dist/__tests__/dashboard/state.test.d.ts +2 -0
  27. package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
  28. package/dist/__tests__/dashboard/state.test.js +124 -0
  29. package/dist/__tests__/dashboard/state.test.js.map +1 -0
  30. package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
  31. package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
  32. package/dist/__tests__/embeddings/factory.test.js +100 -0
  33. package/dist/__tests__/embeddings/factory.test.js.map +1 -0
  34. package/dist/__tests__/embeddings/jina.test.d.ts +2 -0
  35. package/dist/__tests__/embeddings/jina.test.d.ts.map +1 -0
  36. package/dist/__tests__/embeddings/jina.test.js +156 -0
  37. package/dist/__tests__/embeddings/jina.test.js.map +1 -0
  38. package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
  39. package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
  40. package/dist/__tests__/embeddings/ollama.test.js +172 -0
  41. package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
  42. package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
  43. package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
  44. package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
  45. package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
  46. package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
  47. package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
  48. package/dist/__tests__/embeddings/retry.test.js +260 -0
  49. package/dist/__tests__/embeddings/retry.test.js.map +1 -0
  50. package/dist/__tests__/embeddings/types.test.d.ts +2 -0
  51. package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
  52. package/dist/__tests__/embeddings/types.test.js +31 -0
  53. package/dist/__tests__/embeddings/types.test.js.map +1 -0
  54. package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
  55. package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
  56. package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
  57. package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
  58. package/dist/__tests__/mocks/fetch.mock.d.ts +38 -0
  59. package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
  60. package/dist/__tests__/mocks/fetch.mock.js +74 -0
  61. package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
  62. package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
  63. package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
  64. package/dist/__tests__/mocks/lancedb.mock.js +63 -0
  65. package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
  66. package/dist/__tests__/search/clustering.test.d.ts +2 -0
  67. package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
  68. package/dist/__tests__/search/clustering.test.js +230 -0
  69. package/dist/__tests__/search/clustering.test.js.map +1 -0
  70. package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
  71. package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
  72. package/dist/__tests__/search/hybrid-search.test.js +186 -0
  73. package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
  74. package/dist/__tests__/search/indexer.test.d.ts +2 -0
  75. package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
  76. package/dist/__tests__/search/indexer.test.js +878 -0
  77. package/dist/__tests__/search/indexer.test.js.map +1 -0
  78. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
  79. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
  80. package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
  81. package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
  82. package/dist/__tests__/setup.d.ts +2 -0
  83. package/dist/__tests__/setup.d.ts.map +1 -0
  84. package/dist/__tests__/setup.js +11 -0
  85. package/dist/__tests__/setup.js.map +1 -0
  86. package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
  87. package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
  88. package/dist/__tests__/utils/concurrency.test.js +83 -0
  89. package/dist/__tests__/utils/concurrency.test.js.map +1 -0
  90. package/dist/__tests__/utils/errors.test.d.ts +2 -0
  91. package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
  92. package/dist/__tests__/utils/errors.test.js +136 -0
  93. package/dist/__tests__/utils/errors.test.js.map +1 -0
  94. package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
  95. package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
  96. package/dist/__tests__/utils/type-guards.test.js +80 -0
  97. package/dist/__tests__/utils/type-guards.test.js.map +1 -0
  98. package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
  99. package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
  100. package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
  101. package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
  102. package/dist/config.d.ts +122 -0
  103. package/dist/config.d.ts.map +1 -0
  104. package/dist/config.js +508 -0
  105. package/dist/config.js.map +1 -0
  106. package/dist/dashboard/beads.d.ts +35 -0
  107. package/dist/dashboard/beads.d.ts.map +1 -0
  108. package/dist/dashboard/beads.js +102 -0
  109. package/dist/dashboard/beads.js.map +1 -0
  110. package/dist/dashboard/events.d.ts +46 -0
  111. package/dist/dashboard/events.d.ts.map +1 -0
  112. package/dist/dashboard/events.js +141 -0
  113. package/dist/dashboard/events.js.map +1 -0
  114. package/dist/dashboard/index.d.ts +69 -0
  115. package/dist/dashboard/index.d.ts.map +1 -0
  116. package/dist/dashboard/index.js +93 -0
  117. package/dist/dashboard/index.js.map +1 -0
  118. package/dist/dashboard/routes.d.ts +6 -0
  119. package/dist/dashboard/routes.d.ts.map +1 -0
  120. package/dist/dashboard/routes.js +245 -0
  121. package/dist/dashboard/routes.js.map +1 -0
  122. package/dist/dashboard/server.d.ts +27 -0
  123. package/dist/dashboard/server.d.ts.map +1 -0
  124. package/dist/dashboard/server.js +72 -0
  125. package/dist/dashboard/server.js.map +1 -0
  126. package/dist/dashboard/state.d.ts +125 -0
  127. package/dist/dashboard/state.d.ts.map +1 -0
  128. package/dist/dashboard/state.js +264 -0
  129. package/dist/dashboard/state.js.map +1 -0
  130. package/dist/dashboard/ui.d.ts +6 -0
  131. package/dist/dashboard/ui.d.ts.map +1 -0
  132. package/dist/dashboard/ui.js +1421 -0
  133. package/dist/dashboard/ui.js.map +1 -0
  134. package/dist/embeddings/index.d.ts +20 -2
  135. package/dist/embeddings/index.d.ts.map +1 -1
  136. package/dist/embeddings/index.js +49 -6
  137. package/dist/embeddings/index.js.map +1 -1
  138. package/dist/embeddings/jina.d.ts +9 -0
  139. package/dist/embeddings/jina.d.ts.map +1 -1
  140. package/dist/embeddings/jina.js +42 -2
  141. package/dist/embeddings/jina.js.map +1 -1
  142. package/dist/embeddings/ollama.d.ts +2 -0
  143. package/dist/embeddings/ollama.d.ts.map +1 -1
  144. package/dist/embeddings/ollama.js +21 -5
  145. package/dist/embeddings/ollama.js.map +1 -1
  146. package/dist/embeddings/rate-limiter.d.ts +75 -0
  147. package/dist/embeddings/rate-limiter.d.ts.map +1 -0
  148. package/dist/embeddings/rate-limiter.js +145 -0
  149. package/dist/embeddings/rate-limiter.js.map +1 -0
  150. package/dist/embeddings/retry.d.ts +14 -0
  151. package/dist/embeddings/retry.d.ts.map +1 -0
  152. package/dist/embeddings/retry.js +89 -0
  153. package/dist/embeddings/retry.js.map +1 -0
  154. package/dist/embeddings/types.d.ts +56 -2
  155. package/dist/embeddings/types.d.ts.map +1 -1
  156. package/dist/embeddings/types.js +16 -0
  157. package/dist/embeddings/types.js.map +1 -1
  158. package/dist/index.js +1871 -44
  159. package/dist/index.js.map +1 -1
  160. package/dist/memory/index.d.ts +63 -0
  161. package/dist/memory/index.d.ts.map +1 -0
  162. package/dist/memory/index.js +168 -0
  163. package/dist/memory/index.js.map +1 -0
  164. package/dist/search/ast-chunker.d.ts +34 -0
  165. package/dist/search/ast-chunker.d.ts.map +1 -0
  166. package/dist/search/ast-chunker.js +261 -0
  167. package/dist/search/ast-chunker.js.map +1 -0
  168. package/dist/search/clustering.d.ts +77 -0
  169. package/dist/search/clustering.d.ts.map +1 -0
  170. package/dist/search/clustering.js +455 -0
  171. package/dist/search/clustering.js.map +1 -0
  172. package/dist/search/indexer.d.ts +239 -3
  173. package/dist/search/indexer.d.ts.map +1 -1
  174. package/dist/search/indexer.js +941 -45
  175. package/dist/search/indexer.js.map +1 -1
  176. package/dist/search/tree-sitter-chunker.d.ts +69 -0
  177. package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
  178. package/dist/search/tree-sitter-chunker.js +436 -0
  179. package/dist/search/tree-sitter-chunker.js.map +1 -0
  180. package/dist/symbols/index.d.ts +14 -0
  181. package/dist/symbols/index.d.ts.map +1 -0
  182. package/dist/symbols/index.js +19 -0
  183. package/dist/symbols/index.js.map +1 -0
  184. package/dist/symbols/name-path.d.ts +113 -0
  185. package/dist/symbols/name-path.d.ts.map +1 -0
  186. package/dist/symbols/name-path.js +194 -0
  187. package/dist/symbols/name-path.js.map +1 -0
  188. package/dist/symbols/pattern-search.d.ts +14 -0
  189. package/dist/symbols/pattern-search.d.ts.map +1 -0
  190. package/dist/symbols/pattern-search.js +224 -0
  191. package/dist/symbols/pattern-search.js.map +1 -0
  192. package/dist/symbols/reference-finder.d.ts +38 -0
  193. package/dist/symbols/reference-finder.d.ts.map +1 -0
  194. package/dist/symbols/reference-finder.js +376 -0
  195. package/dist/symbols/reference-finder.js.map +1 -0
  196. package/dist/symbols/symbol-editor.d.ts +81 -0
  197. package/dist/symbols/symbol-editor.d.ts.map +1 -0
  198. package/dist/symbols/symbol-editor.js +257 -0
  199. package/dist/symbols/symbol-editor.js.map +1 -0
  200. package/dist/symbols/symbol-extractor.d.ts +49 -0
  201. package/dist/symbols/symbol-extractor.d.ts.map +1 -0
  202. package/dist/symbols/symbol-extractor.js +593 -0
  203. package/dist/symbols/symbol-extractor.js.map +1 -0
  204. package/dist/symbols/symbol-renamer.d.ts +81 -0
  205. package/dist/symbols/symbol-renamer.d.ts.map +1 -0
  206. package/dist/symbols/symbol-renamer.js +204 -0
  207. package/dist/symbols/symbol-renamer.js.map +1 -0
  208. package/dist/symbols/types.d.ts +234 -0
  209. package/dist/symbols/types.d.ts.map +1 -0
  210. package/dist/symbols/types.js +106 -0
  211. package/dist/symbols/types.js.map +1 -0
  212. package/dist/utils/concurrency.d.ts +32 -0
  213. package/dist/utils/concurrency.d.ts.map +1 -0
  214. package/dist/utils/concurrency.js +57 -0
  215. package/dist/utils/concurrency.js.map +1 -0
  216. package/dist/utils/errors.d.ts +36 -0
  217. package/dist/utils/errors.d.ts.map +1 -0
  218. package/dist/utils/errors.js +91 -0
  219. package/dist/utils/errors.js.map +1 -0
  220. package/dist/utils/type-guards.d.ts +17 -0
  221. package/dist/utils/type-guards.d.ts.map +1 -0
  222. package/dist/utils/type-guards.js +25 -0
  223. package/dist/utils/type-guards.js.map +1 -0
  224. package/dist/worktree/index.d.ts +6 -0
  225. package/dist/worktree/index.d.ts.map +1 -0
  226. package/dist/worktree/index.js +6 -0
  227. package/dist/worktree/index.js.map +1 -0
  228. package/dist/worktree/types.d.ts +101 -0
  229. package/dist/worktree/types.d.ts.map +1 -0
  230. package/dist/worktree/types.js +6 -0
  231. package/dist/worktree/types.js.map +1 -0
  232. package/dist/worktree/worktree-manager.d.ts +80 -0
  233. package/dist/worktree/worktree-manager.d.ts.map +1 -0
  234. package/dist/worktree/worktree-manager.js +407 -0
  235. package/dist/worktree/worktree-manager.js.map +1 -0
  236. package/package.json +39 -5
  237. package/scripts/postinstall.js +48 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Default maximum response size (10MB)
3
+ */
4
+ const DEFAULT_MAX_RESPONSE_SIZE = 10 * 1024 * 1024;
5
+ const DEFAULT_OPTIONS = {
6
+ maxRetries: 3,
7
+ baseDelayMs: 1000,
8
+ maxDelayMs: 10000,
9
+ maxResponseSizeBytes: DEFAULT_MAX_RESPONSE_SIZE,
10
+ };
11
+ /**
12
+ * Sleep for a given number of milliseconds
13
+ */
14
+ function sleep(ms) {
15
+ return new Promise((resolve) => setTimeout(resolve, ms));
16
+ }
17
+ /**
18
+ * Check if response size exceeds the maximum allowed
19
+ */
20
+ function checkResponseSize(response, maxSize) {
21
+ const contentLength = response.headers?.get?.('content-length');
22
+ if (contentLength) {
23
+ const size = parseInt(contentLength, 10);
24
+ if (!isNaN(size) && size > maxSize) {
25
+ throw new Error(`Response size ${size} bytes exceeds maximum allowed ${maxSize} bytes`);
26
+ }
27
+ }
28
+ }
29
+ /**
30
+ * Check if an error is retryable (network errors, rate limits, server errors)
31
+ */
32
+ function isRetryableError(error) {
33
+ if (error instanceof Error) {
34
+ const message = error.message.toLowerCase();
35
+ // Retry on network errors
36
+ if (message.includes('fetch') ||
37
+ message.includes('network') ||
38
+ message.includes('econnrefused')) {
39
+ return true;
40
+ }
41
+ }
42
+ return false;
43
+ }
44
+ /**
45
+ * Check if a response status is retryable
46
+ */
47
+ function isRetryableStatus(status) {
48
+ // Retry on rate limits (429), server errors (5xx), and some specific cases
49
+ return status === 429 || status === 408 || (status >= 500 && status < 600);
50
+ }
51
+ /**
52
+ * Execute a fetch request with exponential backoff retry
53
+ */
54
+ export async function fetchWithRetry(url, options, retryOptions) {
55
+ const opts = { ...DEFAULT_OPTIONS, ...retryOptions };
56
+ let lastError = null;
57
+ for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
58
+ try {
59
+ const response = await fetch(url, options);
60
+ // Check response size before processing
61
+ checkResponseSize(response, opts.maxResponseSizeBytes);
62
+ // If response is ok or non-retryable error, return it
63
+ if (response.ok || !isRetryableStatus(response.status)) {
64
+ return response;
65
+ }
66
+ // Retryable status code
67
+ if (attempt < opts.maxRetries) {
68
+ const delay = Math.min(opts.baseDelayMs * Math.pow(2, attempt), opts.maxDelayMs);
69
+ console.error(`[lance-context] Request failed with status ${response.status}, retrying in ${delay}ms (attempt ${attempt + 1}/${opts.maxRetries})`);
70
+ await sleep(delay);
71
+ continue;
72
+ }
73
+ // Last attempt, return the response even if it's an error
74
+ return response;
75
+ }
76
+ catch (error) {
77
+ lastError = error instanceof Error ? error : new Error(String(error));
78
+ if (attempt < opts.maxRetries && isRetryableError(error)) {
79
+ const delay = Math.min(opts.baseDelayMs * Math.pow(2, attempt), opts.maxDelayMs);
80
+ console.error(`[lance-context] Request failed: ${lastError.message}, retrying in ${delay}ms (attempt ${attempt + 1}/${opts.maxRetries})`);
81
+ await sleep(delay);
82
+ continue;
83
+ }
84
+ throw lastError;
85
+ }
86
+ }
87
+ throw lastError || new Error('Request failed after retries');
88
+ }
89
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/embeddings/retry.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,72 @@
1
1
  /**
2
- * Embedding backend interface
2
+ * Embedding backend interface that all embedding providers must implement.
3
+ * Supports both single text and batch embedding operations.
3
4
  */
4
5
  export interface EmbeddingBackend {
6
+ /** Display name of the embedding backend (e.g., 'jina', 'ollama') */
5
7
  name: string;
8
+ /**
9
+ * Initialize the backend, validating credentials and connectivity.
10
+ * @throws Error if initialization fails (e.g., invalid API key, server unreachable)
11
+ */
6
12
  initialize(): Promise<void>;
13
+ /**
14
+ * Generate an embedding vector for a single text.
15
+ * @param text - The text to embed
16
+ * @returns A promise resolving to the embedding vector (array of numbers)
17
+ */
7
18
  embed(text: string): Promise<number[]>;
19
+ /**
20
+ * Generate embedding vectors for multiple texts in a single batch.
21
+ * More efficient than calling embed() multiple times.
22
+ * @param texts - Array of texts to embed
23
+ * @returns A promise resolving to an array of embedding vectors
24
+ */
8
25
  embedBatch(texts: string[]): Promise<number[][]>;
26
+ /**
27
+ * Get the dimensionality of the embedding vectors produced by this backend.
28
+ * @returns The number of dimensions in the embedding vectors
29
+ */
9
30
  getDimensions(): number;
31
+ /**
32
+ * Get the model identifier used by this backend.
33
+ * @returns The model name/identifier (e.g., 'nomic-embed-text', 'jina-embeddings-v3')
34
+ */
35
+ getModel(): string;
10
36
  }
37
+ /**
38
+ * Configuration options for embedding backends.
39
+ */
11
40
  export interface EmbeddingConfig {
12
- backend: 'jina' | 'local' | 'ollama';
41
+ /** Which embedding backend to use */
42
+ backend: 'jina' | 'ollama' | 'local';
43
+ /** Model name/identifier (backend-specific) */
13
44
  model?: string;
45
+ /** API key for cloud-based backends (Jina) */
14
46
  apiKey?: string;
47
+ /** Base URL for the embedding API (useful for Ollama or custom endpoints) */
15
48
  baseUrl?: string;
49
+ /** Rate limiting: maximum requests per second (default: 5 for Jina) */
50
+ rateLimitRps?: number;
51
+ /** Rate limiting: maximum burst capacity (default: 10) */
52
+ rateLimitBurst?: number;
53
+ /**
54
+ * Maximum number of texts to process in a single batch request.
55
+ * Large batches are automatically split into smaller chunks to prevent
56
+ * timeouts, memory issues, and API rate limit errors.
57
+ * Default: 100 for Jina, 10 for Ollama (parallel requests)
58
+ */
59
+ batchSize?: number;
16
60
  }
61
+ /**
62
+ * Split an array into chunks of specified size.
63
+ * @param array - The array to chunk
64
+ * @param size - Maximum size of each chunk
65
+ * @returns Array of chunks
66
+ */
67
+ export declare function chunkArray<T>(array: T[], size: number): T[][];
68
+ /**
69
+ * Default embedding configuration using local Ollama with nomic-embed-text model.
70
+ */
17
71
  export declare const DEFAULT_CONFIG: EmbeddingConfig;
18
72
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,aAAa,IAAI,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,cAAc,EAAE,eAI5B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvC;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEjD;;;OAGG;IACH,aAAa,IAAI,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,IAAI,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAErC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAM7D;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,eAI5B,CAAC"}
@@ -1,3 +1,19 @@
1
+ /**
2
+ * Split an array into chunks of specified size.
3
+ * @param array - The array to chunk
4
+ * @param size - Maximum size of each chunk
5
+ * @returns Array of chunks
6
+ */
7
+ export function chunkArray(array, size) {
8
+ const chunks = [];
9
+ for (let i = 0; i < array.length; i += size) {
10
+ chunks.push(array.slice(i, i + size));
11
+ }
12
+ return chunks;
13
+ }
14
+ /**
15
+ * Default embedding configuration using local Ollama with nomic-embed-text model.
16
+ */
1
17
  export const DEFAULT_CONFIG = {
2
18
  backend: 'ollama',
3
19
  model: 'nomic-embed-text',
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,kBAAkB;IACzB,OAAO,EAAE,wBAAwB;CAClC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAyEA;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAI,KAAU,EAAE,IAAY;IACpD,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,kBAAkB;IACzB,OAAO,EAAE,wBAAwB;CAClC,CAAC"}