Sub-behaviour for adapters that support long-term memory profile storage.
Adapters implementing this behaviour can store, retrieve, and delete
per-user profile summaries. save_profile/2 uses upsert semantics —
writing for the same user_id overwrites the previous profile.
Summary
Callbacks
@callback load_profile( user_id :: String.t(), keyword() ) :: {:ok, PhoenixAI.Store.LongTermMemory.Profile.t()} | {:error, :not_found | term()}
@callback save_profile( PhoenixAI.Store.LongTermMemory.Profile.t(), keyword() ) :: {:ok, PhoenixAI.Store.LongTermMemory.Profile.t()} | {:error, term()}