llm_lib 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/llm_lib/huggingface.rb +16 -0
- data/lib/llm_lib/openai.rb +25 -0
- data/lib/llm_lib/restclient.rb +44 -0
- data/lib/llm_lib.rb +133 -0
- metadata +147 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 85f973672c9b0eb31e43f3fbeb04c583a2b92bd5886c3caa320db5f972d614a2
|
4
|
+
data.tar.gz: f2fa7bb2bdb6d06a688a0987017c22f9fe55eb4ad6861abe1efd205773df35fc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ab1ea2cbdd89d7af8229195addb8edeb03bacb93b99879de60f78ee4924c410a0b350f5d513bc91282d9ba0a1655c8ea2abde72cf64daec495a1b014750a42f6
|
7
|
+
data.tar.gz: 2916daaa07a84273eeffd20c500ba3d27be918f40490b91cd5099eae793311a8c3d08ef4526b3fe731a38099bf6e6b60d4b7b84d8607884a76b5c01250847675
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class LlmLib::HuggingFace
|
2
|
+
|
3
|
+
def self.send(apikey, model, query)
|
4
|
+
|
5
|
+
return LlmLib::Restclient.post(
|
6
|
+
body: {
|
7
|
+
"inputs" => query,
|
8
|
+
|
9
|
+
},
|
10
|
+
url: "https://api-inference.huggingface.co/models/#{model}",
|
11
|
+
apikey: apikey
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
require 'llm_lib/restclient'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'llm_lib'
|
2
|
+
|
3
|
+
class LlmLib::OpenAI
|
4
|
+
|
5
|
+
def self.send(apikey, model, prompt, max_tokens, temperature=0, top_p=1, n=1, stream=false, stop="\n")
|
6
|
+
|
7
|
+
return LlmLib::Restclient.post(
|
8
|
+
body: {
|
9
|
+
"model" => model,
|
10
|
+
"messages" => [{ role: "user", content: prompt}],
|
11
|
+
"max_tokens" => max_tokens,
|
12
|
+
"temperature" => temperature,
|
13
|
+
"top_p" => top_p,
|
14
|
+
"n" => n,
|
15
|
+
"stream" => stream,
|
16
|
+
"stop" => stop,
|
17
|
+
|
18
|
+
},
|
19
|
+
url: "https://api.openai.com/v1/chat/completions",
|
20
|
+
apikey: apikey
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'llm_lib/restclient'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class LlmLib::Restclient
|
2
|
+
|
3
|
+
# def self.post(url:, body:, headers: {})
|
4
|
+
def self.post(url:, body:, apikey:)
|
5
|
+
|
6
|
+
url = URI(url)
|
7
|
+
apikey = apikey
|
8
|
+
|
9
|
+
http = Net::HTTP.new(url.host, url.port)
|
10
|
+
http.use_ssl = true
|
11
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
12
|
+
|
13
|
+
request = Net::HTTP::Post.new(url.path)
|
14
|
+
request['Content-Type'] = 'application/json'
|
15
|
+
request["cache-control"] = 'no-cache'
|
16
|
+
# request["apikey"] = apikey
|
17
|
+
# headers.each { |key, value| request[key] = value }
|
18
|
+
request['Authorization'] = "Bearer #{apikey}"
|
19
|
+
# request.set_form_data(body)
|
20
|
+
request.body = JSON.generate(body)
|
21
|
+
|
22
|
+
begin
|
23
|
+
response = http.request(request)
|
24
|
+
|
25
|
+
case response
|
26
|
+
when Net::HTTPSuccess then
|
27
|
+
return {code: 200, response: JSON.parse(response.read_body)}
|
28
|
+
else
|
29
|
+
return {code: response.value, response: response.read_body}
|
30
|
+
end
|
31
|
+
|
32
|
+
rescue StandardError
|
33
|
+
puts response
|
34
|
+
return {code: response.code, response: response.read_body}
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
require 'uri'
|
43
|
+
require 'net/http'
|
44
|
+
require 'json'
|
data/lib/llm_lib.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
module LlmLib
|
2
|
+
class OpenAIClient
|
3
|
+
|
4
|
+
# # Replace 'YOUR_API_KEY_HERE' with your actual OpenAI API key
|
5
|
+
# api_key = 'YOUR_API_KEY_HERE'
|
6
|
+
# client = OpenAIClient.new(api_key)
|
7
|
+
|
8
|
+
# # Example API call
|
9
|
+
# prompt = "Once upon a time"
|
10
|
+
# max_tokens = 100
|
11
|
+
# response = client.chat_gpt_call(prompt, max_tokens)
|
12
|
+
# puts response
|
13
|
+
|
14
|
+
# remove
|
15
|
+
# attr_reader :apikey
|
16
|
+
# def def initialize(apikey, query)
|
17
|
+
# @apikey, @query = apikey, query
|
18
|
+
# end
|
19
|
+
|
20
|
+
def initialize(apikey)
|
21
|
+
@apikey = apikey
|
22
|
+
end
|
23
|
+
|
24
|
+
# def chat_gpt_call(prompt, max_tokens, temperature = 0, top_p = 1, n = 1, stream = false, logprobs = nil, stop = "\n")
|
25
|
+
# model = "text-davinci-003"
|
26
|
+
# response = self.class.send(@api_key, {
|
27
|
+
# "model" => model,
|
28
|
+
# "prompt" => prompt,
|
29
|
+
# "max_tokens" => max_tokens,
|
30
|
+
# "temperature" => temperature,
|
31
|
+
# "top_p" => top_p,
|
32
|
+
# "n" => n,
|
33
|
+
# "stream" => stream,
|
34
|
+
# "logprobs" => logprobs,
|
35
|
+
# "stop" => stop
|
36
|
+
# })
|
37
|
+
# response
|
38
|
+
# end
|
39
|
+
|
40
|
+
# def self.send(apikey, body)
|
41
|
+
# LlmLib::Restclient.post(
|
42
|
+
# body: body,
|
43
|
+
# url: "https://api.openai.com/v1/completions",
|
44
|
+
# apikey: apikey
|
45
|
+
# )
|
46
|
+
# end
|
47
|
+
|
48
|
+
def chat_gpt_call(prompt, max_tokens, temperature = 0, top_p = 1, n = 1, stream = false, stop = "\n")
|
49
|
+
model = "gpt-3.5-turbo"
|
50
|
+
response = OpenAI.send(@api_key,
|
51
|
+
model,
|
52
|
+
prompt,
|
53
|
+
max_tokens,
|
54
|
+
temperature,
|
55
|
+
top_p,
|
56
|
+
n,
|
57
|
+
stream,
|
58
|
+
stop
|
59
|
+
)
|
60
|
+
response
|
61
|
+
end
|
62
|
+
|
63
|
+
def gpt4_call(prompt, max_tokens, temperature = 0, top_p = 1, n = 1, stream = false, stop = "\n")
|
64
|
+
model = "gpt-4"
|
65
|
+
response = OpenAI.send(@api_key,
|
66
|
+
model,
|
67
|
+
prompt,
|
68
|
+
max_tokens,
|
69
|
+
temperature,
|
70
|
+
top_p,
|
71
|
+
n,
|
72
|
+
stream,
|
73
|
+
stop
|
74
|
+
)
|
75
|
+
response
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
require 'llm_lib'
|
81
|
+
|
82
|
+
class HuggingfaceApiClient
|
83
|
+
|
84
|
+
# # Replace 'YOUR_API_KEY_HERE' with your actual Huggingface API key
|
85
|
+
# api_key = 'YOUR_API_KEY_HERE'
|
86
|
+
# client = HuggingfaceApiClient.new(api_key)
|
87
|
+
|
88
|
+
# # Example API call
|
89
|
+
# query = "Tell me a joke"
|
90
|
+
# response = client.hugging_bloom_call(query)
|
91
|
+
# puts response
|
92
|
+
|
93
|
+
|
94
|
+
def initialize(api_key)
|
95
|
+
@api_key = api_key
|
96
|
+
end
|
97
|
+
|
98
|
+
def hugging_bloom_call(query, model = "bigscience/bloom")
|
99
|
+
response = HuggingFace.send(@api_key,
|
100
|
+
query,
|
101
|
+
model)
|
102
|
+
response
|
103
|
+
end
|
104
|
+
|
105
|
+
def hugging_falcon_call(query, model = "tiiuae/falcon-40b-instruct")
|
106
|
+
response = HuggingFace.send(@api_key,
|
107
|
+
query,
|
108
|
+
model)
|
109
|
+
response
|
110
|
+
end
|
111
|
+
|
112
|
+
def hugging_llama2_call(query, model = "meta-llama/Llama-2-70b-chat-hf")
|
113
|
+
response = HuggingFace.send(@api_key,
|
114
|
+
query,
|
115
|
+
model)
|
116
|
+
response
|
117
|
+
end
|
118
|
+
|
119
|
+
# def self.send(apikey, body, model)
|
120
|
+
# LlmLib::Restclient.post(
|
121
|
+
# body: body,
|
122
|
+
# url: "https://api-inference.huggingface.co/models/#{model}",
|
123
|
+
# apikey: apikey
|
124
|
+
# )
|
125
|
+
# end
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
require 'llm_lib/openai'
|
131
|
+
require 'llm_lib/huggingface'
|
132
|
+
require 'uri'
|
133
|
+
require 'dotenv/load'
|
metadata
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: llm_lib
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chamath Attanayaka
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-07-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: uri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.12.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.12.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 13.0.6
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 13.0.6
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mini_mime
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.1.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.1.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: multi_xml
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.6.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.6.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: json
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.6.3
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.6.3
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: dotenv
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.8.1
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.8.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 5.19.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 5.19.0
|
111
|
+
description: Gem to invoke API calls to Huggingface and Openai LLMs
|
112
|
+
email:
|
113
|
+
- kaushalyabandaraatta@gmail.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- lib/llm_lib.rb
|
119
|
+
- lib/llm_lib/huggingface.rb
|
120
|
+
- lib/llm_lib/openai.rb
|
121
|
+
- lib/llm_lib/restclient.rb
|
122
|
+
homepage: https://rubygems.org/gems/llm_lib
|
123
|
+
licenses:
|
124
|
+
- MIT
|
125
|
+
metadata:
|
126
|
+
source_code_uri: https://github.com/ChamathKB/llm-sdk
|
127
|
+
changelog_uri: https://github.com/ChamathKB/llm-sdk/blob/main/CHANGELOG.md
|
128
|
+
post_install_message:
|
129
|
+
rdoc_options: []
|
130
|
+
require_paths:
|
131
|
+
- lib
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 3.0.2
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubygems_version: 3.2.22
|
144
|
+
signing_key:
|
145
|
+
specification_version: 4
|
146
|
+
summary: Invoke API calls to LLMs
|
147
|
+
test_files: []
|