-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
aws_sfn.ts
94 lines (89 loc) · 2.51 KB
/
aws_sfn.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import type { BaseLanguageModelInterface } from "@langchain/core/language_models/base";
import { Tool } from "@langchain/core/tools";
import {
SfnConfig,
StartExecutionAWSSfnTool,
DescribeExecutionAWSSfnTool,
SendTaskSuccessAWSSfnTool,
} from "../../tools/aws_sfn.js";
import { Toolkit } from "./base.js";
/**
* Interface for the arguments required to create an AWS Step Functions
* toolkit.
*/
export interface AWSSfnToolkitArgs {
name: string;
description: string;
stateMachineArn: string;
asl?: string;
llm?: BaseLanguageModelInterface;
}
/**
* Class representing a toolkit for interacting with AWS Step Functions.
* It initializes the AWS Step Functions tools and provides them as tools
* for the agent.
* @example
* ```typescript
*
* const toolkit = new AWSSfnToolkit({
* name: "onboard-new-client-workflow",
* description:
* "Onboard new client workflow. Can also be used to get status of any executing workflow or state machine.",
* stateMachineArn:
* "arn:aws:states:us-east-1:1234567890:stateMachine:my-state-machine",
* region: "<your Sfn's region>",
* accessKeyId: "<your access key id>",
* secretAccessKey: "<your secret access key>",
* });
*
*
* const result = await toolkit.invoke({
* input: "Onboard john doe (john@example.com) as a new client.",
* });
*
* ```
*/
export class AWSSfnToolkit extends Toolkit {
tools: Tool[];
stateMachineArn: string;
asl: string;
constructor(args: AWSSfnToolkitArgs & SfnConfig) {
super();
this.stateMachineArn = args.stateMachineArn;
if (args.asl) {
this.asl = args.asl;
}
this.tools = [
new StartExecutionAWSSfnTool({
name: args.name,
description: StartExecutionAWSSfnTool.formatDescription(
args.name,
args.description
),
stateMachineArn: args.stateMachineArn,
}),
new DescribeExecutionAWSSfnTool(
Object.assign(
args.region ? { region: args.region } : {},
args.accessKeyId && args.secretAccessKey
? {
accessKeyId: args.accessKeyId,
secretAccessKey: args.secretAccessKey,
}
: {}
)
),
new SendTaskSuccessAWSSfnTool(
Object.assign(
args.region ? { region: args.region } : {},
args.accessKeyId && args.secretAccessKey
? {
accessKeyId: args.accessKeyId,
secretAccessKey: args.secretAccessKey,
}
: {}
)
),
];
}
}