forked from meaningalignment/dft
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschema.prisma
266 lines (239 loc) · 11 KB
/
schema.prisma
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
datasource db {
provider = "postgres"
url = env("POSTGRES_PRISMA_URL") // uses connection pooling
directUrl = env("POSTGRES_URL_NON_POOLING") // uses a direct connection
shadowDatabaseUrl = env("POSTGRES_URL_NON_POOLING_SHADOW") // used for migrations
extensions = [pgvector(map: "vector")] // Add the pgvector extension
}
generator client {
provider = "prisma-client-js"
previewFeatures = ["postgresqlExtensions"] // Enable the postgresqlExtensions. Currently in preview
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
role String[] @default(["USER"])
isAdmin Boolean @default(false)
signupType String @default("EMAIL") // EMAIL or PROLIFIC
prolificId String?
batch Int?
chats Chat[]
votes Vote[]
edges Edge[]
Impression Impression[]
Demographic Demographic?
DeduplicationVerification DeduplicationVerification[]
}
model Demographic {
id Int @id @default(autoincrement())
userId Int @unique
user User @relation(fields: [userId], references: [id])
usPoliticalAffiliation String? // Could be "republican", "independent", "democrat", or NULL
fluentLanguages String[] // An array of languages the user is fluent in
age Int?
sex String? // e.g., "Male", "Female", "Other", "Prefer not to say"
ethnicitySimplified String? // e.g., "Asian", "White", "Black", "Hispanic", "Other"
countryOfBirth String?
countryOfResidence String?
nationality String?
language String? // Primary language spoken
studentStatus String? // e.g., "Full-time", "Part-time", "Not a student"
employmentStatus String? // e.g., "Employed", "Unemployed", "Self-Employed", "Retired"
}
model EmailCodes {
email String @unique
loginCode String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
loginCodeExpiresAt DateTime
register Boolean @default(false)
extraData Json?
}
enum ValueCardQuality {
unknown
invalid
ok
}
model ValuesCard {
id Int @id @default(autoincrement())
title String
instructionsShort String
instructionsDetailed String
evaluationCriteria String[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
canonicalCardId Int?
chatId String @unique
chat Chat? @relation(fields: [chatId], references: [id], onDelete: Cascade)
canonicalCard CanonicalValuesCard? @relation(fields: [canonicalCardId], references: [id], onDelete: SetNull)
embedding Unsupported("vector(1536)")?
quality ValueCardQuality @default(ok)
DeduplicationVerification DeduplicationVerification[]
deduplications Deduplication[]
}
model CanonicalValuesCard {
id Int @id @default(autoincrement())
title String
instructionsShort String
instructionsDetailed String
evaluationCriteria String[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
embedding Unsupported("vector(1536)")?
valuesCards ValuesCard[]
edgesFrom Edge[] @relation("FromValueRelation")
edgesTo Edge[] @relation("ToValueRelation")
Vote Vote[]
Impression Impression[]
edgeHypothesisFrom EdgeHypothesis[] @relation("FromHypothesizedValueRelation")
edgeHypothesisTo EdgeHypothesis[] @relation("ToHypothesizedValueRelation")
@@unique([title, instructionsShort, instructionsDetailed, evaluationCriteria]) // Prevent duplicate insertions.
}
model Chat {
id String @id
userId Int
transcript Json
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
provisionalCard Json? // A values card being formed in the background.
provisionalCanonicalCardId Int? // A canonical values card that is linked in the background.
articulatorPromptVersion String @default("OLD")
articulatorPromptHash String @default("OLD")
articulatorModel String @default("gpt-4-0613")
gitCommitHash String @default("OLD")
evaluation Json?
copiedFromId String? // In order to filter out copied chats from analytics and other queries.
caseId String @default("abortion")
ValuesCard ValuesCard?
user User @relation(fields: [userId], references: [id])
copiedFrom Chat? @relation("ChatToCopiedFrom", fields: [copiedFromId], references: [id], onDelete: Cascade)
copies Chat[] @relation("ChatToCopiedFrom")
}
model Vote {
id Int @id @default(autoincrement())
userId Int
valuesCardId Int
caseId String @default("abortion")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
drawId String // uuid for each draw of 6 values to be voted on.
valuesCard CanonicalValuesCard @relation(fields: [valuesCardId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id])
}
model Impression {
id Int @id @default(autoincrement())
userId Int
drawId String // uuid for each draw of 6 values to be voted on.
valuesCardId Int
caseId String @default("abortion")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id])
valuesCard CanonicalValuesCard @relation(fields: [valuesCardId], references: [id], onDelete: Cascade)
}
model Edge {
userId Int
fromId Int
toId Int
story String @default("OLD")
contextId String
runId String @default("OLD")
relationship String @default("upgrade")
comment String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id])
from CanonicalValuesCard @relation("FromValueRelation", fields: [fromId], references: [id], onDelete: Cascade)
to CanonicalValuesCard @relation("ToValueRelation", fields: [toId], references: [id], onDelete: Cascade)
context Context @relation(fields: [contextId], references: [id])
@@id([userId, fromId, toId])
}
model EdgeHypothesis {
fromId Int
toId Int
story String?
contextId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
runId String @default("OLD")
from CanonicalValuesCard? @relation("FromHypothesizedValueRelation", fields: [fromId], references: [id], onDelete: Cascade)
to CanonicalValuesCard? @relation("ToHypothesizedValueRelation", fields: [toId], references: [id], onDelete: Cascade)
context Context @relation(fields: [contextId], references: [id])
@@id([fromId, toId])
}
model Context {
id String @id
ContextsOnCases ContextsOnCases[]
Edge Edge[]
EdgeHypothesis EdgeHypothesis[]
}
model Case {
id String @id
title String
question String
seedMessage String @default("OLD")
ContextsOnCases ContextsOnCases[]
}
model ContextsOnCases {
context Context @relation(fields: [contextId], references: [id], onDelete: Cascade)
case Case @relation(fields: [caseId], references: [id], onDelete: Cascade)
contextId String
caseId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@id([contextId, caseId])
}
enum DeduplicationVerificationOption {
same
different
unsure
}
model DeduplicationVerification {
userId Int
valuesCardId Int
deduplicatedCardId Int
option DeduplicationVerificationOption
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
valuesCard ValuesCard @relation(fields: [valuesCardId], references: [id], onDelete: Cascade)
deduplicatedCard DeduplicatedCard @relation(fields: [deduplicatedCardId], references: [id], onDelete: Cascade)
@@id([userId, valuesCardId, deduplicatedCardId])
}
model GraphPositionVerification {
userId Int
deduplicatedCardId Int
isSatisfiedWithPosition Boolean
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deduplicatedCard DeduplicatedCard @relation(fields: [deduplicatedCardId], references: [id], onDelete: Cascade)
@@id([userId, deduplicatedCardId])
}
model DeduplicatedCard {
id Int @id @default(autoincrement())
generation Int
title String
instructionsShort String
instructionsDetailed String
evaluationCriteria String[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
embedding Unsupported("vector(1536)")?
deduplications Deduplication[]
GraphPositionVerification GraphPositionVerification[]
DeduplicationVerification DeduplicationVerification[]
}
model Deduplication {
valuesCardId Int
deduplicatedCardId Int
generation Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
valuesCard ValuesCard @relation(fields: [valuesCardId], references: [id])
deduplicatedCard DeduplicatedCard @relation(fields: [deduplicatedCardId], references: [id])
@@unique([valuesCardId, generation])
@@unique([valuesCardId, deduplicatedCardId])
}