MemoryRecordExtractor

Extractor of memory records during message ingestion.

This is a functional interface (SAM) that defines how a list of messages should be transformed into a list of MemoryRecords for storage. It provides flexibility in how messages are filtered, transformed, and converted into memory records while maintaining type safety.

Pre-built implementations are available for common ingestion patterns:

Usage Examples

Using pre-built extractors (Kotlin):

// Extract User and Assistant messages (default)
val extractor = FilteringMemoryRecordExtractor()

// Extract only User messages
val extractor = FilteringMemoryRecordExtractor(
messageRolesToExtract = setOf(Message.Role.User)
)

Custom implementation as lambda (Kotlin):

val customExtractor = MemoryRecordExtractor { messages ->
messages
.filter { it.role == Message.Role.Assistant }
.extract { MemoryRecord.Plain(content = summarize(it.content)) }
}

Custom implementation as lambda (Java):

MemoryRecordExtractor customExtractor = (messages) ->
messages.stream()
.filter(m -> m.getRole() == Message.Role.Assistant)
.extract(m -> new MemoryRecord.Plain(m.getContent()))
.collect(Collectors.toList());

Inheritors

Types

Link copied to clipboard
object Companion

Companion object with a builder method.

Functions

Link copied to clipboard
abstract suspend fun extract(messages: List<Message>): List<MemoryRecord>

Transforms a list of messages into a list of memory records for storage.