Class: DeepAgents::DeepAgentState

Inherits:
Object
  • Object
show all
Defined in:
lib/deepagents/state.rb

Overview

Deep agent state class

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDeepAgentState

Returns a new instance of DeepAgentState.



47
48
49
50
51
# File 'lib/deepagents/state.rb', line 47

def initialize
  @todos = []
  @files = {}
  @messages = []
end

Instance Attribute Details

#filesObject

Returns the value of attribute files.



45
46
47
# File 'lib/deepagents/state.rb', line 45

def files
  @files
end

#messagesObject

Returns the value of attribute messages.



45
46
47
# File 'lib/deepagents/state.rb', line 45

def messages
  @messages
end

#todosObject

Returns the value of attribute todos.



45
46
47
# File 'lib/deepagents/state.rb', line 45

def todos
  @todos
end

Instance Method Details

#[](key) ⇒ Object



100
101
102
# File 'lib/deepagents/state.rb', line 100

def [](key)
  get(key)
end

#[]=(key, value) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/deepagents/state.rb', line 104

def []=(key, value)
  case key.to_s
  when "todos"
    self.todos = value
  when "files"
    self.files = value
  when "messages"
    self.messages = value
  else
    raise ArgumentError, "Unknown state key: #{key}"
  end
end

#get(key, default = nil) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/deepagents/state.rb', line 67

def get(key, default = nil)
  case key.to_s
  when "todos"
    @todos
  when "files"
    @files
  when "messages"
    @messages
  else
    default
  end
end

#to_hObject



117
118
119
120
121
122
123
# File 'lib/deepagents/state.rb', line 117

def to_h
  {
    todos: @todos.map(&:to_h),
    files: @files,
    messages: @messages
  }
end

#update(todos: nil, files: nil, messages: nil) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/deepagents/state.rb', line 80

def update(todos: nil, files: nil, messages: nil)
  begin
    if todos
      @todos = validate_todos(todos)
    end
    
    if files
      raise ArgumentError, "Files must be a hash" unless files.is_a?(Hash)
      @files.merge!(files)
    end
    
    if messages
      raise ArgumentError, "Messages must be an array" unless messages.is_a?(Array)
      @messages += messages
    end
  rescue => e
    raise StateError, "Failed to update state: #{e.message}"
  end
end