inst_llm 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9dd355405ae5b7659a6cee01536e9ca422a0658208e125303a6206e4e6129863
4
- data.tar.gz: 8e0955a5bf08923385e093a7a6d739ff224695a345d52684d2c435675e3aa4c9
3
+ metadata.gz: c3ef21142135987ed0d03bd322ca86bd478c299a2c1430d5afea62c714b4552e
4
+ data.tar.gz: 188e6a291efc1de2485d01496b01a20fae10d72d79a3a90c5153df90dc057c8d
5
5
  SHA512:
6
- metadata.gz: 787201e52ae44238a3a22d53a93f83fd15718b251a49b46fded527aab1e30eda9fe805574c1f42c0369a5586679a9d8f27c0cae5bb689c47c2c8fb65355e81b3
7
- data.tar.gz: 14ea0088107fc9be654483530f314b5f00ea4d72686326b0d6c1349470446de8b8731fe06313081a1b78c78d6b9f2d8bff125752e60183b2dc3978626ffaf83a
6
+ metadata.gz: 904b2a084d3db540f620a030178a8f6141d3c02d87f942703850a234f7e2e0dccf7ee209abadfd57bc3f9c85c662889601a24e21ae9df59ae53f5aecde7fa7e8
7
+ data.tar.gz: 0bc2d34e8f9f19a836d5c96732990cba1cf824cd16722de7811ae73f2410c2ec0de738d0e96c86faf088f4ec8111bcb6564ac2a377ed539aac632bf7b785221d
@@ -12,6 +12,9 @@ module InstLLM
12
12
  "anthropic.claude-3-sonnet-20240229-v1:0": { format: :claude, provider: :bedrock, type: :chat },
13
13
  "anthropic.claude-3-haiku-20240307-v1:0": { format: :claude, provider: :bedrock, type: :chat },
14
14
 
15
+ "meta.llama3-8b-instruct-v1:0": { format: :llama3, provider: :bedrock, type: :chat },
16
+ "meta.llama3-70b-instruct-v1:0": { format: :llama3, provider: :bedrock, type: :chat },
17
+
15
18
  "mistral.mistral-7b-instruct-v0:2": { format: :mistral, provider: :bedrock, type: :chat },
16
19
  "mistral.mixtral-8x7b-instruct-v0:1": { format: :mistral, provider: :bedrock, type: :chat },
17
20
  "mistral.mistral-large-2402-v1:0": { format: :mistral, provider: :bedrock, type: :chat },
@@ -110,13 +113,14 @@ module InstLLM
110
113
  params_table = {
111
114
  claude: Parameter::ClaudeParameters,
112
115
  cohere_embed: Parameter::CohereEmbedParameters,
116
+ llama3: Parameter::Llama3Parameters,
113
117
  mistral: Parameter::MistralParameters
114
118
  }
115
119
  params_table[MODELS[model][:format]].new(model: model, messages: messages, **options)
116
120
  end
117
121
 
118
122
  def embedding_response_factory(model, response)
119
- Response::EmbeddingResponse.send(:"from_#{MODELS[model][:format]}", model: model, response: response)
123
+ Response::EmbeddingResponse.send(:"from_#{MODELS[model][:format]}", model: model, response: response)
120
124
  end
121
125
 
