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 +4 -4
- data/lib/dspy/lm.rb +7 -19
- data/lib/dspy/mixins/instrumentation_helpers.rb +9 -23
- data/lib/dspy/version.rb +1 -1
- data/lib/dspy.rb +0 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84036f6f01324f792e9de3e85fb90092747a3a021072cb65ef02d0911832dd23
|
4
|
+
data.tar.gz: 368240d7747e0e381e39d117061aefa55161ec99b9a2dd4813b798f854e907b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
#
|
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?
|
50
|
-
#
|
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
|
96
|
-
def should_emit_lm_events?
|
97
|
-
|
98
|
-
|
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
|
-
#
|
33
|
-
|
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
|
65
|
-
sig { params(event_name: String
|
66
|
-
def should_emit_event?(event_name
|
67
|
-
|
68
|
-
|
69
|
-
#
|
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
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?
|