bitfab 0.65.3 → 0.65.5

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: 1ccbb4e0e912ec35fe388c4cdb2225c4fa3c4f5e020e87c7d52f81a3358907da
4
- data.tar.gz: 4e674dc9c1fb2e1c2ef6f5d5b1cf21146904a0d85989d7e41f25ce6c0b04c740
3
+ metadata.gz: a9c94aca223ea9794e110a16dae0e3e4f23ef45a2cf345c6bbaf396fc6b10b5f
4
+ data.tar.gz: 9c99a4266ec0109d155caeea5e1bb7792fb38c5e9d510e3552a2df60d192160a
5
5
  SHA512:
6
- metadata.gz: a5f9344e7be229c578f2fb875de96aa11f49487b24775eec15955f32d18ab4552067842af6b4a8f12041f6140ee21bafbd3983630d0929e00a35236fb427e95f
7
- data.tar.gz: 15bd45c45d9f6700edd7b96bbc792236441581763097307d13d4a14a76d0d8d733e5444c1586c9a24f6c990a8575e70851c37a80ff10b4f153bb84bb554e00c2
6
+ metadata.gz: fa01c2d028e06cc338df64527d011df63e0a01dcec25559b4816523c951aed2b55ab0034075c7c09babec22d927bb4e5f0654456e82fd76e5d41815d0851fa30
7
+ data.tar.gz: 6f865c897e2ac1975c1b2a64cfbdf5c933f24356db7294e97a8ce11712cbf1937b942701c5237cd62dd79a68ae422dfaf46ed6eba3545e6c8522bdf0070831af
data/lib/bitfab/client.rb CHANGED
@@ -58,7 +58,8 @@ module Bitfab
58
58
  @resolved_api_key = nil
59
59
  @api_key_warned = false
60
60
  @http_client = HttpClient.new(api_key: -> { resolve_api_key }, service_url: @service_url, timeout:)
61
- @http_client.configure_simulation_plan(enabled: simulation_plan, start: !api_key_resolved_lazily?)
61
+ @http_client.configure_simulation_plan(enabled: simulation_plan, start: !api_key_resolved_lazily?,
62
+ can_read: -> { simulation_plan_readable? })
62
63
  @datasets = Datasets.new(@http_client)
63
64
  @categories = Categories.new(@http_client)
64
65
  @organization_members = OrganizationMembers.new(@http_client)
@@ -607,7 +608,8 @@ module Bitfab
607
608
  end
608
609
  end
609
610
 
610
- on_complete&.call(result: recorded_result, error: recorded_error, ended_at:)
611
+ on_complete&.call(result: recorded_result, error: recorded_error, ended_at:,
612
+ contexts: span_contexts, prompt: span_prompt)
611
613
 
612
614
  span_data = span_data.merge("replay_reusable" => replay_reusable)
613
615
  output_json = finalize.nil? && !result.is_a?(Enumerator) && SelectiveReplay.fingerprint(final_result)
@@ -852,6 +854,13 @@ module Bitfab
852
854
  !resolve_api_key.nil?
853
855
  end
854
856
 
857
+ def simulation_plan_readable?
858
+ recording = capture_configured? || ReplayContext.current || SeedContext.current
859
+ recording && !lookup_api_key.nil?
860
+ rescue
861
+ false
862
+ end
863
+
855
864
  def tracing_enabled?
856
865
  return false unless capture_configured?
857
866
 
@@ -56,8 +56,8 @@ module Bitfab
56
56
  @close_condition = ConditionVariable.new
57
57
  end
58
58
 
59
- def configure_simulation_plan(enabled: true, start: true)
60
- @simulation_plan = SimulationPlan.new(self, enabled:)
59
+ def configure_simulation_plan(enabled: true, start: true, can_read: nil)
60
+ @simulation_plan = SimulationPlan.new(self, enabled:, can_read:)
61
61
  @simulation_plan.refresh if start
62
62
  @simulation_plan
63
63
  end
@@ -42,9 +42,10 @@ module Bitfab
42
42
  end
43
43
  end
44
44
 
45
- def initialize(reader, enabled: true)
45
+ def initialize(reader, enabled: true, can_read: nil)
46
46
  @reader = reader
47
47
  @enabled = enabled
48
+ @can_read = can_read
48
49
  @pid = Process.pid
49
50
  @mutex = Mutex.new
50
51
  @condition = ConditionVariable.new
@@ -56,25 +57,26 @@ module Bitfab
56
57
  @stopped = false
57
58
  @first_read_finished = false
58
59
  @first_read_deadline = nil
60
+ @read_started = false
59
61
  self.class.register(self)
60
62
  end
61
63
 
62
64
  def disabled?
63
- !@enabled || !ENV.fetch("BITFAB_DISABLE_SIM_PLAN", "").strip.empty?
65
+ switched_off? || (!@read_started && !readable?)
64
66
  end
65
67
 
66
68
  def refresh
67
69
  reset_after_fork
68
- return if disabled? || @stopped
70
+ return if disabled?
69
71
 
70
- @mutex.synchronize { start_reader(0) if @thread.nil? && now >= @refresh_after }
72
+ refresh_for_record
71
73
  end
