Changeset 0.5.0 (#35)
This commit is contained in:
60
server/database/migrations/005_provider_capabilities.sql
Normal file
60
server/database/migrations/005_provider_capabilities.sql
Normal file
@@ -0,0 +1,60 @@
|
||||
-- Migration 005: Provider Capabilities & Custom Headers
|
||||
--
|
||||
-- Adds provider-level configuration (custom headers, provider-specific settings)
|
||||
-- and expands model capabilities to include output token limits.
|
||||
-- This eliminates hardcoded max_tokens defaults throughout the system.
|
||||
|
||||
-- ── api_configs: custom headers and global flag ──
|
||||
ALTER TABLE api_configs
|
||||
ADD COLUMN IF NOT EXISTS custom_headers JSONB DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS provider_settings JSONB DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS is_global BOOLEAN DEFAULT false;
|
||||
|
||||
COMMENT ON COLUMN api_configs.custom_headers IS 'Extra HTTP headers sent with every request (e.g. OpenRouter HTTP-Referer)';
|
||||
COMMENT ON COLUMN api_configs.provider_settings IS 'Provider-specific params (e.g. Venice web_search, OpenRouter route)';
|
||||
COMMENT ON COLUMN api_configs.is_global IS 'Admin-managed configs visible to all users';
|
||||
|
||||
-- Backfill: existing admin-created configs (user_id IS NULL) are global
|
||||
UPDATE api_configs SET is_global = true WHERE user_id IS NULL;
|
||||
|
||||
-- ── model_configs: richer capabilities ──
|
||||
-- The existing capabilities JSONB gets richer fields.
|
||||
-- No schema change needed (it's JSONB), but let's update existing rows
|
||||
-- that have the old minimal shape to include the new fields.
|
||||
-- New canonical shape:
|
||||
-- {
|
||||
-- "streaming": true,
|
||||
-- "tool_calling": false,
|
||||
-- "vision": false,
|
||||
-- "thinking": false,
|
||||
-- "reasoning": false,
|
||||
-- "code_optimized": false,
|
||||
-- "max_context": 0,
|
||||
-- "max_output_tokens": 0,
|
||||
-- "web_search": false
|
||||
-- }
|
||||
-- max_output_tokens = 0 means "not set, use provider/heuristic default"
|
||||
|
||||
-- Migrate old "tool" key to "tool_calling" for consistency
|
||||
UPDATE model_configs
|
||||
SET capabilities = capabilities - 'tool' || jsonb_build_object('tool_calling', COALESCE(capabilities->>'tool', 'false')::boolean)
|
||||
WHERE capabilities ? 'tool' AND NOT capabilities ? 'tool_calling';
|
||||
|
||||
-- Migrate old "code" key to "code_optimized"
|
||||
UPDATE model_configs
|
||||
SET capabilities = capabilities - 'code' || jsonb_build_object('code_optimized', COALESCE(capabilities->>'code', 'false')::boolean)
|
||||
WHERE capabilities ? 'code' AND NOT capabilities ? 'code_optimized';
|
||||
|
||||
-- ── user_model_preferences ──
|
||||
-- Users can enable/disable models from global providers for personal use.
|
||||
CREATE TABLE IF NOT EXISTS user_model_preferences (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
model_config_id UUID NOT NULL REFERENCES model_configs(id) ON DELETE CASCADE,
|
||||
is_enabled BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
UNIQUE(user_id, model_config_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_user_model_prefs_user ON user_model_preferences(user_id);
|
||||
Reference in New Issue
Block a user