dspy 0.5.0 → 0.5.1

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: fd8c98014ede76d7f232ebbb1e46789efa57fdca83203548d0e9b564054d859d
4
- data.tar.gz: f654cf96ac2976fbdd101e6d9d3b5b69346a5a32857cfcff2683e659173c9483
3
+ metadata.gz: 84036f6f01324f792e9de3e85fb90092747a3a021072cb65ef02d0911832dd23
4
+ data.tar.gz: 368240d7747e0e381e39d117061aefa55161ec99b9a2dd4813b798f854e907b2
5
5
  SHA512:
6
- metadata.gz: 425bf005503285726f84aff2009e53cfcad853afc5b11cce7b600a978e5546ddf8cddd8d9e50d9e54701c26834ff47511d34719bf1a2f78c60f8e8b17a5d92e2
7
- data.tar.gz: 6c2f6eeb7686a9e116642f8097154aee5610cfe75542973e973b4ba851f1c7428e71f6241a9502b7489fad40a59f35921fc377aa3af008fd506a17d18043320a
6
+ metadata.gz: fe445ba22336550e234359eea194aa105f204332f117b44c560a9b170ec5f126192647f9edcba09a991fda1f1bcec8144239362cb95698b32b0526efd343d587
7
+ data.tar.gz: b47bbd52e43b765009778c110dd58a69eb75873ce1e8a17dc0fe33c388e7c7dfd8cfcb2f848b0bc81102487acba5230a47d7a001501462ea7f9c7a1b0605fc05
data/lib/dspy/lm.rb CHANGED
@@ -39,15 +39,12 @@ module DSPy
39
39
  input_text = messages.map { |m| m[:content] }.join(' ')
40
40
  input_size = input_text.length
41
41
 
42
- # Check trace level to decide instrumentation strategy
43
- trace_level = DSPy.config.instrumentation.trace_level
44
-
45
- # Extract token usage and prepare consolidated payload
42
+ # Use smart consolidation: emit LM events only when not in nested context
46
43
  response = nil
47
44
  token_usage = {}
48
45
 
49
- if should_emit_lm_events?(trace_level)
50
- # Detailed mode: emit all LM events as before
46
+ if should_emit_lm_events?
47
+ # Emit all LM events when not in nested context
51
48
  response = Instrumentation.instrument('dspy.lm.request', {
52
49
  gen_ai_operation_name: 'chat',
53
50
  gen_ai_system: provider,
@@ -92,19 +89,10 @@ module DSPy
92
89
 
93
90
  private
94
91
 
95
- # Determines if LM-level events should be emitted based on trace level
96
- def should_emit_lm_events?(trace_level)
97
- case trace_level
98
- when :minimal
99
- false # Never emit LM events in minimal mode
100
- when :standard
101
- # In standard mode, emit LM events only if we're not in a nested context
102
- !is_nested_context?
103
- when :detailed
104
- true # Always emit LM events in detailed mode
105
- else
106
- true
107
- end
92
+ # Determines if LM-level events should be emitted using smart consolidation
93
+ def should_emit_lm_events?
94
+ # Emit LM events only if we're not in a nested context (smart consolidation)
95
+ !is_nested_context?
108
96
  end
109
97
 
110
98
  # Determines if we're in a nested context where higher-level events are being emitted
@@ -29,10 +29,8 @@ module DSPy
29
29
  base_payload = prepare_base_instrumentation_payload(signature_class, input_values)
30
30
  full_payload = base_payload.merge(additional_payload)
31
31
 
32
- # Check if we should emit this event based on trace level
33
- trace_level = DSPy.config.instrumentation.trace_level
34
-
35
- if should_emit_event?(event_name, trace_level)
32
+ # Use smart consolidation: skip nested events when higher-level events are being emitted
33
+ if should_emit_event?(event_name)
36
34
  Instrumentation.instrument(event_name, full_payload) do
37
35
  yield
38
36
  end
@@ -61,27 +59,15 @@ module DSPy
61
59
  }.merge(additional_data))
62
60
  end
63
61
 
64
- # Determines if an event should be emitted based on trace level
65
- sig { params(event_name: String, trace_level: Symbol).returns(T::Boolean) }
66
- def should_emit_event?(event_name, trace_level)
67
- case trace_level
68
- when :minimal
69
- # Only emit the highest-level events (chain_of_thought, react, etc.)
62
+ # Determines if an event should be emitted using smart consolidation
63
+ sig { params(event_name: String).returns(T::Boolean) }
64
+ def should_emit_event?(event_name)
65
+ # Smart consolidation: skip nested events when higher-level events are being emitted
66
+ if is_nested_context?
67
+ # If we're in a nested context, only emit higher-level events
70
68
  event_name.match?(/^dspy\.(chain_of_thought|react)$/)
71
- when :standard
72
- # Emit consolidated events - skip nested events when a higher-level event is being emitted
73
- # This is the key change: detect if we're in a nested context and skip lower-level events
74
- if is_nested_context?
75
- # If we're in a nested context, only emit higher-level events
76
- event_name.match?(/^dspy\.(chain_of_thought|react)$/)
77
- else
78
- # If we're not in a nested context, emit all events normally
79
- true
80
- end
81
- when :detailed
82
- # Emit all events with additional correlation information
83
- true
84
69
  else
70
+ # If we're not in a nested context, emit all events normally
85
71
  true
86
72
  end
87
73
  end
data/lib/dspy/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DSPy
4
- VERSION = "0.5.0"
4
+ VERSION = "0.5.1"
5
5
  end
data/lib/dspy.rb CHANGED
@@ -27,7 +27,6 @@ module DSPy
27
27
  setting :enabled, default: false
28
28
  setting :subscribers, default: []
29
29
  setting :sampling_rate, default: 1.0
30
- setting :trace_level, default: :standard
31
30
  setting :async_processing, default: false
32
31
  setting :buffer_size, default: 1000
33
32
  setting :flush_interval, default: 30
@@ -89,7 +88,6 @@ module DSPy
89
88
  raise ArgumentError, "Sampling rate must be between 0.0 and 1.0" unless config.sampling_rate.between?(0.0, 1.0)
90
89
  raise ArgumentError, "Buffer size must be positive" unless config.buffer_size > 0
91
90
  raise ArgumentError, "Flush interval must be positive" unless config.flush_interval > 0
92
- raise ArgumentError, "Invalid trace level" unless [:minimal, :standard, :detailed].include?(config.trace_level)
93
91
  raise ArgumentError, "Invalid timestamp format" unless config.timestamp_format.is_a?(TimestampFormat)
94
92
 
95
93
  if config.enabled && config.subscribers.empty?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dspy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vicente Reig Rincón de Arellano