@@ -367,6 +367,171 @@ No installation required - part of Project O's Gerbil codebase.
367367(core-memory-prepend! core-manager "persona" "Prefix: " separator: " ")
368368```
369369
370+ ### Archival Memory Operations
371+
372+ #### Creating an Archival Manager
373+
374+ ``` scheme
375+ (import :gerbil/memory/archival
376+ :gerbil/database/client)
377+
378+ ;; Connect to database
379+ (db-connect!)
380+
381+ ;; Create archival manager with embedding support
382+ (def archival-mgr (make-archival-manager agent-id
383+ llm-provider: :openai
384+ llm-model: "text-embedding-3-small"
385+ cache-enabled: #t))
386+ ```
387+
388+ #### Inserting Archival Entries
389+
390+ ``` scheme
391+ ;; Insert entry with embedding generation
392+ (archival-insert! archival-mgr
393+ "User prefers dark mode and technical documentation."
394+ importance: 0.8
395+ tags: '("preferences" "ui")
396+ generate-embedding?: #t)
397+
398+ ;; Insert without embedding (faster)
399+ (archival-insert! archival-mgr
400+ "User mentioned liking coffee."
401+ importance: 0.5
402+ tags: '("personal")
403+ generate-embedding?: #f)
404+
405+ ;; Insert batch entries
406+ (archival-insert-batch! archival-mgr
407+ (list (hash 'content "Entry 1"
408+ 'importance 0.7
409+ 'tags '("batch")
410+ 'generate_embedding #t)
411+ (hash 'content "Entry 2"
412+ 'importance 0.6
413+ 'tags '("batch")
414+ 'generate_embedding #f)))
415+ ```
416+
417+ #### Retrieving Archival Entries
418+
419+ ``` scheme
420+ ;; Get entry by ID
421+ (def entry (archival-get archival-mgr entry-id))
422+
423+ ;; Get all entries with pagination
424+ (def all-entries (archival-get-all archival-mgr limit: 100 offset: 0))
425+
426+ ;; Get recent entries
427+ (def recent (archival-get-recent archival-mgr 10))
428+ ```
429+
430+ #### Searching Archival Memory
431+
432+ ``` scheme
433+ ;; Text-based search
434+ (def results (archival-search archival-mgr "dark mode" limit: 5))
435+ (displayln (format "Found ~a entries" (length results)))
436+
437+ ;; Search by tags
438+ (def tagged (archival-search-by-tags archival-mgr '("preferences" "ui") limit: 10))
439+
440+ ;; Search by importance threshold
441+ (def important (archival-search-by-importance archival-mgr 0.7 limit: 10))
442+ ```
443+
444+ #### Archival Pagination
445+
446+ ``` scheme
447+ ;; Get paginated results
448+ (def page (archival-get-page archival-mgr 0 20))
449+ (displayln (format "Page ~a of ~a total entries"
450+ (archival-page-page page)
451+ (archival-page-total page)))
452+
453+ (displayln (format "Has next: ~a" (archival-page-has-next? page)))
454+ (displayln (format "Has prev: ~a" (archival-page-has-prev? page)))
455+
456+ ;; Navigate pages
457+ (when (archival-page-has-next? page)
458+ (def next-page-num (archival-get-next-page page))
459+ (def next-page (archival-get-page archival-mgr next-page-num 20)))
460+ ```
461+
462+ #### Updating Archival Entries
463+
464+ ``` scheme
465+ ;; Update entry content
466+ (archival-update! archival-mgr entry-id
467+ (hash 'content "Updated content"
468+ 'importance 0.9))
469+
470+ ;; Update importance only
471+ (archival-update-importance! archival-mgr entry-id 0.95)
472+
473+ ;; Add tags to entry
474+ (archival-add-tags! archival-mgr entry-id '("new-tag" "another-tag"))
475+ ```
476+
477+ #### Deleting Archival Entries
478+
479+ ``` scheme
480+ ;; Delete single entry
481+ (archival-delete! archival-mgr entry-id)
482+
483+ ;; Delete batch entries
484+ (archival-delete-batch! archival-mgr (list id1 id2 id3))
485+
486+ ;; Clear all archival memory
487+ (archival-clear! archival-mgr)
488+ ```
489+
490+ #### Archival Statistics
491+
492+ ``` scheme
493+ ;; Count entries
494+ (def count (archival-count archival-mgr))
495+
496+ ;; Calculate total size
497+ (def size (archival-total-size archival-mgr))
498+
499+ ;; Get comprehensive statistics
500+ (def stats (archival-get-stats archival-mgr))
501+ (displayln (format "Total entries: ~a" (hash-ref stats 'total_entries)))
502+ (displayln (format "Average importance: ~a" (hash-ref stats 'avg_importance)))
503+ (displayln (format "Entries with embeddings: ~a" (hash-ref stats 'entries_with_embeddings)))
504+ (displayln (format "Unique tags: ~a" (hash-ref stats 'unique_tags)))
505+ ```
506+
507+ #### Archival Export/Import
508+
509+ ``` scheme
510+ ;; Export to JSON (without embeddings for smaller size)
511+ (def json-export (archival-export archival-mgr
512+ format: 'json
513+ include-embeddings?: #f))
514+
515+ ;; Export to text
516+ (def text-export (archival-export archival-mgr format: 'text))
517+
518+ ;; Import from exported data
519+ (def export-data (string->json-object json-export))
520+ (archival-import! archival-mgr export-data)
521+ ```
522+
523+ #### Embedding Generation
524+
525+ ``` scheme
526+ ;; Generate single embedding
527+ (def embedding (generate-embedding archival-mgr "Text to embed"))
528+ (displayln (format "Embedding dimensions: ~a" (length embedding)))
529+
530+ ;; Generate batch embeddings
531+ (def embeddings (generate-embeddings-batch archival-mgr
532+ '("Text 1" "Text 2" "Text 3")))
533+ ```
534+
370535### Searching Memory Blocks
371536
372537``` scheme
@@ -514,6 +679,80 @@ No installation required - part of Project O's Gerbil codebase.
514679- ` (core-memory-clear-block! manager block-label) ` - Clear block
515680- ` (core-memory-prepend! manager block-label text #!key ...) ` - Prepend text
516681
682+ ### Archival Memory Manager
683+
684+ #### Constructor
685+
686+ - ` (make-archival-manager agent-id #!key ...) ` - Create archival manager
687+ - ` llm-provider ` - LLM provider for embeddings (default: : openai )
688+ - ` llm-model ` - Embedding model (default: "text-embedding-3-small")
689+ - ` cache-enabled ` - Enable caching (default: #t)
690+
691+ #### Entry Creation
692+
693+ - ` (archival-insert! manager content #!key ...) ` - Insert archival entry
694+ - ` importance ` - Importance score 0.0-1.0 (default: 0.5)
695+ - ` tags ` - List of tags (default: empty)
696+ - ` generate-embedding? ` - Generate embedding (default: #t)
697+
698+ - ` (archival-insert-batch! manager entries) ` - Insert multiple entries
699+
700+ #### Entry Retrieval
701+
702+ - ` (archival-get manager entry-id) ` - Get entry by ID
703+ - ` (archival-get-all manager #!key (limit 100) (offset 0)) ` - Get all entries
704+ - ` (archival-get-recent manager n) ` - Get N recent entries
705+
706+ #### Search Operations
707+
708+ - ` (archival-search manager query #!key (limit 10)) ` - Text-based search
709+ - ` (archival-search-by-tags manager tags #!key (limit 10)) ` - Search by tags
710+ - ` (archival-search-by-importance manager min-importance #!key (limit 10)) ` - Search by importance
711+
712+ #### Pagination
713+
714+ - ` (archival-get-page manager page-number page-size) ` - Get paginated entries
715+ - ` (archival-get-next-page page-result) ` - Get next page number
716+ - ` (archival-get-prev-page page-result) ` - Get previous page number
717+
718+ #### Entry Update
719+
720+ - ` (archival-update! manager entry-id updates) ` - Update entry
721+ - ` (archival-update-importance! manager entry-id importance) ` - Update importance
722+ - ` (archival-add-tags! manager entry-id new-tags) ` - Add tags
723+
724+ #### Entry Deletion
725+
726+ - ` (archival-delete! manager entry-id) ` - Delete entry
727+ - ` (archival-delete-batch! manager entry-ids) ` - Delete multiple entries
728+ - ` (archival-clear! manager) ` - Clear all entries
729+
730+ #### Statistics
731+
732+ - ` (archival-count manager) ` - Count entries
733+ - ` (archival-total-size manager) ` - Calculate total size
734+ - ` (archival-get-stats manager) ` - Get comprehensive statistics
735+
736+ #### Caching
737+
738+ - ` (archival-cache-get manager entry-id) ` - Get from cache
739+ - ` (archival-cache-put! manager entry-id entry) ` - Put in cache
740+ - ` (archival-cache-invalidate! manager entry-id) ` - Invalidate cache
741+ - ` (archival-cache-clear! manager) ` - Clear cache
742+
743+ #### Export/Import
744+
745+ - ` (archival-export manager #!key ...) ` - Export archival memory
746+ - ` format ` - Export format (json or text)
747+ - ` include-embeddings? ` - Include embeddings (default: #f)
748+
749+ - ` (archival-import! manager data) ` - Import archival memory
750+
751+ #### Embedding Generation
752+
753+ - ` (generate-embedding manager content) ` - Generate single embedding
754+ - ` (generate-embeddings-batch manager contents) ` - Generate batch embeddings
755+
517756### Block Manager
518757
519758#### Constructor
0 commit comments