Supabase

Supabase

Supabase는 오픈소스 Firebase 대안이에요. Postgres 데이터베이스, 인증, 인스턴트 API, Edge Functions, Realtime 구독, 스토리지, 벡터 임베딩으로 프로젝트를 시작할 수 있어요.

출처: 문서

본문

Supabase는 오픈소스 Firebase 대안이에요. Postgres 데이터베이스, 인증, 인스턴트 API, Edge Functions, Realtime 구독, 스토리지, 벡터 임베딩으로 프로젝트를 시작할 수 있어요.

모든 LLM 프로바이더(OpenAI, Azure, Anthropic, Cohere, Replicate, PaLM)의 요청을 기록하고 총 지출을 확인하기

liteLLM은 success_callbacksfailure_callbacks를 제공하여 응답 상태에 따라 특정 프로바이더로 데이터를 쉽게 보낼 수 있게 해 줘요. 이 경우 성공과 실패 두 시나리오 모두에서 요청을 Supabase로 기록하고 싶어요.

Supabase 테이블 생성 (Create a supabase table)

Supabase 프로젝트로 이동한 후 Supabase SQL Editor에서 이 구성으로 새 테이블을 만들어요.

참고: 테이블 이름은 변경할 수 있지만, 컬럼 이름은 변경하지 마세요.

create table
  public.request_logs (
    id bigint generated by default as identity,
    created_at timestamp with time zone null default now(),
    model text null default ''::text,
    messages json null default '{}'::json,
    response json null default '{}'::json,
    end_user text null default ''::text,
    status text null default ''::text,
    error json null default '{}'::json,
    response_time real null default '0'::real,
    total_cost real null,
    additional_details json null default '{}'::json,
    litellm_call_id text unique,
    primary key (id)
  ) tablespace pg_default;

콜백 사용 (Use Callbacks)

단 2줄의 코드로 모든 프로바이더의 비용을 확인하고 응답을 Supabase에 기록할 수 있어요:

litellm.success_callback=["supabase"]
litellm.failure_callback=["supabase"]

전체 코드

from litellm import completion
## set env variables
### SUPABASE
os.environ["SUPABASE_URL"] = "your-supabase-url" 
os.environ["SUPABASE_KEY"] = "your-supabase-key" 

## LLM API KEY
os.environ["OPENAI_API_KEY"] = ""

# set callbacks
litellm.success_callback=["supabase"]
litellm.failure_callback=["supabase"]

# openai call
response = completion(
  model="gpt-5.6-luna", 
  messages=[{"role": "user", "content": "Hi 👋 - i'm openai"}],
  user="ishaan22" # identify users
)

# bad call, expect this call to fail and get logged
response = completion(
  model="chatgpt-test", 
  messages=[{"role": "user", "content": "Hi 👋 - i'm a bad call to test error logging"}]
) 

추가 컨트롤 (Additional Controls)

엔드 유저 식별 (Identify end-user)

userlitellm.completion에 전달해 LLM 호출을 엔드 유저에 매핑해요:

response = completion(
  model="gpt-5.6-luna", 
  messages=[{"role": "user", "content": "Hi 👋 - i'm openai"}],
  user="ishaan22" # identify users
) 

다른 테이블 이름 (Different Table name)

테이블 이름을 수정했다면 새 이름을 전달하는 방법이에요:

litellm.modify_integration("supabase",{"table_name": "litellm_logs"})

더 알아보기 (Learn more)