44 lines
2.0 KiB
SQL
44 lines
2.0 KiB
SQL
-- 000019_reasoning_mode_state: actor-scoped /think state and
|
|
-- per-turn idempotency for successful reasoning-mode completions.
|
|
|
|
CREATE TABLE IF NOT EXISTS reasoning_mode_states (
|
|
tenant_key TEXT NOT NULL,
|
|
channel TEXT NOT NULL,
|
|
external_actor_id TEXT NOT NULL,
|
|
mode TEXT NOT NULL DEFAULT 'quick'
|
|
CHECK (mode IN ('quick', 'reasoning')),
|
|
max_rounds INTEGER NOT NULL DEFAULT 10
|
|
CHECK (max_rounds BETWEEN 1 AND 50),
|
|
rounds_used INTEGER NOT NULL DEFAULT 0
|
|
CHECK (rounds_used >= 0 AND rounds_used <= max_rounds),
|
|
hint_enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
|
last_activity_at TIMESTAMPTZ,
|
|
expires_at TIMESTAMPTZ,
|
|
onboarding_shown_at TIMESTAMPTZ,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (tenant_key, channel, external_actor_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_reasoning_mode_states_expiry
|
|
ON reasoning_mode_states (expires_at)
|
|
WHERE mode = 'reasoning' AND expires_at IS NOT NULL;
|
|
|
|
CREATE TABLE IF NOT EXISTS reasoning_mode_turns (
|
|
id TEXT PRIMARY KEY,
|
|
tenant_key TEXT NOT NULL,
|
|
channel TEXT NOT NULL,
|
|
turn_id TEXT NOT NULL REFERENCES turns(id),
|
|
external_actor_id TEXT NOT NULL,
|
|
execution_mode TEXT NOT NULL
|
|
CHECK (execution_mode IN ('quick', 'reasoning', 'reasoning_single')),
|
|
round_number INTEGER NOT NULL DEFAULT 0 CHECK (round_number >= 0),
|
|
showed_hint BOOLEAN NOT NULL DEFAULT FALSE,
|
|
auto_closed BOOLEAN NOT NULL DEFAULT FALSE,
|
|
showed_onboarding BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE (tenant_key, channel, turn_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_reasoning_mode_turns_actor_created
|
|
ON reasoning_mode_turns (tenant_key, channel, external_actor_id, created_at DESC);
|