mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
abf59ee7a6
When a user uses an AI feature, we record them in the `ai_seat_state` as consuming a seat. Added in debouching to prevent excessive writes to the db for this feature. There is no need for frequent updates.
39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
// Package aiseats is the AGPL version the package.
|
|
// The actual implementation is in `enterprise/aiseats`.
|
|
package aiseats
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
"github.com/coder/coder/v2/coderd/database"
|
|
)
|
|
|
|
type Reason struct {
|
|
EventType database.AiSeatUsageReason
|
|
Description string
|
|
}
|
|
|
|
// ReasonAIBridge constructs a reason for usage originating from AI Bridge.
|
|
func ReasonAIBridge(description string) Reason {
|
|
return Reason{EventType: database.AiSeatUsageReasonAibridge, Description: description}
|
|
}
|
|
|
|
// ReasonTask constructs a reason for usage originating from tasks.
|
|
func ReasonTask(description string) Reason {
|
|
return Reason{EventType: database.AiSeatUsageReasonTask, Description: description}
|
|
}
|
|
|
|
// SeatTracker records AI seat consumption state.
|
|
type SeatTracker interface {
|
|
// RecordUsage does not return an error to prevent blocking the user from using
|
|
// AI features. This method is used to record usage, not enforce it.
|
|
RecordUsage(ctx context.Context, userID uuid.UUID, reason Reason)
|
|
}
|
|
|
|
// Noop is an AGPL seat tracker that does nothing.
|
|
type Noop struct{}
|
|
|
|
func (Noop) RecordUsage(context.Context, uuid.UUID, Reason) {}
|