Class: RailsConsoleAi::Agent
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- RailsConsoleAi::Agent
- Defined in:
- app/models/rails_console_ai/agent.rb
Constant Summary collapse
- STATUS_PROPOSED =
'proposed'.freeze
- STATUS_APPROVED =
'approved'.freeze
- STATUSES =
[STATUS_PROPOSED, STATUS_APPROVED].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #approve!(approved_by:) ⇒ Object
- #approved? ⇒ Boolean
- #body ⇒ Object
- #content=(value) ⇒ Object
- #description ⇒ Object
- #max_rounds ⇒ Object
- #model ⇒ Object
- #parsed ⇒ Object
- #proposed? ⇒ Boolean
- #to_hash ⇒ Object
- #tools ⇒ Object
- #update_with_version!(attrs, edited_by: nil, change_note: nil, preserve_approval: false) ⇒ Object
Class Method Details
.connection ⇒ Object
28 29 30 31 32 33 34 35 36 |
# File 'app/models/rails_console_ai/agent.rb', line 28 def self.connection klass = RailsConsoleAi.configuration.connection_class if klass klass = Object.const_get(klass) if klass.is_a?(String) klass.connection else super end end |
.record_use!(id) ⇒ Object
56 57 58 59 60 61 62 63 64 65 |
# File 'app/models/rails_console_ai/agent.rb', line 56 def self.record_use!(id) where(id: id).update_all([ 'use_count = COALESCE(use_count, 0) + 1, last_used_at = ?', Time.now.utc ]) true rescue ::ActiveRecord::ActiveRecordError => e RailsConsoleAi.logger.warn("RailsConsoleAi::Agent.record_use!(#{id.inspect}) failed: #{e.}") false end |
Instance Method Details
#approve!(approved_by:) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'app/models/rails_console_ai/agent.rb', line 110 def approve!(approved_by:) raise ArgumentError, 'approved_by is required' if approved_by.to_s.strip.empty? update_with_version!( { status: STATUS_APPROVED, approved_by: approved_by, approved_at: Time.now.utc }, edited_by: approved_by, change_note: "Approved by #{approved_by}", preserve_approval: true ) end |
#approved? ⇒ Boolean
54 |
# File 'app/models/rails_console_ai/agent.rb', line 54 def approved?; status.to_s == STATUS_APPROVED; end |
#body ⇒ Object
48 |
# File 'app/models/rails_console_ai/agent.rb', line 48 def body; parsed['body']; end |
#content=(value) ⇒ Object
42 43 44 45 |
# File 'app/models/rails_console_ai/agent.rb', line 42 def content=(value) @parsed = nil super end |
#description ⇒ Object
47 |
# File 'app/models/rails_console_ai/agent.rb', line 47 def description; parsed['description']; end |
#max_rounds ⇒ Object
49 |
# File 'app/models/rails_console_ai/agent.rb', line 49 def max_rounds; parsed['max_rounds']; end |
#model ⇒ Object
50 |
# File 'app/models/rails_console_ai/agent.rb', line 50 def model; parsed['model']; end |
#parsed ⇒ Object
38 39 40 |
# File 'app/models/rails_console_ai/agent.rb', line 38 def parsed @parsed ||= (RailsConsoleAi::AgentLoader.parse(content.to_s) || {}) end |
#proposed? ⇒ Boolean
53 |
# File 'app/models/rails_console_ai/agent.rb', line 53 def proposed?; status.to_s == STATUS_PROPOSED; end |
#to_hash ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/models/rails_console_ai/agent.rb', line 67 def to_hash { 'id' => id, 'name' => name, 'description' => description, 'body' => body, 'max_rounds' => max_rounds, 'model' => model, 'tools' => tools, 'content' => content, 'status' => status, 'approved_by' => approved_by, 'approved_at' => approved_at, 'use_count' => use_count, 'last_used_at' => last_used_at, 'source' => :db, 'updated_at' => updated_at } end |
#tools ⇒ Object
51 |
# File 'app/models/rails_console_ai/agent.rb', line 51 def tools; Array(parsed['tools']); end |
#update_with_version!(attrs, edited_by: nil, change_note: nil, preserve_approval: false) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'app/models/rails_console_ai/agent.rb', line 87 def update_with_version!(attrs, edited_by: nil, change_note: nil, preserve_approval: false) transaction do assign_attributes(attrs) if !preserve_approval && approved? && changes.key?('content') self.status = STATUS_PROPOSED self.approved_by = nil self.approved_at = nil end save! RailsConsoleAi::AgentVersion.create!( agent_id: id, name: name, content: content, status: status, edited_by: edited_by, change_note: change_note ) end self end |