Skip to content

Nullable Responses request fields can crash the local server #283

Description

@sylvesterkaczmarek

Summary

ResponsesRequest declares several fields as optional, but the local Responses API server later treats some of them as concrete values. Explicit JSON null therefore validates and can fail at runtime.

Three concrete paths are affected:

  1. metadata=None validates, then StreamResponsesEvents.__init__() calls request_body.metadata.get(...).
  2. tools=None validates. If instructions is non-empty, the server enters if body.instructions or body.tools: and then iterates for tool in body.tools.
  3. max_output_tokens=None validates, then the generation loop compares len(self.output_tokens) >= self.request_body.max_output_tokens.

The official OpenAI Python Responses request types also expose these parameters as optional, so explicit nullable values are part of the client-side contract rather than malformed Python objects.

Impact

Requests that pass validation can fail later with AttributeError or TypeError instead of being processed with the server's existing defaults/empty values.

Proposed resolution

Normalize the nullable fields at the ResponsesRequest model boundary:

  • metadata=None -> {}
  • tools=None -> []
  • max_output_tokens=None -> DEFAULT_MAX_OUTPUT_TOKENS

This lets the rest of the server keep its existing concrete-value assumptions while preserving accepted nullable request input.

Add model-level regressions for all three explicit-None cases.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions