@ekairos/dataset 1.8.3

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 (76) hide show
  1. package/dist/clearDataset.tool.d.ts +22 -0
  2. package/dist/clearDataset.tool.d.ts.map +1 -0
  3. package/dist/clearDataset.tool.js +58 -0
  4. package/dist/clearDataset.tool.js.map +1 -0
  5. package/dist/completeDataset.tool.d.ts +27 -0
  6. package/dist/completeDataset.tool.d.ts.map +1 -0
  7. package/dist/completeDataset.tool.js +258 -0
  8. package/dist/completeDataset.tool.js.map +1 -0
  9. package/dist/datasetFiles.d.ts +4 -0
  10. package/dist/datasetFiles.d.ts.map +1 -0
  11. package/dist/datasetFiles.js +13 -0
  12. package/dist/datasetFiles.js.map +1 -0
  13. package/dist/domain.d.ts +2 -0
  14. package/dist/domain.d.ts.map +1 -0
  15. package/dist/domain.js +6 -0
  16. package/dist/domain.js.map +1 -0
  17. package/dist/executeCommand.tool.d.ts +37 -0
  18. package/dist/executeCommand.tool.d.ts.map +1 -0
  19. package/dist/executeCommand.tool.js +123 -0
  20. package/dist/executeCommand.tool.js.map +1 -0
  21. package/dist/file/file-dataset.agent.d.ts +51 -0
  22. package/dist/file/file-dataset.agent.d.ts.map +1 -0
  23. package/dist/file/file-dataset.agent.js +272 -0
  24. package/dist/file/file-dataset.agent.js.map +1 -0
  25. package/dist/file/filepreview.d.ts +41 -0
  26. package/dist/file/filepreview.d.ts.map +1 -0
  27. package/dist/file/filepreview.js +188 -0
  28. package/dist/file/filepreview.js.map +1 -0
  29. package/dist/file/generateSchema.tool.d.ts +31 -0
  30. package/dist/file/generateSchema.tool.d.ts.map +1 -0
  31. package/dist/file/generateSchema.tool.js +108 -0
  32. package/dist/file/generateSchema.tool.js.map +1 -0
  33. package/dist/file/index.d.ts +2 -0
  34. package/dist/file/index.d.ts.map +1 -0
  35. package/dist/file/index.js +18 -0
  36. package/dist/file/index.js.map +1 -0
  37. package/dist/file/prompts.d.ts +3 -0
  38. package/dist/file/prompts.d.ts.map +1 -0
  39. package/dist/file/prompts.js +194 -0
  40. package/dist/file/prompts.js.map +1 -0
  41. package/dist/file/scripts/file_metadata.py +71 -0
  42. package/dist/file/scripts/preview_head_csv.py +24 -0
  43. package/dist/file/scripts/preview_head_excel.py +30 -0
  44. package/dist/file/scripts/preview_mid_csv.py +36 -0
  45. package/dist/file/scripts/preview_mid_excel.py +39 -0
  46. package/dist/file/scripts/preview_tail_csv.py +27 -0
  47. package/dist/file/scripts/preview_tail_excel.py +29 -0
  48. package/dist/index.d.ts +8 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +24 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/schema.d.ts +62 -0
  53. package/dist/schema.d.ts.map +1 -0
  54. package/dist/schema.js +46 -0
  55. package/dist/schema.js.map +1 -0
  56. package/dist/service.d.ts +73 -0
  57. package/dist/service.d.ts.map +1 -0
  58. package/dist/service.js +423 -0
  59. package/dist/service.js.map +1 -0
  60. package/dist/transform/filepreview.d.ts +24 -0
  61. package/dist/transform/filepreview.d.ts.map +1 -0
  62. package/dist/transform/filepreview.js +92 -0
  63. package/dist/transform/filepreview.js.map +1 -0
  64. package/dist/transform/index.d.ts +2 -0
  65. package/dist/transform/index.d.ts.map +1 -0
  66. package/dist/transform/index.js +18 -0
  67. package/dist/transform/index.js.map +1 -0
  68. package/dist/transform/prompts.d.ts +35 -0
  69. package/dist/transform/prompts.d.ts.map +1 -0
  70. package/dist/transform/prompts.js +137 -0
  71. package/dist/transform/prompts.js.map +1 -0
  72. package/dist/transform/transform-dataset.agent.d.ts +58 -0
  73. package/dist/transform/transform-dataset.agent.d.ts.map +1 -0
  74. package/dist/transform/transform-dataset.agent.js +283 -0
  75. package/dist/transform/transform-dataset.agent.js.map +1 -0
  76. package/package.json +56 -0
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./domain"), exports);
18
+ __exportStar(require("./schema"), exports);
19
+ __exportStar(require("./service"), exports);
20
+ __exportStar(require("./clearDataset.tool"), exports);
21
+ __exportStar(require("./completeDataset.tool"), exports);
22
+ __exportStar(require("./executeCommand.tool"), exports);
23
+ __exportStar(require("./datasetFiles"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,2CAAwB;AACxB,4CAAyB;AACzB,sDAAmC;AACnC,yDAAsC;AACtC,wDAAqC;AACrC,iDAA8B"}
@@ -0,0 +1,62 @@
1
+ export declare const datasetDomain: import("@ekairos/domain").DomainInstance<{
2
+ readonly dataset_datasets: import("@instantdb/core").EntityDef<{
3
+ status: import("@instantdb/core").DataAttrDef<string, false, true>;
4
+ createdAt: import("@instantdb/core").DataAttrDef<number, false, true>;
5
+ updatedAt: import("@instantdb/core").DataAttrDef<number, false, false>;
6
+ title: import("@instantdb/core").DataAttrDef<string, false, false>;
7
+ analysis: import("@instantdb/core").DataAttrDef<any, false, false>;
8
+ schema: import("@instantdb/core").DataAttrDef<any, false, false>;
9
+ calculatedTotalRows: import("@instantdb/core").DataAttrDef<number, false, false>;
10
+ actualGeneratedRowCount: import("@instantdb/core").DataAttrDef<number, false, false>;
11
+ }, {}, void>;
12
+ readonly dataset_records: import("@instantdb/core").EntityDef<{
13
+ rowContent: import("@instantdb/core").DataAttrDef<any, true, false>;
14
+ order: import("@instantdb/core").DataAttrDef<number, true, true>;
15
+ createdAt: import("@instantdb/core").DataAttrDef<number, true, false>;
16
+ }, {}, void>;
17
+ readonly $files: import("@instantdb/core").EntityDef<{
18
+ id: import("@instantdb/core").DataAttrDef<string, true, true>;
19
+ createdAt: import("@instantdb/core").DataAttrDef<number, true, true>;
20
+ updatedAt: import("@instantdb/core").DataAttrDef<number, false, true>;
21
+ name: import("@instantdb/core").DataAttrDef<string, false, false>;
22
+ type: import("@instantdb/core").DataAttrDef<string, false, false>;
23
+ }, {}, void>;
24
+ }, {
25
+ readonly dataset_datasetsOrganization: {
26
+ readonly forward: {
27
+ readonly on: "dataset_datasets";
28
+ readonly has: "one";
29
+ readonly label: "organization";
30
+ };
31
+ readonly reverse: {
32
+ readonly on: "organizations";
33
+ readonly has: "many";
34
+ readonly label: "dataset_datasets";
35
+ };
36
+ };
37
+ readonly dataset_datasetsRecords: {
38
+ readonly forward: {
39
+ readonly on: "dataset_datasets";
40
+ readonly has: "many";
41
+ readonly label: "records";
42
+ };
43
+ readonly reverse: {
44
+ readonly on: "dataset_records";
45
+ readonly has: "one";
46
+ readonly label: "dataset";
47
+ };
48
+ };
49
+ readonly dataset_datasetsFiles: {
50
+ readonly forward: {
51
+ readonly on: "dataset_datasets";
52
+ readonly has: "one";
53
+ readonly label: "dataFile";
54
+ };
55
+ readonly reverse: {
56
+ readonly on: "$files";
57
+ readonly has: "many";
58
+ readonly label: "datasets";
59
+ };
60
+ };
61
+ }, {}>;
62
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AA6CA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAqC,CAAA"}
package/dist/schema.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.datasetDomain = void 0;
4
+ const core_1 = require("@instantdb/core");
5
+ const domain_1 = require("@ekairos/domain");
6
+ const entities = {
7
+ dataset_datasets: core_1.i.entity({
8
+ status: core_1.i.string().optional().indexed(),
9
+ createdAt: core_1.i.number().optional().indexed(),
10
+ updatedAt: core_1.i.number().optional(),
11
+ title: core_1.i.string().optional(),
12
+ analysis: core_1.i.json().optional(),
13
+ schema: core_1.i.json().optional(),
14
+ calculatedTotalRows: core_1.i.number().optional(),
15
+ actualGeneratedRowCount: core_1.i.number().optional(),
16
+ }),
17
+ dataset_records: core_1.i.entity({
18
+ rowContent: core_1.i.json(),
19
+ order: core_1.i.number().indexed(),
20
+ createdAt: core_1.i.number(),
21
+ }),
22
+ $files: core_1.i.entity({
23
+ id: core_1.i.string().indexed(),
24
+ createdAt: core_1.i.number().indexed(),
25
+ updatedAt: core_1.i.number().optional().indexed(),
26
+ name: core_1.i.string().optional(),
27
+ type: core_1.i.string().optional(),
28
+ }),
29
+ };
30
+ const links = {
31
+ dataset_datasetsOrganization: {
32
+ forward: { on: "dataset_datasets", has: "one", label: "organization" },
33
+ reverse: { on: "organizations", has: "many", label: "dataset_datasets" },
34
+ },
35
+ dataset_datasetsRecords: {
36
+ forward: { on: "dataset_datasets", has: "many", label: "records" },
37
+ reverse: { on: "dataset_records", has: "one", label: "dataset" },
38
+ },
39
+ dataset_datasetsFiles: {
40
+ forward: { on: "dataset_datasets", has: "one", label: "dataFile" },
41
+ reverse: { on: "$files", has: "many", label: "datasets" },
42
+ },
43
+ };
44
+ const rooms = {};
45
+ exports.datasetDomain = (0, domain_1.domain)({ entities, links, rooms });
46
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;AAAA,0CAAmC;AACnC,4CAAwC;AAExC,MAAM,QAAQ,GAAG;IACf,gBAAgB,EAAE,QAAC,CAAC,MAAM,CAAC;QACzB,MAAM,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;QACvC,SAAS,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;QAC1C,SAAS,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,KAAK,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,QAAQ,EAAE,QAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAC7B,MAAM,EAAE,QAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAC3B,mBAAmB,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC1C,uBAAuB,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/C,CAAC;IACF,eAAe,EAAE,QAAC,CAAC,MAAM,CAAC;QACxB,UAAU,EAAE,QAAC,CAAC,IAAI,EAAE;QACpB,KAAK,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;QAC3B,SAAS,EAAE,QAAC,CAAC,MAAM,EAAE;KACtB,CAAC;IACF,MAAM,EAAE,QAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;QACxB,SAAS,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;QAC/B,SAAS,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;QAC1C,IAAI,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,IAAI,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC;CACM,CAAA;AAEV,MAAM,KAAK,GAAG;IACZ,4BAA4B,EAAE;QAC5B,OAAO,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;QACtE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE;KACzE;IACD,uBAAuB,EAAE;QACvB,OAAO,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;QAClE,OAAO,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;KACjE;IACD,qBAAqB,EAAE;QACrB,OAAO,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;QAClE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;KAC1D;CACO,CAAA;AAEV,MAAM,KAAK,GAAG,EAAW,CAAA;AAEZ,QAAA,aAAa,GAAG,IAAA,eAAM,EAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA"}
@@ -0,0 +1,73 @@
1
+ export type ServiceResult<T = any> = {
2
+ ok: true;
3
+ data: T;
4
+ } | {
5
+ ok: false;
6
+ error: string;
7
+ };
8
+ export declare class DatasetService {
9
+ private readonly db;
10
+ constructor();
11
+ createDataset(params: {
12
+ id?: string;
13
+ sources?: string;
14
+ instructions?: string;
15
+ status?: string;
16
+ organizationId?: string;
17
+ [key: string]: any;
18
+ }): Promise<ServiceResult<{
19
+ datasetId: string;
20
+ }>>;
21
+ updateDataset(datasetId: string, updates: Record<string, any>): Promise<ServiceResult<void>>;
22
+ addDatasetRecords(params: {
23
+ datasetId: string;
24
+ records: Array<{
25
+ rowContent: any;
26
+ order: number;
27
+ }>;
28
+ }): Promise<ServiceResult<{
29
+ savedCount: number;
30
+ }>>;
31
+ batchAddDatasetRecords(params: {
32
+ datasetId: string;
33
+ shardMutations: any[];
34
+ manifestMetadata?: any;
35
+ }): Promise<ServiceResult<void>>;
36
+ findDatasetByFileId(fileId: string): Promise<any | null>;
37
+ findDatasetRecords(datasetId: string): Promise<any[]>;
38
+ getFileById(fileId: string): Promise<any>;
39
+ getDatasetById(datasetId: string): Promise<ServiceResult<any>>;
40
+ updateDatasetSchema(params: {
41
+ datasetId: string;
42
+ schema: any;
43
+ status?: string;
44
+ }): Promise<ServiceResult<void>>;
45
+ updateDatasetStatus(params: {
46
+ datasetId: string;
47
+ status: string;
48
+ calculatedTotalRows?: number;
49
+ actualGeneratedRowCount?: number;
50
+ }): Promise<ServiceResult<void>>;
51
+ getDatasetRecordsForDeletion(datasetId: string): Promise<ServiceResult<Array<{
52
+ id: string;
53
+ }>>>;
54
+ deleteDatasetRecordsBatch(recordIds: string[]): Promise<ServiceResult<number>>;
55
+ clearDataset(datasetId: string): Promise<ServiceResult<{
56
+ deletedCount: number;
57
+ }>>;
58
+ uploadDatasetOutputFile(params: {
59
+ datasetId: string;
60
+ fileBuffer: Buffer;
61
+ }): Promise<ServiceResult<{
62
+ fileId: string;
63
+ storagePath: string;
64
+ }>>;
65
+ linkFileToDataset(params: {
66
+ datasetId: string;
67
+ fileId: string;
68
+ storagePath: string;
69
+ }): Promise<ServiceResult<void>>;
70
+ readRecordsFromFile(datasetId: string): Promise<ServiceResult<AsyncGenerator<any, void, unknown>>>;
71
+ getContextByDatasetId(datasetId: string): Promise<ServiceResult<any>>;
72
+ }
73
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,423 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatasetService = void 0;
4
+ const admin_1 = require("@instantdb/admin");
5
+ const schema_1 = require("./schema");
6
+ class DatasetService {
7
+ constructor() {
8
+ this.db = (0, admin_1.init)({
9
+ appId: process.env.NEXT_PUBLIC_INSTANT_APP_ID,
10
+ adminToken: process.env.INSTANT_APP_ADMIN_TOKEN,
11
+ schema: schema_1.datasetDomain.schema()
12
+ });
13
+ }
14
+ async createDataset(params) {
15
+ try {
16
+ const datasetId = params.id ?? (0, admin_1.id)();
17
+ const mutations = [];
18
+ mutations.push(this.db.tx.dataset_datasets[datasetId].update({
19
+ sources: params.sources ?? "",
20
+ instructions: params.instructions ?? "",
21
+ status: params.status ?? "created",
22
+ createdAt: Date.now(),
23
+ updatedAt: Date.now(),
24
+ ...params,
25
+ }));
26
+ if (params.organizationId) {
27
+ mutations.push(this.db.tx.dataset_datasets[datasetId].link({
28
+ organization: params.organizationId,
29
+ }));
30
+ }
31
+ await this.db.transact(mutations);
32
+ return { ok: true, data: { datasetId } };
33
+ }
34
+ catch (error) {
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ return { ok: false, error: message };
37
+ }
38
+ }
39
+ async updateDataset(datasetId, updates) {
40
+ try {
41
+ await this.db.transact([
42
+ this.db.tx.dataset_datasets[datasetId].update({
43
+ ...updates,
44
+ updatedAt: Date.now(),
45
+ })
46
+ ]);
47
+ return { ok: true, data: undefined };
48
+ }
49
+ catch (error) {
50
+ const message = error instanceof Error ? error.message : String(error);
51
+ return { ok: false, error: message };
52
+ }
53
+ }
54
+ async addDatasetRecords(params) {
55
+ try {
56
+ const mutations = [];
57
+ for (const record of params.records) {
58
+ const recordId = (0, admin_1.id)();
59
+ mutations.push(this.db.tx.dataset_records[recordId].update({
60
+ rowContent: record.rowContent,
61
+ order: record.order,
62
+ createdAt: Date.now(),
63
+ }), this.db.tx.dataset_datasets[params.datasetId].link({ records: [recordId] }));
64
+ }
65
+ if (mutations.length > 0) {
66
+ await this.db.transact(mutations);
67
+ }
68
+ return { ok: true, data: { savedCount: params.records.length } };
69
+ }
70
+ catch (error) {
71
+ const message = error instanceof Error ? error.message : String(error);
72
+ return { ok: false, error: message };
73
+ }
74
+ }
75
+ async batchAddDatasetRecords(params) {
76
+ try {
77
+ const finalMutations = [...params.shardMutations];
78
+ if (params.manifestMetadata) {
79
+ finalMutations.push(this.db.tx.dataset_datasets[params.datasetId].update({
80
+ status: "completed",
81
+ updatedAt: Date.now(),
82
+ actualGeneratedRowCount: params.manifestMetadata.totalRowsSaved ?? 0,
83
+ }));
84
+ }
85
+ if (finalMutations.length > 0) {
86
+ await this.db.transact(finalMutations);
87
+ }
88
+ return { ok: true, data: undefined };
89
+ }
90
+ catch (error) {
91
+ const message = error instanceof Error ? error.message : String(error);
92
+ return { ok: false, error: message };
93
+ }
94
+ }
95
+ async findDatasetByFileId(fileId) {
96
+ try {
97
+ const lookupResult = await this.db.query({
98
+ dataset_datasets: {
99
+ $: {
100
+ where: {
101
+ "files.id": fileId,
102
+ },
103
+ limit: 1,
104
+ }
105
+ },
106
+ });
107
+ return lookupResult.dataset_datasets?.[0] ?? null;
108
+ }
109
+ catch (error) {
110
+ console.error("Error finding dataset by file ID:", error);
111
+ return null;
112
+ }
113
+ }
114
+ async findDatasetRecords(datasetId) {
115
+ try {
116
+ const datasetRecordQuery = await this.db.query({
117
+ dataset_records: {
118
+ $: {
119
+ where: {
120
+ "dataset.id": datasetId,
121
+ },
122
+ limit: 1,
123
+ fields: ["id"],
124
+ },
125
+ },
126
+ });
127
+ return datasetRecordQuery.dataset_records ?? [];
128
+ }
129
+ catch (error) {
130
+ console.error("Error finding dataset records:", error);
131
+ return [];
132
+ }
133
+ }
134
+ async getFileById(fileId) {
135
+ try {
136
+ const fileQuery = await this.db.query({
137
+ $files: {
138
+ $: {
139
+ where: {
140
+ id: fileId
141
+ },
142
+ limit: 1
143
+ }
144
+ },
145
+ });
146
+ return fileQuery;
147
+ }
148
+ catch (error) {
149
+ console.error("Error getting file by ID:", error);
150
+ throw error;
151
+ }
152
+ }
153
+ async getDatasetById(datasetId) {
154
+ try {
155
+ const query = await this.db.query({
156
+ dataset_datasets: {
157
+ $: {
158
+ where: { id: datasetId },
159
+ limit: 1,
160
+ },
161
+ },
162
+ });
163
+ const dataset = query.dataset_datasets?.[0];
164
+ if (!dataset) {
165
+ return { ok: false, error: `Dataset not found with id: ${datasetId}` };
166
+ }
167
+ return { ok: true, data: dataset };
168
+ }
169
+ catch (error) {
170
+ const message = error instanceof Error ? error.message : String(error);
171
+ return { ok: false, error: message };
172
+ }
173
+ }
174
+ async updateDatasetSchema(params) {
175
+ try {
176
+ await this.db.transact([
177
+ this.db.tx.dataset_datasets[params.datasetId].update({
178
+ schema: params.schema,
179
+ status: params.status ?? "schema_complete",
180
+ updatedAt: Date.now(),
181
+ })
182
+ ]);
183
+ return { ok: true, data: undefined };
184
+ }
185
+ catch (error) {
186
+ const message = error instanceof Error ? error.message : String(error);
187
+ return { ok: false, error: message };
188
+ }
189
+ }
190
+ async updateDatasetStatus(params) {
191
+ try {
192
+ const updates = {
193
+ status: params.status,
194
+ updatedAt: Date.now(),
195
+ };
196
+ if (params.calculatedTotalRows !== undefined) {
197
+ updates.calculatedTotalRows = params.calculatedTotalRows;
198
+ }
199
+ if (params.actualGeneratedRowCount !== undefined) {
200
+ updates.actualGeneratedRowCount = params.actualGeneratedRowCount;
201
+ }
202
+ await this.db.transact([
203
+ this.db.tx.dataset_datasets[params.datasetId].update(updates)
204
+ ]);
205
+ return { ok: true, data: undefined };
206
+ }
207
+ catch (error) {
208
+ const message = error instanceof Error ? error.message : String(error);
209
+ return { ok: false, error: message };
210
+ }
211
+ }
212
+ async getDatasetRecordsForDeletion(datasetId) {
213
+ try {
214
+ const query = await this.db.query({
215
+ dataset_records: {
216
+ $: {
217
+ where: {
218
+ "dataset.id": datasetId,
219
+ },
220
+ },
221
+ },
222
+ });
223
+ const records = query.dataset_records || [];
224
+ return { ok: true, data: records };
225
+ }
226
+ catch (error) {
227
+ const message = error instanceof Error ? error.message : String(error);
228
+ return { ok: false, error: message };
229
+ }
230
+ }
231
+ async deleteDatasetRecordsBatch(recordIds) {
232
+ try {
233
+ const tx = [];
234
+ for (const recordId of recordIds) {
235
+ tx.push(this.db.tx.dataset_records[recordId].delete());
236
+ }
237
+ await this.db.transact(tx);
238
+ return { ok: true, data: recordIds.length };
239
+ }
240
+ catch (error) {
241
+ const message = error instanceof Error ? error.message : String(error);
242
+ return { ok: false, error: message };
243
+ }
244
+ }
245
+ async clearDataset(datasetId) {
246
+ try {
247
+ const recordsResult = await this.getDatasetRecordsForDeletion(datasetId);
248
+ if (!recordsResult.ok) {
249
+ return recordsResult;
250
+ }
251
+ const records = recordsResult.data;
252
+ const BATCH_SIZE = 200;
253
+ let deletedCount = 0;
254
+ for (let i = 0; i < records.length; i += BATCH_SIZE) {
255
+ const batch = records.slice(i, i + BATCH_SIZE);
256
+ const batchIds = batch.map((r) => r.id);
257
+ const deleteResult = await this.deleteDatasetRecordsBatch(batchIds);
258
+ if (!deleteResult.ok) {
259
+ return { ok: false, error: `Failed to delete batch at index ${i}: ${deleteResult.error}` };
260
+ }
261
+ deletedCount += deleteResult.data;
262
+ }
263
+ const statusResult = await this.updateDatasetStatus({
264
+ datasetId,
265
+ status: "cleared",
266
+ actualGeneratedRowCount: 0,
267
+ calculatedTotalRows: 0,
268
+ });
269
+ if (!statusResult.ok) {
270
+ return statusResult;
271
+ }
272
+ return { ok: true, data: { deletedCount } };
273
+ }
274
+ catch (error) {
275
+ const message = error instanceof Error ? error.message : String(error);
276
+ return { ok: false, error: message };
277
+ }
278
+ }
279
+ async uploadDatasetOutputFile(params) {
280
+ try {
281
+ const storagePath = `/dataset/${params.datasetId}/output.jsonl`;
282
+ const uploadResult = await this.db.storage.uploadFile(storagePath, params.fileBuffer, {
283
+ contentType: "application/x-ndjson",
284
+ contentDisposition: "output.jsonl",
285
+ });
286
+ if (!uploadResult?.data?.id) {
287
+ return { ok: false, error: "Failed to upload file to storage" };
288
+ }
289
+ const linkResult = await this.linkFileToDataset({
290
+ datasetId: params.datasetId,
291
+ fileId: uploadResult.data.id,
292
+ storagePath,
293
+ });
294
+ if (!linkResult.ok) {
295
+ return linkResult;
296
+ }
297
+ return {
298
+ ok: true,
299
+ data: {
300
+ fileId: uploadResult.data.id,
301
+ storagePath,
302
+ },
303
+ };
304
+ }
305
+ catch (error) {
306
+ const message = error instanceof Error ? error.message : String(error);
307
+ return { ok: false, error: message };
308
+ }
309
+ }
310
+ async linkFileToDataset(params) {
311
+ try {
312
+ await this.db.transact([
313
+ this.db.tx.dataset_datasets[params.datasetId].link({ dataFile: params.fileId }),
314
+ ]);
315
+ return { ok: true, data: undefined };
316
+ }
317
+ catch (error) {
318
+ const message = error instanceof Error ? error.message : String(error);
319
+ return { ok: false, error: message };
320
+ }
321
+ }
322
+ async readRecordsFromFile(datasetId) {
323
+ try {
324
+ const fileQuery = await this.db.query({
325
+ dataset_datasets: {
326
+ $: {
327
+ where: { id: datasetId },
328
+ limit: 1,
329
+ },
330
+ dataFile: {},
331
+ }, // FIX TYPE ERROR
332
+ });
333
+ const datasetRecord = fileQuery.dataset_datasets?.[0];
334
+ const dataFile = datasetRecord?.dataFile;
335
+ const linkedFile = Array.isArray(dataFile) ? dataFile[0] : dataFile;
336
+ if (!linkedFile || !linkedFile.url) {
337
+ return { ok: false, error: "Dataset output file not found" };
338
+ }
339
+ async function* createGenerator(url) {
340
+ const response = await fetch(url);
341
+ if (!response.ok || !response.body) {
342
+ throw new Error(`Failed to download dataset output file: ${response.status}`);
343
+ }
344
+ const reader = response.body.getReader();
345
+ const decoder = new TextDecoder("utf-8");
346
+ let buffer = "";
347
+ while (true) {
348
+ const { value, done } = await reader.read();
349
+ if (done) {
350
+ break;
351
+ }
352
+ buffer += decoder.decode(value, { stream: true });
353
+ let newlineIndex = buffer.indexOf("\n");
354
+ while (newlineIndex !== -1) {
355
+ const line = buffer.slice(0, newlineIndex);
356
+ buffer = buffer.slice(newlineIndex + 1);
357
+ const trimmed = line.trim();
358
+ if (trimmed.length === 0) {
359
+ newlineIndex = buffer.indexOf("\n");
360
+ continue;
361
+ }
362
+ let parsed;
363
+ try {
364
+ parsed = JSON.parse(trimmed);
365
+ }
366
+ catch (error) {
367
+ console.error("Invalid JSON line in dataset output", error);
368
+ newlineIndex = buffer.indexOf("\n");
369
+ continue;
370
+ }
371
+ if (parsed && parsed.type === "row") {
372
+ yield { rowContent: parsed.data };
373
+ }
374
+ newlineIndex = buffer.indexOf("\n");
375
+ }
376
+ }
377
+ buffer += decoder.decode();
378
+ const trimmed = buffer.trim();
379
+ if (trimmed.length > 0) {
380
+ try {
381
+ const parsed = JSON.parse(trimmed);
382
+ if (parsed && parsed.type === "row") {
383
+ yield { rowContent: parsed.data };
384
+ }
385
+ }
386
+ catch (error) {
387
+ console.error("Invalid JSON line in dataset output", error);
388
+ }
389
+ }
390
+ }
391
+ const generator = createGenerator(linkedFile.url);
392
+ return { ok: true, data: generator };
393
+ }
394
+ catch (error) {
395
+ const message = error instanceof Error ? error.message : String(error);
396
+ return { ok: false, error: message };
397
+ }
398
+ }
399
+ async getContextByDatasetId(datasetId) {
400
+ try {
401
+ const query = await this.db.query({
402
+ story_contexts: {
403
+ $: {
404
+ where: { "content.datasetId": datasetId },
405
+ limit: 1,
406
+ order: { serverCreatedAt: "desc" },
407
+ },
408
+ },
409
+ });
410
+ const context = query.story_contexts?.[0];
411
+ if (!context) {
412
+ return { ok: false, error: `Context not found for dataset: ${datasetId}` };
413
+ }
414
+ return { ok: true, data: context };
415
+ }
416
+ catch (error) {
417
+ const message = error instanceof Error ? error.message : String(error);
418
+ return { ok: false, error: message };
419
+ }
420
+ }
421
+ }
422
+ exports.DatasetService = DatasetService;
423
+ //# sourceMappingURL=service.js.map