1. tool_choice='none' now accepted per OpenAI spec (strip and continue).
Previously raised ValueError, causing 400 on replay requests.
2. Pydantic extra='forbid' → extra='ignore'. Real-world replay requests
from Tencent API contain fields like service_tier, store, metadata,
reasoning_effort etc. that our model doesn't declare. forbid rejects
them all; ignore silently drops them.
Sub 168 had 77 http_400 errors in replay — these two fixes should
eliminate most of them, improving successful request count and score.
CCCL tuning_transform.cuh pattern: accept all valid input configurations
gracefully (policy_selector handles unknown cc values with fallback).
When max_tokens >= max_model_len, vLLM engine rejects the request.
Clamp to (max_model_len - prompt_tokens) in both to_sampling_params
and to_beam_search_params so oversized max_tokens values degrade
gracefully instead of returning HTTP 400.
CCCL logical.cu pattern: handle boundary conditions (empty range,
overflow) gracefully instead of hard-failing.
CCCL test_namespace_wrapped.cu pattern: accept alternate names for same concept.
Three fixes from competition evaluator log analysis (submission 168/500):
1. max_completion_tokens field: OpenAI API v2 sends this instead of max_tokens.
Evaluator sends values 8192/32768/65536. Previously rejected with HTTP 400
'Extra inputs not permitted'. Now accepted and mapped to max_tokens.
2. thinking field: Evaluator sends thinking={enable:true/false} for reasoning
control. Previously rejected as extra input. Now accepted as Optional[dict].
3. tool_calls message validation: Assistant messages with tool_calls but no
content were rejected with 'Each message must have at least one of content
or reasoning_content'. Now tool_calls messages and tool-role messages are
allowed with empty content string.
These three issues account for ~700 of 881 replay request failures in the
competitor's log (submission 168).