44 lines
2.0 KiB
Go
44 lines
2.0 KiB
Go
package promptkit
|
|
|
|
import "go.maximumdirect.net/promptkit/internal/domain"
|
|
|
|
const exchangeString = "promptkit.Exchange{opaque}"
|
|
|
|
// Exchange is an immutable, reusable in-process snapshot of a completed
|
|
// conversation. It is not a persistence or restart format. Different engines
|
|
// can continue it, and independent branches do not alter one another.
|
|
//
|
|
// History preserves the effective request's message content, roles, and cache
|
|
// metadata, followed by the exact final [RunResult.RawOutput] as an assistant
|
|
// message. Intermediate structural-repair candidates and corrective instructions
|
|
// are excluded. A continuation extends that logical history according to
|
|
// [RunRequest.ContinueFrom], without changing its source exchange.
|
|
type Exchange struct{ internal *domain.Exchange }
|
|
|
|
// ExchangeDetails contains a detached copy of an exchange's logical history.
|
|
type ExchangeDetails struct {
|
|
// RunID identifies the execution that produced this exchange.
|
|
RunID string `json:"run_id"`
|
|
// ParentRunID identifies the immediate source execution, or is empty.
|
|
ParentRunID string `json:"parent_run_id,omitempty"`
|
|
Messages []RenderedMessage `json:"messages"`
|
|
}
|
|
|
|
// Details returns detached history, or zero details for a nil or empty handle.
|
|
// Messages include caller and model content and require appropriate handling.
|
|
// Inspection uses only retained state, without rendering, filesystem reads, or
|
|
// provider calls. Mutating returned messages or cache metadata cannot affect
|
|
// this exchange, another branch, or subsequent Details calls.
|
|
func (e *Exchange) Details() ExchangeDetails {
|
|
if e == nil || e.internal == nil {
|
|
return ExchangeDetails{}
|
|
}
|
|
return ExchangeDetails{RunID: e.internal.RunID(), ParentRunID: e.internal.ParentRunID(), Messages: fromDomainRenderedMessages(e.internal.Messages())}
|
|
}
|
|
|
|
// String returns an opaque representation without conversation content.
|
|
func (e Exchange) String() string { return exchangeString }
|
|
|
|
// GoString returns an opaque representation without conversation content.
|
|
func (e Exchange) GoString() string { return exchangeString }
|