modelslab-ruby 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: aaa8cfecff49fc4cc6ef03c942b20151c8f691d82ec417a77c9554015b8e43f3
4
+ data.tar.gz: e0cf57fc6a3034a4c48403e897710fdfef0157350b3201c7a44a1230aa3c8df6
5
+ SHA512:
6
+ metadata.gz: 14bbe9eef78bd8ca532b4cd36be51b0243067dbcbff9ddc42b3d9c0aad768800bb7fa76b2ce033cc4bc3b7f91a0ba7ede7532376309f6c6e037172d00d781f2b
7
+ data.tar.gz: e09e522e585fc169e74992bb5d2b27879aae73c1d45b5cd84cb39836dd5b3b3adac297294e1dfb152a0d646fc0c7ca5cf0796ad6effb7543f3851cbf173d8946
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ModelsLab
4
+ class Client
5
+ include ModelsLab::HTTP
6
+
7
+ CONFIG_KEYS = %i[api_key uri_base request_timeout extra_headers].freeze
8
+ attr_reader(*CONFIG_KEYS, :faraday_middleware)
9
+
10
+ def initialize(config = {}, &faraday_middleware)
11
+ CONFIG_KEYS.each do |key|
12
+ instance_variable_set(
13
+ "@#{key}",
14
+ config[key].nil? ? ModelsLab.configuration.send(key) : config[key]
15
+ )
16
+ end
17
+ @faraday_middleware = faraday_middleware
18
+ end
19
+
20
+ def images
21
+ @images ||= ModelsLab::Images.new(client: self)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ModelsLab
4
+ module HTTP
5
+ def json_post(path:, parameters:)
6
+ response = connection.post(path) do |req|
7
+ req.headers["Content-Type"] = "application/json"
8
+ req.body = parameters.to_json
9
+ end
10
+ JSON.parse(response.body)
11
+ rescue JSON::ParserError
12
+ response.body
13
+ end
14
+
15
+ def connection
16
+ @connection ||= Faraday.new(url: uri_base) do |f|
17
+ f.request :json
18
+ f.response :raise_error
19
+ f.use ModelsLab::MiddlewareErrors
20
+ f.options.timeout = request_timeout
21
+ extra_headers.each do |key, value|
22
+ f.headers[key] = value
23
+ end
24
+ faraday_middleware&.call(f)
25
+ f.adapter Faraday.default_adapter
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ModelsLab
4
+ class Images
5
+ def initialize(client:)
6
+ @client = client
7
+ end
8
+
9
+ def text2img(prompt:, model_id:, options: {})
10
+ parameters = {
11
+ key: @client.api_key,
12
+ prompt: prompt,
13
+ model_id: model_id
14
+ }.merge(options)
15
+
16
+ @client.json_post(path: "images/text2img", parameters: parameters)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ModelsLab
4
+ VERSION = "0.1.0"
5
+ end
data/lib/modelslab.rb ADDED
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "faraday"
4
+ require "faraday/multipart"
5
+
6
+ require_relative "modelslab/version"
7
+ require_relative "modelslab/http"
8
+ require_relative "modelslab/client"
9
+ require_relative "modelslab/images"
10
+
11
+ module ModelsLab
12
+ class Error < StandardError; end
13
+ class ConfigurationError < Error; end
14
+
15
+ class MiddlewareErrors < Faraday::Middleware
16
+ def call(env)
17
+ @app.call(env)
18
+ rescue Faraday::Error => e
19
+ raise e unless e.response.is_a?(Hash)
20
+
21
+ logger = Logger.new($stdout)
22
+ logger.formatter = proc do |_severity, _datetime, _progname, msg|
23
+ "\033[31mModelsLab HTTP Error (spotted in modelslab-ruby #{VERSION}): #{msg}\n\033[0m"
24
+ end
25
+ logger.error(e.response[:body])
26
+
27
+ raise e
28
+ end
29
+ end
30
+
31
+ class Configuration
32
+ attr_accessor :api_key, :uri_base, :request_timeout, :extra_headers
33
+
34
+ DEFAULT_URI_BASE = "https://modelslab.com/api/v6"
35
+ DEFAULT_REQUEST_TIMEOUT = 120
36
+
37
+ def initialize
38
+ @api_key = nil
39
+ @uri_base = DEFAULT_URI_BASE
40
+ @request_timeout = DEFAULT_REQUEST_TIMEOUT
41
+ @extra_headers = {}
42
+ end
43
+ end
44
+
45
+ class << self
46
+ attr_writer :configuration
47
+ end
48
+
49
+ def self.configuration
50
+ @configuration ||= ModelsLab::Configuration.new
51
+ end
52
+
53
+ def self.configure
54
+ yield(configuration)
55
+ end
56
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: modelslab-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Florian Felsing
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-08-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday-multipart
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ description: A Ruby wrapper for the ModelsLab API, focusing on text-to-image generation.
42
+ email:
43
+ - florian.felsing@googlemail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/modelslab.rb
49
+ - lib/modelslab/client.rb
50
+ - lib/modelslab/http.rb
51
+ - lib/modelslab/images.rb
52
+ - lib/modelslab/version.rb
53
+ homepage: https://github.com/florianfelsing/modelslab-ruby
54
+ licenses:
55
+ - MIT
56
+ metadata:
57
+ allowed_push_host: https://rubygems.org
58
+ homepage_uri: https://github.com/florianfelsing/modelslab-ruby
59
+ source_code_uri: https://github.com/florianfelsing/modelslab-ruby
60
+ changelog_uri: https://github.com/florianfelsing/modelslab-ruby/blob/main/CHANGELOG.md
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 3.0.0
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ requirements: []
76
+ rubygems_version: 3.4.19
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: Ruby client for ModelsLab API
80
+ test_files: []