inferkit-ruby 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.rspec +1 -0
- data/.rubocop.yml +127 -0
- data/.tool-versions +2 -0
- data/Gemfile +3 -0
- data/README.md +41 -0
- data/Rakefile +27 -0
- data/inferkit-ruby.gemspec +34 -0
- data/lib/inferkit.rb +4 -0
- data/lib/inferkit/client.rb +51 -0
- data/lib/inferkit/configuration.rb +18 -0
- data/lib/inferkit/version.rb +3 -0
- data/package.json +13 -0
- metadata +195 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1ce20468e408077f0666ee2be5e6ec4fc7de060072fe866b8a142c159c7b1dc9
|
4
|
+
data.tar.gz: 4640e79ce055f83a163aadcab616b185ee4f884490ee700c52b3f20ca59e13a4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5f9a16ff20e85cb275142c8f8411c709a555eeb7de6f9826e1e720600b5bd17cf47974768d6cf7e72731303f8c447075f2fe792d1138718372768876020a3bd5
|
7
|
+
data.tar.gz: 69e3ee95fc9af97e4ae0be52589d5a880c58f7354554b2f4d3e9ae0dd38fa39802dba29ade69a61a0d2e2ea2326521be0029a286a5e48838eb09b7d58e4ce287
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-performance
|
3
|
+
- rubocop-rake
|
4
|
+
- rubocop-rspec
|
5
|
+
|
6
|
+
AllCops:
|
7
|
+
Exclude:
|
8
|
+
- db/**/*
|
9
|
+
- config/**/*
|
10
|
+
- script/**/*
|
11
|
+
- Rakefile
|
12
|
+
- Guardfile
|
13
|
+
- bin/*
|
14
|
+
- tmp/**/*
|
15
|
+
- node_modules/**/*
|
16
|
+
TargetRubyVersion: 3.0
|
17
|
+
NewCops: enable
|
18
|
+
SuggestExtensions:
|
19
|
+
rubocop-sequel: false
|
20
|
+
|
21
|
+
Style:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
Layout:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
Style/HashEachMethods:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
Style/HashTransformKeys:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Style/HashTransformValues:
|
34
|
+
Enabled: false
|
35
|
+
|
36
|
+
Style/SlicingWithRange:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Metrics/AbcSize:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
Metrics/BlockLength:
|
43
|
+
CountComments: false
|
44
|
+
Max: 25
|
45
|
+
Exclude:
|
46
|
+
- "spec/**/*.rb"
|
47
|
+
- "test/**/*.rb"
|
48
|
+
- "Rakefile"
|
49
|
+
- "*.gemspec"
|
50
|
+
- "apps/api/application.rb"
|
51
|
+
- "**/*.rake"
|
52
|
+
|
53
|
+
Metrics/ClassLength:
|
54
|
+
CountComments: false
|
55
|
+
Exclude:
|
56
|
+
- "spec/**/*.rb"
|
57
|
+
- "test/**/*.rb"
|
58
|
+
|
59
|
+
Metrics/MethodLength:
|
60
|
+
Enabled: true
|
61
|
+
Exclude:
|
62
|
+
- "spec/**/*.rb"
|
63
|
+
- "test/**/*.rb"
|
64
|
+
|
65
|
+
Metrics/ModuleLength:
|
66
|
+
CountComments: false
|
67
|
+
Exclude:
|
68
|
+
- "spec/**/*.rb"
|
69
|
+
- "test/**/*.rb"
|
70
|
+
|
71
|
+
# RSpec config
|
72
|
+
# When adding a new setting below here, please provide a reason with it.
|
73
|
+
|
74
|
+
# Excluded for some folders because we want this rule only for unit specs
|
75
|
+
RSpec/DescribeClass:
|
76
|
+
Exclude:
|
77
|
+
- spec/features/*
|
78
|
+
- spec/integration/*
|
79
|
+
|
80
|
+
# Avoid filename issues with Minitest filenames
|
81
|
+
RSpec/FilePath:
|
82
|
+
Exclude:
|
83
|
+
- "test/**/*.rb"
|
84
|
+
|
85
|
+
# Next to the advantages, the check for verified doubles also means that
|
86
|
+
# something about Y being checked in a spec that is about X, which is not
|
87
|
+
# really clean. So it's not enabled by default.
|
88
|
+
# refs https://relishapp.com/rspec/rspec-mocks/docs/verifying-doubles
|
89
|
+
RSpec/VerifiedDoubles:
|
90
|
+
Enabled: false
|
91
|
+
|
92
|
+
# There are cases for meta-programming where adding an empty class is useful and
|
93
|
+
# should be allowed.
|
94
|
+
Lint/EmptyClass:
|
95
|
+
Enabled: false
|
96
|
+
|
97
|
+
# The standard library has methods like `iso8601` which trigger this rule, so
|
98
|
+
# it's better to allow iso8601 for those as well as things like `foo_2` in our # code
|
99
|
+
Naming/VariableNumber:
|
100
|
+
Enabled: false
|
101
|
+
|
102
|
+
###
|
103
|
+
# Disabled initially
|
104
|
+
###
|
105
|
+
RSpec/DescribedClass:
|
106
|
+
Enabled: false
|
107
|
+
|
108
|
+
RSpec/MultipleExpectations:
|
109
|
+
Enabled: false
|
110
|
+
|
111
|
+
RSpec/ExampleLength:
|
112
|
+
Enabled: false
|
113
|
+
|
114
|
+
RSpec/MessageSpies:
|
115
|
+
Enabled: false
|
116
|
+
|
117
|
+
RSpec/MessageChain:
|
118
|
+
Enabled: false
|
119
|
+
|
120
|
+
RSpec/AnyInstance:
|
121
|
+
Enabled: false
|
122
|
+
|
123
|
+
RSpec/MultipleMemoizedHelpers:
|
124
|
+
Enabled: false
|
125
|
+
|
126
|
+
RSpec/StubbedMock:
|
127
|
+
Enabled: false
|
data/.tool-versions
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# inferkit-ruby
|
2
|
+
|
3
|
+
This gem is a Ruby wrapper for [InferKit](https://inferkit.com/), an AI-based
|
4
|
+
text generator.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
```
|
9
|
+
gem install inferkit-ruby
|
10
|
+
```
|
11
|
+
|
12
|
+
## Requirements
|
13
|
+
|
14
|
+
- Ruby 3.0.0 or higher
|
15
|
+
- An InferKit API-Key
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
```
|
20
|
+
require 'inferkit'
|
21
|
+
require 'inferkit/client'
|
22
|
+
|
23
|
+
Inferkit.configure(api_key: 'YOUR_INFERKIT_API_KEY')
|
24
|
+
|
25
|
+
client = Inferkit::Client.new
|
26
|
+
puts client.generate('This is the story of',
|
27
|
+
length: 500,
|
28
|
+
start_from_beginning: true,
|
29
|
+
force_no_end: false,
|
30
|
+
top_p: 0.8,
|
31
|
+
temperature: 1.5
|
32
|
+
)
|
33
|
+
```
|
34
|
+
|
35
|
+
## Configuration
|
36
|
+
|
37
|
+
You can provide your API-key as parameter when calling `Inferkit.configure` as in the example above. Or you can set the `INFERKIT_API_KEY` environment variable and call `Inferkit.configure` without parameter.
|
38
|
+
|
39
|
+
## Generating text
|
40
|
+
|
41
|
+
You generate text by calling the `generate` method of `Inferkit::Client` and providing a text prompt. All additional parameters, such as length, are optional.
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'rubocop/rake_task'
|
4
|
+
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
RuboCop::RakeTask.new
|
7
|
+
|
8
|
+
task default: %i[spec rubocop]
|
9
|
+
|
10
|
+
task :version do
|
11
|
+
puts Gem::Specification.load('inferkit-ruby.gemspec').version
|
12
|
+
end
|
13
|
+
|
14
|
+
module Bundler
|
15
|
+
class GemHelper
|
16
|
+
def install
|
17
|
+
desc "Build #{name}-#{version}.gem into the pkg directory."
|
18
|
+
task 'build' do
|
19
|
+
build_gem
|
20
|
+
end
|
21
|
+
|
22
|
+
GemHelper.instance = self
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Bundler::GemHelper.install_tasks
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative 'lib/inferkit/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = 'inferkit-ruby'
|
5
|
+
spec.version = Inferkit::VERSION
|
6
|
+
spec.authors = ['Thomas Frütel']
|
7
|
+
spec.email = %w[tom@fruetel.de]
|
8
|
+
|
9
|
+
spec.required_ruby_version = '>= 3.0'
|
10
|
+
|
11
|
+
spec.summary = 'Ruby wrapper for https://inferkit.com/'
|
12
|
+
spec.description = 'This gem is a Ruby wrapper for InferKit, an AI-based text generator.'
|
13
|
+
spec.homepage = 'https://github.com/Fruetel/inferkit-ruby'
|
14
|
+
|
15
|
+
spec.files =
|
16
|
+
Dir.chdir(File.expand_path(__dir__)) do
|
17
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(spec|Dockerfile)/})
|
19
|
+
end
|
20
|
+
end
|
21
|
+
spec.require_paths = %w[lib]
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
24
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
26
|
+
spec.add_development_dependency 'rubocop', '>= 1.0.0'
|
27
|
+
spec.add_development_dependency 'rubocop-performance', '>= 1.9.1'
|
28
|
+
spec.add_development_dependency 'rubocop-rake', '>= 0.5.1'
|
29
|
+
spec.add_development_dependency 'rubocop-rspec', '>= 2.0.0'
|
30
|
+
spec.add_development_dependency 'webmock', '>= 3.0.0'
|
31
|
+
|
32
|
+
spec.add_dependency 'faraday', '~> 1.0'
|
33
|
+
spec.add_dependency 'oj', '~>3.10'
|
34
|
+
end
|
data/lib/inferkit.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
require 'oj'
|
4
|
+
|
5
|
+
module Inferkit
|
6
|
+
class Client
|
7
|
+
HOST = 'https://api.inferkit.com'
|
8
|
+
GENERATE_ENDPOINT = '/v1/models/standard/generate'
|
9
|
+
|
10
|
+
def generate(prompt, **params)
|
11
|
+
request_params = default_params.merge(params)
|
12
|
+
|
13
|
+
response =
|
14
|
+
conn.post(GENERATE_ENDPOINT) do |req|
|
15
|
+
req.headers['Content-Type'] = 'application/json'
|
16
|
+
req.headers['Authorization'] =
|
17
|
+
"Bearer #{Inferkit.configuration.api_key}"
|
18
|
+
req.body = generate_body(prompt, request_params)
|
19
|
+
end
|
20
|
+
|
21
|
+
Oj.load(response.body, symbol_keys: true).dig(:data, :text)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def default_params
|
27
|
+
{
|
28
|
+
length: 200,
|
29
|
+
start_from_beginning: false,
|
30
|
+
force_no_end: false,
|
31
|
+
top_p: 0.9,
|
32
|
+
temperature: 1.0
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def generate_body(prompt, request_params)
|
37
|
+
{
|
38
|
+
prompt: { text: prompt },
|
39
|
+
length: request_params.fetch(:length),
|
40
|
+
startFromBeginning: request_params.fetch(:start_from_beginning),
|
41
|
+
forceNoEnd: request_params.fetch(:force_no_end),
|
42
|
+
topP: request_params.fetch(:top_p),
|
43
|
+
temperature: request_params.fetch(:temperature)
|
44
|
+
}.to_json
|
45
|
+
end
|
46
|
+
|
47
|
+
def conn
|
48
|
+
@conn ||= Faraday.new(HOST, request: { timeout: 90 })
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Inferkit
|
2
|
+
class << self
|
3
|
+
attr_reader :configuration
|
4
|
+
|
5
|
+
def configure(api_key: nil)
|
6
|
+
@configuration =
|
7
|
+
Inferkit::Configuration.new(api_key || ENV['INFERKIT_API_KEY'])
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Configuration
|
12
|
+
attr_accessor :api_key
|
13
|
+
|
14
|
+
def initialize(api_key)
|
15
|
+
@api_key = api_key
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/package.json
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"name": "queue-store",
|
3
|
+
"private": true,
|
4
|
+
"scripts": {
|
5
|
+
"prettify": "prettier \"**/*.{ru,rb,yml,yaml,md}\" --ignore-path=\".gitignore\"",
|
6
|
+
"lint": "yarn prettify --check",
|
7
|
+
"format": "yarn prettify --write"
|
8
|
+
},
|
9
|
+
"devDependencies": {
|
10
|
+
"@prettier/plugin-ruby": "^0.20.1",
|
11
|
+
"prettier": "^2.2.0"
|
12
|
+
}
|
13
|
+
}
|
metadata
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: inferkit-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thomas Frütel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-04-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
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'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '13.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.0.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-performance
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.9.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.9.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.5.1
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.5.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.0.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 2.0.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 3.0.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 3.0.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: faraday
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: oj
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '3.10'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '3.10'
|
153
|
+
description: This gem is a Ruby wrapper for InferKit, an AI-based text generator.
|
154
|
+
email:
|
155
|
+
- tom@fruetel.de
|
156
|
+
executables: []
|
157
|
+
extensions: []
|
158
|
+
extra_rdoc_files: []
|
159
|
+
files:
|
160
|
+
- ".gitignore"
|
161
|
+
- ".rspec"
|
162
|
+
- ".rubocop.yml"
|
163
|
+
- ".tool-versions"
|
164
|
+
- Gemfile
|
165
|
+
- README.md
|
166
|
+
- Rakefile
|
167
|
+
- inferkit-ruby.gemspec
|
168
|
+
- lib/inferkit.rb
|
169
|
+
- lib/inferkit/client.rb
|
170
|
+
- lib/inferkit/configuration.rb
|
171
|
+
- lib/inferkit/version.rb
|
172
|
+
- package.json
|
173
|
+
homepage: https://github.com/Fruetel/inferkit-ruby
|
174
|
+
licenses: []
|
175
|
+
metadata: {}
|
176
|
+
post_install_message:
|
177
|
+
rdoc_options: []
|
178
|
+
require_paths:
|
179
|
+
- lib
|
180
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - ">="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '3.0'
|
185
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
requirements: []
|
191
|
+
rubygems_version: 3.2.15
|
192
|
+
signing_key:
|
193
|
+
specification_version: 4
|
194
|
+
summary: Ruby wrapper for https://inferkit.com/
|
195
|
+
test_files: []
|