control

package
v0.0.0-...-d1393d0 Latest Latest
Warning

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

Go to latest
Published: May 9, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrPinExpired = errors.New("pin: expired")
View Source
var ErrQueueClosed = errors.New("persist: queue closed")

Functions

This section is empty.

Types

type AdminAPI

type AdminAPI struct {
	Pool             *broker.Pool
	ClaudePool       *broker.ClaudePool
	KeyPool          *broker.APIKeyPool
	Recorder         *Recorder
	Refresher        *TokenRefresher
	ClaudeRefresher  *ClaudeTokenRefresher
	Pricing          PricingService
	Queue            *Queue
	Token            string
	OAuthStart       OAuthStarter
	ClaudeOAuthStart OAuthStarter
}

func (*AdminAPI) Mount

func (a *AdminAPI) Mount(mux *http.ServeMux)

type BillingDailyUsage

type BillingDailyUsage struct {
	DailyUsage
	Model       string `json:"model,omitempty"`
	ServiceTier string `json:"service_tier,omitempty"`
}

type ClaudeTokenRefresher

type ClaudeTokenRefresher struct {
	PoolDir string
	Queue   *Queue
}

func (*ClaudeTokenRefresher) RefreshClaudeToken

func (t *ClaudeTokenRefresher) RefreshClaudeToken(ctx context.Context, acc *broker.ClaudeAccount) error

type ClaudeUsagePoller

type ClaudeUsagePoller struct {
	Pool      *broker.ClaudePool
	Refresher *ClaudeTokenRefresher
	Queue     *Queue
	Interval  time.Duration
	Logger    *slog.Logger
	// contains filtered or unexported fields
}

func (*ClaudeUsagePoller) Start

func (p *ClaudeUsagePoller) Start(parent context.Context)

func (*ClaudeUsagePoller) Stop

func (p *ClaudeUsagePoller) Stop()

type DailyUsage

type DailyUsage struct {
	Date         string  `json:"date"`
	Requests     int64   `json:"requests"`
	InputTokens  int64   `json:"input_tokens"`
	CachedTokens int64   `json:"cached_tokens,omitempty"`
	OutputTokens int64   `json:"output_tokens"`
	TotalTokens  int64   `json:"total_tokens"`
	TotalCost    float64 `json:"total_cost"`
	Errors       int64   `json:"errors"`
	Unpriced     int64   `json:"unpriced,omitempty"`
}

type OAuthStarter

type OAuthStarter func(ctx context.Context) (authURL string, err error)

type Op

type Op struct {
	Bucket string
	Key    string
	Value  []byte
	Delete bool
}

type PinStore

type PinStore struct {
	// contains filtered or unexported fields
}

func NewPinStore

func NewPinStore(s *store.Store, q *Queue) *PinStore

func (*PinStore) Lookup

func (p *PinStore) Lookup(prevResponseID string) (string, bool)

func (*PinStore) Put

func (p *PinStore) Put(prevResponseID, email string, expires time.Time) error

type PricingService

type PricingService interface {
	Status() pricing.StatusReport
	Refresh(ctx context.Context) error
	Misses() map[string]int64
	CalculateTokens(input, cached, output int64, model, tier string) (float64, bool)
}

type Queue

type Queue struct {
	// contains filtered or unexported fields
}

func NewQueue

func NewQueue(s *store.Store, opts ...QueueOption) *Queue

func (*Queue) Close

func (q *Queue) Close()

func (*Queue) Delete

func (q *Queue) Delete(bucket, key string) error

func (*Queue) Flush

func (q *Queue) Flush()

func (*Queue) Put

func (q *Queue) Put(bucket, key string, value []byte) error

type QueueOption

type QueueOption func(*Queue)

func WithBatchSize

func WithBatchSize(n int) QueueOption

func WithMaxWait

func WithMaxWait(d time.Duration) QueueOption

type Recorder

type Recorder struct {
	// contains filtered or unexported fields
}

func NewRecorder

func NewRecorder(s *store.Store, q *Queue, p *broker.Pool) *Recorder

func (*Recorder) RecordRequest

func (r *Recorder) RecordRequest(rec ingress.UsageRecord)

func (*Recorder) SetClaudePool

func (r *Recorder) SetClaudePool(p *broker.ClaudePool)

func (*Recorder) Today

func (r *Recorder) Today() DailyUsage

func (*Recorder) TodayByAccount

func (r *Recorder) TodayByAccount() map[string]DailyUsage

func (*Recorder) TodayByAccountBilling

func (r *Recorder) TodayByAccountBilling() map[string]map[string]BillingDailyUsage

func (*Recorder) TodayByKey

func (r *Recorder) TodayByKey() map[string]DailyUsage

func (*Recorder) TodayByKeyBilling

func (r *Recorder) TodayByKeyBilling() map[string]map[string]BillingDailyUsage

type RefreshFunc

type RefreshFunc func(email string) error

type TokenRefresher

type TokenRefresher struct {
	PoolDir string
	Queue   *Queue
}

func (*TokenRefresher) RefreshToken

func (t *TokenRefresher) RefreshToken(ctx context.Context, acc *broker.Account) error

type WhamPoller

type WhamPoller struct {
	Pool      *broker.Pool
	Client    *provider.ChatGPTClient
	Refresher *TokenRefresher
	Interval  time.Duration
	Logger    *slog.Logger
	// contains filtered or unexported fields
}

func (*WhamPoller) Start

func (p *WhamPoller) Start(parent context.Context)

func (*WhamPoller) Stop

func (p *WhamPoller) Stop()

Jump to

Keyboard shortcuts

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