-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
133 lines (124 loc) · 5.92 KB
/
schema.sql
File metadata and controls
133 lines (124 loc) · 5.92 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
-- CSW (Claude Subscription Worker) Reference Schema
-- MySQL 8.0+ required
-- This is a clean reference schema. Adapt as needed for your deployment.
CREATE DATABASE IF NOT EXISTS csw
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE csw;
-- ============================================================
-- Sessions: Conversation containers
-- ============================================================
CREATE TABLE IF NOT EXISTS sessions (
id VARCHAR(36) NOT NULL PRIMARY KEY,
name VARCHAR(255) DEFAULT NULL,
summary TEXT DEFAULT NULL,
status ENUM('active','archived') NOT NULL DEFAULT 'active',
message_count INT NOT NULL DEFAULT 0,
system_prompt TEXT DEFAULT NULL,
model VARCHAR(100) DEFAULT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
INDEX idx_sessions_status (status),
INDEX idx_sessions_updated (updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- Messages: Individual messages within sessions
-- ============================================================
CREATE TABLE IF NOT EXISTS messages (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
session_id VARCHAR(36) NOT NULL,
role ENUM('user','assistant','system') NOT NULL,
content MEDIUMTEXT NOT NULL,
output_format JSON DEFAULT NULL,
is_compacted TINYINT(1) NOT NULL DEFAULT 0,
job_id VARCHAR(36) DEFAULT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
INDEX idx_messages_session (session_id, is_compacted, created_at),
INDEX idx_messages_job (job_id),
CONSTRAINT fk_messages_session FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- Memory: Per-session key-value context store
-- Categories: rule (instructions), property (facts), action (behaviors)
-- ============================================================
CREATE TABLE IF NOT EXISTS memory (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
session_id VARCHAR(36) NOT NULL,
category ENUM('rule','property','action') NOT NULL,
key_name VARCHAR(255) NOT NULL,
value TEXT NOT NULL,
priority INT NOT NULL DEFAULT 0,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
UNIQUE KEY uk_memory_session_cat_key (session_id, category, key_name),
INDEX idx_memory_session_active (session_id, is_active, priority DESC),
CONSTRAINT fk_memory_session FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- Jobs: Request tracking and audit log
-- ============================================================
CREATE TABLE IF NOT EXISTS jobs (
id VARCHAR(36) NOT NULL PRIMARY KEY,
session_id VARCHAR(36) DEFAULT NULL,
status ENUM('queued','processing','completed','failed','timeout') NOT NULL DEFAULT 'queued',
request_body JSON DEFAULT NULL,
response_body JSON DEFAULT NULL,
claude_raw MEDIUMTEXT DEFAULT NULL,
error_message TEXT DEFAULT NULL,
duration_ms INT DEFAULT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
completed_at DATETIME(3) DEFAULT NULL,
INDEX idx_jobs_status (status),
INDEX idx_jobs_session (session_id),
INDEX idx_jobs_created (created_at),
CONSTRAINT fk_jobs_session FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- Presets: Reusable prompt templates
-- ============================================================
CREATE TABLE IF NOT EXISTS presets (
id VARCHAR(36) NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT DEFAULT NULL,
command VARCHAR(255) DEFAULT NULL,
system_prompt TEXT DEFAULT NULL,
output_format JSON DEFAULT NULL,
sample_input TEXT DEFAULT NULL,
sample_memory JSON DEFAULT NULL,
options JSON DEFAULT NULL,
tags VARCHAR(500) DEFAULT NULL,
cache_pool_target INT DEFAULT NULL,
usage_count INT NOT NULL DEFAULT 0,
last_used_at DATETIME(3) DEFAULT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
INDEX idx_presets_name (name),
INDEX idx_presets_tags (tags),
INDEX idx_presets_usage (usage_count DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- Response Cache: Metadata + simple mode responses
-- ============================================================
CREATE TABLE IF NOT EXISTS response_cache (
cache_key VARCHAR(500) NOT NULL PRIMARY KEY,
response MEDIUMTEXT NOT NULL,
hit_count INT NOT NULL DEFAULT 0,
pool_target INT DEFAULT NULL,
pool_size INT NOT NULL DEFAULT 0,
is_growing TINYINT(1) NOT NULL DEFAULT 0,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
expires_at DATETIME(3) DEFAULT NULL,
INDEX idx_cache_expires (expires_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- Response Cache Pool: Individual pool entries for diverse responses
-- ============================================================
CREATE TABLE IF NOT EXISTS response_cache_pool (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
cache_key VARCHAR(500) NOT NULL,
response MEDIUMTEXT NOT NULL,
hit_count INT NOT NULL DEFAULT 0,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
INDEX idx_pool_key (cache_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;