122 lines
3.4 KiB
SQL
122 lines
3.4 KiB
SQL
CREATE TABLE IF NOT EXISTS channels (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
base_url TEXT NOT NULL,
|
|
api_key TEXT NOT NULL,
|
|
type INTEGER NOT NULL DEFAULT 1,
|
|
group_name TEXT,
|
|
priority INTEGER NOT NULL DEFAULT 0,
|
|
weight INTEGER NOT NULL DEFAULT 1,
|
|
status TEXT NOT NULL DEFAULT 'active',
|
|
rate_limit INTEGER DEFAULT 0,
|
|
models_json TEXT,
|
|
metadata_json TEXT,
|
|
test_time INTEGER,
|
|
response_time_ms INTEGER,
|
|
system_token TEXT,
|
|
system_userid TEXT,
|
|
checkin_enabled INTEGER NOT NULL DEFAULT 0,
|
|
checkin_url TEXT,
|
|
last_checkin_date TEXT,
|
|
last_checkin_status TEXT,
|
|
last_checkin_message TEXT,
|
|
last_checkin_at TEXT,
|
|
created_at TEXT NOT NULL,
|
|
updated_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS channel_call_tokens (
|
|
id TEXT PRIMARY KEY,
|
|
channel_id TEXT NOT NULL,
|
|
name TEXT NOT NULL,
|
|
api_key TEXT NOT NULL,
|
|
models_json TEXT,
|
|
created_at TEXT NOT NULL,
|
|
updated_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_channel_call_tokens_channel_id
|
|
ON channel_call_tokens (channel_id, created_at);
|
|
|
|
CREATE TABLE IF NOT EXISTS tokens (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
key_hash TEXT NOT NULL,
|
|
key_prefix TEXT NOT NULL,
|
|
token_plain TEXT,
|
|
quota_total INTEGER,
|
|
quota_used INTEGER NOT NULL DEFAULT 0,
|
|
status TEXT NOT NULL DEFAULT 'active',
|
|
allowed_channels TEXT,
|
|
expires_at TEXT,
|
|
created_at TEXT NOT NULL,
|
|
updated_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_tokens_key_hash ON tokens (key_hash);
|
|
|
|
CREATE TABLE IF NOT EXISTS usage_logs (
|
|
id TEXT PRIMARY KEY,
|
|
token_id TEXT,
|
|
channel_id TEXT,
|
|
model TEXT,
|
|
request_path TEXT,
|
|
total_tokens INTEGER,
|
|
prompt_tokens INTEGER,
|
|
completion_tokens INTEGER,
|
|
cost REAL,
|
|
latency_ms INTEGER,
|
|
first_token_latency_ms INTEGER,
|
|
stream INTEGER,
|
|
reasoning_effort TEXT,
|
|
status TEXT,
|
|
upstream_status INTEGER,
|
|
error_code TEXT,
|
|
error_message TEXT,
|
|
created_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_usage_logs_created_at ON usage_logs (created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_usage_logs_channel_id ON usage_logs (channel_id);
|
|
CREATE INDEX IF NOT EXISTS idx_usage_logs_token_id ON usage_logs (token_id);
|
|
CREATE INDEX IF NOT EXISTS idx_usage_logs_model ON usage_logs (model);
|
|
CREATE INDEX IF NOT EXISTS idx_usage_logs_status ON usage_logs (status);
|
|
CREATE INDEX IF NOT EXISTS idx_usage_logs_upstream_status ON usage_logs (upstream_status);
|
|
|
|
CREATE TABLE IF NOT EXISTS settings (
|
|
key TEXT PRIMARY KEY,
|
|
value TEXT NOT NULL,
|
|
updated_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS admin_sessions (
|
|
id TEXT PRIMARY KEY,
|
|
token_hash TEXT NOT NULL,
|
|
expires_at TEXT NOT NULL,
|
|
created_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS channel_model_capabilities (
|
|
channel_id TEXT NOT NULL,
|
|
model TEXT NOT NULL,
|
|
last_ok_at INTEGER NOT NULL,
|
|
last_err_at INTEGER,
|
|
last_err_code TEXT,
|
|
last_err_count INTEGER NOT NULL DEFAULT 0,
|
|
created_at TEXT NOT NULL,
|
|
updated_at TEXT NOT NULL,
|
|
PRIMARY KEY (channel_id, model)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_channel_model_capabilities_model
|
|
ON channel_model_capabilities (model);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_channel_model_capabilities_channel
|
|
ON channel_model_capabilities (channel_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_channel_model_capabilities_channel_ok
|
|
ON channel_model_capabilities (channel_id, last_ok_at);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_channel_model_capabilities_model_err
|
|
ON channel_model_capabilities (model, last_err_at);
|