completion-kit 0.27.2 → 0.27.4

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: 7f8fdeef847d7243a665b86e111343d0255ac2eb56ba6538c56c21871de04d1c
4
- data.tar.gz: 58911d7d679a943284eacaaca586c6ad375efdf674aa1604f9895ca971f80c2e
3
+ metadata.gz: a2dbe2221c832f769b697c57e5268d40f3d6474786f78da6abc53288e150376c
4
+ data.tar.gz: b851f95fd737b829e0bf0b82d83f37902e5e18a84b4de9a6dbe38bc9154e5317
5
5
  SHA512:
6
- metadata.gz: fd44b864ef07239759b9211cf24dac1aad601d30bd1b92068e5e2952571e338decb85be400464c1c3a947f40040c14aeea74384512594290f79dbfddbed19555
7
- data.tar.gz: ad879e8ebc9f77dab47592f23b3bf0a6ae7eb101e11dc07e43a1ed7b67caa19fde109b3dcc20ab445c3a0c4daebb843b442b1de69ec9e433a3fe5da9d7d5c661
6
+ metadata.gz: 477ad7b3ee34ced678bd03c21c972c3033f617dfdcd5e44a1e9d5596280d8878995c28fcab3cd8f7f2ddcf1c19b8e10c0db9c5330595d350c038373e2e1a7942
7
+ data.tar.gz: 13ca8b2b7544bb1d9e7e171faa167ea392c8b13546fc67023485f0b5dde671d1852d69447e494ebb6760b3ce6a063f598b18daca8dbd79541322153f8fa8aa2b
@@ -12,20 +12,30 @@ module CompletionKit
12
12
  30 * executions
13
13
  end
14
14
 
15
+ rescue_from(StandardError) do |error|
16
+ Rails.error.report(error, handled: true, context: { job: self.class.name, run_id: @run_id, response_id: @response_id })
17
+ record_terminal_failure!(error)
18
+ enqueue_completion_check
19
+ end
20
+
15
21
  retry_on Faraday::TimeoutError,
16
22
  Faraday::ConnectionFailed,
17
- wait: :polynomially_longer, attempts: 5
23
+ wait: :polynomially_longer, attempts: 5 do |job, error|
24
+ job.send(:record_terminal_failure!, error)
25
+ job.send(:enqueue_completion_check)
26
+ end
18
27
 
19
28
  retry_on CompletionKit::RateLimitError,
20
- wait: method(:rate_limit_wait), attempts: 5
29
+ wait: ->(executions) { rate_limit_wait(executions) }, attempts: 5 do |job, error|
30
+ job.send(:record_terminal_failure!, error)
31
+ job.send(:enqueue_completion_check)
32
+ end
21
33
 
22
34
  discard_on ActiveJob::DeserializationError
23
- discard_on CompletionKit::ConfigurationError
24
35
 
25
- rescue_from(StandardError) do |error|
26
- Rails.error.report(error, handled: true, context: { job: self.class.name, run_id: @run_id, response_id: @response_id })
27
- record_terminal_failure!(error)
28
- enqueue_completion_check
36
+ discard_on CompletionKit::ConfigurationError do |job, error|
37
+ job.send(:record_terminal_failure!, error)
38
+ job.send(:enqueue_completion_check)
29
39
  end
30
40
 
31
41
  before_perform do |job|
@@ -49,7 +59,12 @@ module CompletionKit
49
59
  raise ConfigurationError, client.configuration_errors.join(", ") unless client.configured?
50
60
 
51
61
  text = client.generate_completion(rendered, model: prompt.llm_model, temperature: run.temperature)
52
- raise StandardError, text.to_s.sub(/\AError:\s*/, "") if text.to_s.start_with?("Error:")
62
+
63
+ if text.to_s.start_with?("Error:")
64
+ record_terminal_failure!(ProviderError.from_client_error(text))
65
+ enqueue_completion_check
66
+ return
67
+ end
53
68
 
54
69
  if client.respond_to?(:temperature_dropped?) && client.temperature_dropped? && !run.temperature_ignored?
55
70
  run.update_columns(temperature_ignored: true)
@@ -14,20 +14,30 @@ module CompletionKit
14
14
  30 * executions
15
15
  end
16
16
 
17
+ rescue_from(StandardError) do |error|
18
+ Rails.error.report(error, handled: true, context: { job: self.class.name, run_id: @run_id, review_id: @review_id })
19
+ record_terminal_failure!(error)
20
+ enqueue_completion_check
21
+ end
22
+
17
23
  retry_on Faraday::TimeoutError,
18
24
  Faraday::ConnectionFailed,
19
- wait: :polynomially_longer, attempts: 5
25
+ wait: :polynomially_longer, attempts: 5 do |job, error|
26
+ job.send(:record_terminal_failure!, error)
27
+ job.send(:enqueue_completion_check)
28
+ end
20
29
 
