Bug: Hermes nao propaga chat_id no metadata do callback. Callback controller nao conseguia resolver qual session armazenar a resposta. WARN "no session_key resolvable — ignorando" descartava todas as respostas do Construtor. Fix: HermesBuilder::Storage.remember_last_session() grava ultima session por account quando admin chama /start ou /create. Callback le essa key via last_session_for(account_id). MVP-safe pra 1 admin por conta. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
44 lines
1.3 KiB
Ruby
44 lines
1.3 KiB
Ruby
# Storage de mensagens da UI Hermes Builder.
|
|
#
|
|
# Persistência em Rails.cache (Redis em prod) — TTL 4h. Suficiente pra uma
|
|
# sessão de criação completa de agente (geralmente ~10-20min).
|
|
#
|
|
# Cada mensagem tem: role ('user' | 'construtor'), content (string),
|
|
# created_at (ISO8601). Lista cresce em ordem cronológica.
|
|
module HermesBuilder
|
|
end
|
|
|
|
module HermesBuilder::Storage
|
|
TTL = 4.hours
|
|
MAX_MESSAGES = 200
|
|
|
|
module_function
|
|
|
|
def messages_for(session_key)
|
|
Rails.cache.fetch(session_key) { [] }
|
|
end
|
|
|
|
def append(session_key, role:, content:)
|
|
msgs = messages_for(session_key)
|
|
msgs << { role: role, content: content.to_s, created_at: Time.current.iso8601 }
|
|
msgs = msgs.last(MAX_MESSAGES)
|
|
Rails.cache.write(session_key, msgs, expires_in: TTL)
|
|
msgs
|
|
end
|
|
|
|
def clear(session_key)
|
|
Rails.cache.delete(session_key)
|
|
end
|
|
|
|
# Última sessão ativa por account — usada pelo callback do Hermes pra
|
|
# roteamento (Hermes nao propaga chat_id no metadata da resposta).
|
|
# Aceitavel pra MVP com 1 admin por vez por conta.
|
|
def remember_last_session(account_id, session_key)
|
|
Rails.cache.write("hermes_builder:last_session:account:#{account_id}", session_key, expires_in: TTL)
|
|
end
|
|
|
|
def last_session_for(account_id)
|
|
Rails.cache.read("hermes_builder:last_session:account:#{account_id}")
|
|
end
|
|
end
|