File size: 14,711 Bytes
f8b5d42
 
 
 
 
 
 
 
 
5ad6f25
 
f8b5d42
5ad6f25
 
 
 
f8b5d42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
generator client {
  provider = "prisma-client-js"
}

// Uncomment the following lines and comment out the SQLite datasource block above to use PostgreSQL
// Make sure to set the correct DATABASE_URL in your .env file
// After swapping run `yarn prisma:setup` from the root directory to migrate the database
//
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
// datasource db {
//  provider = "sqlite"
//  url      = "file:../storage/anythingllm.db"
// }

model api_keys {
  id            Int      @id @default(autoincrement())
  secret        String?  @unique
  createdBy     Int?
  createdAt     DateTime @default(now())
  lastUpdatedAt DateTime @default(now())
}

model workspace_documents {
  id                   Int                   @id @default(autoincrement())
  docId                String                @unique
  filename             String
  docpath              String
  workspaceId          Int
  metadata             String?
  pinned               Boolean?              @default(false)
  watched              Boolean?              @default(false)
  createdAt            DateTime              @default(now())
  lastUpdatedAt        DateTime              @default(now())
  workspace            workspaces            @relation(fields: [workspaceId], references: [id])
  document_sync_queues document_sync_queues?
}

model invites {
  id            Int      @id @default(autoincrement())
  code          String   @unique
  status        String   @default("pending")
  claimedBy     Int?
  workspaceIds  String?
  createdAt     DateTime @default(now())
  createdBy     Int
  lastUpdatedAt DateTime @default(now())
}

model system_settings {
  id            Int      @id @default(autoincrement())
  label         String   @unique
  value         String?
  createdAt     DateTime @default(now())
  lastUpdatedAt DateTime @default(now())
}

model users {
  id                          Int                           @id @default(autoincrement())
  username                    String?                       @unique
  password                    String
  pfpFilename                 String?
  role                        String                        @default("default")
  suspended                   Int                           @default(0)
  seen_recovery_codes         Boolean?                      @default(false)
  createdAt                   DateTime                      @default(now())
  lastUpdatedAt               DateTime                      @default(now())
  dailyMessageLimit           Int?
  bio                         String?                       @default("")
  workspace_chats             workspace_chats[]
  workspace_users             workspace_users[]
  embed_configs               embed_configs[]
  embed_chats                 embed_chats[]
  threads                     workspace_threads[]
  recovery_codes              recovery_codes[]
  password_reset_tokens       password_reset_tokens[]
  workspace_agent_invocations workspace_agent_invocations[]
  slash_command_presets       slash_command_presets[]
  browser_extension_api_keys  browser_extension_api_keys[]
  temporary_auth_tokens       temporary_auth_tokens[]
  system_prompt_variables     system_prompt_variables[]
  prompt_history              prompt_history[]
  desktop_mobile_devices      desktop_mobile_devices[]
  workspace_parsed_files      workspace_parsed_files[]
}

model recovery_codes {
  id        Int      @id @default(autoincrement())
  user_id   Int
  code_hash String
  createdAt DateTime @default(now())
  user      users    @relation(fields: [user_id], references: [id], onDelete: Cascade)

  @@index([user_id])
}

model password_reset_tokens {
  id        Int      @id @default(autoincrement())
  user_id   Int
  token     String   @unique
  expiresAt DateTime
  createdAt DateTime @default(now())
  user      users    @relation(fields: [user_id], references: [id], onDelete: Cascade)

  @@index([user_id])
}

model document_vectors {
  id            Int      @id @default(autoincrement())
  docId         String
  vectorId      String
  createdAt     DateTime @default(now())
  lastUpdatedAt DateTime @default(now())
}

model welcome_messages {
  id         Int      @id @default(autoincrement())
  user       String
  response   String
  orderIndex Int?
  createdAt  DateTime @default(now())
}

