katalyst-google-apis 1.2.2 → 1.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '068ff7b04cb4fdb9b471bbb8bbd4dcef65de8005a4b1d96675119d3293745782'
4
- data.tar.gz: '02933b3e5f96569817fdfdd04d24691bd6970d5515c6ab7ed979f9c84e07e4f4'
3
+ metadata.gz: f6b30a2c9af798f8d02b09f74e4c9e080daf199723b644ba70e79f2fb7038ac6
4
+ data.tar.gz: f3936fbcb87a624e5564c882a25871c06426ba6224441c9d5bfb11470d75ff25
5
5
  SHA512:
6
- metadata.gz: 516aa02ce48141da7ec32d79122f055e1feb6ae7fb3edf6965035e6dac0df840288c6955d615b6729c3cfc131507748bc509bbc8afb993ee251955243d804d56
7
- data.tar.gz: 9aa73f7657243263513eaab6ce323823d95b9e8b3661f7e71c6bf5ddafd1d3ad668d1b99dfad6e6a30076a43220a428be9862f69a7c6e3ca35e696dff9f8e26c
6
+ metadata.gz: bf8944b1d3888a5d25d66e65bd3737602b90b6890a138a7e5a941bdef954054379f10233309e71a354e51d31cc298a10bd21b1e16aada8439d4c146483dec100
7
+ data.tar.gz: 84d17ab4cea53c9686b4c9c04faa8fcf3ad5031ec5b72ec817dbd9972c8f1e732f7c9c87f606143f60c24534fe98f37dd4e829d9b382890bfa4572b1d91761d3
@@ -7,14 +7,19 @@ module Katalyst
7
7
  class GenerateContentService
8
8
  attr_reader :response, :result, :error, :content_text
9
9
 
10
- def self.call(parent:, model:, payload:, credentials: Katalyst::GoogleApis.credentials)
11
- new(parent:, model:, credentials:).call(payload:)
10
+ def self.call(parent:, model:, payload:, credentials: Katalyst::GoogleApis.credentials,
11
+ retries: 5,
12
+ jitter: 1_000)
13
+ new(parent:, model:, credentials:, attempt: 0, retries:, jitter:).call(payload:)
12
14
  end
13
15
 
14
- def initialize(credentials:, model:, parent:)
16
+ def initialize(credentials:, model:, parent:, attempt:, retries:, jitter:)
15
17
  @credentials = credentials
16
18
  @model = model
17
19
  @parent = parent
20
+ @attempt = attempt
21
+ @retries = retries
22
+ @jitter = jitter
18
23
  end
19
24
 
20
25
  def call(payload:)
@@ -34,12 +39,25 @@ module Katalyst
34
39
  end
35
40
 
36
41
  if result[:error].present?
37
- @error = GoogleApis::Error.new(**result[:error])
42
+ raise GoogleApis::Error.new(**result[:error])
38
43
  else
39
44
  @content_text = result.dig(:candidates, 0, :content, :parts, 0, :text)
40
45
  end
41
46
 
42
47
  self
48
+ rescue GoogleApis::Error => e
49
+ @error = e
50
+ if e.code == 429 && @attempt < @retries
51
+ Kernel.sleep(backoff)
52
+
53
+ @response = nil
54
+ @result = nil
55
+ @error = nil
56
+ @attempt += 1
57
+ retry
58
+ else
59
+ raise e
60
+ end
43
61
  rescue StandardError => e
44
62
  @error = e
45
63
  raise e
@@ -89,6 +107,21 @@ module Katalyst
89
107
  },
90
108
  )
91
109
  end
110
+
111
+ def backoff
112
+ [@jitter, response_headers.fetch(:retry_after, 0).to_i * 1000].max + (@jitter * rand)
113
+ end
114
+
115
+ def response_headers
116
+ headers = {}
117
+ @response.header_str.each_line do |line|
118
+ key, value = line.split(":", 2)
119
+ next unless value
120
+
121
+ headers[key.underscore.to_sym] = value.strip
122
+ end
123
+ headers
124
+ end
92
125
  end
93
126
  end
94
127
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katalyst-google-apis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katalyst Interactive