External API boundaries must enforce the final wire contract: only supported parameters, only provider-accepted content shapes, and only schema-valid payloads.
Apply these rules in API-related code (tool dispatchers, transport builders, and request serializers):
1) Filter/allowlist request parameters at every outbound boundary
2) Validate the serialized “on-the-wire” message shape, not the internal shape
3) Keep JSON schemas consistent with runtime payload contracts
mode='replace' vs mode='patch'), the schema must not require both sets of fields.required: ["mode"] and enforce per-mode requirements via validator logic or mode-specific constraints in code.4) Centralize normalization that drives external protocol behavior
Path(...).suffix.lower()), then map to provider-valid formats.Example (parameter/body allowlist + wire-shape sanitation pattern):
# 1) Boundary allowlist for provider JSON body
WIRE_FIELDS = {"model", "input", "response_format", "temperature", "top_p"}
def build_wire_body(api_kwargs: dict) -> dict:
body = {k: v for k, v in (api_kwargs or {}).items() if k in WIRE_FIELDS}
# never include SDK-only controls (extra_headers/extra_body/timeout/stream)
return body
# 2) Final on-the-wire message sanitizer (after all transforms)
def sanitize_wire_messages(messages: list[dict]) -> list[dict]:
cleaned = []
for m in messages:
if m.get("role") == "assistant" and m.get("content") in (None, "", []) and not m.get("tool_calls"):
# only drop when it is truly empty on the wire
continue
cleaned.append(m)
# TODO: optionally repair role adjacency if you dropped a turn
return cleaned
Team standard for reviews: if a change touches request building, serialization, tool schemas, or codec/format selection, reviewers should explicitly verify (a) unknown kwargs aren’t forwarded, (b) payloads are schema-valid, and (c) the final serialized wire representation matches what the external service accepts.