From b77fe50ed192c347c3538548051f8363aa14da8d Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Thu, 22 Jan 2026 15:22:19 -0800 Subject: [PATCH] init _init_policy_engine --- litellm/__init__.py | 4 ++- litellm/proxy/proxy_server.py | 53 +++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/litellm/__init__.py b/litellm/__init__.py index 9455b32178e..76377d9caa0 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -376,7 +376,8 @@ public_model_groups_links: Dict[str, Union[str, Dict[str, Any]]] = {} priority_reservation: Optional[ Dict[str, Union[float, "PriorityReservationDict"]] ] = None -# priority_reservation_settings is lazy-loaded via __getattr__ +# priority_reservation_settings is lazy-loaded via __getattr__, but declared here for type checking +priority_reservation_settings: Optional["PriorityReservationSettings"] = None ######## Networking Settings ######## @@ -1273,6 +1274,7 @@ def set_global_gitlab_config(config: Dict[str, Any]) -> None: if TYPE_CHECKING: from litellm.types.utils import ModelInfo as _ModelInfoType + from litellm.types.utils import PriorityReservationSettings from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler, HTTPHandler from litellm.caching.caching import Cache diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index ed7c5f8c2f3..83b01ed99b1 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -203,13 +203,13 @@ from litellm.proxy.agent_endpoints.endpoints import router as agent_endpoints_ro from litellm.proxy.analytics_endpoints.analytics_endpoints import ( router as analytics_router, ) +from litellm.proxy.anthropic_endpoints.claude_code_endpoints import ( + claude_code_marketplace_router, +) from litellm.proxy.anthropic_endpoints.endpoints import router as anthropic_router from litellm.proxy.anthropic_endpoints.skills_endpoints import ( router as anthropic_skills_router, ) -from litellm.proxy.anthropic_endpoints.claude_code_endpoints import ( - claude_code_marketplace_router, -) from litellm.proxy.auth.auth_checks import ( ExperimentalUIJWTToken, get_team_object, @@ -334,6 +334,7 @@ from litellm.proxy.management_endpoints.model_management_endpoints import ( from litellm.proxy.management_endpoints.organization_endpoints import ( router as organization_router, ) +from litellm.proxy.management_endpoints.policy_endpoints import router as policy_router from litellm.proxy.management_endpoints.router_settings_endpoints import ( router as router_settings_router, ) @@ -2771,6 +2772,13 @@ class ProxyConfig: llm_router=router, ) + # Policy Engine settings + await self._init_policy_engine( + config=config, + prisma_client=prisma_client, + llm_router=router, + ) + ## Prompt settings prompts: Optional[List[Dict]] = None if config is not None: @@ -2831,6 +2839,44 @@ class ProxyConfig: ) pass + async def _init_policy_engine( + self, + config: Optional[dict], + prisma_client: Optional["PrismaClient"], + llm_router: Optional["Router"], + ): + """ + Initialize the policy engine from config. + + Args: + config: The proxy configuration dictionary + prisma_client: Optional Prisma client for DB validation + llm_router: Optional LLM router for model validation + """ + if config is None: + return + + policies_config = config.get("policies", None) + if not policies_config: + return + + from litellm.proxy.policy_engine.init_policies import init_policies + from litellm.proxy.policy_engine.policy_validator import PolicyValidator + + # Create validator with router for model validation + validator = PolicyValidator( + prisma_client=prisma_client, + llm_router=llm_router, + ) + + # Initialize policies + await init_policies( + policies_config=policies_config, + prisma_client=prisma_client, + validate_db=prisma_client is not None, + fail_on_error=True, + ) + def _load_alerting_settings(self, general_settings: dict): """ Initialize alerting settings @@ -10655,6 +10701,7 @@ app.include_router(cloudzero_router) app.include_router(caching_router) app.include_router(analytics_router) app.include_router(guardrails_router) +app.include_router(policy_router) app.include_router(search_tool_management_router) app.include_router(prompts_router) app.include_router(callback_management_endpoints_router)