When building AI/gateway/provider request logic, derive token budgets and reasoning payloads from the most accurate, provider-verified model metadata, and make defaulting/clamping semantics explicit.
Practical rules: 1) Prefer “effective” limits from the catalog/provider
2) Emit reasoning fields only when you can prove the provider/model supports them
3) Encode defaults as floors/ceilings with documentation, then clamp
4) Avoid accumulating duplicated provider special-cases
Example pattern (budget + safe reasoning emission):
function resolveMaxOutputTokens({ model, input, reasoningFloor }: {
model: { maxOutputTokens?: number };
input: { defaultMaxOutputTokens?: number };
reasoningFloor: number;
}) {
const baseDefault = input.defaultMaxOutputTokens ?? DEFAULT_GATEWAY_MAX_OUTPUT_TOKENS;
// baseDefault is a floor; only raise it proportionally when safe.
const baseWithCatalogRaise =
input.defaultMaxOutputTokens === undefined &&
isPositiveFiniteNumber(model.maxOutputTokens)
? Math.max(
baseDefault,
Math.floor(model.maxOutputTokens * DEFAULT_GATEWAY_MAX_OUTPUT_FRACTION),
)
: baseDefault;
const withReasoning = baseWithCatalogRaise + reasoningFloor;
return clampToModelAndContext(withReasoning, model);
}
function buildProviderReasoningPayload({
modelFamily,
isSupportedInferenceProfile,
}: {
modelFamily: string;
isSupportedInferenceProfile: boolean;
}) {
if (isSupportedInferenceProfile) {
// send only the provider-accepted reasoning field
return { reasoning: { effort: /* ... */ } };
}
// If unclassified/unsupported, send none (avoid rejected generic fields)
return {};
}
Mode-aware addendum (agent behavior): vary “do commit/PR” prompts by the user’s execution mode—don’t apply commit/PR side effects in Plan-like modes unless explicitly requested by the user.