fix: add migration.sql for prisma

This commit is contained in:
Krrish Dholakia 2026-02-21 18:25:57 -08:00
parent 08fcb8238e
commit 2a0085b260
5 changed files with 54 additions and 147 deletions

View file

@ -0,0 +1,21 @@
-- DropIndex
DROP INDEX "LiteLLM_PolicyTable_policy_name_key";
-- AlterTable
ALTER TABLE "LiteLLM_PolicyTable" ADD COLUMN "is_latest" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "parent_version_id" TEXT,
ADD COLUMN "production_at" TIMESTAMP(3),
ADD COLUMN "published_at" TIMESTAMP(3),
ADD COLUMN "version_number" INTEGER NOT NULL DEFAULT 1,
ADD COLUMN "version_status" TEXT NOT NULL DEFAULT 'production';
-- CreateIndex
CREATE INDEX "LiteLLM_PolicyTable_policy_name_version_status_idx" ON "LiteLLM_PolicyTable"("policy_name", "version_status");
-- CreateIndex
CREATE INDEX "LiteLLM_PolicyTable_version_status_idx" ON "LiteLLM_PolicyTable"("version_status");
-- CreateIndex
CREATE UNIQUE INDEX "LiteLLM_PolicyTable_policy_name_version_number_key" ON "LiteLLM_PolicyTable"("policy_name", "version_number");

View file

