consumer

package
v0.2.5 Latest Latest
Warning

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

Go to latest
Published: Jun 26, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultRegistryWeight is applied when a binding does not specify a weight.
	DefaultRegistryWeight = 1
	// MaxRegistryWeight caps per-association weights on a 1..100 relative scale
	// (read it like a percentage share within a pool). The weighted round-robin
	// scheduler iterates up to len(registries)*(maxWeight+1) times per pick, so a
	// bounded weight keeps a single request from monopolizing the lock.
	MaxRegistryWeight = 100
)
View Source
const ToolWildcard = "*"

Variables

View Source
var (
	ErrNotFound         = fmt.Errorf("consumer: %w", commonerrors.ErrNotFound)
	ErrAlreadyExists    = fmt.Errorf("consumer: %w", commonerrors.ErrAlreadyExists)
	ErrHasDependents    = fmt.Errorf("consumer: %w", commonerrors.ErrHasDependents)
	ErrInvalidGatewayID = fmt.Errorf("consumer: invalid gateway_id: %w", commonerrors.ErrValidation)
	ErrInvalidAuthID    = fmt.Errorf("consumer: invalid auth_id: %w", commonerrors.ErrValidation)
	ErrInvalidName      = fmt.Errorf("consumer: invalid name: %w", commonerrors.ErrValidation)
	ErrInvalidType      = fmt.Errorf("consumer: invalid type: %w", commonerrors.ErrValidation)
	ErrInvalidSlug      = fmt.Errorf("consumer: invalid slug: %w", commonerrors.ErrValidation)

	ErrInvalidRoutingMode = fmt.Errorf("consumer: invalid routing_mode: %w", commonerrors.ErrValidation)
	ErrInvalidLBConfig    = fmt.Errorf("consumer: invalid lb_config: %w", commonerrors.ErrValidation)
	ErrSlugAlreadyExists  = fmt.Errorf("consumer: slug already exists: %w", commonerrors.ErrAlreadyExists)
	ErrInvalidFallback    = fmt.Errorf("consumer: invalid fallback: %w", commonerrors.ErrValidation)
	ErrInvalidModelPolicy = fmt.Errorf("consumer: invalid model policy: %w", commonerrors.ErrValidation)

	ErrInvalidToolkit  = fmt.Errorf("consumer: invalid toolkit: %w", commonerrors.ErrValidation)
	ErrInvalidFailMode = fmt.Errorf("consumer: invalid fail_mode: %w", commonerrors.ErrValidation)
)

Functions

func IsValidSlug

func IsValidSlug(s string) bool

func IsValidType

func IsValidType(t Type) bool

func MatchResource

func MatchResource(pattern, uri string) bool

func NewSlug

func NewSlug() (string, error)

NewSlug returns a short, URL-safe, random consumer alias (e.g. "X84Yhsy8"). 62^8 combinations make collisions vanishingly rare; the unique index plus a retry on save covers the residual risk.

func ValidateAuthType

func ValidateAuthType(consType Type, mode RoutingMode, authType authdomain.Type) error

Types

type Consumer

type Consumer struct {
	ID              ids.ConsumerID         `json:"id"`
	GatewayID       ids.GatewayID          `json:"gateway_id"`
	Name            string                 `json:"name"`
	Type            Type                   `json:"type"`
	Slug            string                 `json:"slug"`
	RoutingMode     RoutingMode            `json:"routing_mode"`
	LBConfig        *LBConfig              `json:"lb_config,omitempty"`
	Headers         map[string]string      `json:"headers,omitempty"`
	Active          bool                   `json:"active"`
	RegistryIDs     []ids.RegistryID       `json:"registry_ids"`
	RegistryWeights map[ids.RegistryID]int `json:"registry_weights,omitempty"`
	RoleIDs         []ids.RoleID           `json:"role_ids"`
	AuthIDs         []ids.AuthID           `json:"auth_ids"`
	Fallback        *Fallback              `json:"fallback,omitempty"`
	ModelPolicies   ModelPolicies          `json:"model_policies,omitempty"`
	MCP             *MCPPolicy             `json:"mcp,omitempty"`
	CreatedAt       time.Time              `json:"created_at"`
	UpdatedAt       time.Time              `json:"updated_at"`
}

func New

func New(params CreateParams) (*Consumer, error)

func Rehydrate

func Rehydrate(params RehydrateParams) *Consumer

func (*Consumer) FailMode

func (c *Consumer) FailMode() FailMode

func (*Consumer) Toolkit

func (c *Consumer) Toolkit() Toolkit

func (*Consumer) Validate

func (c *Consumer) Validate() error

func (*Consumer) WeightFor

func (c *Consumer) WeightFor(registryID ids.RegistryID) int

type CreateParams

type CreateParams struct {
	GatewayID       ids.GatewayID
	Name            string
	Type            Type
	RoutingMode     RoutingMode
	LBConfig        *LBConfig
	Headers         map[string]string
	Active          *bool
	RegistryIDs     []ids.RegistryID
	RegistryWeights map[ids.RegistryID]int
	RoleIDs         []ids.RoleID
	AuthIDs         []ids.AuthID
	Fallback        *Fallback
	ModelPolicies   ModelPolicies
	MCP             *MCPPolicy
}

type FailMode

type FailMode string
const (
	FailModeClosed FailMode = "closed"
	FailModeOpen   FailMode = "open"
)

func (FailMode) Validate

func (m FailMode) Validate() error

type Fallback

type Fallback struct {
	Enabled  bool                `json:"enabled"`
	Triggers []FallbackTrigger   `json:"triggers,omitempty"`
	Budget   FallbackBudget      `json:"budget"`
	Chain    registry.Registries `json:"chain,omitempty"`
}

func (*Fallback) HasTrigger

func (f *Fallback) HasTrigger(t FallbackTrigger) bool

func (*Fallback) Scan

func (f *Fallback) Scan(value interface{}) error

func (*Fallback) Validate

func (f *Fallback) Validate() error

func (Fallback) Value

func (f Fallback) Value() (driver.Value, error)

type FallbackBudget

type FallbackBudget struct {
	MaxAttempts     int           `json:"max_attempts"`
	MaxTotalLatency time.Duration `json:"max_total_latency,omitempty"`
}

type FallbackTrigger

type FallbackTrigger string
const (
	TriggerHTTP5xx       FallbackTrigger = "http_5xx"
	TriggerHTTP429       FallbackTrigger = "http_429"
	TriggerTimeout       FallbackTrigger = "timeout"
	TriggerProviderError FallbackTrigger = "provider_error"
	TriggerPluginReject  FallbackTrigger = "plugin_rejection"
)

func (FallbackTrigger) IsValid

func (t FallbackTrigger) IsValid() bool

type LBConfig

type LBConfig struct {
	Enabled         bool                      `json:"enabled"`
	Algorithm       string                    `json:"algorithm,omitempty"`
	PoolAlias       string                    `json:"pool_alias,omitempty"`
	Members         []LBPoolMember            `json:"members,omitempty"`
	EmbeddingConfig *registry.EmbeddingConfig `json:"embedding_config,omitempty"`
}

func (*LBConfig) Scan

func (l *LBConfig) Scan(value interface{}) error

func (*LBConfig) Validate

func (l *LBConfig) Validate(inline ModelPolicies) error

func (LBConfig) Value

func (l LBConfig) Value() (driver.Value, error)

type LBPoolMember

type LBPoolMember struct {
	RegistryID ids.RegistryID `json:"registry_id"`
	Models     []string       `json:"models,omitempty"`
}

type ListFilter

type ListFilter struct {
	GatewayID    ids.GatewayID
	NameContains string
	Page         int
	Size         int
}

type MCPPolicy

type MCPPolicy struct {
	Toolkit  Toolkit  `json:"toolkit"`
	FailMode FailMode `json:"fail_mode,omitempty"`
}

func (*MCPPolicy) Validate

func (p *MCPPolicy) Validate(known map[ids.RegistryID]struct{}) error

type ModelPolicies

type ModelPolicies map[ids.RegistryID]ModelPolicy

func (ModelPolicies) For

func (m ModelPolicies) For(backendID ids.RegistryID) (ModelPolicy, bool)

func (*ModelPolicies) Scan

func (m *ModelPolicies) Scan(value interface{}) error

func (ModelPolicies) Validate

func (m ModelPolicies) Validate(validRegistryIDs map[ids.RegistryID]struct{}) error

func (ModelPolicies) Value

func (m ModelPolicies) Value() (driver.Value, error)

type ModelPolicy

type ModelPolicy struct {
	Allowed []string `json:"allowed,omitempty"`
	Default string   `json:"default,omitempty"`
}

type RehydrateParams

type RehydrateParams struct {
	ID              ids.ConsumerID
	GatewayID       ids.GatewayID
	Name            string
	Type            Type
	Slug            string
	RoutingMode     RoutingMode
	LBConfig        *LBConfig
	Headers         map[string]string
	Active          bool
	RegistryIDs     []ids.RegistryID
	RegistryWeights map[ids.RegistryID]int
	RoleIDs         []ids.RoleID
	AuthIDs         []ids.AuthID
	Fallback        *Fallback
	ModelPolicies   ModelPolicies
	MCP             *MCPPolicy
	CreatedAt       time.Time
	UpdatedAt       time.Time
}

type Repository

type Repository interface {
	Save(ctx context.Context, c *Consumer) error
	Update(ctx context.Context, c *Consumer) error
	Delete(ctx context.Context, gatewayID ids.GatewayID, id ids.ConsumerID) error
	FindByID(ctx context.Context, id ids.ConsumerID) (*Consumer, error)
	List(ctx context.Context, filter ListFilter) (items []*Consumer, total int, err error)

	ListByGateway(ctx context.Context, gatewayID ids.GatewayID) ([]*Consumer, error)
	ListByAuthID(ctx context.Context, authID ids.AuthID) ([]*Consumer, error)

	FindActiveBySlug(ctx context.Context, slug string) (*Consumer, error)

	AttachRegistry(ctx context.Context, consumerID ids.ConsumerID, registryID ids.RegistryID, weight *int) error
	DetachRegistry(ctx context.Context, consumerID ids.ConsumerID, registryID ids.RegistryID) error
	DetachRegistryIfUnreferenced(ctx context.Context, gatewayID ids.GatewayID, consumerID ids.ConsumerID, registryID ids.RegistryID) (*Consumer, error)
	AttachRole(ctx context.Context, consumerID ids.ConsumerID, roleID ids.RoleID) error
	DetachRole(ctx context.Context, consumerID ids.ConsumerID, roleID ids.RoleID) error
	AttachAuth(ctx context.Context, consumerID ids.ConsumerID, authID ids.AuthID) error
	DetachAuth(ctx context.Context, consumerID ids.ConsumerID, authID ids.AuthID) error
	AttachPolicy(ctx context.Context, consumerID ids.ConsumerID, policyID ids.PolicyID) error
	DetachPolicy(ctx context.Context, consumerID ids.ConsumerID, policyID ids.PolicyID) error
}

type RoutingMode

type RoutingMode string
const (
	RoutingModeInline    RoutingMode = "inline"
	RoutingModeRoleBased RoutingMode = "role_based"
)

func (RoutingMode) IsValid

func (m RoutingMode) IsValid() bool

type Toolkit

type Toolkit []ToolkitEntry

func (Toolkit) AllowsResource

func (t Toolkit) AllowsResource(registryID ids.RegistryID, uri string) bool

func (Toolkit) EntriesFor

func (t Toolkit) EntriesFor(registryID ids.RegistryID) []ToolkitEntry

func (Toolkit) PromptEntriesFor

func (t Toolkit) PromptEntriesFor(registryID ids.RegistryID) []ToolkitEntry

func (Toolkit) ResourceEntriesFor

func (t Toolkit) ResourceEntriesFor(registryID ids.RegistryID) []ToolkitEntry

func (Toolkit) Validate

func (t Toolkit) Validate(known map[ids.RegistryID]struct{}) error

type ToolkitEntry

type ToolkitEntry struct {
	RegistryID ids.RegistryID `json:"registry_id"`
	Tool       string         `json:"tool,omitempty"`
	Prompt     string         `json:"prompt,omitempty"`
	Resource   string         `json:"resource,omitempty"`
	ExposeAs   string         `json:"expose_as,omitempty"`
}

type Type

type Type string
const (
	TypeLLM Type = "LLM"
	TypeMCP Type = "MCP"
	TypeA2A Type = "A2A"
)

func Types

func Types() []Type

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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