65 lines
3.6 KiB
Go
65 lines
3.6 KiB
Go
// Package promptkit provides an embeddable engine for preparing and executing
|
|
// prompt-defined LLM workflows.
|
|
//
|
|
// Applications construct an [Engine] with [NewEngine], select filesystem or
|
|
// in-memory sources and optional engine-scoped [Backend] registrations, and
|
|
// call [Engine.InspectPrompt], [Engine.InspectProfile], [Engine.Prepare],
|
|
// [Engine.PrepareExecution], [Engine.Run], or [Engine.RunPrepared]. Concrete
|
|
// registries, repositories, validators, and the built-in OpenAI-compatible
|
|
// client remain internal implementation details.
|
|
//
|
|
// # Concurrency and ownership
|
|
//
|
|
// An Engine supports concurrent InspectPrompt, InspectProfile, Prepare,
|
|
// PrepareExecution, Run, and RunPrepared calls. Engine-local backend policies
|
|
// bound admitted Run and RunPrepared calls and model generations where
|
|
// configured, while different backend pools and unlimited backends continue
|
|
// independently. An injected [LLMClient] or [ArtifactReader] can therefore
|
|
// still receive concurrent calls and must be safe for that use.
|
|
//
|
|
// NewEngine copies in-memory profiles and backend definitions. Prepare,
|
|
// PrepareExecution, and Run copy request maps, slices, pointer values, and
|
|
// JSON-compatible extra parameters before using them. InspectPrompt and
|
|
// InspectProfile return copied inspection values. Returned values and values
|
|
// passed to extension interfaces are likewise isolated from engine state.
|
|
// Callers own those copies and may mutate them after the call that supplied or
|
|
// returned them. Returned structured errors are likewise caller-owned and may
|
|
// be mutated without affecting engine state or another error.
|
|
//
|
|
// # Security and sensitive data
|
|
//
|
|
// The default artifact reader treats [File] paths as caller-selected operating
|
|
// system paths. It does not restrict them to an application root or impose an
|
|
// inbound request-size policy. Promptkit is not an inbound request or
|
|
// untrusted-input security boundary. Applications must validate and restrict
|
|
// untrusted input before constructing a request, or install an [ArtifactReader]
|
|
// that enforces their filesystem, authorization, and size policies.
|
|
//
|
|
// Rendered messages, input and output [Artifact] bodies, [RunResult.RawOutput],
|
|
// and [ValidationResult.Errors] may contain sensitive data. Credential
|
|
// exclusion and redaction do not sanitize those values. Applications and
|
|
// injected collaborators are responsible for access control, retention,
|
|
// logging, and secret handling appropriate to their data.
|
|
//
|
|
// # JSON
|
|
//
|
|
// Stable JSON representations are provided for [PreparedRun], [RunResult],
|
|
// [Artifact], [ExecutionTarget], [OutputContract], [ValidationResult],
|
|
// [TokenUsage], [RenderedPrompt], [RenderedMessage], [CacheControl],
|
|
// [StructuredOutputSpec], [StructuredOutputJSONSpec], [GenerateRequest],
|
|
// [GenerateResponse], [ExecutionTargetPresence], and the string value types
|
|
// used by those values.
|
|
//
|
|
// Construction, inspection, handle, and error values, including [Config],
|
|
// [Backend], [RunRequest], [ArtifactRef], [ExecutionTargetOverride], [Profile],
|
|
// [OpenAICompatibleProfileConfig], [ProfileInspection],
|
|
// [PromptInputDefinition], [PromptInspection], [PreparedExecution], and
|
|
// [CapacityError], do not have stable JSON representations. Direct API keys
|
|
// are nevertheless excluded from JSON for every public value.
|
|
//
|
|
// JSON timestamps use time.Time's RFC 3339 encoding and are omitted when zero.
|
|
// PreparedRun and RunResult durations are encoded as integer milliseconds in
|
|
// duration_ms and omitted when zero. Run IDs and all exposed hashes are opaque:
|
|
// their spelling, length, character set, and algorithm are not API contracts.
|
|
package promptkit
|