Documentation
¶
Index ¶
- Constants
- Variables
- func IsValidSlug(s string) bool
- func IsValidType(t Type) bool
- func MatchResource(pattern, uri string) bool
- func NewSlug() (string, error)
- func ValidateAuthType(consType Type, mode RoutingMode, authType authdomain.Type) error
- type Consumer
- type CreateParams
- type FailMode
- type Fallback
- type FallbackBudget
- type FallbackTrigger
- type LBConfig
- type LBPoolMember
- type ListFilter
- type MCPPolicy
- type ModelPolicies
- type ModelPolicy
- type RehydrateParams
- type Repository
- type RoutingMode
- type Toolkit
- func (t Toolkit) AllowsResource(registryID ids.RegistryID, uri string) bool
- func (t Toolkit) EntriesFor(registryID ids.RegistryID) []ToolkitEntry
- func (t Toolkit) PromptEntriesFor(registryID ids.RegistryID) []ToolkitEntry
- func (t Toolkit) ResourceEntriesFor(registryID ids.RegistryID) []ToolkitEntry
- func (t Toolkit) Validate(known map[ids.RegistryID]struct{}) error
- type ToolkitEntry
- type Type
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 IsValidType ¶
func MatchResource ¶
func NewSlug ¶
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
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 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
type FallbackBudget ¶
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) Validate ¶
func (l *LBConfig) Validate(inline ModelPolicies) error
type LBPoolMember ¶
type LBPoolMember struct {
RegistryID ids.RegistryID `json:"registry_id"`
Models []string `json:"models,omitempty"`
}
type ListFilter ¶
type MCPPolicy ¶
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
type ModelPolicy ¶
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
type ToolkitEntry ¶
Source Files
¶
Click to show internal directories.
Click to hide internal directories.