Class: Llmemory::LongTerm::Procedural::Skill
- Inherits:
-
Object
- Object
- Llmemory::LongTerm::Procedural::Skill
- Defined in:
- lib/llmemory/long_term/procedural/skill.rb
Overview
A Skill is a reusable procedure an agent can retrieve and apply: a prompt, a template or a snippet of code. This is CoALA’s “procedural memory” in the Voyager sense — a growing library of skills the agent learns and reuses.
Skills track success/failure outcomes so proven skills can be preferred over unproven ones during retrieval (see #success_rate, and P8 adaptive retrieval).
Constant Summary collapse
- KINDS =
%w[prompt template code].freeze
- DEFAULT_KIND =
"prompt"
Instance Attribute Summary collapse
-
#body ⇒ Object
readonly
Returns the value of attribute body.
-
#created_at ⇒ Object
readonly
Returns the value of attribute created_at.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#failure_count ⇒ Object
readonly
Returns the value of attribute failure_count.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#kind ⇒ Object
readonly
Returns the value of attribute kind.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#success_count ⇒ Object
readonly
Returns the value of attribute success_count.
-
#updated_at ⇒ Object
readonly
Returns the value of attribute updated_at.
-
#user_id ⇒ Object
readonly
Returns the value of attribute user_id.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(id:, user_id:, name:, body:, description: nil, kind: DEFAULT_KIND, version: 1, success_count: 0, failure_count: 0, created_at: nil, updated_at: nil) ⇒ Skill
constructor
A new instance of Skill.
- #normalize_kind(kind) ⇒ Object
- #searchable_text ⇒ Object
-
#success_rate ⇒ Object
Proven utility in [0, 1].
- #to_h ⇒ Object
Constructor Details
#initialize(id:, user_id:, name:, body:, description: nil, kind: DEFAULT_KIND, version: 1, success_count: 0, failure_count: 0, created_at: nil, updated_at: nil) ⇒ Skill
Returns a new instance of Skill.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 22 def initialize(id:, user_id:, name:, body:, description: nil, kind: DEFAULT_KIND, version: 1, success_count: 0, failure_count: 0, created_at: nil, updated_at: nil) @id = id @user_id = user_id @name = name.to_s @description = description @body = body @kind = normalize_kind(kind) @version = version.to_i @success_count = success_count.to_i @failure_count = failure_count.to_i @created_at = created_at || Time.now @updated_at = updated_at || @created_at end |
Instance Attribute Details
#body ⇒ Object (readonly)
Returns the value of attribute body.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def body @body end |
#created_at ⇒ Object (readonly)
Returns the value of attribute created_at.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def created_at @created_at end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def description @description end |
#failure_count ⇒ Object (readonly)
Returns the value of attribute failure_count.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def failure_count @failure_count end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def id @id end |
#kind ⇒ Object (readonly)
Returns the value of attribute kind.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def kind @kind end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def name @name end |
#success_count ⇒ Object (readonly)
Returns the value of attribute success_count.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def success_count @success_count end |
#updated_at ⇒ Object (readonly)
Returns the value of attribute updated_at.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def updated_at @updated_at end |
#user_id ⇒ Object (readonly)
Returns the value of attribute user_id.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def user_id @user_id end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
19 20 21 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 19 def version @version end |
Class Method Details
.from_h(hash) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 52 def self.from_h(hash) new( id: hash[:id] || hash["id"], user_id: hash[:user_id] || hash["user_id"], name: hash[:name] || hash["name"], description: hash[:description] || hash["description"], body: hash[:body] || hash["body"], kind: hash[:kind] || hash["kind"] || DEFAULT_KIND, version: hash[:version] || hash["version"] || 1, success_count: hash[:success_count] || hash["success_count"] || 0, failure_count: hash[:failure_count] || hash["failure_count"] || 0, created_at: parse_time(hash[:created_at] || hash["created_at"]), updated_at: parse_time(hash[:updated_at] || hash["updated_at"]) ) end |
.parse_time(value) ⇒ Object
68 69 70 71 72 73 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 68 def self.parse_time(value) return value if value.nil? || value.is_a?(Time) Time.parse(value.to_s) rescue ArgumentError nil end |
Instance Method Details
#normalize_kind(kind) ⇒ Object
47 48 49 50 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 47 def normalize_kind(kind) k = kind.to_s.strip.downcase KINDS.include?(k) ? k : DEFAULT_KIND end |
#searchable_text ⇒ Object
43 44 45 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 43 def searchable_text [name, description, body].compact.map(&:to_s).reject(&:empty?).join("\n") end |
#success_rate ⇒ Object
Proven utility in [0, 1]. Unproven skills (no outcomes) are neutral.
38 39 40 41 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 38 def success_rate total = success_count + failure_count total.zero? ? 0.5 : success_count.to_f / total end |
#to_h ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/llmemory/long_term/procedural/skill.rb', line 75 def to_h { id: id, user_id: user_id, name: name, description: description, body: body, kind: kind, version: version, success_count: success_count, failure_count: failure_count, created_at: created_at.respond_to?(:iso8601) ? created_at.iso8601(6) : created_at, updated_at: updated_at.respond_to?(:iso8601) ? updated_at.iso8601(6) : updated_at } end |