completion-kit 0.28.38 → 0.28.40

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: 0d1ac95215866b0de18d662ad0c690780a31b77cf163edd099a3a4b98d6e2f80
4
- data.tar.gz: e016b642179a75138333d5d9bb5d1781e296349ed3952df828e8b154d4412518
3
+ metadata.gz: ecdbb9977e07a943af3309aa8e1353ebaa16e7556a7bd362c5d2b7a63812d15e
4
+ data.tar.gz: 9b3ff099f006237a04d26040c3cfeab2fe331ac7b07e4f5aa3fb016839182800
5
5
  SHA512:
6
- metadata.gz: 43f8b0575d21007a494f37dfc49e95dadfc140cc4d33e20137baba7deecbc6b81bdf03cee4ebbac80e1122d01a0b9b4c68d37e8e91f4aaf7e9c0437cc6fa20a0
7
- data.tar.gz: f115a337c2b5b621755a421e1f2ddd1caacfd068db491872b728aa5f181beed9029e5d10b839169b822836025408854acbe20903ef869b33d15410f8f1da83bd
6
+ metadata.gz: 549b39f898a3951b4426bc71f8b2665fa88ccea18bd21e290fd91ee60ca80cec64deff6de6654d0037ccf20b4a3e929b44fde79a74965bf3e5bb859721307f9d
7
+ data.tar.gz: efa593027d5439bd970f6cbb74479bd2d59063ebff99a5cc0b767788661fdf9605e55f7fdc1a652eef101f845d3367031fc089a168c8583a4f4ca556de525366
@@ -1214,27 +1214,6 @@ tr:hover .ck-chip--publish {
1214
1214
  border-top: 1px dashed var(--ck-line);
1215
1215
  }
1216
1216
 
