Sub-behaviour for adapters that support long-term memory fact storage.
Adapters implementing this behaviour can store, retrieve, and delete
per-user key-value facts. save_fact/2 uses upsert semantics —
writing to the same {user_id, key} overwrites the previous value.
Summary
Callbacks
@callback count_facts( user_id :: String.t(), keyword() ) :: {:ok, non_neg_integer()} | {:error, term()}
@callback get_facts( user_id :: String.t(), keyword() ) :: {:ok, [PhoenixAI.Store.LongTermMemory.Fact.t()]} | {:error, term()}
@callback save_fact( PhoenixAI.Store.LongTermMemory.Fact.t(), keyword() ) :: {:ok, PhoenixAI.Store.LongTermMemory.Fact.t()} | {:error, term()}