72
74
 
73
75
  def send_span(payload, declared_node: false, discard: nil, &submit)
74
- refresh
76
+ refresh_for_record
75
77
  data = payload.dig("rawSpan", "span_data")
76
78
  key = payload["rootTraceFunctionKey"] || payload["traceFunctionKey"]
77
- if disabled? || key.nil? || !data.is_a?(Hash) || framework?(payload)
79
+ if switched_off? || key.nil? || !data.is_a?(Hash) || framework?(payload)
78
80
  submit.call(payload)
79
81
  return
80
82
  end
@@ -84,11 +86,11 @@ module Bitfab
84
86
  end
85
87
 
86
88
  def send_trace(payload, &submit)
87
- refresh
89
+ refresh_for_record
88
90
  entry = [payload, nil, submit]
89
91
  ready = @mutex.synchronize do
90
92
  id = trace_id(payload)
91
- if !disabled? && !@stopped && id && (@draining.include?(id) || @held.any? { |held| held[1] && trace_id(held[0]) == id })
93
+ if !switched_off? && !@stopped && id && (@draining.include?(id) || @held.any? { |held| held[1] && trace_id(held[0]) == id })
92
94
  hold(entry)
93
95
  else
94
96
  entry
@@ -172,6 +174,21 @@ module Bitfab
172
174
 
173
175
  private
174
176
 
177
+ def refresh_for_record
178
+ reset_after_fork
179
+ return if switched_off? || @stopped
180
+
181
+ @mutex.synchronize { start_reader(0) if @thread.nil? && now >= @refresh_after }
182
+ end
183
+
184
+ def switched_off?
185
+ !@enabled || !ENV.fetch("BITFAB_DISABLE_SIM_PLAN", "").strip.empty?
186
+ end
187
+
188
+ def readable?
189
+ @can_read.nil? || @can_read.call == true
190
+ end
191
+
175
192
  def now
176
193
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
177
194
  end
@@ -194,7 +211,7 @@ module Bitfab
194
211
 
195
212
  def hold(entry)
196
213
  @held << entry
197
- start_reader([@refresh_after - now, 0].max) if @thread.nil? && !@stopped && !disabled?
214
+ start_reader([@refresh_after - now, 0].max) if @thread.nil? && !@stopped && !switched_off?
198
215
  @held.shift if @held.length > MAX_HELD
199
216
  end
200
217
 
@@ -210,7 +227,7 @@ module Bitfab
210
227
  end
211
228
 
212
229
  def prepare(payload, key)
213
- return payload if key.nil? || disabled?
230
+ return payload if key.nil? || switched_off?
214
231
  return apply(payload, key) if @mutex.synchronize { @content_off }
215
232
 
216
233
  without_unread_content(payload)
@@ -232,6 +249,7 @@ module Bitfab
232
249
  end
233
250
 
234
251
  def start_reader(delay)
252
+ @read_started = true
235
253
  @first_read_deadline ||= now + delay + READ_TIMEOUT
236
254
  @thread = Thread.new { read_until_loaded(delay) }
237
255
  @thread.name = "bitfab-sim-plan"
@@ -270,7 +288,7 @@ module Bitfab
270
288
 
271
289
  def read_until_loaded(delay)
272
290
  pause(delay) if delay.positive?
273
- parsed = (disabled? || @stopped) ? nil : read_once
291
+ parsed = (switched_off? || @stopped) ? nil : read_once
274
292
  entries = @mutex.synchronize do
275
293
  @first_read_finished = true
276
294
  @content_off = parsed if parsed
@@ -53,6 +53,8 @@ module Bitfab
53
53
  :experiment_id,
54
54
  :span_data,
55
55
  :declared_node,
56
+ :contexts,
57
+ :prompt,
56
58
  keyword_init: true
57
59
  )
58
60
 
@@ -150,7 +152,7 @@ module Bitfab
150
152
  span_id: @owner.current_parent_span_id, surface: :trace, &body)
151
153
  end
152
154
 
153
- def complete(result:, error:, ended_at:)
155
+ def complete(result:, error:, ended_at:, contexts: nil, prompt: nil)
154
156
  return if @completed
155
157
 
156
158
  @completed = true
@@ -158,6 +160,8 @@ module Bitfab
158
160
  next if !entry || session.equal?(@owner)
159
161
 
160
162
  entry.error = error
163
+ entry.contexts = contexts
164
+ entry.prompt = prompt
161
165
  session.emit_configured(entry, result:)
162
166
  end
163
167
  end
@@ -741,8 +745,8 @@ module Bitfab
741
745
  declared_node: entry.declared_node == true,
742
746
  span_data: entry.span_data || {},
743
747
  function_name: entry.name,
744
- contexts: nil,
745
- prompt: nil,
748
+ contexts: entry.contexts,
749
+ prompt: entry.prompt,
746
750
  args: entry.args,
747
751
  kwargs: entry.kwargs,
748
752
  result:,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bitfab
4
- VERSION = "0.65.3"
4
+ VERSION = "0.65.5"
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.65.3
4
+ version: 0.65.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harvest Team