1217
- .ck-run-status__retry {
1218
- appearance: none;
1219
- font-family: var(--ck-mono);
1220
- font-size: 0.74rem;
1221
- font-weight: 600;
1222
- letter-spacing: 0.12em;
1223
- text-transform: uppercase;
1224
- padding: 0.7rem 1.1rem;
1225
- border: 1px solid rgba(248, 113, 113, 0.5);
1226
- background: rgba(248, 113, 113, 0.08);
1227
- color: var(--ck-danger);
1228
- border-radius: var(--ck-radius);
1229
- cursor: pointer;
1230
- transition: background 0.15s, border-color 0.15s;
1231
- }
1232
-
1233
- .ck-run-status__retry:hover {
1234
- background: rgba(248, 113, 113, 0.16);
1235
- border-color: var(--ck-danger);
1236
- }
1237
-
1238
1217
  .ck-run-status__cells {
1239
1218
  display: flex;
1240
1219
  align-items: stretch;
@@ -25,6 +25,14 @@ module CompletionKit
25
25
  render partial, runs: runs
26
26
  end
27
27
 
28
+ def ck_retry_failures_label(generated_failed, judged_failed)
29
+ if generated_failed.zero?
30
+ "Retry scoring on #{pluralize(judged_failed, "response")}"
31
+ else
32
+ "Retry #{pluralize(generated_failed + judged_failed, "failed response")}"
33
+ end
34
+ end
35
+
28
36
  def ck_button_classes(tone = :dark, variant: :solid)
29
37
  base = "ck-button"
30
38
 
@@ -57,10 +57,14 @@ module CompletionKit
57
57
  def fully_reviewed?
58
58
  metric_ids = run.metric_ids
59
59
  return true if metric_ids.empty?
60
- reviewed_metric_ids = reviews.select { |review| HasJobStatus::TERMINAL_STATUSES.include?(review.status) }.map(&:metric_id).uniq
60
+ reviewed_metric_ids = reviews.select { |review| review.status == "succeeded" }.map(&:metric_id).uniq
61
61
  (metric_ids - reviewed_metric_ids).empty?
62
62
  end
63
63
 
64
+ def scoring_failed?
65
+ reviews.any? { |review| review.status == "failed" }
66
+ end
67
+
64
68
  private
65
69
 
66
70
  def requires_response_text?
@@ -5,6 +5,12 @@ module CompletionKit
5
5
 
6
6
  STATUSES = %w[pending running completed failed].freeze
7
7
  INSERT_BATCH_SIZE = 1000
8
+ REVIEW_RETRY_RESET = {
9
+ status: "pending",
10
+ attempts: 0,
11
+ error_provider: nil, error_class: nil, error_status: nil, error_message: nil,
12
+ ai_score: nil, passed: nil, ai_feedback: nil
13
+ }.freeze
8
14
 
9
15
  belongs_to :prompt, optional: true
10
16
  belongs_to :dataset, optional: true
@@ -492,15 +498,21 @@ module CompletionKit
492
498
  def retry_failures!(only: nil)
493
499
  scope = responses.where(status: "failed")
494
500
  scope = scope.where(id: only) if only.present?
501
+ failed_response_ids = scope.pluck(:id)
502
+
503
+ # A response can generate fine and still have a review blow up, so those
504
+ # reviews are retryable on their own without regenerating the response.
505
+ unscored = Review.where(status: "failed")
506
+ .where.not(metric_id: nil)
507
+ .where(response_id: responses.where(status: "succeeded").select(:id))
508
+ unscored = unscored.where(response_id: only) if only.present?
509
+ unscored_pairs = unscored.pluck(:response_id, :metric_id)
510
+
511
+ return self if failed_response_ids.empty? && unscored_pairs.empty?
495
512
 
496
513
  transaction do
497
- failed_response_ids = scope.pluck(:id)
498
- Review.where(response_id: failed_response_ids, status: "failed").update_all(
499
- status: "pending",
500
- attempts: 0,
501
- error_provider: nil, error_class: nil, error_status: nil, error_message: nil,
502
- ai_score: nil, passed: nil, ai_feedback: nil
503
- )
514
+ Review.where(response_id: failed_response_ids, status: "failed").update_all(REVIEW_RETRY_RESET)
515
+ unscored.update_all(REVIEW_RETRY_RESET)
504
516
  scope.update_all(
505
517
  status: "pending",
506
518
  attempts: 0,
@@ -509,10 +521,25 @@ module CompletionKit
509
521
  )
510
522
  update!(status: "running")
511
523
  failed_response_ids.each { |rid| GenerateRowJob.perform_later(id, rid) }
524
+ enqueue_review_retries(unscored_pairs)
512
525
  end
513
526
  self
514
527
  end
515
528
 
529
+ def enqueue_review_retries(pairs)
530
+ return if pairs.empty?
531
+
532
+ kinds = Metric.where(id: pairs.map(&:last).uniq).pluck(:id, :metric_type).to_h
533
+ pairs.each do |response_id, metric_id|
534
+ if kinds[metric_id] == "check"
535
+ CheckReviewJob.perform_later(response_id, metric_id, id)
536
+ else
537
+ JudgeReviewJob.perform_later(response_id, metric_id, id)
538
+ end
539
+ end
540
+ RunCompletionCheckJob.perform_later(id)
541
+ end
542
+
516
543
  def progress_snapshot
517
544
  generated_done = responses.where(status: "succeeded").count
518
545
  generated_failed = responses.where(status: "failed").count
@@ -54,7 +54,9 @@
54
54
  <span class="ck-chip ck-chip--warning">Retrying <%= response.attempts %>/5</span>
55
55
  <% end %>
56
56
  <% when "succeeded" %>
57
- <% if response.fully_reviewed? %>
57
+ <% if response.scoring_failed? && run.status != "running" %>
58
+ <span class="ck-chip ck-chip--danger">Failed</span>
59
+ <% elsif response.fully_reviewed? %>
58
60
  <span class="ck-chip ck-chip--done">Done</span>
59
61
  <% elsif run.status == "running" %>
60
62
  <span class="ck-chip">Judging</span>
@@ -111,9 +111,10 @@
111
111
  </div>
112
112
 
113
113
  <% if failed_count > 0 %>
114
- <%= button_to retry_failures_run_path(run), method: :post, class: "ck-run-status__retry", form_class: "ck-run-status__action" do %>
115
- Retry <%= failed_count %> failed <%= "case".pluralize(failed_count) %>
116
- <% end %>
114
+ <%= button_to ck_retry_failures_label(snap[:generated_failed], snap[:judged_failed]),
115
+ retry_failures_run_path(run), method: :post,
116
+ class: ck_button_classes(:light, variant: :outline),
117
+ form_class: "ck-run-status__action" %>
117
118
  <% end %>
118
119
  </section>
119
120
  <% end %>
@@ -1,3 +1,3 @@
1
1
  module CompletionKit
2
- VERSION = "0.28.38"
2
+ VERSION = "0.28.40"
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.28.38
4
+ version: 0.28.40
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damien Bastin