3.7 KiB
Omit Unset Optional Request Parameters
Status: Complete.
Purpose
Promptkit will stop turning an unset optional provider control into an explicit outbound value. Required protocol fields and settings needed to enforce Promptkit's own contracts will retain defined behavior, while provider tuning choices will be sent only when a supported configuration layer selects them.
This keeps profiles intentional, avoids overriding model- or backend-specific defaults, and improves compatibility across OpenAI-compatible endpoints with different supported parameter sets.
Scope
The framework-level top_p default of 1 will become unspecified. When no
profile or runtime override supplies top_p, the built-in OpenAI-compatible
client will omit it from the request body rather than serialize 1.
This establishes the general outbound policy for currently supported optional controls:
temperature,max_tokens, andtop_pare omitted when unspecified and included when selected by a profile or runtime override;- an explicit numeric zero supplied through a runtime override remains present on the wire through the existing numeric-presence contract;
service_tierandreasoning_effortremain omitted when their resolved values are empty;- backend, profile, or runtime
extra_paramsremain explicit configuration and are sent when present; and session_idremains conditional on a supplied nonempty value, whileresponse_formatremains conditional on the effective output contract.
The request body will continue to require model and messages. Endpoint and
credential resolution remain transport concerns rather than body defaults.
The positive framework timeout_seconds default also remains in place because
it enforces a Promptkit-owned generation deadline and is not serialized as a
provider request field.
Effective Settings And Compatibility
An unspecified numeric provider control continues to use its zero Go value in
resolved public metadata. For a GenerateRequest delivered to an injected
client, the existing ExecutionTargetPresence value distinguishes an explicit
runtime zero from an inherited unspecified zero. Prepared and inspection
metadata will continue to report the resolved numeric value without adding
source-provenance fields.
The behavior change is intentional and belongs in a minor release. Consumers that require stable sampling behavior should declare the desired values in their profiles or runtime overrides instead of relying on Promptkit to repeat a provider's conventional default.
Built-in profile parameters remain explicit profile policy and will continue to be sent. An explicit built-in setting will not be removed merely because the framework default becomes unspecified.
Non-Goals
This change does not add:
- pointer-valued numeric fields to file or in-memory profiles;
- a general provenance model for effective settings;
- automatic discovery of provider defaults or supported parameters;
- backend- or model-specific request-shape negotiation;
- changes to required request fields, structured-output behavior, credentials, or timeout enforcement; or
- removal of deliberately configured settings from consumer or built-in profiles.
Target End State
An otherwise unset optional provider tuning parameter is absent from the OpenAI-compatible request body. Explicit profile values and runtime overrides, including explicit runtime zero values, retain their current precedence and wire effect. Promptkit continues to supply only the required protocol fields and the settings necessary to honor its own execution and output contracts.
GoDoc, the framework format reference, and the OpenAI-compatible integration contract will own the implemented omission and metadata semantics once the feature lands.