first commit
This commit is contained in:
59
framework/configstore/tables/modelconfig.go
Normal file
59
framework/configstore/tables/modelconfig.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package tables
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// TableModelConfig represents a model configuration with rate limiting and budgeting
|
||||
type TableModelConfig struct {
|
||||
ID string `gorm:"primaryKey;type:varchar(255)" json:"id"`
|
||||
ModelName string `gorm:"type:varchar(255);not null;uniqueIndex:idx_model_provider" json:"model_name"`
|
||||
Provider *string `gorm:"type:varchar(50);uniqueIndex:idx_model_provider" json:"provider,omitempty"` // Optional provider, nullable
|
||||
BudgetID *string `gorm:"type:varchar(255);index:idx_model_config_budget" json:"budget_id,omitempty"`
|
||||
RateLimitID *string `gorm:"type:varchar(255);index:idx_model_config_rate_limit" json:"rate_limit_id,omitempty"`
|
||||
|
||||
// Relationships
|
||||
Budget *TableBudget `gorm:"foreignKey:BudgetID;onDelete:CASCADE" json:"budget,omitempty"`
|
||||
RateLimit *TableRateLimit `gorm:"foreignKey:RateLimitID;onDelete:CASCADE" json:"rate_limit,omitempty"`
|
||||
|
||||
// Config hash is used to detect the changes synced from config.json file
|
||||
// Every time we sync the config.json file, we will update the config hash
|
||||
ConfigHash string `gorm:"type:varchar(255);null" json:"config_hash"`
|
||||
|
||||
CreatedAt time.Time `gorm:"index;not null" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"index;not null" json:"updated_at"`
|
||||
}
|
||||
|
||||
// TableName sets the table name for each model
|
||||
func (TableModelConfig) TableName() string {
|
||||
return "governance_model_configs"
|
||||
}
|
||||
|
||||
// BeforeSave hook for ModelConfig to validate required fields
|
||||
func (mc *TableModelConfig) BeforeSave(tx *gorm.DB) error {
|
||||
// Validate that ModelName is not empty
|
||||
if strings.TrimSpace(mc.ModelName) == "" {
|
||||
return fmt.Errorf("model_name cannot be empty")
|
||||
}
|
||||
|
||||
// Validate that if BudgetID is provided, it's not an empty string
|
||||
if mc.BudgetID != nil && strings.TrimSpace(*mc.BudgetID) == "" {
|
||||
return fmt.Errorf("budget_id cannot be an empty string")
|
||||
}
|
||||
|
||||
// Validate that if RateLimitID is provided, it's not an empty string
|
||||
if mc.RateLimitID != nil && strings.TrimSpace(*mc.RateLimitID) == "" {
|
||||
return fmt.Errorf("rate_limit_id cannot be an empty string")
|
||||
}
|
||||
|
||||
// Validate that if Provider is provided, it's not an empty string
|
||||
if mc.Provider != nil && strings.TrimSpace(*mc.Provider) == "" {
|
||||
return fmt.Errorf("provider cannot be an empty string")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user