From 763b8a397109e078dbd0f2e0249e56a1c5282c76 Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Fri, 19 Dec 2025 11:11:29 -0800 Subject: [PATCH] Adding migration and new pypi packages --- ...tellm_proxy_extras-0.4.15-py3-none-any.whl | Bin 0 -> 45399 bytes .../dist/litellm_proxy_extras-0.4.15.tar.gz | Bin 0 -> 21228 bytes .../migration.sql | 117 ++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 litellm-proxy-extras/dist/litellm_proxy_extras-0.4.15-py3-none-any.whl create mode 100644 litellm-proxy-extras/dist/litellm_proxy_extras-0.4.15.tar.gz create mode 100644 litellm-proxy-extras/litellm_proxy_extras/migrations/20251219110931_add_deleted_keys_and_deleted_teams_tables/migration.sql diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.15-py3-none-any.whl b/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.15-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ba2e5e5fce56aa770485ef0b8229c356521f4fd9 GIT binary patch literal 45399 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 S2#7e~s{%07n-KH+U;hu7c8lEr literal 0 HcmV?d00001 diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.15.tar.gz b/litellm-proxy-extras/dist/litellm_proxy_extras-0.4.15.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7d01b3de6fffb59a627a538bc98fbff0a4ec3704 GIT binary patch literal 21228 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 literal 0 HcmV?d00001 diff --git a/litellm-proxy-extras/litellm_proxy_extras/migrations/20251219110931_add_deleted_keys_and_deleted_teams_tables/migration.sql b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251219110931_add_deleted_keys_and_deleted_teams_tables/migration.sql new file mode 100644 index 0000000000..6ca66ddaad --- /dev/null +++ b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251219110931_add_deleted_keys_and_deleted_teams_tables/migration.sql @@ -0,0 +1,117 @@ +-- CreateTable +CREATE TABLE "LiteLLM_DeletedTeamTable" ( + "id" TEXT NOT NULL, + "team_id" TEXT NOT NULL, + "team_alias" TEXT, + "organization_id" TEXT, + "object_permission_id" TEXT, + "admins" TEXT[], + "members" TEXT[], + "members_with_roles" JSONB NOT NULL DEFAULT '{}', + "metadata" JSONB NOT NULL DEFAULT '{}', + "max_budget" DOUBLE PRECISION, + "spend" DOUBLE PRECISION NOT NULL DEFAULT 0.0, + "models" TEXT[], + "max_parallel_requests" INTEGER, + "tpm_limit" BIGINT, + "rpm_limit" BIGINT, + "budget_duration" TEXT, + "budget_reset_at" TIMESTAMP(3), + "blocked" BOOLEAN NOT NULL DEFAULT false, + "model_spend" JSONB NOT NULL DEFAULT '{}', + "model_max_budget" JSONB NOT NULL DEFAULT '{}', + "team_member_permissions" TEXT[] DEFAULT ARRAY[]::TEXT[], + "model_id" INTEGER, + "created_at" TIMESTAMP(3), + "updated_at" TIMESTAMP(3), + "deleted_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted_by" TEXT, + "deleted_by_api_key" TEXT, + "litellm_changed_by" TEXT, + + CONSTRAINT "LiteLLM_DeletedTeamTable_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "LiteLLM_DeletedVerificationToken" ( + "id" TEXT NOT NULL, + "token" TEXT NOT NULL, + "key_name" TEXT, + "key_alias" TEXT, + "soft_budget_cooldown" BOOLEAN NOT NULL DEFAULT false, + "spend" DOUBLE PRECISION NOT NULL DEFAULT 0.0, + "expires" TIMESTAMP(3), + "models" TEXT[], + "aliases" JSONB NOT NULL DEFAULT '{}', + "config" JSONB NOT NULL DEFAULT '{}', + "user_id" TEXT, + "team_id" TEXT, + "permissions" JSONB NOT NULL DEFAULT '{}', + "max_parallel_requests" INTEGER, + "metadata" JSONB NOT NULL DEFAULT '{}', + "blocked" BOOLEAN, + "tpm_limit" BIGINT, + "rpm_limit" BIGINT, + "max_budget" DOUBLE PRECISION, + "budget_duration" TEXT, + "budget_reset_at" TIMESTAMP(3), + "allowed_cache_controls" TEXT[] DEFAULT ARRAY[]::TEXT[], + "allowed_routes" TEXT[] DEFAULT ARRAY[]::TEXT[], + "model_spend" JSONB NOT NULL DEFAULT '{}', + "model_max_budget" JSONB NOT NULL DEFAULT '{}', + "budget_id" TEXT, + "organization_id" TEXT, + "object_permission_id" TEXT, + "created_at" TIMESTAMP(3), + "created_by" TEXT, + "updated_at" TIMESTAMP(3), + "updated_by" TEXT, + "rotation_count" INTEGER DEFAULT 0, + "auto_rotate" BOOLEAN DEFAULT false, + "rotation_interval" TEXT, + "last_rotation_at" TIMESTAMP(3), + "key_rotation_at" TIMESTAMP(3), + "deleted_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted_by" TEXT, + "deleted_by_api_key" TEXT, + "litellm_changed_by" TEXT, + + CONSTRAINT "LiteLLM_DeletedVerificationToken_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedTeamTable_team_id_idx" ON "LiteLLM_DeletedTeamTable"("team_id"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedTeamTable_deleted_at_idx" ON "LiteLLM_DeletedTeamTable"("deleted_at"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedTeamTable_organization_id_idx" ON "LiteLLM_DeletedTeamTable"("organization_id"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedTeamTable_team_alias_idx" ON "LiteLLM_DeletedTeamTable"("team_alias"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedTeamTable_created_at_idx" ON "LiteLLM_DeletedTeamTable"("created_at"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedVerificationToken_token_idx" ON "LiteLLM_DeletedVerificationToken"("token"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedVerificationToken_deleted_at_idx" ON "LiteLLM_DeletedVerificationToken"("deleted_at"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedVerificationToken_user_id_idx" ON "LiteLLM_DeletedVerificationToken"("user_id"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedVerificationToken_team_id_idx" ON "LiteLLM_DeletedVerificationToken"("team_id"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedVerificationToken_organization_id_idx" ON "LiteLLM_DeletedVerificationToken"("organization_id"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedVerificationToken_key_alias_idx" ON "LiteLLM_DeletedVerificationToken"("key_alias"); + +-- CreateIndex +CREATE INDEX "LiteLLM_DeletedVerificationToken_created_at_idx" ON "LiteLLM_DeletedVerificationToken"("created_at"); +