File size: 2,335 Bytes
aa9892b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-- TTS 생성 μ‹€νŒ¨ 진단 이벀트 (2026-05-20)
--
-- 문제: 였λ₯˜ μ‹ κ³ (error_reports)λŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ 데이터(route/μŠ€ν¬λ¦°μƒ·/turn_logs)만 λ‹΄μ•„
-- TTS κ°€ "μ™œ" μ‹€νŒ¨ν–ˆλŠ”μ§€(μ›Œμ»€ OOM/토큰 loop/ICL μ‹€νŒ¨ λ“±)λŠ” λͺ» λ³Έλ‹€. κ·Έ root cause λŠ”
-- κ·Έ μ‹œμ  κ·Έ μ›Œμ»€(vast.ai GPU)의 λ‘œκ·Έμ—λ§Œ λ‚¨λŠ”λ°, μ›Œμ»€ λ‘œκ·ΈλŠ” μΈμŠ€ν„΄μŠ€ νœ˜λ°œμ„±(destroy μ‹œ μ†Œμ‹€)
-- 이고 신고와 μ—°κ²°ν•  correlation 도 μ—†μ—ˆλ‹€.
--
-- ν•΄κ²°: TTS μ‹€νŒ¨λ₯Ό λ°±μ—”λ“œ/μ›Œμ»€ μ–‘μͺ½μ—μ„œ 쀑앙 ν…Œμ΄λΈ”λ‘œ 기둝.
--   - source='backend' : λ””μŠ€νŒ¨μ²˜κ°€ μ›Œμ»€ μ—λŸ¬ 응닡을 감지 (worker_url + μƒνƒœ/detail)
--   - source='worker'  : μ›Œμ»€κ°€ 생성 μ˜ˆμ™Έ traceback 을 POST (μΈμŠ€ν„΄μŠ€ 죽어도 보쑴)
--   - trace_id 둜 두 ν–‰ μ—°κ²°. 였λ₯˜ μ‹ κ³  쑰회 μ‹œ user_id + μ‹œκ°„μ°½μœΌλ‘œ join.
--
-- νšŒκ·€ κ°€λ“œ: 이 ν…Œμ΄λΈ” insert λŠ” μ „λΆ€ fire-and-forget(μ‹€νŒ¨ λ¬΄μ‹œ) β€” TTS ν•«νŒ¨μŠ€ 영ν–₯ 0.
-- user_id λŠ” TEXT(FK μ—†μŒ) β€” 읡λͺ…/νƒˆν‡΄ μ‚¬μš©μžμ—μ„œλ„ 기둝이 κ±°λΆ€λ˜μ§€ μ•Šλ„λ‘.

CREATE TABLE IF NOT EXISTS public.tts_error_events (
    id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),

    trace_id      TEXT,                    -- λ°±μ—”λ“œ ν–‰ ↔ μ›Œμ»€ ν–‰ μ—°κ²° ν‚€
    user_id       TEXT,                    -- FK μ—†μŒ (기둝 κ±°λΆ€ νšŒν”Ό)
    session_id    TEXT,
    block_id      INTEGER,

    worker_url    TEXT,                    -- μ–΄λŠ μ›Œμ»€κ°€ μ²˜λ¦¬ν–ˆλŠ”μ§€ (vast.ai 호슀트)
    engine        TEXT,                    -- qwen3 / cosyvoice35
    mode          TEXT,                    -- custom_voice / voice_clone
    status_code   INTEGER,                 -- μ›Œμ»€ HTTP μƒνƒœ (backend 감지 μ‹œ)

    error_detail  TEXT,                    -- 짧은 μ—λŸ¬ λ©”μ‹œμ§€ (backend κ°€ 받은 detail)
    error_trace   TEXT,                    -- ν’€ traceback (worker κ°€ POST)
    source        TEXT NOT NULL DEFAULT 'backend',  -- 'backend' | 'worker'

    created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_tts_error_events_created
    ON public.tts_error_events (created_at DESC);
CREATE INDEX IF NOT EXISTS idx_tts_error_events_user
    ON public.tts_error_events (user_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_tts_error_events_trace
    ON public.tts_error_events (trace_id);