Spaces:
Runtime error
Runtime error
| """Util that calls Lambda.""" | |
| import json | |
| from typing import Any, Dict, Optional | |
| from langchain_core.pydantic_v1 import BaseModel, Extra, root_validator | |
| class LambdaWrapper(BaseModel): | |
| """Wrapper for AWS Lambda SDK. | |
| To use, you should have the ``boto3`` package installed | |
| and a lambda functions built from the AWS Console or | |
| CLI. Set up your AWS credentials with ``aws configure`` | |
| Example: | |
| .. code-block:: bash | |
| pip install boto3 | |
| aws configure | |
| """ | |
| lambda_client: Any #: :meta private: | |
| """The configured boto3 client""" | |
| function_name: Optional[str] = None | |
| """The name of your lambda function""" | |
| awslambda_tool_name: Optional[str] = None | |
| """If passing to an agent as a tool, the tool name""" | |
| awslambda_tool_description: Optional[str] = None | |
| """If passing to an agent as a tool, the description""" | |
| class Config: | |
| """Configuration for this pydantic object.""" | |
| extra = Extra.forbid | |
| def validate_environment(cls, values: Dict) -> Dict: | |
| """Validate that python package exists in environment.""" | |
| try: | |
| import boto3 | |
| except ImportError: | |
| raise ImportError( | |
| "boto3 is not installed. Please install it with `pip install boto3`" | |
| ) | |
| values["lambda_client"] = boto3.client("lambda") | |
| values["function_name"] = values["function_name"] | |
| return values | |
| def run(self, query: str) -> str: | |
| """ | |
| Invokes the lambda function and returns the | |
| result. | |
| Args: | |
| query: an input to passed to the lambda | |
| function as the ``body`` of a JSON | |
| object. | |
| """ # noqa: E501 | |
| res = self.lambda_client.invoke( | |
| FunctionName=self.function_name, | |
| InvocationType="RequestResponse", | |
| Payload=json.dumps({"body": query}), | |
| ) | |
| try: | |
| payload_stream = res["Payload"] | |
| payload_string = payload_stream.read().decode("utf-8") | |
| answer = json.loads(payload_string)["body"] | |
| except StopIteration: | |
| return "Failed to parse response from Lambda" | |
| if answer is None or answer == "": | |
| # We don't want to return the assumption alone if answer is empty | |
| return "Request failed." | |
| else: | |
| return f"Result: {answer}" | |