Comprehensive guidance for the Wax on-device memory/RAG framework. Use when integrating MemoryOrchestrator, VideoRAGOrchestrator, Wax/WaxSession, embedding providers, hybrid search, maintenance, or when evaluating Wax constraints like offline-only, single-file .wax persistence and deterministic retrieval.
Use this skill to design and implement correct Wax-based on-device RAG flows in Swift 6.2, emphasizing deterministic retrieval, single-file persistence, and safe concurrency.
MemoryOrchestrator for text memory and retrieval.VideoRAGOrchestrator for on-device video RAG (keyframes + transcripts).Wax and WaxSession for lower-level indexing, unified search, or structured memory.Wax to get re-exported core/search/vector APIs..wax store URL.OrchestratorConfig (disable vector search if no embedder).EmbeddingProvider when vector search is enabled.remember(...) to ingest and recall(...) to build RAGContext.flush() or close() to persist.references/constraints.md..wax file as the single source of truth (data + indexes + WAL).QueryEmbeddingPolicy deliberately; .always throws if vector search is disabled or no embedder is configured.WaxPrewarm.tokenizer() to reduce first-query latency.MemoryOrchestrator.openMiniLM(...) or WaxPrewarm.miniLM(...) to warm embeddings..ifAvailable query embeddings unless you require hard failures.import Foundation
import Wax
func demoTextOnly() async throws {
let url = FileManager.default.temporaryDirectory
.appendingPathComponent("wax-memory")
.appendingPathExtension("wax")
var config = OrchestratorConfig.default
config.enableVectorSearch = false
let memory = try await MemoryOrchestrator(at: url, config: config)
try await memory.remember("User: prefers Swift over Java.")
let ctx = try await memory.recall(query: "preferences")
_ = ctx.items
try await memory.close()
}
import Foundation
import Wax
actor MyEmbedder: EmbeddingProvider {
let dimensions = 384
let normalize = true
let identity: EmbeddingIdentity? = .init(
provider: "Local",
model: "v1",
dimensions: 384,
normalized: true
)
func embed(_ text: String) async throws -> [Float] {
[Float](repeating: 0.0, count: dimensions)
}
}
func demoVector() async throws {
let url = FileManager.default.temporaryDirectory
.appendingPathComponent("wax-vector")
.appendingPathExtension("wax")
var config = OrchestratorConfig.default
config.enableVectorSearch = true
let memory = try await MemoryOrchestrator(at: url, config: config, embedder: MyEmbedder())
try await memory.remember("Vector search enabled.")
let ctx = try await memory.recall(query: "vector")
_ = ctx.totalTokens
try await memory.flush()
try await memory.close()
}
import Foundation
import Wax
import CoreGraphics
struct MyVideoEmbedder: MultimodalEmbeddingProvider {
let dimensions = 768
let normalize = true
let identity: EmbeddingIdentity? = .init(
provider: "Local",
model: "clip-v1",
dimensions: 768,
normalized: true
)
func embed(text: String) async throws -> [Float] { [Float](repeating: 0.0, count: dimensions) }
func embed(image: CGImage) async throws -> [Float] { [Float](repeating: 0.0, count: dimensions) }
}
struct MyTranscriptProvider: VideoTranscriptProvider {
func transcript(for request: VideoTranscriptRequest) async throws -> [VideoTranscriptChunk] {
[]
}
}
func demoVideo() async throws {
let storeURL = FileManager.default.temporaryDirectory
.appendingPathComponent("wax-video")
.appendingPathExtension("wax")
let rag = try await VideoRAGOrchestrator(
storeURL: storeURL,
embedder: MyVideoEmbedder(),
transcriptProvider: MyTranscriptProvider()
)
try await rag.ingest(files: [
VideoFile(id: "clip-1", url: URL(fileURLWithPath: "/path/to/clip.mp4"))
])
let ctx = try await rag.recall(.init(text: "find the opening scene"))
_ = ctx.items
try await rag.flush()
}
MemoryOrchestrator: High-level API for ingesting text and building RAGContext.RAGContext: Deterministic retrieval output with items and total token count.EmbeddingProvider: Supplies text embeddings for vector search.VideoRAGOrchestrator: On-device video ingestion and recall over keyframes and transcripts.VideoQuery: Video recall parameters (text, time range, IDs, budgets).references/public-api.mdreferences/constraints.mdtemplates/init-store-embedder.mdtemplates/remember-recall-lifecycle.mdtemplates/hybrid-search.mdtemplates/maintenance.mdtemplates/video-rag-transcripts.md