model workspaces {
  id                           Int                            @id @default(autoincrement())
  name                         String
  slug                         String                         @unique
  vectorTag                    String?
  createdAt                    DateTime                       @default(now())
  openAiTemp                   Float?
  openAiHistory                Int                            @default(20)
  lastUpdatedAt                DateTime                       @default(now())
  openAiPrompt                 String?
  similarityThreshold          Float?                         @default(0.25)
  chatProvider                 String?
  chatModel                    String?
  topN                         Int?                           @default(4)
  chatMode                     String?                        @default("chat")
  pfpFilename                  String?
  agentProvider                String?
  agentModel                   String?
  queryRefusalResponse         String?
  vectorSearchMode             String?                        @default("default")
  workspace_users              workspace_users[]
  documents                    workspace_documents[]
  workspace_suggested_messages workspace_suggested_messages[]
  embed_configs                embed_configs[]
  threads                      workspace_threads[]
  workspace_agent_invocations  workspace_agent_invocations[]
  prompt_history               prompt_history[]
  workspace_parsed_files       workspace_parsed_files[]
}

model workspace_threads {
  id                     Int                      @id @default(autoincrement())
  name                   String
  slug                   String                   @unique
  workspace_id           Int
  user_id                Int?
  createdAt              DateTime                 @default(now())
  lastUpdatedAt          DateTime                 @default(now())
  workspace              workspaces               @relation(fields: [workspace_id], references: [id], onDelete: Cascade)
  user                   users?                   @relation(fields: [user_id], references: [id], onDelete: Cascade)
  workspace_parsed_files workspace_parsed_files[]

  @@index([workspace_id])
  @@index([user_id])
}

model workspace_suggested_messages {
  id            Int        @id @default(autoincrement())
  workspaceId   Int
  heading       String
  message       String
  createdAt     DateTime   @default(now())
  lastUpdatedAt DateTime   @default(now())
  workspace     workspaces @relation(fields: [workspaceId], references: [id], onDelete: Cascade)

  @@index([workspaceId])
}

model workspace_chats {
  id             Int      @id @default(autoincrement())
  workspaceId    Int
  prompt         String
  response       String
  include        Boolean  @default(true)
  user_id        Int?
  thread_id      Int? // No relation to prevent whole table migration
  api_session_id String? // String identifier for only the dev API to partition chats in any mode.
  createdAt      DateTime @default(now())
  lastUpdatedAt  DateTime @default(now())
  feedbackScore  Boolean?
  users          users?   @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
}

model workspace_agent_invocations {
  id            Int        @id @default(autoincrement())
  uuid          String     @unique
  prompt        String // Contains agent invocation to parse + option additional text for seed.
  closed        Boolean    @default(false)
  user_id       Int?
  thread_id     Int? // No relation to prevent whole table migration
  workspace_id  Int
  createdAt     DateTime   @default(now())
  lastUpdatedAt DateTime   @default(now())
  user          users?     @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
  workspace     workspaces @relation(fields: [workspace_id], references: [id], onDelete: Cascade, onUpdate: Cascade)

  @@index([uuid])
}

