OpenBMB/ChatDev · error · ValueError

BlackboardMemory requires a blackboard memory store configur

Error message

BlackboardMemory requires a blackboard memory store configuration

What it means

BlackboardMemory requires its MemoryStoreConfig to carry a BlackboardMemoryConfig section. store.as_config(BlackboardMemoryConfig) returning None means the store config is for a different memory type (or missing the blackboard section), so the constructor aborts.

Source

Thrown at runtime/node/agent/memory/blackboard_memory.py:25

from typing import List

from entity.configs import MemoryStoreConfig
from entity.configs.node.memory import BlackboardMemoryConfig
from runtime.node.agent.memory.memory_base import (
    MemoryBase,
    MemoryContentSnapshot,
    MemoryItem,
    MemoryWritePayload,
)


class BlackboardMemory(MemoryBase):
    """Simple append-only memory: save raw outputs, retrieve by recency."""

    def __init__(self, store: MemoryStoreConfig):
        config = store.as_config(BlackboardMemoryConfig)
        if not config:
            raise ValueError("BlackboardMemory requires a blackboard memory store configuration")
        super().__init__(store)
        self.config = config
        self.memory_path = config.memory_path
        self.max_items = config.max_items

    # -------- Persistence --------
    def load(self) -> None:
        if not self.memory_path or not os.path.exists(self.memory_path):
            self.contents = []
            return

        try:
            with open(self.memory_path, "r", encoding="utf-8") as file:
                data = json.load(file)
            contents: List[MemoryItem] = []
            for raw in data:
                try:
                    contents.append(MemoryItem.from_dict(raw))

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Set the memory store's type to 'blackboard' in the agent configuration
  2. Verify create_memory(store) is being used rather than instantiating BlackboardMemory directly with a foreign config
  3. Check for typos in the store type field

Example fix

# before
store = MemoryStoreConfig(type='simple', ...)
mem = BlackboardMemory(store)

# after
store = MemoryStoreConfig(type='blackboard', ...)
mem = BlackboardMemory(store)  # or use create_memory(store)
Defensive patterns

Strategy: validation

Validate before calling

cfg = store.as_config(BlackboardMemoryConfig)
if cfg is None:
    raise ConfigError('store type must be blackboard for BlackboardMemory')
mem = BlackboardMemory(store)

Prevention

When it happens

Trigger: Constructing BlackboardMemory with a MemoryStoreConfig whose type/name is not 'blackboard' (e.g. a 'simple' or 'file' store config), typically via create_memory or a factory dispatching on the store's type field.

Common situations: YAML/JSON agent config where memory.type says 'simple' but code instantiates BlackboardMemory; typos in the memory store type string; copy-pasting a memory block from another agent template.

Related errors


AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27). Data as JSON: /api/errors/49cdcf60f6d6e1de. Report an issue: GitHub.