122
126
  def response_factory(model, response)
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'claude_parameters'
4
- require_relative 'cohere_embed_parameters'
5
- require_relative 'mistral_parameters'
3
+ require_relative "claude_parameters"
4
+ require_relative "cohere_embed_parameters"
5
+ require_relative "llama3_parameters"
6
+ require_relative "mistral_parameters"
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module InstLLM
6
+ module Parameter
7
+ class Llama3Parameters
8
+ DEFAULT_OPTIONS = {
9
+ max_gen_len: nil,
10
+ temperature: nil,
11
+ top_p: nil,
12
+ }.freeze
13
+
14
+ def initialize(model:, messages: [], **options)
15
+ @model = model
16
+ @messages = messages.map { |message| format_message(message) }
17
+ @options = DEFAULT_OPTIONS.merge(options.slice(*DEFAULT_OPTIONS.keys)).compact
18
+ end
19
+
20
+ def to_hash
21
+ { model_id: @model, body: { prompt: prompt(@messages) }.merge(@options).to_json }
22
+ end
23
+
24
+ private
25
+
26
+ def format_message(message)
27
+ if message[:content].is_a?(String)
28
+ message
29
+ elsif message[:content].is_a?(Array)
30
+ content = message[:content].map do |m|
31
+ raise UnknownArgumentError, <<~ERR unless m[:type].to_sym == :text
32
+ Model does not support multiple types. Expected :text, received #{m[:type]}"
33
+ ERR
34
+
35
+ m[:text]
36
+ end
37
+ { role: message[:role], content: content.join("\n\n") }
38
+ else
39
+ raise ArgumentError, "Message content must be a String or Array; received: #{message[:content]}"
40
+ end
41
+ end
42
+
43
+ def prompt(messages)
44
+ messages << { role: :assistant, content: "" } if messages.last[:role].to_sym != :assistant
45
+
46
+ formatted_messages = messages.map do |message|
47
+ "<|start_header_id|>#{message[:role].to_s}<|end_header_id|>\n#{message[:content]}"
48
+ end
49
+
50
+ formatted_prompt = "<|begin_of_text|>#{formatted_messages.join("<|eot_id|>")}"
51
+
52
+ if messages.last[:role] == :user
53
+ formatted_prompt += "<|eot_id|>"
54
+ end
55
+
56
+ formatted_prompt
57
+ end
58
+ end
59
+ end
60
+ end
@@ -23,9 +23,23 @@ module InstLLM
23
23
 
24
24
  private
25
25
 
26
+ def format_message(message)
27
+ return message if message[:content].is_a?(String)
28
+
29
+ content = Array(message[:content]).map do |m|
30
+ raise UnknownArgumentError, <<~ERR if m[:type] != :text
31
+ Model does not support multiple types. Expected :text, received #{m[:type]}
32
+ ERR
33
+
34
+ m[:text]
35
+ end
36
+
37
+ { role: message[:role], content: content.join("\n\n") }
38
+ end
39
+
26
40
  def prompt
27
41
  system_message = nil
28
- prompt = @messages.map do |message|
42
+ prompt = @messages.map { |message| format_message(message) }.map do |message|
29
43
  case message[:role].to_sym
30
44
  when :assistant
31
45
  "#{message[:content]}"
@@ -29,6 +29,18 @@ module InstLLM
29
29
  )
30
30
  end
31
31
 
32
+ def from_llama3(model:, response:)
33
+ new(
34
+ model: model,
35
+ message: { role: :assistant, content: response["generation"] },
36
+ stop_reason: response["stop_reason"],
37
+ usage: {
38
+ input_tokens: response["prompt_token_count"],
39
+ output_tokens: response["generation_token_count"]
40
+ }
41
+ )
42
+ end
43
+
32
44
  def from_mistral(model:, response:)
33
45
  new(
34
46
  model: model,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InstLLM
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst_llm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Pendleton
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-04-23 00:00:00.000000000 Z
11
+ date: 2024-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-bedrockruntime
@@ -36,6 +36,7 @@ files:
36
36
  - lib/inst_llm/parameter/all.rb
37
37
  - lib/inst_llm/parameter/claude_parameters.rb
38
38
  - lib/inst_llm/parameter/cohere_embed_parameters.rb
39
+ - lib/inst_llm/parameter/llama3_parameters.rb
39
40
  - lib/inst_llm/parameter/mistral_parameters.rb
40
41
  - lib/inst_llm/response/all.rb
41
42
  - lib/inst_llm/response/chat_response.rb