Upstream LiteLLM ships the memory store as CRUD only, with no consumer. ForceAI adds the injection hook, so this is the piece that makes an agent actually use memory
Manage memories
Open the dashboard Memory page to create, search, edit, and delete entries, or use the API. Each entry has akey, a value, optional metadata, and is scoped to the caller’s user and team:
GET /v1/memory (list, with key_prefix search and pagination), GET /v1/memory/{key}, PUT /v1/memory/{key} (upsert), DELETE /v1/memory/{key}. A caller only sees its own user-scoped and team-scoped entries
Turn on injection for a request
Opt a request in withmetadata.forceai_memory: true (or set FORCEAI_MEMORY_ENABLED on the gateway to make it the default):
metadata.forceai_memory_prefix: "agent:sales" to inject only the memories under a key namespace
How selection works
The hook loads the caller’s user and team memories, newest first, and injects them as one system message for that turn. To keep the prompt bounded it takes a prefix within a count cap and a token budget, always keeping the newest memory. Selection is intentionally simple in this version; a relevance-ranked variant is a planned follow-upSee what a request used
Open the request in Logs and expand it. The Memory panel shows how many memories were available in scope, how many were injected, the token cost, and the exact keys the model received. The same is stamped intospend_logs_metadata.forceai_memory: