88 lines
2.7 KiB
Go
88 lines
2.7 KiB
Go
package promptkit
|
|
|
|
import "fmt"
|
|
|
|
// GenerationError reports a non-2xx response from Promptkit's built-in
|
|
// OpenAI-compatible client during [Engine.Run] or [Engine.RunPrepared].
|
|
//
|
|
// Engine-produced values are immutable, caller-owned values. Use errors.Is to
|
|
// match [ErrLLMGenerate] and errors.As with a *GenerationError target to obtain
|
|
// this type. The four provider accessors expose untrusted provider-controlled
|
|
// values that can contain sensitive request or schema fragments. Applications
|
|
// must apply their own disclosure policy before logging, displaying, or
|
|
// returning them to another caller.
|
|
//
|
|
// Accessors, Error, GoString, and Unwrap are safe on a nil receiver and a zero
|
|
// value. Default and Go-syntax formatting deliberately redact provider details.
|
|
// GenerationError has no stable JSON representation.
|
|
type GenerationError struct {
|
|
statusCode int
|
|
providerCode string
|
|
providerType string
|
|
providerMessage string
|
|
}
|
|
|
|
func newGenerationError(statusCode int, providerCode, providerType, providerMessage string) *GenerationError {
|
|
return &GenerationError{
|
|
statusCode: statusCode,
|
|
providerCode: providerCode,
|
|
providerType: providerType,
|
|
providerMessage: providerMessage,
|
|
}
|
|
}
|
|
|
|
// StatusCode returns the received provider HTTP status code, or zero for a nil
|
|
// receiver or zero value.
|
|
func (e *GenerationError) StatusCode() int {
|
|
if e == nil {
|
|
return 0
|
|
}
|
|
return e.statusCode
|
|
}
|
|
|
|
// ProviderCode returns the normalized provider error code, if present. Its
|
|
// value is untrusted and may contain sensitive data.
|
|
func (e *GenerationError) ProviderCode() string {
|
|
if e == nil {
|
|
return ""
|
|
}
|
|
return e.providerCode
|
|
}
|
|
|
|
// ProviderType returns the normalized provider error type, if present. Its
|
|
// value is untrusted and may contain sensitive data.
|
|
func (e *GenerationError) ProviderType() string {
|
|
if e == nil {
|
|
return ""
|
|
}
|
|
return e.providerType
|
|
}
|
|
|
|
// ProviderMessage returns the bounded normalized provider diagnostic, if
|
|
// present. Its value is untrusted and may contain sensitive data.
|
|
func (e *GenerationError) ProviderMessage() string {
|
|
if e == nil {
|
|
return ""
|
|
}
|
|
return e.providerMessage
|
|
}
|
|
|
|
// Error returns a redacted diagnostic that is not a parsing contract.
|
|
func (e *GenerationError) Error() string {
|
|
if e == nil || e.statusCode == 0 {
|
|
return ErrLLMGenerate.Error()
|
|
}
|
|
return fmt.Sprintf("%s: provider returned HTTP status %d", ErrLLMGenerate, e.statusCode)
|
|
}
|
|
|
|
// GoString returns the same redacted diagnostic as Error.
|
|
func (e *GenerationError) GoString() string {
|
|
return e.Error()
|
|
}
|
|
|
|
// Unwrap returns ErrLLMGenerate. It is safe to call on a nil receiver or zero
|
|
// value.
|
|
func (e *GenerationError) Unwrap() error {
|
|
return ErrLLMGenerate
|
|
}
|