datasource client { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-py" } // Budget / Rate Limits for an org model LiteLLM_BudgetTable { budget_id String @id @default(uuid()) max_budget Float? soft_budget Float? max_parallel_requests Int? tpm_limit BigInt? rpm_limit BigInt? model_max_budget Json? budget_duration String? budget_reset_at DateTime? created_at DateTime @default(now()) @map("created_at") created_by String updated_at DateTime @default(now()) @updatedAt @map("updated_at") updated_by String organization LiteLLM_OrganizationTable[] // multiple orgs can have the same budget keys LiteLLM_VerificationToken[] // multiple keys can have the same budget end_users LiteLLM_EndUserTable[] // multiple end-users can have the same budget } // Models on proxy model LiteLLM_ProxyModelTable { model_id String @id @default(uuid()) model_name String litellm_params Json model_info Json? created_at DateTime @default(now()) @map("created_at") created_by String updated_at DateTime @default(now()) @updatedAt @map("updated_at") updated_by String } model LiteLLM_OrganizationTable { organization_id String @id @default(uuid()) organization_alias String budget_id String metadata Json @default("{}") models String[] spend Float @default(0.0) model_spend Json @default("{}") created_at DateTime @default(now()) @map("created_at") created_by String updated_at DateTime @default(now()) @updatedAt @map("updated_at") updated_by String litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) teams LiteLLM_TeamTable[] users LiteLLM_UserTable[] } // Model info for teams, just has model aliases for now. model LiteLLM_ModelTable { id Int @id @default(autoincrement()) model_aliases Json? @map("aliases") created_at DateTime @default(now()) @map("created_at") created_by String updated_at DateTime @default(now()) @updatedAt @map("updated_at") updated_by String team LiteLLM_TeamTable? } // Assign prod keys to groups, not individuals model LiteLLM_TeamTable { team_id String @id @default(uuid()) team_alias String? organization_id String? admins String[] members String[] members_with_roles Json @default("{}") metadata Json @default("{}") max_budget Float? spend Float @default(0.0) models String[] max_parallel_requests Int? tpm_limit BigInt? rpm_limit BigInt? budget_duration String? budget_reset_at DateTime? blocked Boolean @default(false) created_at DateTime @default(now()) @map("created_at") updated_at DateTime @default(now()) @updatedAt @map("updated_at") model_spend Json @default("{}") model_max_budget Json @default("{}") model_id Int? @unique litellm_organization_table LiteLLM_OrganizationTable? @relation(fields: [organization_id], references: [organization_id]) litellm_model_table LiteLLM_ModelTable? @relation(fields: [model_id], references: [id]) } // Track spend, rate limit, budget Users model LiteLLM_UserTable { user_id String @id user_alias String? team_id String? organization_id String? teams String[] @default([]) user_role String? max_budget Float? spend Float @default(0.0) user_email String? models String[] max_parallel_requests Int? tpm_limit BigInt? rpm_limit BigInt? budget_duration String? budget_reset_at DateTime? allowed_cache_controls String[] @default([]) model_spend Json @default("{}") model_max_budget Json @default("{}") litellm_organization_table LiteLLM_OrganizationTable? @relation(fields: [organization_id], references: [organization_id]) } // Generate Tokens for Proxy model LiteLLM_VerificationToken { token String @id key_name String? key_alias String? soft_budget_cooldown Boolean @default(false) // key-level state on if budget alerts need to be cooled down spend Float @default(0.0) expires DateTime? models String[] aliases Json @default("{}") config Json @default("{}") user_id String? team_id String? permissions Json @default("{}") max_parallel_requests Int? metadata Json @default("{}") tpm_limit BigInt? rpm_limit BigInt? max_budget Float? budget_duration String? budget_reset_at DateTime? allowed_cache_controls String[] @default([]) model_spend Json @default("{}") model_max_budget Json @default("{}") budget_id String? litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) } model LiteLLM_EndUserTable { user_id String @id alias String? // admin-facing alias spend Float @default(0.0) budget_id String? litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) blocked Boolean @default(false) } // store proxy config.yaml model LiteLLM_Config { param_name String @id param_value Json? } // View spend, model, api_key per request model LiteLLM_SpendLogs { request_id String @id call_type String api_key String @default ("") spend Float @default(0.0) total_tokens Int @default(0) prompt_tokens Int @default(0) completion_tokens Int @default(0) startTime DateTime // Assuming start_time is a DateTime field endTime DateTime // Assuming end_time is a DateTime field model String @default("") api_base String @default("") user String @default("") metadata Json @default("{}") cache_hit String @default("") cache_key String @default("") request_tags Json @default("[]") team_id String? end_user String? } // View spend, model, api_key per request model LiteLLM_ErrorLogs { request_id String @id @default(uuid()) startTime DateTime // Assuming start_time is a DateTime field endTime DateTime // Assuming end_time is a DateTime field api_base String @default("") model_group String @default("") // public model_name / model_group litellm_model_name String @default("") // model passed to litellm model_id String @default("") // ID of model in ProxyModelTable request_kwargs Json @default("{}") exception_type String @default("") exception_string String @default("") status_code String @default("") } // Beta - allow team members to request access to a model model LiteLLM_UserNotifications { request_id String @id user_id String models String[] justification String status String // approved, disapproved, pending }