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,
"cache_control"
| "container"
| "context_management"
| "inference_geo"
| "max_tokens"
| "messages"
@@ -858,7 +859,12 @@ fn request_extension_key_is_cross_format_safe(
| "prompt_cache_key"
| "prompt_cache_retention"
| "verbosity",
) | (FormatId::ClaudeMessages, _, "claude", "output_config")
) | (
FormatId::ClaudeMessages,
_,
"claude",
"context_management" | "output_config",
)
| (
FormatId::ClaudeMessages,
FormatId::OpenAiChat | FormatId::GeminiGenerateContent,
@@ -2517,6 +2523,25 @@ mod tests {
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]
fn pure_request_conversion_does_not_apply_model_or_stream_edits() {
let body = json!({