Why is the reply empty on GPT-OSS, DeepSeek or GLM?
They are reasoning models: they think before they answer, and the thinking consumes max_tokens. If the budget is small (say 20–50 tokens) it is spent entirely on reasoning and content comes back empty while the reasoning field is populated. Set max_tokens to a few hundred or more. usage.completion_tokens_details.reasoning_tokens shows how many tokens went to reasoning.
