@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.
- package/.nvmrc +1 -0
- package/LICENSE +7 -0
- package/README.md +3 -0
- package/dist/DocumentSetManager.d.ts +28 -0
- package/dist/DocumentSetManager.d.ts.map +1 -0
- package/dist/DocumentSetManager.js +134 -0
- package/dist/DocumentSetManager.js.map +1 -0
- package/dist/Meaningfully.d.ts +52 -0
- package/dist/Meaningfully.d.ts.map +1 -0
- package/dist/Meaningfully.js +206 -0
- package/dist/Meaningfully.js.map +1 -0
- package/dist/MetadataManager.d.ts +32 -0
- package/dist/MetadataManager.d.ts.map +1 -0
- package/dist/MetadataManager.js +115 -0
- package/dist/MetadataManager.js.map +1 -0
- package/dist/api/embedding.d.ts +7 -0
- package/dist/api/embedding.d.ts.map +1 -0
- package/dist/api/embedding.js +94 -0
- package/dist/api/embedding.js.map +1 -0
- package/dist/api/embedding.test.d.ts +2 -0
- package/dist/api/embedding.test.d.ts.map +1 -0
- package/dist/api/embedding.test.js +340 -0
- package/dist/api/embedding.test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/services/batchingWeaviateVectorStore.d.ts +6 -0
- package/dist/services/batchingWeaviateVectorStore.d.ts.map +1 -0
- package/dist/services/batchingWeaviateVectorStore.js +21 -0
- package/dist/services/batchingWeaviateVectorStore.js.map +1 -0
- package/dist/services/csvLoader.d.ts +3 -0
- package/dist/services/csvLoader.d.ts.map +1 -0
- package/dist/services/csvLoader.js +18 -0
- package/dist/services/csvLoader.js.map +1 -0
- package/dist/services/csvLoader.test.d.ts +2 -0
- package/dist/services/csvLoader.test.d.ts.map +1 -0
- package/dist/services/csvLoader.test.js +75 -0
- package/dist/services/csvLoader.test.js.map +1 -0
- package/dist/services/embeddings.d.ts +22 -0
- package/dist/services/embeddings.d.ts.map +1 -0
- package/dist/services/embeddings.js +314 -0
- package/dist/services/embeddings.js.map +1 -0
- package/dist/services/embeddings.test.d.ts +2 -0
- package/dist/services/embeddings.test.d.ts.map +1 -0
- package/dist/services/embeddings.test.js +115 -0
- package/dist/services/embeddings.test.js.map +1 -0
- package/dist/services/loggingOpenAIEmbedding.d.ts +2 -0
- package/dist/services/loggingOpenAIEmbedding.d.ts.map +1 -0
- package/dist/services/loggingOpenAIEmbedding.js +41 -0
- package/dist/services/loggingOpenAIEmbedding.js.map +1 -0
- package/dist/services/mockEmbedding.d.ts +6 -0
- package/dist/services/mockEmbedding.d.ts.map +1 -0
- package/dist/services/mockEmbedding.js +14 -0
- package/dist/services/mockEmbedding.js.map +1 -0
- package/dist/services/progressManager.d.ts +21 -0
- package/dist/services/progressManager.d.ts.map +1 -0
- package/dist/services/progressManager.js +76 -0
- package/dist/services/progressManager.js.map +1 -0
- package/dist/services/progressVectorStoreIndex.d.ts +21 -0
- package/dist/services/progressVectorStoreIndex.d.ts.map +1 -0
- package/dist/services/progressVectorStoreIndex.js +60 -0
- package/dist/services/progressVectorStoreIndex.js.map +1 -0
- package/dist/services/sentenceSplitter.d.ts +17 -0
- package/dist/services/sentenceSplitter.d.ts.map +1 -0
- package/dist/services/sentenceSplitter.js +207 -0
- package/dist/services/sentenceSplitter.js.map +1 -0
- package/dist/services/sentenceSplitter.test.d.ts +2 -0
- package/dist/services/sentenceSplitter.test.d.ts.map +1 -0
- package/dist/services/sentenceSplitter.test.js +68 -0
- package/dist/services/sentenceSplitter.test.js.map +1 -0
- package/dist/services/sploder.d.ts +13 -0
- package/dist/services/sploder.d.ts.map +1 -0
- package/dist/services/sploder.js +45 -0
- package/dist/services/sploder.js.map +1 -0
- package/dist/types/index.d.ts +77 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +7 -0
- package/dist/utils.js.map +1 -0
- package/package.json +43 -0
- package/src/Meaningfully.d.ts +57 -0
- package/src/Meaningfully.ts +228 -0
- package/src/MetadataManager.d.ts +27 -0
- package/src/MetadataManager.ts +145 -0
- package/src/api/embedding.d.ts +6 -0
- package/src/api/embedding.ts +122 -0
- package/src/index.ts +5 -0
- package/src/services/batchingWeaviateVectorStore.d.ts +5 -0
- package/src/services/batchingWeaviateVectorStore.ts +23 -0
- package/src/services/csvLoader.d.ts +2 -0
- package/src/services/csvLoader.ts +24 -0
- package/src/services/embeddings.d.ts +21 -0
- package/src/services/embeddings.ts +374 -0
- package/src/services/loggingOpenAIEmbedding.d.ts +0 -0
- package/src/services/loggingOpenAIEmbedding.ts +46 -0
- package/src/services/mockEmbedding.d.ts +5 -0
- package/src/services/mockEmbedding.ts +13 -0
- package/src/services/progressManager.d.ts +20 -0
- package/src/services/progressManager.ts +88 -0
- package/src/services/progressVectorStoreIndex.d.ts +20 -0
- package/src/services/progressVectorStoreIndex.ts +95 -0
- package/src/services/sentenceSplitter.d.ts +16 -0
- package/src/services/sentenceSplitter.ts +243 -0
- package/src/services/sploder.d.ts +12 -0
- package/src/services/sploder.ts +62 -0
- package/src/types/index.d.ts +71 -0
- package/src/types/index.ts +89 -0
- package/src/utils.d.ts +2 -0
- package/src/utils.ts +6 -0
- package/tests/MetadataManager.test.ts +120 -0
- package/tests/csvLoader.test.d.ts +1 -0
- package/tests/csvLoader.test.ts +88 -0
- package/tests/embedding.test.d.ts +1 -0
- package/tests/embedding.test.ts +425 -0
- package/tests/embeddings.test.d.ts +1 -0
- package/tests/embeddings.test.ts +144 -0
- package/tests/sentenceSplitter.test.d.ts +1 -0
- package/tests/sentenceSplitter.test.ts +81 -0
- package/tsconfig.json +31 -0
- 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,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"}
|