Class: Langchain::LLM::AwsBedrock

Inherits:
Base
  • Object
show all
Defined in:
lib/langchain/llm/aws_bedrock.rb

Overview

LLM interface for Aws Bedrock APIs: docs.aws.amazon.com/bedrock/

Gem requirements:

gem 'aws-sdk-bedrockruntime', '~> 1.1'

Usage:

bedrock = Langchain::LLM::AwsBedrock.new(llm_options: {})

Constant Summary collapse

DEFAULTS =
{
  completion_model_name: "anthropic.claude-v2",
  embedding_model_name: "amazon.titan-embed-text-v1",
  max_tokens_to_sample: 300,
  temperature: 1,
  top_k: 250,
  top_p: 0.999,
  stop_sequences: ["\n\nHuman:"],
  anthropic_version: "bedrock-2023-05-31",
  return_likelihoods: "NONE",
  count_penalty: {
    scale: 0,
    apply_to_whitespaces: false,
    apply_to_punctuations: false,
    apply_to_numbers: false,
    apply_to_stopwords: false,
    apply_to_emojis: false
  },
  presence_penalty: {
    scale: 0,
    apply_to_whitespaces: false,
    apply_to_punctuations: false,
    apply_to_numbers: false,
    apply_to_stopwords: false,
    apply_to_emojis: false
  },
  frequency_penalty: {
    scale: 0,
    apply_to_whitespaces: false,
    apply_to_punctuations: false,
    apply_to_numbers: false,
    apply_to_stopwords: false,
    apply_to_emojis: false
  }
}.freeze
SUPPORTED_COMPLETION_PROVIDERS =
%i[anthropic cohere ai21].freeze
SUPPORTED_CHAT_COMPLETION_PROVIDERS =
%i[anthropic].freeze
SUPPORTED_EMBEDDING_PROVIDERS =
%i[amazon].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#chat_parameters, #default_dimension, #default_dimensions, #summarize

Methods included from DependencyHelper

#depends_on

Constructor Details

#initialize(completion_model: , embedding_model: , aws_client_options: {}, default_options: {}) ⇒ AwsBedrock

Returns a new instance of AwsBedrock.



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/langchain/llm/aws_bedrock.rb', line 55

def initialize(completion_model: DEFAULTS[:completion_model_name], embedding_model: DEFAULTS[:embedding_model_name], aws_client_options: {}, default_options: {})
  depends_on "aws-sdk-bedrockruntime", req: "aws-sdk-bedrockruntime"

  @client = ::Aws::BedrockRuntime::Client.new(**aws_client_options)
  @defaults = DEFAULTS.merge(default_options)
    .merge(completion_model_name: completion_model)
    .merge(embedding_model_name: embedding_model)

  chat_parameters.update(
    model: {default: @defaults[:chat_completion_model_name]},
    temperature: {},
    max_tokens: {default: @defaults[:max_tokens_to_sample]},
    metadata: {},
    system: {},
    anthropic_version: {default: "bedrock-2023-05-31"}
  )
  chat_parameters.ignore(:n, :user)
  chat_parameters.remap(stop: :stop_sequences)
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



49
50
51
# File 'lib/langchain/llm/aws_bedrock.rb', line 49

def client
  @client
end

#defaultsObject (readonly)

Returns the value of attribute defaults.



49
50
51
# File 'lib/langchain/llm/aws_bedrock.rb', line 49

def defaults
  @defaults
end

Instance Method Details

#chat(params = {}) ⇒ Langchain::LLM::AnthropicMessagesResponse

Generate a chat completion for a given prompt Currently only configured to work with the Anthropic provider and the claude-3 model family

Parameters:

  • params (Hash) (defaults to: {})

    unified chat parmeters from [Langchain::LLM::Parameters::Chat::SCHEMA]

Options Hash (params):

  • :messages (Array<String>)

    The messages to generate a completion for

  • :system (String)

    The system prompt to provide instructions

  • :model (String)

    The model to use for completion defaults to @defaults

  • :max_tokens (Integer)

    The maximum number of tokens to generate defaults to @defaults

  • :stop (Array<String>)

    The stop sequences to use for completion

  • :stop_sequences (Array<String>)

    The stop sequences to use for completion

  • :temperature (Float)

    The temperature to use for completion

  • :top_p (Float)

    Use nucleus sampling.

  • :top_k (Integer)

    Only sample from the top K options for each subsequent token

Returns:

  • (Langchain::LLM::AnthropicMessagesResponse)

    Response object

Raises:

  • (ArgumentError)


139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/langchain/llm/aws_bedrock.rb', line 139

def chat(params = {})
  parameters = chat_parameters.to_params(params)

  raise ArgumentError.new("messages argument is required") if Array(parameters[:messages]).empty?

  raise "Model #{parameters[:model]} does not support chat completions." unless Langchain::LLM::AwsBedrock::SUPPORTED_CHAT_COMPLETION_PROVIDERS.include?(completion_provider)

  response = client.invoke_model({
    model_id: parameters[:model],
    body: parameters.except(:model).to_json,
    content_type: "application/json",
    accept: "application/json"
  })

  parse_response response
end

#complete(prompt:, **params) ⇒ Langchain::LLM::AnthropicResponse

Generate a completion for a given prompt

Parameters:

  • prompt (String)

    The prompt to generate a completion for

  • params

    extra parameters passed to Aws::BedrockRuntime::Client#invoke_model

Returns:



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/langchain/llm/aws_bedrock.rb', line 105

def complete(prompt:, **params)
  raise "Completion provider #{completion_provider} is not supported." unless SUPPORTED_COMPLETION_PROVIDERS.include?(completion_provider)

  raise "Model #{@defaults[:completion_model_name]} only supports #chat." if @defaults[:completion_model_name].include?("claude-3")

  parameters = compose_parameters params

  parameters[:prompt] = wrap_prompt prompt

  response = client.invoke_model({
    model_id: @defaults[:completion_model_name],
    body: parameters.to_json,
    content_type: "application/json",
    accept: "application/json"
  })

  parse_response response
end

#embed(text:, **params) ⇒ Langchain::LLM::AwsTitanResponse

Generate an embedding for a given text

Parameters:

  • text (String)

    The text to generate an embedding for

  • params

    extra parameters passed to Aws::BedrockRuntime::Client#invoke_model

Returns:



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/langchain/llm/aws_bedrock.rb', line 82

def embed(text:, **params)
  raise "Completion provider #{embedding_provider} is not supported." unless SUPPORTED_EMBEDDING_PROVIDERS.include?(embedding_provider)

  parameters = {inputText: text}
  parameters = parameters.merge(params)

  response = client.invoke_model({
    model_id: @defaults[:embedding_model_name],
    body: parameters.to_json,
    content_type: "application/json",
    accept: "application/json"
  })

  Langchain::LLM::AwsTitanResponse.new(JSON.parse(response.body.string))
end