fix(ai-formats): accept Claude context_management in responses conversion

This commit is contained in:
zhefox
2026-06-23 10:03:55 +08:00
parent 5b7805181b
commit 1836c2b652
@@ -486,6 +486,7 @@ fn standard_request_root_field_is_audited(source: FormatId, key: &str) -> bool {
key, key,
"cache_control" "cache_control"
| "container" | "container"
| "context_management"
| "inference_geo" | "inference_geo"
| "max_tokens" | "max_tokens"
| "messages" | "messages"
@@ -858,7 +859,12 @@ fn request_extension_key_is_cross_format_safe(
| "prompt_cache_key" | "prompt_cache_key"
| "prompt_cache_retention" | "prompt_cache_retention"
| "verbosity", | "verbosity",
) | (FormatId::ClaudeMessages, _, "claude", "output_config") ) | (
FormatId::ClaudeMessages,
_,
"claude",
"context_management" | "output_config",
)
| ( | (
FormatId::ClaudeMessages, FormatId::ClaudeMessages,
FormatId::OpenAiChat | FormatId::GeminiGenerateContent, FormatId::OpenAiChat | FormatId::GeminiGenerateContent,
@@ -2517,6 +2523,25 @@ mod tests {
assert_eq!(converted["input"][0]["content"][0]["type"], "input_text"); assert_eq!(converted["input"][0]["content"][0]["type"], "input_text");
} }
#[test]
fn claude_request_to_responses_accepts_context_management() {
let body = json!({
"model": "claude-sonnet",
"messages": [{"role": "user", "content": "hello"}],
"max_tokens": 128,
"context_management": {
"edits": [{"type": "clear_tool_uses_20250919"}]
}
});
let converted = convert_request_pure("claude:messages", "openai:responses", &body)
.expect("context_management is audited for Claude cross-format requests")
.value;
assert_eq!(converted["model"], "claude-sonnet");
assert!(converted.get("context_management").is_none());
}
#[test] #[test]
fn pure_request_conversion_does_not_apply_model_or_stream_edits() { fn pure_request_conversion_does_not_apply_model_or_stream_edits() {
let body = json!({ let body = json!({