@ -213,53 +213,6 @@ model LiteLLM_DeletedTeamTable {
@@index([created_at])
}
// Audit table for deleted teams - preserves spend and team information for historical tracking
model LiteLLM_DeletedTeamTable {
id String @id @default(uuid())
team_id String // Original team_id
team_alias String?
organization_id String?
object_permission_id String?
admins String[]
members String[]
members_with_roles Json @default("{}")
metadata Json @default("{}")
max_budget Float?
soft_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)
model_spend Json @default("{}")
model_max_budget Json @default("{}")
router_settings Json? @default("{}")
team_member_permissions String[] @default([])
access_group_ids String[] @default([])
policies String[] @default([])
model_id Int? // id for LiteLLM_ModelTable -> stores team-level model aliases
allow_team_guardrail_config Boolean @default(false)
// Original timestamps from team creation/updates
created_at DateTime? @map("created_at")
updated_at DateTime? @map("updated_at")
// Deletion metadata
deleted_at DateTime @default(now()) @map("deleted_at")
deleted_by String? @map("deleted_by") // User who deleted the team
deleted_by_api_key String? @map("deleted_by_api_key") // API key hash that performed the deletion
litellm_changed_by String? @map("litellm_changed_by") // From litellm-changed-by header if provided
@@index([team_id])
@@index([deleted_at])
@@index([organization_id])
@@index([team_alias])
@@index([created_at])
}
// Track spend, rate limit, budget Users
model LiteLLM_UserTable {
user_id String @id
@ -320,6 +273,7 @@ model LiteLLM_MCPServerTable {
alias String?
description String?
url String?
spec_path String?
transport String @default("sse")
auth_type String?
credentials Json? @default("{}")
@ -1009,20 +963,33 @@ model LiteLLM_SkillsTable {
updated_by String?
}
// Policy table for storing guardrail policies
// Policy table for storing guardrail policies with versioning support
model LiteLLM_PolicyTable {
policy_id String @id @default(uuid())
policy_name String @unique
policy_name String // Policy name (multiple versions can share same name)
inherit String? // Name of parent policy to inherit from
description String?
guardrails_add String[] @default([])
guardrails_remove String[] @default([])
condition Json? @default("{}") // Policy conditions (e.g., model matching)
pipeline Json? // Optional guardrail pipeline (mode + steps[])
// Versioning fields
version_number Int @default(1)
version_status String @default("production") // "draft", "published", or "production"
parent_version_id String? // Reference to the policy version this was created from
is_latest Boolean @default(true)
published_at DateTime? // When this version was published
production_at DateTime? // When this version was promoted to production
created_at DateTime @default(now())
created_by String?
updated_at DateTime @default(now()) @updatedAt
updated_by String?
@@unique([policy_name, version_number])
@@index([policy_name, version_status])
@@index([version_status])
}
// Policy attachment table for defining where policies apply

View file

@ -987,9 +987,6 @@ model LiteLLM_PolicyTable {
updated_at DateTime @default(now()) @updatedAt
updated_by String?
// Relations
mirroring_configs LiteLLM_PolicyMirroringTable[]
@@unique([policy_name, version_number])
@@index([policy_name, version_status])
@@index([version_status])
@ -1010,53 +1007,6 @@ model LiteLLM_PolicyAttachmentTable {
updated_by String?
}
// Policy mirroring configuration for silent/shadow testing
model LiteLLM_PolicyMirroringTable {
mirroring_id String @id @default(uuid())
policy_id String // References LiteLLM_PolicyTable.policy_id
traffic_percentage Float @default(0.0) // 0.0-100.0
max_requests Int? // Optional limit on total mirrored requests
current_requests Int @default(0)
enabled Boolean @default(true)
fail_silently Boolean @default(true) // Don't block requests if mirroring fails
log_results Boolean @default(true) // Store results in mirror logs
started_at DateTime @default(now())
expires_at DateTime? // Optional expiration time for mirroring
created_at DateTime @default(now())
created_by String?
updated_at DateTime @default(now()) @updatedAt
updated_by String?
// Relations
policy LiteLLM_PolicyTable @relation(fields: [policy_id], references: [policy_id])
mirror_logs LiteLLM_PolicyMirrorLogs[]
@@index([policy_id, enabled])
@@index([expires_at])
}
// Policy mirroring execution logs
model LiteLLM_PolicyMirrorLogs {
log_id String @id @default(uuid())
mirroring_id String // References LiteLLM_PolicyMirroringTable.mirroring_id
request_id String? // Original request ID if available
executed_at DateTime @default(now())
execution_time_ms Float? // How long the mirrored policy execution took
result String // "pass", "fail", "error"
terminal_action String? // Final action taken by policy (allow/block/modify)
step_results Json? // Detailed step-by-step results
error_message String? // Error details if result = "error"
metadata Json? @default("{}")
created_at DateTime @default(now())
// Relations
mirroring_config LiteLLM_PolicyMirroringTable @relation(fields: [mirroring_id], references: [mirroring_id])
@@index([mirroring_id, executed_at])
@@index([result])
@@index([executed_at])
}
//Unified Access Groups table for storing unified access groups
model LiteLLM_AccessGroupTable {
access_group_id String @id @default(uuid())

View file

@ -48,7 +48,7 @@ class PolicyVersionStatus(str, Enum):
Status of a policy version in the version workflow.
- DRAFT: Policy is being edited, not yet published
- PUBLISHED: Policy is ready for testing/mirroring
- PUBLISHED: Policy is ready for testing
- PRODUCTION: Policy is active and applied to matching requests
"""
@ -57,46 +57,6 @@ class PolicyVersionStatus(str, Enum):
PRODUCTION = "production"
class SilentMirroringConfig(BaseModel):
"""
Configuration for silent/shadow testing of policy versions.
Silent mirroring executes a policy version on a percentage of traffic
without blocking requests, allowing safe testing before promotion.
Example usage:
- Test new policy on 10% of traffic
- Limit to 1000 test executions
- Log all results for analysis
- Automatically expire after testing period
"""
traffic_percentage: float = Field(
default=0.0,
ge=0.0,
le=100.0,
description="Percentage of traffic to mirror (0.0-100.0)",
)
max_requests: Optional[int] = Field(
default=None,
description="Maximum number of requests to mirror (optional limit)",
)
fail_silently: bool = Field(
default=True,
description="Continue request processing if mirroring fails",
)
log_results: bool = Field(
default=True,
description="Store execution results in mirror logs",
)
expires_at: Optional[datetime] = Field(
default=None,
description="Optional expiration time for mirroring",
)
model_config = ConfigDict(extra="forbid")
# ─────────────────────────────────────────────────────────────────────────────
# Policy Condition
# ─────────────────────────────────────────────────────────────────────────────
@ -248,7 +208,6 @@ class Policy(BaseModel):
- Policies support version workflow: draft → published → production
- Multiple versions of the same policy can coexist
- Only production versions are applied to requests by default
- Published versions can be tested via silent mirroring
Example configuration:
```yaml
@ -331,10 +290,6 @@ class Policy(BaseModel):
default=None,
description="When this version was promoted to production",
)
silent_mirroring: Optional[SilentMirroringConfig] = Field(
default=None,
description="Silent mirroring configuration (for testing)",
)
model_config = ConfigDict(extra="forbid")

View file

@ -273,6 +273,7 @@ model LiteLLM_MCPServerTable {
alias String?
description String?
url String?
spec_path String?
transport String @default("sse")
auth_type String?
credentials Json? @default("{}")
@ -962,20 +963,33 @@ model LiteLLM_SkillsTable {
updated_by String?
}
// Policy table for storing guardrail policies
// Policy table for storing guardrail policies with versioning support
model LiteLLM_PolicyTable {
policy_id String @id @default(uuid())
policy_name String @unique
policy_name String // Policy name (multiple versions can share same name)
inherit String? // Name of parent policy to inherit from
description String?
guardrails_add String[] @default([])
guardrails_remove String[] @default([])
condition Json? @default("{}") // Policy conditions (e.g., model matching)
pipeline Json? // Optional guardrail pipeline (mode + steps[])
// Versioning fields
version_number Int @default(1)
version_status String @default("production") // "draft", "published", or "production"
parent_version_id String? // Reference to the policy version this was created from
is_latest Boolean @default(true)
published_at DateTime? // When this version was published
production_at DateTime? // When this version was promoted to production
created_at DateTime @default(now())
created_by String?
updated_at DateTime @default(now()) @updatedAt
updated_by String?
@@unique([policy_name, version_number])
@@index([policy_name, version_status])
@@index([version_status])
}
// Policy attachment table for defining where policies apply