@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 9.3 kB
Source Map (JSON)
{"version":3,"file":"aws_sfn.cjs","names":["Tool","name: string","description: string","input: string","clientConstructorArgs: SfnClientConstructorArgs","Client","Invoker","error: Error","config: Omit<SfnConfig, \"stateMachineArn\"> & ToolParams","Describer","TaskSuccessSender","config: Partial<SfnConfig>"],"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":"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"}