Skip to content

Commit 6bc107e

Browse files
committed
feat: basic, configurable structured logging
1 parent 5ae6fb6 commit 6bc107e

File tree

10 files changed

+37
-17
lines changed

10 files changed

+37
-17
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
log/*.log
12
.idea
23
.byebug_history
34
.env

.rspec_status

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
example_id | status | run_time |
22
--------------------------------------------- | ------ | --------------- |
3-
./spec/dspy/chain_of_thought_spec.rb[1:1:1] | passed | 0.03328 seconds |
4-
./spec/dspy/chain_of_thought_spec.rb[1:1:2] | passed | 0.00204 seconds |
5-
./spec/dspy/colbertv2_rag_spec.rb[1:1] | passed | 0.00093 seconds |
6-
./spec/dspy/colbertv2_rag_spec.rb[1:2] | passed | 0.00308 seconds |
7-
./spec/dspy/ext/dry_schema_ext_spec.rb[1:1] | passed | 0.001 seconds |
8-
./spec/dspy/ext/dry_schema_ext_spec.rb[1:2] | passed | 0.00008 seconds |
9-
./spec/dspy/ext/dry_schema_ext_spec.rb[1:3] | passed | 0.00103 seconds |
3+
./spec/dspy/chain_of_thought_spec.rb[1:1:1] | passed | 0.03684 seconds |
4+
./spec/dspy/chain_of_thought_spec.rb[1:1:2] | passed | 0.0017 seconds |
5+
./spec/dspy/colbertv2_rag_spec.rb[1:1] | passed | 0.00079 seconds |
6+
./spec/dspy/colbertv2_rag_spec.rb[1:2] | passed | 0.00291 seconds |
7+
./spec/dspy/ext/dry_schema_ext_spec.rb[1:1] | passed | 0.00091 seconds |
8+
./spec/dspy/ext/dry_schema_ext_spec.rb[1:2] | passed | 0.00014 seconds |
9+
./spec/dspy/ext/dry_schema_ext_spec.rb[1:3] | passed | 0.00088 seconds |
1010
./spec/dspy/ext/dry_schema_ext_spec.rb[1:4] | passed | 0.00007 seconds |
11-
./spec/dspy/multi_stage_pipeline_spec.rb[1:1] | passed | 0.00164 seconds |
12-
./spec/dspy/multi_stage_pipeline_spec.rb[1:2] | passed | 0.00139 seconds |
13-
./spec/dspy/multi_stage_pipeline_spec.rb[1:3] | passed | 0.005 seconds |
14-
./spec/dspy/multi_stage_pipeline_spec.rb[1:4] | passed | 0.00336 seconds |
15-
./spec/dspy/predict_spec.rb[1:1:1] | passed | 0.00153 seconds |
16-
./spec/dspy/predict_spec.rb[1:1:2] | passed | 0.00115 seconds |
11+
./spec/dspy/multi_stage_pipeline_spec.rb[1:1] | passed | 0.00167 seconds |
12+
./spec/dspy/multi_stage_pipeline_spec.rb[1:2] | passed | 0.00137 seconds |
13+
./spec/dspy/multi_stage_pipeline_spec.rb[1:3] | passed | 0.00367 seconds |
14+
./spec/dspy/multi_stage_pipeline_spec.rb[1:4] | passed | 0.00536 seconds |
15+
./spec/dspy/predict_spec.rb[1:1:1] | passed | 0.0017 seconds |
16+
./spec/dspy/predict_spec.rb[1:1:2] | passed | 0.00166 seconds |
1717
./spec/dspy/signature_spec.rb[1:1] | passed | 0.00006 seconds |
18-
./spec/dspy/signature_spec.rb[1:2] | passed | 0.00006 seconds |
19-
./spec/dspy_spec.rb[1:1:1] | passed | 0.00031 seconds |
20-
./spec/dspy_spec.rb[1:1:2] | passed | 0.00004 seconds |
18+
./spec/dspy/signature_spec.rb[1:2] | passed | 0.00005 seconds |
19+
./spec/dspy_spec.rb[1:1:1] | passed | 0.00035 seconds |
20+
./spec/dspy_spec.rb[1:1:2] | passed | 0.00006 seconds |

Gemfile.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ PATH
33
specs:
44
dspy (0.1.0)
55
dry-configurable (~> 1.0)
6+
dry-logger (~> 1.0)
67
dry-schema (~> 1.14)
78
ruby_llm (~> 1.0)
89

@@ -29,6 +30,7 @@ GEM
2930
zeitwerk (~> 2.6)
3031
dry-inflector (1.2.0)
3132
dry-initializer (3.2.0)
33+
dry-logger (1.0.4)
3234
dry-logic (1.6.0)
3335
bigdecimal
3436
concurrent-ruby (~> 1.0)

dspy.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@ Gem::Specification.new do |spec|
2525
spec.add_dependency "ruby_llm", "~> 1.0"
2626
spec.add_dependency "dry-schema", "~> 1.14"
2727
spec.add_dependency "dry-configurable", "~> 1.0"
28+
spec.add_dependency "dry-logger", "~> 1.0"
2829
# Development dependencies are already specified in the Gemfile
2930
end

lib/dspy.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22
require 'ruby_llm'
33
require 'dry-schema'
44
require 'dry-configurable'
5+
require 'dry/logger'
56
require_relative 'dspy/ext/dry_schema'
67

78
module DSPy
89
extend Dry::Configurable
910
setting :lm
11+
setting :logger, default: Dry.Logger(:dspy, formatter: :string)
12+
13+
def self.logger
14+
config.logger
15+
end
1016
end
1117

1218
require_relative 'dspy/types'

lib/dspy/ext/dry_schema.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
require 'dry/schema/version'
2+
3+
if Dry::Schema::VERSION > Gem::Version.new('1.15')
4+
raise 'Double check this monkey path before upgrading drys-schema.'
5+
end
6+
17
Dry::Schema.load_extensions(:json_schema)
28
# Monkey patch Macros::Core to add meta method
39
module Dry

lib/dspy/predict.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def lm
5252
end
5353

5454
def forward(**input_values)
55+
DSPy.logger.info( module: self.class.to_s, **input_values)
5556
result = @signature_class.input_schema.call(input_values)
5657
if result.success?
5758
output_attributes = lm.chat(self, input_values)

log/.gitkeep

Whitespace-only changes.

spec/dspy/predict_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
describe 'sentiment classification example' do
1111
before do
12+
1213
VCR.use_cassette('openai/gpt4o-mini/classify_sentiment_v2') do
1314
class Classify < DSPy::Signature
1415
description "Classify sentiment of a given sentence."
@@ -23,7 +24,6 @@ class Classify < DSPy::Signature
2324
required(:confidence).value(:float).meta(description: 'The confidence score for the classification')
2425
end
2526
end
26-
2727
# Create the predictor
2828
@classify = DSPy::Predict.new(Classify)
2929

spec/spec_helper.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
require 'dspy'
77

8+
DSPy.configure do |c|
9+
c.logger = Dry.Logger(:dspy, formatter: :string) { |s| s.add_backend(stream: "log/test.log") }
10+
end
811

912
VCR.configure do |config|
1013
config.cassette_library_dir = "spec/vcr_cassettes"

0 commit comments

Comments
 (0)