apiattempt

package
v0.0.18 Latest Latest
Warning

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

Go to latest
Published: Aug 22, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package apiattempt defines Generic API execution contracts independently from the existing LLM attempt contracts.

Index

Constants

View Source
const (
	APIProtocolHTTP      = models.APIProtocolHTTP
	APIProtocolWebSocket = models.APIProtocolWebSocket

	MaxRateLimitHits           = 64
	MaxRateLimitHitNameBytes   = models.MaxRateLimitHitNameBytes
	MaxRateLimitDimensionBytes = 64
	MaxRateLimitBucketBytes    = 256
	MaxRateLimitReasonBytes    = 256
	MaxTraceBodyBytes          = 16 * 1024 * 1024
	MaxAPIErrorMessageBytes    = 1024
)

Variables

View Source
var (
	ErrAPIResultTooLarge      = errors.New("generic API execution result too large")
	ErrInvalidExecutionResult = errors.New("invalid generic API execution result")
)

Functions

func EncodeResultJSONWithin

func EncodeResultJSONWithin(result APIExecutionResult, maxBytes int) ([]byte, error)

Types

type APIAttemptMeta

type APIAttemptMeta struct {
	APIServiceID       uint           `json:"api_service_id"`
	APIRouteID         uint           `json:"api_route_id"`
	UserID             uint           `json:"user_id,omitempty"`
	GroupID            uint           `json:"group_id,omitempty"`
	TokenID            uint           `json:"token_id,omitempty"`
	Protocol           APIProtocol    `json:"protocol"`
	Method             string         `json:"method"`
	Subpath            string         `json:"subpath,omitempty"`
	RawQuery           string         `json:"raw_query,omitempty"`
	RequestTrailerKeys []string       `json:"request_trailer_keys,omitempty"`
	TracePolicy        APITracePolicy `json:"trace_policy,omitempty"`
}

type APIBodyCapture

type APIBodyCapture struct {
	Captured      bool   `json:"captured"`
	Status        string `json:"status,omitempty"`
	SkipReason    string `json:"skip_reason,omitempty"`
	Data          string `json:"data,omitempty"`
	CapturedBytes int64  `json:"captured_bytes,omitempty"`
	TotalBytes    int64  `json:"total_bytes,omitempty"`
	Truncated     bool   `json:"truncated,omitempty"`
}

type APIExecutionResult

type APIExecutionResult struct {
	APIUpstreamID          uint                  `json:"api_upstream_id,omitempty"`
	APIUpstreamName        string                `json:"api_upstream_name,omitempty"`
	UpstreamStatus         int                   `json:"upstream_status,omitempty"`
	ProviderDispatchKnown  bool                  `json:"provider_dispatch_known"`
	ProviderDispatched     bool                  `json:"provider_dispatched"`
	RequestBytes           int64                 `json:"request_bytes,omitempty"`
	ResponseBytes          int64                 `json:"response_bytes,omitempty"`
	FirstByteMs            int                   `json:"first_byte_ms,omitempty"`
	WebSocketCloseCode     int                   `json:"websocket_close_code,omitempty"`
	ErrorStage             string                `json:"error_stage,omitempty"`
	ErrorCode              string                `json:"error_code,omitempty"`
	ErrorMessage           string                `json:"error_message,omitempty"`
	RateLimitDecision      string                `json:"rate_limit_decision,omitempty"`
	RateLimitWaitMs        int                   `json:"rate_limit_wait_ms,omitempty"`
	RateLimitReason        string                `json:"rate_limit_reason,omitempty"`
	RateLimitHits          []models.RateLimitHit `json:"rate_limit_hits,omitempty"`
	RateLimitHitTotal      int                   `json:"rate_limit_hit_total,omitempty"`
	RateLimitHitsTruncated bool                  `json:"rate_limit_hits_truncated,omitempty"`
	Trace                  *APIExecutionTrace    `json:"trace,omitempty"`
}

func DecodeResultJSONWithin

func DecodeResultJSONWithin(payload []byte, maxBytes int) (APIExecutionResult, error)

func NormalizeRateLimitResult

func NormalizeRateLimitResult(result APIExecutionResult) APIExecutionResult

NormalizeRateLimitResult deep-clones, stably orders, and bounds limiter hits. Total counts every observed hit, including records omitted by the fixed cap.

func (APIExecutionResult) Slim

func (result APIExecutionResult) Slim(maxBytes int) (APIExecutionResult, error)

Slim returns a deep-cloned result whose final JSON encoding fits maxBytes. It reduces body data before non-essential header values and never removes the top-level dispatch, error, byte, status, or correlation facts.

func (APIExecutionResult) Validate

func (result APIExecutionResult) Validate() error

type APIExecutionTrace

type APIExecutionTrace struct {
	SourceRequestHeaders           map[string][]string `json:"source_request_headers,omitempty"`
	SourceRequestTrailers          map[string][]string `json:"source_request_trailers,omitempty"`
	SourceRequestHeadersTruncated  bool                `json:"source_request_headers_truncated,omitempty"`
	SourceRequestTrailersTruncated bool                `json:"source_request_trailers_truncated,omitempty"`
	SourceRequestBody              *APIBodyCapture     `json:"source_request_body,omitempty"`
	RequestHeaders                 map[string][]string `json:"request_headers,omitempty"`
	RequestTrailers                map[string][]string `json:"request_trailers,omitempty"`
	ResponseHeaders                map[string][]string `json:"response_headers,omitempty"`
	ResponseTrailers               map[string][]string `json:"response_trailers,omitempty"`
	RequestHeadersTruncated        bool                `json:"request_headers_truncated,omitempty"`
	RequestTrailersTruncated       bool                `json:"request_trailers_truncated,omitempty"`
	ResponseHeadersTruncated       bool                `json:"response_headers_truncated,omitempty"`
	ResponseTrailersTruncated      bool                `json:"response_trailers_truncated,omitempty"`
	RequestBody                    *APIBodyCapture     `json:"request_body,omitempty"`
	ResponseBody                   *APIBodyCapture     `json:"response_body,omitempty"`
}

APIExecutionTrace carries bounded Source-ingress and execution-side HTTP capture facts. Only the Source Agent may populate SourceRequest* fields.

type APIProtocol

type APIProtocol = models.APIProtocol

type APITraceMode

type APITraceMode string
const (
	APITraceModeOff     APITraceMode = "off"
	APITraceModeHeaders APITraceMode = "headers"
	APITraceModeFull    APITraceMode = "full"
)

type APITracePolicy

type APITracePolicy struct {
	Mode         APITraceMode `json:"mode"`
	MaxBodyBytes int          `json:"max_body_bytes"`
}

APITracePolicy is frozen by the Source Agent before dispatch. The Execution Agent must consume this value directly and must not reload Token policy.

func (APITracePolicy) Valid

func (policy APITracePolicy) Valid() bool

Jump to

Keyboard shortcuts

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