Changeset 0.22.0.1 (#94)
This commit is contained in:
90
server/store/sqlite/cap_override.go
Normal file
90
server/store/sqlite/cap_override.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package sqlite
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.gobha.me/xcaliber/chat-switchboard/models"
|
||||
"git.gobha.me/xcaliber/chat-switchboard/store"
|
||||
)
|
||||
|
||||
type CapOverrideStore struct{}
|
||||
|
||||
func NewCapOverrideStore() *CapOverrideStore { return &CapOverrideStore{} }
|
||||
|
||||
func (s *CapOverrideStore) Set(ctx context.Context, o *models.CapabilityOverride) error {
|
||||
id := store.NewID()
|
||||
_, err := DB.ExecContext(ctx, `
|
||||
INSERT INTO capability_overrides (id, provider_config_id, model_id, field, value, set_by)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT (provider_config_id, model_id, field) DO UPDATE SET
|
||||
value = excluded.value,
|
||||
set_by = excluded.set_by,
|
||||
created_at = datetime('now')
|
||||
`, id, o.ProviderConfigID, o.ModelID, o.Field, o.Value, o.SetBy)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *CapOverrideStore) Delete(ctx context.Context, id string) error {
|
||||
_, err := DB.ExecContext(ctx, `DELETE FROM capability_overrides WHERE id = ?`, id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *CapOverrideStore) ListForModel(ctx context.Context, modelID string) ([]models.CapabilityOverride, error) {
|
||||
return s.query(ctx, `
|
||||
SELECT id, provider_config_id, model_id, field, value, set_by, created_at
|
||||
FROM capability_overrides
|
||||
WHERE model_id = ?
|
||||
ORDER BY provider_config_id, field
|
||||
`, modelID)
|
||||
}
|
||||
|
||||
func (s *CapOverrideStore) ListForProviderModel(ctx context.Context, providerConfigID, modelID string) ([]models.CapabilityOverride, error) {
|
||||
return s.query(ctx, `
|
||||
SELECT id, provider_config_id, model_id, field, value, set_by, created_at
|
||||
FROM capability_overrides
|
||||
WHERE model_id = ? AND (provider_config_id = ? OR provider_config_id IS NULL)
|
||||
ORDER BY provider_config_id, field
|
||||
`, modelID, providerConfigID)
|
||||
}
|
||||
|
||||
func (s *CapOverrideStore) ListAll(ctx context.Context) ([]models.CapabilityOverride, error) {
|
||||
return s.query(ctx, `
|
||||
SELECT id, provider_config_id, model_id, field, value, set_by, created_at
|
||||
FROM capability_overrides
|
||||
ORDER BY model_id, provider_config_id, field
|
||||
`)
|
||||
}
|
||||
|
||||
func (s *CapOverrideStore) DeleteForProvider(ctx context.Context, providerConfigID string) error {
|
||||
_, err := DB.ExecContext(ctx, `
|
||||
DELETE FROM capability_overrides WHERE provider_config_id = ?
|
||||
`, providerConfigID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *CapOverrideStore) query(ctx context.Context, q string, args ...interface{}) ([]models.CapabilityOverride, error) {
|
||||
rows, err := DB.QueryContext(ctx, q, args...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var result []models.CapabilityOverride
|
||||
for rows.Next() {
|
||||
var o models.CapabilityOverride
|
||||
if err := rows.Scan(&o.ID, &o.ProviderConfigID, &o.ModelID, &o.Field, &o.Value, &o.SetBy, &o.CreatedAt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result = append(result, o)
|
||||
}
|
||||
return result, rows.Err()
|
||||
}
|
||||
|
||||
// ensure interface compliance (compile-time check)
|
||||
var _ store.CapabilityOverrideStore = (*CapOverrideStore)(nil)
|
||||
|
||||
// also check the health store interface at this package level
|
||||
// (health.Store is in the health package, but we verify via the sql.Rows pattern)
|
||||
func init() {
|
||||
// compile-time interface checks happen via the var _ lines above
|
||||
}
|
||||
Reference in New Issue
Block a user