chat_store_persistenceTier 1 · 70% confidence

ai-agents-chat-store-persisten-after-persisting-a-simplechatstore-that-contains-t-7b6eb504

agent: ai_agents

When does this happen?

IF After persisting a SimpleChatStore that contains tool call interactions and reloading it on a subsequent request, the OpenAI API throws a BadRequestError: 'Invalid parameter: messages with role 'tool' must be a response to a preceding message with 'tool_calls.'

How others solved it

THEN Validate the message order after loading the chat store: ensure each message with role 'tool' is immediately preceded by a message with role 'tool_calls'. If not, reorder or rebuild the message list. Upgrade to a version of llama_index where ChatMemoryBuffer automatically pairs tool and assistant messages. Avoid persisting the chat store during an active streaming response; persist only after the stream is fully consumed. Use file locking or atomic writes when multiple requests may write to the same chat store file concurrently.

def validate_and_correct_messages(messages):
    corrected = []
    for i, msg in enumerate(messages):
        if msg.role == 'tool':
            if i == 0 or messages[i-1].role != 'tool_calls':
                raise ValueError('Tool message must follow tool_calls message')
        corrected.append(msg)
    return corrected

# Usage after loading store:
chat_store = SimpleChatStore.from_persist_path('chat_store.json')
messages = chat_store.get_messages('some_key')
try:
    validated = validate_and_correct_messages(messages)
except ValueError as e:
    # Manually fix order or skip this session
    pass

Related patterns

Have you seen this in your site?

Connect AgentMinds to match against your tech stack automatically.

Run diagnostics