Add force_string_serializer as LLM class argument #1204
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds
force_string_serializeras an argument to theLLMclass, similar to the existingnative_tool_callingargument. This allows users to explicitly control string serialization behavior when needed while maintaining full backward compatibility through automatic detection.Changes
1. LLM Class (
openhands-sdk/openhands/sdk/llm/llm.py)Added new field:
force_string_serializer: bool | NoneNone(auto-detect based on model features)True: Forces string content serializer for all messagesFalse: Allows list content serializer (when other features permit)Updated
format_messages_for_llmmethod: Now checks LLM'sforce_string_serializersetting first, falling back to model features auto-detection whenNone2. Tests (
tests/sdk/llm/test_llm.py)Added two comprehensive test functions:
test_llm_force_string_serializer_auto_detect(): Verifies automatic detection based on modeltest_llm_force_string_serializer_override(): Verifies explicit override behavior (True/False)Use Cases
1. Force string serialization for custom providers
2. Enable list serialization with caching
3. Auto-detection (default behavior)
Design Decisions
Noneas default: Maintains backward compatibility and allows automatic detection to work as beforenative_tool_callingpattern: Consistent with existing boolean control options that affect message formattingBackward Compatibility
✅ Fully backward compatible - all existing code continues to work without changes. Default behavior (auto-detection) remains unchanged.
Testing
force_string_serializerRelated
This feature allows users to override automatic model-based detection when working with:
@xingyaoww can click here to continue refining the PR
Agent Server images for this PR
• GHCR package: https://github.com/OpenHands/agent-sdk/pkgs/container/agent-server
Variants & Base Images
eclipse-temurin:17-jdknikolaik/python-nodejs:python3.12-nodejs22golang:1.21-bookwormPull (multi-arch manifest)
# Each variant is a multi-arch manifest supporting both amd64 and arm64 docker pull ghcr.io/openhands/agent-server:b80db8c-pythonRun
All tags pushed for this build
About Multi-Architecture Support
b80db8c-python) is a multi-arch manifest supporting both amd64 and arm64b80db8c-python-amd64) are also available if needed