@loopstack/accessing-tool-results-example-workflow 0.23.0 → 0.23.2
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/README.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Accessing Tool Results Example
|
|
3
|
+
description: Example workflow showing how to store and access data across workflow transitions using typed workflow state
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# @loopstack/accessing-tool-results-example-workflow
|
|
2
7
|
|
|
3
8
|
> A module for the [Loopstack AI](https://loopstack.ai) automation framework.
|
|
@@ -19,7 +24,28 @@ This example is useful for developers learning to build data-driven workflows th
|
|
|
19
24
|
|
|
20
25
|
## Installation
|
|
21
26
|
|
|
22
|
-
|
|
27
|
+
```bash
|
|
28
|
+
npm install @loopstack/accessing-tool-results-example-workflow
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Then register the module in your app:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import {
|
|
35
|
+
ToolResultsExampleModule,
|
|
36
|
+
WorkflowToolResultsWorkflow,
|
|
37
|
+
} from '@loopstack/accessing-tool-results-example-workflow';
|
|
38
|
+
import { StudioApp } from '@loopstack/common';
|
|
39
|
+
|
|
40
|
+
@StudioApp({
|
|
41
|
+
title: 'Tool Results Example',
|
|
42
|
+
workflows: [WorkflowToolResultsWorkflow],
|
|
43
|
+
})
|
|
44
|
+
@Module({
|
|
45
|
+
imports: [ToolResultsExampleModule],
|
|
46
|
+
})
|
|
47
|
+
export class MyAppModule {}
|
|
48
|
+
```
|
|
23
49
|
|
|
24
50
|
## How It Works
|
|
25
51
|
|
|
@@ -57,7 +83,7 @@ async createSomeData(
|
|
|
57
83
|
): Promise<ToolResultsState> {
|
|
58
84
|
await this.documentStore.save(MessageDocument, {
|
|
59
85
|
role: 'assistant',
|
|
60
|
-
|
|
86
|
+
text: `Stored in initial transition: Hello World.`,
|
|
61
87
|
});
|
|
62
88
|
return { ...state, storedMessage: 'Hello World.' };
|
|
63
89
|
}
|
|
@@ -74,7 +100,7 @@ In a subsequent transition, read values from the `state` parameter:
|
|
|
74
100
|
async accessData(ctx: WorkflowContext, state: ToolResultsState): Promise<unknown> {
|
|
75
101
|
await this.documentStore.save(MessageDocument, {
|
|
76
102
|
role: 'assistant',
|
|
77
|
-
|
|
103
|
+
text: `Accessed from previous transition: ${state.storedMessage}`,
|
|
78
104
|
});
|
|
79
105
|
return {};
|
|
80
106
|
}
|
|
@@ -107,7 +133,7 @@ export class WorkflowToolResultsWorkflow extends BaseWorkflow<Record<string, unk
|
|
|
107
133
|
): Promise<ToolResultsState> {
|
|
108
134
|
await this.documentStore.save(MessageDocument, {
|
|
109
135
|
role: 'assistant',
|
|
110
|
-
|
|
136
|
+
text: `Stored in initial transition: Hello World.`,
|
|
111
137
|
});
|
|
112
138
|
return { ...state, storedMessage: 'Hello World.' };
|
|
113
139
|
}
|
|
@@ -116,7 +142,7 @@ export class WorkflowToolResultsWorkflow extends BaseWorkflow<Record<string, unk
|
|
|
116
142
|
async accessData(ctx: WorkflowContext, state: ToolResultsState): Promise<unknown> {
|
|
117
143
|
await this.documentStore.save(MessageDocument, {
|
|
118
144
|
role: 'assistant',
|
|
119
|
-
|
|
145
|
+
text: `Accessed from previous transition: ${state.storedMessage}`,
|
|
120
146
|
});
|
|
121
147
|
return {};
|
|
122
148
|
}
|
|
@@ -15,14 +15,14 @@ let WorkflowToolResultsWorkflow = class WorkflowToolResultsWorkflow extends comm
|
|
|
15
15
|
async createSomeData(state) {
|
|
16
16
|
await this.documentStore.save(common_1.MessageDocument, {
|
|
17
17
|
role: 'assistant',
|
|
18
|
-
|
|
18
|
+
text: `Stored in initial transition: Hello World.`,
|
|
19
19
|
});
|
|
20
20
|
return { ...state, storedMessage: 'Hello World.' };
|
|
21
21
|
}
|
|
22
22
|
async accessData(state) {
|
|
23
23
|
await this.documentStore.save(common_1.MessageDocument, {
|
|
24
24
|
role: 'assistant',
|
|
25
|
-
|
|
25
|
+
text: `Accessed from previous transition: ${state.storedMessage}`,
|
|
26
26
|
});
|
|
27
27
|
return {};
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tool-results.workflow.js","sourceRoot":"","sources":["../src/workflow-tool-results.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAwF;AASjF,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,qBAAuD;IAEhG,AAAN,KAAK,CAAC,cAAc,CAAC,KAAuB;QAC1C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,
|
|
1
|
+
{"version":3,"file":"workflow-tool-results.workflow.js","sourceRoot":"","sources":["../src/workflow-tool-results.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAwF;AASjF,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,qBAAuD;IAEhG,AAAN,KAAK,CAAC,cAAc,CAAC,KAAuB;QAC1C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,4CAA4C;SACnD,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;IACrD,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAC,KAAuB;QACtC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,sCAAsC,KAAK,CAAC,aAAa,EAAE;SAClE,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;AAlBY,kEAA2B;AAEhC;IADL,IAAA,mBAAU,EAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC;;;;iEAOlC;AAGK;IADL,IAAA,mBAAU,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;;;;6DAO/C;sCAjBU,2BAA2B;IAHvC,IAAA,iBAAQ,EAAC;QACR,KAAK,EAAE,sBAAsB;KAC9B,CAAC;GACW,2BAA2B,CAkBvC"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"tool",
|
|
11
11
|
"workflow"
|
|
12
12
|
],
|
|
13
|
-
"version": "0.23.
|
|
13
|
+
"version": "0.23.2",
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"author": {
|
|
16
16
|
"name": "Jakob Klippel",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"watch": "nest build --watch"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@loopstack/common": "^0.
|
|
34
|
+
"@loopstack/common": "^0.34.0",
|
|
35
35
|
"@nestjs/common": "^11.1.19",
|
|
36
36
|
"zod": "^4.3.6"
|
|
37
37
|
},
|
|
@@ -37,7 +37,7 @@ describe('WorkflowToolResultsWorkflow', () => {
|
|
|
37
37
|
documentName: 'message',
|
|
38
38
|
content: expect.objectContaining({
|
|
39
39
|
role: 'assistant',
|
|
40
|
-
|
|
40
|
+
text: 'Stored in initial transition: Hello World.',
|
|
41
41
|
}),
|
|
42
42
|
}),
|
|
43
43
|
]),
|
|
@@ -56,7 +56,7 @@ describe('WorkflowToolResultsWorkflow', () => {
|
|
|
56
56
|
documentName: 'message',
|
|
57
57
|
content: expect.objectContaining({
|
|
58
58
|
role: 'assistant',
|
|
59
|
-
|
|
59
|
+
text: 'Accessed from previous transition: Hello World.',
|
|
60
60
|
}),
|
|
61
61
|
}),
|
|
62
62
|
]),
|
|
@@ -12,7 +12,7 @@ export class WorkflowToolResultsWorkflow extends BaseWorkflow<Record<string, unk
|
|
|
12
12
|
async createSomeData(state: ToolResultsState): Promise<ToolResultsState> {
|
|
13
13
|
await this.documentStore.save(MessageDocument, {
|
|
14
14
|
role: 'assistant',
|
|
15
|
-
|
|
15
|
+
text: `Stored in initial transition: Hello World.`,
|
|
16
16
|
});
|
|
17
17
|
return { ...state, storedMessage: 'Hello World.' };
|
|
18
18
|
}
|
|
@@ -21,7 +21,7 @@ export class WorkflowToolResultsWorkflow extends BaseWorkflow<Record<string, unk
|
|
|
21
21
|
async accessData(state: ToolResultsState): Promise<unknown> {
|
|
22
22
|
await this.documentStore.save(MessageDocument, {
|
|
23
23
|
role: 'assistant',
|
|
24
|
-
|
|
24
|
+
text: `Accessed from previous transition: ${state.storedMessage}`,
|
|
25
25
|
});
|
|
26
26
|
return {};
|
|
27
27
|
}
|