model workspace_users {
  id            Int        @id @default(autoincrement())
  user_id       Int
  workspace_id  Int
  createdAt     DateTime   @default(now())
  lastUpdatedAt DateTime   @default(now())
  workspaces    workspaces @relation(fields: [workspace_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
  users         users      @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
}

model cache_data {
  id            Int       @id @default(autoincrement())
  name          String
  data          String
  belongsTo     String?
  byId          Int?
  expiresAt     DateTime?
  createdAt     DateTime  @default(now())
  lastUpdatedAt DateTime  @default(now())
}

model embed_configs {
  id                         Int           @id @default(autoincrement())
  uuid                       String        @unique
  enabled                    Boolean       @default(false)
  chat_mode                  String        @default("query")
  allowlist_domains          String?
  allow_model_override       Boolean       @default(false)
  allow_temperature_override Boolean       @default(false)
  allow_prompt_override      Boolean       @default(false)
  max_chats_per_day          Int?
  max_chats_per_session      Int?
  message_limit              Int?          @default(20)
  workspace_id               Int
  createdBy                  Int?
  usersId                    Int?
  createdAt                  DateTime      @default(now())
  workspace                  workspaces    @relation(fields: [workspace_id], references: [id], onDelete: Cascade)
  embed_chats                embed_chats[]
  users                      users?        @relation(fields: [usersId], references: [id])
}

model embed_chats {
  id                     Int           @id @default(autoincrement())
  prompt                 String
  response               String
  session_id             String
  include                Boolean       @default(true)
  connection_information String?
  embed_id               Int
  usersId                Int?
  createdAt              DateTime      @default(now())
  embed_config           embed_configs @relation(fields: [embed_id], references: [id], onDelete: Cascade)
  users                  users?        @relation(fields: [usersId], references: [id])
}

model event_logs {
  id         Int      @id @default(autoincrement())
  event      String
  metadata   String?
  userId     Int?
  occurredAt DateTime @default(now())

  @@index([event])
}

model slash_command_presets {
  id            Int      @id @default(autoincrement())
  command       String
  prompt        String
  description   String
  uid           Int      @default(0) // 0 is null user
  userId        Int?
  createdAt     DateTime @default(now())
  lastUpdatedAt DateTime @default(now())
  user          users?   @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@unique([uid, command])
}

model document_sync_queues {
  id             Int                        @id @default(autoincrement())
  staleAfterMs   Int                        @default(604800000) // 7 days
  nextSyncAt     DateTime
  createdAt      DateTime                   @default(now())
  lastSyncedAt   DateTime                   @default(now())
  workspaceDocId Int                        @unique
  workspaceDoc   workspace_documents?       @relation(fields: [workspaceDocId], references: [id], onDelete: Cascade)
  runs           document_sync_executions[]
}

model document_sync_executions {
  id        Int                  @id @default(autoincrement())
  queueId   Int
  status    String               @default("unknown")
  result    String?
  createdAt DateTime             @default(now())
  queue     document_sync_queues @relation(fields: [queueId], references: [id], onDelete: Cascade)
}

model browser_extension_api_keys {
  id            Int      @id @default(autoincrement())
  key           String   @unique
  user_id       Int?
  createdAt     DateTime @default(now())
  lastUpdatedAt DateTime @updatedAt
  user          users?   @relation(fields: [user_id], references: [id], onDelete: Cascade)

  @@index([user_id])
}

model temporary_auth_tokens {
  id        Int      @id @default(autoincrement())
  token     String   @unique
  userId    Int
  expiresAt DateTime
  createdAt DateTime @default(now())
  user      users    @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@index([token])
  @@index([userId])
}

model system_prompt_variables {
  id          Int      @id @default(autoincrement())
  key         String   @unique
  value       String?
  description String?
  type        String   @default("system") // system, user, dynamic
  userId      Int?
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt
  user        users?   @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@index([userId])
}

model prompt_history {
  id          Int        @id @default(autoincrement())
  workspace   workspaces @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
  workspaceId Int
  prompt      String
  modifiedBy  Int?
  modifiedAt  DateTime   @default(now())
  user        users?     @relation(fields: [modifiedBy], references: [id])

  @@index([workspaceId])
}

// Schema specific to mobile app <> Desktop app connection
model desktop_mobile_devices {
  id         Int      @id @default(autoincrement())
  deviceOs   String
  deviceName String
  token      String   @unique
  approved   Boolean  @default(false)
  userId     Int?
  createdAt  DateTime @default(now())
  user       users?   @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@index([userId])
}

model workspace_parsed_files {
  id                 Int                @id @default(autoincrement())
  filename           String             @unique
  workspaceId        Int
  userId             Int?
  threadId           Int?
  metadata           String?
  tokenCountEstimate Int?               @default(0)
  createdAt          DateTime           @default(now())
  workspace          workspaces         @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
  user               users?             @relation(fields: [userId], references: [id], onDelete: Cascade)
  thread             workspace_threads? @relation(fields: [threadId], references: [id], onDelete: Cascade)

  @@index([workspaceId])
  @@index([userId])
}