bitfab 0.64.7 → 0.64.8

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: 1f867438c2e7008a72787a1bf61ad853c22964587223e98b73827dfbc0546675
4
- data.tar.gz: 87130f50d01f7150a5fca9134c5aa444ad31884efbed998aeb3e575d4759d3c4
3
+ metadata.gz: 6999d067c0ee15b7098bd4a432de082c0993b403178de77fd3a71c00ec6d1558
4
+ data.tar.gz: 5fe41dfe83313ca0413369680a25aaf09244a25dd40944b7bb0bc035267e7cfd
5
5
  SHA512:
6
- metadata.gz: 71bf77c48e836cf432734391762cd0fcfa3f0f38efa7451919dc982a00b8d8f2332b34e5b08d980d044d778f8db2fc8ddacf2f88f754d061637b51452fe56e49
7
- data.tar.gz: 364a28104d7c944b78bae89c93dacf459240cb877197ff9c4fca25f8d98cac82ddc9b8c418e9e208d6d0152e093789665fff7eba6ee177e8ab132c757ec3f8c8
6
+ metadata.gz: 691bf9d5734641198986549b3888d0b488374a21fc58daf80d6afe2e19a803b6f8e76ccc7974cd4abe6969993ff6655a515384f73aeaa4e26a4044af6bc93f7d
7
+ data.tar.gz: bd9a1aa20a2fcf7937daacb44022e1f6b4211bda69f145e075c5ad16c408417e5571f948016901118be5cb211d094c11d7c349f4dca6ecf82ba7d011a6aeca26
data/lib/bitfab/labels.rb CHANGED
@@ -14,8 +14,8 @@ module Bitfab
14
14
  @http_client = http_client
15
15
  end
16
16
 
17
- def save(label:, annotation:, trace_id: nil, original_trace_id: nil, attempt: nil,
18
- confidence: nil, experiment_id: nil, assertion_id: nil, evidence: EVIDENCE_UNSET, test_run_id: nil)
17
+ def save(label:, annotation:, assertion_id:, trace_id: nil, original_trace_id: nil, attempt: nil,
18
+ confidence: nil, experiment_id: nil, evidence: EVIDENCE_UNSET, test_run_id: nil)
19
19
  experiment_id = Bitfab.resolve_experiment_id(experiment_id, test_run_id)
20
20
  update = label_target(trace_id:, original_trace_id:, attempt:, assertion_id:)
21
21
  update["label"] = label
@@ -27,6 +27,7 @@ module Bitfab
27
27
 
28
28
  def save_all(labels, experiment_id: nil, test_run_id: nil)
29
29
  experiment_id = Bitfab.resolve_experiment_id(experiment_id, test_run_id)
30
+ require_assertion_ids(labels)
30
31
  payload = {"labels" => labels}
31
32
  unless experiment_id.nil?
32
33
  payload["experimentId"] = experiment_id
@@ -35,7 +36,7 @@ module Bitfab
35
36
  @http_client.request(LABELS_PATH, payload)["labels"]
36
37
  end
37
38
 
38
- def skip(trace_id: nil, original_trace_id: nil, attempt: nil, experiment_id: nil, assertion_id: nil,
39
+ def skip(assertion_id:, trace_id: nil, original_trace_id: nil, attempt: nil, experiment_id: nil,
39
40
  test_run_id: nil, annotation: nil)
40
41
  experiment_id = Bitfab.resolve_experiment_id(experiment_id, test_run_id)
41
42
  update = label_target(trace_id:, original_trace_id:, attempt:, assertion_id:).merge("skip" => true)
@@ -49,16 +50,15 @@ module Bitfab
49
50
  save_all([update.merge("archive" => true)], experiment_id:).first
50
51
  end
51
52
 
52
- def save_human(label:, annotation:, trace_id:, confidence: nil, assertion_id: nil,
53
- evidence: EVIDENCE_UNSET)
54
- update = {"traceId" => trace_id, "label" => label, "annotation" => annotation}
55
- update["assertionId"] = assertion_id unless assertion_id.nil?
53
+ def save_human(label:, annotation:, trace_id:, assertion_id:, confidence: nil, evidence: EVIDENCE_UNSET)
54
+ update = {"traceId" => trace_id, "assertionId" => assertion_id, "label" => label, "annotation" => annotation}
56
55
  update["confidence"] = confidence unless confidence.nil?
57
56
  update["evidence"] = evidence unless evidence.equal?(EVIDENCE_UNSET)
58
57
  save_human_all([update]).first
59
58
  end
60
59
 
61
60
  def save_human_all(labels)
61
+ require_human_assertion_ids(labels)
62
62
  @http_client.request(HUMAN_LABELS_PATH, {"labels" => labels})["labels"]
63
63
  end
64
64
 
@@ -83,6 +83,35 @@ module Bitfab
83
83
 
84
84
  private
85
85
 
86
+ def require_assertion_ids(labels)
87
+ unscoped = labels.reject do |entry|
88
+ entry_value(entry, "archive") == true || !blank?(entry_value(entry, "assertionId"))
89
+ end
90
+ return if unscoped.empty?
91
+
92
+ targets = unscoped.map { |entry| entry_value(entry, "traceId") || entry_value(entry, "originalTraceId") }
93
+ raise ArgumentError, "Agent verdicts must name an assertion: #{targets.join(", ")}. " \
94
+ "Pass the assertion_id of the assertion each verdict scores to labels.save, save_all, and skip. " \
95
+ "Only archive may omit it, to clear an old whole-trace verdict."
96
+ end
97
+
98
+ def require_human_assertion_ids(labels)
99
+ unscoped = labels.select { |entry| blank?(entry_value(entry, "assertionId")) }
100
+ return if unscoped.empty?
101
+
102
+ targets = unscoped.map { |entry| entry_value(entry, "traceId") }
103
+ raise ArgumentError, "Human verdicts must name an assertion: #{targets.join(", ")}. " \
104
+ "Pass the assertion_id of the assertion each verdict scores to labels.save_human and save_human_all."
105
+ end
106
+
107
+ def entry_value(entry, key)
108
+ entry.key?(key) ? entry[key] : entry[key.to_sym]
109
+ end
110
+
111
+ def blank?(value)
112
+ value.nil? || value.to_s.empty?
113
+ end
114
+
86
115
  def label_target(trace_id:, original_trace_id:, attempt:, assertion_id:)
87
116
  if trace_id.nil? == original_trace_id.nil?
88
117
  raise ArgumentError, "Pass exactly one of trace_id or original_trace_id. " \
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bitfab
4
- VERSION = "0.64.7"
4
+ VERSION = "0.64.8"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitfab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.64.7
4
+ version: 0.64.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harvest Team