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?
  createdAt     DateTime   @default(now())
  lastUpdatedAt DateTime   @default(now())
  workspace     workspaces @relation(fields: [workspaceId], references: [id])
}

model invites {
  id            Int      @id @default(autoincrement())
  code          String   @unique
  status        String   @default("pending")
  claimedBy     Int?
  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)
  createdAt       DateTime            @default(now())
  lastUpdatedAt   DateTime            @default(now())
  workspace_chats workspace_chats[]
  workspace_users workspace_users[]
  embed_configs   embed_configs[]
  embed_chats     embed_chats[]
  threads         workspace_threads[]
}

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)
  chatModel                    String?
  topN                         Int?                           @default(4)
  workspace_users              workspace_users[]
  documents                    workspace_documents[]
  workspace_suggested_messages workspace_suggested_messages[]
  embed_configs                embed_configs[]
  threads                      workspace_threads[]
}

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)

  @@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
  createdAt     DateTime @default(now())
  lastUpdatedAt DateTime @default(now())
  feedbackScore Boolean?
  users         users?   @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
}

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?
  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])
}
