6.3 KiB
Promptkit v0.7.0
This supplemental changelog and migration guide summarizes the consumer-facing
changes from v0.6.0 to v0.7.0. The annotated v0.7.0 tag is the
authoritative release record. Exact current contracts belong to the linked
GoDoc and durable documentation.
Summary
v0.7.0 expands provider integration and profile composition while making
credential and generation-failure handling more flexible:
- Promptkit now includes the
rakestrawhomebackend and its Gemma profile; - built-in generation failures expose bounded structured provider details;
- an unavailable optional API-key environment source no longer prevents a request from reaching an upstream that permits unauthenticated access; and
- profiles can inherit from and selectively refine another profile.
Compatibility
This release adds public declarations and fields but removes none. Existing
keyed configuration literals and ordinary errors.Is handling continue to
work.
Adding BaseProfileID to Profile and OpenAICompatibleProfileConfig changes
their struct shape. Consumers using positional composite literals for either
type must convert them to keyed literals. Existing keyed literals require no
change.
The rakestrawhome backend ID is now built in and reserved. A consumer that
previously registered that exact ID with WithBackend must remove its manual
registration before upgrading. Other custom backend registrations are
unchanged.
When an optional backend, profile, or request APIKeyEnv is unset, empty, or
whitespace-only, the built-in client now omits Authorization and sends the
request. Previously this condition could fail before transport. Set
Profile.APIKeyRequired when missing credentials must remain a local
preflight error.
Provider non-success responses continue to match ErrLLMGenerate. Their
rendered wording is not a compatibility contract; consumers can now use
errors.As with *GenerationError when structured status information is
needed.
Upgrade
Update the module dependency with:
go get gitea.maximumdirect.net/eric/promptkit@v0.7.0
go mod tidy
Remove any manual rakestrawhome backend registration, convert positional
profile literals to keyed literals, and run the consuming project's ordinary
and race-enabled tests.
Rakestrawhome Built-In Backend And Profile
Every engine now includes the reserved rakestrawhome backend, identified by
BackendRakestrawHome. The built-in rakestrawhome-gemma-4-31b profile
selects that backend. Consumers can use the maintained endpoint, credential,
capacity, and model defaults without registering either definition themselves.
See the built-in backend and profile catalogs and the consumer adoption example for the current contracts.
Structured Generation Errors
Non-2xx responses from the built-in OpenAI-compatible client now return an
immutable *GenerationError. Consumers can inspect the HTTP status and any
safely extracted provider code, type, or message while retaining the ordinary
generation-error category:
var generationErr *promptkit.GenerationError
if errors.As(err, &generationErr) {
status := generationErr.StatusCode()
_ = status
}
Provider fields are bounded and normalized but remain untrusted and may contain sensitive request or schema details. Default and Go-syntax formatting omit those fields. Applications must apply their own disclosure policy before logging or presenting accessor values.
See the GenerationError GoDoc, the
consumer error-handling guide,
and the OpenAI-compatible response contract.
Optional Credential Sources
APIKeyEnv names an optional environment lookup source unless the selected
profile explicitly sets APIKeyRequired. When neither a direct request key nor
a usable environment value exists, the built-in client omits the bearer header
and handles the upstream response normally. This supports local and other
OpenAI-compatible providers that permit unauthenticated requests without
hiding an authentication error returned by a provider that requires one.
The credential format reference, the
Backend GoDoc, the
ExecutionTargetOverride GoDoc, and the
authentication integration contract
define the current precedence and availability rules.
Profile Inheritance
YAML profiles can name one parent with base_profile; in-memory profiles use
Profile.BaseProfileID, and OpenAICompatibleProfileConfig forwards the same
field. A profile can act as an application-owned alias of a built-in or refine
selected inherited settings:
promptkit.WithProfiles(promptkit.Profile{
ID: "weather-light",
BaseProfileID: "deepseek-4-flash",
ReasoningEffort: "high",
})
Base lookup observes the existing source precedence. Chains are linear, cycle-safe, and resolved afresh for ordinary operations. Prepared execution freezes the fully resolved target. The selected leaf ID remains public while effective execution settings reflect the resolved chain.
See the profile inheritance format reference,
the consumer alias example,
and the Profile GoDoc for exact merge and validation
behavior.
Public API Changes
The release adds:
BackendRakestrawHome;GenerationError, includingStatusCode,ProviderCode,ProviderType,ProviderMessage,Error,GoString, andUnwrap;Profile.BaseProfileID; andOpenAICompatibleProfileConfig.BaseProfileID.
No public declaration was removed.
Consumer Action
- Remove a manual backend registration whose ID is exactly
rakestrawhome. - Convert positional
ProfileorOpenAICompatibleProfileConfigliterals to keyed literals. - Set
Profile.APIKeyRequiredwhere a missing credential must fail locally instead of reaching the provider unauthenticated. - Treat
GenerationErrorprovider fields as untrusted and potentially sensitive when adopting the new accessors. - Run consumer ordinary and race-enabled tests after updating the module.