Class: DSPy::Predict

Inherits:
Module show all
Extended by:
T::Sig
Includes:
Mixins::InstrumentationHelpers, Mixins::StructBuilder, Mixins::TypeCoercion
Defined in:
lib/dspy/predict.rb

Direct Known Subclasses

ChainOfThought, CodeAct, ReAct

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Module

#call, #call_untyped, #lm

Constructor Details

#initialize(signature_class) ⇒ Predict

Returns a new instance of Predict.



39
40
41
42
43
# File 'lib/dspy/predict.rb', line 39

def initialize(signature_class)
  super()
  @signature_class = signature_class
  @prompt = Prompt.from_signature(signature_class)
end

Instance Attribute Details

#promptObject (readonly)

Returns the value of attribute prompt.



36
37
38
# File 'lib/dspy/predict.rb', line 36

def prompt
  @prompt
end

#signature_classObject (readonly)

Returns the value of attribute signature_class.



33
34
35
# File 'lib/dspy/predict.rb', line 33

def signature_class
  @signature_class
end

Instance Method Details

#add_examples(examples) ⇒ Object



76
77
78
# File 'lib/dspy/predict.rb', line 76

def add_examples(examples)
  with_prompt(@prompt.add_examples(examples))
end

#forward(**kwargs) ⇒ Object



81
82
83
84
# File 'lib/dspy/predict.rb', line 81

def forward(**kwargs)
  @last_input_values = kwargs.clone
  T.cast(forward_untyped(**kwargs), T.type_parameter(:O))
end

#forward_untyped(**input_values) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/dspy/predict.rb', line 87

def forward_untyped(**input_values)
  instrument_prediction('dspy.predict', @signature_class, input_values) do
    # Validate input
    validate_input_struct(input_values)
    
    # Call LM and process response
    output_attributes = lm.chat(self, input_values)
    processed_output = process_lm_output(output_attributes)
    
    # Create combined result struct
    create_prediction_result(input_values, processed_output)
  end
end

#system_signatureObject



47
48
49
# File 'lib/dspy/predict.rb', line 47

def system_signature
  @prompt.render_system_prompt
end

#user_signature(input_values) ⇒ Object



52
53
54
# File 'lib/dspy/predict.rb', line 52

def user_signature(input_values)
  @prompt.render_user_prompt(input_values)
end

#with_examples(examples) ⇒ Object



71
72
73
# File 'lib/dspy/predict.rb', line 71

def with_examples(examples)
  with_prompt(@prompt.with_examples(examples))
end

#with_instruction(instruction) ⇒ Object



66
67
68
# File 'lib/dspy/predict.rb', line 66

def with_instruction(instruction)
  with_prompt(@prompt.with_instruction(instruction))
end

#with_prompt(new_prompt) ⇒ Object



58
59
60
61
62
63
# File 'lib/dspy/predict.rb', line 58

def with_prompt(new_prompt)
  # Create a new instance with the same signature but updated prompt
  instance = self.class.new(@signature_class)
  instance.instance_variable_set(:@prompt, new_prompt)
  instance
end