@ekairos/dataset 1.22.40-beta.development.0 → 1.22.40
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/dist/agents.d.ts +8 -0
- package/dist/agents.js +8 -0
- package/dist/builder/agentMaterializers.d.ts +9 -0
- package/dist/builder/agentMaterializers.js +10 -0
- package/dist/builder/context.d.ts +15 -0
- package/dist/builder/context.js +251 -0
- package/dist/builder/instructions.d.ts +4 -5
- package/dist/builder/instructions.js +15 -21
- package/dist/builder/materialize.d.ts +77 -10
- package/dist/builder/materialize.js +495 -152
- package/dist/builder/materializeQuery.d.ts +12 -0
- package/dist/builder/materializeQuery.js +31 -0
- package/dist/builder/persistence.d.ts +10 -6
- package/dist/builder/persistence.js +107 -62
- package/dist/builder/{sourceRows.d.ts → rows.d.ts} +0 -1
- package/dist/builder/{sourceRows.js → rows.js} +3 -9
- package/dist/builder/schemaInference.d.ts +1 -2
- package/dist/builder/schemaInference.js +4 -12
- package/dist/builder/types.d.ts +41 -26
- package/dist/builder/types.js +1 -3
- package/dist/clearDataset.tool.d.ts +2 -3
- package/dist/clearDataset.tool.js +13 -17
- package/dist/completeDataset.steps.d.ts +117 -0
- package/dist/completeDataset.steps.js +537 -0
- package/dist/completeDataset.tool.d.ts +132 -7
- package/dist/completeDataset.tool.js +46 -192
- package/dist/contextResources.d.ts +31 -0
- package/dist/contextResources.js +151 -0
- package/dist/contextWorkspace.d.ts +79 -0
- package/dist/contextWorkspace.js +234 -0
- package/dist/dataset/steps.d.ts +39 -15
- package/dist/dataset/steps.js +96 -39
- package/dist/dataset.d.ts +2 -3
- package/dist/dataset.js +73 -51
- package/dist/datasetFiles.d.ts +5 -1
- package/dist/datasetFiles.js +29 -27
- package/dist/defineNotation.tool.d.ts +49 -0
- package/dist/defineNotation.tool.js +154 -0
- package/dist/domain.d.ts +1 -2
- package/dist/domain.js +1 -6
- package/dist/executeCommand.tool.d.ts +2 -30
- package/dist/executeCommand.tool.js +165 -39
- package/dist/file/file-dataset.agent.d.ts +19 -56
- package/dist/file/file-dataset.agent.js +182 -136
- package/dist/file/file-dataset.steps.d.ts +27 -0
- package/dist/file/file-dataset.steps.js +47 -0
- package/dist/file/file-dataset.types.d.ts +64 -0
- package/dist/file/file-dataset.types.js +1 -0
- package/dist/file/filepreview.d.ts +5 -35
- package/dist/file/filepreview.js +60 -107
- package/dist/file/filepreview.types.d.ts +31 -0
- package/dist/file/filepreview.types.js +1 -0
- package/dist/file/generateSchema.tool.d.ts +2 -3
- package/dist/file/generateSchema.tool.js +11 -15
- package/dist/file/index.d.ts +1 -2
- package/dist/file/index.js +1 -18
- package/dist/file/prompts.d.ts +2 -3
- package/dist/file/prompts.js +152 -32
- package/dist/file/scripts.generated.d.ts +1 -0
- package/dist/file/scripts.generated.js +11 -0
- package/dist/file/steps.d.ts +1 -2
- package/dist/file/steps.js +9 -7
- package/dist/id.d.ts +1 -0
- package/dist/id.js +10 -0
- package/dist/index.d.ts +9 -7
- package/dist/index.js +9 -23
- package/dist/materializeDataset.tool.d.ts +35 -28
- package/dist/materializeDataset.tool.js +74 -68
- package/dist/notation.d.ts +205 -0
- package/dist/notation.js +424 -0
- package/dist/query/index.d.ts +1 -2
- package/dist/query/index.js +1 -18
- package/dist/query/queryDomain.d.ts +3 -4
- package/dist/query/queryDomain.js +3 -40
- package/dist/query/queryDomain.step.d.ts +1 -1
- package/dist/query/queryDomain.step.js +24 -13
- package/dist/sandbox/steps.d.ts +23 -15
- package/dist/sandbox/steps.js +73 -76
- package/dist/sandbox.steps.d.ts +1 -2
- package/dist/sandbox.steps.js +1 -18
- package/dist/schema.d.ts +14 -3
- package/dist/schema.js +27 -26
- package/dist/service.d.ts +12 -5
- package/dist/service.js +88 -15
- package/dist/skill.d.ts +0 -1
- package/dist/skill.js +12 -17
- package/dist/transform/filepreview.d.ts +2 -3
- package/dist/transform/filepreview.js +9 -26
- package/dist/transform/index.d.ts +2 -3
- package/dist/transform/index.js +2 -8
- package/dist/transform/prompts.d.ts +1 -34
- package/dist/transform/prompts.js +66 -46
- package/dist/transform/transform-dataset.agent.d.ts +21 -46
- package/dist/transform/transform-dataset.agent.js +152 -93
- package/dist/transform/transform-dataset.steps.d.ts +30 -0
- package/dist/transform/transform-dataset.steps.js +61 -0
- package/dist/transform/transform-dataset.types.d.ts +96 -0
- package/dist/transform/transform-dataset.types.js +1 -0
- package/dist/transform/transformDataset.d.ts +3 -3
- package/dist/transform/transformDataset.js +15 -18
- package/dist/writeDatasetRows.tool.d.ts +188 -0
- package/dist/writeDatasetRows.tool.js +258 -0
- package/package.json +33 -8
- package/dist/builder/instructions.d.ts.map +0 -1
- package/dist/builder/instructions.js.map +0 -1
- package/dist/builder/materialize.d.ts.map +0 -1
- package/dist/builder/materialize.js.map +0 -1
- package/dist/builder/persistence.d.ts.map +0 -1
- package/dist/builder/persistence.js.map +0 -1
- package/dist/builder/schemaInference.d.ts.map +0 -1
- package/dist/builder/schemaInference.js.map +0 -1
- package/dist/builder/sourceRows.d.ts.map +0 -1
- package/dist/builder/sourceRows.js.map +0 -1
- package/dist/builder/types.d.ts.map +0 -1
- package/dist/builder/types.js.map +0 -1
- package/dist/clearDataset.tool.d.ts.map +0 -1
- package/dist/clearDataset.tool.js.map +0 -1
- package/dist/completeDataset.tool.d.ts.map +0 -1
- package/dist/completeDataset.tool.js.map +0 -1
- package/dist/dataset/steps.d.ts.map +0 -1
- package/dist/dataset/steps.js.map +0 -1
- package/dist/dataset.d.ts.map +0 -1
- package/dist/dataset.js.map +0 -1
- package/dist/datasetFiles.d.ts.map +0 -1
- package/dist/datasetFiles.js.map +0 -1
- package/dist/domain.d.ts.map +0 -1
- package/dist/domain.js.map +0 -1
- package/dist/eventsReactRuntime.d.ts +0 -22
- package/dist/eventsReactRuntime.d.ts.map +0 -1
- package/dist/eventsReactRuntime.js +0 -29
- package/dist/eventsReactRuntime.js.map +0 -1
- package/dist/executeCommand.tool.d.ts.map +0 -1
- package/dist/executeCommand.tool.js.map +0 -1
- package/dist/file/file-dataset.agent.d.ts.map +0 -1
- package/dist/file/file-dataset.agent.js.map +0 -1
- package/dist/file/filepreview.d.ts.map +0 -1
- package/dist/file/filepreview.js.map +0 -1
- package/dist/file/generateSchema.tool.d.ts.map +0 -1
- package/dist/file/generateSchema.tool.js.map +0 -1
- package/dist/file/index.d.ts.map +0 -1
- package/dist/file/index.js.map +0 -1
- package/dist/file/prompts.d.ts.map +0 -1
- package/dist/file/prompts.js.map +0 -1
- package/dist/file/steps.d.ts.map +0 -1
- package/dist/file/steps.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/materializeDataset.tool.d.ts.map +0 -1
- package/dist/materializeDataset.tool.js.map +0 -1
- package/dist/query/index.d.ts.map +0 -1
- package/dist/query/index.js.map +0 -1
- package/dist/query/queryDomain.d.ts.map +0 -1
- package/dist/query/queryDomain.js.map +0 -1
- package/dist/query/queryDomain.step.d.ts.map +0 -1
- package/dist/query/queryDomain.step.js.map +0 -1
- package/dist/sandbox/steps.d.ts.map +0 -1
- package/dist/sandbox/steps.js.map +0 -1
- package/dist/sandbox.steps.d.ts.map +0 -1
- package/dist/sandbox.steps.js.map +0 -1
- package/dist/schema.d.ts.map +0 -1
- package/dist/schema.js.map +0 -1
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js.map +0 -1
- package/dist/skill.d.ts.map +0 -1
- package/dist/skill.js.map +0 -1
- package/dist/transform/filepreview.d.ts.map +0 -1
- package/dist/transform/filepreview.js.map +0 -1
- package/dist/transform/index.d.ts.map +0 -1
- package/dist/transform/index.js.map +0 -1
- package/dist/transform/prompts.d.ts.map +0 -1
- package/dist/transform/prompts.js.map +0 -1
- package/dist/transform/transform-dataset.agent.d.ts.map +0 -1
- package/dist/transform/transform-dataset.agent.js.map +0 -1
- package/dist/transform/transformDataset.d.ts.map +0 -1
- package/dist/transform/transformDataset.js.map +0 -1
|
@@ -1,103 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
async function initializeSandbox(env, sandboxId, datasetId, fileId, state) {
|
|
18
|
-
if (state.initialized) {
|
|
19
|
-
return state.filePath;
|
|
1
|
+
import { INPUT_TEXT_ITEM_TYPE, WEB_CHANNEL, } from "@ekairos/events";
|
|
2
|
+
import { createContext } from "@ekairos/reactor/context";
|
|
3
|
+
import { createClearDatasetTool } from "../clearDataset.tool.js";
|
|
4
|
+
import { createCompleteDatasetTool, didCompleteDatasetSucceed, getDatasetFatalFailure, } from "../completeDataset.tool.js";
|
|
5
|
+
import { datasetGetByIdStep } from "../dataset/steps.js";
|
|
6
|
+
import { createExecuteCommandTool } from "../executeCommand.tool.js";
|
|
7
|
+
import { createDefineNotationTool } from "../defineNotation.tool.js";
|
|
8
|
+
import { createGenerateSchemaTool } from "./generateSchema.tool.js";
|
|
9
|
+
import { buildFileDatasetPromptStep, initializeFileParseSandboxStep, } from "./file-dataset.steps.js";
|
|
10
|
+
import { createDatasetId } from "../id.js";
|
|
11
|
+
async function awaitContextRun(run) {
|
|
12
|
+
if (!run)
|
|
13
|
+
return;
|
|
14
|
+
if (run.returnValue) {
|
|
15
|
+
await run.returnValue;
|
|
16
|
+
return;
|
|
20
17
|
}
|
|
21
|
-
|
|
22
|
-
await (0, filepreview_1.ensurePreviewScriptsAvailable)(env, sandboxId);
|
|
23
|
-
console.log(`[FileParseStory ${datasetId}] Installing Python dependencies...`);
|
|
24
|
-
const pipInstall = await (0, steps_1.runDatasetSandboxCommandStep)({
|
|
25
|
-
env,
|
|
26
|
-
sandboxId,
|
|
27
|
-
cmd: "python",
|
|
28
|
-
args: ["-m", "pip", "install", "pandas", "openpyxl", "--quiet", "--upgrade"],
|
|
29
|
-
});
|
|
30
|
-
const installStderr = pipInstall.stderr;
|
|
31
|
-
if (installStderr && (installStderr.includes("ERROR") || installStderr.includes("FAILED"))) {
|
|
32
|
-
throw new Error(`pip install failed: ${installStderr.substring(0, 300)}`);
|
|
33
|
-
}
|
|
34
|
-
console.log(`[FileParseStory ${datasetId}] Fetching file from InstantDB...`);
|
|
35
|
-
const file = await (0, steps_2.readInstantFileStep)({ env, fileId });
|
|
36
|
-
console.log(`[FileParseStory ${datasetId}] Creating dataset workstation...`);
|
|
37
|
-
const workstation = (0, datasetFiles_1.getDatasetWorkstation)(datasetId);
|
|
38
|
-
await (0, steps_1.runDatasetSandboxCommandStep)({
|
|
39
|
-
env,
|
|
40
|
-
sandboxId,
|
|
41
|
-
cmd: "mkdir",
|
|
42
|
-
args: ["-p", workstation],
|
|
43
|
-
});
|
|
44
|
-
const fileName = file.contentDisposition ?? "";
|
|
45
|
-
const fileExtension = fileName.includes(".") ? fileName.substring(fileName.lastIndexOf(".")) : "";
|
|
46
|
-
const sandboxFilePath = `${workstation}/${fileId}${fileExtension}`;
|
|
47
|
-
await (0, steps_1.writeDatasetSandboxFilesStep)({
|
|
48
|
-
env,
|
|
49
|
-
sandboxId,
|
|
50
|
-
files: [
|
|
51
|
-
{
|
|
52
|
-
path: sandboxFilePath,
|
|
53
|
-
contentBase64: file.contentBase64,
|
|
54
|
-
},
|
|
55
|
-
],
|
|
56
|
-
});
|
|
57
|
-
console.log(`[FileParseStory ${datasetId}] ✅ Workstation created: ${workstation}`);
|
|
58
|
-
console.log(`[FileParseStory ${datasetId}] ✅ File saved: ${sandboxFilePath}`);
|
|
59
|
-
state.filePath = sandboxFilePath;
|
|
60
|
-
state.initialized = true;
|
|
61
|
-
return sandboxFilePath;
|
|
18
|
+
await run;
|
|
62
19
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
*
|
|
66
|
-
* Uso:
|
|
67
|
-
* - Crear una instancia con `fileId`, `instructions` y un `sandbox`
|
|
68
|
-
* - Llamar `getDataset()` para crear un dataset nuevo (crea un datasetId interno)
|
|
69
|
-
* - Llamar `followUp(datasetId, feedback)` para iterar el mismo dataset con feedback
|
|
70
|
-
*
|
|
71
|
-
* Internamente corre un Context (`createContext("file.parse")`) que itera hasta que se ejecuta el tool `completeDataset`.
|
|
72
|
-
*/
|
|
73
|
-
function createFileParseStoryDefinition(params) {
|
|
74
|
-
const datasetId = params.datasetId ?? (0, admin_1.id)();
|
|
20
|
+
function createFileParseContextDefinition(params) {
|
|
21
|
+
const fallbackDatasetId = params.datasetId;
|
|
75
22
|
const model = params.model ?? "openai/gpt-5";
|
|
76
|
-
let
|
|
77
|
-
.context(async (stored,
|
|
23
|
+
let contextBuilder = createContext("file.parse")
|
|
24
|
+
.context(async (stored, _env, runtime) => {
|
|
78
25
|
const previous = stored?.content ?? {};
|
|
79
|
-
const sandboxState = previous?.sandboxState ??
|
|
26
|
+
const sandboxState = previous?.sandboxState ??
|
|
27
|
+
params.sandboxState ?? { initialized: false, filePath: "" };
|
|
28
|
+
const datasetId = previous?.datasetId ?? fallbackDatasetId ?? "";
|
|
29
|
+
const fileId = previous?.fileId ?? params.fileId ?? "";
|
|
30
|
+
const instructions = previous?.instructions ?? params.instructions ?? "";
|
|
80
31
|
const sandboxId = previous?.sandboxId ?? params.sandboxId ?? "";
|
|
32
|
+
const contextRun = runtime?.__ekairosContextRun ?? {};
|
|
33
|
+
const contextId = String(contextRun.contextId ?? stored?.id ?? "").trim();
|
|
34
|
+
const executionId = String(contextRun.executionId ?? previous?.executionId ?? "").trim();
|
|
35
|
+
const sourceEventId = String(previous?.sourceEventId ?? params.sourceEventId ?? "").trim();
|
|
36
|
+
const sourcePartIndex = typeof previous?.sourcePartIndex === "number"
|
|
37
|
+
? previous.sourcePartIndex
|
|
38
|
+
: typeof params.sourcePartIndex === "number"
|
|
39
|
+
? params.sourcePartIndex
|
|
40
|
+
: 0;
|
|
41
|
+
if (!datasetId) {
|
|
42
|
+
throw new Error("dataset_id_required");
|
|
43
|
+
}
|
|
44
|
+
if (!fileId) {
|
|
45
|
+
throw new Error("dataset_file_id_required");
|
|
46
|
+
}
|
|
81
47
|
if (!sandboxId) {
|
|
82
48
|
throw new Error("dataset_sandbox_required");
|
|
83
49
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
filePreview = await (0, filepreview_1.generateFilePreview)(env, sandboxId, sandboxFilePath, datasetId);
|
|
50
|
+
if (!contextId) {
|
|
51
|
+
throw new Error("dataset_context_id_required");
|
|
88
52
|
}
|
|
89
|
-
|
|
90
|
-
|
|
53
|
+
if (!executionId) {
|
|
54
|
+
throw new Error("dataset_execution_id_required");
|
|
91
55
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
56
|
+
const initialized = sandboxState.initialized && sandboxState.filePath
|
|
57
|
+
? { filePath: sandboxState.filePath, state: sandboxState }
|
|
58
|
+
: await initializeFileParseSandboxStep({
|
|
59
|
+
runtime,
|
|
60
|
+
sandboxId,
|
|
61
|
+
contextId,
|
|
62
|
+
executionId,
|
|
63
|
+
datasetId,
|
|
64
|
+
fileId,
|
|
65
|
+
sourceEventId,
|
|
66
|
+
sourcePartIndex,
|
|
67
|
+
filename: previous?.filename ?? params.filename,
|
|
68
|
+
mediaType: previous?.mediaType ?? params.mediaType,
|
|
69
|
+
state: sandboxState,
|
|
70
|
+
});
|
|
71
|
+
const sandboxFilePath = initialized.filePath;
|
|
72
|
+
let filePreview = previous?.filePreview ?? previous?.ctx?.filePreview ?? params.filePreview;
|
|
73
|
+
let schema = previous?.ctx?.schema ?? previous?.schema ?? params.schema ?? null;
|
|
74
|
+
const datasetResult = await datasetGetByIdStep({ runtime, datasetId });
|
|
75
|
+
if (datasetResult.ok && datasetResult.data.schema) {
|
|
95
76
|
schema = datasetResult.data.schema;
|
|
77
|
+
}
|
|
96
78
|
const ctx = {
|
|
97
79
|
datasetId,
|
|
98
|
-
fileId
|
|
99
|
-
instructions
|
|
100
|
-
sandboxConfig: {
|
|
80
|
+
fileId,
|
|
81
|
+
instructions,
|
|
82
|
+
sandboxConfig: {
|
|
83
|
+
filePath: sandboxFilePath,
|
|
84
|
+
outputPath: initialized.state.outputPath,
|
|
85
|
+
scriptsDir: initialized.state.scriptsDir,
|
|
86
|
+
manifestPath: initialized.state.manifestPath,
|
|
87
|
+
},
|
|
101
88
|
analysis: [],
|
|
102
89
|
schema,
|
|
103
90
|
plan: null,
|
|
@@ -109,16 +96,22 @@ function createFileParseStoryDefinition(params) {
|
|
|
109
96
|
return {
|
|
110
97
|
...previous,
|
|
111
98
|
datasetId,
|
|
112
|
-
fileId
|
|
113
|
-
instructions
|
|
99
|
+
fileId,
|
|
100
|
+
instructions,
|
|
114
101
|
sandboxId,
|
|
115
|
-
|
|
102
|
+
executionId,
|
|
103
|
+
sourceEventId,
|
|
104
|
+
sourcePartIndex,
|
|
105
|
+
filename: previous?.filename ?? params.filename,
|
|
106
|
+
mediaType: previous?.mediaType ?? params.mediaType,
|
|
107
|
+
sandboxState: initialized.state,
|
|
108
|
+
filePreview,
|
|
116
109
|
ctx,
|
|
117
110
|
};
|
|
118
111
|
})
|
|
119
112
|
.narrative(async (stored) => {
|
|
120
113
|
const ctx = stored?.content?.ctx;
|
|
121
|
-
const base = (
|
|
114
|
+
const base = await buildFileDatasetPromptStep({ context: ctx });
|
|
122
115
|
const userInstructions = String(ctx?.instructions ?? "").trim();
|
|
123
116
|
if (!userInstructions)
|
|
124
117
|
return base;
|
|
@@ -131,90 +124,143 @@ function createFileParseStoryDefinition(params) {
|
|
|
131
124
|
base,
|
|
132
125
|
].join("\n");
|
|
133
126
|
})
|
|
134
|
-
.actions(async (_stored,
|
|
127
|
+
.actions(async (_stored, _env, runtime) => {
|
|
135
128
|
const existingSchema = _stored?.content?.ctx?.schema?.schema;
|
|
129
|
+
const datasetId = _stored?.content?.datasetId ?? fallbackDatasetId ?? "";
|
|
130
|
+
const fileId = _stored?.content?.fileId ?? params.fileId ?? "";
|
|
131
|
+
const sandboxId = _stored?.content?.sandboxId ?? params.sandboxId ?? "";
|
|
132
|
+
const outputPath = _stored?.content?.ctx?.sandboxConfig?.outputPath;
|
|
133
|
+
if (!datasetId)
|
|
134
|
+
throw new Error("dataset_id_required");
|
|
135
|
+
if (!fileId)
|
|
136
|
+
throw new Error("dataset_file_id_required");
|
|
137
|
+
if (!sandboxId)
|
|
138
|
+
throw new Error("dataset_sandbox_required");
|
|
136
139
|
const actions = {
|
|
137
|
-
executeCommand:
|
|
140
|
+
executeCommand: createExecuteCommandTool({
|
|
138
141
|
datasetId,
|
|
139
|
-
sandboxId
|
|
140
|
-
|
|
142
|
+
sandboxId,
|
|
143
|
+
runtime,
|
|
141
144
|
}),
|
|
142
|
-
completeDataset:
|
|
145
|
+
completeDataset: createCompleteDatasetTool({
|
|
143
146
|
datasetId,
|
|
144
|
-
sandboxId
|
|
145
|
-
|
|
147
|
+
sandboxId,
|
|
148
|
+
runtime,
|
|
149
|
+
outputPath,
|
|
146
150
|
}),
|
|
147
|
-
clearDataset:
|
|
151
|
+
clearDataset: createClearDatasetTool({
|
|
148
152
|
datasetId,
|
|
149
|
-
sandboxId
|
|
150
|
-
|
|
153
|
+
sandboxId,
|
|
154
|
+
runtime,
|
|
155
|
+
}),
|
|
156
|
+
defineNotation: createDefineNotationTool({
|
|
157
|
+
datasetId,
|
|
158
|
+
runtime,
|
|
151
159
|
}),
|
|
152
160
|
};
|
|
153
161
|
if (!existingSchema) {
|
|
154
|
-
actions.generateSchema =
|
|
162
|
+
actions.generateSchema = createGenerateSchemaTool({
|
|
155
163
|
datasetId,
|
|
156
|
-
fileId
|
|
157
|
-
|
|
164
|
+
fileId,
|
|
165
|
+
runtime,
|
|
158
166
|
});
|
|
159
167
|
}
|
|
160
168
|
return actions;
|
|
161
169
|
})
|
|
162
170
|
.shouldContinue(({ reactionEvent }) => {
|
|
163
|
-
|
|
171
|
+
const fatalFailure = getDatasetFatalFailure(reactionEvent);
|
|
172
|
+
if (fatalFailure) {
|
|
173
|
+
throw new Error(fatalFailure);
|
|
174
|
+
}
|
|
175
|
+
return !didCompleteDatasetSucceed(reactionEvent);
|
|
164
176
|
});
|
|
165
177
|
if (params.reactor) {
|
|
166
|
-
|
|
178
|
+
contextBuilder = contextBuilder.reactor(params.reactor);
|
|
167
179
|
}
|
|
168
180
|
else {
|
|
169
|
-
|
|
181
|
+
contextBuilder = contextBuilder.model(model);
|
|
170
182
|
}
|
|
171
|
-
const
|
|
172
|
-
return { datasetId,
|
|
183
|
+
const context = contextBuilder.build();
|
|
184
|
+
return { datasetId: fallbackDatasetId ?? "", context };
|
|
173
185
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
*
|
|
177
|
-
* Usage:
|
|
178
|
-
* const { datasetId } = await createFileParseStory(fileId, { instructions }).parse(env)
|
|
179
|
-
*
|
|
180
|
-
* - No `db` is accepted/stored (workflow-safe).
|
|
181
|
-
* - All I/O happens in `"use step"` functions via Ekairos runtime (`getContextRuntime(env).db`).
|
|
182
|
-
* - `parse()` is the entrypoint; it calls `story.react(...)` internally.
|
|
183
|
-
*/
|
|
184
|
-
function createFileParseStory(fileId, opts) {
|
|
186
|
+
export function createFileParseContext(fileId, opts) {
|
|
187
|
+
const datasetId = opts?.datasetId ?? createDatasetId();
|
|
185
188
|
const params = {
|
|
186
189
|
fileId,
|
|
187
190
|
instructions: opts?.instructions,
|
|
188
191
|
sandboxId: opts?.sandboxId,
|
|
189
|
-
datasetId
|
|
192
|
+
datasetId,
|
|
190
193
|
model: opts?.model,
|
|
191
194
|
reactor: opts?.reactor,
|
|
195
|
+
sandboxState: opts?.sandboxState,
|
|
196
|
+
filePreview: opts?.filePreview,
|
|
197
|
+
schema: opts?.schema,
|
|
198
|
+
filename: opts?.filename,
|
|
199
|
+
mediaType: opts?.mediaType,
|
|
192
200
|
};
|
|
193
|
-
const {
|
|
201
|
+
const { context } = createFileParseContextDefinition(params);
|
|
194
202
|
return {
|
|
195
203
|
datasetId,
|
|
196
|
-
async parse(
|
|
204
|
+
async parse(runtime, options = {}) {
|
|
197
205
|
const triggerEvent = {
|
|
198
|
-
id: (
|
|
199
|
-
type:
|
|
200
|
-
channel:
|
|
206
|
+
id: createDatasetId(),
|
|
207
|
+
type: INPUT_TEXT_ITEM_TYPE,
|
|
208
|
+
channel: WEB_CHANNEL,
|
|
201
209
|
createdAt: new Date().toISOString(),
|
|
202
210
|
content: {
|
|
203
|
-
parts: [
|
|
211
|
+
parts: [
|
|
212
|
+
{
|
|
213
|
+
type: "text",
|
|
214
|
+
text: options.prompt ?? "generate a dataset for this file",
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
type: "file",
|
|
218
|
+
fileId,
|
|
219
|
+
filename: opts?.filename ?? "resource-file",
|
|
220
|
+
mediaType: opts?.mediaType ?? "application/octet-stream",
|
|
221
|
+
},
|
|
222
|
+
],
|
|
204
223
|
},
|
|
205
224
|
};
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
225
|
+
params.sourceEventId = triggerEvent.id;
|
|
226
|
+
params.sourcePartIndex = 1;
|
|
227
|
+
params.filename = opts?.filename ?? "resource-file";
|
|
228
|
+
params.mediaType = opts?.mediaType ?? "application/octet-stream";
|
|
229
|
+
const shell = await context.react(triggerEvent, {
|
|
230
|
+
runtime: runtime,
|
|
209
231
|
context: { key: `dataset:${datasetId}` },
|
|
210
|
-
durable: false,
|
|
211
|
-
options: {
|
|
232
|
+
durable: options.durable ?? false,
|
|
233
|
+
options: {
|
|
234
|
+
preventClose: true,
|
|
235
|
+
sendFinish: false,
|
|
236
|
+
maxIterations: 20,
|
|
237
|
+
maxModelSteps: 5,
|
|
238
|
+
},
|
|
239
|
+
__initialContent: {
|
|
240
|
+
...(options.initialContent ?? {}),
|
|
241
|
+
datasetId,
|
|
242
|
+
fileId,
|
|
243
|
+
sourceEventId: triggerEvent.id,
|
|
244
|
+
sourcePartIndex: 1,
|
|
245
|
+
filename: opts?.filename ?? "resource-file",
|
|
246
|
+
mediaType: opts?.mediaType ?? "application/octet-stream",
|
|
247
|
+
instructions: opts?.instructions ?? "",
|
|
248
|
+
sandboxId: opts?.sandboxId ?? "",
|
|
249
|
+
sandboxState: opts?.sandboxState ?? { initialized: false, filePath: "" },
|
|
250
|
+
filePreview: opts?.filePreview,
|
|
251
|
+
schema: opts?.schema,
|
|
252
|
+
},
|
|
212
253
|
});
|
|
213
|
-
await shell.run;
|
|
254
|
+
await awaitContextRun(shell.run);
|
|
214
255
|
return { datasetId };
|
|
215
256
|
},
|
|
216
|
-
|
|
217
|
-
story,
|
|
257
|
+
context,
|
|
218
258
|
};
|
|
219
259
|
}
|
|
220
|
-
|
|
260
|
+
export function registerFileParseContext(opts) {
|
|
261
|
+
createFileParseContextDefinition({
|
|
262
|
+
model: opts?.model,
|
|
263
|
+
reactor: opts?.reactor,
|
|
264
|
+
}).context;
|
|
265
|
+
}
|
|
266
|
+
registerFileParseContext();
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FileParseContext, SandboxState } from "./file-dataset.types.js";
|
|
2
|
+
import type { FilePreviewContext } from "./filepreview.types.js";
|
|
3
|
+
export declare function initializeFileParseSandboxStep(params: {
|
|
4
|
+
runtime: any;
|
|
5
|
+
sandboxId: string;
|
|
6
|
+
contextId: string;
|
|
7
|
+
executionId: string;
|
|
8
|
+
datasetId: string;
|
|
9
|
+
fileId: string;
|
|
10
|
+
sourceEventId?: string;
|
|
11
|
+
sourcePartIndex?: number;
|
|
12
|
+
filename?: string;
|
|
13
|
+
mediaType?: string;
|
|
14
|
+
state: SandboxState;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
filePath: string;
|
|
17
|
+
state: SandboxState;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function generateFileParsePreviewStep(params: {
|
|
20
|
+
runtime: any;
|
|
21
|
+
sandboxId: string;
|
|
22
|
+
sandboxFilePath: string;
|
|
23
|
+
datasetId: string;
|
|
24
|
+
}): Promise<FilePreviewContext>;
|
|
25
|
+
export declare function buildFileDatasetPromptStep(params: {
|
|
26
|
+
context: FileParseContext;
|
|
27
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DATASET_OUTPUT_FILE_NAME } from "../datasetFiles.js";
|
|
2
|
+
import { prepareContextExecutionWorkspaceStep } from "../contextWorkspace.js";
|
|
3
|
+
import { buildFileDatasetPrompt } from "./prompts.js";
|
|
4
|
+
import { generateFilePreview } from "./filepreview.js";
|
|
5
|
+
export async function initializeFileParseSandboxStep(params) {
|
|
6
|
+
"use step";
|
|
7
|
+
if (params.state.initialized) {
|
|
8
|
+
return { filePath: params.state.filePath, state: params.state };
|
|
9
|
+
}
|
|
10
|
+
console.log(`[FileParseContext ${params.datasetId}] Preparing context execution workspace...`);
|
|
11
|
+
const workspace = await prepareContextExecutionWorkspaceStep({
|
|
12
|
+
runtime: params.runtime,
|
|
13
|
+
sandboxId: params.sandboxId,
|
|
14
|
+
contextId: params.contextId,
|
|
15
|
+
executionId: params.executionId,
|
|
16
|
+
files: [
|
|
17
|
+
{
|
|
18
|
+
fileId: params.fileId,
|
|
19
|
+
filename: params.filename,
|
|
20
|
+
mediaType: params.mediaType,
|
|
21
|
+
sourceEventId: params.sourceEventId,
|
|
22
|
+
sourcePartIndex: params.sourcePartIndex,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
});
|
|
26
|
+
const sandboxFilePath = workspace.files[0]?.path ?? "";
|
|
27
|
+
if (!sandboxFilePath)
|
|
28
|
+
throw new Error("dataset_workspace_file_missing");
|
|
29
|
+
console.log(`[FileParseContext ${params.datasetId}] Context workspace created: ${workspace.root}`);
|
|
30
|
+
console.log(`[FileParseContext ${params.datasetId}] File saved: ${sandboxFilePath}`);
|
|
31
|
+
const state = {
|
|
32
|
+
initialized: true,
|
|
33
|
+
filePath: sandboxFilePath,
|
|
34
|
+
outputPath: `${workspace.outputDir}/${DATASET_OUTPUT_FILE_NAME}`,
|
|
35
|
+
scriptsDir: workspace.scriptsDir,
|
|
36
|
+
manifestPath: workspace.manifestPath,
|
|
37
|
+
};
|
|
38
|
+
return { filePath: sandboxFilePath, state };
|
|
39
|
+
}
|
|
40
|
+
export async function generateFileParsePreviewStep(params) {
|
|
41
|
+
"use step";
|
|
42
|
+
return await generateFilePreview(params.runtime, params.sandboxId, params.sandboxFilePath, params.datasetId);
|
|
43
|
+
}
|
|
44
|
+
export async function buildFileDatasetPromptStep(params) {
|
|
45
|
+
"use step";
|
|
46
|
+
return buildFileDatasetPrompt(params.context);
|
|
47
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ContextReactor } from "@ekairos/reactor/context";
|
|
2
|
+
import type { FilePreviewContext } from "./filepreview.types.js";
|
|
3
|
+
export type SandboxState = {
|
|
4
|
+
initialized: boolean;
|
|
5
|
+
filePath: string;
|
|
6
|
+
outputPath?: string;
|
|
7
|
+
scriptsDir?: string;
|
|
8
|
+
manifestPath?: string;
|
|
9
|
+
};
|
|
10
|
+
export type FileParseContext = {
|
|
11
|
+
datasetId: string;
|
|
12
|
+
fileId: string;
|
|
13
|
+
instructions: string;
|
|
14
|
+
sandboxConfig: {
|
|
15
|
+
filePath: string;
|
|
16
|
+
outputPath?: string;
|
|
17
|
+
scriptsDir?: string;
|
|
18
|
+
manifestPath?: string;
|
|
19
|
+
};
|
|
20
|
+
analysis: any[];
|
|
21
|
+
schema: any | null;
|
|
22
|
+
plan: any | null;
|
|
23
|
+
executionResult: any | null;
|
|
24
|
+
errors: string[];
|
|
25
|
+
iterationCount: number;
|
|
26
|
+
filePreview?: FilePreviewContext;
|
|
27
|
+
};
|
|
28
|
+
export type FileParseContextParams = {
|
|
29
|
+
fileId?: string;
|
|
30
|
+
instructions?: string;
|
|
31
|
+
sandboxId?: string;
|
|
32
|
+
datasetId?: string;
|
|
33
|
+
model?: string;
|
|
34
|
+
reactor?: ContextReactor<any, any>;
|
|
35
|
+
sandboxState?: SandboxState;
|
|
36
|
+
filePreview?: FilePreviewContext;
|
|
37
|
+
schema?: any | null;
|
|
38
|
+
sourceEventId?: string;
|
|
39
|
+
sourcePartIndex?: number;
|
|
40
|
+
filename?: string;
|
|
41
|
+
mediaType?: string;
|
|
42
|
+
};
|
|
43
|
+
export type FileParseRunOptions = {
|
|
44
|
+
prompt?: string;
|
|
45
|
+
durable?: boolean;
|
|
46
|
+
initialContent?: Record<string, any>;
|
|
47
|
+
};
|
|
48
|
+
export type FileParseContextBuilder<Env extends {
|
|
49
|
+
orgId: string;
|
|
50
|
+
}> = {
|
|
51
|
+
datasetId: string;
|
|
52
|
+
context: any;
|
|
53
|
+
};
|
|
54
|
+
export type DatasetResult = {
|
|
55
|
+
id: string;
|
|
56
|
+
status?: string;
|
|
57
|
+
title?: string;
|
|
58
|
+
schema?: any;
|
|
59
|
+
analysis?: any;
|
|
60
|
+
calculatedTotalRows?: number;
|
|
61
|
+
actualGeneratedRowCount?: number;
|
|
62
|
+
createdAt?: number;
|
|
63
|
+
updatedAt?: number;
|
|
64
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,40 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
metadata?: {
|
|
4
|
-
description: string;
|
|
5
|
-
script: string;
|
|
6
|
-
command: string;
|
|
7
|
-
stdout: string;
|
|
8
|
-
stderr: string;
|
|
9
|
-
};
|
|
10
|
-
head?: {
|
|
11
|
-
description: string;
|
|
12
|
-
script: string;
|
|
13
|
-
command: string;
|
|
14
|
-
stdout: string;
|
|
15
|
-
stderr: string;
|
|
16
|
-
};
|
|
17
|
-
tail?: {
|
|
18
|
-
description: string;
|
|
19
|
-
script: string;
|
|
20
|
-
command: string;
|
|
21
|
-
stdout: string;
|
|
22
|
-
stderr: string;
|
|
23
|
-
};
|
|
24
|
-
mid?: {
|
|
25
|
-
description: string;
|
|
26
|
-
script: string;
|
|
27
|
-
command: string;
|
|
28
|
-
stdout: string;
|
|
29
|
-
stderr: string;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
1
|
+
import type { FilePreviewContext } from "./filepreview.types.js";
|
|
2
|
+
export type { FilePreviewContext } from "./filepreview.types.js";
|
|
32
3
|
interface PreviewOptions {
|
|
33
4
|
headLines?: number;
|
|
34
5
|
tailLines?: number;
|
|
35
6
|
midLines?: number;
|
|
36
7
|
}
|
|
37
|
-
export declare function
|
|
38
|
-
export declare function
|
|
39
|
-
export
|
|
40
|
-
//# sourceMappingURL=filepreview.d.ts.map
|
|
8
|
+
export declare function getEmbeddedFilePreviewScriptBase64(scriptName: string): string;
|
|
9
|
+
export declare function ensurePreviewScriptsAvailable(_runtime: any, _sandboxId: string): Promise<void>;
|
|
10
|
+
export declare function generateFilePreview(runtime: any, sandboxId: string, sandboxFilePath: string, datasetId: string, options?: PreviewOptions): Promise<FilePreviewContext>;
|