21
30
  retry_on CompletionKit::RateLimitError,
22
- wait: method(:rate_limit_wait), attempts: 5
31
+ wait: ->(executions) { rate_limit_wait(executions) }, attempts: 5 do |job, error|
32
+ job.send(:record_terminal_failure!, error)
33
+ job.send(:enqueue_completion_check)
34
+ end
23
35
 
24
36
  discard_on ActiveJob::DeserializationError
25
- discard_on CompletionKit::ConfigurationError
26
37
 
27
- rescue_from(StandardError) do |error|
28
- Rails.error.report(error, handled: true, context: { job: self.class.name, run_id: @run_id, review_id: @review_id })
29
- record_terminal_failure!(error)
30
- enqueue_completion_check
38
+ discard_on CompletionKit::ConfigurationError do |job, error|
39
+ job.send(:record_terminal_failure!, error)
40
+ job.send(:enqueue_completion_check)
31
41
  end
32
42
 
33
43
  before_perform do |job|
@@ -52,15 +62,21 @@ module CompletionKit
52
62
  config = ApiConfig.for_model(run.judge_model).merge(judge_model: run.judge_model)
53
63
  judge = JudgeService.new(config)
54
64
 
55
- evaluation = judge.evaluate(
56
- response.response_text,
57
- response.expected_output,
58
- run.prompt&.template,
59
- criteria: metric.instruction.to_s,
60
- rubric_text: metric.display_rubric_text,
61
- input_data: response.input_data,
62
- human_examples: review_examples_for(metric, response)
63
- )
65
+ begin
66
+ evaluation = judge.evaluate(
67
+ response.response_text,
68
+ response.expected_output,
69
+ run.prompt&.template,
70
+ criteria: metric.instruction.to_s,
71
+ rubric_text: metric.display_rubric_text,
72
+ input_data: response.input_data,
73
+ human_examples: review_examples_for(metric, response)
74
+ )
75
+ rescue CompletionKit::ProviderError => e
76
+ record_terminal_failure!(e)
77
+ enqueue_completion_check
78
+ return
79
+ end
64
80
 
65
81
  review = response.reviews.find_or_initialize_by(metric_id: metric.id)
66
82
  current_metric_version = MetricVersion.ensure_current_for(metric)
@@ -13,6 +13,7 @@ module CompletionKit
13
13
  has_many :metric_group_memberships, dependent: :destroy
14
14
  has_many :metric_groups, through: :metric_group_memberships, source: :metric_group
15
15
  has_many :metric_versions, dependent: :destroy
16
+ has_many :run_metrics, dependent: :destroy
16
17
  has_many :reviews, dependent: :nullify
17
18
  has_many :dashboard_dismissals, as: :dismissable, dependent: :destroy
18
19
 
@@ -20,7 +20,7 @@ module CompletionKit
20
20
  human_examples: human_examples)
21
21
 
22
22
  response = @judge_client.generate_completion(judge_prompt, model: @judge_model)
23
- raise StandardError, response if response.start_with?("Error:")
23
+ raise CompletionKit::ProviderError.from_client_error(response) if response.start_with?("Error:")
24
24
  parse_judge_response(response)
25
25
  end
26
26
 
@@ -125,6 +125,8 @@
125
125
  <% end %>
126
126
  <% elsif review.check? && !review.passed.nil? %>
127
127
  <%= ck_check_badge(review.passed) %>
128
+ <% elsif review.status == "failed" %>
129
+ <span class="<%= ck_badge_classes(:failed) %>" title="<%= review.error_message.presence || "Judge failed" %>">Failed</span>
128
130
  <% else %>
129
131
  <span class="<%= ck_badge_classes(:pending) %>">Pending</span>
130
132
  <% end %>
@@ -13,4 +13,22 @@ module CompletionKit
13
13
  @retry_after = retry_after
14
14
  end
15
15
  end
16
+
17
+ class ProviderError < Error
18
+ attr_reader :status
19
+
20
+ def initialize(message = nil, status: nil)
21
+ super(message)
22
+ @status = status
23
+ end
24
+
25
+ def self.from_client_error(text)
26
+ detail = text.to_s.sub(/\AError:\s*/, "")
27
+ if (match = detail.match(/\A(\d{3})\s*-\s*(.*)/m))
28
+ new(match[2], status: match[1].to_i)
29
+ else
30
+ new(detail)
31
+ end
32
+ end
33
+ end
16
34
  end
@@ -1,3 +1,3 @@
1
1
  module CompletionKit
2
- VERSION = "0.27.2"
2
+ VERSION = "0.27.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: completion-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.2
4
+ version: 0.27.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damien Bastin