Skip to content

fix(client): preserve empty message content when copying messages - #791

Open
davrens101 wants to merge 2 commits into
ollama:mainfrom
davrens101:fix/preserve-empty-message-content
Open

davrens101 wants to merge 2 commits into
ollama:mainfrom
davrens101:fix/preserve-empty-message-content

Conversation

@davrens101

Copy link
Copy Markdown

Bug

_copy_messages() dropped every falsy field (if v), so a chat message
built with empty content (e.g. [{'role': 'user', 'content': ''}]) was
sent with content unset (None). Only unset None values should be
omitted — downstream serialization already drops None via
model_dump(exclude_none=True).

Reproduction (CPU, no server)

import sys
sys.path.insert(0, 'ollama-python')
from ollama._client import _copy_messages

msgs = list(_copy_messages([{'role': 'user', 'content': ''}]))
print(msgs[0].content, msgs[0].model_fields_set)

Before: content=None, fields_set={'role'} (empty content lost)
After: content='', fields_set={'content', 'role'}

Fix

ollama/_client.py: change if v to if v is not None in _copy_messages
so falsy-but-set values (empty content, etc.) are preserved while unset
None values are still dropped.

Validation

Before / After

Before After
content='' message content=None (lost) content='' (preserved)

AI-assisted contribution. Reproduced on unmodified code, then fixed.

_copy_messages dropped every falsy field (if v), so a message with
empty content was sent with content unset. Only unset None values
should be omitted; serialization already drops None via exclude_none.

Reproduced: chat messages built from [{'role': 'user', 'content': ''}]
previously lost the content field; it is now preserved.

Adds a regression test in tests/test_utils.py.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant