contextcount

package
v0.12.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 25, 2026 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Overview

Package contextcount provides deterministic complete-request context counting.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrContextCountFunctionMissing           = errors.New("context count function is missing")
	ErrContextCountQualityInvalid            = errors.New("context count quality is invalid")
	ErrContextCountModelMismatch             = errors.New("context count model does not match request model")
	ErrContextCountCapabilityQualityMismatch = errors.New("context count quality does not match declared capability")
)

Functions

func CompatibleCounter

func CompatibleCounter(inf InferenceCapability, counter CounterCapability) error

CompatibleCounter reports whether a counter avoids weakening an inference path's transport, identity, and retention posture.

Types

type CapabilityField

type CapabilityField string
const (
	CapabilityFieldProvider          CapabilityField = "Provider"
	CapabilityFieldTransport         CapabilityField = "Transport"
	CapabilityFieldSecurityIdentity  CapabilityField = "SecurityIdentity"
	CapabilityFieldRetention         CapabilityField = "Retention"
	CapabilityFieldTokenizerRevision CapabilityField = "TokenizerRev"
	CapabilityFieldQuality           CapabilityField = "Quality"
)

type CapabilityKind

type CapabilityKind string
const (
	CapabilityKindCounter   CapabilityKind = "counter"
	CapabilityKindInference CapabilityKind = "inference"
)

type CapabilityValidationError

type CapabilityValidationError struct {
	Capability CapabilityKind
	Field      CapabilityField
	Reason     CapabilityValidationReason
}

func (*CapabilityValidationError) Error

func (e *CapabilityValidationError) Error() string

type CapabilityValidationReason

type CapabilityValidationReason string
const (
	CapabilityValidationReasonUnknown    CapabilityValidationReason = "unknown"
	CapabilityValidationReasonOutOfRange CapabilityValidationReason = "out of range"
	CapabilityValidationReasonEmpty      CapabilityValidationReason = "must not be empty"
	CapabilityValidationReasonMustBeZero CapabilityValidationReason = "must be zero"
)

type ContextCount

type ContextCount struct {
	Model       model.ModelKey
	InputTokens content.TokenCount
	Quality     CountQuality
}

ContextCount is the normalized input-token occupancy of one complete request.

type ContextCountError

type ContextCountError struct {
	Model   model.ModelKey
	Quality CountQuality
	Cause   error
}

func (*ContextCountError) Error

func (e *ContextCountError) Error() string

func (*ContextCountError) Unwrap

func (e *ContextCountError) Unwrap() error

type ContextCountFunc

type ContextCountFunc func(context.Context, inference.Request) (ContextCount, error)

ContextCountFunc adapts a function to the ContextCounter contract.

type ContextCounter

type ContextCounter interface {
	CountContext(context.Context, inference.Request) (ContextCount, error)
	CounterCapability() CounterCapability
}

ContextCounter counts the complete provider-neutral request and declares its secret-free trust posture without performing I/O.

type ContextCounterFunc

type ContextCounterFunc struct {
	Count      ContextCountFunc
	Capability CounterCapability
}

ContextCounterFunc combines a count function with its fixed trust metadata.

func (ContextCounterFunc) CountContext

CountContext calls the count function and rejects structurally invalid results.

func (ContextCounterFunc) CounterCapability

func (c ContextCounterFunc) CounterCapability() CounterCapability

CounterCapability returns the adapter's declared metadata without I/O.

type CountQuality

type CountQuality uint8

CountQuality describes how a context count was produced.

const (
	CountQualityUnknown CountQuality = iota
	CountQualityExactProvider
	CountQualityExactLocal
	CountQualityHeuristicEstimate
)

type CounterCapability

type CounterCapability struct {
	Provider         ProviderID
	Transport        CounterTransport
	SecurityIdentity SecurityIdentity
	Retention        RetentionPosture
	TokenizerRev     TokenizerRevision
	Quality          CountQuality
}

CounterCapability declares the trust and quality posture of a context counter.

func (CounterCapability) Validate

func (c CounterCapability) Validate() error

Validate rejects incomplete or contradictory counter metadata.

type CounterCompatibilityError

type CounterCompatibilityError struct {
	Inference InferenceCapability
	Counter   CounterCapability
	Reason    CounterCompatibilityReason
	Cause     error
}

func (*CounterCompatibilityError) Error

func (e *CounterCompatibilityError) Error() string

func (*CounterCompatibilityError) Unwrap

func (e *CounterCompatibilityError) Unwrap() error

type CounterCompatibilityReason

type CounterCompatibilityReason string
const (
	CounterCompatibilityInvalidInference   CounterCompatibilityReason = "invalid inference capability"
	CounterCompatibilityInvalidCounter     CounterCompatibilityReason = "invalid counter capability"
	CounterCompatibilityProviderMismatch   CounterCompatibilityReason = "provider mismatch"
	CounterCompatibilityIdentityMismatch   CounterCompatibilityReason = "security identity mismatch"
	CounterCompatibilityTransportDowngrade CounterCompatibilityReason = "transport downgrade"
	CounterCompatibilityRetentionDowngrade CounterCompatibilityReason = "retention downgrade"
)

type CounterTransport

type CounterTransport uint8

CounterTransport describes where request bytes travel for counting.

const (
	CounterTransportUnknown CounterTransport = iota
	CounterTransportLocal
	CounterTransportSameEndpoint
	CounterTransportSeparateEndpoint
)

type Estimator

type Estimator struct{}

Estimator deterministically estimates input occupancy from a dialect's encoded complete request. Its zero value is ready for use.

func NewEstimator

func NewEstimator() *Estimator

NewEstimator constructs a deterministic complete-request estimator.

func (*Estimator) CountContext

func (e *Estimator) CountContext(ctx context.Context, req inference.Request) (ContextCount, error)

CountContext encodes the request in its model's API dialect and estimates one token per four encoded bytes. Invoke mode is canonical because ContextCounter has no response mode and streaming is response mechanics, not semantic input.

func (*Estimator) CounterCapability

func (e *Estimator) CounterCapability() CounterCapability

CounterCapability declares that estimation stays in process, retains no request data, and is provider-neutral. A nil receiver returns invalid zero metadata rather than claiming a capability for unusable state.

type EstimatorStateError

type EstimatorStateError struct {
	Reason EstimatorStateReason
}

EstimatorStateError reports invalid estimator state.

func (*EstimatorStateError) Error

func (e *EstimatorStateError) Error() string

type EstimatorStateReason

type EstimatorStateReason string

EstimatorStateReason identifies why an estimator cannot produce a count.

const (
	EstimatorStateNilReceiver EstimatorStateReason = "nil receiver"
	EstimatorStateNilContext  EstimatorStateReason = "nil context"
)

type InferenceCapability

type InferenceCapability struct {
	Provider         ProviderID
	Transport        InferenceTransport
	SecurityIdentity SecurityIdentity
	Retention        RetentionPosture
}

InferenceCapability declares the inference path's trust posture.

func (InferenceCapability) Validate

func (c InferenceCapability) Validate() error

Validate rejects incomplete or contradictory inference metadata. An unknown retention posture remains structurally valid and is handled fail-closed by compatibility checks.

type InferenceTransport

type InferenceTransport uint8

InferenceTransport describes the inference request's transport protection.

const (
	InferenceTransportUnknown InferenceTransport = iota
	InferenceTransportLocal
	InferenceTransportTLS
	InferenceTransportAttestedTLS
	InferenceTransportEndToEndEncrypted
)

type ModelIdentityError

type ModelIdentityError struct {
	Model model.ModelKey
	Err   error
}

ModelIdentityError reports an unresolved request model identity.

func (*ModelIdentityError) Error

func (e *ModelIdentityError) Error() string

func (*ModelIdentityError) Unwrap

func (e *ModelIdentityError) Unwrap() error

type ProviderID

type ProviderID string

ProviderID identifies the provider or gateway that owns a transport path.

type RequestEncodingError

type RequestEncodingError struct {
	APIFormat model.APIFormat
	Err       error
}

RequestEncodingError reports a dialect encoder failure and preserves its cause.

func (*RequestEncodingError) Error

func (e *RequestEncodingError) Error() string

func (*RequestEncodingError) Unwrap

func (e *RequestEncodingError) Unwrap() error

type RetentionPosture

type RetentionPosture uint8

RetentionPosture describes provider-declared retention of request input.

const (
	RetentionUnknown RetentionPosture = iota
	RetentionNone
	RetentionEphemeral
	RetentionLogged
)

type SecurityIdentity

type SecurityIdentity [32]byte

SecurityIdentity is a digest of canonical endpoint and security-policy identity.

type TokenizerRevision

type TokenizerRevision string

TokenizerRevision identifies the tokenization algorithm used by a counter.

const EstimatorRevision TokenizerRevision = "bundled-openai-responses-anthropic-gemini-bedrock-request-bytes-div4-v3"

EstimatorRevision pins the bundled OpenAI/OpenAI-Responses/Anthropic/Gemini/Bedrock-Converse encoder suite and the complete-request bytes/4 heuristic. Any count-affecting codec change must bump this revision so durable measurements remain attributable. Bumped from "bundled-openai-responses-anthropic-gemini-request-bytes-div4-v1" to add the bedrockconverse encoder to the bundle, then to v2 because the bundled encoders themselves changed shape: OpenAI Chat emits max_completion_tokens for reasoning models, and Responses emits schema-valid input items (assistant history as a bare-string message, reasoning items carrying their issued id). Both shift encoded byte length, so counts taken under v1 are not comparable. Version 3 records Anthropic's conversation projection: adjacent neutral user-role turns now share the single user message sent on that wire.

type UnsupportedAPIFormatError

type UnsupportedAPIFormatError struct {
	APIFormat model.APIFormat
}

UnsupportedAPIFormatError reports a request dialect without a bundled encoder.

func (*UnsupportedAPIFormatError) Error

func (e *UnsupportedAPIFormatError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL