Appearance
18. supabase-llm-models-table.sql
원본 파일: 'C:\Repository\loafacto-hub\docs\web-ui\18. supabase-llm-models-table.sql'
sql
-- =============================================================================
-- LLM 모델 관리 테이블
-- 관리자가 등록한 LLM 모델을 전체 사용자에게 공유합니다.
-- Supabase SQL Editor에서 실행하세요.
-- =============================================================================
-- 1) 테이블 생성
CREATE TABLE IF NOT EXISTS public.llm_models (
id text PRIMARY KEY, -- 모델 ID (예: gpt-4o, llama3.1:8b)
name text NOT NULL, -- 표시 이름
provider text NOT NULL DEFAULT 'Custom', -- 공급자
context text, -- 컨텍스트 크기 (예: 128k Context)
host text, -- 로컬/자체 호스팅 주소
type text NOT NULL DEFAULT 'chat'
CHECK (type IN ('chat', 'vision', 'embedding')), -- 모델 용도 타입
enabled_for_user boolean NOT NULL DEFAULT true, -- 채팅 화면 노출 여부
created_at timestamptz DEFAULT now() NOT NULL,
updated_at timestamptz DEFAULT now() NOT NULL
);
COMMENT ON TABLE public.llm_models IS '관리자가 등록한 LLM 모델 목록. 인증된 모든 사용자가 읽기 가능.';
-- 2) RLS 활성화
ALTER TABLE public.llm_models ENABLE ROW LEVEL SECURITY;
-- 3) 정책: 인증된 사용자 전체 읽기 허용
CREATE POLICY "Authenticated users can read llm_models"
ON public.llm_models
FOR SELECT
TO authenticated
USING (true);
-- 4) 정책: 관리자(super_admin, operator)만 쓰기 허용
CREATE POLICY "Admins can insert llm_models"
ON public.llm_models
FOR INSERT
TO authenticated
WITH CHECK (
EXISTS (
SELECT 1 FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
);
CREATE POLICY "Admins can update llm_models"
ON public.llm_models
FOR UPDATE
TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
)
WITH CHECK (
EXISTS (
SELECT 1 FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
);
CREATE POLICY "Admins can delete llm_models"
ON public.llm_models
FOR DELETE
TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
);
-- 5) 마이그레이션: 테이블이 이미 존재하는 경우 type 컬럼 추가
-- (최초 생성 시에는 위 CREATE TABLE에 이미 포함되어 있으므로 무시됨)
ALTER TABLE public.llm_models
ADD COLUMN IF NOT EXISTS type text NOT NULL DEFAULT 'chat'
CHECK (type IN ('chat', 'vision', 'embedding'));
-- 6) updated_at 자동 갱신 트리거
CREATE OR REPLACE FUNCTION public.set_updated_at()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$;
CREATE TRIGGER llm_models_updated_at
BEFORE UPDATE ON public.llm_models
FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();