Search

This page presents the developer-facing scoping helpers together with the concrete Oracle search result type.

Scope Resolution

For each scope field, you can do one of three things:

Each stored record has three independent scope fields: user_id, agent_id, and thread_id. Each field may hold a concrete ID or None.

Examples:

The same scoping rules apply to both synchronous and asynchronous search APIs.

In the table below, ID means any of user_id, agent_id, or thread_id together with its corresponding exact-match flag.

Search scope resolution by API layer

Case thread.search() OracleAgentMemory.search() store.search()
ID omitted Uses the thread defaults: exact user_id and agent_id, plus the current thread_id with exact_thread_match=False. Uses the client defaults. Omitted user_id is rejected. Omitted agent_id and thread_id stay broad. Uses the store defaults: ID=None and exact_*_match=False, so that dimension is not filtered.
Explicit value, including None + exact_*_match=False That dimension is not filtered. Records whose value matches the specified one may rank higher than other records. For user_id, rejected because client searches require explicit exact user scoping. For agent_id and thread_id, that dimension is not filtered. Records whose value matches the specified one may rank higher than other records. That dimension is not filtered. Records whose value matches the specified one may rank higher than other records.
Explicit ID + exact_*_match=True Matches that ID exactly. Matches that ID exactly. Matches that ID exactly.
Explicit None + exact_*_match=True Matches only records unscoped on that dimension. Matches only records unscoped on that dimension. Matches only records unscoped on that dimension.

Use explicit None together with exact_*_match=True when you want only records unscoped on that dimension and the API permits it. Omit the field when you want the operation default instead.

Lifecycle-status filtering

All persisted records have a lifecycle status. Search accepts include_invalid_results on the store, client, and thread APIs. On client and thread APIs it defaults to NOT_SET_MARKER, which resolves to including valid and invalid records in search results. The lower-level store API resolves its Boolean default to the same behavior. Pass False to omit records whose status is RecordStatus.INVALID.

Graph expansion

Pass num_hops from 0 through 5 to the store, client, or thread search API to attach linked memory context to each direct memory result. Traversal follows relations in either direction, preserves the stored relation orientation, and returns a shortest-path tree through each record’s linked_results sequence. Direct message, document, and actor-profile matches remain in the ranked result set but are not graph-expanded. In particular, searchable image descriptions can return image records without making DOCUMENT a memory-link vertex. Scope, metadata, record-type, and expiration filters apply to every linked memory. include_invalid_results continues to control only top-level search matches; it does not change which linked memories are included. max_linked_results caps the total linked memories attached to each direct result across all hops. It defaults to 100; pass 0 to omit linked context.

Scopes

class oracleagentmemory.apis.scope.Scope

Bases: object

Represents a scope for information insertion or searches.

user_id

End-user ID. NOT_SET_MARKER means the field was omitted and should be resolved by the operation-specific default. Explicit None is preserved and interpreted by the operation-specific rules. Higher-level client APIs such as OracleAgentMemory.search() may require the user scope to be explicit. In those APIs, None may be used to target unscoped records only.

agent_id

Agent ID. NOT_SET_MARKER means the field was omitted and should be resolved by the operation-specific default. Explicit None is preserved and interpreted by the operation-specific rules.

thread_id

Thread ID. NOT_SET_MARKER means the field was omitted and should be resolved by the operation-specific default. Explicit None is preserved and interpreted by the operation-specific rules.

class oracleagentmemory.apis.searchscope.SearchScope

Bases: Scope

Represents the scope for a search query and therefore constrains what can be returned.

user_id

End-user ID. When the resolved exact_user_match value is True, this ID is matched exactly, including None. When it is False, the user dimension is unconstrained. NOT_SET_MARKER is replaced by an operation-specific default. Higher-level client APIs such as OracleAgentMemory.search() may require the user scope to be explicit. In those APIs, None targets only unscoped records when exact_user_match resolves to True.

agent_id

Agent ID. When the resolved exact_agent_match value is True, this ID is matched exactly, including None. When it is False, the agent dimension is unconstrained. NOT_SET_MARKER is replaced by a default value depending on the operation using the scope.

thread_id

Thread ID. When the resolved exact_thread_match value is True, this ID is matched exactly, including None. When it is False, the thread dimension is unconstrained. NOT_SET_MARKER is replaced by a default value depending on the operation using the scope.

exact_user_match

Whether to match the resolved user_id exactly. True matches exactly, including None. False leaves the user dimension unconstrained. NOT_SET_MARKER is replaced by a default depending on the operation. Higher-level client APIs such as OracleAgentMemory.search() may require this to remain True.

exact_agent_match

Whether to match the resolved agent_id exactly. True matches exactly, including None. False leaves the agent dimension unconstrained. NOT_SET_MARKER is replaced by a default depending on the operation.

exact_thread_match

Whether to match the resolved thread_id exactly. True matches exactly, including None. False leaves the thread dimension unconstrained. NOT_SET_MARKER is replaced by a default depending on the operation.

Search Configuration

class oracleagentmemory.core.MemorySearchConfig

Bases: ISearchConfig

Base configuration for memory post-search behavior.

Optional target size for formatted search output.

Complete results are kept in rank order through the first result that reaches or exceeds this budget. The first result is therefore retained when no hard token_budget prevents it from being returned.

Optional hard limit for the estimated size of formatted search output.

Complete results are kept in rank order while their cumulative estimate fits the budget. If the first result does not fit, no results are returned.

class oracleagentmemory.core.TopKMemorySearchConfig

Bases: _RerankingMemorySearchConfig

Search configuration with a fixed maximum of direct results.

Maximum number of direct results retrieved before reranking.

class oracleagentmemory.core.PruningEvaluationMode

Bases: str, Enum

Controls how extensively search results are evaluated during pruning.

EXHAUSTIVE = ‘exhaustive’

Evaluate every candidate result individually. This provides the most complete evaluation but has the highest latency and LLM usage.

EXTENDED = ‘extended’

Evaluate a broader portion of the results before deciding which ones to retain, at the cost of additional latency and LLM usage.

FAST = ‘fast’

Prioritize low latency by stopping evaluation early when further checks are unlikely to change which results are retained.

class oracleagentmemory.core.PruningMemorySearchConfig

Bases: _RerankingMemorySearchConfig

Search configuration that removes less relevant direct results.

Direct-result limits are supplied on each search or context-card call and applied before reranking and pruning.

How extensively search results are evaluated during pruning.

When omitted, PruningEvaluationMode.FAST is used.

Number of ranked-result regions evaluated in FAST or EXTENDED mode.

This parameter cannot be set when evaluation_mode is PruningEvaluationMode.EXHAUSTIVE.

Fraction of highest-ranked direct results protected from pruning.

For example, 0.1 protects the top 10 percent of direct results.

LLM used to decide which direct results to remove.

Results

class oracleagentmemory.core.SearchResultFormatConfig

Bases: object

Control portable search-result rendering options.

Implementations can provide a subclass with additional rendering options.

class oracleagentmemory.core.OracleSearchResultFormatConfig

Bases: SearchResultFormatConfig

Control Oracle search-result rendering options.

class oracleagentmemory.core.OracleSearchResult

Bases: SearchResult

Search result returned by an Oracle thread.

property content

method format_content

Render this result and its graph context as XML-safe prompt text.

property formatted_content

property id

property linked_results

property metadata

property record

The returned value may be a plain Record or a ScopedRecord subclass. Use isinstance(result.record, ScopedRecord) before reading public scope identifiers.

property status

property timestamp