Skip to content

Feature: DakeraMemoryDriver — persistent cross-run memory backend for Griptape agents #2226

Description

@ferhimedamine

Griptape has excellent in-session memory (ConversationMemory, TaskMemory) but no cross-run persistence. This proposes DakeraMemoryDriver as a persistent backend for Griptape agents using the self-hosted Dakera (https://dakera.ai) memory server.

Problem: Griptape agents lose all memory between process restarts. For agents running recurring tasks (daily report summaries, ongoing research assistants), context must be re-established on every run.

Proposed: DakeraMemoryDriver implementing BaseConversationMemoryDriver:

from griptape.drivers.memory.conversation import BaseConversationMemoryDriver
from griptape.artifacts import BaseArtifact
from dakera import DakeraClient

class DakeraConversationMemoryDriver(BaseConversationMemoryDriver):
base_url: str = 'http://localhost:3300'
api_key: str = ''
agent_id: str = 'griptape-agent'

def __post_init__(self):
    self._client = DakeraClient(base_url=self.base_url, api_key=self.api_key)

def store(self, memory: ConversationMemory) -> None:
    for run in memory.runs[-3:]:  # Store recent runs
        self._client.store_memory(
            agent_id=self.agent_id,
            content=f'Input: {run.input}\nOutput: {run.output}',
        )

def load(self) -> list:
    response = self._client.recall(agent_id=self.agent_id, query='recent conversations', top_k=10)
    return response.memories if response else []

Usage:
from griptape.structures import Agent
from griptape.memory.structure import ConversationMemory

agent = Agent(
    conversation_memory=ConversationMemory(
        driver=DakeraConversationMemoryDriver(
            base_url='http://localhost:3300',
            api_key='demo',
            agent_id='my-agent',
        )
    )
)

Setup: docker run -d -p 3300:3300 -e DAKERA_API_KEY=demo ghcr.io/dakera-ai/dakera:latest / pip install dakera

Relevant: griptape/drivers/memory/conversation/

Happy to open a PR.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions