Moss.Session
A local, in-session index backed by the Rust core. Index documents in memory during a live workflow (voice AI agents, chat) and query them with no cloud round trips, then push the index to the cloud when done. Sessions are opened withMoss.Client.session/3, which handles
credentials and auto-loads from the cloud if an index with the given name already
exists. The functions below take the session reference returned by that call.
For built-in models ("moss-minilm", "moss-mediumlm"), embeddings are computed
automatically in the Rust core. For model_id: "custom", each document must set
.embedding, and query/3 requires an
:embedding option.
Example
Methods
add_docs(session, docs, opts)
Add or update documents in the session index, embedding them in the Rust core.
Returns the counts of documents added (new IDs) and updated (existing IDs).
For built-in models embeddings are computed automatically. For
model_id: "custom", each document must have .embedding set.
Parameters
- session (
GenServer.server()) - docs (list of
Moss.DocumentInfo) - opts (
keyword()=[]): supports:upsert(boolean, defaulttrue).
Returns
{:ok, {added, updated}} or {:error, String.t()}
delete_docs(session, doc_ids)
Delete documents from the session index by their IDs. Returns the number of
documents actually deleted (missing IDs are ignored).
Parameters
- session (
GenServer.server()) - doc_ids (list of
String.t())
Returns
non_neg_integer()
get_docs(session, opts)
Retrieve documents from the session index.
Parameters
- session (
GenServer.server()) - opts (
keyword()=[]): supports:doc_ids(list of strings). When provided, only those documents are returned; otherwise all documents are returned.
Returns
[Moss.DocumentInfo.t()]
query(session, query_text, opts)
Run a semantic similarity search against the session index. For built-in models
the query is embedded automatically in the Rust core. For model_id: "custom",
pass the query embedding via the :embedding option. Metadata filtering is
supported.
Parameters
- session (
GenServer.server()) - query_text (
String.t()) - opts (
keyword()=[]): supports:top_k(integer, default5),:alpha(float, default0.8),:filter(map), and:embedding(list of floats, required formodel_id: "custom").
Returns
{:ok, Moss.SearchResult.t()} or {:error, String.t()}
alpha tunes the hybrid blend: 1.0 is pure semantic, 0.0 is pure keyword,
and the default 0.8 is semantic-heavy.
load_index(session, index_name)
Load an existing cloud index into this session. Returns the document count loaded.
After loading, the session behaves as a local index: subsequent add, delete, and
query operations run in memory without hitting the network.
Parameters
- session (
GenServer.server()) - index_name (
String.t())
Returns
{:ok, non_neg_integer()} or {:error, String.t()}
push_index(session)
Push the local session index to the cloud, creating or replacing the server-side
index. Returns a Moss.PushIndexResult with a
job_id; poll it with
Moss.Client.get_job_status/2 until the
status is ready.
Parameters
- session (
GenServer.server())
Returns
{:ok, Moss.PushIndexResult.t()} or {:error, String.t()}