Gralkor.Client behaviour (gralkor_ex v2.0.6)

Copy Markdown View Source

Port for talking to a Gralkor backend from Elixir.

Six operations — recall, capture, end_session, memory_search, memory_add, health_check. Every failure is reported as {:error, reason} so callers can decide how to fail open. Group IDs are sanitised at the edge (sanitize_group_id/1) to satisfy Gralkor's RediSearch constraint.

The concrete adapter is resolved from Application.get_env(:gralkor_ex, :client); defaults to Gralkor.Client.HTTP. Tests swap in Gralkor.Client.InMemory.

Summary

Types

group_id()

@type group_id() :: String.t()

messages()

@type messages() :: [Gralkor.Message.t()]

session_id()

@type session_id() :: String.t()

Callbacks

build_communities(group_id)

@callback build_communities(group_id()) ::
  {:ok, %{communities: non_neg_integer(), edges: non_neg_integer()}}
  | {:error, term()}

build_indices()

@callback build_indices() :: {:ok, %{status: String.t()}} | {:error, term()}

capture(session_id, group_id, messages)

@callback capture(session_id(), group_id(), messages()) :: :ok | {:error, term()}

end_session(session_id)

@callback end_session(session_id()) :: :ok | {:error, term()}

health_check()

@callback health_check() :: :ok | {:error, term()}

memory_add(group_id, content, source_description)

@callback memory_add(
  group_id(),
  content :: String.t(),
  source_description :: String.t() | nil
) ::
  :ok | {:error, term()}

memory_search(group_id, session_id, query)

@callback memory_search(group_id(), session_id(), query :: String.t()) ::
  {:ok, String.t()} | {:error, term()}

recall(group_id, arg2, query)

@callback recall(group_id(), session_id() | nil, query :: String.t()) ::
  {:ok, String.t() | nil} | {:error, term()}

Functions

impl()

@spec impl() :: module()

sanitize_group_id(id)

@spec sanitize_group_id(String.t()) :: String.t()