@meaningfully/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/.nvmrc +1 -0
  2. package/LICENSE +7 -0
  3. package/README.md +3 -0
  4. package/dist/DocumentSetManager.d.ts +28 -0
  5. package/dist/DocumentSetManager.d.ts.map +1 -0
  6. package/dist/DocumentSetManager.js +134 -0
  7. package/dist/DocumentSetManager.js.map +1 -0
  8. package/dist/Meaningfully.d.ts +52 -0
  9. package/dist/Meaningfully.d.ts.map +1 -0
  10. package/dist/Meaningfully.js +206 -0
  11. package/dist/Meaningfully.js.map +1 -0
  12. package/dist/MetadataManager.d.ts +32 -0
  13. package/dist/MetadataManager.d.ts.map +1 -0
  14. package/dist/MetadataManager.js +115 -0
  15. package/dist/MetadataManager.js.map +1 -0
  16. package/dist/api/embedding.d.ts +7 -0
  17. package/dist/api/embedding.d.ts.map +1 -0
  18. package/dist/api/embedding.js +94 -0
  19. package/dist/api/embedding.js.map +1 -0
  20. package/dist/api/embedding.test.d.ts +2 -0
  21. package/dist/api/embedding.test.d.ts.map +1 -0
  22. package/dist/api/embedding.test.js +340 -0
  23. package/dist/api/embedding.test.js.map +1 -0
  24. package/dist/index.d.ts +5 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +6 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/services/batchingWeaviateVectorStore.d.ts +6 -0
  29. package/dist/services/batchingWeaviateVectorStore.d.ts.map +1 -0
  30. package/dist/services/batchingWeaviateVectorStore.js +21 -0
  31. package/dist/services/batchingWeaviateVectorStore.js.map +1 -0
  32. package/dist/services/csvLoader.d.ts +3 -0
  33. package/dist/services/csvLoader.d.ts.map +1 -0
  34. package/dist/services/csvLoader.js +18 -0
  35. package/dist/services/csvLoader.js.map +1 -0
  36. package/dist/services/csvLoader.test.d.ts +2 -0
  37. package/dist/services/csvLoader.test.d.ts.map +1 -0
  38. package/dist/services/csvLoader.test.js +75 -0
  39. package/dist/services/csvLoader.test.js.map +1 -0
  40. package/dist/services/embeddings.d.ts +22 -0
  41. package/dist/services/embeddings.d.ts.map +1 -0
  42. package/dist/services/embeddings.js +314 -0
  43. package/dist/services/embeddings.js.map +1 -0
  44. package/dist/services/embeddings.test.d.ts +2 -0
  45. package/dist/services/embeddings.test.d.ts.map +1 -0
  46. package/dist/services/embeddings.test.js +115 -0
  47. package/dist/services/embeddings.test.js.map +1 -0
  48. package/dist/services/loggingOpenAIEmbedding.d.ts +2 -0
  49. package/dist/services/loggingOpenAIEmbedding.d.ts.map +1 -0
  50. package/dist/services/loggingOpenAIEmbedding.js +41 -0
  51. package/dist/services/loggingOpenAIEmbedding.js.map +1 -0
  52. package/dist/services/mockEmbedding.d.ts +6 -0
  53. package/dist/services/mockEmbedding.d.ts.map +1 -0
  54. package/dist/services/mockEmbedding.js +14 -0
  55. package/dist/services/mockEmbedding.js.map +1 -0
  56. package/dist/services/progressManager.d.ts +21 -0
  57. package/dist/services/progressManager.d.ts.map +1 -0
  58. package/dist/services/progressManager.js +76 -0
  59. package/dist/services/progressManager.js.map +1 -0
  60. package/dist/services/progressVectorStoreIndex.d.ts +21 -0
  61. package/dist/services/progressVectorStoreIndex.d.ts.map +1 -0
  62. package/dist/services/progressVectorStoreIndex.js +60 -0
  63. package/dist/services/progressVectorStoreIndex.js.map +1 -0
  64. package/dist/services/sentenceSplitter.d.ts +17 -0
  65. package/dist/services/sentenceSplitter.d.ts.map +1 -0
  66. package/dist/services/sentenceSplitter.js +207 -0
  67. package/dist/services/sentenceSplitter.js.map +1 -0
  68. package/dist/services/sentenceSplitter.test.d.ts +2 -0
  69. package/dist/services/sentenceSplitter.test.d.ts.map +1 -0
  70. package/dist/services/sentenceSplitter.test.js +68 -0
  71. package/dist/services/sentenceSplitter.test.js.map +1 -0
  72. package/dist/services/sploder.d.ts +13 -0
  73. package/dist/services/sploder.d.ts.map +1 -0
  74. package/dist/services/sploder.js +45 -0
  75. package/dist/services/sploder.js.map +1 -0
  76. package/dist/types/index.d.ts +77 -0
  77. package/dist/types/index.d.ts.map +1 -0
  78. package/dist/types/index.js +2 -0
  79. package/dist/types/index.js.map +1 -0
  80. package/dist/utils.d.ts +3 -0
  81. package/dist/utils.d.ts.map +1 -0
  82. package/dist/utils.js +7 -0
  83. package/dist/utils.js.map +1 -0
  84. package/package.json +43 -0
  85. package/src/Meaningfully.d.ts +57 -0
  86. package/src/Meaningfully.ts +228 -0
  87. package/src/MetadataManager.d.ts +27 -0
  88. package/src/MetadataManager.ts +145 -0
  89. package/src/api/embedding.d.ts +6 -0
  90. package/src/api/embedding.ts +122 -0
  91. package/src/index.ts +5 -0
  92. package/src/services/batchingWeaviateVectorStore.d.ts +5 -0
  93. package/src/services/batchingWeaviateVectorStore.ts +23 -0
  94. package/src/services/csvLoader.d.ts +2 -0
  95. package/src/services/csvLoader.ts +24 -0
  96. package/src/services/embeddings.d.ts +21 -0
  97. package/src/services/embeddings.ts +374 -0
  98. package/src/services/loggingOpenAIEmbedding.d.ts +0 -0
  99. package/src/services/loggingOpenAIEmbedding.ts +46 -0
  100. package/src/services/mockEmbedding.d.ts +5 -0
  101. package/src/services/mockEmbedding.ts +13 -0
  102. package/src/services/progressManager.d.ts +20 -0
  103. package/src/services/progressManager.ts +88 -0
  104. package/src/services/progressVectorStoreIndex.d.ts +20 -0
  105. package/src/services/progressVectorStoreIndex.ts +95 -0
  106. package/src/services/sentenceSplitter.d.ts +16 -0
  107. package/src/services/sentenceSplitter.ts +243 -0
  108. package/src/services/sploder.d.ts +12 -0
  109. package/src/services/sploder.ts +62 -0
  110. package/src/types/index.d.ts +71 -0
  111. package/src/types/index.ts +89 -0
  112. package/src/utils.d.ts +2 -0
  113. package/src/utils.ts +6 -0
  114. package/tests/MetadataManager.test.ts +120 -0
  115. package/tests/csvLoader.test.d.ts +1 -0
  116. package/tests/csvLoader.test.ts +88 -0
  117. package/tests/embedding.test.d.ts +1 -0
  118. package/tests/embedding.test.ts +425 -0
  119. package/tests/embeddings.test.d.ts +1 -0
  120. package/tests/embeddings.test.ts +144 -0
  121. package/tests/sentenceSplitter.test.d.ts +1 -0
  122. package/tests/sentenceSplitter.test.ts +81 -0
  123. package/tsconfig.json +31 -0
  124. package/tsconfig.tsbuildinfo +1 -0
