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 +4 -4
- data/lib/inst_llm/client.rb +5 -1
- data/lib/inst_llm/parameter/all.rb +4 -3
- data/lib/inst_llm/parameter/llama3_parameters.rb +60 -0
- data/lib/inst_llm/parameter/mistral_parameters.rb +15 -1
- data/lib/inst_llm/response/chat_response.rb +12 -0
- data/lib/inst_llm/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3ef21142135987ed0d03bd322ca86bd478c299a2c1430d5afea62c714b4552e
|
4
|
+
data.tar.gz: 188e6a291efc1de2485d01496b01a20fae10d72d79a3a90c5153df90dc057c8d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 904b2a084d3db540f620a030178a8f6141d3c02d87f942703850a234f7e2e0dccf7ee209abadfd57bc3f9c85c662889601a24e21ae9df59ae53f5aecde7fa7e8
|
7
|
+
data.tar.gz: 0bc2d34e8f9f19a836d5c96732990cba1cf824cd16722de7811ae73f2410c2ec0de738d0e96c86faf088f4ec8111bcb6564ac2a377ed539aac632bf7b785221d
|
data/lib/inst_llm/client.rb
CHANGED
@@ -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]}",
|
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
|
4
|
-
require_relative
|
5
|
-
require_relative
|
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,
|
data/lib/inst_llm/version.rb
CHANGED
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.
|
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-
|
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
|