@@ -698,6 +698,18 @@ func (s *RDBConfigStore) GetProvidersConfig(ctx context.Context) (map[schemas.Mo
698698 return processedProviders , nil
699699}
700700
701+ // GetProviders retrieves all providers from the database with their governance relationships.
702+ func (s * RDBConfigStore ) GetProviders (ctx context.Context ) ([]tables.TableProvider , error ) {
703+ var providers []tables.TableProvider
704+ if err := s .db .WithContext (ctx ).Preload ("Budget" ).Preload ("RateLimit" ).Find (& providers ).Error ; err != nil {
705+ if errors .Is (err , gorm .ErrRecordNotFound ) {
706+ return nil , ErrNotFound
707+ }
708+ return nil , err
709+ }
710+ return providers , nil
711+ }
712+
701713// GetMCPConfig retrieves the MCP configuration from the database.
702714func (s * RDBConfigStore ) GetMCPConfig (ctx context.Context ) (* schemas.MCPConfig , error ) {
703715 var dbMCPClients []tables.TableMCPClient
@@ -1915,13 +1927,112 @@ func (s *RDBConfigStore) UpdateBudget(ctx context.Context, budget *tables.TableB
19151927 return nil
19161928}
19171929
1930+ // GetModelConfigs retrieves all model configs from the database.
1931+ func (s * RDBConfigStore ) GetModelConfigs (ctx context.Context ) ([]tables.TableModelConfig , error ) {
1932+ var modelConfigs []tables.TableModelConfig
1933+ if err := s .db .WithContext (ctx ).Preload ("Budget" ).Preload ("RateLimit" ).Find (& modelConfigs ).Error ; err != nil {
1934+ if errors .Is (err , gorm .ErrRecordNotFound ) {
1935+ return nil , ErrNotFound
1936+ }
1937+ return nil , err
1938+ }
1939+ return modelConfigs , nil
1940+ }
1941+
1942+ // GetModelConfig retrieves a specific model config from the database by model name and optional provider.
1943+ func (s * RDBConfigStore ) GetModelConfig (ctx context.Context , modelName string , provider * string ) (* tables.TableModelConfig , error ) {
1944+ var modelConfig tables.TableModelConfig
1945+ query := s .db .WithContext (ctx ).Where ("model_name = ?" , modelName )
1946+ if provider != nil {
1947+ query = query .Where ("provider = ?" , * provider )
1948+ } else {
1949+ query = query .Where ("provider IS NULL" )
1950+ }
1951+ if err := query .Preload ("Budget" ).Preload ("RateLimit" ).First (& modelConfig ).Error ; err != nil {
1952+ if errors .Is (err , gorm .ErrRecordNotFound ) {
1953+ return nil , ErrNotFound
1954+ }
1955+ return nil , err
1956+ }
1957+ return & modelConfig , nil
1958+ }
1959+
1960+ // GetModelConfigByID retrieves a specific model config from the database by ID.
1961+ func (s * RDBConfigStore ) GetModelConfigByID (ctx context.Context , id string ) (* tables.TableModelConfig , error ) {
1962+ var modelConfig tables.TableModelConfig
1963+ if err := s .db .WithContext (ctx ).Preload ("Budget" ).Preload ("RateLimit" ).First (& modelConfig , "id = ?" , id ).Error ; err != nil {
1964+ if errors .Is (err , gorm .ErrRecordNotFound ) {
1965+ return nil , ErrNotFound
1966+ }
1967+ return nil , err
1968+ }
1969+ return & modelConfig , nil
1970+ }
1971+
1972+ // CreateModelConfig creates a new model config in the database.
1973+ func (s * RDBConfigStore ) CreateModelConfig (ctx context.Context , modelConfig * tables.TableModelConfig , tx ... * gorm.DB ) error {
1974+ var txDB * gorm.DB
1975+ if len (tx ) > 0 {
1976+ txDB = tx [0 ]
1977+ } else {
1978+ txDB = s .db
1979+ }
1980+ if err := txDB .WithContext (ctx ).Create (modelConfig ).Error ; err != nil {
1981+ return s .parseGormError (err )
1982+ }
1983+ return nil
1984+ }
1985+
1986+ // UpdateModelConfig updates a model config in the database.
1987+ func (s * RDBConfigStore ) UpdateModelConfig (ctx context.Context , modelConfig * tables.TableModelConfig , tx ... * gorm.DB ) error {
1988+ var txDB * gorm.DB
1989+ if len (tx ) > 0 {
1990+ txDB = tx [0 ]
1991+ } else {
1992+ txDB = s .db
1993+ }
1994+ if err := txDB .WithContext (ctx ).Save (modelConfig ).Error ; err != nil {
1995+ return s .parseGormError (err )
1996+ }
1997+ return nil
1998+ }
1999+
2000+ // UpdateModelConfigs updates multiple model configs in the database.
2001+ func (s * RDBConfigStore ) UpdateModelConfigs (ctx context.Context , modelConfigs []* tables.TableModelConfig , tx ... * gorm.DB ) error {
2002+ var txDB * gorm.DB
2003+ if len (tx ) > 0 {
2004+ txDB = tx [0 ]
2005+ } else {
2006+ txDB = s .db
2007+ }
2008+ for _ , mc := range modelConfigs {
2009+ if err := txDB .WithContext (ctx ).Save (mc ).Error ; err != nil {
2010+ return s .parseGormError (err )
2011+ }
2012+ }
2013+ return nil
2014+ }
2015+
2016+ // DeleteModelConfig deletes a model config from the database.
2017+ func (s * RDBConfigStore ) DeleteModelConfig (ctx context.Context , id string ) error {
2018+ if err := s .db .WithContext (ctx ).Delete (& tables.TableModelConfig {}, "id = ?" , id ).Error ; err != nil {
2019+ if errors .Is (err , gorm .ErrRecordNotFound ) {
2020+ return ErrNotFound
2021+ }
2022+ return s .parseGormError (err )
2023+ }
2024+ return nil
2025+ }
2026+
19182027// GetGovernanceConfig retrieves the governance configuration from the database.
19192028func (s * RDBConfigStore ) GetGovernanceConfig (ctx context.Context ) (* GovernanceConfig , error ) {
19202029 var virtualKeys []tables.TableVirtualKey
19212030 var teams []tables.TableTeam
19222031 var customers []tables.TableCustomer
19232032 var budgets []tables.TableBudget
19242033 var rateLimits []tables.TableRateLimit
2034+ var modelConfigs []tables.TableModelConfig
2035+ var providers []tables.TableProvider
19252036 var governanceConfigs []tables.TableGovernanceConfig
19262037
19272038 if err := s .db .WithContext (ctx ).Preload ("ProviderConfigs" ).Find (& virtualKeys ).Error ; err != nil {
@@ -1939,12 +2050,18 @@ func (s *RDBConfigStore) GetGovernanceConfig(ctx context.Context) (*GovernanceCo
19392050 if err := s .db .WithContext (ctx ).Find (& rateLimits ).Error ; err != nil {
19402051 return nil , err
19412052 }
2053+ if err := s .db .WithContext (ctx ).Find (& modelConfigs ).Error ; err != nil {
2054+ return nil , err
2055+ }
2056+ if err := s .db .WithContext (ctx ).Find (& providers ).Error ; err != nil {
2057+ return nil , err
2058+ }
19422059 // Fetching governance config for username and password
19432060 if err := s .db .WithContext (ctx ).Find (& governanceConfigs ).Error ; err != nil {
19442061 return nil , err
19452062 }
19462063 // Check if any config is present
1947- if len (virtualKeys ) == 0 && len (teams ) == 0 && len (customers ) == 0 && len (budgets ) == 0 && len (rateLimits ) == 0 && len (governanceConfigs ) == 0 {
2064+ if len (virtualKeys ) == 0 && len (teams ) == 0 && len (customers ) == 0 && len (budgets ) == 0 && len (rateLimits ) == 0 && len (modelConfigs ) == 0 && len ( providers ) == 0 && len ( governanceConfigs ) == 0 {
19482065 return nil , nil
19492066 }
19502067 var authConfig * AuthConfig
@@ -1972,12 +2089,14 @@ func (s *RDBConfigStore) GetGovernanceConfig(ctx context.Context) (*GovernanceCo
19722089 }
19732090 }
19742091 return & GovernanceConfig {
1975- VirtualKeys : virtualKeys ,
1976- Teams : teams ,
1977- Customers : customers ,
1978- Budgets : budgets ,
1979- RateLimits : rateLimits ,
1980- AuthConfig : authConfig ,
2092+ VirtualKeys : virtualKeys ,
2093+ Teams : teams ,
2094+ Customers : customers ,
2095+ Budgets : budgets ,
2096+ RateLimits : rateLimits ,
2097+ ModelConfigs : modelConfigs ,
2098+ Providers : providers ,
2099+ AuthConfig : authConfig ,
19812100 }, nil
19822101}
19832102
0 commit comments