Documentation
¶
Index ¶
- Variables
- func AssembleContext(segs []Segment) (prompt string, stablePrefixHash string)
- func HashBytes(b []byte) string
- func HashString(s string) string
- func HashTokenIDs(tokens []int) string
- func NewManifestMismatchError(reason string) error
- type ContextManifest
- func (m ContextManifest) CompatibleRuntime(next ContextManifest) (bool, string)
- func (m ContextManifest) Digest() string
- func (m ContextManifest) IsZero() bool
- func (m ContextManifest) ValidateSplitTokenization(stableText, suffixText string, stableTokens, suffixTokens []int, ...) error
- func (m ContextManifest) WithStableTokenHash(tokenHash string) ContextManifest
- func (m ContextManifest) WithStableTokenization(stableText string, tokens []int, tokenize TokenizeFunc, addBOS bool) (ContextManifest, error)
- func (m ContextManifest) WithVolatileTokenization(stable ContextManifest, prefixTokens int, suffixText string, tokens []int, ...) (ContextManifest, error)
- type ManifestIdentity
- type ManifestMismatchError
- type ManifestSegment
- type Segment
- type SegmentKind
- type TokenizeFunc
Constants ¶
This section is empty.
Variables ¶
var ErrManifestMismatch = errors.New("contextasm: context manifest mismatch")
Functions ¶
func AssembleContext ¶
AssembleContext renders segments into a single prompt whose stable prefix is byte-identical across turns when the stable segments are unchanged.
func HashString ¶
func HashTokenIDs ¶
HashTokenIDs hashes token IDs under an explicit little-endian encoding so the value is stable across 32-bit/64-bit Go platforms.
Types ¶
type ContextManifest ¶
type ContextManifest struct {
ProfileID string `json:"profile_id,omitempty"`
Backend string `json:"backend"`
BackendVersion string `json:"backend_version,omitempty"`
ModelDigest string `json:"model_digest,omitempty"`
PromptFormat string `json:"prompt_format"`
PromptTemplateDigest string `json:"prompt_template_digest"`
RuntimeDigest string `json:"runtime_digest"`
AddBOS bool `json:"add_bos"`
StableBytes int `json:"stable_bytes"`
TotalBytes int `json:"total_bytes"`
StableByteHash string `json:"stable_byte_hash"`
StableTokenHash string `json:"stable_token_hash,omitempty"`
VolatileTokenHash string `json:"volatile_token_hash,omitempty"`
Segments []ManifestSegment `json:"segments,omitempty"`
}
ContextManifest is the cache identity. A warm hit is valid only when the runtime identity is compatible and the token prefix still matches.
func AssembleManifest ¶
func AssembleManifest(segs []Segment, id ManifestIdentity) (prompt string, manifest ContextManifest)
AssembleManifest renders segments canonically and returns a manifest over the rendered logical context. Backends that render through an opaque model-native chat template may still use this as cache identity, but must not claim exact template-token segment ranges until they can prove boundaries under that template.
func (ContextManifest) CompatibleRuntime ¶
func (m ContextManifest) CompatibleRuntime(next ContextManifest) (bool, string)
CompatibleRuntime reports whether resident KV created for m may be considered for reuse by next. StableByteHash is deliberately excluded: if stable text changes under the same runtime identity, token LCP reuse is still correct.
func (ContextManifest) Digest ¶
func (m ContextManifest) Digest() string
Digest returns a stable hash of the full manifest.
func (ContextManifest) IsZero ¶
func (m ContextManifest) IsZero() bool
IsZero reports whether the caller supplied no manifest.
func (ContextManifest) ValidateSplitTokenization ¶
func (m ContextManifest) ValidateSplitTokenization(stableText, suffixText string, stableTokens, suffixTokens []int, tokenize TokenizeFunc, addBOS bool) error
ValidateSplitTokenization proves that tokenizing stable+suffix as a cold full prompt is exactly equivalent to the warm path's stable tokens plus suffix tokens.
func (ContextManifest) WithStableTokenHash ¶
func (m ContextManifest) WithStableTokenHash(tokenHash string) ContextManifest
WithStableTokenHash returns a copy of the manifest with the backend-resolved stable token hash attached.
func (ContextManifest) WithStableTokenization ¶
func (m ContextManifest) WithStableTokenization(stableText string, tokens []int, tokenize TokenizeFunc, addBOS bool) (ContextManifest, error)
WithStableTokenization fills token ranges/hashes for stable segments using the actual backend tokenizer.
func (ContextManifest) WithVolatileTokenization ¶
func (m ContextManifest) WithVolatileTokenization(stable ContextManifest, prefixTokens int, suffixText string, tokens []int, tokenize TokenizeFunc) (ContextManifest, error)
WithVolatileTokenization merges stable token data from the resident manifest and fills token ranges/hashes for volatile suffix segments.
type ManifestIdentity ¶
type ManifestIdentity struct {
ProfileID string
Backend string
BackendVersion string
ModelDigest string
PromptFormat string
PromptTemplateDigest string
RuntimeDigest string
AddBOS bool
}
ManifestIdentity is the backend/profile/runtime identity attached to a manifest built from assembled context segments.
type ManifestMismatchError ¶
type ManifestMismatchError struct {
Reason string
}
ManifestMismatchError carries the exact reason a suffix/prefix could not be safely paired with resident KV.
func (*ManifestMismatchError) Error ¶
func (e *ManifestMismatchError) Error() string
func (*ManifestMismatchError) Is ¶
func (e *ManifestMismatchError) Is(target error) bool
type ManifestSegment ¶
type ManifestSegment struct {
Kind string `json:"kind"`
Stable bool `json:"stable"`
ByteStart int `json:"byte_start"`
ByteEnd int `json:"byte_end"`
ByteHash string `json:"byte_hash"`
TokenStart int `json:"token_start,omitempty"`
TokenEnd int `json:"token_end,omitempty"`
TokenHash string `json:"token_hash,omitempty"`
}
ManifestSegment identifies one rendered prompt segment. Byte hashes are available before tokenization; token hashes are filled only when a backend can tokenize under the actual model/profile.
type Segment ¶
type Segment struct {
Kind SegmentKind
Content string
}
Segment is one deterministic, hashable piece of workspace context.
type SegmentKind ¶
type SegmentKind int
SegmentKind classifies a context segment by how stable it is across turns. Lower kinds are more stable and render first so backend prefix caches can reuse their KV; kinds at or after KindDiff are volatile and render last.
const ( KindSystem SegmentKind = iota // system / developer instructions KindTools // tool schemas KindRepoRules // AGENTS.md / project conventions KindRepoMap // repo / symbol map KindPinned // pinned files KindDiff // current diff / working changes (volatile) KindTerminal // terminal / test output (volatile) KindUserTurn // the user's message (volatile) )
func (SegmentKind) Tag ¶
func (k SegmentKind) Tag() string
Tag returns the stable string form used in manifests.