Module: Engram::TurnDigest
- Defined in:
- lib/engram/turn_digest.rb
Overview
Produces a stable digest for a conversation turn (scope + messages). Used as an idempotency key so the same turn is not observed twice.
Class Method Summary collapse
Class Method Details
.digest(scope:, messages:) ⇒ Object
12 13 14 15 |
# File 'lib/engram/turn_digest.rb', line 12 def digest(scope:, messages:) normalized = Array().map { || normalize() } Digest::SHA256.hexdigest(JSON.generate(scope: scope, messages: normalized)) end |
.normalize(message) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/engram/turn_digest.rb', line 17 def normalize() if .is_a?(Hash) { role: ([:role] || ["role"] || "user").to_s, content: ([:content] || ["content"]).to_s } else {role: "user", content: .to_s} end end |