Chat Memory

Comprehensive chat memory management with integrated token tracking and auto-reset strategies.

Quick Start

(require '[langchain4clj.memory :as mem]
         '[langchain4clj.assistant :as asst])

;; Create basic memory
(def memory (mem/create-memory {:max-messages 100}))

;; Use with assistant
(def my-assistant
  (asst/create-assistant
    {:model model
     :memory memory}))

Core Features

1. Basic Memory

Sliding window memory that keeps the last N messages:

(def memory (mem/create-memory {:max-messages 50}))

;; Add messages
(mem/add-message! memory (UserMessage. "Hello"))
(mem/add-message! memory (AiMessage. "Hi there"))

;; Get all messages
(mem/get-messages memory)

;; Get stats
(mem/stats memory)  ; => {:message-count 2 :token-count 0}

;; Clear
(mem/clear! memory)

2. Token Tracking (Integrated)

Track token usage by passing TokenUsage metadata from ChatResponse:

(let [response (llm/chat model "Hello")]
  (mem/add-message! memory
                    (.aiMessage response)
                    {:token-usage (-> response .metadata .tokenUsage)}))

(mem/stats memory)  ; => {:message-count 1 :token-count 127}

3. Auto-Reset

Automatically reset when reaching thresholds:

(def smart-memory
  (-> (mem/create-memory {:max-messages 100})
      (mem/with-auto-reset {:reset-threshold 0.85
                            :max-tokens 16000
                            :context [(SystemMessage. "Context")]})))

4. Stateless Mode

Clears before each session:

(def stateless-memory
  (-> (mem/create-memory)
      (mem/with-stateless-mode {:context [(SystemMessage. "Context")]})))

See Full Documentation

For complete API reference and examples, see the main README.