package/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 24
package/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright 2025 Jeremy B. F. Merrill
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # meaningfully-core
2
+
3
+ This is a library of core/API components for [meaningfully](https://www.github.com/jeremybmerrill/meaningfully), which is an app (or collection of apps!) for semantic search over spreadsheets. See the main repo URL for more discussion.
@@ -0,0 +1,28 @@
1
+ import type { DocumentSetMetadata, Settings } from './types/index.js';
2
+ export declare class DocumentSetManager {
3
+ private sqliteDb;
4
+ constructor(storagePath: string);
5
+ private initializeDatabase;
6
+ addDocumentSet(metadata: Omit<DocumentSetMetadata, 'documentSetId'>): Promise<number>;
7
+ getDocumentSet(documentSetId: number): Promise<DocumentSetMetadata | null>;
8
+ getDocumentSets(page?: number, pageSize?: number): Promise<{
9
+ documents: DocumentSetMetadata[];
10
+ total: number;
11
+ }>;
12
+ updateDocumentCount(documentSetId: number, count: number): Promise<void>;
13
+ deleteDocumentSet(documentSetId: number): Promise<void>;
14
+ getSettings(): Promise<{
15
+ openAIKey: null;
16
+ oLlamaBaseURL: null;
17
+ azureOpenAIKey: null;
18
+ azureOpenAIEndpoint: null;
19
+ azureOpenAIApiVersion: string;
20
+ mistralApiKey: null;
21
+ geminiApiKey: null;
22
+ } & Settings>;
23
+ setSettings(settings: Settings): Promise<Settings & {
24
+ success: boolean;
25
+ }>;
26
+ close(): void;
27
+ }
28
+ //# sourceMappingURL=DocumentSetManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentSetManager.d.ts","sourceRoot":"","sources":["../src/DocumentSetManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGtE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAiB;gBAErB,WAAW,EAAE,MAAM;YAQjB,kBAAkB;IAmB1B,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBrF,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAuB1E,eAAe,CAAC,IAAI,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAW,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,mBAAmB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAoCpH,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUxD,iBAAiB,CAAC,aAAa,EAAE,MAAM;IASvC,WAAW;;;;;;;;;IA8BX,WAAW,CAAC,QAAQ,EAAE,QAAQ;;;IAUpC,KAAK;CAGN"}
@@ -0,0 +1,134 @@
1
+ import Database from 'better-sqlite3';
2
+ import { join } from 'path';
3
+ export class DocumentSetManager {
4
+ sqliteDb;
5
+ constructor(storagePath) {
6
+ // Initialize SQLite database for document set metadata
7
+ this.sqliteDb = new Database(join(storagePath, 'metadata.db'));
8
+ // Initialize the collection
9
+ this.initializeDatabase();
10
+ }
11
+ async initializeDatabase() {
12
+ // Create SQLite table for document sets
13
+ this.sqliteDb.exec(`
14
+ CREATE TABLE IF NOT EXISTS document_sets (
15
+ set_id INTEGER PRIMARY KEY AUTOINCREMENT,
16
+ name TEXT NOT NULL UNIQUE,
17
+ upload_date TEXT NOT NULL,
18
+ parameters TEXT NOT NULL,
19
+ total_documents INTEGER NOT NULL DEFAULT 0
20
+ );
21
+ `);
22
+ this.sqliteDb.exec(`
23
+ CREATE TABLE IF NOT EXISTS meaningfully_settings (
24
+ settings_id INTEGER PRIMARY KEY AUTOINCREMENT,
25
+ settings TEXT NOT NULL
26
+ );
27
+ `);
28
+ }
29
+ async addDocumentSet(metadata) {
30
+ const stmt = this.sqliteDb.prepare(`
31
+ INSERT INTO document_sets (name, upload_date, parameters, total_documents)
32
+ VALUES (?, ?, ?, ?)
33
+ `);
34
+ const result = stmt.run(metadata.name, metadata.uploadDate.toISOString(), JSON.stringify(metadata.parameters), metadata.totalDocuments);
35
+ return result.lastInsertRowid;
36
+ }
37
+ async getDocumentSet(documentSetId) {
38
+ const stmt = this.sqliteDb.prepare(`
39
+ SELECT * FROM document_sets WHERE set_id = ?
40
+ `);
41
+ const row = stmt.get(documentSetId);
42
+ if (!row)
43
+ return null;
44
+ return {
45
+ documentSetId: row.set_id,
46
+ name: row.name,
47
+ uploadDate: new Date(row.upload_date),
48
+ parameters: JSON.parse(row.parameters),
49
+ totalDocuments: row.total_documents
50
+ };
51
+ }
52
+ async getDocumentSets(page = 1, pageSize = 10) {
53
+ const offset = (page - 1) * pageSize;
54
+ // Get total count
55
+ const countStmt = this.sqliteDb.prepare('SELECT COUNT(*) as count FROM document_sets');
56
+ const totalCountRow = countStmt.get();
57
+ const totalCount = totalCountRow.count;
58
+ // Get paginated results
59
+ const stmt = this.sqliteDb.prepare(`
60
+ SELECT * FROM document_sets
61
+ ORDER BY upload_date DESC
62
+ LIMIT ? OFFSET ?
63
+ `);
64
+ const rows = stmt.all(pageSize, offset);
65
+ const documents = rows.map((row) => ({
66
+ documentSetId: row.set_id,
67
+ name: row.name,
68
+ uploadDate: new Date(row.upload_date),
69
+ parameters: JSON.parse(row.parameters),
70
+ totalDocuments: row.total_documents
71
+ }));
72
+ return {
73
+ documents,
74
+ total: totalCount
75
+ };
76
+ }
77
+ async updateDocumentCount(documentSetId, count) {
78
+ const stmt = this.sqliteDb.prepare(`
79
+ UPDATE document_sets
80
+ SET total_documents = total_documents + ?
81
+ WHERE set_id = ?
82
+ `);
83
+ stmt.run(count, documentSetId);
84
+ }
85
+ async deleteDocumentSet(documentSetId) {
86
+ const stmt = this.sqliteDb.prepare(`
87
+ DELETE FROM document_sets
88
+ WHERE set_id = ?
89
+ `);
90
+ stmt.run(documentSetId);
91
+ }
92
+ async getSettings() {
93
+ const DEFAULT_SETTINGS = {
94
+ "openAIKey": null,
95
+ "oLlamaBaseURL": null,
96
+ "azureOpenAIKey": null,
97
+ "azureOpenAIEndpoint": null,
98
+ "azureOpenAIApiVersion": "2024-02-01",
99
+ "mistralApiKey": null,
100
+ "geminiApiKey": null,
101
+ };
102
+ const stmt = this.sqliteDb.prepare(`
103
+ SELECT * FROM meaningfully_settings WHERE settings_id = 1
104
+ `);
105
+ const row = stmt.get();
106
+ let settings;
107
+ if (row) {
108
+ try {
109
+ settings = JSON.parse(row.settings);
110
+ }
111
+ catch (error) {
112
+ console.error("Error parsing settings JSON:", error);
113
+ settings = DEFAULT_SETTINGS;
114
+ }
115
+ }
116
+ else {
117
+ settings = DEFAULT_SETTINGS;
118
+ }
119
+ settings = Object.assign({}, DEFAULT_SETTINGS, settings);
120
+ return settings;
121
+ }
122
+ async setSettings(settings) {
123
+ const stmt = this.sqliteDb.prepare(`
124
+ INSERT OR REPLACE INTO meaningfully_settings (settings_id, settings)
125
+ VALUES (1, ?)
126
+ `);
127
+ stmt.run(JSON.stringify(settings));
128
+ return Object.assign(settings, { "success": true });
129
+ }
130
+ close() {
131
+ this.sqliteDb.close();
132
+ }
133
+ }
134
+ //# sourceMappingURL=DocumentSetManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentSetManager.js","sourceRoot":"","sources":["../src/DocumentSetManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { MetadataManager } from './MetadataManager.js';
2
+ import type { DocumentSetParams, Settings, MetadataFilter, Clients } from './types/index.js';
3
+ type HasFilePath = {
4
+ filePath: string;
5
+ };
6
+ type DocumentSetParamsFilePath = DocumentSetParams & HasFilePath;
7
+ export declare class MeaningfullyAPI {
8
+ private manager;
9
+ private storagePath;
10
+ private clients;
11
+ constructor({ storagePath, weaviateClient, metadataManager }: {
12
+ storagePath: string;
13
+ weaviateClient?: any;
14
+ metadataManager: MetadataManager;
15
+ });
16
+ setClients(clients: Clients): void;
17
+ getClients(): Clients;
18
+ listDocumentSets(page?: number, pageSize?: number): Promise<{
19
+ documents: import("./types/index.js").DocumentSetMetadata[];
20
+ total: number;
21
+ }>;
22
+ getDocumentSet(documentSetId: number): Promise<import("./types/index.js").DocumentSetMetadata | null>;
23
+ deleteDocumentSet(documentSetId: number): Promise<{
24
+ success: boolean;
25
+ }>;
26
+ getVectorStoreType(): "weaviate" | "simple";
27
+ generatePreviewData(data: DocumentSetParamsFilePath): Promise<import("./types/index.js").PreviewResult>;
28
+ uploadCsv(data: DocumentSetParamsFilePath): Promise<{
29
+ success: boolean;
30
+ documentSetId: number;
31
+ }>;
32
+ searchDocumentSet(documentSetId: number, query: string, n_results?: number, filters?: MetadataFilter[]): Promise<import("./types/index.js").SearchResult[]>;
33
+ getDocument(documentSetId: number, documentNodeId: string): Promise<import("llamaindex").BaseNode<import("llamaindex").Metadata>>;
34
+ getSettings(): Promise<Settings>;
35
+ setSettings(settings: Settings): Promise<{
36
+ success: boolean;
37
+ }>;
38
+ getMaskedSettings(): Promise<{
39
+ openAIKey: string | null;
40
+ oLlamaBaseURL: string | null;
41
+ azureOpenAIKey: string | null;
42
+ azureOpenAIEndpoint: string | null;
43
+ azureOpenAIApiVersion: string | null;
44
+ mistralApiKey: string | null;
45
+ geminiApiKey: string | null;
46
+ }>;
47
+ setMaskedSettings(newSettings: Settings): Promise<{
48
+ success: boolean;
49
+ }>;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=Meaningfully.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Meaningfully.d.ts","sourceRoot":"","sources":["../src/Meaningfully.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG7F,KAAK,WAAW,GAAG;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAAC;AACtC,KAAK,yBAAyB,GAAG,iBAAiB,GAAG,WAAW,CAAC;AAUjE,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAU;gBAEb,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,GAAG,CAAC;QAAC,eAAe,EAAE,eAAe,CAAA;KAAE;IAS7I,UAAU,CAAC,OAAO,EAAE,OAAO;IAG3B,UAAU;IAIJ,gBAAgB,CAAC,IAAI,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAW;;;;IAIxD,cAAc,CAAC,aAAa,EAAE,MAAM;IAGpC,iBAAiB,CAAC,aAAa,EAAE,MAAM;;;IAa7C,kBAAkB;IAIZ,mBAAmB,CAAC,IAAI,EAAE,yBAAyB;IAuBnD,SAAS,CAAC,IAAI,EAAE,yBAAyB;;;;IA8DzC,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,EAAI,OAAO,CAAC,EAAE,cAAc,EAAE;IAsB5G,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAyBzD,WAAW;IAGX,WAAW,CAAC,QAAQ,EAAE,QAAQ;;;IAI9B,iBAAiB;;;;;;;;;IAYjB,iBAAiB,CAAC,WAAW,EAAE,QAAQ;;;CAY9C"}
@@ -0,0 +1,206 @@
1
+ import { loadDocumentsFromCsv } from './services/csvLoader.js';
2
+ import { createEmbeddings, getIndex, search, previewResults, getDocStore } from './api/embedding.js';
3
+ import { capitalizeFirstLetter } from './utils.js';
4
+ import { join } from 'path';
5
+ import fs from 'fs';
6
+ const MASKING_PREFIX_LENGTH = 8; // how many characters to show at the start and end of an API key when masking it for display
7
+ // Gemini API keys are 39 chars; Mistral is 32, so MASKING_PREFIX_LENGTH must be < 16 for ANYTHING to be masked.
8
+ const maskKey = (key, n = MASKING_PREFIX_LENGTH) => {
9
+ if (!key)
10
+ return null;
11
+ return (key.length > (n * 2)) ? key.slice(0, n) + "*******" + key.slice(key.length - n) : key;
12
+ };
13
+ export class MeaningfullyAPI {
14
+ manager;
15
+ storagePath;
16
+ clients;
17
+ constructor({ storagePath, weaviateClient, metadataManager }) {
18
+ this.storagePath = storagePath;
19
+ this.manager = metadataManager;
20
+ this.clients = {
21
+ weaviateClient: weaviateClient,
22
+ postgresClient: null
23
+ };
24
+ }
25
+ setClients(clients) {
26
+ this.clients = { ...this.clients, ...clients };
27
+ }
28
+ getClients() {
29
+ return this.clients;
30
+ }
31
+ async listDocumentSets(page = 1, pageSize = 10) {
32
+ return await this.manager.getDocumentSets(page, pageSize);
33
+ }
34
+ async getDocumentSet(documentSetId) {
35
+ return await this.manager.getDocumentSet(documentSetId);
36
+ }
37
+ async deleteDocumentSet(documentSetId) {
38
+ // Delete the document set from the database
39
+ const result = await this.manager.getDocumentSet(documentSetId);
40
+ if (result) {
41
+ // Delete the document set from the database
42
+ await this.manager.deleteDocumentSet(documentSetId);
43
+ // Delete the associated files from the filesystem
44
+ fs.rmSync(join(this.storagePath, result.name), { recursive: true, force: true });
45
+ fs.rmSync(join(this.storagePath, 'weaviate_data', capitalizeFirstLetter(result.name)), { recursive: true, force: true });
46
+ }
47
+ return { success: true };
48
+ }
49
+ getVectorStoreType() {
50
+ return this.clients.weaviateClient ? 'weaviate' : 'simple';
51
+ }
52
+ async generatePreviewData(data) {
53
+ const vectorStoreType = this.getVectorStoreType();
54
+ try {
55
+ if (!data.textColumns[0]) {
56
+ throw new Error("No text column specified for preview.");
57
+ }
58
+ return await previewResults(data.filePath, data.textColumns[0], {
59
+ modelName: data.modelName, // needed to tokenize, estimate costs
60
+ modelProvider: data.modelProvider,
61
+ splitIntoSentences: data.splitIntoSentences,
62
+ combineSentencesIntoChunks: data.combineSentencesIntoChunks,
63
+ sploderMaxSize: 100,
64
+ vectorStoreType: vectorStoreType,
65
+ projectName: data.datasetName,
66
+ storagePath: this.storagePath,
67
+ chunkSize: data.chunkSize,
68
+ chunkOverlap: data.chunkOverlap
69
+ });
70
+ }
71
+ catch (error) {
72
+ throw error;
73
+ }
74
+ }
75
+ async uploadCsv(data) {
76
+ // figure out if weaviate is available
77
+ const vectorStoreType = this.getVectorStoreType();
78
+ // First create the document set record
79
+ const documentSetId = await this.manager.addDocumentSet({
80
+ name: data.datasetName,
81
+ uploadDate: new Date(),
82
+ parameters: {
83
+ description: data.description,
84
+ textColumns: data.textColumns,
85
+ metadataColumns: data.metadataColumns,
86
+ splitIntoSentences: data.splitIntoSentences,
87
+ combineSentencesIntoChunks: data.combineSentencesIntoChunks,
88
+ sploderMaxSize: data.sploderMaxSize,
89
+ chunkSize: data.chunkSize,
90
+ chunkOverlap: data.chunkOverlap,
91
+ modelName: data.modelName,
92
+ modelProvider: data.modelProvider,
93
+ vectorStoreType: vectorStoreType,
94
+ },
95
+ totalDocuments: 0 // We'll update this after processing
96
+ });
97
+ const embedSettings = await this.manager.getSettings();
98
+ // Load and process the documents
99
+ try {
100
+ // Process each text column
101
+ for (const textColumn of data.textColumns) {
102
+ const documents = await loadDocumentsFromCsv(data.filePath, textColumn);
103
+ // Update total documents count
104
+ await this.manager.updateDocumentCount(documentSetId, documents.length);
105
+ // Create embeddings for this column
106
+ let ret = await createEmbeddings(data.filePath, textColumn, {
107
+ modelName: data.modelName,
108
+ modelProvider: data.modelProvider,
109
+ splitIntoSentences: data.splitIntoSentences,
110
+ combineSentencesIntoChunks: data.combineSentencesIntoChunks,
111
+ sploderMaxSize: 100, // TODO: make configurable
112
+ vectorStoreType: vectorStoreType,
113
+ projectName: data.datasetName,
114
+ // via https://medium.com/cameron-nokes/how-to-store-user-data-in-electron-3ba6bf66bc1e
115
+ storagePath: this.storagePath,
116
+ chunkSize: data.chunkSize,
117
+ chunkOverlap: data.chunkOverlap,
118
+ }, embedSettings, this.clients);
119
+ if (!ret.success) {
120
+ throw new Error(ret.error);
121
+ }
122
+ }
123
+ return { success: true, documentSetId };
124
+ }
125
+ catch (error) {
126
+ // If something fails, we should probably delete the document set
127
+ await this.manager.deleteDocumentSet(documentSetId);
128
+ console.error("deleting document set due to failure ", documentSetId, error);
129
+ throw error;
130
+ }
131
+ }
132
+ async searchDocumentSet(documentSetId, query, n_results = 10, filters) {
133
+ const documentSet = await this.manager.getDocumentSet(documentSetId);
134
+ const settings = await this.manager.getSettings();
135
+ if (!documentSet) {
136
+ throw new Error('Document set not found');
137
+ }
138
+ const index = await getIndex({
139
+ modelName: documentSet.parameters.modelName,
140
+ modelProvider: documentSet.parameters.modelProvider,
141
+ splitIntoSentences: documentSet.parameters.splitIntoSentences,
142
+ combineSentencesIntoChunks: documentSet.parameters.combineSentencesIntoChunks,
143
+ sploderMaxSize: 100,
144
+ vectorStoreType: documentSet.parameters.vectorStoreType,
145
+ projectName: documentSet.name,
146
+ storagePath: this.storagePath,
147
+ chunkSize: 1024, // not actually used, we just re-use a config object that has this option
148
+ chunkOverlap: 20, // not actually used, we just re-use a config object that has this option
149
+ }, settings, this.clients);
150
+ const results = await search(index, query, n_results, filters);
151
+ return results;
152
+ }
153
+ async getDocument(documentSetId, documentNodeId) {
154
+ const documentSet = await this.manager.getDocumentSet(documentSetId);
155
+ if (!documentSet) {
156
+ throw new Error('Document set not found');
157
+ }
158
+ const docStore = await getDocStore({
159
+ modelName: documentSet.parameters.modelName,
160
+ modelProvider: documentSet.parameters.modelProvider,
161
+ splitIntoSentences: documentSet.parameters.splitIntoSentences,
162
+ combineSentencesIntoChunks: documentSet.parameters.combineSentencesIntoChunks,
163
+ sploderMaxSize: 100,
164
+ vectorStoreType: documentSet.parameters.vectorStoreType,
165
+ projectName: documentSet.name,
166
+ storagePath: this.storagePath,
167
+ chunkSize: 1024, // not actually used, we just re-use a config object that has this option
168
+ chunkOverlap: 20, // not actually used, we just re-use a config object that has this option
169
+ });
170
+ const document = await docStore.getNode(documentNodeId);
171
+ if (!document) {
172
+ throw new Error('Document not found');
173
+ }
174
+ return document;
175
+ }
176
+ async getSettings() {
177
+ return this.manager.getSettings();
178
+ }
179
+ async setSettings(settings) {
180
+ return this.manager.setSettings(settings);
181
+ }
182
+ async getMaskedSettings() {
183
+ const settings = await this.manager.getSettings();
184
+ return {
185
+ openAIKey: maskKey(settings.openAIKey),
186
+ oLlamaBaseURL: settings.oLlamaBaseURL,
187
+ azureOpenAIKey: maskKey(settings.azureOpenAIKey),
188
+ azureOpenAIEndpoint: settings.azureOpenAIEndpoint,
189
+ azureOpenAIApiVersion: settings.azureOpenAIApiVersion,
190
+ mistralApiKey: maskKey(settings.mistralApiKey),
191
+ geminiApiKey: maskKey(settings.geminiApiKey)
192
+ };
193
+ }
194
+ async setMaskedSettings(newSettings) {
195
+ const oldSettings = await this.manager.getSettings();
196
+ const settings = {
197
+ ...newSettings,
198
+ openAIKey: newSettings.openAIKey == maskKey(oldSettings.openAIKey) ? oldSettings.openAIKey : newSettings.openAIKey,
199
+ azureOpenAIKey: newSettings.azureOpenAIKey == maskKey(oldSettings.azureOpenAIKey) ? oldSettings.azureOpenAIKey : newSettings.azureOpenAIKey,
200
+ mistralApiKey: newSettings.mistralApiKey == maskKey(oldSettings.mistralApiKey) ? oldSettings.mistralApiKey : newSettings.mistralApiKey,
201
+ geminiApiKey: newSettings.geminiApiKey == maskKey(oldSettings.geminiApiKey) ? oldSettings.geminiApiKey : newSettings.geminiApiKey
202
+ };
203
+ return this.manager.setSettings(settings);
204
+ }
205
+ }
206
+ //# sourceMappingURL=Meaningfully.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Meaningfully.js","sourceRoot":"","sources":["../src/Meaningfully.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { DocumentSetMetadata, Settings } from './types/index.js';
2
+ export declare abstract class MetadataManager {
3
+ protected queries: {
4
+ createDocumentSetsTable: string;
5
+ createSettingsTable: string;
6
+ insertDocumentSet: string;
7
+ selectDocumentSet: string;
8
+ selectDocumentSets: string;
9
+ countDocumentSets: string;
10
+ updateDocumentCount: string;
11
+ deleteDocumentSet: string;
12
+ selectSettings: string;
13
+ upsertSettings: string;
14
+ };
15
+ protected abstract runQuery<T>(query: string, params?: any[]): Promise<T[]>;
16
+ protected abstract runQuerySingle<T>(query: string, params?: any[]): Promise<T | null>;
17
+ protected abstract initializeDatabase(): Promise<void>;
18
+ protected abstract close(): void;
19
+ addDocumentSet(metadata: Omit<DocumentSetMetadata, 'documentSetId'>): Promise<number>;
20
+ getDocumentSet(documentSetId: number): Promise<DocumentSetMetadata | null>;
21
+ getDocumentSets(page?: number, pageSize?: number): Promise<{
22
+ documents: DocumentSetMetadata[];
23
+ total: number;
24
+ }>;
25
+ updateDocumentCount(documentSetId: number, count: number): Promise<void>;
26
+ deleteDocumentSet(documentSetId: number): Promise<void>;
27
+ getSettings(): Promise<Settings>;
28
+ setSettings(settings: Settings): Promise<{
29
+ success: boolean;
30
+ }>;
31
+ }
32
+ //# sourceMappingURL=MetadataManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataManager.d.ts","sourceRoot":"","sources":["../src/MetadataManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEtE,8BAAsB,eAAe;IACnC,SAAS,CAAC,OAAO;;;;;;;;;;;MAmDf;IAEF,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC3E,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IACtF,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI;IAE1B,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAUrF,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAoB1E,eAAe,CAAC,IAAI,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAW,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBtH,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxE,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;IAehC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAMrE"}
@@ -0,0 +1,115 @@
1
+ export class MetadataManager {
2
+ queries = {
3
+ /*
4
+ Note: RETURNING on non-select/non-create statements is important for compatibility between SQLite and PostgreSQL.
5
+ (Without it, better-sqlite would demand to use run() instead of all() or get(), which would break the abstraction.)
6
+ */
7
+ createDocumentSetsTable: `
8
+ CREATE TABLE IF NOT EXISTS document_sets (
9
+ set_id SERIAL PRIMARY KEY,
10
+ name TEXT NOT NULL UNIQUE,
11
+ upload_date TIMESTAMP NOT NULL,
12
+ parameters TEXT NOT NULL,
13
+ total_documents INTEGER NOT NULL DEFAULT 0
14
+ );
15
+ `,
16
+ createSettingsTable: `
17
+ CREATE TABLE IF NOT EXISTS meaningfully_settings (
18
+ settings_id SERIAL PRIMARY KEY,
19
+ settings TEXT NOT NULL
20
+ );
21
+ `,
22
+ insertDocumentSet: `
23
+ INSERT INTO document_sets (name, upload_date, parameters, total_documents)
24
+ VALUES ($1, $2, $3, $4) RETURNING set_id
25
+ `,
26
+ selectDocumentSet: `
27
+ SELECT * FROM document_sets WHERE set_id = $1
28
+ `,
29
+ selectDocumentSets: `
30
+ SELECT * FROM document_sets ORDER BY upload_date DESC LIMIT $1 OFFSET $2
31
+ `,
32
+ countDocumentSets: `
33
+ SELECT COUNT(*) as count FROM document_sets
34
+ `,
35
+ updateDocumentCount: `
36
+ UPDATE document_sets SET total_documents = total_documents + $1 WHERE set_id = $2 RETURNING *
37
+ `,
38
+ deleteDocumentSet: `
39
+ DELETE FROM document_sets WHERE set_id = $1 RETURNING *
40
+ `,
41
+ selectSettings: `
42
+ SELECT * FROM meaningfully_settings WHERE settings_id = 1
43
+ `,
44
+ upsertSettings: `
45
+ INSERT INTO meaningfully_settings (settings_id, settings)
46
+ VALUES (1, $1)
47
+ ON CONFLICT (settings_id) DO UPDATE SET settings = $2
48
+ RETURNING *
49
+ `
50
+ // the two arguments $1 and $2 are identical, but, to work around a cross-compatibility bug in SQLite versus Postgresql,
51
+ // where PG can accept the same argument twice (specified as $1 in two places), but SQLITE cannot (it just has ? placeholders)
52
+ // they are specified separately.
53
+ };
54
+ async addDocumentSet(metadata) {
55
+ const result = await this.runQuerySingle(this.queries.insertDocumentSet, [
56
+ metadata.name,
57
+ metadata.uploadDate.toISOString(),
58
+ JSON.stringify(metadata.parameters),
59
+ metadata.totalDocuments
60
+ ]);
61
+ return result?.set_id || 0;
62
+ }
63
+ async getDocumentSet(documentSetId) {
64
+ const row = await this.runQuerySingle(this.queries.selectDocumentSet, [documentSetId]);
65
+ if (!row)
66
+ return null;
67
+ return {
68
+ documentSetId: row.set_id,
69
+ name: row.name,
70
+ uploadDate: new Date(row.upload_date),
71
+ parameters: JSON.parse(row.parameters),
72
+ totalDocuments: row.total_documents
73
+ };
74
+ }
75
+ async getDocumentSets(page = 1, pageSize = 10) {
76
+ const offset = (page - 1) * pageSize;
77
+ const totalCountRow = await this.runQuerySingle(this.queries.countDocumentSets);
78
+ const totalCount = totalCountRow?.count || 0;
79
+ const rows = await this.runQuery(this.queries.selectDocumentSets, [pageSize, offset]);
80
+ const documents = rows.map((row) => ({
81
+ documentSetId: row.set_id,
82
+ name: row.name,
83
+ uploadDate: new Date(row.upload_date),
84
+ parameters: JSON.parse(row.parameters),
85
+ totalDocuments: row.total_documents
86
+ }));
87
+ return { documents, total: totalCount };
88
+ }
89
+ async updateDocumentCount(documentSetId, count) {
90
+ await this.runQuery(this.queries.updateDocumentCount, [count, documentSetId]);
91
+ }
92
+ async deleteDocumentSet(documentSetId) {
93
+ await this.runQuery(this.queries.deleteDocumentSet, [documentSetId]);
94
+ }
95
+ async getSettings() {
96
+ const DEFAULT_SETTINGS = {
97
+ openAIKey: null,
98
+ oLlamaBaseURL: null,
99
+ azureOpenAIKey: null,
100
+ azureOpenAIEndpoint: null,
101
+ azureOpenAIApiVersion: "2024-02-01",
102
+ mistralApiKey: null,
103
+ geminiApiKey: null,
104
+ };
105
+ const row = await this.runQuerySingle(this.queries.selectSettings);
106
+ return row ? { ...DEFAULT_SETTINGS, ...JSON.parse(row.settings) } : DEFAULT_SETTINGS;
107
+ }
108
+ async setSettings(settings) {
109
+ // the JSON.stringify(settings) is repeated to work around a cross-compatibility bug in SQLite versus Postgresql
110
+ // where PG can accept the same argument twice (specified as $1 in two places), but SQLITE cannot (it just has ? placeholders)
111
+ await this.runQuery(this.queries.upsertSettings, [JSON.stringify(settings), JSON.stringify(settings)]);
112
+ return { success: true };
113
+ }
114
+ }
115
+ //# sourceMappingURL=MetadataManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataManager.js","sourceRoot":"","sources":["../src/MetadataManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { EmbeddingConfig, EmbeddingResult, SearchResult, PreviewResult, Settings, MetadataFilter, Clients } from "../types/index.js";
2
+ export declare function createEmbeddings(csvPath: string, textColumnName: string, config: EmbeddingConfig, settings: Settings, clients: Clients): Promise<EmbeddingResult>;
3
+ export declare function previewResults(csvPath: string, textColumnName: string, config: EmbeddingConfig): Promise<PreviewResult>;
4
+ export declare function getDocStore(config: EmbeddingConfig): Promise<import("llamaindex").BaseDocumentStore>;
5
+ export declare function getIndex(config: EmbeddingConfig, settings: Settings, clients: Clients): Promise<import("llamaindex").VectorStoreIndex>;
6
+ export declare function search(index: any, query: string, numResults?: number, filters?: MetadataFilter[]): Promise<SearchResult[]>;
7
+ //# sourceMappingURL=embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../src/api/embedding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAK1I,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,eAAe,CAAC,CAyC1B;AAGD,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,eAAe,mDAExD;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,kDAE3F;AAED,wBAAsB,MAAM,CAC1B,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAW,EACvB,OAAO,CAAC,EAAE,cAAc,EAAE,GACzB,OAAO,CAAC,YAAY,EAAE,CAAC,CASzB"}