bitfab 0.12.3 → 0.12.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: 0f676920e42d9a98a73b84a843a5592159d9e93d85f72d4248703cef5a2eb47d
4
- data.tar.gz: 891ef7140bba23d6f55b14f97668f2561275305b2fa43f7ea795920e4d101c82
3
+ metadata.gz: a66f64bbe867d0adeafbebc9984413802c8ecf8ae47007078b8a3e9d336e5bd0
4
+ data.tar.gz: 726943a84542d9bc5ead1cc54b0c66d726edaf57ed03703588f63fd41fb67ecd
5
5
  SHA512:
6
- metadata.gz: 9384af8b49181607bb86e10c204370eb04b4a8fd76552172065e0c44e0cd6f1349a21cb56e7dae3ca2a308e35a0039d5d706129ae9ffe19e0268e4136d18521c
7
- data.tar.gz: 1c9a6edb28587660fa88afca67ebf6c2ab2e7d066721c707f907682f2f96d4a8aed62c6d486f42c133b9080729e228d3237b0125d2c33b83c3e98acf275aed16
6
+ metadata.gz: fb26e2388ac5585d8a74aeb8de4f2b8af12df1d6abf4c882560a96107de46afd6fa9a8c1fd99482ae5af6c49234f058f473338c00b91502494e0c078c65a052f
7
+ data.tar.gz: 9eedf94be719b11b2456ed0002eaeb01afc0b1ef42099850dcc4507096072efb593975a5fa92cef8a99fa224cb1873d0f6c41bfa9d343782f70989b542303da4
data/lib/bitfab/client.rb CHANGED
@@ -339,7 +339,10 @@ module Bitfab
339
339
  }
340
340
  span_data["input_serialized"] = marshalled_input if marshalled_input
341
341
  span_data["output_serialized"] = marshalled_output if marshalled_output
342
- span_data["error"] = error if error
342
+ if error
343
+ span_data["error"] = error
344
+ span_data["error_source"] = "code"
345
+ end
343
346
  span_data["contexts"] = contexts if contexts&.any?
344
347
  span_data["prompt"] = prompt if prompt
345
348
 
data/lib/bitfab/replay.rb CHANGED
@@ -147,10 +147,16 @@ module Bitfab
147
147
  end
148
148
 
149
149
  # Fetch span data and execute a single replay item.
150
+ #
151
+ # Any error while fetching the span, building the mock tree, or
152
+ # deserializing inputs is captured on the returned item's :error rather
153
+ # than propagated, so one bad trace never aborts the whole replay run
154
+ # (mirrors the TypeScript and Python SDKs' per-item rescue).
150
155
  def process_single_item(http_client, server_item, receiver, method_name, test_run_id, mock_strategy)
156
+ metrics = extract_server_item_metrics(server_item)
157
+
151
158
  span = http_client.get_external_span(server_item["externalSpanId"])
152
159
  item_data = extract_span_data(span)
153
- metrics = extract_server_item_metrics(server_item)
154
160
 
155
161
  mock_tree = nil
156
162
  if mock_strategy == "all" || mock_strategy == "marked"
@@ -169,6 +175,18 @@ module Bitfab
169
175
  mock_strategy:,
170
176
  mock_tree:
171
177
  )
178
+ rescue => e
179
+ warn "Bitfab: replay item for span #{server_item["externalSpanId"]} failed before execution: #{e.message}"
180
+ {
181
+ input: [],
182
+ result: nil,
183
+ original_output: nil,
184
+ error: e.message,
185
+ duration_ms: metrics&.dig(:duration_ms),
186
+ tokens: metrics&.dig(:tokens),
187
+ model: metrics&.dig(:model),
188
+ trace_id: nil
189
+ }
172
190
  end
173
191
 
174
192
  # Walk the children of a root span tree node depth-first and build a
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bitfab
4
- VERSION = "0.12.3"
4
+ VERSION = "0.12.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.12.3
4
+ version: 0.12.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harvest Team