Class: Desiru::Program

Inherits:
Object
  • Object
show all
Defined in:
lib/desiru/program.rb

Overview

Base class for composing multiple modules into programs Implements composition patterns for complex AI workflows

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config: {}, metadata: {}) ⇒ Program

Returns a new instance of Program.



9
10
11
12
13
14
15
16
# File 'lib/desiru/program.rb', line 9

def initialize(config: {}, metadata: {})
  @modules = {}
  @config = default_config.merge(config)
  @metadata = 
  @execution_trace = []

  setup_modules
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



7
8
9
# File 'lib/desiru/program.rb', line 7

def config
  @config
end

#metadataObject (readonly)

Returns the value of attribute metadata.



7
8
9
# File 'lib/desiru/program.rb', line 7

def 
  @metadata
end

#modulesObject (readonly)

Returns the value of attribute modules.



7
8
9
# File 'lib/desiru/program.rb', line 7

def modules
  @modules
end

Instance Method Details

#call(inputs = {}) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/desiru/program.rb', line 18

def call(inputs = {})
  @execution_trace.clear
  start_time = Time.now

  result = forward(inputs)

  execution_time = Time.now - start_time

  ProgramResult.new(
    result,
    metadata: {
      execution_time: execution_time,
      trace: @execution_trace.dup,
      program: self.class.name
    }
  )
rescue StandardError => e
  handle_error(e)
end

#forward(_inputs) ⇒ Object

Raises:

  • (NotImplementedError)


38
39
40
# File 'lib/desiru/program.rb', line 38

def forward(_inputs)
  raise NotImplementedError, 'Subclasses must implement #forward'
end

#optimize(optimizer, trainset, valset = nil) ⇒ Object



47
48
49
# File 'lib/desiru/program.rb', line 47

def optimize(optimizer, trainset, valset = nil)
  optimizer.compile(self, trainset: trainset, valset: valset)
end

#resetObject



42
43
44
45
# File 'lib/desiru/program.rb', line 42

def reset
  modules.each_value(&:reset)
  @execution_trace.clear
end

#to_hObject



51
52
53
54
55
56
57
58
# File 'lib/desiru/program.rb', line 51

def to_h
  {
    class: self.class.name,
    modules: modules.transform_values(&:to_h),
    config: config,
    metadata: 
  }
end