Spaces:
Running
Running
from langflow.base.models.aws_constants import AWS_REGIONS, AWS_MODEL_IDs | |
from langflow.base.models.model import LCModelComponent | |
from langflow.field_typing import LanguageModel | |
from langflow.inputs import MessageTextInput, SecretStrInput | |
from langflow.inputs.inputs import HandleInput | |
from langflow.io import DictInput, DropdownInput | |
class AmazonBedrockComponent(LCModelComponent): | |
display_name: str = "Amazon Bedrock" | |
description: str = "Generate text using Amazon Bedrock LLMs." | |
icon = "Amazon" | |
name = "AmazonBedrockModel" | |
inputs = [ | |
*LCModelComponent._base_inputs, | |
DropdownInput( | |
name="model_id", | |
display_name="Model ID", | |
options=AWS_MODEL_IDs, | |
value="anthropic.claude-3-haiku-20240307-v1:0", | |
info="List of available model IDs to choose from.", | |
), | |
SecretStrInput( | |
name="aws_access_key_id", | |
display_name="AWS Access Key ID", | |
info="The access key for your AWS account." | |
"Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.", | |
value="AWS_ACCESS_KEY_ID", | |
), | |
SecretStrInput( | |
name="aws_secret_access_key", | |
display_name="AWS Secret Access Key", | |
info="The secret key for your AWS account. " | |
"Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.", | |
value="AWS_SECRET_ACCESS_KEY", | |
), | |
SecretStrInput( | |
name="aws_session_token", | |
display_name="AWS Session Token", | |
advanced=False, | |
info="The session key for your AWS account. " | |
"Only needed for temporary credentials. " | |
"Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.", | |
load_from_db=False, | |
), | |
SecretStrInput( | |
name="credentials_profile_name", | |
display_name="Credentials Profile Name", | |
advanced=True, | |
info="The name of the profile to use from your " | |
"~/.aws/credentials file. " | |
"If not provided, the default profile will be used.", | |
load_from_db=False, | |
), | |
DropdownInput( | |
name="region_name", | |
display_name="Region Name", | |
value="us-east-1", | |
options=AWS_REGIONS, | |
info="The AWS region where your Bedrock resources are located.", | |
), | |
DictInput( | |
name="model_kwargs", | |
display_name="Model Kwargs", | |
advanced=True, | |
is_list=True, | |
info="Additional keyword arguments to pass to the model.", | |
), | |
MessageTextInput( | |
name="endpoint_url", | |
display_name="Endpoint URL", | |
advanced=True, | |
info="The URL of the Bedrock endpoint to use.", | |
), | |
HandleInput( | |
name="output_parser", | |
display_name="Output Parser", | |
info="The parser to use to parse the output of the model", | |
advanced=True, | |
input_types=["OutputParser"], | |
), | |
] | |
def build_model(self) -> LanguageModel: # type: ignore[type-var] | |
try: | |
from langchain_aws import ChatBedrock | |
except ImportError as e: | |
msg = "langchain_aws is not installed. Please install it with `pip install langchain_aws`." | |
raise ImportError(msg) from e | |
try: | |
import boto3 | |
except ImportError as e: | |
msg = "boto3 is not installed. Please install it with `pip install boto3`." | |
raise ImportError(msg) from e | |
if self.aws_access_key_id or self.aws_secret_access_key: | |
try: | |
session = boto3.Session( | |
aws_access_key_id=self.aws_access_key_id, | |
aws_secret_access_key=self.aws_secret_access_key, | |
aws_session_token=self.aws_session_token, | |
) | |
except Exception as e: | |
msg = "Could not create a boto3 session." | |
raise ValueError(msg) from e | |
elif self.credentials_profile_name: | |
session = boto3.Session(profile_name=self.credentials_profile_name) | |
else: | |
session = boto3.Session() | |
client_params = {} | |
if self.endpoint_url: | |
client_params["endpoint_url"] = self.endpoint_url | |
if self.region_name: | |
client_params["region_name"] = self.region_name | |
boto3_client = session.client("bedrock-runtime", **client_params) | |
try: | |
output = ChatBedrock( | |
client=boto3_client, | |
model_id=self.model_id, | |
region_name=self.region_name, | |
model_kwargs=self.model_kwargs, | |
endpoint_url=self.endpoint_url, | |
streaming=self.stream, | |
) | |
except Exception as e: | |
msg = "Could not connect to AmazonBedrock API." | |
raise ValueError(msg) from e | |
return output | |