UNPKG

@langchain/community

Version:
1 lines 8.94 kB
{"version":3,"file":"aws_sfn.cjs","names":["Tool","Client","Invoker","Describer","TaskSuccessSender"],"sources":["../../src/tools/aws_sfn.ts"],"sourcesContent":["import {\n SFNClient as Client,\n StartExecutionCommand as Invoker,\n DescribeExecutionCommand as Describer,\n SendTaskSuccessCommand as TaskSuccessSender,\n} from \"@aws-sdk/client-sfn\";\n\nimport { Tool, ToolParams } from \"@langchain/core/tools\";\n\n/**\n * Interface for AWS Step Functions configuration.\n */\nexport interface SfnConfig {\n stateMachineArn: string;\n region?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n}\n\n/**\n * Interface for AWS Step Functions client constructor arguments.\n */\ninterface SfnClientConstructorArgs {\n region?: string;\n credentials?: {\n accessKeyId: string;\n secretAccessKey: string;\n };\n}\n\n/**\n * Class for starting the execution of an AWS Step Function.\n */\nexport class StartExecutionAWSSfnTool extends Tool {\n static lc_name() {\n return \"StartExecutionAWSSfnTool\";\n }\n\n private sfnConfig: SfnConfig;\n\n public name: string;\n\n public description: string;\n\n constructor({\n name,\n description,\n ...rest\n }: SfnConfig & { name: string; description: string }) {\n super();\n this.name = name;\n this.description = description;\n this.sfnConfig = rest;\n }\n\n /**\n * Generates a formatted description for the StartExecutionAWSSfnTool.\n * @param name Name of the state machine.\n * @param description Description of the state machine.\n * @returns A formatted description string.\n */\n static formatDescription(name: string, description: string): string {\n return `Use to start executing the ${name} state machine. Use to run ${name} workflows. Whenever you need to start (or execute) an asynchronous workflow (or state machine) about ${description} you should ALWAYS use this. Input should be a valid JSON string.`;\n }\n\n /** @ignore */\n async _call(input: string): Promise<string> {\n const clientConstructorArgs: SfnClientConstructorArgs =\n getClientConstructorArgs(this.sfnConfig);\n const sfnClient = new Client(clientConstructorArgs);\n\n return new Promise((resolve) => {\n let payload;\n try {\n payload = JSON.parse(input);\n } catch (e) {\n console.error(\"Error starting state machine execution:\", e);\n resolve(\"failed to complete request\");\n }\n\n const command = new Invoker({\n stateMachineArn: this.sfnConfig.stateMachineArn,\n input: JSON.stringify(payload),\n });\n\n sfnClient\n .send(command)\n .then((response) =>\n resolve(\n response.executionArn ? response.executionArn : \"request completed.\"\n )\n )\n .catch((error: Error) => {\n console.error(\"Error starting state machine execution:\", error);\n resolve(\"failed to complete request\");\n });\n });\n }\n}\n\n/**\n * Class for checking the status of an AWS Step Function execution.\n */\nexport class DescribeExecutionAWSSfnTool extends Tool {\n static lc_name() {\n return \"DescribeExecutionAWSSfnTool\";\n }\n\n name = \"describe-execution-aws-sfn\";\n\n description =\n \"This tool should ALWAYS be used for checking the status of any AWS Step Function execution (aka. state machine execution). Input to this tool is a properly formatted AWS Step Function Execution ARN (executionArn). The output is a stringified JSON object containing the executionArn, name, status, startDate, stopDate, input, output, error, and cause of the execution.\";\n\n sfnConfig: Omit<SfnConfig, \"stateMachineArn\">;\n\n constructor(config: Omit<SfnConfig, \"stateMachineArn\"> & ToolParams) {\n super(config);\n this.sfnConfig = config;\n }\n\n /** @ignore */\n async _call(input: string) {\n const clientConstructorArgs: SfnClientConstructorArgs =\n getClientConstructorArgs(this.sfnConfig);\n const sfnClient = new Client(clientConstructorArgs);\n\n const command = new Describer({\n executionArn: input,\n });\n return await sfnClient\n .send(command)\n .then((response) =>\n response.executionArn\n ? JSON.stringify({\n executionArn: response.executionArn,\n name: response.name,\n status: response.status,\n startDate: response.startDate,\n stopDate: response.stopDate,\n input: response.input,\n output: response.output,\n error: response.error,\n cause: response.cause,\n })\n : \"{}\"\n )\n .catch((error: Error) => {\n console.error(\"Error describing state machine execution:\", error);\n return \"failed to complete request\";\n });\n }\n}\n\n/**\n * Class for sending a task success signal to an AWS Step Function\n * execution.\n */\nexport class SendTaskSuccessAWSSfnTool extends Tool {\n static lc_name() {\n return \"SendTaskSuccessAWSSfnTool\";\n }\n\n name = \"send-task-success-aws-sfn\";\n\n description =\n \"This tool should ALWAYS be used for sending task success to an AWS Step Function execution (aka. statemachine exeuction). Input to this tool is a stringify JSON object containing the taskToken and output.\";\n\n sfnConfig: Omit<SfnConfig, \"stateMachineArn\">;\n\n constructor(config: Omit<SfnConfig, \"stateMachineArn\"> & ToolParams) {\n super(config);\n this.sfnConfig = config;\n }\n\n /** @ignore */\n async _call(input: string) {\n const clientConstructorArgs: SfnClientConstructorArgs =\n getClientConstructorArgs(this.sfnConfig);\n const sfnClient = new Client(clientConstructorArgs);\n\n let payload;\n try {\n payload = JSON.parse(input);\n } catch (e) {\n console.error(\"Error starting state machine execution:\", e);\n return \"failed to complete request\";\n }\n\n const command = new TaskSuccessSender({\n taskToken: payload.taskToken,\n output: JSON.stringify(payload.output),\n });\n\n return await sfnClient\n .send(command)\n .then(() => \"request completed.\")\n .catch((error: Error) => {\n console.error(\n \"Error sending task success to state machine execution:\",\n error\n );\n return \"failed to complete request\";\n });\n }\n}\n\n/**\n * Helper function to construct the AWS SFN client.\n */\nfunction getClientConstructorArgs(config: Partial<SfnConfig>) {\n const clientConstructorArgs: SfnClientConstructorArgs = {};\n\n if (config.region) {\n clientConstructorArgs.region = config.region;\n }\n\n if (config.accessKeyId && config.secretAccessKey) {\n clientConstructorArgs.credentials = {\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n };\n }\n\n return clientConstructorArgs;\n}\n"],"mappings":";;;;;;;;;;;;;AAiCA,IAAa,2BAAb,cAA8CA,sBAAAA,KAAK;CACjD,OAAO,UAAU;AACf,SAAO;;CAGT;CAEA;CAEA;CAEA,YAAY,EACV,MACA,aACA,GAAG,QACiD;AACpD,SAAO;AACP,OAAK,OAAO;AACZ,OAAK,cAAc;AACnB,OAAK,YAAY;;;;;;;;CASnB,OAAO,kBAAkB,MAAc,aAA6B;AAClE,SAAO,8BAA8B,KAAK,6BAA6B,KAAK,wGAAwG,YAAY;;;CAIlM,MAAM,MAAM,OAAgC;EAG1C,MAAM,YAAY,IAAIC,oBAAAA,UADpB,yBAAyB,KAAK,UAAU,CACS;AAEnD,SAAO,IAAI,SAAS,YAAY;GAC9B,IAAI;AACJ,OAAI;AACF,cAAU,KAAK,MAAM,MAAM;YACpB,GAAG;AACV,YAAQ,MAAM,2CAA2C,EAAE;AAC3D,YAAQ,6BAA6B;;GAGvC,MAAM,UAAU,IAAIC,oBAAAA,sBAAQ;IAC1B,iBAAiB,KAAK,UAAU;IAChC,OAAO,KAAK,UAAU,QAAQ;IAC/B,CAAC;AAEF,aACG,KAAK,QAAQ,CACb,MAAM,aACL,QACE,SAAS,eAAe,SAAS,eAAe,qBACjD,CACF,CACA,OAAO,UAAiB;AACvB,YAAQ,MAAM,2CAA2C,MAAM;AAC/D,YAAQ,6BAA6B;KACrC;IACJ;;;;;;AAON,IAAa,8BAAb,cAAiDF,sBAAAA,KAAK;CACpD,OAAO,UAAU;AACf,SAAO;;CAGT,OAAO;CAEP,cACE;CAEF;CAEA,YAAY,QAAyD;AACnE,QAAM,OAAO;AACb,OAAK,YAAY;;;CAInB,MAAM,MAAM,OAAe;EAGzB,MAAM,YAAY,IAAIC,oBAAAA,UADpB,yBAAyB,KAAK,UAAU,CACS;EAEnD,MAAM,UAAU,IAAIE,oBAAAA,yBAAU,EAC5B,cAAc,OACf,CAAC;AACF,SAAO,MAAM,UACV,KAAK,QAAQ,CACb,MAAM,aACL,SAAS,eACL,KAAK,UAAU;GACb,cAAc,SAAS;GACvB,MAAM,SAAS;GACf,QAAQ,SAAS;GACjB,WAAW,SAAS;GACpB,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,OAAO,SAAS;GAChB,OAAO,SAAS;GACjB,CAAC,GACF,KACL,CACA,OAAO,UAAiB;AACvB,WAAQ,MAAM,6CAA6C,MAAM;AACjE,UAAO;IACP;;;;;;;AAQR,IAAa,4BAAb,cAA+CH,sBAAAA,KAAK;CAClD,OAAO,UAAU;AACf,SAAO;;CAGT,OAAO;CAEP,cACE;CAEF;CAEA,YAAY,QAAyD;AACnE,QAAM,OAAO;AACb,OAAK,YAAY;;;CAInB,MAAM,MAAM,OAAe;EAGzB,MAAM,YAAY,IAAIC,oBAAAA,UADpB,yBAAyB,KAAK,UAAU,CACS;EAEnD,IAAI;AACJ,MAAI;AACF,aAAU,KAAK,MAAM,MAAM;WACpB,GAAG;AACV,WAAQ,MAAM,2CAA2C,EAAE;AAC3D,UAAO;;EAGT,MAAM,UAAU,IAAIG,oBAAAA,uBAAkB;GACpC,WAAW,QAAQ;GACnB,QAAQ,KAAK,UAAU,QAAQ,OAAO;GACvC,CAAC;AAEF,SAAO,MAAM,UACV,KAAK,QAAQ,CACb,WAAW,qBAAqB,CAChC,OAAO,UAAiB;AACvB,WAAQ,MACN,0DACA,MACD;AACD,UAAO;IACP;;;;;;AAOR,SAAS,yBAAyB,QAA4B;CAC5D,MAAM,wBAAkD,EAAE;AAE1D,KAAI,OAAO,OACT,uBAAsB,SAAS,OAAO;AAGxC,KAAI,OAAO,eAAe,OAAO,gBAC/B,uBAAsB,cAAc;EAClC,aAAa,OAAO;EACpB,iBAAiB,OAAO;EACzB;AAGH,QAAO"}