From d29cb2bf5c751844b93fbb4fe4692187e8f9898f Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:38:15 -0800 Subject: [PATCH 01/23] add projects schema --- schema.prisma | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/schema.prisma b/schema.prisma index 51e6ea9454..7a7bfd3ea4 100644 --- a/schema.prisma +++ b/schema.prisma @@ -23,6 +23,7 @@ model LiteLLM_BudgetTable { updated_at DateTime @default(now()) @updatedAt @map("updated_at") updated_by String organization LiteLLM_OrganizationTable[] // multiple orgs can have the same budget + projects LiteLLM_ProjectTable[] // multiple projects 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 tags LiteLLM_TagTable[] // multiple tags can have the same budget @@ -115,6 +116,31 @@ model LiteLLM_TeamTable { litellm_organization_table LiteLLM_OrganizationTable? @relation(fields: [organization_id], references: [organization_id]) litellm_model_table LiteLLM_ModelTable? @relation(fields: [model_id], references: [id]) object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) + projects LiteLLM_ProjectTable[] +} + +// Projects sit between teams and keys for use-case management +model LiteLLM_ProjectTable { + project_id String @id @default(uuid()) + project_alias String? + team_id String? + budget_id String? + metadata Json @default("{}") + models String[] + spend Float @default(0.0) + model_spend Json @default("{}") + blocked Boolean @default(false) + object_permission_id String? + created_at DateTime @default(now()) @map("created_at") + created_by String + updated_at DateTime @default(now()) @updatedAt @map("updated_at") + updated_by String + + // Relations + litellm_team_table LiteLLM_TeamTable? @relation(fields: [team_id], references: [team_id]) + litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) + keys LiteLLM_VerificationToken[] + object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) } // Track spend, rate limit, budget Users @@ -160,6 +186,7 @@ model LiteLLM_ObjectPermissionTable { mcp_tool_permissions Json? // Tool-level permissions for MCP servers. Format: {"server_id": ["tool_name_1", "tool_name_2"]} vector_stores String[] @default([]) teams LiteLLM_TeamTable[] + projects LiteLLM_ProjectTable[] verification_tokens LiteLLM_VerificationToken[] organizations LiteLLM_OrganizationTable[] users LiteLLM_UserTable[] @@ -207,6 +234,7 @@ model LiteLLM_VerificationToken { config Json @default("{}") user_id String? team_id String? + project_id String? permissions Json @default("{}") max_parallel_requests Int? metadata Json @default("{}") @@ -234,6 +262,7 @@ model LiteLLM_VerificationToken { key_rotation_at DateTime? // When this key should next be rotated litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) litellm_organization_table LiteLLM_OrganizationTable? @relation(fields: [organization_id], references: [organization_id]) + litellm_project_table LiteLLM_ProjectTable? @relation(fields: [project_id], references: [project_id]) object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) } @@ -286,7 +315,7 @@ model LiteLLM_SpendLogs { custom_llm_provider String? @default("") // litellm used custom_llm_provider api_base String? @default("") user String? @default("") - metadata Json? @default("{}") + metadata Json? @default("{}") // project_id stored here cache_hit String? @default("") cache_key String? @default("") request_tags Json? @default("[]") From a3c3f6ae74d50fe7449ec3c8e71748af416a0eb7 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:38:43 -0800 Subject: [PATCH 02/23] add schema --- litellm/proxy/schema.prisma | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/schema.prisma b/litellm/proxy/schema.prisma index 51e6ea9454..7a7bfd3ea4 100644 --- a/litellm/proxy/schema.prisma +++ b/litellm/proxy/schema.prisma @@ -23,6 +23,7 @@ model LiteLLM_BudgetTable { updated_at DateTime @default(now()) @updatedAt @map("updated_at") updated_by String organization LiteLLM_OrganizationTable[] // multiple orgs can have the same budget + projects LiteLLM_ProjectTable[] // multiple projects 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 tags LiteLLM_TagTable[] // multiple tags can have the same budget @@ -115,6 +116,31 @@ model LiteLLM_TeamTable { litellm_organization_table LiteLLM_OrganizationTable? @relation(fields: [organization_id], references: [organization_id]) litellm_model_table LiteLLM_ModelTable? @relation(fields: [model_id], references: [id]) object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) + projects LiteLLM_ProjectTable[] +} + +// Projects sit between teams and keys for use-case management +model LiteLLM_ProjectTable { + project_id String @id @default(uuid()) + project_alias String? + team_id String? + budget_id String? + metadata Json @default("{}") + models String[] + spend Float @default(0.0) + model_spend Json @default("{}") + blocked Boolean @default(false) + object_permission_id String? + created_at DateTime @default(now()) @map("created_at") + created_by String + updated_at DateTime @default(now()) @updatedAt @map("updated_at") + updated_by String + + // Relations + litellm_team_table LiteLLM_TeamTable? @relation(fields: [team_id], references: [team_id]) + litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) + keys LiteLLM_VerificationToken[] + object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) } // Track spend, rate limit, budget Users @@ -160,6 +186,7 @@ model LiteLLM_ObjectPermissionTable { mcp_tool_permissions Json? // Tool-level permissions for MCP servers. Format: {"server_id": ["tool_name_1", "tool_name_2"]} vector_stores String[] @default([]) teams LiteLLM_TeamTable[] + projects LiteLLM_ProjectTable[] verification_tokens LiteLLM_VerificationToken[] organizations LiteLLM_OrganizationTable[] users LiteLLM_UserTable[] @@ -207,6 +234,7 @@ model LiteLLM_VerificationToken { config Json @default("{}") user_id String? team_id String? + project_id String? permissions Json @default("{}") max_parallel_requests Int? metadata Json @default("{}") @@ -234,6 +262,7 @@ model LiteLLM_VerificationToken { key_rotation_at DateTime? // When this key should next be rotated litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) litellm_organization_table LiteLLM_OrganizationTable? @relation(fields: [organization_id], references: [organization_id]) + litellm_project_table LiteLLM_ProjectTable? @relation(fields: [project_id], references: [project_id]) object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) } @@ -286,7 +315,7 @@ model LiteLLM_SpendLogs { custom_llm_provider String? @default("") // litellm used custom_llm_provider api_base String? @default("") user String? @default("") - metadata Json? @default("{}") + metadata Json? @default("{}") // project_id stored here cache_hit String? @default("") cache_key String? @default("") request_tags Json? @default("[]") From 412f7e396aadb6261369b980cce8f4dce6506738 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:43:47 -0800 Subject: [PATCH 03/23] init project apis --- litellm/proxy/_types.py | 115 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index a212eab076..4ae0098aad 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -842,6 +842,7 @@ class GenerateKeyRequest(KeyRequestBase): description="How often to rotate this key (e.g., '30d', '90d'). Required if auto_rotate=True", ) organization_id: Optional[str] = None + project_id: Optional[str] = None class GenerateKeyResponse(KeyRequestBase): @@ -851,6 +852,7 @@ class GenerateKeyResponse(KeyRequestBase): user_id: Optional[str] = None token_id: Optional[str] = None organization_id: Optional[str] = None + project_id: Optional[str] = None litellm_budget_table: Optional[Any] = None token: Optional[str] = None created_by: Optional[str] = None @@ -2222,6 +2224,119 @@ class NewOrganizationResponse(LiteLLM_OrganizationTable): updated_at: datetime +### PROJECT MANAGEMENT TYPES ### + + +class ProjectBase(LiteLLMPydanticObjectBase): + """Base fields shared by project create/update requests""" + + project_id: Optional[str] = None + project_alias: Optional[str] = None + team_id: Optional[str] = None + metadata: Optional[dict] = None + models: Optional[List[str]] = None + blocked: bool = False + + +class NewProjectRequest(LiteLLM_BudgetTable): + """Request model for POST /project/new""" + + project_id: Optional[str] = None + project_alias: Optional[str] = None + team_id: str + budget_id: Optional[str] = None + metadata: Optional[dict] = None + models: List[str] = [] + blocked: bool = False + object_permission: Optional[LiteLLM_ObjectPermissionBase] = None + + @model_validator(mode="before") + @classmethod + def set_model_info(cls, values): + for field in LiteLLM_ManagementEndpoint_MetadataFields: + if values.get(field) is not None: + if values.get("metadata") is None: + values.update({"metadata": {}}) + values["metadata"][field] = values.get(field) + values.pop(field) + return values + + +class UpdateProjectRequest(LiteLLM_BudgetTable): + """Request model for POST /project/update""" + + project_id: str + project_alias: Optional[str] = None + team_id: Optional[str] = None + metadata: Optional[dict] = None + models: Optional[List[str]] = None + blocked: Optional[bool] = None + budget_id: Optional[str] = None + object_permission: Optional[LiteLLM_ObjectPermissionBase] = None + + @model_validator(mode="before") + @classmethod + def set_model_info(cls, values): + for field in LiteLLM_ManagementEndpoint_MetadataFields: + if values.get(field) is not None: + if values.get("metadata") is None: + values.update({"metadata": {}}) + values["metadata"][field] = values.get(field) + values.pop(field) + return values + + +class DeleteProjectRequest(LiteLLMPydanticObjectBase): + """Request model for DELETE /project/delete""" + + project_ids: List[str] + + +class LiteLLM_ProjectTable(LiteLLMPydanticObjectBase): + """Database model representation for project""" + + project_id: str + project_alias: Optional[str] = None + team_id: Optional[str] = None + budget_id: Optional[str] = None + metadata: Optional[dict] = None + models: List[str] = [] + spend: float = 0.0 + model_spend: Optional[dict] = None + blocked: bool = False + object_permission_id: Optional[str] = None + created_by: str + updated_by: str + created_at: datetime + updated_at: datetime + litellm_budget_table: Optional[LiteLLM_BudgetTable] = None + object_permission: Optional[LiteLLM_ObjectPermissionTable] = None + + +class NewProjectResponse(LiteLLM_ProjectTable): + """Response model for POST /project/new""" + + project_id: str + created_at: datetime + updated_at: datetime + + +class LiteLLM_ProjectTableCachedObj(LiteLLMPydanticObjectBase): + """Cached version for auth checks""" + + project_id: str + project_alias: Optional[str] = None + team_id: Optional[str] = None + budget_id: Optional[str] = None + metadata: Optional[dict] = None + models: List[str] = [] + spend: float = 0.0 + model_spend: Optional[dict] = None + blocked: bool = False + object_permission_id: Optional[str] = None + litellm_budget_table: Optional[LiteLLM_BudgetTable] = None + + class LiteLLM_UserTableFiltered(BaseModel): # done to avoid exposing sensitive data user_id: str user_email: Optional[str] = None From 12109c7d7eda487c75f30df30fce89a6f125e4b9 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:44:22 -0800 Subject: [PATCH 04/23] add generate_key_helper_fn --- litellm/proxy/management_endpoints/key_management_endpoints.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/litellm/proxy/management_endpoints/key_management_endpoints.py b/litellm/proxy/management_endpoints/key_management_endpoints.py index a8def13869..83d8d1e512 100644 --- a/litellm/proxy/management_endpoints/key_management_endpoints.py +++ b/litellm/proxy/management_endpoints/key_management_endpoints.py @@ -2040,6 +2040,7 @@ async def generate_key_helper_fn( # noqa: PLR0915 prompts: Optional[list] = None, teams: Optional[list] = None, organization_id: Optional[str] = None, + project_id: Optional[str] = None, table_name: Optional[Literal["key", "user"]] = None, send_invite_email: Optional[bool] = None, created_by: Optional[str] = None, @@ -2143,6 +2144,7 @@ async def generate_key_helper_fn( # noqa: PLR0915 "max_budget": key_max_budget, "user_id": user_id, "team_id": team_id, + "project_id": project_id, "max_parallel_requests": max_parallel_requests, "metadata": metadata_json, "tpm_limit": tpm_limit, From 343af7db498afc398d09a2b22e5f445615101d62 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:55:23 -0800 Subject: [PATCH 05/23] add project management APs --- .../management_endpoints/common_utils.py | 4 +- .../management_endpoints/project_endpoints.py | 682 ++++++++++++++++++ 2 files changed, 685 insertions(+), 1 deletion(-) create mode 100644 litellm/proxy/management_endpoints/project_endpoints.py diff --git a/litellm/proxy/management_endpoints/common_utils.py b/litellm/proxy/management_endpoints/common_utils.py index a2f93e3557..b050886d44 100644 --- a/litellm/proxy/management_endpoints/common_utils.py +++ b/litellm/proxy/management_endpoints/common_utils.py @@ -4,6 +4,7 @@ from litellm.proxy._types import ( KeyRequestBase, LiteLLM_ManagementEndpoint_MetadataFields_Premium, LiteLLM_OrganizationTable, + LiteLLM_ProjectTable, LiteLLM_TeamTable, LitellmUserRoles, UserAPIKeyAuth, @@ -35,6 +36,7 @@ def _set_object_metadata_field( LiteLLM_TeamTable, KeyRequestBase, LiteLLM_OrganizationTable, + LiteLLM_ProjectTable, ], field_name: str, value: Any, @@ -43,7 +45,7 @@ def _set_object_metadata_field( Helper function to set metadata fields that require premium user checks Args: - object_data: The team data object to modify + object_data: The team/key/organization/project data object to modify field_name: Name of the metadata field to set value: Value to set for the field """ diff --git a/litellm/proxy/management_endpoints/project_endpoints.py b/litellm/proxy/management_endpoints/project_endpoints.py new file mode 100644 index 0000000000..597ce7719c --- /dev/null +++ b/litellm/proxy/management_endpoints/project_endpoints.py @@ -0,0 +1,682 @@ +""" +Endpoints for /project operations + +/project/new +/project/update +/project/delete +/project/info +/project/list +""" + +#### PROJECT MANAGEMENT #### + +import json +from typing import List, Optional + +from fastapi import APIRouter, Depends, HTTPException, Request, status + +from litellm._logging import verbose_proxy_logger +from litellm._uuid import uuid +from litellm.proxy._types import * +from litellm.proxy.auth.user_api_key_auth import user_api_key_auth +from litellm.proxy.management_endpoints.common_utils import _set_object_metadata_field +from litellm.proxy.management_helpers.object_permission_utils import ( + handle_update_object_permission_common, +) +from litellm.proxy.management_helpers.utils import ( + management_endpoint_wrapper, +) +from litellm.proxy.utils import PrismaClient, handle_exception_on_proxy +from litellm.utils import _update_dictionary + +router = APIRouter() + + +async def _check_user_permission_for_project( + user_api_key_dict: UserAPIKeyAuth, + team_id: Optional[str], + prisma_client: PrismaClient, + require_admin: bool = False, +) -> bool: + """ + Check if user has permission to manage a project. + + Returns True if user is proxy admin or team admin (when team_id provided). + If require_admin=True, only proxy admins are allowed. + """ + is_proxy_admin = user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN + + if require_admin: + return is_proxy_admin + + if is_proxy_admin: + return True + + if not team_id or not user_api_key_dict.user_id: + return False + + team = await prisma_client.db.litellm_teamtable.find_unique( + where={"team_id": team_id} + ) + + if team and team.admins: + return user_api_key_dict.user_id in team.admins + + return False + + +async def _validate_team_exists( + team_id: str, + prisma_client: PrismaClient, +): + """Validate that a team exists.""" + team = await prisma_client.db.litellm_teamtable.find_unique( + where={"team_id": team_id} + ) + + if team is None: + raise ProxyException( + message=f"Team not found, team_id={team_id}", + type="not_found", + code=404, + param="team_id", + ) + + return team + + +async def _create_budget_for_project( + data: NewProjectRequest, + user_id: Optional[str], + litellm_proxy_admin_name: str, + prisma_client: PrismaClient, +) -> str: + """Create a budget for the project and return budget_id.""" + budget_params = LiteLLM_BudgetTable.model_fields.keys() + _json_data = data.json(exclude_none=True) + _budget_data = {k: v for k, v in _json_data.items() if k in budget_params} + budget_row = LiteLLM_BudgetTable(**_budget_data) + + new_budget = prisma_client.jsonify_object(budget_row.json(exclude_none=True)) + + _budget = await prisma_client.db.litellm_budgettable.create( + data={ + **new_budget, + "created_by": user_id or litellm_proxy_admin_name, + "updated_by": user_id or litellm_proxy_admin_name, + } + ) + + return _budget.budget_id + + +async def _set_project_object_permission( + data: NewProjectRequest, + prisma_client: Optional[PrismaClient], +) -> Optional[str]: + """ + Creates the LiteLLM_ObjectPermissionTable record for the project. + Returns the object_permission_id if created, otherwise None. + """ + if prisma_client is None: + return None + + if data.object_permission is not None: + created_object_permission = ( + await prisma_client.db.litellm_objectpermissiontable.create( + data=data.object_permission.model_dump(exclude_none=True), + ) + ) + del data.object_permission + return created_object_permission.object_permission_id + return None + + +@router.post( + "/project/new", + tags=["project management"], + dependencies=[Depends(user_api_key_auth)], + response_model=NewProjectResponse, +) +@management_endpoint_wrapper +async def new_project( + data: NewProjectRequest, + http_request: Request, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Create a new project. Projects sit between teams and keys in the hierarchy. + + Only admins or team admins can create projects. + + # Parameters + + - project_alias: *Optional[str]* - The name of the project. + - team_id: *str* - The team id that this project belongs to. Required. + - models: *List* - The models the project has access to. + - budget_id: *Optional[str]* - The id for a budget (tpm/rpm/max budget) for the project. + ### IF NO BUDGET ID - CREATE ONE WITH THESE PARAMS ### + - max_budget: *Optional[float]* - Max budget for project + - tpm_limit: *Optional[int]* - Max tpm limit for project + - rpm_limit: *Optional[int]* - Max rpm limit for project + - max_parallel_requests: *Optional[int]* - Max parallel requests for project + - soft_budget: *Optional[float]* - Get a slack alert when this soft budget is reached. Don't block requests. + - model_max_budget: *Optional[dict]* - Max budget for a specific model + - budget_duration: *Optional[str]* - Frequency of reseting project budget + - metadata: *Optional[dict]* - Metadata for project, store information for project. Example metadata - {"use_case_id": "SNOW-12345", "responsible_ai_id": "RAI-67890"} + - blocked: *bool* - Flag indicating if the project is blocked or not - will stop all calls from keys with this project_id. + - object_permission: Optional[LiteLLM_ObjectPermissionBase] - project-specific object permission. Example - {"vector_stores": ["vector_store_1", "vector_store_2"]}. IF null or {} then no object permission. + + Example 1: Create new project **without** a budget_id + + ```bash + curl --location 'http://0.0.0.0:4000/project/new' \\ + --header 'Authorization: Bearer sk-1234' \\ + --header 'Content-Type: application/json' \\ + --data '{ + "project_alias": "flight-search-assistant", + "team_id": "team-123", + "models": ["gpt-4", "gpt-3.5-turbo"], + "max_budget": 100, + "metadata": { + "use_case_id": "SNOW-12345", + "responsible_ai_id": "RAI-67890" + } + }' + ``` + + Example 2: Create new project **with** a budget_id + + ```bash + curl --location 'http://0.0.0.0:4000/project/new' \\ + --header 'Authorization: Bearer sk-1234' \\ + --header 'Content-Type: application/json' \\ + --data '{ + "project_alias": "hotel-recommendations", + "team_id": "team-123", + "models": ["claude-3-sonnet"], + "budget_id": "428eeaa8-f3ac-4e85-a8fb-7dc8d7aa8689" + }' + ``` + """ + from litellm.proxy.proxy_server import ( + litellm_proxy_admin_name, + prisma_client, + ) + + try: + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + # Validate team exists + await _validate_team_exists(team_id=data.team_id, prisma_client=prisma_client) + + # Check if user has permission to create projects for this team + # only team admins can create projects for their team + has_permission = await _check_user_permission_for_project( + user_api_key_dict=user_api_key_dict, + team_id=data.team_id, + prisma_client=prisma_client, + ) + + if not has_permission: + raise HTTPException( + status_code=403, + detail={ + "error": f"Only admins or team admins can create projects. Your role is {user_api_key_dict.user_role}" + }, + ) + + # Generate project_id if not provided + if data.project_id is None: + data.project_id = str(uuid.uuid4()) + else: + # Check if project_id already exists + existing_project = await prisma_client.db.litellm_projecttable.find_unique( + where={"project_id": data.project_id} + ) + if existing_project is not None: + raise ProxyException( + message=f"Project id = {data.project_id} already exists. Please use a different project id.", + type="bad_request", + code=400, + param="project_id", + ) + + # Create budget if not provided + if data.budget_id is None: + data.budget_id = await _create_budget_for_project( + data=data, + user_id=user_api_key_dict.user_id, + litellm_proxy_admin_name=litellm_proxy_admin_name, + prisma_client=prisma_client, + ) + + ## Handle Object Permission - MCP, Vector Stores etc. + object_permission_id = await _set_project_object_permission( + data=data, + prisma_client=prisma_client, + ) + + project_row = LiteLLM_ProjectTable( + **data.json(exclude_none=True), + object_permission_id=object_permission_id, + created_by=user_api_key_dict.user_id or litellm_proxy_admin_name, + updated_by=user_api_key_dict.user_id or litellm_proxy_admin_name, + ) + + for field in LiteLLM_ManagementEndpoint_MetadataFields: + if getattr(data, field, None) is not None: + _set_object_metadata_field( + object_data=project_row, + field_name=field, + value=getattr(data, field), + ) + + new_project_row = prisma_client.jsonify_object( + project_row.json(exclude_none=True) + ) + verbose_proxy_logger.info( + f"new_project_row: {json.dumps(new_project_row, indent=2)}" + ) + response = await prisma_client.db.litellm_projecttable.create( + data={ + **new_project_row, # type: ignore + }, + include={"litellm_budget_table": True}, + ) + + return response + except Exception as e: + verbose_proxy_logger.exception( + "litellm.proxy.management_endpoints.project_endpoints.new_project(): Exception occured - {}".format( + str(e) + ) + ) + raise handle_exception_on_proxy(e) + + +@router.post( + "/project/update", + tags=["project management"], + dependencies=[Depends(user_api_key_auth)], + response_model=LiteLLM_ProjectTable, +) +@management_endpoint_wrapper +async def update_project( + data: UpdateProjectRequest, + http_request: Request, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Update a project + + Parameters: + - project_id: *str* - The project id to update. Required. + - project_alias: *Optional[str]* - Updated name for the project + - team_id: *Optional[str]* - Updated team_id for the project + - metadata: *Optional[dict]* - Updated metadata for project + - models: *Optional[list]* - Updated list of models for the project + - blocked: *Optional[bool]* - Updated blocked status + - max_budget: *Optional[float]* - Updated max budget + - tpm_limit: *Optional[int]* - Updated tpm limit + - rpm_limit: *Optional[int]* - Updated rpm limit + - budget_duration: *Optional[str]* - Updated budget duration + - object_permission: Optional[LiteLLM_ObjectPermissionBase] - Updated object permission + + Example: + ```bash + curl --location 'http://0.0.0.0:4000/project/update' \\ + --header 'Authorization: Bearer sk-1234' \\ + --header 'Content-Type: application/json' \\ + --data '{ + "project_id": "project-123", + "max_budget": 200, + "metadata": { + "use_case_id": "SNOW-12345", + "status": "active" + } + }' + ``` + """ + from litellm.proxy.proxy_server import ( + litellm_proxy_admin_name, + prisma_client, + ) + + try: + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + if data.project_id is None: + raise HTTPException( + status_code=400, + detail={"error": "project_id is required"}, + ) + + # Fetch existing project + existing_project = await prisma_client.db.litellm_projecttable.find_unique( + where={"project_id": data.project_id} + ) + + if existing_project is None: + raise ProxyException( + message=f"Project not found, project_id={data.project_id}", + type="not_found", + code=404, + param="project_id", + ) + + # Check if user has permission to update this project + has_permission = await _check_user_permission_for_project( + user_api_key_dict=user_api_key_dict, + team_id=existing_project.team_id, + prisma_client=prisma_client, + ) + + if not has_permission: + raise HTTPException( + status_code=403, + detail={"error": "Only admins or team admins can update projects"}, + ) + + # Prepare update data + update_data = data.json(exclude_none=True, exclude={"project_id"}) + update_data = prisma_client.jsonify_object(update_data) + update_data["updated_by"] = user_api_key_dict.user_id or litellm_proxy_admin_name + + # Handle budget updates + budget_fields = LiteLLM_BudgetTable.model_fields.keys() + budget_updates = {k: v for k, v in update_data.items() if k in budget_fields} + + if budget_updates and existing_project.budget_id: + # Update existing budget + await prisma_client.db.litellm_budgettable.update( + where={"budget_id": existing_project.budget_id}, + data={ + **budget_updates, + "updated_by": user_api_key_dict.user_id or litellm_proxy_admin_name, + }, + ) + # Remove budget fields from project update + for field in budget_updates.keys(): + update_data.pop(field, None) + + # Handle object permissions + if "object_permission" in update_data: + object_permission_data = update_data.pop("object_permission") + if object_permission_data: + if existing_project.object_permission_id: + # Update existing permission + await prisma_client.db.litellm_objectpermissiontable.update( + where={"object_permission_id": existing_project.object_permission_id}, + data=object_permission_data, + ) + else: + # Create new permission + created_permission = await prisma_client.db.litellm_objectpermissiontable.create( + data=object_permission_data, + ) + update_data["object_permission_id"] = created_permission.object_permission_id + + # Handle metadata fields + for field in LiteLLM_ManagementEndpoint_MetadataFields: + if field in update_data: + if update_data.get("metadata") is None: + update_data["metadata"] = {} + update_data["metadata"][field] = update_data.pop(field) + + # Update project + updated_project = await prisma_client.db.litellm_projecttable.update( + where={"project_id": data.project_id}, + data=update_data, + include={"litellm_budget_table": True, "object_permission": True}, + ) + + return updated_project + except Exception as e: + verbose_proxy_logger.exception( + "litellm.proxy.management_endpoints.project_endpoints.update_project(): Exception occured - {}".format( + str(e) + ) + ) + raise handle_exception_on_proxy(e) + + +@router.delete( + "/project/delete", + tags=["project management"], + dependencies=[Depends(user_api_key_auth)], + response_model=List[LiteLLM_ProjectTable], +) +@management_endpoint_wrapper +async def delete_project( + data: DeleteProjectRequest, + http_request: Request, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Delete projects + + Parameters: + - project_ids: *List[str]* - List of project ids to delete + + Example: + ```bash + curl --location --request DELETE 'http://0.0.0.0:4000/project/delete' \\ + --header 'Authorization: Bearer sk-1234' \\ + --header 'Content-Type: application/json' \\ + --data '{ + "project_ids": ["project-123", "project-456"] + }' + ``` + """ + from litellm.proxy.proxy_server import prisma_client + + try: + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + # Check if user is admin (only admins can delete projects) + has_permission = await _check_user_permission_for_project( + user_api_key_dict=user_api_key_dict, + team_id=None, + prisma_client=prisma_client, + require_admin=True, + ) + + if not has_permission: + raise HTTPException( + status_code=403, + detail={"error": "Only admins can delete projects"}, + ) + + deleted_projects = [] + + for project_id in data.project_ids: + # Check if project exists + existing_project = await prisma_client.db.litellm_projecttable.find_unique( + where={"project_id": project_id} + ) + + if existing_project is None: + raise ProxyException( + message=f"Project not found, project_id={project_id}", + type="not_found", + code=404, + param="project_ids", + ) + + # Check if there are any keys associated with this project + associated_keys = await prisma_client.db.litellm_verificationtoken.find_many( + where={"project_id": project_id} + ) + + if len(associated_keys) > 0: + raise ProxyException( + message=f"Cannot delete project {project_id}. {len(associated_keys)} key(s) are associated with it. Please delete or reassign the keys first.", + type="bad_request", + code=400, + param="project_ids", + ) + + # Delete the project + deleted_project = await prisma_client.db.litellm_projecttable.delete( + where={"project_id": project_id} + ) + + deleted_projects.append(deleted_project) + + return deleted_projects + except Exception as e: + verbose_proxy_logger.exception( + "litellm.proxy.management_endpoints.project_endpoints.delete_project(): Exception occured - {}".format( + str(e) + ) + ) + raise handle_exception_on_proxy(e) + + +@router.get( + "/project/info", + tags=["project management"], + dependencies=[Depends(user_api_key_auth)], + response_model=LiteLLM_ProjectTable, +) +async def project_info( + project_id: str, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Get information about a specific project + + Parameters: + - project_id: *str* - The project id to fetch info for + + Example: + ```bash + curl --location 'http://0.0.0.0:4000/project/info?project_id=project-123' \\ + --header 'Authorization: Bearer sk-1234' + ``` + """ + from litellm.proxy.proxy_server import prisma_client + + try: + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + # Fetch project + project = await prisma_client.db.litellm_projecttable.find_unique( + where={"project_id": project_id}, + include={"litellm_budget_table": True, "object_permission": True}, + ) + + if project is None: + raise ProxyException( + message=f"Project not found, project_id={project_id}", + type="not_found", + code=404, + param="project_id", + ) + + # Check if user has access to this project (admin or team member) + is_admin = user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN + is_team_member = False + + if project.team_id and user_api_key_dict.user_id: + team = await prisma_client.db.litellm_teamtable.find_unique( + where={"team_id": project.team_id} + ) + if team: + is_team_member = ( + user_api_key_dict.user_id in team.admins or + user_api_key_dict.user_id in team.members + ) + + if not (is_admin or is_team_member): + raise HTTPException( + status_code=403, + detail={"error": "You don't have access to this project"}, + ) + + return project + except Exception as e: + verbose_proxy_logger.exception( + "litellm.proxy.management_endpoints.project_endpoints.project_info(): Exception occured - {}".format( + str(e) + ) + ) + raise handle_exception_on_proxy(e) + + +@router.get( + "/project/list", + tags=["project management"], + dependencies=[Depends(user_api_key_auth)], + response_model=List[LiteLLM_ProjectTable], +) +async def list_projects( + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + List all projects that the user has access to + + Example: + ```bash + curl --location 'http://0.0.0.0:4000/project/list' \\ + --header 'Authorization: Bearer sk-1234' + ``` + """ + from litellm.proxy.proxy_server import prisma_client + + try: + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + # If proxy admin, get all projects + if user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN: + projects = await prisma_client.db.litellm_projecttable.find_many( + include={"litellm_budget_table": True, "object_permission": True} + ) + else: + # Get projects for teams the user belongs to + user_teams = await prisma_client.db.litellm_teamtable.find_many( + where={ + "OR": [ + {"members": {"has": user_api_key_dict.user_id}}, + {"admins": {"has": user_api_key_dict.user_id}}, + ] + } + ) + + team_ids = [team.team_id for team in user_teams] + + projects = await prisma_client.db.litellm_projecttable.find_many( + where={"team_id": {"in": team_ids}}, + include={"litellm_budget_table": True, "object_permission": True}, + ) + + return projects + except Exception as e: + verbose_proxy_logger.exception( + "litellm.proxy.management_endpoints.project_endpoints.list_projects(): Exception occured - {}".format( + str(e) + ) + ) + raise handle_exception_on_proxy(e) + From a8237601bcc5a4503e86c74517df0dd6ea59b2d5 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:57:23 -0800 Subject: [PATCH 06/23] add project_router --- litellm/proxy/proxy_server.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index f06b9e70f4..ca7fedcf4e 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -270,7 +270,9 @@ from litellm.proxy.management_endpoints.customer_endpoints import ( from litellm.proxy.management_endpoints.internal_user_endpoints import ( router as internal_user_router, ) -from litellm.proxy.management_endpoints.internal_user_endpoints import user_update +from litellm.proxy.management_endpoints.internal_user_endpoints import ( + user_update, +) from litellm.proxy.management_endpoints.key_management_endpoints import ( delete_verification_tokens, duration_in_seconds, @@ -293,6 +295,9 @@ 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.project_endpoints import ( + router as project_router, +) from litellm.proxy.management_endpoints.router_settings_endpoints import ( router as router_settings_router, ) @@ -321,7 +326,9 @@ from litellm.proxy.ocr_endpoints.endpoints import router as ocr_router from litellm.proxy.openai_files_endpoints.files_endpoints import ( router as openai_files_router, ) -from litellm.proxy.openai_files_endpoints.files_endpoints import set_files_config +from litellm.proxy.openai_files_endpoints.files_endpoints import ( + set_files_config, +) from litellm.proxy.pass_through_endpoints.llm_passthrough_endpoints import ( passthrough_endpoint_router, ) @@ -408,7 +415,9 @@ from litellm.types.proxy.management_endpoints.ui_sso import ( LiteLLM_UpperboundKeyGenerateParams, ) from litellm.types.realtime import RealtimeQueryParams -from litellm.types.router import DeploymentTypedDict +from litellm.types.router import ( + DeploymentTypedDict, +) from litellm.types.router import ModelInfo as RouterModelInfo from litellm.types.router import ( RouterGeneralSettings, @@ -10162,6 +10171,7 @@ app.include_router(team_router) app.include_router(ui_sso_router) app.include_router(scim_router) app.include_router(organization_router) +app.include_router(project_router) app.include_router(customer_router) app.include_router(spend_management_router) app.include_router(cloudzero_router) From a8f93d03d6e9a080f6bc648c5ee804c871d85c40 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:58:38 -0800 Subject: [PATCH 07/23] add model_rpm_limit and tpm limits --- litellm/proxy/schema.prisma | 3 +++ schema.prisma | 3 +++ 2 files changed, 6 insertions(+) diff --git a/litellm/proxy/schema.prisma b/litellm/proxy/schema.prisma index 7a7bfd3ea4..45b866ad2e 100644 --- a/litellm/proxy/schema.prisma +++ b/litellm/proxy/schema.prisma @@ -123,12 +123,15 @@ model LiteLLM_TeamTable { model LiteLLM_ProjectTable { project_id String @id @default(uuid()) project_alias String? + description String? team_id String? budget_id String? metadata Json @default("{}") models String[] spend Float @default(0.0) model_spend Json @default("{}") + model_rpm_limit Json @default("{}") + model_tpm_limit Json @default("{}") blocked Boolean @default(false) object_permission_id String? created_at DateTime @default(now()) @map("created_at") diff --git a/schema.prisma b/schema.prisma index 7a7bfd3ea4..45b866ad2e 100644 --- a/schema.prisma +++ b/schema.prisma @@ -123,12 +123,15 @@ model LiteLLM_TeamTable { model LiteLLM_ProjectTable { project_id String @id @default(uuid()) project_alias String? + description String? team_id String? budget_id String? metadata Json @default("{}") models String[] spend Float @default(0.0) model_spend Json @default("{}") + model_rpm_limit Json @default("{}") + model_tpm_limit Json @default("{}") blocked Boolean @default(false) object_permission_id String? created_at DateTime @default(now()) @map("created_at") From 228c683d2b4dbcb3902dd2075d45496eb50fc75f Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:58:45 -0800 Subject: [PATCH 08/23] add model_rpm_limit/tpm --- litellm/proxy/_types.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 4ae0098aad..6a75188841 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -2243,10 +2243,13 @@ class NewProjectRequest(LiteLLM_BudgetTable): project_id: Optional[str] = None project_alias: Optional[str] = None + description: Optional[str] = None team_id: str budget_id: Optional[str] = None metadata: Optional[dict] = None models: List[str] = [] + model_rpm_limit: Optional[dict] = None + model_tpm_limit: Optional[dict] = None blocked: bool = False object_permission: Optional[LiteLLM_ObjectPermissionBase] = None @@ -2267,9 +2270,12 @@ class UpdateProjectRequest(LiteLLM_BudgetTable): project_id: str project_alias: Optional[str] = None + description: Optional[str] = None team_id: Optional[str] = None metadata: Optional[dict] = None models: Optional[List[str]] = None + model_rpm_limit: Optional[dict] = None + model_tpm_limit: Optional[dict] = None blocked: Optional[bool] = None budget_id: Optional[str] = None object_permission: Optional[LiteLLM_ObjectPermissionBase] = None @@ -2297,12 +2303,15 @@ class LiteLLM_ProjectTable(LiteLLMPydanticObjectBase): project_id: str project_alias: Optional[str] = None + description: Optional[str] = None team_id: Optional[str] = None budget_id: Optional[str] = None metadata: Optional[dict] = None models: List[str] = [] spend: float = 0.0 model_spend: Optional[dict] = None + model_rpm_limit: Optional[dict] = None + model_tpm_limit: Optional[dict] = None blocked: bool = False object_permission_id: Optional[str] = None created_by: str @@ -2326,12 +2335,15 @@ class LiteLLM_ProjectTableCachedObj(LiteLLMPydanticObjectBase): project_id: str project_alias: Optional[str] = None + description: Optional[str] = None team_id: Optional[str] = None budget_id: Optional[str] = None metadata: Optional[dict] = None models: List[str] = [] spend: float = 0.0 model_spend: Optional[dict] = None + model_rpm_limit: Optional[dict] = None + model_tpm_limit: Optional[dict] = None blocked: bool = False object_permission_id: Optional[str] = None litellm_budget_table: Optional[LiteLLM_BudgetTable] = None From 6163e26d2e1763a3df5ce97c551a76ae4627b527 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 14:59:01 -0800 Subject: [PATCH 09/23] add model tpm/rpm limits --- .../management_endpoints/project_endpoints.py | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/litellm/proxy/management_endpoints/project_endpoints.py b/litellm/proxy/management_endpoints/project_endpoints.py index 597ce7719c..e7db9c198e 100644 --- a/litellm/proxy/management_endpoints/project_endpoints.py +++ b/litellm/proxy/management_endpoints/project_endpoints.py @@ -152,6 +152,7 @@ async def new_project( # Parameters - project_alias: *Optional[str]* - The name of the project. + - description: *Optional[str]* - Description of the project's purpose and use case. - team_id: *str* - The team id that this project belongs to. Required. - models: *List* - The models the project has access to. - budget_id: *Optional[str]* - The id for a budget (tpm/rpm/max budget) for the project. @@ -161,13 +162,15 @@ async def new_project( - rpm_limit: *Optional[int]* - Max rpm limit for project - max_parallel_requests: *Optional[int]* - Max parallel requests for project - soft_budget: *Optional[float]* - Get a slack alert when this soft budget is reached. Don't block requests. - - model_max_budget: *Optional[dict]* - Max budget for a specific model + - model_max_budget: *Optional[dict]* - Max budget for a specific model. Example: {"gpt-4": 100.0, "gpt-3.5-turbo": 50.0} + - model_rpm_limit: *Optional[dict]* - RPM limits per model. Example: {"gpt-4": 1000, "gpt-3.5-turbo": 5000} + - model_tpm_limit: *Optional[dict]* - TPM limits per model. Example: {"gpt-4": 50000, "gpt-3.5-turbo": 100000} - budget_duration: *Optional[str]* - Frequency of reseting project budget - metadata: *Optional[dict]* - Metadata for project, store information for project. Example metadata - {"use_case_id": "SNOW-12345", "responsible_ai_id": "RAI-67890"} - blocked: *bool* - Flag indicating if the project is blocked or not - will stop all calls from keys with this project_id. - object_permission: Optional[LiteLLM_ObjectPermissionBase] - project-specific object permission. Example - {"vector_stores": ["vector_store_1", "vector_store_2"]}. IF null or {} then no object permission. - Example 1: Create new project **without** a budget_id + Example 1: Create new project **without** a budget_id, with model-specific limits ```bash curl --location 'http://0.0.0.0:4000/project/new' \\ @@ -175,9 +178,18 @@ async def new_project( --header 'Content-Type: application/json' \\ --data '{ "project_alias": "flight-search-assistant", + "description": "AI-powered flight search and booking assistant", "team_id": "team-123", "models": ["gpt-4", "gpt-3.5-turbo"], "max_budget": 100, + "model_rpm_limit": { + "gpt-4": 1000, + "gpt-3.5-turbo": 5000 + }, + "model_tpm_limit": { + "gpt-4": 50000, + "gpt-3.5-turbo": 100000 + }, "metadata": { "use_case_id": "SNOW-12345", "responsible_ai_id": "RAI-67890" @@ -193,9 +205,13 @@ async def new_project( --header 'Content-Type: application/json' \\ --data '{ "project_alias": "hotel-recommendations", + "description": "Personalized hotel recommendation engine", "team_id": "team-123", "models": ["claude-3-sonnet"], - "budget_id": "428eeaa8-f3ac-4e85-a8fb-7dc8d7aa8689" + "budget_id": "428eeaa8-f3ac-4e85-a8fb-7dc8d7aa8689", + "metadata": { + "use_case_id": "SNOW-54321" + } }' ``` """ @@ -317,6 +333,7 @@ async def update_project( Parameters: - project_id: *str* - The project id to update. Required. - project_alias: *Optional[str]* - Updated name for the project + - description: *Optional[str]* - Updated description for the project - team_id: *Optional[str]* - Updated team_id for the project - metadata: *Optional[dict]* - Updated metadata for project - models: *Optional[list]* - Updated list of models for the project @@ -324,6 +341,8 @@ async def update_project( - max_budget: *Optional[float]* - Updated max budget - tpm_limit: *Optional[int]* - Updated tpm limit - rpm_limit: *Optional[int]* - Updated rpm limit + - model_rpm_limit: *Optional[dict]* - Updated RPM limits per model + - model_tpm_limit: *Optional[dict]* - Updated TPM limits per model - budget_duration: *Optional[str]* - Updated budget duration - object_permission: Optional[LiteLLM_ObjectPermissionBase] - Updated object permission @@ -334,7 +353,12 @@ async def update_project( --header 'Content-Type: application/json' \\ --data '{ "project_id": "project-123", + "description": "Updated flight search system with enhanced capabilities", "max_budget": 200, + "model_rpm_limit": { + "gpt-4": 2000, + "gpt-3.5-turbo": 10000 + }, "metadata": { "use_case_id": "SNOW-12345", "status": "active" From 0078d8a45fcfe8c25b1a219844bd61c65b846e06 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:03:03 -0800 Subject: [PATCH 10/23] update schema --- .../migration.sql | 35 ++++++++++++++++++ .../litellm_proxy_extras/schema.prisma | 36 +++++++++++++++++-- 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 litellm-proxy-extras/litellm_proxy_extras/migrations/20251113000000_add_project_table/migration.sql diff --git a/litellm-proxy-extras/litellm_proxy_extras/migrations/20251113000000_add_project_table/migration.sql b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251113000000_add_project_table/migration.sql new file mode 100644 index 0000000000..f1d3129bb3 --- /dev/null +++ b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251113000000_add_project_table/migration.sql @@ -0,0 +1,35 @@ +-- CreateTable +CREATE TABLE "LiteLLM_ProjectTable" ( + "project_id" TEXT NOT NULL, + "project_alias" TEXT, + "team_id" TEXT, + "budget_id" TEXT, + "metadata" JSONB NOT NULL DEFAULT '{}', + "models" TEXT[], + "spend" DOUBLE PRECISION NOT NULL DEFAULT 0.0, + "model_spend" JSONB NOT NULL DEFAULT '{}', + "blocked" BOOLEAN NOT NULL DEFAULT false, + "object_permission_id" TEXT, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "created_by" TEXT NOT NULL, + "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_by" TEXT NOT NULL, + + CONSTRAINT "LiteLLM_ProjectTable_pkey" PRIMARY KEY ("project_id") +); + +-- AddForeignKey +ALTER TABLE "LiteLLM_ProjectTable" ADD CONSTRAINT "LiteLLM_ProjectTable_team_id_fkey" FOREIGN KEY ("team_id") REFERENCES "LiteLLM_TeamTable"("team_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "LiteLLM_ProjectTable" ADD CONSTRAINT "LiteLLM_ProjectTable_budget_id_fkey" FOREIGN KEY ("budget_id") REFERENCES "LiteLLM_BudgetTable"("budget_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "LiteLLM_ProjectTable" ADD CONSTRAINT "LiteLLM_ProjectTable_object_permission_id_fkey" FOREIGN KEY ("object_permission_id") REFERENCES "LiteLLM_ObjectPermissionTable"("object_permission_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AlterTable: Add project_id to LiteLLM_VerificationToken +ALTER TABLE "LiteLLM_VerificationToken" ADD COLUMN "project_id" TEXT; + +-- AddForeignKey +ALTER TABLE "LiteLLM_VerificationToken" ADD CONSTRAINT "LiteLLM_VerificationToken_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "LiteLLM_ProjectTable"("project_id") ON DELETE SET NULL ON UPDATE CASCADE; + diff --git a/litellm-proxy-extras/litellm_proxy_extras/schema.prisma b/litellm-proxy-extras/litellm_proxy_extras/schema.prisma index 8890456112..45b866ad2e 100644 --- a/litellm-proxy-extras/litellm_proxy_extras/schema.prisma +++ b/litellm-proxy-extras/litellm_proxy_extras/schema.prisma @@ -23,6 +23,7 @@ model LiteLLM_BudgetTable { updated_at DateTime @default(now()) @updatedAt @map("updated_at") updated_by String organization LiteLLM_OrganizationTable[] // multiple orgs can have the same budget + projects LiteLLM_ProjectTable[] // multiple projects 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 tags LiteLLM_TagTable[] // multiple tags can have the same budget @@ -115,6 +116,34 @@ model LiteLLM_TeamTable { litellm_organization_table LiteLLM_OrganizationTable? @relation(fields: [organization_id], references: [organization_id]) litellm_model_table LiteLLM_ModelTable? @relation(fields: [model_id], references: [id]) object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) + projects LiteLLM_ProjectTable[] +} + +// Projects sit between teams and keys for use-case management +model LiteLLM_ProjectTable { + project_id String @id @default(uuid()) + project_alias String? + description String? + team_id String? + budget_id String? + metadata Json @default("{}") + models String[] + spend Float @default(0.0) + model_spend Json @default("{}") + model_rpm_limit Json @default("{}") + model_tpm_limit Json @default("{}") + blocked Boolean @default(false) + object_permission_id String? + created_at DateTime @default(now()) @map("created_at") + created_by String + updated_at DateTime @default(now()) @updatedAt @map("updated_at") + updated_by String + + // Relations + litellm_team_table LiteLLM_TeamTable? @relation(fields: [team_id], references: [team_id]) + litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) + keys LiteLLM_VerificationToken[] + object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) } // Track spend, rate limit, budget Users @@ -160,6 +189,7 @@ model LiteLLM_ObjectPermissionTable { mcp_tool_permissions Json? // Tool-level permissions for MCP servers. Format: {"server_id": ["tool_name_1", "tool_name_2"]} vector_stores String[] @default([]) teams LiteLLM_TeamTable[] + projects LiteLLM_ProjectTable[] verification_tokens LiteLLM_VerificationToken[] organizations LiteLLM_OrganizationTable[] users LiteLLM_UserTable[] @@ -207,6 +237,7 @@ model LiteLLM_VerificationToken { config Json @default("{}") user_id String? team_id String? + project_id String? permissions Json @default("{}") max_parallel_requests Int? metadata Json @default("{}") @@ -234,6 +265,7 @@ model LiteLLM_VerificationToken { key_rotation_at DateTime? // When this key should next be rotated litellm_budget_table LiteLLM_BudgetTable? @relation(fields: [budget_id], references: [budget_id]) litellm_organization_table LiteLLM_OrganizationTable? @relation(fields: [organization_id], references: [organization_id]) + litellm_project_table LiteLLM_ProjectTable? @relation(fields: [project_id], references: [project_id]) object_permission LiteLLM_ObjectPermissionTable? @relation(fields: [object_permission_id], references: [object_permission_id]) } @@ -286,7 +318,7 @@ model LiteLLM_SpendLogs { custom_llm_provider String? @default("") // litellm used custom_llm_provider api_base String? @default("") user String? @default("") - metadata Json? @default("{}") + metadata Json? @default("{}") // project_id stored here cache_hit String? @default("") cache_key String? @default("") request_tags Json? @default("[]") @@ -610,4 +642,4 @@ model LiteLLM_CacheConfig { cache_settings Json created_at DateTime @default(now()) updated_at DateTime @updatedAt -} +} \ No newline at end of file From 99f2cd1841407e7282637cd30f55811fa61343c1 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:20:09 -0800 Subject: [PATCH 11/23] fix LiteLLM_ManagementEndpoint_MetadataFields --- .../migration.sql | 5 +++ .../management_endpoints/project_endpoints.py | 34 ++++++++----------- 2 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 litellm-proxy-extras/litellm_proxy_extras/migrations/20251113000001_add_project_fields/migration.sql diff --git a/litellm-proxy-extras/litellm_proxy_extras/migrations/20251113000001_add_project_fields/migration.sql b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251113000001_add_project_fields/migration.sql new file mode 100644 index 0000000000..48328b4d6a --- /dev/null +++ b/litellm-proxy-extras/litellm_proxy_extras/migrations/20251113000001_add_project_fields/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable: Add new fields to LiteLLM_ProjectTable +ALTER TABLE "LiteLLM_ProjectTable" ADD COLUMN "description" TEXT; +ALTER TABLE "LiteLLM_ProjectTable" ADD COLUMN "model_rpm_limit" JSONB NOT NULL DEFAULT '{}'; +ALTER TABLE "LiteLLM_ProjectTable" ADD COLUMN "model_tpm_limit" JSONB NOT NULL DEFAULT '{}'; + diff --git a/litellm/proxy/management_endpoints/project_endpoints.py b/litellm/proxy/management_endpoints/project_endpoints.py index e7db9c198e..9bd6097ad5 100644 --- a/litellm/proxy/management_endpoints/project_endpoints.py +++ b/litellm/proxy/management_endpoints/project_endpoints.py @@ -277,31 +277,27 @@ async def new_project( prisma_client=prisma_client, ) - project_row = LiteLLM_ProjectTable( - **data.json(exclude_none=True), - object_permission_id=object_permission_id, - created_by=user_api_key_dict.user_id or litellm_proxy_admin_name, - updated_by=user_api_key_dict.user_id or litellm_proxy_admin_name, - ) + # Prepare project data for database insertion + project_data = data.json(exclude_none=True) + project_data = prisma_client.jsonify_object(project_data) + + # Add non-data fields + project_data["object_permission_id"] = object_permission_id + project_data["created_by"] = user_api_key_dict.user_id or litellm_proxy_admin_name + project_data["updated_by"] = user_api_key_dict.user_id or litellm_proxy_admin_name + # Handle metadata fields for field in LiteLLM_ManagementEndpoint_MetadataFields: - if getattr(data, field, None) is not None: - _set_object_metadata_field( - object_data=project_row, - field_name=field, - value=getattr(data, field), - ) + if field in project_data and project_data[field] is not None: + if project_data.get("metadata") is None: + project_data["metadata"] = {} + project_data["metadata"][field] = project_data.pop(field) - new_project_row = prisma_client.jsonify_object( - project_row.json(exclude_none=True) - ) verbose_proxy_logger.info( - f"new_project_row: {json.dumps(new_project_row, indent=2)}" + f"new_project_row: {json.dumps(project_data, indent=2)}" ) response = await prisma_client.db.litellm_projecttable.create( - data={ - **new_project_row, # type: ignore - }, + data=project_data, # type: ignore include={"litellm_budget_table": True}, ) From b0c99de20412cd1c58e2277beb404cd8fa11e5dd Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:32:27 -0800 Subject: [PATCH 12/23] use 1 helper --- .../management_endpoints/project_endpoints.py | 57 ++++++++++++++----- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/litellm/proxy/management_endpoints/project_endpoints.py b/litellm/proxy/management_endpoints/project_endpoints.py index 9bd6097ad5..b6c51d3422 100644 --- a/litellm/proxy/management_endpoints/project_endpoints.py +++ b/litellm/proxy/management_endpoints/project_endpoints.py @@ -132,6 +132,21 @@ async def _set_project_object_permission( return None +def _remove_budget_fields_from_project_data(project_data: dict) -> dict: + """ + Remove budget fields from project data. + Budget fields belong to LiteLLM_BudgetTable, not LiteLLM_ProjectTable. + Keep budget_id as it's a foreign key. + + Following the pattern from organization_endpoints.py + """ + budget_fields = LiteLLM_BudgetTable.model_fields.keys() + for field in list(budget_fields): + if field != "budget_id": # Keep the foreign key + project_data.pop(field, None) + return project_data + + @router.post( "/project/new", tags=["project management"], @@ -277,27 +292,36 @@ async def new_project( prisma_client=prisma_client, ) - # Prepare project data for database insertion - project_data = data.json(exclude_none=True) - project_data = prisma_client.jsonify_object(project_data) - - # Add non-data fields - project_data["object_permission_id"] = object_permission_id - project_data["created_by"] = user_api_key_dict.user_id or litellm_proxy_admin_name - project_data["updated_by"] = user_api_key_dict.user_id or litellm_proxy_admin_name + # Create project row (following organization_endpoints.py pattern) + project_row = LiteLLM_ProjectTable( + **data.json(exclude_none=True), + object_permission_id=object_permission_id, + created_by=user_api_key_dict.user_id or litellm_proxy_admin_name, + updated_by=user_api_key_dict.user_id or litellm_proxy_admin_name, + ) - # Handle metadata fields for field in LiteLLM_ManagementEndpoint_MetadataFields: - if field in project_data and project_data[field] is not None: - if project_data.get("metadata") is None: - project_data["metadata"] = {} - project_data["metadata"][field] = project_data.pop(field) + if getattr(data, field, None) is not None: + _set_object_metadata_field( + object_data=project_row, + field_name=field, + value=getattr(data, field), + ) + new_project_row = prisma_client.jsonify_object( + project_row.json(exclude_none=True) + ) + + # Remove budget fields (following organization_endpoints.py pattern) + new_project_row = _remove_budget_fields_from_project_data(new_project_row) + verbose_proxy_logger.info( - f"new_project_row: {json.dumps(project_data, indent=2)}" + f"new_project_row: {json.dumps(new_project_row, indent=2)}" ) response = await prisma_client.db.litellm_projecttable.create( - data=project_data, # type: ignore + data={ + **new_project_row, # type: ignore + }, include={"litellm_budget_table": True}, ) @@ -452,6 +476,9 @@ async def update_project( update_data["metadata"] = {} update_data["metadata"][field] = update_data.pop(field) + # Remove budget fields (following organization_endpoints.py pattern) + update_data = _remove_budget_fields_from_project_data(update_data) + # Update project updated_project = await prisma_client.db.litellm_projecttable.update( where={"project_id": data.project_id}, From c093941e99dfcb278aa733ebba695023fcfd1c19 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:35:23 -0800 Subject: [PATCH 13/23] fix project mgmt --- litellm/proxy/_types.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 6a75188841..2ae517c871 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -2316,8 +2316,6 @@ class LiteLLM_ProjectTable(LiteLLMPydanticObjectBase): object_permission_id: Optional[str] = None created_by: str updated_by: str - created_at: datetime - updated_at: datetime litellm_budget_table: Optional[LiteLLM_BudgetTable] = None object_permission: Optional[LiteLLM_ObjectPermissionTable] = None @@ -2347,6 +2345,8 @@ class LiteLLM_ProjectTableCachedObj(LiteLLMPydanticObjectBase): blocked: bool = False object_permission_id: Optional[str] = None litellm_budget_table: Optional[LiteLLM_BudgetTable] = None + created_at: Optional[datetime] = None + updated_at: Optional[datetime] = None class LiteLLM_UserTableFiltered(BaseModel): # done to avoid exposing sensitive data From c9a9aca8cf63e6d0bd23bd5158d8bedb7f91640c Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:41:39 -0800 Subject: [PATCH 14/23] test_new_project --- .../test_project_endpoints_prisma.py | 435 ++++++++++++++++++ 1 file changed, 435 insertions(+) create mode 100644 tests/proxy_unit_tests/test_project_endpoints_prisma.py diff --git a/tests/proxy_unit_tests/test_project_endpoints_prisma.py b/tests/proxy_unit_tests/test_project_endpoints_prisma.py new file mode 100644 index 0000000000..75da918b3c --- /dev/null +++ b/tests/proxy_unit_tests/test_project_endpoints_prisma.py @@ -0,0 +1,435 @@ +import os +import sys +import traceback +from litellm._uuid import uuid +from datetime import datetime, timezone +from unittest import mock + +from dotenv import load_dotenv +from fastapi import Request +from fastapi.routing import APIRoute +import httpx + +load_dotenv() +import io +import os +import time + +sys.path.insert( + 0, os.path.abspath("../..") +) +import asyncio +import logging + +import pytest + +import litellm +from litellm._logging import verbose_proxy_logger +from litellm.proxy.management_endpoints.team_endpoints import ( + new_team, + team_info, + update_team, +) +from litellm.proxy.management_endpoints.project_endpoints import ( + new_project, + update_project, + delete_project, + project_info, +) +from litellm.proxy.proxy_server import ( + LitellmUserRoles, + user_api_key_auth, +) +from litellm.proxy.utils import PrismaClient, ProxyLogging, hash_token + +verbose_proxy_logger.setLevel(level=logging.DEBUG) + +from starlette.datastructures import URL + +from litellm.caching.caching import DualCache +from litellm.proxy._types import ( + NewProjectRequest, + UpdateProjectRequest, + DeleteProjectRequest, + NewTeamRequest, + ProxyException, + UserAPIKeyAuth, +) + +proxy_logging_obj = ProxyLogging(user_api_key_cache=DualCache()) + + +@pytest.fixture +def prisma_client(): + from litellm.proxy.proxy_cli import append_query_params + + ### add connection pool + pool timeout args + params = {"connection_limit": 100, "pool_timeout": 60} + database_url = os.getenv("DATABASE_URL") + modified_url = append_query_params(database_url, params) + os.environ["DATABASE_URL"] = modified_url + + # Assuming PrismaClient is a class that needs to be instantiated + prisma_client = PrismaClient( + database_url=os.environ["DATABASE_URL"], proxy_logging_obj=proxy_logging_obj + ) + + # Reset litellm.proxy.proxy_server.prisma_client to None + litellm.proxy.proxy_server.litellm_proxy_budget_name = ( + f"litellm-proxy-budget-{time.time()}" + ) + litellm.proxy.proxy_server.user_custom_key_generate = None + + return prisma_client + + +@pytest.mark.asyncio +async def test_new_project(prisma_client): + """ + Test creating a new project with budget, models, and metadata. + """ + try: + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + + await litellm.proxy.proxy_server.prisma_client.connect() + + # Create a team first + _team_id = f"project-test-team_{uuid.uuid4()}" + await new_team( + NewTeamRequest( + team_id=_team_id, + ), + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + # Create a project + project_data = NewProjectRequest( + project_alias="test-project", + description="Test project for unit testing", + team_id=_team_id, + metadata={ + "use_case_id": "TEST-001", + "responsible_ai_id": "RAI-001" + }, + models=["gpt-4", "gpt-3.5-turbo"], + max_budget=100.0, + model_rpm_limit={"gpt-4": 100}, + model_tpm_limit={"gpt-4": 1000}, + ) + + response = await new_project( + data=project_data, + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + print("New project response:", response) + + # Assertions + assert response.project_id is not None + assert response.project_alias == "test-project" + assert response.description == "Test project for unit testing" + assert response.team_id == _team_id + assert response.models == ["gpt-4", "gpt-3.5-turbo"] + # model_rpm_limit and model_tpm_limit are stored in metadata + assert response.metadata["use_case_id"] == "TEST-001" + assert response.metadata["responsible_ai_id"] == "RAI-001" + assert response.metadata["model_rpm_limit"] == {"gpt-4": 100} + assert response.metadata["model_tpm_limit"] == {"gpt-4": 1000} + assert response.litellm_budget_table is not None + assert response.litellm_budget_table.max_budget == 100.0 + + except Exception as e: + print("Got Exception", e) + traceback.print_exc() + pytest.fail(f"Got exception {e}") + + +@pytest.mark.asyncio +async def test_update_project(prisma_client): + """ + Test updating an existing project's budget, models, and metadata. + """ + try: + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + + await litellm.proxy.proxy_server.prisma_client.connect() + + # Create a team first + _team_id = f"project-test-team_{uuid.uuid4()}" + await new_team( + NewTeamRequest( + team_id=_team_id, + ), + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + # Create a project + project_data = NewProjectRequest( + project_alias="test-project-update", + description="Original description", + team_id=_team_id, + metadata={ + "use_case_id": "TEST-002", + }, + models=["gpt-4"], + max_budget=50.0, + ) + + create_response = await new_project( + data=project_data, + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + print("Created project:", create_response) + project_id = create_response.project_id + + # Update the project + update_data = UpdateProjectRequest( + project_id=project_id, + project_alias="test-project-updated", + description="Updated description", + metadata={ + "use_case_id": "TEST-002-UPDATED", + "additional_field": "new_value" + }, + models=["gpt-4", "gpt-3.5-turbo", "claude-3"], + max_budget=200.0, + model_rpm_limit={"gpt-4": 200, "claude-3": 50}, + model_tpm_limit={"gpt-4": 2000, "claude-3": 500}, + ) + + update_response = await update_project( + data=update_data, + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + print("Updated project response:", update_response) + + # Assertions + assert update_response.project_id == project_id + assert update_response.project_alias == "test-project-updated" + assert update_response.description == "Updated description" + assert update_response.models == ["gpt-4", "gpt-3.5-turbo", "claude-3"] + # model_rpm_limit and model_tpm_limit are stored in metadata + assert update_response.metadata["use_case_id"] == "TEST-002-UPDATED" + assert update_response.metadata["additional_field"] == "new_value" + assert update_response.metadata["model_rpm_limit"] == {"gpt-4": 200, "claude-3": 50} + assert update_response.metadata["model_tpm_limit"] == {"gpt-4": 2000, "claude-3": 500} + assert update_response.litellm_budget_table is not None + assert update_response.litellm_budget_table.max_budget == 200.0 + + except Exception as e: + print("Got Exception", e) + traceback.print_exc() + pytest.fail(f"Got exception {e}") + + +@pytest.mark.asyncio +async def test_delete_project(prisma_client): + """ + Test deleting a project. + """ + try: + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + + await litellm.proxy.proxy_server.prisma_client.connect() + + # Create a team first + _team_id = f"project-test-team_{uuid.uuid4()}" + await new_team( + NewTeamRequest( + team_id=_team_id, + ), + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + # Create a project + project_data = NewProjectRequest( + project_alias="test-project-delete", + team_id=_team_id, + models=["gpt-4"], + max_budget=50.0, + ) + + create_response = await new_project( + data=project_data, + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + print("Created project:", create_response) + project_id = create_response.project_id + + # Delete the project + delete_data = DeleteProjectRequest( + project_ids=[project_id] + ) + + delete_response = await delete_project( + data=delete_data, + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + print("Delete project response:", delete_response) + + # Assertions - delete_project returns a list of deleted project objects + assert isinstance(delete_response, list) + assert len(delete_response) == 1 + assert delete_response[0].project_id == project_id + + # Try to get info on the deleted project - should fail or return None + try: + await project_info( + project_id=project_id, + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + pytest.fail("Expected to fail when fetching deleted project") + except Exception as e: + print("Expected error when fetching deleted project:", e) + # This is expected behavior + + except Exception as e: + print("Got Exception", e) + traceback.print_exc() + pytest.fail(f"Got exception {e}") + + +@pytest.mark.asyncio +async def test_project_info(prisma_client): + """ + Test getting project info. + """ + try: + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + + await litellm.proxy.proxy_server.prisma_client.connect() + + # Create a team first + _team_id = f"project-test-team_{uuid.uuid4()}" + await new_team( + NewTeamRequest( + team_id=_team_id, + ), + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + # Create a project + project_data = NewProjectRequest( + project_alias="test-project-info", + description="Test project info endpoint", + team_id=_team_id, + metadata={ + "use_case_id": "TEST-003", + "cost_center": "engineering" + }, + models=["gpt-4", "claude-3"], + max_budget=150.0, + model_rpm_limit={"gpt-4": 150}, + model_tpm_limit={"gpt-4": 1500}, + ) + + create_response = await new_project( + data=project_data, + http_request=Request(scope={"type": "http"}), + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + print("Created project:", create_response) + project_id = create_response.project_id + + # Get project info + info_response = await project_info( + project_id=project_id, + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + ) + + print("Project info response:", info_response) + + # Assertions + project_data = info_response["project_info"] + assert project_data.project_id == project_id + assert project_data.project_alias == "test-project-info" + assert project_data.description == "Test project info endpoint" + assert project_data.team_id == _team_id + assert project_data.models == ["gpt-4", "claude-3"] + # model_rpm_limit and model_tpm_limit are stored in metadata + assert project_data.metadata["use_case_id"] == "TEST-003" + assert project_data.metadata["cost_center"] == "engineering" + assert project_data.metadata["model_rpm_limit"] == {"gpt-4": 150} + assert project_data.metadata["model_tpm_limit"] == {"gpt-4": 1500} + assert project_data.litellm_budget_table is not None + assert project_data.litellm_budget_table.max_budget == 150.0 + + except Exception as e: + print("Got Exception", e) + traceback.print_exc() + pytest.fail(f"Got exception {e}") + From a6e16a82be667462d7b5018fbbf06d1653d5e010 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:42:33 -0800 Subject: [PATCH 15/23] test proj endpoints --- .../test_project_endpoints_prisma.py | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/tests/proxy_unit_tests/test_project_endpoints_prisma.py b/tests/proxy_unit_tests/test_project_endpoints_prisma.py index 75da918b3c..daa3af2d67 100644 --- a/tests/proxy_unit_tests/test_project_endpoints_prisma.py +++ b/tests/proxy_unit_tests/test_project_endpoints_prisma.py @@ -413,20 +413,19 @@ async def test_project_info(prisma_client): print("Project info response:", info_response) - # Assertions - project_data = info_response["project_info"] - assert project_data.project_id == project_id - assert project_data.project_alias == "test-project-info" - assert project_data.description == "Test project info endpoint" - assert project_data.team_id == _team_id - assert project_data.models == ["gpt-4", "claude-3"] + # Assertions - project_info returns the project object directly + assert info_response.project_id == project_id + assert info_response.project_alias == "test-project-info" + assert info_response.description == "Test project info endpoint" + assert info_response.team_id == _team_id + assert info_response.models == ["gpt-4", "claude-3"] # model_rpm_limit and model_tpm_limit are stored in metadata - assert project_data.metadata["use_case_id"] == "TEST-003" - assert project_data.metadata["cost_center"] == "engineering" - assert project_data.metadata["model_rpm_limit"] == {"gpt-4": 150} - assert project_data.metadata["model_tpm_limit"] == {"gpt-4": 1500} - assert project_data.litellm_budget_table is not None - assert project_data.litellm_budget_table.max_budget == 150.0 + assert info_response.metadata["use_case_id"] == "TEST-003" + assert info_response.metadata["cost_center"] == "engineering" + assert info_response.metadata["model_rpm_limit"] == {"gpt-4": 150} + assert info_response.metadata["model_tpm_limit"] == {"gpt-4": 1500} + assert info_response.litellm_budget_table is not None + assert info_response.litellm_budget_table.max_budget == 150.0 except Exception as e: print("Got Exception", e) From e5624c2d577ae1b7a46f99dcfbe08fe58795ca8f Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:48:46 -0800 Subject: [PATCH 16/23] docs fix --- .../docs/proxy/project_management.md | 395 ++++++++++++++++++ docs/my-website/sidebars.js | 1 + 2 files changed, 396 insertions(+) create mode 100644 docs/my-website/docs/proxy/project_management.md diff --git a/docs/my-website/docs/proxy/project_management.md b/docs/my-website/docs/proxy/project_management.md new file mode 100644 index 0000000000..6bc6228bc7 --- /dev/null +++ b/docs/my-website/docs/proxy/project_management.md @@ -0,0 +1,395 @@ +# [Beta] Project Management + +Projects in LiteLLM sit between teams and keys in the organizational hierarchy, enabling fine-grained access control and budget management for specific use cases or applications. + +```mermaid +graph TD + A[Organization] --> B[Team 1] + A --> C[Team 2] + B --> D[Project A] + B --> E[Project B] + C --> F[Project C] + D --> G[API Key 1] + D --> H[API Key 2] + E --> I[API Key 3] + F --> J[API Key 4] + + style A fill:#e1f5ff + style B fill:#fff4e6 + style C fill:#fff4e6 + style D fill:#f3e5f5 + style E fill:#f3e5f5 + style F fill:#f3e5f5 + style G fill:#e8f5e9 + style H fill:#e8f5e9 + style I fill:#e8f5e9 + style J fill:#e8f5e9 +``` + +**Hierarchy**: `Organizations > Teams > Projects > Keys` + +### Example: Team with Multiple Use Cases + +``` +Organization: Acme Corp +└── Team A [no models] → Uses SCIM for onboarding team members + ├── Project: Flight Search Use Case [gpt-4, gpt-3.5-turbo] + │ ├── API Key 1 (Production) + │ └── API Key 2 (Staging) + ├── Project: Hotel Recommendations [claude-3-sonnet, gpt-4] + │ └── API Key 3 + └── Project: Customer Support Bot [gpt-4, claude-3-haiku] + ├── API Key 4 + └── API Key 5 +``` + +**Key Points:** +- Teams have no models assigned (model access is controlled at the project level) +- Each project (use case) has specific models it can access +- Projects can have different budgets and rate limits per model +- Multiple API keys can belong to the same project + +## Use Cases + +- **Use Case Management**: Create separate projects for different applications or use cases within a team +- **Budget Control**: Set model-specific quotas and budgets per project +- **Spend Tracking**: Track costs and usage at the project level for reporting +- **Access Control**: Control which models and resources each project can access + +## Quick Start + +### 1. Create a Project + +```bash +curl --location 'http://0.0.0.0:4000/project/new' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_alias": "flight-search-assistant", + "team_id": "team-123", + "models": ["gpt-4", "gpt-3.5-turbo"], + "max_budget": 100, + "metadata": { + "use_case_id": "SNOW-12345", + "responsible_ai_id": "RAI-67890" + } +}' +``` + +### 2. Generate API Key for Project + +```bash +curl --location 'http://0.0.0.0:4000/key/generate' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_id": "project-abc", + "key_alias": "flight-search-prod-key", + "models": ["gpt-4", "gpt-3.5-turbo"], + "max_budget": 50 +}' +``` + +### 3. Make API Calls + +```bash +curl --location 'http://0.0.0.0:4000/chat/completions' \ +--header 'Authorization: Bearer sk-proj-xyz-abc123...' \ +--header 'Content-Type: application/json' \ +--data '{ + "model": "gpt-4", + "messages": [{"role": "user", "content": "Find flights to Paris"}] +}' +``` + +The request will be tracked under the project for spend reporting. + +## API Endpoints + +### POST /project/new + +Create a new project. + +**Who can call**: Admins or Team Admins + +**Parameters**: +- `project_alias` (string, optional): Human-readable name for the project +- `team_id` (string, required): The team this project belongs to +- `models` (array, optional): List of models the project can access +- `max_budget` (float, optional): Maximum spend budget for the project +- `tpm_limit` (int, optional): Tokens per minute limit +- `rpm_limit` (int, optional): Requests per minute limit +- `budget_duration` (string, optional): Budget reset period (e.g., "30d", "1mo") +- `metadata` (object, optional): Custom metadata for the project +- `blocked` (boolean, optional): Block all API calls for this project + +**Example**: + +```bash +curl --location 'http://0.0.0.0:4000/project/new' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_alias": "hotel-recommendations", + "team_id": "team-123", + "models": ["claude-3-sonnet"], + "max_budget": 200, + "tpm_limit": 100000, + "metadata": { + "use_case_id": "SNOW-12346", + "cost_center": "travel-products" + } +}' +``` + +**Response**: + +```json +{ + "project_id": "project-def", + "project_alias": "hotel-recommendations", + "team_id": "team-123", + "models": ["claude-3-sonnet"], + "spend": 0.0, + "budget_id": "budget-xyz", + "metadata": { + "use_case_id": "SNOW-12346", + "cost_center": "travel-products" + }, + "created_at": "2025-01-15T10:00:00Z", + "updated_at": "2025-01-15T10:00:00Z" +} +``` + +### POST /project/update + +Update an existing project. + +**Who can call**: Admins or Team Admins + +**Parameters**: +- `project_id` (string, required): The project to update +- `project_alias` (string, optional): Updated project name +- `team_id` (string, optional): Move project to different team +- `models` (array, optional): Updated list of allowed models +- `max_budget` (float, optional): Updated budget +- `tpm_limit` (int, optional): Updated TPM limit +- `rpm_limit` (int, optional): Updated RPM limit +- `metadata` (object, optional): Updated metadata +- `blocked` (boolean, optional): Updated blocked status + +**Example**: + +```bash +curl --location 'http://0.0.0.0:4000/project/update' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_id": "project-abc", + "max_budget": 200, + "tpm_limit": 200000, + "metadata": { + "status": "production" + } +}' +``` + +### GET /project/info + +Get information about a specific project. + +**Parameters**: +- `project_id` (string, required): Query parameter + +**Example**: + +```bash +curl --location 'http://0.0.0.0:4000/project/info?project_id=project-abc' \ +--header 'Authorization: Bearer sk-1234' +``` + +**Response**: + +```json +{ + "project_id": "project-abc", + "project_alias": "flight-search-assistant", + "team_id": "team-123", + "models": ["gpt-4", "gpt-3.5-turbo"], + "spend": 45.67, + "model_spend": { + "gpt-4": 42.30, + "gpt-3.5-turbo": 3.37 + }, + "litellm_budget_table": { + "budget_id": "budget-xyz", + "max_budget": 100.0, + "tpm_limit": 100000, + "rpm_limit": 100 + }, + "metadata": { + "use_case_id": "SNOW-12345" + } +} +``` + +### GET /project/list + +List all projects the user has access to. + +**Example**: + +```bash +curl --location 'http://0.0.0.0:4000/project/list' \ +--header 'Authorization: Bearer sk-1234' +``` + +**Response**: + +```json +[ + { + "project_id": "project-abc", + "project_alias": "flight-search-assistant", + "team_id": "team-123", + "spend": 45.67 + }, + { + "project_id": "project-def", + "project_alias": "hotel-recommendations", + "team_id": "team-123", + "spend": 23.45 + } +] +``` + +### DELETE /project/delete + +Delete one or more projects. + +**Who can call**: Admins only + +**Parameters**: +- `project_ids` (array, required): List of project IDs to delete + +**Example**: + +```bash +curl --location --request DELETE 'http://0.0.0.0:4000/project/delete' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_ids": ["project-abc", "project-def"] +}' +``` + +**Note**: Projects with associated API keys cannot be deleted. Delete or reassign the keys first. + +## Model-Specific Quotas + +You can set different quotas for different models within a project: + +```bash +curl --location 'http://0.0.0.0:4000/project/new' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_alias": "multi-model-project", + "team_id": "team-123", + "models": ["gpt-4", "gpt-3.5-turbo", "claude-3-sonnet"], + "max_budget": 500, + "metadata": { + "model_tpm_limit": { + "gpt-4": 50000, + "gpt-3.5-turbo": 200000, + "claude-3-sonnet": 100000 + }, + "model_rpm_limit": { + "gpt-4": 50, + "gpt-3.5-turbo": 500, + "claude-3-sonnet": 100 + } + } +}' +``` + +## Spend Tracking + +Project spend is automatically tracked in the SpendLogs table with the `project_id` stored in the metadata field. You can view project-level spending in the LiteLLM UI or query it directly: + +```sql +SELECT + metadata->>'project_id' as project_id, + SUM(spend) as total_spend, + COUNT(*) as request_count +FROM "LiteLLM_SpendLogs" +WHERE metadata->>'project_id' = 'project-abc' +GROUP BY metadata->>'project_id'; +``` + +## Best Practices + +1. **Use Meaningful Names**: Use descriptive `project_alias` values that clearly identify the use case +2. **Set Budgets**: Always set `max_budget` to prevent runaway costs +3. **Use Metadata**: Store important information like use case IDs, cost centers, and approvals in metadata +4. **Monitor Spend**: Regularly check project spend using `/project/info` +5. **Separate Environments**: Create separate projects for dev, staging, and production +6. **Model Restrictions**: Only grant access to models that are actually needed for the use case + +## Example: Expedia Use Case + +This example shows how to implement a use-case approval workflow similar to Expedia's requirements: + +```bash +# 1. Employee gets approved use-case ID from ServiceNow (e.g., SNOW-12345) + +# 2. Create project with mandatory metadata +curl --location 'http://0.0.0.0:4000/project/new' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_alias": "travel-recommendation-engine", + "team_id": "team-travel-products", + "models": ["gpt-4", "claude-3-sonnet"], + "max_budget": 1000, + "metadata": { + "use_case_id": "SNOW-12345", + "responsible_ai_id": "RAI-67890", + "cost_center": "travel-products", + "approved_by": "jane.smith@company.com", + "approval_date": "2025-01-15" + } +}' + +# 3. Set model-specific quotas +curl --location 'http://0.0.0.0:4000/project/update' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_id": "project-abc", + "metadata": { + "model_tpm_limit": { + "gpt-4": 100000, + "claude-3-sonnet": 200000 + } + } +}' + +# 4. Generate API keys for the project +curl --location 'http://0.0.0.0:4000/key/generate' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{ + "project_id": "project-abc", + "key_alias": "travel-rec-prod", + "models": ["gpt-4", "claude-3-sonnet"] +}' +``` + +## Permissions + +- **Proxy Admins**: Can create, update, delete, and view all projects +- **Team Admins**: Can create, update, and view projects for their teams +- **Team Members**: Can view projects for their teams +- **Other Users**: No access to projects outside their teams + diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 2f69f0e46c..2e35eb7fcd 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -196,6 +196,7 @@ const sidebars = { items: [ "proxy/users", "proxy/team_budgets", + "proxy/project_management", "proxy/tag_budgets", "proxy/customers", "proxy/dynamic_rate_limit", From 5147734426b45c7ca529d5b54a7c64d03eec11fc Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:53:49 -0800 Subject: [PATCH 17/23] add user_api_key_project_id in SpendLogsMetadata --- litellm/proxy/_types.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 2ae517c871..e13e6f736d 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -2683,6 +2683,7 @@ class SpendLogsMetadata(TypedDict): user_api_key: Optional[str] user_api_key_alias: Optional[str] user_api_key_team_id: Optional[str] + user_api_key_project_id: Optional[str] user_api_key_org_id: Optional[str] user_api_key_user_id: Optional[str] user_api_key_team_alias: Optional[str] From 5cf8f06b177e96ee538877f4f3c521b79d914629 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 15:56:32 -0800 Subject: [PATCH 18/23] add to _get_spend_logs_metadata --- litellm/proxy/_types.py | 1 + litellm/proxy/litellm_pre_call_utils.py | 1 + litellm/proxy/spend_tracking/spend_tracking_utils.py | 1 + litellm/types/utils.py | 1 + 4 files changed, 4 insertions(+) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index e13e6f736d..499f3a1c33 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1908,6 +1908,7 @@ class LiteLLM_VerificationToken(LiteLLMPydanticObjectBase): config: Dict = {} user_id: Optional[str] = None team_id: Optional[str] = None + project_id: Optional[str] = None max_parallel_requests: Optional[int] = None metadata: Dict = {} tpm_limit: Optional[int] = None diff --git a/litellm/proxy/litellm_pre_call_utils.py b/litellm/proxy/litellm_pre_call_utils.py index c21a25b51c..e454ca68c8 100644 --- a/litellm/proxy/litellm_pre_call_utils.py +++ b/litellm/proxy/litellm_pre_call_utils.py @@ -574,6 +574,7 @@ class LiteLLMProxyRequestSetup: user_api_key_spend=user_api_key_dict.spend, user_api_key_max_budget=user_api_key_dict.max_budget, user_api_key_team_id=user_api_key_dict.team_id, + user_api_key_project_id=user_api_key_dict.project_id, user_api_key_user_id=user_api_key_dict.user_id, user_api_key_org_id=user_api_key_dict.org_id, user_api_key_team_alias=user_api_key_dict.team_alias, diff --git a/litellm/proxy/spend_tracking/spend_tracking_utils.py b/litellm/proxy/spend_tracking/spend_tracking_utils.py index 32d9c4b1f2..3938f2eb9e 100644 --- a/litellm/proxy/spend_tracking/spend_tracking_utils.py +++ b/litellm/proxy/spend_tracking/spend_tracking_utils.py @@ -61,6 +61,7 @@ def _get_spend_logs_metadata( user_api_key=None, user_api_key_alias=None, user_api_key_team_id=None, + user_api_key_project_id=None, user_api_key_org_id=None, user_api_key_user_id=None, user_api_key_team_alias=None, diff --git a/litellm/types/utils.py b/litellm/types/utils.py index bc7641aaf6..6241ec1ca7 100644 --- a/litellm/types/utils.py +++ b/litellm/types/utils.py @@ -1920,6 +1920,7 @@ class StandardLoggingUserAPIKeyMetadata(TypedDict): user_api_key_budget_reset_at: Optional[str] user_api_key_org_id: Optional[str] user_api_key_team_id: Optional[str] + user_api_key_project_id: Optional[str] user_api_key_user_id: Optional[str] user_api_key_user_email: Optional[str] user_api_key_team_alias: Optional[str] From d7824d076e50a36d9a921b28ffe0039b976eca7c Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 12 Nov 2025 16:24:23 -0800 Subject: [PATCH 19/23] docs project management --- .../docs/proxy/project_management.md | 181 +++++------------- docs/my-website/img/project_spend.png | Bin 0 -> 870288 bytes docs/my-website/sidebars.js | 2 +- docs/my-website/static/img/project_spend.png | Bin 0 -> 870288 bytes 4 files changed, 53 insertions(+), 130 deletions(-) create mode 100644 docs/my-website/img/project_spend.png create mode 100644 docs/my-website/static/img/project_spend.png diff --git a/docs/my-website/docs/proxy/project_management.md b/docs/my-website/docs/proxy/project_management.md index 6bc6228bc7..06ed5b4a0d 100644 --- a/docs/my-website/docs/proxy/project_management.md +++ b/docs/my-website/docs/proxy/project_management.md @@ -28,81 +28,85 @@ graph TD **Hierarchy**: `Organizations > Teams > Projects > Keys` -### Example: Team with Multiple Use Cases - -``` -Organization: Acme Corp -└── Team A [no models] → Uses SCIM for onboarding team members - ├── Project: Flight Search Use Case [gpt-4, gpt-3.5-turbo] - │ ├── API Key 1 (Production) - │ └── API Key 2 (Staging) - ├── Project: Hotel Recommendations [claude-3-sonnet, gpt-4] - │ └── API Key 3 - └── Project: Customer Support Bot [gpt-4, claude-3-haiku] - ├── API Key 4 - └── API Key 5 -``` - -**Key Points:** -- Teams have no models assigned (model access is controlled at the project level) -- Each project (use case) has specific models it can access -- Projects can have different budgets and rate limits per model -- Multiple API keys can belong to the same project - -## Use Cases - -- **Use Case Management**: Create separate projects for different applications or use cases within a team -- **Budget Control**: Set model-specific quotas and budgets per project -- **Spend Tracking**: Track costs and usage at the project level for reporting -- **Access Control**: Control which models and resources each project can access - ## Quick Start -### 1. Create a Project +This walkthrough shows how to create a project, generate an API key, make requests, and view project-level spend tracking in the UI. -```bash +### Step 1: Create a Project + +```bash showLineNumbers curl --location 'http://0.0.0.0:4000/project/new' \ --header 'Authorization: Bearer sk-1234' \ --header 'Content-Type: application/json' \ --data '{ "project_alias": "flight-search-assistant", - "team_id": "team-123", + "team_id": "ad898803-c8a3-4f4a-976a-a3c372cffa45", "models": ["gpt-4", "gpt-3.5-turbo"], "max_budget": 100, "metadata": { "use_case_id": "SNOW-12345", "responsible_ai_id": "RAI-67890" } -}' +}' | jq ``` -### 2. Generate API Key for Project +**Response:** +```json +{ + "project_id": "e402a141-725a-4437-bff5-d47459189716", + "project_alias": "flight-search-assistant", + "team_id": "ad898803-c8a3-4f4a-976a-a3c372cffa45", + "models": ["gpt-4", "gpt-3.5-turbo"], + "max_budget": 100, + ... +} +``` -```bash -curl --location 'http://0.0.0.0:4000/key/generate' \ +### Step 2: Generate API Key for Project + +```bash showLineNumbers +curl 'http://0.0.0.0:4000/key/generate' \ --header 'Authorization: Bearer sk-1234' \ --header 'Content-Type: application/json' \ ---data '{ - "project_id": "project-abc", - "key_alias": "flight-search-prod-key", - "models": ["gpt-4", "gpt-3.5-turbo"], - "max_budget": 50 -}' +--data-raw '{ + "models": ["gpt-3.5-turbo", "gpt-4"], + "metadata": {"user": "ishaan@berri.ai"}, + "project_id": "e402a141-725a-4437-bff5-d47459189716" +}' | jq ``` -### 3. Make API Calls +**Response:** +```json +{ + "key": "sk-W8VbscpfuyvHm5TkxRYiXA", + "key_name": "sk-...YiXA", + "project_id": "e402a141-725a-4437-bff5-d47459189716", + ... +} +``` -```bash -curl --location 'http://0.0.0.0:4000/chat/completions' \ ---header 'Authorization: Bearer sk-proj-xyz-abc123...' \ +### Step 3: Use API Key in Chat Completions + +```bash showLineNumbers +curl http://localhost:4000/v1/chat/completions \ --header 'Content-Type: application/json' \ +--header 'Authorization: Bearer sk-W8VbscpfuyvHm5TkxRYiXA' \ --data '{ "model": "gpt-4", - "messages": [{"role": "user", "content": "Find flights to Paris"}] -}' + "messages": [{"role": "user", "content": "What is litellm?"}] +}' | jq ``` -The request will be tracked under the project for spend reporting. +### Step 4: View Project Spend in UI + +Navigate to the **Logs** page in the LiteLLM Admin UI. You'll see the `user_api_key_project_id` tracked in the request metadata: + +![Project Spend Tracking](/img/project_spend.png) + +As shown above, the spend logs metadata includes: +- `"user_api_key_project_id": "e402a141-725a-4437-bff5-d47459189716"` - Links the request to your project +- All costs and token usage are automatically attributed to the project +- You can query and filter logs by project ID for detailed reporting ## API Endpoints @@ -312,84 +316,3 @@ curl --location 'http://0.0.0.0:4000/project/new' \ } }' ``` - -## Spend Tracking - -Project spend is automatically tracked in the SpendLogs table with the `project_id` stored in the metadata field. You can view project-level spending in the LiteLLM UI or query it directly: - -```sql -SELECT - metadata->>'project_id' as project_id, - SUM(spend) as total_spend, - COUNT(*) as request_count -FROM "LiteLLM_SpendLogs" -WHERE metadata->>'project_id' = 'project-abc' -GROUP BY metadata->>'project_id'; -``` - -## Best Practices - -1. **Use Meaningful Names**: Use descriptive `project_alias` values that clearly identify the use case -2. **Set Budgets**: Always set `max_budget` to prevent runaway costs -3. **Use Metadata**: Store important information like use case IDs, cost centers, and approvals in metadata -4. **Monitor Spend**: Regularly check project spend using `/project/info` -5. **Separate Environments**: Create separate projects for dev, staging, and production -6. **Model Restrictions**: Only grant access to models that are actually needed for the use case - -## Example: Expedia Use Case - -This example shows how to implement a use-case approval workflow similar to Expedia's requirements: - -```bash -# 1. Employee gets approved use-case ID from ServiceNow (e.g., SNOW-12345) - -# 2. Create project with mandatory metadata -curl --location 'http://0.0.0.0:4000/project/new' \ ---header 'Authorization: Bearer sk-1234' \ ---header 'Content-Type: application/json' \ ---data '{ - "project_alias": "travel-recommendation-engine", - "team_id": "team-travel-products", - "models": ["gpt-4", "claude-3-sonnet"], - "max_budget": 1000, - "metadata": { - "use_case_id": "SNOW-12345", - "responsible_ai_id": "RAI-67890", - "cost_center": "travel-products", - "approved_by": "jane.smith@company.com", - "approval_date": "2025-01-15" - } -}' - -# 3. Set model-specific quotas -curl --location 'http://0.0.0.0:4000/project/update' \ ---header 'Authorization: Bearer sk-1234' \ ---header 'Content-Type: application/json' \ ---data '{ - "project_id": "project-abc", - "metadata": { - "model_tpm_limit": { - "gpt-4": 100000, - "claude-3-sonnet": 200000 - } - } -}' - -# 4. Generate API keys for the project -curl --location 'http://0.0.0.0:4000/key/generate' \ ---header 'Authorization: Bearer sk-1234' \ ---header 'Content-Type: application/json' \ ---data '{ - "project_id": "project-abc", - "key_alias": "travel-rec-prod", - "models": ["gpt-4", "claude-3-sonnet"] -}' -``` - -## Permissions - -- **Proxy Admins**: Can create, update, delete, and view all projects -- **Team Admins**: Can create, update, and view projects for their teams -- **Team Members**: Can view projects for their teams -- **Other Users**: No access to projects outside their teams - diff --git a/docs/my-website/img/project_spend.png b/docs/my-website/img/project_spend.png new file mode 100644 index 0000000000000000000000000000000000000000..955d1786ba1a7d165b29de41a61907f05ac921d6 GIT binary patch literal 870288 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 Lua+5 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

{qe7^6qxIJ@rVf^E_jn#~M)aAB>4Y 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�^mm6_ihtm^>68_*hTfw zL^!+cr~2Na2nF+;Nu!7onr-DuOVK9}5Q#~Pkb%g(uli!F(G&)R4X<*pAj>{aMKUT# zxI!d@`tzV{k80Kzm;$Evo&g@1n}kX{KGGkv5%Xz5_!Rf6q}$hypa2a<%SguUT*$-E zIj7kr$la3e<^orOw8zAE1uaS@q1ey&*o>&;e%nq-ogfLgZU`?G|JW9);^Tvvl?4!k zGNHYlqPZD4w!!o2qiR1^C`E@>o5i)~;o=vh(4#b{kpb1B{q`ysW*hpU*2EJtkM>|# z(9LYM3)B=zh zgPm7bY75f&ZBG}u0T%Z!;Tsb9)w}bpsbh!#qg|emdk>MDS(X|Uqqxy1gat?0 zrm4Z124gp+NmHxqZo7Z_WB|Tm$6D8L>gP+TSy;;^6Q}~jaVinDYHEL@or1Ocxlk`H z*GiZ`D`$Rled~FRMPm$IHoB2&LkClRMcH=wR)v!Dwb7KpOJbLCJygNh8{djzK28n) zZ0D&HeuVlylLQXNO_YBx+Af5+y*Dc){q1*m$4l%!8vBRht!*HA)ptd` z0>Zs@Atlw`YVENpC7P`C%*xQOd+?DF&6esU%tCX@_|W0DS|Y<>FWs>$=@xI}OSoR( zVM2)CYZn3iO5S%tY@WBYo*ljted%b%f&Y1|kl^BK(m$I3&gfGwURc|amEALTbbsdwpS zubm73+dztIau*d1mRy{VOH7q7cD8Ui+fvffb^`tx16T&ndq2?jV3ndL+Uq)-c4TkL zzo-7%gTb0XasrFeEg$|oTub&NHwI(5*|y26FI5{IRV#zkF=m==yd-AK_Ia#qMe$Q< z1#bh&@%J;gItiPTCfu}TCBBVhiGJnc(F8q!^#t<{U41a@B`&BKezJ*)O2sUl!3aa|OB{_H z3Pr&|CY!|>nX9FdzocII*CEIrB#wfS80qJCCoIA+P-6!^!4yQh?W|cPvQy(Gv3n6f zsa9>JwlYz2g@MiaYO*^WjS7R<3N>@I)PYVF4LJ29B%c(x0`2xd|v5^ z>*Tdy@`|Dq<0lzmw-jymrF6Mxw<3C-0*s)o#VD0v`2ku|3#Fn!X+pYLdOBa5IJI3~ zK@;Yn^nJ>dw*&%OEG{qRUwC64-xHpoTPBq0jZ5UQ>`9}DH#MjF(f`qJi0>~W^6zMB zA1C!Tc6(Rtd&{6t$svp$h}niqpl9*L)1Y-6MG&>0$?Zv-VDh9$^TfJs9aC(9PY7ZGcm`Xxo+B}qwdX${`Zu_AysYn~ $V6!n_`B@Bj}jH%zK8HmB=eM&8p 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�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�{>;}ty`ay%&bzu9SkS1 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 @!F~K*zdt6}^SHJI$N6u%AL` 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 z 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�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

@DEE4{kdq1)Pp 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 literal 0 HcmV?d00001 diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index 2e35eb7fcd..3ea109d713 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -196,7 +196,7 @@ const sidebars = { items: [ "proxy/users", "proxy/team_budgets", - "proxy/project_management", + "project_management", "proxy/tag_budgets", "proxy/customers", "proxy/dynamic_rate_limit", diff --git a/docs/my-website/static/img/project_spend.png b/docs/my-website/static/img/project_spend.png new file mode 100644 index 0000000000000000000000000000000000000000..955d1786ba1a7d165b29de41a61907f05ac921d6 GIT binary patch literal 870288 zcmeEuby!qe+c(Ss36&5DrA0t#q#Hp&y1PrHyBUTN5CH)Z38?`o>FyQ*0qGbT$)S-P zn1SIN&vWX1zV|!V^B#Tw`WP;*S+iH&>t6TouD$jSQ&pC|j(-~;0|Vo_+>=M@7#PG{ z7#MhxxL43ua$57#&|g^A50xHbV3b8)Ju|~b|E9BeqOOF2;md@95g3etfk0mhT*JWd zKzH0Q#lR3w#K0hTPN`QDMOOq{>B>D-Qo>+CmvJ$$F>he}f-YgA|1dCbV|*VCUBZyZ zr2M0-j(P95HUJEaP#X-a-`eP-zrTN8qyI56a4&E$Fo-ZPeo4ptbHsGO@2!cs(tr8A zj3@cMo8sqE74#RL^AkNc3=A?x^gjb8EpCt}1_of%(ZR~yjLzG^-qB6iTkOuSErikK@0U66(EZxP-A?R|u97O9w3Dk99X|&b z2iF~Od^$QhQCG{S!s?G?e(R3@C3feTySuY6C#RQ}7l#)Qhm)%{C%2H05GU6I&Ib?J z(Jk2Bd>q})yxASy82&ZL@8dkOa-$hr8IFJKrbz7u(d~Q9zqaq@Br@r(XC)qkn|lhA+l{IjE$qm8@xgWtOR+vR`nrTb^SI5#ivZ=L>n_1}A_ zxY}5uS^6u5+`qN|>$ShM|GrLPRU27 zXEO^car8{TcKOSte{cQkM0$Tt^niz7@UIj7rRuk?qMYA%{x6d7FERV|Dq7CO@kKfR zkXdp3l8DG73=ByOxknE*y)n0DR6bbh=wo~{IGWpp>&Lps#=mf+*!uJ`qAgPHr4(1h zqZqZjVG*7SEVa(9pRqpL&m2nOJ%7%`PjQF%4I5Qhx1iuQQ_QPmTqW&A87U$e5lRvz zcvgc+i?2r$ya^#ZX6>qRu~T3GA1_Hq6u9l29;BMgZq(G9#QPA_Nd{tI0Uoaf=d)!qTmt*mngVI z!6gbVQE-WZOB7t9;1UIwD7ZwyB?>N4aEXFT6kMX<5(SqixJ1Dv3NBG_iGoWMT%zC- z1^<7dK$jdmS5Gx6gh#ZN6?oAud|D-Z^M{Vwn>t|cSBcdHkjkyL`RcOLf2seUZ=q?qq`1#ZVsyt7sq~8uS;$X(#(*nX(y4ku z2F(a!%$D;g|Cp$UKT0h&_CDzsIe9Exstm~sTxd1#&*LpM`I^U>f0V4L5!P8ebS2qS z`9~kPm?in#;B}YzPN^~A{7ATXhr*&IxY>#mSKU$i86{f}+@;X?1tHFh^1KVn@o%$5*RlxvpEpDX!?Oa_yZebx~a z$RpMbmjvB!m?SHQG7%5P~f``8N}vt-A3<{LmzWTHwY4 z9E0Jy@eU`W{<^H`PJRcXwHkUkp`WLCOOpUiV~PseShgh3kYaPkX9dlli_;1=8WDIu z_-r1V2A#?3Q-zs=ZJ4beO5rTuVGOM zDb*{KJ`sOvzkg``zi_-B5YHaE<GMt>Wv@Gfwbf117vl+*w;`@M-jgqpvu7pz6RRwRFCpN=cLHGif;2{xp; zmyt6dw&Gw;@lR#$j}`ObF7p*~58PF zL>i%OmFe{py=jjUX!W^uAM}I(|4_u6N%qbU3&QWnGnE50F>YH>0<-{1vq2ua$;CQj z%E)#`#K?Q8AzJQEoesGrCL@UFtPeC#-$ddc3El5=eK+j|46m8&01*=)=?PUTZs61i78*~TMu1I%$%k%g*!?TDqp zeYVnwPvysn!CEC%eQjYZbb!mICrSLAF=%?HT2cdUY=rC-CU&B=Kg@u5zMA3|FP0TC zze&2$bg~$co94gYT>=sH*$1blrs5#ZQ3DS4_9^$rPxBUmI(y>UjRN6bMJ1vVXO!YJ zI6)7!tI_X!sJN40@8^e%5`)7-CsC*X&+UWF$5c<-*#;2F=Y=g}1N=4o<;E^k``eFy z-2Evbn&3?HY}OL>KhHG(a&gVvKcoKlcL9VVb&lZ&7qvc1h)~G+?igXqMf5xp?sU;s zBXPg@u~}@}v!Z9RR7~fYtJ_3SC$GCp7O97b!tMHTo8IP%RU7|MtoP5PLZg=Nu@gVr zm@BZG*JU>EG1e+(=dDv4O{m1hfpwbCs)$p|`7tb0>^+9ur^5``Gg(EA2p^k^!tMMcYa{FNJ*90C zyR=R(NxE=W_pkS&N*B>e$}VDuGDKE=PFKL(FxvA|Vv8PuH)1_^*XL+V2L$^RMlwLw zSHW!)XHJc+sJ$-g`ol51X%SYj|M8?XCuxY{ocCr?O>va6I7P?3CpSXG?p#r=WRL-U zN~GP^vly$dK&!2jf2l14HloL5`u{rqv+6pL0x%4`m9xMN_kbJrK4FU;3tRLhmr~2k5)(9j~Vn2DGF8fJWc#1ev z!u(70abcP5tRD28hrb50KPh*Qo$TczKD+qyQ60l{wq@cD(fAnKEpnG}F$?3re2l>FUD;4uAJYQETzIH4Sq+R7S7iFdyh|J}tdXIL{&Ru|0wQFZK@GzI& zInHBJsH7xjEZ@l+YL`4f6S=YX!YFdL<-%)vdV1b)qo4oB-BAp%Jb3@sw|%{D`|rM) ztLlAekH7#YVfENb8e?tT)b;Gh_JK$E#F|gM?FeYL-+DS^Vm!?xI7gEwm-h>h`RuJ6HeUBhB>UUK?rox%w2wr}t%9o*H@mO)}nREIPRBp zuy#6-Qm^d7=!_e^_i_gy5*M@YXEzoZT|V;?goc7t;Ba_FUteF4m$1xFSO)tIL6?hj z_{G%sZCU?yTN-;|UA?gGUR`n1bE|=Ox!4kmrw8UI2~o5y#!-4z(0o{pt?~XTJ|?ze zGoUN`9aiVXL8{H-^Pt?>8e79dS;Y}KWF~b>YUEXNjucl)om3y1^BZ?tUfAF#9y-p{?sYwW7(K7RTvI1zT$?2-JE`58 z)i?iP=0|f-M2UBu4_5nHgagh_Xvvm(?$F>TDgxY6CGWf@vw6Z{cjLp&dsji4q!%Aj zG}}XL;6=C5!Q05&p7~EFyLYB2A77mK!7`)85s}5DoO0ZiKTHl?DFI-mVrhkExkJw@ z9DY)EPgMKS< zI{kBA^FYv0ej%g64@U) zI$D*?tGV2r30h@6P?ejzbLfwWlcOUF@ld4;)qQaG_0f_G7loyjpO=>aD@&*q+7wWW zR4x5?DS-c(MWyQvw=QUDsj50^2zh+^_2?+38+DIBcJEupRy((qPNi&uQz!+fA#+iB z?2JNu-S<_22!EB+EUa|yq5^LG@XcMF`m_Y?*|9PG-t~8B>qGbxZIbL)Y^}jYrYp04 z(9bx-<4<^|fD9%lADQQHng`LpZbQ5yp`ZD7K4Ng-nv&~2`$7(v@@QC0p<{>HHW z-i26iLuTfKg7QZ?I#xh&4eEC>#56P}PpKpV&Qg|GCFvNgb-@ZQc(|Ha;CvqIe*X;h z*aXc_0-uy5F#tq?7+7=|n7BWusCyT)>y1c`VXh8)IlgjGYyDkGK&;1URY_iQwJJoR zbO7#CuXiyHLp0_34)ar+WFDMBKeXhifDj`^ve7i>v`0yRpGC``3nP8f%DocB4lUwa zA1GVBza!d_kz0FM$^Mw0+GOLP64dOwiWD7dCj$^hwi@D5)97c`a$#w+f}Mby1|U5x zEf43a>S)i0Kbu*Bt;4v2IcKz}1zME3O_ei0);Kxljl{x|UBCNY4O0&u#7(E2MkzpY z9ePaT=AigV7q`)_O~^R4i07G(0{C;?&)vK4{3=D@ZOzmjw0OR%)1OLjx#^X*IC$W) zZUf4rOx`_kH?Hf-UZOqptg3=Noaa2^1Y_VS#$!ZlKuN**y8-Zq`9bPkJsq#UKB=G0 zD_scI@t04DB4Ie#0HVZD48k7Kz!O2y!ucn8oAFbSi~M018-tC5x1X4)6Xu{_QU9DY{ukg&w%!h1J(m}DoYCli>e-k-P4$KZ+ z6MIL;00&D;OI@#ZNqZ+FrmM+Zd=>0iHlcdE*5b_#a$VWmvxM@E_dE>q&KdLds%Hr| z>w7(a(LDT$n`L>Oa0h?%8n{X&9T6&Vws3Wm-lu!&BER;Rp9IuD!O<(-%Do!Jr{l2v zRF@`eRJ{$$`w7cQuhC+W*1G>iQM|gNADLeYBxK7Zat>M2Kb?TiOi)g#|8%BFno<)d zhVivf`V||%H|_0x`JLL$mu3}+*=w5BVVrQ(*m&AXv&4o00K64c8f+^_3W!tqI;Lad z;Am@$$n0s7-nsUZwHca8;l$2`br$^*z)o>o$*(kMc+Oa~6^uQkgSgzkXx3ys=vtZ2 zJ=lL&IE*}lRZS6JppKm`j!Bywm2gT!ex_#qb;H0O(&-*dt7nea>USD7Q+%f&)jm&7 z1y9b9XM5{FRP7nkoyq`Llot>nd5?-QjNy#kdgWDk1cgFmO7w^#Rd63zRdOTI>2Gi$Ugu zg?vp+a5w|nAcQ036a1z7D=TmJxYjU?B~-7|j35&WABm)P_hc)B0*o45mO6Esg8oBO zP!Qbu_AIb7S4Ym`*%h=7W5QEZD(ZeZ^6c-i5>8}_D#g9|U9VrgquP14p!lWkfaheu zWsQUf`ov}9ex97`vnMWFHp#~WDb;IzuF#r^7lrYjY}Mx}aExCunr@pP+?vF!dL#fk z5Gc~p(o!ip6Y?RQ?0ux`#jEoea$EKMOO@PDGI|4oAwssOZj%3xj=Lm_P? z8gee1Xm;fa!p~5rbGZi!4kM>%wOotSbYW(4@o=8@h%-=yrhb&$%}baE+M}? zl#q5f{y*I6|4fMg<<4v-2AU5LZXEA+zAv%3IU|e}e&YjseL^act`9&?HNkJiHF|(H zVGdSv|D8&YD=Ckj!({o2YTflk!M~TAf3mwD6anF45``jeREWbb;{r*GqfG;hv|VZQ zkU8?Gv~wq6Q1jC8yQ^a2sa<4%US&G5YrV$Yq*A8WNuEdv^YZag>$Srlj?n)!Kkaw* zZ+Z)N*?eHPGmBGt>^nN?R1Ju|+LYKrTHDE9^`<^zo>d7*rdTOSkm!f_nM7V_dghW$ z{&eFW*owHzMdG(3=uY01t+L5UTe34?sBVa~T-csn8V-PLzNrrJintIM6RA33iFbdx zSZWBb$m(?7Z>N795KIW$FeC*O#7b`P=4)0L_cIN%{QM2ny$?W3`F%Cna5so zLSH~tL30RisXE@>w#GputB0|Cr^d#?na6%tF2Tp?x9dF~4xb^P{r(qd@xr3=+o5p3 z5Mr7wTfeUilrJ$-r}FbPnGiwF-y}ELI615y1fraxe5Db~!@mgUte#TR8|VO&K}5?2h@8zj5A{}G>c z?}4kE7fNlw%tuGjFXpDtuZl*r(_?_EB-0&C-4`BYc-=dkTQj~|BTM=B`Vk#99E2WV zELz|e@&H)5Kx zQ@>xBRE=VD0<1yWwkjS~FqU_jY#pKJM7q6Lukq|or!%+z&fI~sNlc4P*RSQFQznm0 zu`Q*-r3X55kRIVmIyXJo(9VmmM1@FaCDJ1Rls6C?`zUW|#3#F2L99iy>0leA3r#IC z@<(Cdy>4B`{FuGLr$UF52r96rP_ zm;r$fgB(rD=ilV3U)%jBA+cRrYiADjywqk+&R~76LmSKmfcDX@;L?$dwf}4dlBN2WCvBa+ZdX?#T6%ym!>uQ3_q0?hP|Xaen8a9<#2~T`s*((2MEC zjm>9?lDzSP)XSn5D2eM9?maYekdryCTd=0|}k8 zuLB5FiNd@=2k!nQSYhlj9-Agz?$Sv0vuvv^#ap?<8E#_&Q0sO7>RSMYOcFCoOVMit zQK3^)8>JS01=W0ee02&B(!KG1a{5LS09NN-KRv(S544RDNG)-y|KdCBvw}`a0s=CXm%F4>v7fOnXq4o6}iM3fdIl`JcI@oU#*lw`o z{wG5FcfkAi1s1%M6z7=Tl_M)pYT=$bZv74^FoSUoxo+`YI)x%;tE{BW2xr;X#Y<4s zfzL`xLHoFq%i^21j54kV4`^g$ncMrRDWAtCoJ9ZheNF#}n7jp(H77qi?;pUJBHPqA_oG}j7562_?NU$RCCt2ipt8NVPWfBe0-$&1^H4ypwi%rpU=TJcv-dX zPUo;UcZx=;OW|`ZHlTpyeihlAfdgdkxhS>3yl3;~7cZ2Qgvt6QdnJ&n*W4oT|Ec6=%xNR%?7ry zVt<#Eguk?;k%88Zm6f9}>g$uX=o?@BYzIws9cwjQL&arVgNJBePFelTFW|!e3z_en zR5WB4;ZFd5^BvVUuG1DW0OZz+GYyQ-ij*Tka`CI-C`0mUWy*UadAg=kEVPs^~JQ2eHE1RBrj`fI1zQE-$xM618VlGy7( z@iL>uQfx+ZGsoz-HftDOA{jX5XB!r9m8@y8;9&@saju0%%GoGDE$bj5iPx%b<9^L4 zE3nCRy2GVc^1CI$h+!EQ1>apBKZ`8b6;7EkyFlPOM~ay{?NoaP*^;pXLq1QrE8^Tg(g8F8cw9^3AoFp z=b5F63+`b;YY}QD=AbtTnjKh7alo1x>c97m|0f3GFKrKq(G2nr9-o8VmmZd{@~ zf*tBMO?D8g4cl?ebN<^42Uc`n?_R%&Tc`t&`*4b?D1ov@m+u(VDSXUAp#>=lWR?2q z;a`^YbBZjnlKk3Y$odDn@eR)<@c>nf#}$--17cl{wz>(l!M8EUZ(2V%8}G8N&^oP( z?!Gt`>;YoEVu{#kCiMB`-%aw5(v+@_cQZnE;EG8u^z`KTP#l;BixpRyR_|IFP}n8+ zGZvO`NGM3tq@DJ7lj#owDCMTKQDnds7QG=xqU^U<90qNQ(s@GJ+r84>|JpV2x>2GkoUkUSz({$xAFl3s!O*2Jm*zp>V1;+iie%?49 z=JXS$+#D$rCs1NyA}%|nz7){N=tDsPTTSCmTJzw@2<4R*FQh%Rw4T}9;~MZgh4W`* z2aKf}&9;G-7Oky|BPj)ftCc9*bH*bTijofgot}Ton6=7lI)m%=k{d?0zkQ7B#usfjaYVq%gunU`GK*}-c%|ApH{ zPQxPeh68`ex`7vjTPUyDd=+^FUw83gncEe&GVC@O=4^$WBB7l0)cic!oc^jj2MwlM z0px_7bfv|(x{j}+$q~`R0z1v0&R?!PiLLOXEgsx zi{=q7W;B>xgDE#F;>$I6v1TP-dC|uo8GFdL4=JG72DYDwF3Q+wv|XXeHIAV%F=eF| zU7n0{6RK)>if1FW43vYDR}-YIWxc2>>}SVwXgk4H3Z||bUqZOJxR#Y!x8|A{sDvt` zv6$ciPd8V!hFwIXjOF)ErraczYZdP+({02Ijq44v0yWK2d%6@7`yLtSEQG?bzX-ys|s_q6ah=J_av6t~<9OV61AxoBl#y_5^t_ z&1(W#Zj6RR8#G77`8u8Ieq+Dq-{okR&6s0wKi&`rK%{#cvv>BnBFmaxysV9*S#gpW z?ZU}t-cEQ~H8Gj{@;kY(Iu_l>5YmHomGdrtpvv*g$Hrub>{o=^Lr?{c_^`mE!slt8 zPWG^TvCuVGvmvGNL(d6PmQ6g3M1v2p17F(XX~r4Otqq>C#N!-vKXbAP5;MlD@ONNSYzRWP4o>+G_6 zea~sX5(Gwz2-z`de`$lzXGEjB3eh*@_-hEGTZPrx*(n8iUW3|0O5j;!5lh#i91imjpHVn7C}g zt?AnFNApN#Wft8`fvD5^o0Z%g%$<>aN@lUz!Lu{tIj!MME*=v=Klm4{49;a1JD9GD zpmB>2>sf9KQke>_9Nu1RB=Qk;-q0@4eB4px#!wf3%=%>Ya57?H^xZ**$&znEsz`MR zCvahGaAx%8{QS<^D@-|wv%Qj!AD+L-d78q&|IB0MI;8=xz7BvAJ6k}2FPMyxdiDcQ zmSCH(2;Xq3-ik;0dd!^*Nz-$p(o7v|XzI7llKC*XFooH=RH>xfo9$5!2GS8*U_ba) zI8dQLn>ttX3Yhk64YttPH@){%|7{}TYqQuwopto4AIF5pJn&-a+qejAu!xaZ+p$%` zXw6BLPA%t|a>{5uqbTAtYH)Ov;&^+OnmQhM4Sjk-R|1RbiHF96?3x|O-;|v+ta0>HPC+(_UWl&m^m=g z4aOPraMD^_+=oTcA3YivRHNFr;6^Ym}V-MQ7)WZ$}b? zyC(ci{(FYu+d&e@6(=d=c0ZS>sJ}pBV+xGjWWL>hS5j>tIz<>Lo-!;N9AK70@rI!w8*M0hWW4TF_SU3l7KmIa z*cm^Al7lWZ_Ks|An77f^VH^h&$=JA;vzjmpdsQG|Gwgp zn8Fw9cP$e?+ZyTOgI7ws%^O6d*0aD*15l`GiI=|Cw&^7DK)G{SgUwFC=y>#P8D*-~ zWyXtLIH*wQ;^9$~#==*Wm|5?t(!!}Vr0}JS?{R=nQ#0O)P?^yHBJbR=+zOtSYBsQw z+J<_aMw?i0Qg@1yxX=uU|AkwwZO~4p=miwMfulNy8-i~X{czcOq6Me(biZg0> z%sZ(IVxrkF#Y;Hc_{u^J`OedQ4v(DENaL)(atl%wzH;h6(d6b=*S8{wE9wkLyapoU>OUVZlf32P9Ce7_}Dt6-}BOX=QT z_u%9tJHy)AY*<$V&fC-X%^Aw9ypeN8+qRnBsxNMG!N55YLFx8fJx|}TSJ)E#c^8XR zsg+=CynAZespHWv(31IZ%uH!l{LS?p!q}vgVl~NV=IJX*P46u{C?T;5^~#l>4&%}g~5n%HYrXj>w<;*qBl7~eIktZW;!P)pS$^Fnrs+XB%q zhPV0P{d|~?fj0cT<6}I}`2}{1J-y=Nu`RvpqQsp25@`1`pV2h;NpGa% zdMvf;_&qJEt&w|1PX6}lc&~4JMBR|?4g=}Cw&T6V736%p)3(ETcdNcAz;w7bvZJ;8 z3S-jb-L8p{jTJGmb1%>@(i>M(QaZy1)m`56UdZ^~{9v72qOf6bHq`=_nT*)n9Bbjd zZfigSV%mq|kWZ6cZC8 z*yS$Q-HVm8l z`lzTHTtCszU07D45NDt3p`S6qKO(a(6~Ld$>#M&s--N$fX}BlfAE#TGKx*F}ve%MY z%pNVO0%2c$n!FQu!$~kh(?colB=Rw`VoA)NRkxSX^>y0D?kozQLt{jKD!;5pooc#5 zF@>&6xZJ^op}ajhQfJ*aNZxXYy!vr6u+GtJQs1YE3~z#Lb6zjEQ`W}5G7^=oUMq+$7!h?Va>r*b zs8Vv?zKN8M3Kfr(jZGbKGgayhRP=zva&UuPb^%NTjh8nNPA0^k5sVz%&bd6 zZwKIsv-{P?!06c5#o3EOx93}q`ZYy4yv(hUEZ#Bi%sXJGX+@j9{qyH=rbq!`F&hJ z(p(9X*(!m@MhDzB39RAY{LFKNn0?EI#DTE23G8M&^017jLG zbW8g(Bm7`K494r>MD?ZfzE;Eboaqljy#a5J%Yu#f09tPffY^wf34X4J_Ms*GA zZUlRk2j9?3`*wNmP;a|Zjot^QhW1y52>-|e6)FSTUF&OtHoY#^tzD$*4M?W=%X8&6 zCTt_|sRMV~7DBG-RI+Gm)ViO_pX}Q~!V30Did2H=eh;5`VLVD+wi_MhHQ~R)MKX zv7&Oyv%h5OZyR=tOgX)9HfG)NUCC^21Am(sVsJeaFEv!sJ34x{mXD=Y(EQGge=xTE z+|_$6-Yp^adab?cgWDo2ox299FM|5ID(k;}K)l}CCMcM{b?bJWK}#y~2=q$5T-2-e zQv|0tNt6WYiMJx_j4B-l_~>D4l%a(yk%v0|G`>Oti_q&3=hGe!#)tX%eDcAECuOo9 zWA#r@(AG+~I=yum3X3(z+B!K9i@d*eXq~H#b3r@N!rHjMe|2cRWna}uXiRJuzwJ+~@VCL!Hif2VWGMfbOH=cbQA*B>dp(sPgF!)%G zEP9*o+{izQ?E2ruLCtY7p7Z8RSGX;_dOpP(+S)uf=d6MG0an#>G+vb4&TQ<UtJ_j zapV|NtWUA1-4Um3_qMevBai;T?%~%zxxX3elddh4c4&fIO+KIp{R(! zIPx7v$M9ha-I}(wPVG{9;XBE=8eY^<&*6ZmhvL%sb#5Q6<}1@(B9302cbU%dnTph$ zTSy44kTGXMjiHj+MBhZgLG9G9twfX~Z=CS*36Lp$wK!eUD!Vw9ZF$A2X3(;KP@y-V z>!x5a(c)x1QQ@bf25BAp-0J{8`y5DStiaFFJ1LI+CFibp_SAMDA2U;g+`&`(EXugA z&eq~=YyuYWve zyc+7Ps7B>k+PX}w>#4q>;7Hij`;zbW4pf35w z_uDRjFSn;sNsaA3Odjy_&FW0W3!60$jQE@`u`M4U{R`ow)4Kz|<|lgY5K&iK-kWQ2 zax%;l0lm>NUyE7#5P_{6`RaZDPNPfvi(1Ze4Q8Cwr`W?&^dqbsTd_QdV5akAt4GB# z#GVzeF$a$zvFYxc-p~aM_)7mAiefXNMu~=(I z6rShQcW|-Fwnm8)=%S9McS8w;Y6OMeK-$TQFq$7eunM9g+ot2WCp1!GJ-+``DvC=( zLmD0LMPy{>3E69;r|U$sSF5k|%y#dabi*s^95hb86hH>gSwF~;yhk2y4^wy??3>tQ z+Z}p2%H9*npsW&gDnl)0{chwOc2>Db zg8dS7)@AZW8Hj)fjX|x#%ydWWJ!D6;a>au5sj;`~X!mTrVqLG?(s<6sEaeGWB;DKk zXckIh2lDfDidNotaKIMxOeHZIn)Xr+j~$q3^U$BysL&qUp3c%*AYW)*+LbuJ!gQ_= zRMKvM7B@h0lNEsqqB@uzzx?vc(8GRoIX9X?4v33eE7yN~u0gXmQUb#|djRF%y`4<5^h zuS7%Sm_4ZDEDkF>o7D9(E!-&c6n}pgz=0pFKh@E=j`*HoN<}q?x?D&7DK(D5`asxC z(SA6~_-VOY7e988D9sdqW#@o_L2~(3_Z6uDlgMA~<+mgh8(vir4{#Uact~v*97uv`Z#zwNygN_XC7L&h zVvmZ9W^rydjW`Oxu|&WpM0xs^yL=lQ>1nlyIJcRiqb3_g$-=_Q+XD6^U!8`RRBE2uoz+0?g zfW!5616^qjuC8pDa8mW8b%%hN$lUVV8{PLGI+>Uh*aImeuJjyz=G@pgI$o33W9wEa zgg#iKPxuhZE4_vn(w(1ISc3y$ScE&%3=P{8g~8>iUX{2t z_NTG?VagKoMj~D}jnX^1Z*O;19}2aH)5D4X-buTt?oMR7ui;gdni`z{b=dD zrE*w~#XkCf7`6_~L!bPyb4cDP8Q!rg0un0Na-yG636741Qh@JP&TMUM@_AD7lB3fg z+gP?Yy$7=%F2pe4yeH9UZX)L}tV?eF6qR)p>0yS9VmG@;6N6LVCP{p@l3zbH^-OfG z#yXd3aC2FADhKG{3b1?C=DeQ8OP`oZ;bCBiFGH!4KIK(K2S|O!X!3rkkzjvMoCDRZ z_Q5dY-PCJz zcOYOVmouam|Dj1u%8rL2I;&}TG#9mowE9|-U(Pe8`E8>Gh)+hfkFS2T)aE-HOf|68 z2-2};$=LKZ=j>nT0O5N#Y|-+ z1c3BX@n|U)-0`$sam2)-rDA@DAc(!R`tR@y+;;wf4);AAwuSv z+*`LRWu<_G4p&we^B3z@c6sc^JKj6Wnw^9G*l@fHnx$rF9bz(cwCPG35G-;Q8 zpaDd&88Q1AqC5&gG9}72mdO@%aIf9^5R~@yrrzQDy6Gf#@i~z4jm5FK|V^>%!d5ic~YkNs(P zH#?Rw-gqdl*(QhR*d6qQ&pAydZhTJbwL{PBgQv^my5D$SZgVo}&gEC5Ekg4;GRuU2 zcxVW3lKy6;xcDvcleJd>7s~b_2Au4r7m14ORh_VUOOKX9B_3+nw%9v0L1wYdxg7N` zS8VCyp6_l)ZnsAmWtv9Zo4AR;|3THR%%TG7mM&Ye<0mPc5o?MBR705>N~5d%4=F$z zc6Mi!wP%SI zQ-nx$RCC3cc01_sI2Bltkbt5btQ;awmm->4bYvGav|Q$$8YhI-llJO)aC8Z>;qcC* z0B!kbE#UT{sOG>#>aJX`xef;ivNHVnv-in2wEMm}%Rc?s*Ri+6>NqAMradp-e19Ik zd#*OOMti_Au3VwyI&^f}Xl_4JwLg7#Am{1o!ddLzDMv?ff&>J<85;;nmQFGVxCk1N z@Bi?r*2_0@J{1-=#Y-dNdSdFmewu6XzCu0tY+A|p`AS5DgBj{N4B|zbjKY^C3xLQe zX8}(gjwkc;llHcgPl2##pzbcY@IabVE@Tprj67<6&UR0XsUI2(f>Z;f9U&5C!N*dUj5#?`M3_clXXgUP3dOuSTDR}N%?fL!+icd&gArHtfmh1lQ@$} zm(+YNf42A_j9Exc5&jLfKGATVO|yDx?<3A{)ay~ZKSZ;sj z6IygnB@E7po7L4#i}YCN(p)t4lulR2{UWBJf8VPc$QB~0Ey$6RmYvp;X!msBJ{(ak zli+7x9bo)D$C>!Jm37u9J7WNJOj03!5Jk&Mbi5eHI%K*A9$8g#Sm#dxwmQ zmbnqeWc|4^W)ghO^L2Twzt)(u;Yv5FF_bkgEEUrD;3Pdo(5c$%ldt`WkmsQ))ia;C zK|B0K>LK~Zlm`4gxGP$aW0}lK93z?(pOw2f2+z-XW6CG&lvVmCPepv~!&#~OtSvp! znRzdB=kY2^0j=CfnJTlcWA>r@p2@EkYzDpNBloZTk@#R^z@$u=uF`J``cx#X$2omB zbshbx7c%>oPS5ToN;OJ_=}@d~ZQxz3?>1A*$i9sK}O6-92jtm_1EJ0I?^ zP-ZN7>Wsdlx;IfGIZUXW7NNYx&Lg+7-(N<+w$BnH5I1V7i@D`lT`g|a+tk6BEcdskeP%!(Ot8@p;@BD-&Y$m!sgCL4*^y@ zV`KO})`AlD2z>K4fnoko@bjb3U9=*iz3Z*lkO(9LB&t8Hwr64DM0cXxMq^aTYj=)# zqhpL<1)auZ!Ia?HzHKn8_U+{Dn>XI|>BcRmxsU+Ef@bl2YuJ+%dw8vb6bX2{rZPW9 z`{Za_(=eSL_5aR-;mM8Y(}Ye0a{i@fO#jceR@0-tyj@ z|5EA0R41W9boTEG5B!qj%u!dy(_bmb|~U|y?gqclYUv4SlxU6W5z`&0@GM&39k-8lr-@ufR8|n+Eo&t0v0}b&~6J^Nr<` zbi>-LxPHb9g80|u@j<}yTT?XF%$2s?&NvFf>4S);#sTCEE6uId4@K&xI-fOpLyH~E z3J^C$$_=$>t&Kc%yL|W#`v>v zjoALsi{OE4h}^Va^^KS$XfiL-X>6f48VARYWxU>+#I%jiK3LDH*3&2V8no!zcAU-K z${$`gh$G4=E;feOX(8O)ws>Y~rXK_Squo&ivk6BC&H75$g~7peMEWc@QNJ8Ub?@qW zfR|7Ni9YS??eR9Y0SPxltxbXVpxndrdf?NOZP1z8S@DiL>5bV}&%W#(m^5XNm3h5D z2UIhz{Gs*e#G01m*Qm~`@l_IP7hmauHTgeRf9sP#*(#>h<|(-~7{R3>=k~_tup6)N_K@#V0_mMx4DxnIVX2sIrn*u z>waF3=XG&&igFoCd*J=?%!7=eKP?}g?Ye(b71jlyFUK#yjG^Ce*E7tc>G|gANzMXR zGg=$QHmV4s+Ug~tbR(j%D5s4o6_1R4D)5#QL-oNH@+Cv@-~{I4;OF`LSdsR19IW1K znOo`%x)Ezr8soWguruM>?z(9R4>27iUU-F8sZ>FS=0}O!N5DTxpwys~#x;RH^+vEj zO8bu6lbMWv%QQvScX95Gp!eYv`_q9G+)x#bzhdQcs~yX^j$xvJAakqFE2*)bUmCG7 zAhGtE5s^V} zGW%TQ8~otql3Vu6JNYpM6~nj6tW`ED#sRlkXK##2z4|MTw$55z_xE6B7)Gf!X~{xC z^sio$n(#r}Vk7*k>=DI&ckWv!v+4P{>+qlq^`i#OQ+|K1!=EsvXWNDDC&rDv8!9lY z&;E|J>&D`CgMsa0r7tIde=N2id*jy@Sk$V~Z53E;B%LydnBM49M3b}xY_=3sAhe@E z!^U})YRX}V?Ma?7Z$)PVVtDKFsj9lgw(anVOD@dkc4f-{jkx>PZ);asuqfAbfXP&I ze?#)0hqy?GVk8KF^sp$2GBmg~rVyLhkKe*~DoxGKCNop=nHzs6kx)M4mZwlwx$^OO zHi{#i{!|oPx_<~y^5lVzd9+)?!889lM$z$tP$!Zi5WI!s`eTx#JC~jShC3seCdKCf z(VI||_w#63ct_0hYg6ZS!d(3q!(4Oz_ub+t*uw)m)fql9T~l3#L3MPeV}di{`5EZg zXY!;Qrb3#(SbhvY$oj^FsuX>TuKIHoKPpjQM*p z++HJyego?UnPjVHt6pYpb#<^liy91V}a6qfyPp@fw- z=8hb9;RXJ6yl4o9@j{B9 z@0p6rM~oL}l@1#_RsC?eCH7`AHi!y{*&A_#2mqkY3_eu`sSghWV%~at(j_PoBPe?$W&%!ygwZ8iZ- zT0KRz&9XV$E$v(S{tFv8z@UdKlKH?fQWUMMEb8#q)|tYW=P=-`*Yk_Jt7c-zq5HnK zyGlnGKQjikWZxNAxMRMa@6tft;JDHSev5Xj#*VntD;-7vKHmz`BgyP3W;RqYI*t>} z4fV7ELf$26Xmco1KFz_W8GK(S=<1}e@ zV-r{M?LSJ+9(ctWKDpA-@#RaW9{HRM461X|Pt2o%UJ%<**EetbfI%6jH|c*?ssChv zI_b+LWRx`U>Oz?i9|vID!v7!avq@dmz37(^di`=BQ`W?Ge8-rNAzet&{|@2o;WaBw zA$rkwi|Er)^|B1D%Zl0ea9(z>^Wl63v69d!(r2vNFm!Rr^T^n0sWEB2+m_`IvYHZ|sD_j)wu;C3_yU;iz>EkI8~`UA@Gnhv}LOczh*J0D)AiM*es#0ki1Dj&}ZuBS&+qHI)Wsbu2=}f6tJrp z`@0;KZSA19{sQoAluiN|>!{^$*J0|Xj@%IQvPQcn>s6c{gDbGxeF@1Dgz@CwXPH-N z4Abl#Os_EKWrh^<-F`)k-jd%(0qCmUdVMKp7Xfy{UA>b>(w)Fc%?Gk3u}J61KKNyy zk4cCSOYu79)aPJp%qy!%H*uK`Dy7jh!+F`Rln_JlqYmU|NiE^o%D0;qOA|(lcsd<9 zqCP4pCYIav`@y|MMCijpc7^bbzQQc^!zC`FN>Sg>odnOMs(06NuZcM_H3 z+uFj^sJ8f?#xVXZ?Qi0*I0AKio+z-^QO{Y=A(G%1^>JvubXjQOijl27nKe44NVpEY))|BXDG5v zYU0E@+`8QIljU>u{G8h%3iHWqAC0#^PvCBy+OKC$;DO;N*I8SpIIFAWmTGBYO+(;< zU|Fiv_{l;9d(;3m%T@6G%I$r&i; zFjKF-Czd9a3`S&$ph^9yqTs#OuJ7W_g4EK^qg_f;TzLIv3}g&xGz(IpU=v)^j1g21 z-ULEpJP)QpJoP}Q_P?)JYk>Z-9VCqlPEjEVZZW8MCr_P_PaC9qJ1B-olkfth%WS)- z=qy?fdHVUF&%i4kS|PlZZ{sE2?wS{uKY{W-ih$Ray?=g_<)0aMXgpe=^xz>S<9s=| z)v!CWeGdu9b5~8tv|h5sxlKZb*(?lQ7(#6zG!lj+PD!YqZmdM3OSDp+u-yTN@ymRO zKX0e3QaP^#@0}#^?sR7CAkBeyyz}8H?;Ac_RNRh?7|DwzFSie-BN2+Aq9X&lgs)b7 zcjb-SQ8tw{mtt2DgOcA69Lm8QhR9}aK;(JgJaFUrJqZD0^g#8`tu)YT)smN`0KIo0 zb1j)7zxlK+7*!pfpkQMImP`%8{XZMlN9TfAD+UWQ%HucA%XW}Zru=5pc0ayh(vbw_ zT}SLxQ9S6l`l{IxDeRxfu3>4T=lW&WbN5GYycB`l%zGw27eY_VE#ieol7(K> zjTHw6oc<=L`G&7CyIuxpL&`HopVqSl=jh(@SR=aYrLBRN%dvFlanXZldUycnu$s?9 z5v?)84uQ;&NHu7j9#bgStOQ!ztvtz@5uAML~IJ5x7PwoxvP2Wyo^2tL~Y!-ED zjKIFlD+WkiP%`se`hPjTQcvB%z*5TEhcC7dU%FK8rH~Ipt&|r^Nv)m&EI*=J@)Pd) zsIFOv0PKDc-`#xkHPf=l0kL;sMFC%RmQ(k`Y*?Cr>PGme58rHLX~4OwdTOh;yZ9VQ~=G z+BB39CL2$eE9_6 zckp+9wjci)jY9(5|8k_$Dt5q@!>}LR}dddA&wr_QMxXxJorVao40=|=ZBKtxb0YU zp&dZa20FcANo?~pw*>o21hq7DCO9wTVg7pe1=C&WT%`+diE~!kZ;4nn?;TFcdcJRI z9QqnGONl@7)y{l+=|~OwBXviuW+c#vmFri0x+9tXzVAtMvTnn9GX-Y#{0yxKJX0`E zwTTb%H_m_4L;>$8uj_AWA(fb0eo}&En7n?@}KVU zd&9$%OPG}=l6t|{3nOb(crC^+49j-z@=PtD8TK{%b0q0c;cOCQ6_1(ym%i><#^QTB z;00~o_s`Dr&S^sxP^`K4h{88`^>3t%DI^55JB>U4OHDq)r2-BFBt;Nc89Q@qV%xw$ z_lIUn&VzG9!D*aa?Qut+LZ*L?;y$oh{{$cD%S}HqqyoHb@dm zxc9~;%H#R*id5^2hV=kxtp=nXuzQJyc;BVY9hVCjRlq;*<@0lR1|Uz?x7VNB0fL~& z%ds&u;q+H+F{ZmcS`JoSt-ozCothh~p?k)X5ZrBJ0%%Y57HJiiD)5>Q!7llAwy?`2 zW9pgjT&R@itVWKdw+~1QX{!f|fY4$J=LH5kvp~oG@WT)J-iAfT{;}jv38%gd{V?5t zw#}icZ1>nKQrItg5QDZ<&9ps5i>7vSIMF{Pg(WYpeG~hHl zSr+Omxr1$x8q+mNfl$uPl#1yfXV924Nq5!|XnRw#CR7yWeHt+OJ`twJgMV?@Kah-D z7Wg9p0w3ds0~+4IEy_sdoj0pfQCMaXw8OzTHgeFC<|L|4;49_>z%v@_HsF<2q3eKj zt*qR*0>bVYNq=$mce)!MCV?lly(-v@80=?e`_M@heax!@f}Q%u?q>2rqlyYn`A7no z1XANb%Cn9j0k=EQ-GDLb8?a9MG`Au50!`M3*giN!U8FK8v;t$_IN8=Px*79|Yy^ZN ze#A0O5p3Q9L2}9wx@8*wTe3{XkL%I%s^R-f({WqQ^KMKjm4i5tam)Du*~3{jGCC(lQCj+*CPt>p2)Fh9ql%P%%M&SJ?` z$G=~h-<(7GX;V5*@31N!<8~0JweMlmSDGnE(CK-T!z{DubWHUhpXa-}XDgTIhdq^G zjI&9aiB+9pKXLJLs~5NbcEZ1JwveCWCJQ0UWi<2n|Id0uC)<^>%zko8loJZpil8V3x1Te+>Na`~mRsx6CsvLSGzy2M z1L|*z)XncpUqb~phWRLpx%BpVZ+G&-dsqT?-CbV`NPL#`{^!u-cK$)MU?#8REp#y- z)5524UxNB(Pv7Oe!el@eO!C~v=U`#uUs_RY|HcWVvd>>bU04Y8(A*EDo!-?(bGvbO zRi1jktFy9nZqcf$SKH|6GuzyxOW`JBB0Xt*iMGRpw)2v=Tscc8Jrue$q(4p^>5)zp zFIw2!58$hqlvli2PRiFV9rN}!cem|sjLS@BcYE8v-N9xnChd#N&Lz^96`)Wr`LUEN zqdzl2jn*l3d65{1+TLN?vr;AzQv5JhlQs|Cz^@)t-M=`emjF6}d;L4?8RgS4l&^;xx4J_WD9H*Q01PeGgv6qU2S*6umoYF zCYAcH1G#5|G_rv#D>&SKzC)Hnol7?c==O?H0(wX(Gyp|;*qSFT#Zms<8ig>dScXrB5lo zVE-OUv7n+F#hn!v*4M(oyDsW+2s}@emCaBrx%IGrUObKvU zWp%E8FDGa#>CvW%YVfb>kVU~3-Z-4R5i>a~&S5ZGM6k>X)A~ zB12`tXB*~pfB3?zjL6|J(?MtTbDue)`TTlD)koGGMVtq$DXU#3z!=i~g?6cmXIawT zV*9!h-kg8(&JKD~i{rkGY*5{yGm8rhASo^+hd96ZTFw9tKoW5U`IssRL?$_K%q`^x zm&^e#97Mr4JIlw;;tg^QQgF7;JD7At2)TNWPT8f%UT}Zs?MNlhr*2`6_NB*^r>Fj> zpKV2tZ~uH*&(n5=gi2+lp4M3BY$`PPFc%s|T-{~dovijhuL`>9)>vVSc165UhqRZW%}MF`&C)#K=TmH*my5Q)mxA^# z^DdV4r|egM@%_{91Oq&vFSS*R%BciMpaG~-^SEUj{rLj$2$seskVes+wbTD1G?jf` zNOEx9cDo)1e$6OeCp{d#FUn1I+HA(O(g3VXlq#@*S-#<-s5*0ZHcm~DU8LJu8y!h; z85TKeZ$0e~Y}ZgQ@5xi3SP}6$Ib4Xc_vzrkMNs45%?r}gk#I^TMKwQ8V_0ox(e`1= z-L;dAisXnkhADR-qBe(-=2!2?K;A6x{{g9)H{RUWs>U+V=hp(yr! zKC&uEb97P_(`#c%_4YqRJT5m#xU0!7Omao)wvX*u-oX$2iG_`Ae-x3P`fPwP^j(>` zF-zNXX##=gCpcMNdH!STtJQ-1jUY_x9V1OX-Sn|GL@*@=a*p)=ElA>@Qn~@RT~#ux z=@$nh3(5b%I*+Ln4?8{v&qbr@#1OQ%3kC!hlP}F zDM)WNYX70#vWvx+kEdfa-q;s`7wDk2lIkQZEmpEwRC7p=gYVgdFU6UF?$rFQ0?uc0 zOEK-9CJo%}4MLAqeh(!NC!=N&|ixfOyLASMi3KhVx?<#*j(Vp;lqJO3U!>#TO1BF!muYl;fi+3TgT z{gs|38kd)dg*r?}xlJg2{mmYIkTj#Fr8#D?i9KU#;gr5tBM6Obg1vUNbdyBGYz0jC zm&~__u{Vvo9c3do@XkvkRpw;tubvc`viYLL)8fE*ZS}Z#0i~4%+^4iyDZk5#RgGJN z6@4N6(%9RPKIGc!4h%?E!gZaA7>5Y3W>G>iXu>rNx|7`NAV5=p*l z3Apkj8;Fh}P7kZ=9-<&|<>^fzFA{F?=@Kg`OU*vIDAAgJErdz!vA**V1q|v|3fZuE zkg|W#qOCMI&sfd6pYrx&mR=xmCA2%5!PqkkYRB$HK+Eu>ow~bUWe#DYLvNPIrZ4=( z84Fff68pd4(TGx)-w*xl;yKdHdbhgFzxkMa59&&~lY@u^*Z!z>w-;yZ*sX?WLDz8d zF|f;W(In3-&-01?(iY!!c#MUY@(H^cH*m1@^Sr%Z0@!bgWfv_BsKN%1o%Lh z%FCk`B1U-xeSd>Kp8I|iwM78k4=l+h0&dd)8|=CIjehfY)-^G2@HVH z7oA$rhC4#8_xqc~qX2wTPwnzrXz1k!b(c#CBlm~abQ7eyug3jZB4ArXnO(UB6WdEO zie0b@$SKffL4!kmWu$tVXD<4uLqJ`iv5Ea;>H4*gbPBV%n0>_H2e8-8QsMTDm7s*4 z`Ny~srg9nNn(W8}3B14kNuiD#q?}-46r;t{;{y_w@ODyySe}D{mUoFtUX0S^!7?Nd zn&)$u&qWm{w+&aw25o&`yi|7m@{=iLzihAJx}}ICX#YO)I9-4CEV9GN%`yU_@`1c0 zkga63^p_v47hpQzrdr`^0%wwTK(vIB(mW5P&;D+X=b^jnQN6y!vtMQPy=5219X?6u zXp4a-;Hjx9E!7IDD9)og4CNBwZT=bFH;Htm|eV^OL6?tXr*dm zjQ<3@=kT{-jlWJe5&7hUz6+!bx4WV$vxh`63vQM%5HV&Zc~+0nFGrXmnppG>iz1Gt}IqyawFd&Ltd+ig!!iI2d1!) zV|wemfc5!b^B1C*y?((M-4SG>EZ_jW^Mg(X zyS3YqnmHxy_PyUQ_m64YVT?m-!QPdYE>E2p`aC)6+&aB)junJbgjh+glXuSS+LvoY zmP_F~4J|Rk_ul2VwEah*OG*-e^_(j0^erQ-Gpd&RuDA7e0hBccBCWZ)2IYiT_2+Nk z-`dv{;+-hg#Y?+9VIgqg{dM*)w{4nEjb^BZ>j309#Z+UNzx+v!vJ#mjxRHN{md1%; zoDLq}{yQ&08*V7kdZ~bJ+IKV`6s88;Vici8~b^7#8X9~Hs-x( zd%&9^I(P0tv$wy&gTihXw7&jH$l6SA$U3s=vIQHuM?#C2y!c2OXX#Fq?Sf?o>hRKl zQqB+mcJfxrqpWGhNDbU%!nQ+iFg2#L(Dx0_GbKmj-gyIH;L7!g5{IhWNdo>oqs#Uv z{kmACW6#8(xn!PcWjb5m6Sy~!3?_w@Po&+wVAL4Cu`)!2DbAit7SRSepEbi#NC^Xk z2&rOyrrVTn>g5ow4Q$i2-UYS|2^y$cTz3pYj#;)WF#gg^&%KKiB->f zU|Mq?q}NFc5aMFonAMzph%Zfb>;9!EVa1QXPia`o6>?Qaz2?{Ni+tqkyJou(c>8Tc zf94Pp3%jlZkKC&HJ2zG5YWk_L+IL|5MtDeggNnZid2w}D(F_~YiG4(7c^_a`q+*e} zNTz_Ktls*cEx9r$q7@nT`J1`)9Pkb&V+XGV;}LcEN#+kXix1n}UNxTFFipep$2=8) zv0CH1W6>E5ultl_D?PfZ!~SVpmMsh8GqP-34cO{Ej&CO>+UbYrb4g-hk~?xPeD~bj z9+PQ*mP}H!`{O`-L%ly)&fzqpqPs;lVcQ$=?Kmr#K}DvdKagxF8P_TZtJ%q;prATu z@en5n7|+){9vpGb;_iww?hbAL*x$QQrT6 zAXf1X%-*-1%L9SP-OJnTQ}K@0ET7dW>D3#Qf9*N(Zdo?lPj|anhBMpte}Dfx6mO8e zMit$<0Y3zEG(4E6v>9wD&y|yYhWvI*juAP?&x8wAT0H%?Zo2^eS+SB-10#3|BPiH#5Ul^u}`bG{Ws(;)UQ;~ML-Oo$dwm#g8Mzh1FjYPbv`L8<8sz>xI z6&SL&i%iQzTC<<+x>&`tGE4g(eERs%B9R*m6i;eHI7JUu7I!?JTNk5(y)ibs%GNfC za`N20^3i+9PBo_$$&2Ah3x;UIEny=-8_2eVawgKYpN(mRP&%9@o)tLWG2am6E8EnV zGz5xWA8xZtp_fiA-O+*OC@mO||1sZ-wA%W6xX65X&(VwfssSrtn(6VUwiK`!JoVyj z1J<|$RK=$OYeD%oL^OBSITaSp9y^W+UKt6(lLkF(5e!aD!|2?_7C(mB-(!4cI+a$` z^w4jyLc)zO%bFm6aCem9iY7$-w;xDO#l3uM1B0CPU2*ZXWdUKNaKMm)TR(7hb79I- z;?kCnrb<~27nw&s!d1bh;&im0bD#%3M14xZfVWCv5SaH*PyYWn>yWo9T@-h7Lcyo` z*n!#PCqzj6%~WELYj8f^@`bc06H^Q0&8BQ&bR)CDd&03eas^iq9Zl-lkc9Dkq)B-6x^3fi;$TSrOFW#r z;r~l%S~TDHITTu2%YIQZn0|fZ|N0O*$P(4^H+xy){L0`->a$33ooA_w zuJDCBrit432@$81_VgcS{C?{fUpROXzRq!6VHH0Tw||$Xcj!3TmkW46^7pgEm|y%# zOq)RaB?uH7ed1fx`mH`VkF~1hzR&BCh!{rpCxDH!pM6mO=xRymfzlxW;v)n~lFJLa zqZmF7O90eic^_wxonGlz)GKVCJFC?#Xig`f#^PC%HOS-5ndPE+n)73slHc640@VAJ z$~8L9GG87s2%YQECX{&W7)s^Iv+#GA$!Q0Y9f=kv4YgkfhlV@bQ?G9HI7h=XJ={#J z8rY2f!A^QlPDfrEi~wV!|9PbQ{WDWnm~s2Um~Y3erQZH(MQ%;sQ5=tgjv ztK}xJaY90JZFKHRLcxl(+fZF?okE6A*r6XXA98evsY0;;Dxs}IfJ|M(9N5Hy%A z(>|Ryqc!uqG37rIMSuW&z!zThnNf<=GN%d_b4yX&!o$E$ATnhCH)vK4#p|$uMz;bG zAkJ;7dmluHx*ps#xUBM4Yw^M1Up%hA#C?LqxOSdPKr?XfSS6KTruYEwp2n(2eZwm= zK7Lr$R)1QQaM^7BWU{`D#M?_*K-WJnWti}`q%5Ij`7p@mwTa$Tl@ju=L(2JqlQFIQ z^Y%dbmO7`j1Ch4t6i)|$omfti7V5cnQz!Jx?q2;DHLUYsdBwcL#k9Kkx{MBhIc=6V z+2%whR)3U>{cdM(KjOk=**}BeJ<7mxTR+I0-#H3{WqS5d^hbx9Y-z(E;LmlW@L!QI zCxp#WIM+ zx(T%vhH0o9q!OSqM~4GL2v7M4F@Cg(FVjG#OIB2Hk@Spo+O>xF@OO{0nTVM@yiL0) zy@gg>?KNdWFgT+?Q)hZf`fN$8+$Wt=c?#}x<$3QGzYR&fjIZ?jIXme2f4*8w`G;kX zUX^qa-7^PGliE|baSE?Q(j#zHXe|2g8%V(a2=0I59Zm7-5;>sFr zWZo@zYotw|R85~qW~0^liE_ee#54GPZM>e2 zJ^zqjG>w^jYsH=)CX3RtCuc*MKMoALYQPva{g%NHF9aITyaY&BxkQJ)$NICl6VUK+ zvU9vzq~Ysj9Hk2M^H}-;yf7KRywp(*Si69LH~VjFhW%WmrrTl|msk?e5bYO_;LkrG zL=fz+*q%vC9QB|V-G;RgU(O^-ASgeFhB=#Uv}8`FG`!aI8e^?J>Fwxyn7^zp|Ek2* zt^B&=WqF@5TeFSCRn^&ql2ahW)-yBqB9NBaVy5q~!r1L@Y_)@B8}mIs1(*11ZQz3& z)87$i>I}I1s*Ad62daPiMKGozEJzU>H#;c}?!exNUZoOBPMavcTLYdZX#fR`ry4{x zexZxXLzS4wHox_Q^VYt=uS;|w+d`5WPJz7*KzO&Lxs?RuE_1Z;uuH~AM^-oEv1&)q zp)&_ZMRWtt2qosyRQFZMrfP${c~1sP@VMAu~EKXz1fDYC*}Zvu+2?r*17U>1HPwkZCnA?CGZG zjo$8sp#4t_=4Xubi%t?`x*?PFE;$Mp1YV9w)Si789t$#bc}0mNM`!IYw&(dhe#L)B z2her=>-}-R@t5rwre3Y9^N(q3(vE_Ai57OrM}4=*Y7(d~z*KD3@F$r#HX$^A(&46H^*j|EdoOK<8C%Ai zC)rUy|77OyEbBu0XUDr_7r)1OW23-$bfxQ2=Q-%E0?u*zStb45Lu>%K1LMwiuPdLN zAJgY`Ba@VEddWjnLtzsgym0FDlLVeCUw?-aT2~xjS^}*p=KW7Az-v8Kr-23@*S-@) zlNqhS{ikrBzoAprf!CTPy3zVVoc)dl&{`je)6gxYQzKFzpY(+Ttl~{#Q30kH0FF(E zJrK(Z=HqyWO91%&OPJJvcan`;6G zij1yj<`wHu#(JhrJ{*e-okz_Y@0%@wiJr1KI`m1-U|^oZbwG!oR^X`lI++-pm5sKOX>>WPIGPav z3scnWpIxC2v7+L!=bY1dS@Kf5S4-|1?*}nBh#JHgCI&wVy6NoTAc^iFRU}NGFPmF~ z4wP__FG?PxZ^LaZx0VITcQOlRLkC>I8$6R&BcZ~S@=izBy9_Sh;IHpzN%+eWez4h3 zKHk1QXZWN#&M48~V!q?#D*1mEyGN-hUAEHaZa#YvgFU#S4@Iw2DZeYJg`Gnmc*;EZ z04^qC6L#=F=}@C__L2$Qo7WWMum5gkTGixPjh@N_=;YfQi*xT5NVY|1sN|u%G zQJN%|pEcHTrC=UOvkC-OXjSShC_(X0Vu4=r3AS!JNe5@=(wEpL^E(J4;WoG!@~{(2 zc<-y1V-l4A-o@(Vo}baA*#H*h7I1ee?Q6=jm-VC6Jn+l<#*X9~!|fD3kSQ~@i>Jv~ zYo#RxFr1RtWSVW=RDq{K@^oHwbzPo|lp0&>0_Iq$BtP^zsRv$d86WmT)kwH~*Qa=x z9>)vwDmWGs5|oAp4{CckFH{Q7ICkFsIf6H?#^Q%MFEgnrE~IUr^g9ZMd~otCM<|tk z)fW!8N;f!F?hSV@)m(gV(x!LXe)C_`y+dD9+;>^2A~Nw`yb2MEkfr8|h}118aa*uS zLDj&$T8l7gK^D&2mIqtl?B>*?(Xq3iMFVJ$deiQbd_~O{9Ne$AiGt|?h8^-G+(^gJiVLFM)X8jnJ!D3G7) ziI9f`sUyj(nlP0ymkgfMAyW$aWq|dau1cT z>^sjfbZpcP8rj!9@sOns_IEdkK^J2xzh9SOnfsdf!_wHBRo=85^M-BH;|I*0H|wkk zkc!ht2@>N-w}v_A>iks^vmmnvWP3yfeMJ|*o4$CSy#rj^*tovw-vlbkEL_A!#S(#M zHyZ12CEYC`Ohym=W}Yf>WPT1Uiu!jWoGnQrNis`Ja?O#Kf#Bgua(;i&5Kc@jVtLOO z&vk-4`UUHccYnBP?@#VV&Ycr{Yw_6Blc5@ugBtEMhx!w7dr!o3az1{alDF|H_@lmn zd1GHRF~|HytP1Usc5_Ru79$v4s?t!Ou){K2kP^eBN$pU++oL_q+gfHF%X6J~TE*el zoCTRkrZ8uL+z!ungmW*kKaB3fwXMx-+KG@oR}kZlurHQ#PvlGhDOD#n-1?X-~2&EXW)gE@tj+&JJFNW!gs_WUmw#O z_l*7O#eBWn48nBsJ%}~t*To0d2S4Z(SkC;d5$|B~VvNQT`n8B-!6uKCSA0frY%(=? zVn_IX6KT-@Jfm!K3bH>@r)wYYfB9CXktC_APhi#({F6DwdDZ^Dde-e!{J~N)_^ekX z@l}%`C!NKRUx-z1du73h&J2+~5OUld2WG9E z(+rM!%dm3QTzs7^9GOd0?Wp$h3dT|yfM)lA?l^kYGd6Jof3cE#dt9=2frle z_FC=?(y!7K-_f|c3D+b0?(!t?A(MM3b#CmC?aw=+r~NDsU{O>NV~0VPX;-1k9kkrn zxg+5L|F;&vbskIGCp?lNx%hni#CI#}EZs$cruXdGYFNxfYgRoxyg?pOlso{1dltHz zTkc9~D%HPZq8zNNkPbK6&?z+1#a!nG(&>5>l~|IpuOgD#*B>II_Svd~b%Rnp?$4B@L4V2ZWa zg5u*g@t)u2ABFDSzbCu}86N1mI;N~E++D&t8-8;JK+GYXmR%reER+)En}6Ry zTP?}VmYA<*0iR0j_NE(e%`Z~ydByR!{ryvd>7um+=L!?Z`qZODFi;~+MR%$>X6Vpg zu|ewn$>ZGH4_@3^##}4UChNHzB%6X_J%g4tTa~`CQND#_j24mpAa<|Pm}8m1^38Zl zxCn`cd1gBqmk6!&to(|gDtUo&@*R=xBZUg zHIU=so(=IUAl`;^@?qAx85p8(=C=}Qho}1fWw$x0=8o3wN_Y`D-X}%ZH!?g!2|eM5 z_D-%ATBqMVZ$&!qh61q1twla1TE701o^M(xucvomFyxj0BT@6ze$Cr`k}1zfvMwU? zCpqVcRVpio*;55o{dwE1L$;2eYP#%kiQ!t{ArhgZ*ZnREL}+|b;GC^vxb!StQC7To3muIe>j70!=V>4DM1w%>TwKk$!t7^_X<9b1pT-`EeX z#JjmE^MWiv5#Lp8=r6x%1kEHP|etNE({InzFENEI;C zF7x&c3?CL^n@L#g7@wE&xVD*Rd2mCq4T!ISs%EYtGXyQS}E^TX?BK#$JFmR!!5t zG6ebFGh9Uk{`AWZRyN;4YHDXW7_6+DPR-KW=2FeY!Sj(nDoZ~-z6d_JtMGUe5cM|l z&+)>$zLv)`#~FzV-^&^2j`5$gvRd#3E9QxVTLXxW#Hp&2k8mlE8*@$#kD zI9kgiph)BkR^E?LkabqNNJL1n(=Prnw0`pDc_htZi-2@lk!=QHpMYahEs;~CM8hZN=&OSUHa-qh49_=N(KO=?!n_y*iiwsB>DMPTUc0){T5vmL~X5- zqB7Hr-^;dzf!%G+B@=EQaJAeE4xaZ;0O^-HPD+xLeQQb9+H}i3Ol$k`xBiiB%s8d_ z9Q9^#P`jRJ*P`3j>BIE7=r@iJ8~&A6vgmin+k7k!ko$)=G8<6<*d%brE|Nh#?|7ObFap97-E;?YEeL{8orbGGfRa@ z1j7NJ^W}>VgzPWgy5nXmZobm?YDSqN)+dd+-S*-@syL)}H&AJ7L%GRIzUXbFEwkcbu8*K8 zbWXHtw@T>+eZ0qyXps7C zphF9w3n9vsO+;N(og<-XkX9i7I#~91w@kd$?qiMTcS=;(j6op;B$P>9QG`q~!K11i zSeoZLC(mx4Yo_==|Ir}}A!H1$*oL~V8E)W3{7l>1kzGIj>`86`Mh{UC{P>ZtN^leN z@^Rvz^DvzvF`7c@&*;;xsOMin?0OVjVt+a83b}X8Kjy^L?^P%bnsT1zw(M~k;v6~l zCA;FEE~p7?haP3Pr+dew#(Lc3s&GR0(!^8zC=LEa)^11I914OFq^C>qHop|60jzcd z0fS}?DN=(bfKP9Uit^>MKuY%x@dAxV1z#RKT~MweOyn@UkM~%ZyMg;;ibIgqU+G7Y z3`s|idHnY{NJRW+B_GaNF>Y==T}{mbYa!Xu*Z4M;7XM|ZtQ=k1JA9`bLkvmH|``F_n zHJQJT!TWHHJ`(XKj*1oHeN`N?WIfX1>OaBI=7EAa@;};~N>QH_B=PdERafPJnm-gL zX|r&hy53!c4JQRJ8qZV`4bHmU>k9KMHI86<%-e)fQ8TVQ7gAyJoZ|fx2H6l(wt5!Ku)7}UE~UL1qV{ir3mv>{36aH0P(g`p{@eYV;Z_GOr;t&3M@NXug2Ue6BV(rNiT*$wjZ!5v9Wa@ZG!&H$mE%L2N=!NGKU z%tswEAJTi5axIjX4{~VkG4GT_)MP&40ka^4JE*M%CFcz^sR`EHWS4oaUja*tr5(98 z28)1Pfebw>!H`p80+%Byg&SQHpcWX+t9C#uDhn%=G3cKCPi4F$u9aF zHL?j+Hu1b(oZ1?IWl4x(H+(}Whq^UgS5|KjvHc`Usu8wJTcztt!G6D4j#UY`&0jJR z$rmjgK-su1ZzS)vxNrP0awZ292A6vaK|MmXTCnFsm zO)o@b@S_R6G4#(G&3o-)=3H@1a`#%Cojh?^FWsuwuU4gn%vl;}!;!~t9|;5m&Z|65eb?voa1-e`ZEIpPKwr2) zdPYW5x#_<}bQRpkJaCU*6%PsPR-s4|vDSLRP+^zh&=Foc2SAv8_?UUVPWT3ltM#W>dU`JMkdB6YNpbeZUp5M(d z^hVlM$7b@znvocWw<(yb$q)6K?f&X}lv(!fHoi9QPg9iRN@7-$eG9H2;C)|8Q5JE^ zXt^O984;$$70}f^Bli#W%y_}j^xpKZlI(^32CUP8o@C-@B8Kjw3Qfe12uB(uc^E<~ z#3YN~st5D-&EeTYr!MJVRItn(zp0bQUAJ5f!}%MjvgQ4AR~gTW|Wwso`Y?Idk6M7tOu+bSNmz zJp3U+Nm_fZN2>WM#B_JhNR-4&=q7}|qk>~x_YTbWrE4~M#mu-?P&k4n{_=NfvY=85VDlBMTzDSS3kNh5##^-lG*jDVs_TSte>PO<@ z4})hva%MdCP86W5a=rg(IpFH#b-msje#J_m&Ip$Ekvva>ozA`4XV7|TD&Xm(=SsjU z>bJT><`l^~!JTVR9>T5UA61vye9@4$TgkN6Gzeu|W}Ijq8Lbv0(n9=t zbUOWCu(9}gB0Kvn1LH5*0{{S}e`=&rEwdfkYs$Ng!+F;d` z=vvs8GD8YW>~=8j>SA-nBXonrRr6TOSehJ%vpLv0sl^q9-C-^mPywPgUZ{C)IbPnf z4bgbnMi=Ypc`dKL-LTpphdExJea`mCDwruX)xfhD#<;hvbz3#-0b)@KHk`kC zG}7f#tnkHh?@uKB&shJB_djF0xd-Qa-rn}E-t=W6=>N*DjnZ%PeZ+o@aVKbg)a`j| zWCR~u$igmsUvs(J8`SH&ES6#2k(<$FK(+bLJRPQj;uDQ8ZiW@*)EK`nVOln&E5pGO zi$uS#Q)yJ8Jhdjut;-B+aIGlXm|p zw(@r>*D|U5>FlQ{O_Lt)=)EfBj~oLXx``_ycobhvp~;Dpe1vGs{U3pTTaFU+--KuO zOymj9k^hIQuMTP>?7Iybq{V5m;O@{;+#QO$28R}RcPQ>!TuOoBP~4$tad(2dTkxB{ z?|0|Q?9Bd=nVn50JNumHobx+}&M>P6X|=;f7LD?rUiWFfppxIfpj|Fp0n>?V+?snH z5lK!$xTLZ-tW$Je1}6bU9V60`dQVL6la}6;*!Rc{gCOoZ*|d#$u;*F}V7e5E(lNie zzBiE(AQ*v*bmVki#FG*}s!$k$57Mp7_r^LiM~A2VEkJxcwG z@Ta8+!WsEnMy*nO%Kmh$Hr+2K`QWH&SweOY4}t6qGaz zStsgpcr*kRqu1p-MYQc|zJ;Hia`=k1q%T8cz5^ZLl-F?CQn~Q_t{!Y5{inJG!v9h_ zAdJsn?XG|c$GJH;L4(3$pp3Q&K9K}w*>>eh98XvfpfTrfnW3xLiRCzfM(Lpt^Fx^h zJ~fYt%E~b6Cmqo$oHq#-P;J0Sklk7f6Zo^cgTp#&ofb65W2XDLb+z<)?jPbxaRPv) z+a~bWcS|BuH;3B)`bGt$+i7Y^N9x@>BWdb~Ip(9=C6WHkrRtZUP)kGm?)C7n{ecw4 zZqiuuMOPY+`TF{8hH$rU1BsrCoyqZ_?o-9NEi7-Rn>NrWEfsGZPnq2M0@ru%#VY}!7{$-`6B7i)#D|%N_rqBI;o2+Ey7`=x=96r zYR_$T|ERUg_-8n!joe68N`HLWm53(|HZp#j4lBPhvp?>HjK2v%8Y($1%M@Hv`4hwU z8;PJj;X9IW*iW;Q*K55eT-^(((t_`(2T9oEPi%eF>$=rcWt5FU0qx=e!%0KwLGLZRGq>)*3yqKxvQw6Bm>3%uko9* z22*7TbqiU58}1eRS}q{y;k5nnU86glh_pbpeKA~g%Q&fPl)*5OYz=!e+<>6~_3KtU zWOtO0sm)F;djEQF?=x63OkPTU_Tr4eeWUw%*ON~O;+M*l2!Y?upqaY3J6R*rZ{^@p z8jzk3n^=cgzBUBC5Fis+HTg(4-+nIce%$Zae;eSIptN_exC^KOcb!k*{>8VpOBv5u zk<8hvG!R7ImJw)>&3sHB?%5#u z!k9C(zx_q3+7X2#lB5Y}#nFjzO@qt?`jk04ITT znQn*NoI2inz(W?9*g#w&b;R6aujo!iI)2s}+tifD1(-rYrd^32?*prg+=k-RsJxH+ z3dcuz-w1m+TW9W6H?aYz)>PHZJ6r)$1<91TSVzxIK30GbSF2Nm)Z}o$ZF$PGyq~+M zU&l$UpI|^Y{4aIIkNzyR-!Jaq=yzRc_VyTY($T#zP5+RglXWi@0SQZ8;0BW#^@v=a}fl`@bxM zMlT!=GszNlaDRBu!sd9whw`Z@3tWN~%dz{dTl1r=t~|?WQ05(vi^#;w=$X=R0$(Hf zn*oge4DsJ){_v4;x_Bg@VE+?d$p3Xz<6&rD#*-XMW1eWm+tvjQQzzaMd&rnN>pAQh z2J_Ai{1||^&>BBak9X9HJYaU*Eq(5}Q?2Y1+ULcSU2Ab>^B@oVgmI(d+5&VW32U?6 zX|s5EgZIXZIhJnqH*+pPckdi07%y^OuEBaXOm6)Jp1roE9jx0@I?DJQQmUfF3@WtWE-uDfm%XZkC7u~KU{$#m1?`^;Rc{FwhNmn zuBK}+R6pDDe(IWhUg0Hm|LZzDEFV+>A9t$0K{T2G5H6@LHxw8d9pdOH=%tbG^}%r> zSW{*f&l<+grTCEWJ~le+VH7~*h*-5H;Idw`LuhrjAK!){Y6^{RTC;y;7Y0V2^&>9q zp!iEQZu%i1)xFr>Wv^GVU?`J&$poD5;agHj!QWV6__|!WD3_f5D#PoIf7uMT1PZ_F z=uqi%*Dg#Dh93J}*k74SLj&V&V|h~h38Am?NXrd2swUUv4yLbq?uQk`p8&M(M;aj& z(E31YD{ejwEwmpv%JutgPJ7_tcjv{yKsO+<27&wtBjF?fk|FXfyhx=j1GW|Yvsks> zX1aAsMv{(eDeW&lcRSQM)J{|A3-802TzSzgUCgpJ>gW2l#l0T2)AuoF$Yopfi){V@ zH4sTmjD!1=EvFc(Dnv7J~#a*d9Fln;<)I<8zAqv+9Y;afpE7MPa6o`&;_%J6-u(=Ii=Gx>m6R3 zxh2hV0R+o1y4IZOi*az1aq~MzP_7i`Qy==zr0lry$pqX3C<8!sd{RdoL}su)DaPlg zZtqaj*?02|Yd_>FjIZn(`3WIs?hSBQULLWej)|wR8EyiAC}J245ILQjm1o2C2zODn zDN&z|$70%XRiXwnj4|(O=y|t38RRR%l0w5NsNyExZYBRblS9IqU=lGtHqYRSk@Ghf z00hF5;LPS;UO6+r=lIQSIsR=_i`fBiJ;cL7Yvcb_x5T!lxoZ4fnYH6yAh4sd&#~8j z9tT)pjsA(DD-j84_(biP6~pK)_?#QzYa+`ssxY>5iw;0`o0*o9xo{GDC?`DPkFGRs zHrjpmrbOXKfXV_NeDc#ao#p5|ge(R*=t_jEli$-C^wJ}DkUQ)whKH_}QE^`$KvPcv zc8TT5S8KoCbnY%y>SS*ox)UG%K$qKMXk?j145m8r_tdG`QGXv9w=F=aCg_RrhX+C$ zIXIGD7xw5k78ZBWpUt*-vsvsn^Sm|ic$b54#lwCyntPY>3VTU^-w43XSy8@reL^l= zmjn;oU7ZQSM1BFFCMs}_VL`^JS3lt!1s?Y|k&GBVv1ZXXf1rM+{gZ}{9{kEUAD*_4 z;X=JnXIHTEO*Jil|A8ZcsL(-=4PR3J->vwTGdWR6zi700`VXrh4eI>FHpL5n@8U!) zGR2T?iy)mTdpSCy83mLwMHn?5xHdiw%PjvRn1*0Bl#~ zNX{sq-usj=!Na9tBxC$OThcIew^TotTfW(l#s}C_Q`!ve>QQMa3AsS`oh()JjMggLm@{26dsd4FY_2z`)E+muAKABa`#n?Dm z9>{;-aSZOGfZClf2fp=xM12rObxyol=o@irO0tphPuXvbO;q{b=Y7_Iuiz9^6*m{& zzK9kc6GES{wV2==rfwmouGCXvh6~;H%a(p!=Hl(&E>0ZSSH`95`0#x=&&KFN5U0(( zcHMUGB=H)(Rhp?FUFe&mDqb=@;b`{UD%nvHT<$)($8MyqY;v}?QbMN)5>1%&?5gEg zuXfW;pG7o0763$5#qg);PG^=O+bWml;oO}3A{kz}$kUpDp0Vh>O@6BH!RrM~4APz@ z5rM^oh;k6!BD*2!nLV0tqA${K*jtC2!biB^Q79+NW2aM@Ncs$XQrthRM6O^!P`DQZUhcg6 zcQa4e&5C#;DyRVRvWBq;X)R~HEGeNVi&&j0K&=1IIP@DdK39_jgl5qhBvs9vNDRDsKAAAVk+5^}9+4+kJlQ)ogxZ;9ek0D9=Sk24S>DZlI%#N;ew5hM z@G$2+2U8*`8Wd)(S&kDL=P{3 zF|ii}fm%_?-;My>r+|Hd<1LiuSb=;AGwT(Xv7ls71;r)Rq4He3exMVa!;r2~4O4}; zey#`7!v|}O8pm)B(_Sj;hyi9`Xvd%rG4N|2C`UU*{Le~u284C-y-!#bl0dQRw;v_aNtMoQgt;t!s@#4PQ zeJ~*OP&Z5A{eK1VV*hqG9>^|+HLo>aO_u}4SQ=uvdAS6E;_jJoYsD&Ye zU1_!*7yIwMV)O~#K~VLipGN;-)r1VdC(M;=EGftN-59ZGNVt15wEsmzmLk2_=erkHl+0*t~AYg$KcGY*2 z2>J(uYu5tbXG<6$&q1im*#Fgu?~m~JPhd&4{!cYlkBlNiwne{F=SBsWni3Gc?`X&5 zRsp&=>>B5X@qY^$%(2D{Wd9+CfER`v>XJYB=l-{;rLD<;N{AjoW9C=J9TB#0pF^-0 z%oz254gn#cgCQ=Um>*YG5vy+l;0&>%B@g>RDELDP#GNBtyUwTfye0g+gmVhSo3OJ! zQm*DkButk>$L&bv+%R3C$g0F8*OL6B{TaEK_6sfQR!}@_NqEU&j z_WGT;Pbc8lQk>Rb%%~&$D}^LCRa*Q&kGaQW5?Kfd%=gNbNQI|$UQVSZBf+9p96x%9 zC$UKfa`k^6^X^8#?-R*3@a7$i04jl-I6@4~Wk-@eiJJmxBx|I+AY;a=GElrk#x-|PG{i5UM zq2~K`NMT|iaKIfYY&QDda#cVTHS8kV1cF5 z!7!&^ET-d{cVcQ2_^sr)&uM}@^8Dg9*v;as0mzdv_*r}RoKa5i1&(jTjpk`vGT5#jv-d# zh!%kp<2PC~D2OK)3to7nlz-W|?cf(hVSKwmGh)JFW{!B%nKQ?aGrF%VJ+S}d$BoD= zu54$lfBvL3=sVNdVwkmLtCeKj)(ic&-;d&@*+N-2wGD3aF7qK(bw!q1Wy(Q4-Z&=! zYR{{B({6NW3`B1Gd7a|@qsG%OzFL>Ra4yfkm?fkLMX5U1u*OKCTT+4GNdBL$+NAwu(GE!*+DWm8q7k+n@? zk3-~!gd#6-u^*mzT@6p((I5COGEf7PJfOj69bb>oWrLiLv9sNs679^d%y}O8yu7cO zBJs+x#L}eQEwlXZ()^j@2R0y=DVd^$E#A|<6~(Os$8XHe!UKNvCkH?$r7aQXQmA^( zhXJkeo&Vv$H8FwbDJ#}ioVgLit}WNqax{Cj3dk4=9ZuA*3m~Gyh)X?6UmW@0-wodT z7|V_^DnD-?MRgY!ch+tir%`891&E;04$H}pr0M9V6K6eNP6dVjMmMxU1ykl+#Eo1e z?9*EMQadZ*9C|oM4Nb^ju(AEf&0x(oV@dZ8mG&ui-jyQ*B39dfJ_@)V$A)twb`U*Q zkES@RI@I78LAoD;x%$+Z8{<18r+dOE@JZwTB5$-U%3%Oy0_S00KXn++CF?r6nfwdV zW#6Qvo4AFAHgi+gP&iAGY)*`f{TF+Cj5Y7qq`aEu*=quBV5EGcxxYE%F5W}*WV_vZ zhb1`~dY0F$Pra?Rg0gnHB@*~Ku_7s>)BTVri1xspHt8eXmhP5ZQm?$l?e8`>Ngk5M z84~)Z*5+m%(dK!}w2@OwTWPemwbYn;6^?WR{ze`BAEnJKJifc~2pB+Z__{EO@6zB7 zbd9{J)T8V27&SJ5jE=JGz7DHQ-rL>NUj6Q1{b5Sobet7O;Qnt1R|POtlnU6ll=~^Q zr|q(CmGyk&oMs_%_dSetO!2}tvWrcRkMDhS-PXJ~-J-ey{tVNaLDe@Z*PEDk14n1Y z)xy#42==9=uRTyMf% z>Cm(1AiI3$_q==;yv0UR3q`42O2DT*N-x=HpCQ1#M=K}BXp3+y_EIy?WB!qMdg`lZ zZMWKN3818pDCZUb`T%dc+`wC+OcKTQfsd5C(!Ry~?Q$VkQqbn>Lscif(L!GK;bzeh zyviE6Q3#d@jh~+n5g?lnv>tF)>>hat^^wRrU2A_RuH5S7ewiQ+55!&%PW{DwUal^E zjm*FBdNtylCqcexZXViQoa>uUYj4~xo#t~h7{xz~SpY}EiMZ~g;Tjsa45wI&MWGtb z!JZovPLWhdD3o}GL8IiT$}2PJBbj5qiF!Z?&k?^$iZ3_E%rHst<4=sjR5XiY8{g!U z_AiBjr*l`9D?h&1ZX$??i|qzih_Kt|nl7`Db$=f@0O?ZT4ZWaRmsni>J~jH~;=kRK!YQIOPvf_lS}W znLUoZGK7n5)@$%<-bC}A;$k)Euxrl9&*mk^CfHqsh?l4NE-tOG`s@0g=f3nRDY(m_ z41YXhd~7hy6YwIp_U^a z{n`;JzOwrAC4olJ+{_G_+CGjBt%1c27Cylm4tb-~@iTa)8ZFf2p7#$_3NOnY8zZV~1XjTlZBd)JDj}hh{O0yeF^gvy5gjd1qtiddoMJYD6$>t1ZAplIN}L zEgd(SxwdAAo~ko1i@#uup0I+OLdS5V_Sr&$KTRN6pe8mZ!+$~SJK8U7sGCHfYf8&h z;HEGL=mOSB1jy1M-mAKvGK1tD^QeN{sRxp%L-?(eM7|>}y))};&j^&RbU9FJ%A|rhS6;g*CcpXd9A{|J<^HChdP`hT#h|1ZEWLxn`Q~{t zKv5ed5o@3+_7;#?tcRXFy;#QvgkR0)gmny39nZL3v>Y@BoN&3tIgV*HF&v<{tC5wokIs zt6&>k699q}fUVQ2LQCHx4vu*FrsV(I5Ah##_}dM~mjOSrz01A2dLXAj;ny5cJ}2Ag zzTSM4;PJWEQQkT%kflMEOj4?_xX#>m!xir%R6yK9d)8nW1 zY~9W5zl}wF?!gS&9p`#bhep~+-%ib@*ljN`kj$+u7E!jg89CBdLc^c_2_b>SeSvU8 z5r(es{>&TsVZKEq=euUv6{t0m3vGdl6%6$cV!G&Gr_fVWL3u2AD#=_r2Hm% zGfu;z6Yii^elZuQG!RK$;>L_%v4|K z`6TOHL)wt@#ugDzuk1~uT*9=Vlb)kZGA51d4Bdc&7e<_6-1{=Vq5*hd7qHh&^47)870@{E4pDdd$=}E8iH7QmnDtz+qw+gXtBvHYrofmX`8tDhmD0;}=;kp=>zD~RzY6P> zj7of<0ChOeMbbodKYC&02^--|ZG^ZQ59X5lcQ9om0EoigCfEL${)tG;Bo~z0;5Ka< zjt|&eoSiM}B#ok|J`Lfk1caNDCDmc2EZz_Mm#7%xzO*$_H@b?GQR)q8c!>S{gX^BIK?ioUuig%syN&goiX{WO5%|sH!X8wmd8D(UrdFIkKf5R-PQi# z;lg_JuXbdt(s2p+2;;63C%h=RX+FfnAF6xN%Peaj4-Q;kyGA~s%bCLf4uWf&eqXA> zDvlq+m~%_iKC!wHb0S2s%GWI5^djqwqfol=ueCS^*R`be$3$^mywOF5=+O#JNj`N}kVtkc6l z-fEhI6g;08UiMN~-vzg;)3QtH9OatpIYQK%6*Dewqxoc(8cca0x`x`){U%Q(+PGYg zcX&}TVI5I07)m~nw7yE^3kMnhHS83{;81d(>MB&+cuwe?Vc~r5>3LNdyc+Yy#J@6h zr1xjkFvb`*jw-y<^7*Rj%Z`tmU0r)|kkdUPoZME+3cBZ~)!}84yZi(UFXZ(Et(ecz zfBTB`r_buX@7UW8TrSC4P1c5n(7$X)V!XFy9?f*EFQvk8{pJ*uG zAxguR#1H@Xl2{n|BbJi4Tvwg^b0Q-WynUM&GkrMH4u>I!_M>^8Fr0Dh`SOR=ETC7xEG^g$2>rrslyX znCq1E`u4W$uR$?Lu3)STCTu$lK%er7N%O=5*g}znos&H2ulF_1qm0P+7F!=&)DT1#8!f|poY=+) z0oGXlc-j^VThGWYE`Z_AkMn`U3FB%MIRjA@N0fXp{mZt%NRH{U5pY)63N1F4 zG<`tg`sST$iPSC+Bg-%*Bcl4Ii>{e{=Nu{8HNEb7yJ;qk)D^E2Xwh5IdKp#%cZ}!b zb}-CR=dFzn17RK*Dz=j6NT{#f0kHR#x)Zh5f&U zMO2;$Uy+1613FF2kplAS#EQiF9>Q+VFkpo&d{z5_lxR7gk*xHw4$kkCH;EgM#Lnvv zqSQ;2H-ulF!Rdl=2AC?;o)=SZM`v}Kx!WIqtwN5F)vp&O_ku=eHM-gS?!E7mxwtjh zc|RpKmAt*5U07)`**;hO9w+qoOs@N^-TSQ@0W2?-O~5j*#F20$L#ojU@GHC1w{-sU zQP7*Di|w1B_!`OYcDE=%gnSU&xB&+Qr)$?6QJ?eY&2`o$YpWTZZ4zrpR=03?l@e`I zMI7(tcnS(&hu^-fT>EOJK9?)e#Kwir$9NJNwZ#Z?79~0#tAW?etiQ(jcw3I;G+KUY zS%71Xdt|gnw}ZqNPY|Roc6q6#LE8EXN~eS^f~euGaOz?Xuk3rierWuA3`)tinv1 z00ZBZzAm+^v96|gd@!PuBh!u7ul)N5+6#%@1@3i&7Z@g}ZDfd?c_>*$PN#$WHIozq zBC+1@E%s>w)h$hYocdpOc`hSWk?31o@ldl7NX#4uJmQ?t0le8-@pjYK+7!nBdlk=0^tweWb>(X~Ou+>+S3z(A~ zKJ@E_@ClL&>vWy4B$%96^3;C0{2#=XhQQ-BoSYn4*Q%fhme*A^USDKmOYhz5TAN_+ zHEMM@Xu%&}ZE~Fd!5mS;6N09JC*L*q|9grZ10ZTAa~Y82hFAwLf0xVOIN!gq$ROvT z8cfsD_6PId5e3IqR_5u1URA2$b~Cq_CAdT;kq#>>=Z?X(4G<~}VDOn4i(34!Oc!4= zu(v2XyvYodR&MTFB)ctx;4=|9MIg}_hHaKM zgiG%FfqW#}t7s^j1g}qjqvkf4l)4`t9!HVOd(sL0vrw2P+MgRcg-d%DMVUS_YKGyo z@N~LuN;<#bPK=B$=25RUN1!5N^w^Ji3es+ms#sm;%XQvE^?}sQF1SgVMit?a*vtLy;M;)Q&(6VJtYWwot7!`E3cHcW> zv|g!8Q*M`%HKYy?O&`50lRKvH46yUQm!n=PrX-FmJ+OO$c^B~6k5Mz!uf@q@0jtZ5 z$GcuMeUk5vVGLKw@%MOgO0MuzeukD}b)@4ZymEWHFKPwHTufFZX#zj?9S3elyX|Oh zm1ojZvPYseb3H+79^Ucrw)vpkrDgJntQb+KYNpNr2?UE;egCYVA zivg!<;z(wy#q}`<6eWz|OF$?$xg~gz^`6b}!*_|Pewc%g;~4`KcSp=Le5|`4>ym-| z6iE#$V!PA5B-o=X-OTXuqRwWK7(A-IG(lkTgvM8TsdX#hd*oxC&GHSrBTxRTWsf}X zs#xsptXOctN~x6iB?fJ6a^oO2^yTx$Gz_HGZcnoharQ+DSC$MyhG+E-v-phqYKn9b znx*H&`d`LhZ$L*Sa*51slDjVlaUGU@TIDMDatm3>FVSNdp{uF0aCG8sfXJ7RI<-+| zT%mY)vemJPA@Jb@c@&d9pWH{b>Xea-aKFYXTuYRfTw1HJ~LGQd(|rE=d}JRK^UzV=#!S!j zGwGluPwz-Pcv}W^gl42PB~D?Jc(M$$FeO-=Mcl+|YyYZ;J7+i!f4qccz&rI`FP`Xe zQ;{p!3t#o|)``-Gz$WfPrw!s(sh7^r;*nQ8X67&F8Np1h@ES5&m75 zJ*r4w8W@arcu2Hr*C1KR19BXDFYh5fKfm9-@3yd}IIxwGeL0lHcU5$djh>CeE32i` zF!%$D+4Cs*5q1{6t zoclvh4JlT$S^V&#Q=i2~wM}PdTW#NZz;;Sc(FJ7Ni zssF;J;h~7G)-kq;Paw@YwK3;5r}}DP(41^ zvVpDTt=o?My5JWt+*MWioz{_*tcO#*s)c+<&yc>sx}j7{{7#OB&Bdy*<>r-}oKP0$ zy0505@kuH8Gd91Hg$rO2=-StYX=)hK`8)f>?F3vU!(j$acLm8Y?mi3%_=WCivGJZ>Pn9IM^w#^3Cno&wZYP zW5e60vqIL#{s)=J?E+vTas)j^s~Z}Lb?>)w$SS5#!xP={Jo5eFgfq8&B?pA*8VvY+ zj=5Rv?D9O6UGxUy2_KDCZK;{?g0AH<>BF} z2)}TPza8$C5kMOOvsvN&8H6$ARDvGl?V{svJ6Sv*10aRL9=duYCHMp=j=Or?M{nY% zd{{FOON2@58WEjxfPzN$nwhRJFWFiC*HuAkx0L#c)KO28}G7nzjUI72?+>QqB2Q<>nL98REB z^kg|=ERt1yGo)5f8A|&;fCR3ir@gi1-R1~%Ii2i}wy%La<=De`jw^=IdyTRoicfS$ z!a_%)aOUl7WH%Un)ZFO%(Y&$Xe}1cAXw+#C>Oa9;?QqCYbDgZ z7`)#_SAG%$B+`_F>Jc0C&q)GenUQ8AoB}@y<(u-iKDcx+zySy0D#-nH8Iic*f$??{ zGI}r8*&ifm_uj%eqj4p#w#n=*t-QuL+6q7DZ71<=pvo+aDqxNvq&I;F?Q^*>uq3E>1bIGMU8QZliHu-C0kVg%ic{4FqHMpVKgjl+ z%MQnguNevJ2qOGhI7 zd_e=DMSLJPBMSYD$51)5y|`bYCLqDV8}Jd)QdaC|`fphSz=5GSyX)u9q2yCSkqrG+ z?tr}ehgHv5?X>@dx_DsZt>dGIqkYGSUp>#8L#)7eK|9e3LXq^t^S7T^f}bEkHFWvm zMZfw6g!^4F|LvZrW*w`5veWya3>WF2>`%=It**x*6>kUUDTl1k7Q(2*Cx8i$E=g3L z_zqJ zz0-LSPsr3~DiZSrH@U8%ord^LwaB4cW7X?PW*uUy#s8i1jzb6t-2OV2mWr zmkYdv-4LBJO+L)=jR6-JYq`0-N9I_!Pe(Gg6#wfo|Jx6@*^2NCzZn0lh|T9F2r1k* zvRNKEBXCpw$@899wQy4xtr5i0Ia!uIKKSP8&C`bWANRm2Hy))v^hDH~L=6|VAK~QJ z;!Sk|52-<6>IcJs5}wVL0CYeL2LmrJs{_wAbyxM+`;FTedqRFc@&+tU{O>cYxnEMR z-6Bck22;Ezs&{#kq+TetX{Q~0cvTk=Hua2>c z3WRhkyahUdUFNu+>E=Dbl<%9rhK>N*{VEv1Xp`Np+9dtmsxkw{_rtNOAZUQMw*0WK z!s##HwAR%AH0NyOh+#x*T6UQQ&-1xF8%|HOyuydRpEHUwQE#~XKj23#Xa#4NBkWIeti zKI?e$9ee-jQ^WFZaqA~Op!2)uXj7p17R6b-4i=wo1Cb^crb&e%!?um)o@vq`cIR&Y z;>8h#byDBrBW4EbBdU@oQE9ElnAdIAv8R>CZ0M_oa zrGT}(bb^}l>iq8GhqP$nmn+LSgr}G7nmne;OjX6gm*8~%5%9~W{kXd*>_BySOjKVB0)F&*kZErg-D;Um1DsS02v<=v8$b zoGcNDNaIQU?Hn~Q)q4~<{%x}=c%7b?tMrC@mU=(L>>b~`(d|KL<1Cf?kk4XLe8hK) zevwbBg2ot4eY}o|_<>LHiN0sw8fTt64qi^1=-Pc}9zCYEF809iz*O!+JJk2rtuS_z z9D^snFTS8kYXa+8`M;hvOU^FK=?WYA^$0 zS42o19s(CP6aPYqShyHr>wio<|Goa-IW-9Z@w=nRndU&8558HB)}11}17-?D;?6Uu znJ0z=fI5K-r36UfP?9-4tqIn5)4KY`y}Po}po5PjgfReg@F((9FP$%&?(eY1RPP3G z*#ybjJg)O52ANnkNZ1j&)cE)Zg8iWb-~~UP$Lu;UWrI($0SZ!?E~JUC!kTvtxj;r7P{rMo7h3&Mr0|p$}zI8?LV7yXo`K_&A6Y z^+3Geafvh=*22!)Q9wbb%DZ3W`QW>Y+>}AGAU4=^#R~#Ff)c3n*RNrua^;=u6P0fd z^W%s>RXm4ZrIo({exZDy8_KXqu3uGX_Vrtxn3@U|CEl&fo5ka)kjtS8Q3o+;nZ!piPh7=t?6>Dm$F)a8l?>fVJVS-@s?;esz2T3hq&On~1=!q6 z#0ANhXmHv@_@iXFeY>0f&})p` zz8x1~_!IOn3SAR=wGn2Cr>&kJuzg;FBa^Kz@Y0i?*U};;3(xCpc40E_t-Ee|bjk0= zs4e$iJl(FdP{`f-jWtH6!FRq60e=tw^PYrfv?&W1%>CVeQgsAl_N!}ojPhLM{w%b* zhqd%>BU_FeRwIVhOh!PCoByVI+&8o=&CA>|#{0CDRZfEBpogkceo2W9OEajLzG+-2 zXn`lRHi8=~i-&E}?xkq>FeXvFzr*LLn&t{q)*dveD^>uEcwY`I*TbAIHIjGAG>ftl z`${>M@=M#bajp$k$-L|}B(%yn2+;qrVTjTc`dLDY?Oix7CvH2RVnALSHN+HWa*oNk zyuH3Rpr<3z(0>QbZ=l*Cxjv_4|cOiO*Fk!rv@7zvF-_a7%4gIDYgeTDMQxt zx0n5)i=7#YZ*%+W-9FH2{YJ~ZotY!b&0-PBKfGP4NL)PWj>&W{pGZa=_kSt|6Jc7< zqVBu8(jeL#%T81*yMFT1)BCNeShDbLIrMQaE|*_JK=6k*5<5`<^BnPi#NBaHV7%VK zseR}D*Ygw`)bDTM;gVwtdK!#r&S&S>F^OhF*u># z32aX#IBxo_R{JI|F_!@@JqXF?ecEh3F1X9ma_mbZ!}PK&#;4Z^p>9?WwHBdIQrd$s zKtd+;d)>ukOuPrOSogkO$RL+AtqYIFn_v3iR#H|bBCwRD9mO3^f> zh+(7a$u56N|3xnamr20@_@MNe9IE!o}MNB>3op5G*i}-1v zEWhrKwrc9Dl=OtZUZ1^kI!SD%;WhfdR^WDjuiFcla z1SAtzcwT`p*MmC{us1>8chc*6g@pBaz>XWav1;85gZU5KvF`5LUB^|V$dAn6Br<=y zmt~4T;PYR$buKU?$9tc`g<`xvt$TK5Ei?8rD^xE%)4HwZNt@z#Hfv4_Ev+xPuk+(b zoIjcwGF{A!sFRt*BcDGDucOD}JnCj__P8r&tgJB@bZE^lY=nKS$BIo~yNzS-wr!`1yfYt_2zu3A;KYAw@> z+?3DsT)fN~LwNFXd{`5hS8tZ`Rj(1(1Ad5nOfQLm>rOvuS7T&7-)CZb_Nx*(Bdswa zEtcMQ=;<8VeY;@-HJnJn%u7nTV>Se`cOO*pL(M7Ic{z2WufN@aW3?0wrRVhUe*X03 zo3M-Omhb#?g|0U@4jP>e;B$=YmPPFHyL`aD7%y)ovXH?#n_1gmfx><`wHMZ~Q%%+BaPE;Vp` z?lph6Nd%iPg3lkDs2Mxh*qD$-Z_ef8Qu;@(@Z%7dHdmiUqS1HZW7@mMj(D)HEoQCL z(({Xk#^M(P#jqMftpr)qFew(5IF4{` zlf5k5zX4^Xg(1c;xd8>|p6-BFf=L^VyA?kzbQLJ2DJZX<6-his?Xwz0(S=}mU2h8V z!Z}uvt%tz=Fg({?cZHq8zzhq8Y~Q&f6#&)x?QX9f)uY$eT4uHa`uZ^whuAYbZE;rJ z);dvshn<6CEYkgbt?Q1FUrp^m-+bDkP3;7|&&T!3oZ?p) z=k-g2eBp4(#r5ZEYt&Dg!n5m~<6tRhQN@3^+LVAQ(>PHI;*NOHB@ z*tc}>@Co4Q^#sg843OgH+FInE&S8|XVsKgUKUZie_?<%0# zq|BZXR`T><_|#Y=z>#$rmpz_ZfZDK+mHfzC9pHV=o1y1_ydP_SkAze^7({ifkECO^ z4QwZR10r8OMkqs%r z$+4~!O%WZW`Yqb~UzLX`{J!NX#Rhl-MJ)J?j!M46D5mjKJZ#>y7t+m$W+MO(F#eMn>P5}n;w&9hQvDfjY4 zwrcnU z+=8&kWCgTtUrnQ!1cqr-=4Gj#DorL*5XD>2TA!hfq39%#4A?DUl0NKuN@Fwmx-IFa z&tawvxPFQA1=#B^8GT<{Chcq6Ex@a>QFVC*#uONRu(NSoM17j-k+vX{LM@FxNRag( zMT?$c%3;xHVZej=prn-9o6J-57-OKJrNw|H))Z(}xeD_*Zj~BUj?ffMWg;DR6%^$56{4~gv0|-@+ebF~QaSs855dq4@ci35 z2`&WK>lf)u>pZ8;2w04|%^IA9H=jTI=|zr9T~e)1JfNbUI_eJS>84@iM8&LcZ%Z*| z?(#LhZ3*MSa_fH)$3jM<9lay~jSfJQE))E|ih=0F1^Mow&Px=_VSoUg5ou#sDXd-N z;Z=s5dSgRWo8tH^*sOd(x6S+m8?x=;?yNFIQvW~%mK2Y{)CNug!g`6Y@RAcg8$SDXsBf~kxrM`TKQbRM9u ztKAP{R0ObF6%T*pnE`jxD4XqJRYn?XmBVVY@?{*|=qf9`G-1^sz_aPNUdFvRu6B}a z2i_&~klJq0dufk6dG=Ct{?S3qRKs&{4nw^GlQq#h%lam#N}hzHP5Mk@kIV?_aIxeMj z9=1-nXNZaN*ZBZGd%qBWPO!&B>mEH~xxDmI%t#+&$Yi@Q-$BHku!$h6?}9UUa4w14 zKJDuQUo{t7lBY1CHr2cv_3Zmy_H!Y}!FN7P?BmLZkNiJW?sJA{LpDJ`{-x^>cg&{^ z^1iW;LY0%}QTM^VVQ^95qQarTSN2&SlC1}5!RXbRDS9<49hjL3I(z*o;R$Y9#3Y(O z&uG=zZD5`#MdM0pGja<#2GBo9sDvLmq8NX^7;(y5VSXYIr@OB1Z_oS0TyA6#can}% z@q;k29Aip{UNOD?d%otumCgfNiqyS;el?hQA{Uow{{0t=b^TnC;~$OucMo^(O{6zG z(uhqlqkmO{h=#ZEyc9uwOc4n?B!kos1>5Vh(O&O8j}n!$hOy{ba&>vlPxGSEYv=N& zS3%a@c>+)qHNaD%AZZrqSD zeh3COMi{1}b%uU}Oo=pwuU~FMc~_WQfReCt@3k}Fp-ZbPHI89NGD@<@Gi8gC1(l@} z)e|3vW9ucs$Acorr)#Z2{>lqzPu=L#rtzB%LGQ2N`gZ~luZx|0ZdU!*O0$^cXRKa(7xOMp}OgrsF&jh zm}mV7KTHB8<`Z66#y^$Fa~8|ray&|IRC9l-@jAz>W{9_wIvqimw+>nzQE1((!agwY z9-gX|0dcjudzuT@Pb!){*+ROtiy4OiJAL;}iT&tfWIOt97|?QzY(M2G%?Wn3$)?5WcN2jQYJA1)7=(#g zrLQ#Z=eetQv%j4t)Wa#i%^F|rFtVj!+{&vU-;95J2W3TQS$2?*se;If-{da>Q!q(JM7BV;Bd@t5ZK;>`Qtb?`HRf{@R;+&L##h3s<*yTj{nq#_U3K^9eZbT?R4l=mhk^?APZg}PPc)0$nU+f!G) zz6z*ibPe~Uql4ujw(-*nvPRZ50Ab%gcoKrx{lYUt{98b_DMXYp{10%cBl?QqLUKzEV%- zVIi<;Pkr92c-n{#h*tD6$xuw43WE{Y5#0JAC!na`i5v*W9 z09+iFuNP~akqE?ZOGY0fl9?G)-w<5WXm+-&l~8GVU)4(^$Dp^H`Y7}ZOVcBMJ;uS! zLdIvTPPt5K_WdE`Szi<|BaFc-WtdGg@=a>+QuakoHc#M^S0zoW>4Fah9nz^swKtno z7y?^N%g5u3EAB_M@`<*mi0`EhN3<(QYpBwF?nXksvQ0`YV2gGi?NfN#K7rRZfntPf zYK1dtjoCfc`Y=u7(yPLDOQTmmiYC9(!^H#%(-2u5%)I?UP!>Q_GBdl%N1iJr+7yIY zDu9Rj0B%*O)0?SkceIX`$W<+)c@a+B_Ov{E=)Lri10?r&%%0hjh-=sPbdw!uT>eV! z5H(=d&K%~@C?N17C!o1(lj6XUJ1lUkHo(ILahsM_Jrt-UCROQpo|D}6wux)eCgS=n z!&mXX)x4-ryKrOV^A-L-E#(Ct>w4EKHh)!W(pSIFn-$$T66A!Y1eMs$Y zV+dLU%>Ov3Ag%9iC0*px#%_(C=M` zyHl{qj9+#H9#E|5&0z+}DZC+&9wYo)kE!Dke&2^N;qJt@GPeK`co<{fz`7aLG)0%! z8AL|TEJMg{b}ZQ7q37p*lnGtzaM8-Tb9@*M z`!KSEXt(!p=lnkQ*ym;%f_CkuY;UYOFpecoLL<@scq{*7AkNg}TxbcFKsuV;KX9`w ztz^4ojxvLnzQOsdPF%CMv@&eNs7VPfa>J8kpm#)bA_=pEn3wY&6M9>x;8q^OdDsSL z7(aDK?(UliA9!772$+};O_;8-KDhAdvEV0IVh$aqTjrMaawRo@**%dAU_op5kNBkHt2 z1^VIWR(RCwFetnuyc#H>OC`EVAcmVewxb;@8OGDhFJxEJ>_Th_ZcNt5#u7O34A(DV z9E6_FZ1>(kU}C&$6?B~C#ngR;=|0JDx_IQy`jZ^b-8N}gB<2+ZOTAk#Ro9}=$+A5wzf8s!^KvSxuQ8SUV4l1 zXY+1X`!7cHAP2ZH`5W|H)ykd3@81_JJ#!>Ou{&ApLAH%;4c9O>d)rC=oYoWI;bNsf zZi5A_SeV^)?ca49Ts`-jJKhDSsT#K^TIemeB65kNPdGF`q(}MeZ?eJnlJ6KvIo%)C zrm@VfpQlt1Oq}GIx-{(`QWd(wr3`jcwk8q22l~b-@&7w;_%^h+Lr*l0poPOzniy}u>R-V;H zyV>X=PGk!^g6B}1l@~QGneUxREnX9XhCg}v#ATE|pmpaC_%W*r-!Bzdg!70n<@RhHAA@efY!E183tiH1L9xk!Kt|YbFVaT~Vnyc#huzQ`6Og;+v z{#+~%^y@r`It?N>?DCl<^bUGjPM=L96L2=QrHb`H5fFN%z#G>Cy^Pa5Q!C}24^j4b z&}0SvYzfMW>qYW**|1JXoIU9yRria2A1ndt;Z|I>R)fZAi1%@rmttPO%j%u#V?(L| zD9UQbwAUwctfe(?aU+NHwDwEM-Z>tI!feaP&=7_EJM-36`inFXu-j%|-)i5@QJc%+_0<5Cpta9cs|O^?C9C;LRjCSi z9u0wk*v+7gR_tm85c8l#&IXm zowrk!^lh97LwB?d_d*&rw8Ys(dE&IP$Pk-;g(_jwRTbT~jU;{RJKnR`Es*{2%#n=- zvbkBvWmj;{=?kB(hrb^#AxfS*?j%84(CdF5sVXTjHj15E4?xExFR$T{x)3TKx}ZE4 zjGfqHl?X{tqTR&AD3SyO<$j(0m;#nn0_^TNKGFEDlOBOJ&K6Bm;2e<+y)jWN12@EB zzEqYalRNs+z7NSo*?GqM9M*fsl*-K?ZC?$5b!Mgc>Pm?g?Q_u(GOWNMi?~=iX`fr= zjVn2=F^+w3hX|<;tg^%?B^)n9Wi<0pzd~H3d`-8!Up8$!_0 z`Nj;gei95#lwXpufR|qn09OLsk%#EpJ8x*^4Nc!5&kuSj4UgFbcn)fC;I(58w1jy_ z@18`)t){Y;ZVF;{izJlD^bUNAi+&*{u8fL3`}LEURLgMPodUYOqmRr|PjA(@+k?w* z)ld;|{TBC5{gFxo7)Ye?oiB~KnpEQ@QUrjG{eqB|B zW3^?my%IA?L^HN`yJYH!25!?Neh!y$wRREuxVth~Ywx5};M_@r{dTu~`iX>7g+tZR$ z);{Wqr$hV>`w+rUITj;zl#!8B%1w@OTlir%R?3$JAD>{q&12-LIQnfl*3hU%6})!> zL(pTA-I@HFOF=erJNqLJPRWD-;o1-oyG2S=J7eTcy0=?D0n9 z)x*PA1LgL00>8dPRlDUABWbkVE2ZAUD=%IF1Hs^dQt#$hhnzdib(Ea6L?@Po@LINjzbgJaiq`NarRNlh)qPRk)~W9kbK8{me{Hd{-VHux_frni@`maeK5F2s zuR2jj7MO@a)tk**qY2<(dGG2%*6wx5-%&GFY8nf|XbtLMxm9|LpWQG3A`_3ij_>W= za!H%1w~wa}McZh6^M<0tHL(hs7Blk3Dd{16lY@WblA<3Z{Vq)`q5MnSxu#3h^~?zM4weJ*hc^5zkcDD!TmLl&Smb_xl4F=< zhX*goDxF*)Ix`S$EBRA8smKV-1x-nwo%1zWv@E#nuN`?*63Jo?mB0*2FB~QP@rWRiCHX#i??f&?5htJ%aS#$-9>fa0wdPkwW6e&W zBh_~l+B6r9ycP8U&V!4H5~8IgG&~kU21nU`s`^@fxPMP+Zhp66-8}%z^`bW{A1((( zaW_ZB*GTu+@y%<$95Pek;e_e`bdM=kAN^%yH-U{@%yKP3vA4-6v8e}foPt8N7bQhs zsk*u4d$+Mm^_in1BOQJFOK6!9YPZ)WHH!q;0zD`_YIXTDkY-pvbpP6SphgcCfIE9a zNxxI3b!YFrLCwH@wd`v-=+(-<@EM*mZvnKF*l{oQn%aLR#<;RRd zwhvCBxDD|X$7VQB+*LP$+m|?bJ(J=Q>U$qlkq{FHSq)=WLx-y?=#8E(RY>Q&o~FBv zl9OjFQk#ABCTA=k5V^$0pKf`?Qpo2DyHg6`lcPj;_qC2`u_U9TnKHBBfv`r>tnOM; zB${1S{ zL3%N=rn3KKcoVa8H98tYpwlTgaLMp+ODESu{6xU!puB^Zs4shKJn;P478)ml2x=oB z8`m91V0tgyhQdgsi~>X0FeTdw5(p+JNa#ssi2{&)d&+9%^C~}(85736d*eGN>wiZT ziz92L7CTs=rKUG1UzBF?gvqFBfg0=?kGaOD$+8}AbCP}bM zyQRWgmvON><{Q@K^=S;$msYNCALSsB_Si8mow|6>_UmTjr!B9OtAW*scKv&oYW;GE zg@||2nWbu*JhXA>tho4yuvr@R+&7E58Bap;_G?H_avUV?s%O=Qm+SGwCiVgPS9@G* z>{wj;Lj=T&p#8q_>g{EH?c7}h{RRY!T}gUyfRx4M{2n|?0HDK0eG-S>Ym8;dA??#b`{X#@B4X+H@kvv{s)NSTQ^a|Tuf$4;hm8)|AKh?!kGZ(tb?&7w>@t4 z`D<#Tv%T4mKTSONaE@z^X1|dbdjtLH9)`>4=D{CA(&%^Gst3$_-`V-+oL0ev(bsn) zv)Mo2NxdKL;~lcfuRD6}(3}A83Q7gC-U&SI8cZ1noNuL5)ke!#%%sa_9>T#QL1(sK zKR}jr?zXJqDAX3~t^HF}=y+%m(66OeqR6I|teIC$6P%iv-bd>RN1n@Yer8(YRc8w|X2BpEt`&bIJs$G&!f0`5U%m`V_}(mh3Xr)KT3Y+atOLssY->rWpk7&B*tx3Hp9vBkO+%}WVkYsxaKXY;OSF(^11G-ur9 z?UsNOEsWC$brSl%P}hx{eQ$pwGVjDvhg(xgI?GlebHG_PliB=&w~=fUnU!3(@hiTy zP2j<-_NJjUMt$JZX_hdoAj^0RONHenZ%x4qpKtl+wL z1L{oSqTg`x*q{*g?O;T15IKgIiq3mL^H9#E*WZf0U!tpf3tY1mdRI2E-&Vnw_jaft z@}_Rgy}m0=R}83UmoVc)!YNqa)dqDBoI|2f(O zoQz1jz{Ch@f3kU^4zIgQ<|+ifUXK%d?6Uc`s??~;>vqz3umNJ390P}KFcHbq;d8Vr z-HcjlpuN01oWwmftHG6Mf!@rGC4(yiL{nt@zQ^k#@DyU2+yFdUO&6%G&|@!nD-r($ z5qlU*PC;nO^a49xFGYYlBgVwiu0mZT$X6epp+K=h?nTTja|@AcPW0e z1kjb|21(tYih>oPXP3{0ziWne-wDxX(fbsNJshrX-HnOL+R)z7Ln7LNk9zkH8|`rq z_Fno2C-NDld8fMjo}O*b03{K{`d!EZj(ynu8|r#>QB2D|^TUZZoY-^&b@C?E+eage zDs|PzL{P2vBbBCjA%-7lUic07**K|7SP|Cmx^AG2V=Eq~?-Z?0RrSNwN$tdLT1$4! ztVo!ddqcxW@}bkaMEJe1Aai5&N#|^IYva@QfRu&oD72U;+)p-FKPhI-s~-2*7^i*z zVAB7!g%|HnMVB(c>g?n8)ceEav!Ss^^QbEh*1o*y)TL*Z<3X2=%)46&A?hkK=!^vO z63}IwyM!l!Cy2AOFEP`PyA;6Q(t1mlg4G&6vXOAW)vmvHnHPp%@?D@wlz`Mhj?TOE zJK7#c5M3*4r5;mWLT1(jB@8SQvsA}}Mf*~lKv}KV>4`TjZ~XL5QaqDcmqr|r^U+?f zM8Nx{i6;guk|jE<*rXy8_7`mnS&<1t$jXb4HKJDeM|=c=@3I6(x8cvQE!9zGQc5RA5QV51meqU|D_gqRk zR0qh{Sb!3mm~*zDW2b{;CSoPvq`A73d{1xhI8N*ByWfhRvAzofGR`2t@ysC7E zbDO!6EFp5OOFkcGf8mu=NT)Movm$>rrZ34q*UABKnb(B=z9fq(9Cm6hvEET zsv&bLC1NLn8jQt6@urCTZ_VcY(m6!)lZKzUd+!;4!pJw1=kNn$>+tH;PIs08(-((rhA_eNr^1eZO4^iB6i8kD*%V+WlV>R8Uqu{ z`=ndd_$2e`!TopcxB0nsD4jpx-mZ`Tc+eWL_d3;2l88nA{Z$k|&HJ5Z4G=TjaE+(|Hf`S@MMvZLHey{ukJ@ul9N4|Bj8v@3|HHF zZ7a8Z;T4{bi98Dt`@;;J1^u>n3h1fmOxWAyum;kvmRY?4A!;k)+IG(YblR^n9IWyE z^6gGOnqVOLqvU2%#2r*5 zzZI?EnwXjzO{v)_DKW6IX(!c?Sk9C0ADDM7c?w$3;w}#k*3FtP9{~In{x;|mnziYy zh;S51H>ni(UbzcmUDk*Hyfin2fEo~*ei;2(=v8G&p(`tj=0nvin7r@j+hEJ)q8?9|GaSC{hHZ09ENR@i~u z2Gq2=u^HPw>+Ttg`5X28L5P3;XfTWWt*i)R6WuB2djrkXCyxsCH*Bn|3l};tf5eX8 z^6PA!xXJs4P-DvY3mnP$(9Q)ex$Mn z`YMvwY)?b&+Sem?_>*TO56vp7s)4QpQ7!wbDE}RN9fQae2G#Z^LPw#miOdQvw2thU zM8-^xAh$FXBZBlGzki{sZf~>m;axuH=~JK}{sRnuSfI)hE2M=9N zdfb2f>VJIUAKv|Mf9#+Fq&O^c)e|1|W?{_{!E16_nd*2AuqgwB*tu7&W-gNQx;4D8}af1V7n$Okp zv5l=4w0ZFV2DbjiqW$>^mAFvdwHjMm33Dn?#6m(!w#BvNhULq@SxMgUxZ%Bh@kQ*9 zwDV_8{dZ{mpM_DHDc&~reih^FQ3IGoedZ4XpmVb$V(5N`-EXQ%ix+dd=VS?5(N zt0I-gi~nrcsl0O`#*pqF?N6Y9dyk<7mF)VR&x7o6tr)ovCvg66Q_H!__QTjMA+~tV*d3~KX^@{ z52~f#mMc>c;S)+b(t8})sVxFAElt(fasD4L{oi13AdStiqEws1DHJB2>-k+ZBlGe> zx$i{auctY23UXwcvt1Q=Jh0g+o85DANrO#fJnQ?H{BZERpT&R9-3F#Crm4dy!vFQc z#nKFhlHK+2(MODRCZsJfSa^lgrx!|{OUTB>G9Rr$u>r)+FRpZCsxbfhc_%~BTx2>L zG`1AX0AI%geRbW%cHVIWk}*n*u{GPmXR%*ft3OiW|35SG-=Cl@LE*saxpSF_7aS*H z(29gtq48#`#tNyl4p#ffPTuc5uR3tpGzo2qY29UyxM0axdC_~@D9OEM;G8|2{C7va;?U(T7A+kfAE{-pvwO%u2CCXD`BMh(lv zxh<(>B>>eNWhcE~`ihzLzYQAv*`@hs1a^QaD>EJD<64xNy6d6a4cF8{a39hxlFB1p@roC2f(DT zf$kj=pmCr@fC@X3F}1I+EH9&HqHG8Hk_oqci2#r>FFR$Ch`i?i!e#5%hVI+8x#}HW z9-Hs%fnp&WUc3jw5o1HEi=pBtyo^jzK^-3eDV>ZdixF3w|14~Ani$O!Wy+f|a{4R) zGE}{JIq+Cp2zN>I;9Q>lC&IF%fDI|5k0a)+=R1x!M)$j*_w^mP<&a(Lxf`jju926XUPQ$7ReCU0Hnyf?-`1l5Cti~8j}M(r2$ z>=n&4GNs*5&jyl)*+LibJ~gw)@9P)(OJB}k)Bj2>{zv-drwfFEjnnl(wS3|G`p2h9 z#fI*%(*hECyy)KoxPN@Sfe5l@i?JXNFVY&-Wv z^;5%wnh*SOe)xZ$zu!GQ`%Bnxv#`X-VKFo=rMfNIz1aH-1lnOl09R2XJN^5(wkd^g zj0~vwIl}Sy@qwK&b9QGr@$s<#{H*`om@P?vd23N3rlX%>xcuxlyY>FOIF+Ftku>zo z2AnT%VkwG{ap0j>vHaw7IN>1=m;9nvlcW0d3|>J!B7XBfK%=<9NBCH`tD*$b-W4op z)CeirlFVZCfAEq!=&+I%N8~I&h@y=|%QYD*n!au^#;t_Js^A5mOgSe19I97)&w%_9 zfwnmxtcv@eN{9I^6lw+Y$Iy!j{>gz|jOi%tmS@)afE^eAh)Rh~v=W?<)9)tTaW&N< z$CKxSdciosZ{p<9-K>$f6OatqQ%DrxR= ziqD|wE)@X6E%LXQt6zf(=lWlE=|uUBO>);||rfH37(=I>wI_WwDw zA+Cq5X-?)|Cvf1VcI?EcpbY$KRf;>F5syBE1<5aI^w^K(HZQl^xdc;+zx^{OuOS0o z4#*A%-AF$n&?saYbR!->7c~vSyXvq)_v$|w)vt;G3I{NB%krXT+ZM?Z1FCwwAzY^K z^#Lh0{+#t*1bp4xy$3^SOMeoZB`P5COEQv*lHvz#ykrS$4*;*6!hU8Na?N5JtLlF= zBHje?I=7P)2M{#YQfrWo1}LF@*RlX7fC12!p-{=DaqvKm=q~!Rhzv@Q^Jxq?Gg2qp z=XUFEwGI={3L%X*@ANuE>b1)SE`BAZ{!L8(w#Lx3-0%CqPbBjafrRC?%0uL+6WHCi5u^M&fyzrV2~9ErwZiO;>d%Ot~8D!~-AECuBbXjY_%<)36>fQTy-)HqeTpES4RY^zqJ zm5C*@>Tni2vR*e7CojSAC)pk105F)_W@oT(ZxOo!zEmA2%<3cK<8L?TU;Yb<^V31T zUqci_T73Y!bY%#+boTelJSQbZFH&X1!@~>Q-`^kq`4eZwb@TJ_en~|zp}r@_tmQoB z9~JLCG-nWtk4j$d3scjn4ilmKPgvMQ(hTP>czPE*$KShkPvdtka<~hbU+?v`c&B7E~eA&Ez)uaZqBK%=TlHn=tdzVBrE~GBLOcr6W-q5N=QmddcGgd z|Ni|v%v<8^+Y#KXBOUuGG{9nXMkluq=8Gn=QJaXxBL#BwnXi$eTyyqCL^FqPpx&x9WIbdKpy``ddi=g(ocQT3> zbrE~f(OwEd(aVgrMoB3{n;xyP%G1r+5^E;0vr!QVZ-{M;{OBGLa*9mZ&O0wd{-x~f z*$nNE=1}7Qn`2X#?i&CX@?GLXJs`Td>Gng+S|VXM;7?x9To3%|%Q|R2xcW)fbn4bSY~ckhrF1PNm71Dv@Ggj>zta& z5t^^~^N5hXc|+c-mK34ZPRN@6UR`!_Fs(-U_7DtK$)MX1Fg5u~h$mM2qJByg zN{A9hDw51yUnKAHP79~SG}1iVqFMDZRa8XBTGH(hI}Nujrh)XBYtntaJg(&EBCQX_ zld8`>_*oH@%S5ve)HN*;es1ix2-$y=+Ac=o;qgdx+7cKe(k)qZfmld&hpgwErm2gx zayzL_XTH2tmW#OFy2<7GsIXQ0{$hxEGF1J^ zk@)9CQJpz&>n#Y1(@sj=uAZyLENp#pF=AbF%*@2n@x>`kVl9lrhzpN}$C4Y-ho#X# zOtChC#fTm^S3wicOF6lX)~UI7CDrjEw@u&eR{C66zgzK+3M81X8cAzQ1YMRW!-$*M z-|aoPJK8jO*_$h;jZbM7-gyC4MMsyite}-E7D&S-t6V~S#Ba!=datTZs@|2Z4*iT( zzCbUQ47)|b|G3SV{$hi^`K`9fr%`CFi=}`ckyDT$B1m#9Ky{bg!`;rj1Vy4N6Dx|3 zF!(3>;n(6c(yui96Qao|M{q^#{N=og5_n`4iRMcxUvmchT5*V!>bG50{L~F9vo|M) zAR_5w7Z_z5oQWv2%{!fvPBz0ojEZSUX_#%Kg(x}xYS#i7R4k%6uu1INKflnucPw8As$OGbIIW z6yeqB0&Dn8nOei7H37le>#ag(hOWYa1AC3fw|gHrrU$*+Ox2Z!T$6UQlsMX^SzyyA z&YjYy9<-EV+nfnxiza~95rN8qnecw3z>d25w#Qek!MV$Y%Dk~VJH4fKO{ADc#H!<$ zeRY@C^S)p4p6B;+P`eGk(`}{yerU78p7y49FLBvXz>4cEAAx>R*vh5m$f+u{=IY>Z z|FfSWZd}}Y|N3{`sY@PcdcV>Q-jeS-TTeT3S6ANpZSA6+$Nl>2>$Q!9O6fMg7quMd z7qurB+|89f`gHV#UCVXOWexm9UWj^MSo$IF)Rbt6O{C7V_<{A<7P58Nm>B3GZGMyq zUNj0NtdkC0)kcIv(W(R(WS^p()$c|K>R&~S9b68H;@%aIF~Xd!2QFw`%pR#!v;DxW z#2_~ddn`JQggNNBxwg4$IK*_AfAgl-xF$=<8}sAlOJva*tGY7>gF?4k5_#IBA<^ud z_3v!si*>Xk7E_zThrk8MrTz^#LEo%#%f7)23_c>PK&;Z)jKi(cspAsr|E_$)vfVs1 zyjW+hzv^9e)oQf(kgnc+R(r{qTBkwpY@u)Q6HL3t+uNpemzyW1BuX5;Kj@To?OjuG zT$vg4Gj`)zxHKp}i|;C-X$w-fx_H%`g?}Y^sjea2Zg!-11KgI@A7wklr!6#IYM6HC zt7Cd>R(-&|G8+|j5RTtUYY!2A&(JuLL^s=W}Sd}Cxa(mxLsI*MeD=am2|9E)7h$EOOOn&H1zn60#u3*+^ zIrus1u6J^ubX2sR@Pz#)O|*qhX5A%gPlJf+(;K6-mqmj^rI#p{t9ev^Zo-U;yC!sxbUkMhm6{C6rhBS|lJ<*eRmA(j*m57YV$4QYvH za01}7jg?qsnLrhJaz$Tsy>)%horl1)wqUh{k4?a|O(qBZKG~*rNb+9=teTUF9Mbgn^=&ScTd>_Regxfc1WVK~GylDIO_3w}6 zn1k;$$AlduW-FL`vur-j^Iz>?$=nV1c5VZ$1Ira}&Uma}*tfeac-halOZV}VGk;-e z<2ziP&9BSmNEfyh-5MN9cBcH1^sx5OAG z)4#s?tbb2sMFJbWUB28z2(oqabk=!Pzl%t!k+sw@>nDO1hJxYMP5hR?wFUQo^8r~X z3=nfNTrsYz*Fq7PnMDmk3P>ZfJWd*Izpt&SASf`a8_@qOjUu-7Eu>@eyq=h57vNx_ zA5(DDTrg`S1JGemwa(5ESudNZjGIflo^;OdA~`*ts!N62aek>|&i;UngX*c%I`aaq zrK!mSUoSBnHrW(N9(|#M(wgyA{p!3bAVBg(KckHEy`iJJ+lRCaqs%Rz+hN%vAKt*G zrqt&&An~zj8huou`ITnZ_dm*v>_bOFR^5-J!YH`+boS;y?pWre2o>K=m+*DM2{?Hm zK9i8sQEti%deO01w74{mwWI%5s<7a*@O=6wS)!v*t~{o!l}NwG2b`DBHAJ>+G0@+> zUH=yNE{aqH4{pOe91p2QMxpCUDf-!+v-_$_<6-=n2oH6ilia9y1jCffL_<{@t0%bN zY(4w60*MX?89Qa*O@I=@*IT{&8*PY*cY@O*Y^YQ1^vUDGCs^E76%0m4=#9xhYq@?y zam7hihp({a&gJs^LA?IEZl0etf zYr~Vttxl=o8sn<3(Vmd`m=Bxf0Rc8kO~g{hB=Gy^ErD-5^@TL~8wqPNjx)i2`uF=@ z2!umv%{s9mGq1+Wvmhg%%k}GW(FWJ8LM{=L%6r{Cve;T~B|J??(7u@UA3K2Ve*SuP*`0JSjVgINM+~{>Yttzd)1f17@jhFT=6LRHSI62OKuGdkJI`Q2g&s5H zcA<458+3bf?HpErt@pS!seNJ#(N@wc_GsX(vr2Ju&-H~<7zG21^z?m;(22U-I({ zBJ$c^+MB$Z3x~bD0H9fj1B7~)wP^?W83H@>bZ~*`8DyGZD|#Iy68JB=J85H03Bm+ zb37c*^PAV(?(I&ZOZ!=csc}L-6;I45oW+q&?!Vxtur10r z4C!^G^mKI*T{-{;{XeGO!Y!&d-2N66kyfNzq@)o+8bm_6Ls~+*JBE=GkrI%Ok&y1r z85)P~hM{|aA!dMK;N|-}=UmtOFYIgYXW!4g*7_{-rqS=D1fTbqaN%tG#(YJdM!Z$l zuw*bvoU+K@*W{}$f|TF;bx7kA9@?M0c}6W8qP1gl4>$?BKjX!kh?qQg;3D{#Y)Nej zae`h_r#@40bT#_1^S)^sNUt94@C3mb*Oh>?zMU_>LEa4ow5fFVZtya$CR3Hl1u&?O zM1~PXtP_;vRX-VZ`oV}EM*SM5&(&B=I{9&VdE9a;gDu|EnnKZ0QpQPGm8BYyB8D?} zuv$Mq`u6-2<4~sbgF6FnKF3O2GZR}-Dw(Ka+rpEq%bOpN+yD3amx%%{NSwT+29+l2 zxeOw)Sss2XQk<{XsHY)va>(fC<#2!YfTGe2EpPN(2yR+{BJr1s>Hcjg2~1^(@ZVY( z_I+AnbP$^8>8@+k5@q$_T$(*znZj3o9Om8)Wxy#R8!Bw1!FqWPZMWTs$~lX7<|qCI zt#@D8Ik>s<-L!|I@=w&}*ahQ@=m${G|FL5?3M@4`Vf}KPV>Ka#8RtKWWVh+y!g{$B zPIBP8@tghc{%0gh!}g+e(_;$Q{pqI0MjiamM}nr-9+)odxpRwrz@75D7saI>{)o73 z!|QY)$A=;`DP2qOxqAJCG2NG-09hNP!=a_UERAFXf=dhM9r~dcWiLjGwqi!^3 z$NjpVS||-M=3`imWHr?w7LK`*^`dh*`-gO;#;wBFZ&Kx(jkh6((`^`iKv-C*s|{Hg z;-~xQ7`zeZQ;GxX$hhvgtbvC4#pZnKRDP5ZGH|%$4(a;YYbzA#8Em#LW^YBAI_8`? z^u>IJd?ET|h;I#od(mdOq?2q`#5z1)e9Il@3esC7ZV)NDfQ^n}4L2Px6FhX1#T_kE zpp6VvB-+&PSkdW6R%Z>LV1f(h8&laTok@5r{qw0SZ_KMOi7TX6ryCT3NZo;`SYoHj zgdb6q)Q0=AkMTtBUD_n;{*3-&lM3>>HlmvLJc?kwEpHyFp#t|!N?ebl+5x-^Ih3#^ zB>Ltq_FPidz7PIER`U12R%^05Iz6k500gUG%)vq7cK z-u8#<(r^JKPJp7j#11?y$G(p~fY7*DUU9fh2@$~_M?XQO$lS5+zGNSOy&ThD*rCB#p$K=1^y@7J$2~axvut`vEvi1m-?*Yn9W55|uQoRR zCYoiRLM7t_c(~M}?~cCGdb24u{=emi1?ojLW(3^nyXwy#bc-0s&Ch?`es^=YK6ZCB z*6leaSp-|{Km%kWslZ<3iN=UcVO&%t7kz4-*+stU=UVyc|QUM!WLEJ~h>TE6RA zVWx3ZWBApwd}7v47ADoPC{sa~yPr%am1!@WOMb^K;cswUS0E;O zqPfmwbpc!#HWKz#d?Sb+dEy%L_{7=?X!+R<8Mwr+s@bKS?{8c$9grXPEhOHBjD z3m;A65!LdLc`D@L_?)pqkQQr!aFEu@}`Tv{|MAjq*Q{f&(+#m?w~)C z#l&4M?#MHqnj#1$$~0p`m7;^Phbp{-fxx)$#TGipSEgu#uUuW4Iz zk4fRw41Ui~RH`)559N=%n?``GtNPk&FpYL~r}#HQg9KbFM6d=MDki4!N1cA^`P-L6EKRS%@DEg_uZNC`t8NKzZm#JZ zUFlP#4R)F;>kPK+oIA>P_bjPqJNEV1ve~@u1D1LP#ZAHQ>7TEmMN%J%(wMOyhmlx5 zR~+_xd>7R(mORsiPciGyT!NjENS=Kq+1HW#am+0l+qa6bgC2a_XOQQK2_gLI;v0az z*<7b!cK;R}&Bn>&vnpP_z44dp?G1^7Z5xSOb!T&^v!_ssq?UrzgH|&e`z_m>aphLT zq&=85X!^!ptXjbtS+8%!IZe_U+igSocER|sUOh2A312q&c@A*LgzUXi4ERu=>g~hT zrI8-X_kH9H4m^^xL-9x>|NeeM`}JO`1WK{cJs~abcY61A&H5z`kLE zoF-5=8`asy{q%3KdOal6_lG7xOulc{Ak89E={?^+mc*}oDn;iGm zzFyr+C$iGPSvNjUTYc%n1wj3>Q$_UOZ(`ENs{+p*BC&Z{es1jMmP(AYTG{c&m}QeR z=y^09o+qJMu3k@&kv{R^#ERFTXR&zoa9OLby&cviq-%3Kt}o5%SXor1Xl(P-z8slt zq`GqZWVIlM7Zeb&u#!P1V~PIGz9VMH@l&U)BO{flYLY9V#FO9q?x=7R(J{^1W@mnH z;fD%~&*z!&>9g-}Dn~T;ce9$6APGP~(Vs4iq8>~sQ|Jc!KB20@X+H6lXv$H!T&&%e z#6R>)&>$C$(i*0pkK;X*_#j^D$hlUxo2?p=sD**sts+$E5fk+>+XYOF6|GbOopMF~p9|_f=ulI35Zz<{xie0nXt!s+0Z%60p_h3=u{;_C*{R-i#P$khQ~vn{E2}l)q>yyg99&N z+&LD3H(7>8f9$nm;C0j~z{>V|)ugSP9)jJ`@bfXrmrH}gwf>Xq4Ycn!OFdJiS}A~( z`Oaq1q|L*3W8KIeQq1x35y8j^(Yi|QD@M_vwJ7LkDHq-Cn}kIX4YP~EH6-3O9nwA~ zJ~mQmVS%qC2#MuYLf?M6ynmXt*yIFvXD+?tgQ1)DjHzZ2QyHIjJg#NM-DdpnuGp<| zZSKK-6?4q$3D5{Q{6i-y6bORN3hv>Byl3&)yvs&|kUNIDy}@s)yjIBp-GCa&tNuA4 z7yc6-%Ds%(Z|rib&EDee_g%?*=d?4h3ChDjlY4SiO1rmmfk&P}%pnO?z{}{GG56c~ zu7S|Ij!p#w-}onYE<^FlrO6DqlxGS55(ZDeDw7Iq+y8>}0l|DyUm*KgPp_bLi>s?I z(JJ)#oygvSzd1838ms@OBFzJya1W331de4wg4p9SpOR~AxJOx)(Gl3eYS_Pt2^X8X zhgluKH0CrE6QHU_IaC3=l@ztw_AQ8^SUY{XbVV^T06)zb{Lm zKyK8>SVpH4`}pY65xJ!=VZHGyJs#ZZz6R!daIK)lc{#FZ&#cS{W{>@$3bvg=t09)k z@lBegZ~ZJH>wW`XCb|8ul}RWm07k{5iLMNkM1!+mcY1#IP|u36(GR8ICzIN!Lcv=# zzbUDHM%UQ4@5;AP@G;Gn+-;i1rgqq6IqU3vVN8h-8sMod0q^Ve*$|buF08IngOS^F z%tcOC6|4kpBM>*(^4v+t#!(O-Z)(uJ;WKwtI!g9|Bs0C3EGt>bLI4MX)RTMK8ybUm zS)dr7iWZucp0B-+N*ni2-p%bVhcAx#-%z`ACh*4>S>HT>8yirbJ}C9TdaHMzhEL<~ z_k8oIHgY7%-GO)i8|^s~#!lrkCr;%x#lOFbzb_VLkX$#0-RM6EfbaACq9PP;1A&;E z%hQ#U;P*lIXjnWp`^?OYJ7f%acmAIqllaK&GXE|QN7ZGy`33kq`=mIYpXP4I^^Wa! z#vG$ZCMfE;GyGEce5H3ub_>a9(iY5)R2h{F9n`0R5)Yi9!KGnW~+nN=AR zb&Cuy6WMR0qlfkmHxU`mL{|8{o`foTdj2L^?PguM6hMu6YlcHnCpA(Tk0oINUbJG< zleIqh{Cdh>$SelKT&Y<~7btr)LZwNrot8}UQ$*5whu<8I(zJd$T{ITNL`Z%gVUc%rs& zxAW`v8?(1p9{%}1qL8%HOkmZpS&x|^{CoX4?g?b`*A01f{NQs7NWuK~q7b_RV{VH? zAF@NK=Zw({5>)<7xc2sR65`M2wo#mPJ|;_Fj_`;g@M9zaH_Zn(3tL>~CuX7L6?3B5N{xu&GfQP}IE9La=DA=) zQ=tN?YidTKBQa8RNlWsTz%$So6y+dB=do=wdimo*lKS3BX9Fz@qJ8c8OvAEn0!3_f3N&^4H z8lOYip@CvD!ZeXyrreym+D3GJk7{SexKxcw-uwF`narNAG)2W4fi-U1MfB_vwU{ZA z@1!~gqn853kB1b5mJBI(`*uOm=tcfLVQwC=0z&KC{nS(CzxpS`s$e8B3+f3I?g^WM zq`9N{`Bu(|#P|P%rt@d2$`*rIdcNX9TE%evtLDoj%|hXSkWKjjlpq~wbHQHCvg+rD z6QaPwp4`H)+?HH{yBrrYd(oE}>3*AuK71Ek%I(Z_3ZmjF2L2Ch*@>vo2n(sKImsE6m(l!e4Y_RlVxs06mj49GO zJfY%8Qt58-1}<*${hqZlptYNW*rWJCDN5_zO#bkAV@9t3|Egr7YLY+nK4J7XNq zFV`7Ndk)U9FO_E4=Pom*Tl)1}<2Quor88A7n=Ylm13{)PNW0`K0Rp()%;8V$6-Auf z%32xNH5fnF929?Gv^wKmGA9{W{mK-+wdm~ljEn*M^D{pQ=cTcaIF?JJUyQY9*S%A$ z-ru}lf^s)Iej!+T(q5_)(GTY`9`MdrX=%A$GW)Xh9j@OvHtaBLVZ8MiZ*fuheWena zMjc+2Zbw^hoC$Xht#}q|Gg0m+FFUQZOqzG>S5f^#$*)a5F{H2c5YXrVo4!^|< zeFFCKLSiXcXQx{hRS+84k*0VHPp$}T5x#Bi%^0#yg_7OF4{0Z@6B*Q`a(=wj+c@#5 z&o9`&ZjyWv)fihZm;LK?Bq&R>X0;qjf=&COQ&={-E3h`sU@|&s!z+FXxal+h@=|5y z`qFdDb~-rc#R4_%Q^n~q9(@_3WH9>Zjc0J<`l7i9B%do-r~KBT6eXA7KlerXG0u{L zczvt8`H4mGczC4|o^FM1XD_(SU9t$y*~HEoyWh^+Va+@RH9 zgmDMf8GO4N*4TL4CoBiXN?qa}6#4>vIa$iWak#iZ;e4MgKiqMX2~eYWj8Gnp`qgpn ze#Rm}&>eV|k-ngC;*spgug|LoU9ex+5c*L!9)eaoo>$#m;fXY z-|q25Z|WT)bq%Cyzlb-FIoDuhz+ZDtn}Oz561Lpq-O_hz^obhd+o-lN^EZsiKn;AM z#tcd>!SgL{6hS-Fx4zoC>k$)Sf)qk~5A#emn7=G2>No+g2!17WzaLQQL@aX={{iB3 z!wZpD{nQrr4W2<^?{nWN)qfX)bxlHkTN*eT{0XLrlwUMoPoA=6J$R~OUGoo5M&u7Qb?D%e5C7iGPjrazRtIu+4TWI$Lc^!|BY4V|NpT{!snD( zSW7}{^PA=6M+u*j1^0>vtH^@3&f|gUQi7 zQdw|GRxx)G5-|8`ecy@>GV9$P?GR4Z-yq-k-AmporsNdUl&Zo&>+PtzT!|=SuOg=; zAA0&Z7o4>!2hS1J3D~|Rc zB~foipt}n^Z~Dmxr9{f4n))o3%`1Ob_#&>BB_wuur_#F6-0E6aZ0dfQwddC@YYG;~rBQG3#Y^uHI{VyVvVS7>fcBmD#{JxM%$-H>fcS z%~=Wzxbr&)0vFBw_-4A}cvwk&2Hzq7v!Y^uNtFa2#qblv)Hf;f`g{Tz2@-=YCKT5@P^$#7v9S~JZg;oWr!8XuUc=sAD291#&d$#67x0hp za=X9a4rU5;_YQ2lwKZL$BTjv&bGUOCjb=bL7zV9w9CFCNpEU3_Y z*e3w*!-i@txN(=E7xBmP(NX+TS)P z4|_lFR_oU|_{D3nMstE^hK7>>M6B}YBGRAF;wT{CNQ(!Q32;q+)9+li8V5p{yh3+n z-L?#n*|_Hz-aLy3VK9%cpL$Y9r%*Vqrw+F8kn zWMOo~_CFDi;^n*~MMIwuOcLmN$=BmB23g$n=%}U523BrcJosKMB41LC%bc3u@5bkQ z4yjkr;P@Qy+>j~O%gR(3;$=fuV!o3j2PdpwSlk{&UmVOCb zx@i+<4Qg`Dj9}0ivibTppTe;v{HJu*d5xNl#|{ zUt1mwCz~J6RvM9~NO4Am-8lx)dhqE%v_SQFodkD$9#;0#;}KkBBp+bCZ@f5JGM+*5 zH`wQ9G>jj&40ADJJ|Oc2w-$4?3&CfPVyF z+QNaq*@fW2`A?p8cmPFfG<5fnSCmgMm<1zDyd2nxrOxe2QxO^;8gUzb!drGnIb>Q) zWLf1AceR2i9Votm&U+F*(0b zBQ%ixohwDj@b@Rd9F^GBRHUx4M2xW1+E%(Me0% zwEZf=qMz1Os(@0rqwm3F(N?eH42HejjwEq@2l*j9OnCaa0)o!=E5>2Jg`a*+S?OY( zGj<(%_KtRmrK!vX_vv;$YKSY%so(=&9kLi<6v!4x^vROuv;cHx(OX3O5vhUQdvJ!P!x z%ei@)`4LNr61LlWZA-h*=vJSh(}il~lV33>7bB64A-Z<($)8ahrkv}E_m{DgZeJm6 z(+2@QL`AZ@nw+jkUe`uc1^FE<#UV~DYwM=*I zx|0@%dv{o3T+}GS?!sW`*8ZzTrNRLW1@Sc+cy-@M2z6fYbmqHVj|bN9YXODn#Fq1* zmwE^z|IjLSm*tk%S}zv(xC`lR*>Ai_rdSfhqR9P7hqOzyd=88VxU9X{ zkc@W3=Qpny^fdplr}@p~u9_`0Qer1LSgTY_xvNv~iul=?*NgIc6H7(PfJxoH<%Hoo zdwORYm!q$f#~{yX>ThP6vCocI9pkxNF$2=q0Lj<#>jTmNaY9Z%H&yUobIc6@4^=Oh z`L!fGC~+&f5Q54FDMF(4@HKKo8H`v$5v@U#6uZ?UXAgS5LPCh|Y73bY$knNw0C)qs ziw+NV|34Oh$c+a@bO_7!*FZ?{W@B#$S~fCBl48kj65rnZevy)_cd1-#dT30Dt`7n^ zUtv^CC}@I#sqnWMJuo!nhUw2s2u)Ci~$DndQg9iM1dA;x7Bl8$HI=gmG+iEck^K*24vPbAz z>AgVd073j~lIVTV>f44EWMBsMfJ%l1G zhyJ(SQ{Fj9&VCw}Ec7YKzxTmcjEU*Zb^qn;qNa6Xr?x z7fogWCCC^l?j*nt*3Wt^Al>XGRDbySc(SwtqP29|8k7^P@2PZ$K^1663t%p6AyIkO z6xY{1FyL#tN##Q&*u)rOyR2!80L*4S6niRoZFP7Vc-I|KhyU-=df>YGXWPk26D(MI zXFuWkfvHCxRFQ1uTK|2&&n!>BDu!FD$j)TYKP1h6TyeY0C4im!$h?da8p{iR^Ko%d4x}*khFIyK3aB+Rs97 zE~+5VDd?r0*O?q^CdS+h?o#q zDoS-n=Z>P_qsWQx`%oj`*$L3xJxndv?4@cXtHhD~{6m!_Qe%-}RwzxATT}6DI-&3p<<9J8bWlC0@o2Q>R0^`%K{c8_2$N>v@Z>Q`MtR#??kl6uPQ9V; zPJn)_Cao7y$0|`+Q8iYwB#lP|Jhjv!{>ukfGgW}g1`+p@tAvjMIV_EPSyCx31j=M2W?P-Ew;PWRA_V!V-tZ`kz*W0OK z_eje!Ai4=iE3dK&yvJ~uoc-s*x?O=`Ohw$*WU~0i7Z#{*v!~3iPk2q5pU1C2fRLMv zs&Mn$4azQTHYr$NG-dvL6lK$V#T(vlZ!$ajGI$Dv#iW=69j3l-o=PyF_l#YY3luDO z3sw|6qcsB&7JQ3GeLC4ruF|}LzVOwI`BWdm83M|j*v(uJpa+nC>Licd*Y(y|*-DVk*VSe5cQ+W6roo%Fyj9i}8 z9Rn9DY0o+i=L-9Xk2c$aH`QYz+$19I%gV~4qTgGKyW1L=lclxz9Qu?OQC1_;=Ao!C z_><9H(UCw;DMjK23E|btS76vFzX%DFMo&kbOmGtVc*wgBCq+skqHx2_upA(9s51EvzZp0J8p`yE*#5Jq#kC6) zecgRmT%R=76=z1zEa*2`Q9VQ9JTB&SC8K-b^y^<_1V0UO;ro29m|n=@tsn?`1F9-he7<;yn2hZ zd71wzI8ZugDk)pT?yqLm_--<?YrfvVqr=*EEJobF!T02>b#N;;Z@Hk7(uxzL=#_D#ZB`N?%-V_fl0JLyg^()p45N)T{I#Unk@wh!xG|DvI88Qxbh z+xF^##*(K%tm|u>-a=Xv##pX=_+X}QsEuVOYT-G3k~ptjgekq|BG>!+|>pLl@{X^!H;mML2G6qRzGlt!)BbOt&#@(!`E~Ycq_qe&m zMIXD~S~(2VmsXoSi1!wOFWsc|OeareKDH#_Rj3#Fsqp-(Kqx71;Jx~7Z)Ttq+xxZv z(^O>Qn8}{qC_jVTrD)=qy9=BiQ3`)c0Z%yx8M&!ivEs%3s}jB%-_{0x2AFymO@p-g zL!K~Zu&!$5o|hb+{VSg3(u%A65-aZ&^il7F$VB-J)?fQ#`N&Om8q40~7M^-bfn;Qt zF4^0bnPhy$cPD%=_D&JUqehy{`?ISv5^Y$?@+*7)y72ELNwW?29Qs>DN6%%l2ODDa z^C(oKFRAs-bZG8MGRZ~DXc=fwc7!EXJnD(D-q{BmGKwdghe=08+P!+u>VL_I_!?SL z9WjvhiI;I4YLj`KS^ ztV zcKpeYc~M*FQE^pSY~xv~xd^RPvPfj#6s}Fta@pp+^V$}_d)03=X&~Mqao*1ELCiIn1^eU+weOs9&qF$7(;_w`siAiy8uj9Aj5v}EMp0L)h(c{RaQ!xYp5mqnI!ye}R<9uLzCpuy zTZbl@@i@2l&(lqZ1VtgO5v1$GlE%W^s0n+eXxkSl>0=_*+S3X=yr6Z4Rh*1WYD+@! ziIH+s40un}O4Z!P9hhlS2wtHDBfa_J_HsaTXW!I}ihJPm57C~kyWTmQ5Eis;8*8Dy zPm{#(UY1mR{Q3EoZD+_3vSAF0@cJ~+rdInr3ItNbW{d9c%5QDTRy->g-oF+t=rob0 zL=Lfx9lXL3MyFRz+vYfBN|Xhgb?iN$5dLqPQRzg`_4%Rjs-cC*(<&BR?jH zqbTw8aQcY`O3|6UY~rfaY@m(Ljy7#G@h8DR{tC24tWxYA;2nK^?i$}_YCC{VPZ$7id$_d#9k9mVioO=? zQxc3y{?E&Q^b|X%YF35pXB- zT@K~k%3ql-Z&fpn&c+}#?@j}}7QKyRFPZw)ubucw%xz}T~Fg*O8O3RXMH8_q&aLXwqW3k zEhRb}zoeSHJToE3ik@rH-c*jS=qIz-!=dZ9R&iS;nNb%W%2}`ZYT0xeoV;D@Ye#3t zSi3|UuLdX4^SL6Tbcgjy%imAXXSZ}j$*<`?Hx$KUCej~`dEFTI4UOw!k^Q!53S@mh zhh`tJhJ|Uo`W5jF7glp#da~T5EN1!H#}uJ>+%9@wA13$my+`_G%|@M@4ETAqK+k9r z<<_a^^WQVvRlxyVPuYC9{!L;Tv=r?1YOR&vD*EtC0q?xtv8}YsF&NknvBsMq5i&bq zLJr>o+5He>osZdaVsTu>=ZMep!l$}+6u*Z&4tfP}66k+?$Rqah`n7|)Wbi1<=p`cN z`}~fCe`NfzJ#EBM)_Hg^2?M>?LxXJ+sBM(Ds^EP&)&sCYN2ZXzu>t=_T@sg)kDVyh z$yU^BL~>BhwTo>jy^U?(&g%-{!anXi%c80xqR%_O2;(F*+g@Y6gczG_#e^Mfb2n&p zLLbaYucpI*?4G_Ii$ZQ*q6~Ox#W7V5tf5X&8{|+o6~iwhi#}$uyD|TztIPVW^PBD8 zzcKa$<#Q;d?2e4|?8v)yB*6XRUzguln*{j1v&H2B!76NSN?jk9Kcv4D&&-SO<(YRD9^N27K{67B(-X6wq}`3F+nbRNjw@JuPg z2x&pd1Ypy`3RmFjuFd1}tFA~k_qbD!P(g#4_<6(B3RV#@(u;FW(jm-VzQxvb~xW+!XzDSXd%rE4u%sI(*KyduNyPtCWe z6H457ELg92Wg7@Xg>%%r)Z`Lg(hdjlHJ3WSWnOeU+MNqEpy;GA*ZjEpXCvt$aQ@JW zP7g3$ckwm8m2|M5r!*5i5Axegt_qh-2B`%gT&M1Cc24&@GS^dj)!7Qk$pppnplkWL zUrRY31XrffP!r)bG-|X=>bjvhwk}unudsE1Pe3ja_jEXB@+uJ0Jn!=HtBq#dz}0*0 z>j9(=Tqz;T(ZztYrz6{WLE8h|a=jojF%3@*cq725F^zC{N&Sica2|El70jC*_U63X zgOO_(Hq`Z?2R5ywc!xIQ+K0<;#RUY}Yu?h^z6!ZG$sEi(N2BTu1!qljF0PKCp$|0k zh5dtbwB8>B?eF2<3F)>uY0l5KWICJbB4oLVCtu|fM|)p+*>#@BNl3iF$Rc#~zdd+r+aOV*1T^)t1Sif6gDEIifjZHlArct(cf zxdnz@38XP1(|??CAD2Q)J<1QdmAHL20GPDtvf-i(xZi#GFvBdgi8}7n^X|2f#!;8>O_c+u^}v^;&mc;$QNvr^Hjy_Sl+eFyO; z6`VgUX)86pu3(z___&q7BqXCT_Q;PnZAQ_J(@JjJzjst-4?EHU*dJp_&t9E_XCDZUPhRIXVt9JSW*fQNyblI+6ja4Y#_Q{;Ltg)t|#|ew#}`c>S!rJ+}J6#s&R(oW3{P^?K>z?|8F+rHvLh&;5+XF-EFz6qpG-*Rzq= z;_scC{_{F4V&nQoakjOQo|M+!Kngs@_@hDIWYCMT;Zt>A9ux6s#S0yRlPh*sK~P`A zC1BrUw zFU32beCBN-5fe;m%xvb{UcP-ocHoDbVv8?ny|ejtes&#P0(!-mT2Me3)d97FIYC2= z_wO=-qseqn)}jotZ77ERerKxjWgQUbn{#%*e}BDt^7WO*UyC1VPmd)ihz&AZU;s&$VE%65@&Vj?Kl}V3-h9};cenoL*`)W%IdQh9B z{=Kr^X_;C2`Xy825Z=g9pQUXo5p{RYmz|0^wa<-`?F3RC~lQya}P~K)iUEII?p06nFS0 zT@AuAX!n6^;U7;WTzE31{lS%~8;tx2nB`@V4B}tpk$5qN6-7Z{cli4exPP_fSsKf3 z`vY^LPj~rIlU?7=E-SZnp#KKD`*<$Am^kZ#(-KZf=e{7-qEBTOyuO^@*cF_+l86rc-WcX7m*U^t!PbztG1o8O zDfzNum+afZfbnoX&Lk>r6(nR;Of<+l~rMmHPdw zl6`1j4ETYonEj3VyteUbSyVi+;YCY_!_`BgOWN`TK+BS7N!#Qv))4>cRNnid!v?`2 z$O?DDCO&1Pp@~9D!w76aqJMXlxn3Rwt0#g8G{kt4a@Qy!K?YqFn*r)*OURprUHg+` zbO7^q!7-poJaVSrFM(k9FzS)gS&PI(L#|$)sspXWiwS^%G#9T<1Q=CEyCf$$NAWK3 zpjQ72>`mIe zMAda$eIc)TH+~-_!B=EcP(swh*wI|EEgmb9)W_lBoRSpc_sfC_0|otGq;JXP=lLv2z)2x`!KV|Rk=Dl6H)S+{RWit-1eE@ z%8Pg({O%1Ti2&a10#iEtMd(C5mKBorGO2UGrI0f!Yswam3VdhVYl+3msRD=@@Li3Hm1b!F z4osAST^jpZ!Uh0JOWq`9Srn>Gu$+4FXMW%W90_h-t+GCnQTyeYKYiJfxNnpgtO5wP z5F2ks_Nz4j`ly(b*XRbi%=IybiqKzlX^7*%;SJX80N#LY&*+VG($I^nMlMjeHzhy9 z&&JO0ofL?-pJCxna>wWP!&?gK@vPTqGS}5s%FS4e>0k}BkAhe+ugaN7uxwd)3(*^W z&8+kV*EDL}yM-^7g?{1$jN2K*(=~Gf!1#MF3++{t^H0cg?;4SW0WT6E@I-G>n)w-^ z(U&0Uf`s@$?DAg@(+f64b^Ko~xcSG9o$7y2C#KMA_qHc$R!9G8#UV*(@CjP>ZIbG- zJcT1{dSxoJwPE;E#(qjf3LzB(6}D54Iibq8brNjCXHTD8eSB<1O=HY6udgD>6KnMM zpz?rIpZv3R%};cqHJc|41+e;hbKjPbKz)5>_BBzpcD_$!YsgQfH#SgXx!Ha8J|W&? z^!g2!MMfe#_lriuO-WX6JyCXQ11YU+E$8nME*T$r$ED@ltRPXmTo^yiIpdu;>{E3T zuDu&*4IL>R=x6;eguOF_h~)I8$Y;NwzaGc`!vbm*rmvwDorEPMwmLC%%>fMyZ|ZJC zADrDag=pV^f3B5g5S!Gh746Bu5J&XZxgyImmuCSa3r>FXI)hl84S;)J;74LgQuQVc zu^&Q&*gTN4o#@f$vf><1z6l?(z4$l3uu{e}{{ja%YFN3$QQVSDPChzMDnUuCOJ?|+ zJIm)u^15}8-(~Z&9{i9d0AS;F9J?sV!trmJd5mUPsctco|0NDiZ;!#MG-1M3Mz)$> zXY8gH|GJvy1WR#ck!>g9yTG)r0W>}BP+jQ{T{5RSNb=;j9E5QQpW`?szu8dzW3tFO zWYuTL`w`AN`ESpj9Cu~+J`ezzhFl0X#MD*s(x<2yB{o;|)u(te0*XP;uKLz?Ly3|_ zURJd{u^>`cy;54UF2c@Is%3g^A!=cmkIxim=9eKuef(&h1w0!xpblzTqnl{K?*`np zyl$mXnGGu9soq7pwn#7P{%yQgZ#%?QT(g6{TK5uinM)A4EM2MA*8RO06&9OowvRUZjto;@zYERS4SI9|wCK z=QSJ#utM#$iXJ_<_^#P^`C1RD{D<{H$qF{nW!PMaA$W>{agLo*X)iTi*9gBHr>&AJ z6`<~I=3O?HkBB&2sUWWvQ0Q7;|3Yc!wry0GO7;hh+=*Qp^~)}kS!i$PZi*wc>mYcu zCG#(YFXeGr0B^$dg4DQ`Z-BTdlZN|;1fiJ|2#FTsuC7i8=lo9T+mu$xwzUu)R)Pqc zZvw>?#^i*@tF?l2ydqu)o3V=U7|d@x%-9Fbr-5(YdnRSUv0>i7Ia` zA8gpX|Ey(W9@7mngV;%ib<9e?wR`_S9r2TL6fJpJD;ruS|J_DzbS3F0np;QsN2upq z#G{%Xi&eHk<|<(w_B}82XJ@CroPR6YGY6D(&f))rZ@*@*Xl&Pata&^7`p524%r_$i zw*I4y3ND|vx)}v__Hsb6F|m~1ENS)7LLW**^nBnNd{e!fq26pegk;0SB71ya;XY-1LYOBq!3e0``bPQ{=j$sF zg#fS<(|pb0-nrUx5E620;Hva=INDQ&HetCZ@LQcju)yfk8JCQ+$4OYUFV+;?%oG`X zVYWgScb7JYR7N!fa1Wyic5el#k0$PM&1x)W#sIB$y<%zL)z{jGpz459h;9tQQK-Np z3vKgqe7hHxEX+u$kRbj+6?*Kb@jLo_Wp0wI>$RSOly=~)lNPGNcZU^I`3m1e9(WPx zcwZ~?>5=i)uwwzLp|4au2k+CwQ}^NU=@mv$TamYQU%(TK?lcx7(dX0~kL=h#190B$ zpwwAE1Mrw=N!Zx)?uLKhawZl#t|LAiBy}nkc;f07+aoTOQMENA6G8#*RTs$(f89K0 zH$^-7&(85Vm_!m|1tjBqPj`UmbW(;H-^veeQXVU5DyR7T@ju%Gk!^e|pVdO%kA)I~ zX0PsHg31n*SBg!KR72Yfi4?*YehLd}Zye3^KM7Q;!bgaEfS(LpL$d>kj|yGs+&HV^ z<0Kt+v$;-1SA!1=WTb{9HGi+wNVf8&*$(G=W!IIwU3E?`o7%YEjtfL;q_(ipzI3-% zws?a*VP9?`g=tHALt6kByf;Pf~}uJ1#epjqzm;5U3C-Z@Ae&oT{HHjz8dR{q`b~3a6gRRsaJ_#!&A|IrHE4G*Nb>m$J-r!;d1c{O6Q4Cm&_zIh80)ku7xa<1 zNMp6+r8n_ydiaLj+@iEWGm+?X4+~p5iwYaK{J8meibIGQ|2k&Cb8LMn=rEQNzD)^A zlGw!(eG&doGIqqn(2+YC`se4F_EK4(khsbkO>LKgcHC_HoSBrp^i+pb;pTUo=W^Qj z>i<-34Bn>Bn%-y`8rj)kvvTPCe_Xv)R2*HnE!y2c8g~iq!686!ceg;}?m>gQySrzBzGZog5HFgO*<)|`|x3AP&Qi#bY| zC!vKlxai)FQ7%bDV+2@@=>AZ>fDSROm}}_CN=6O;?6`<@jO#5FFB6+CJx@gu!1_Tt z)Xw|LWe+lEwi9P-5vhC?S(^2h_hfo*^;V{rf?BerdgxTm^SRyph zp~~+T8F4}3eK!RK%K>JA3_$b{_XD2`SqBD?04D8s*{=u>F-ORWAzVBUADa5~@<;9= z3K>gwI)WFh-%gPdzY)%>@#}#|@Y)rHVOZ^T+=G}W3)6!l@V!}~Va0Kg!i|{X=7!nN z>g{FqgP8sd`TmuJrlSIR)Hcs}0eYxwuw?!1NlTSRC$+cQysg9gIy!u7wHg_CH3m!n zQv(YzR;s$5g?(pphB&kK&!0~`6gnw+mO`yeUOnOwr;q#RS!hk?MF0pU0(A%xjb|pt zVuq-QVUpC!GA`)_0qWZ*OnU!7-;z z)zwP+I1uNn9jQKUh2;TaA1i^UshCW9X2|#q%cj0zCA21fVQYU|MJ1vpsRHMiW=VK3G8)Yy07WM`Wfb951a9SqGdEhVbOa6HhLWd7M6#_mISCtmQ z0^y-qqdP_ehW*ASR~2j6#^y3gjAuWmVAbu;PNe@<5ndQN*LKO{gYa@s6%?t9=HK_G zL=%t)Ytq9$$k6k0(*O@C#_fo!D-*c0p#*29Q8hf9-+*)K+C}%ZsY%*%iBv|K9-c-# z#T;6(KY=1XBt`0NmJdpRv-4bZrGl9HKm`SG0|O@O=OBi2p$qaTb(T7S;Ywi$tc_JO z_Mq-l0qY;rJklKVnv|z~*B2;yf04iC!8FqBP2J~VTZMDJ0QY@mNln~nEdUHk8?$~s zfpz_pzWz5oAyt3Nn5LYQ+fK7aRVQ7zCz&e`PZnPY_}>x z=42AuL+5AP`&N$QHvMZQ9iF)lXCYJTC9q6Hkfr}m7H_Nh#HFRRRc4OSX1>5c<1q%Z zeta%LZg_*r#8@ow!C)Wd{wT6WYTz5cKji_6ABMI7r~wzp$WwDr2Lq>S1I$2@ZG)}U zTnIZXIgQZ6eg$*S{fRBMG41#;y^v8q@Y&#cQ(;80$NOWcf8pwK&`*2*-n%roq;NZy z6qqD;C0XOk6?+XtNSk5x-&batsH-o)2IT+_4{!vf+@;eIZo=-`3SWc7AmVuVb4$`! zL;eY9+F+26sflckN)>7@VY@p}bh^^W)Nxe11azmPs1pB7*i6GiCxOf%xY6cIoZXI~ z8PbpWZ;ppW-|J|8@S&&yq_@3Tc1yz$CRhMDR$hi_1_>%r-l~*$c35>efZD^@g9jYT z?vC+s(Ypd@U*H9MhpY^B?7W$UGo#>lC?sBCLBBY4e%OfTlJ``gc;jQ#&ajgMQXU>4 zmvj(cpj%0>qSfypj0z@xJw6S?Az<VkuT4uKdRQ|(@<@bDmCB2$ii0S-A!vn&D~H#VO#um z+}f#PsAvy8y1w?q^a7}*E#gZeDJwLCFGzrak{BD%T0dcbkflp@HD4$IKeH5hM_C|9 zLIW^DB?s{cWQi%(mJ>x6q#hCGlUe4=A*9#Wh7t@o73*gqp#qU1>!kfiU7<{^9_#L2 zqOy7e^8dKF?x&aR>bg@GJ`LG&JP`6icNr_TnR+U3@$qggsAL7C4vV$-!>s&zkaN+2 zci1XZ**99TEJS2Ke1M&}S*P5G>hgbL{c{KOHV6?Vb)-0iafLfQpqs}g!Mm2pR+05_ z15Se02TXs$LY@4oE{%y~Rz6R|`3}sxGf^HO+JrJ9)*2Zz9Hn*L7#~1Ki8;8>?1xoH zzK(oM&Os}@b#driu+_YV>gd6!AU*0xwi+vY(4MbhLzM6$bjoDi$OxBs z2_O!qOP1dqi?F+7V3Qg*)!A-Azte}t@73NDTfPbKh+^<2l|&iGppjoagSzsK_SsI#?#3AA4EZi2frzVw zy^77qAv^JH^eKqosAJyjM)qbu7inzK-?3)~9Gw9Xd|C0gp`Vjl6@{*!m|)QSOj z_{7OV;`?TOtdKHJ6%*v&zN94^RlCRz+ej1R7UsxK*iuNlKE2Ht<%jMtwf)r%pg%G8 z^lR?wQNPpCn_C|bW-qTEIP?Qo!r27kT(+D+^D7-jb_t<}r3rXv#CdJA&NDxRH=wLr z&x)5B{XG{!_SE3)!rQIvS)k-yJ}j$kXZ#U$Gxs~{HpwX`mqqtJ!R+`CQfNKk9Rp5p zidx9oSC;ZiwaM#%PuEflhW%5^cn{w=-)OV831i?cbs{a#SEf6dCcp-OutmPijMvCK zWA|PRrquivnp}iKfrWbu3v->qWj6k9DF&o|;p+(no z;C7eWC?i@NF#2Jjy$I>_vm9eXIUJb)8spAIw5^!zM_hV-y`)DO4M`mYOpU_;K0SpfM8dcYG&(%4*Y0{S?S+5N4T)$bTeIQ_f11Jp zr9rNp-XJrgSYk}Fu&tF;1 zXK2~m&(8D{*VrCj-i~j|Wa`}149kVy<14eb3?4Wvz#EjqBm(6s&67|w1XL8+ssMKo z@1JD#Qh$-b9zbpjBjbPSoMOC#dP*tcgo5P*_?jCcY;Qhmid}6qy==SG-0uB4K|F%m z-d%cVv8mhMWMDFs!W}5Nv8*_btRUp(SZAeTF~*RL_~jyM$??MYzi0mc4xlfz4!$b^ zK)(r~dP+iqQ8O)kcqKdD;O*Y-qW6yau5%PomHwVzx(zc9oN97TJ zYP{8`_NT7E=J04C#!uV`9ZluNXB*V*D`{?zuUPnGd;q?fEihxS=($%Gh3ja3$Nrku zWDE9<$+QbcY<>TfNy=}8jan$dZ{)0UmtGOvU!1$LBcQ0*C9Hp*$L4?(zuZ6PqgS&W z*c@p0<~DtHxV>noZOvKPWf$wu7w#f83SlA9(f8_XAQN%2_oLymX(RtHt(Zzmrf}E`@tG?6m!~l2izUYOy5bYX+ZS;HtXDo5exJbo}Ly z&_);__&{o1DcMlDw@$Y=T%ufoQ+vs+cdNEO5G=Pu$NSj8fFs-YnTfJSv&k7!-HgHp71PRFKBc&~Bj2G=U4m9i7 zU#I5<=OGjY5Ch!hXAO8%#*mFi(IGq3Xirqso!6gxp*uEVW}eEe+k+IyS;(TJqZcy~ zq0MQjcT6lWdZ*O?G5wqMdlPCcFX_Y!Chre0us&bYB#p;jvaIAif0BJC2HSZFk(wfY zo~VHkPNR^CPMs2euJiGH<}>4!RrMDW6D!WZ_((2;C&^SIdq|94U15!+Joj=PKWlJa z3Xiwf<#rn_VatIt_tf5ASP2+-hm&}0LX3Uie1GxbohXw(tjI#dbSrsqRmX}dw$fHn z-^jdRE(Mq9>$TVI1VZ*|{_F*6W zdp)qi`uI>CpwM?~e1?uWH9g1ZxM|0M=`Sm|gIvK32V$3$QfQRE4C)HOFUg)RuoyTA zAqU)S8D0Tb2Voz%Fjd$)T~q8vjTu{A{Ae<*agSCj6gDx^cU3 zq2xR>r59)SBx>vJ_9tTR`C8ytvy(hf<{udDX{OlN$ba8(jCTM_bN6>^v9RB$3Kx9^ zIg3mKWvi-G4~I^F?Gptb>Sgj-yR@7ywc-dQcdwN?=OksCE`s(x&#>CJm5!a=I4(5f zr$Co{H-GQxe7#pyRWWSV$hPv0d#*jkIc=X1s6na7RJM;z`R8vZAd*XbsM%=aSij^H z_4r!4e|q2fwA@hG)}Jll_;)DcCWsxt_bA}~^_6GcA|m3SX`_s0 z%ksRX+LDcWPZHjXG6`F1~ZAtr-3mI}@s$?6H zWp$iDTEIz_#kr1}a5{kbThJ<<=JL){yMvs(@et=qVz zMxh(qpbAb8k464ArwMl|M;3-}yD)HfS`(C-a&ZKTS3JNL;6l&r8DuqJNkU&x2&4#_ zjL^6>Q`INQ2PILDp*TwN98;HjfsQ7d+&U?AWodKxseP!ZO5$7WyWW>=3pi2X#_h@_ zAgeI;mrN8Fn50nw&%n zPzDaZj3Y>?YEcVfT~6!0zj~kSv1>pvpb6m9Vcceh*9N4s9)c7M`0paa-e*jS&G|u~ z8P*1?&ZZhGwjjE@bKN9Xyqq&U=DV9Z*HR|tWvyg=aOqZ=ATRZ3xXZPn@cf(SaX66M z{+E-~`S}kW-Rk$p^#b+qa8Xf%M$0s=KHkT-k)bpGVoU)>rwY!Elt!jv__f}WS3P1z zji8PRY0}idLjS$w2RW>BEL3IDp({F^!w!-Pci~GmACI%_Rool@?H7@mo*&@EU&Y3DO`S}^+)SRzZvsxu()0-#U(0v%ZAcN9$mA=9^ zKkrt@%aRfW%2q+}i81nye50;{ZKvRVzxB;lYHg`!QTW%+`^rueNX_v@5hbGJYt(%RhjBi7RY4CxevRx$lD=4WhNae4jMSH_ZTHN=(UXFME2t?Z| zyCrL4TU>rvA~nYbtgTYBbTCIe84^l)bBGXZJi<#~?YfCb<929Ls^5jC=2^N`aoq+U z`&lU3iW2F@KmF-3RgDNsJXvY+#amBgc56l+?^vyrpbybDCVDDsYX|(|_J*@_5>j@f z&sBbBR8-&|D~aI&!ewM4{^f`_>iyJK81WE{XzkT%fG+uVQm&k|7;^9Qu+8mq<}jdU zH3UtQR2*+xN&7o~!+!S)2~tE@rPZi)+UT==%n0ZgV6<;7=<{%X%Ldm73rj+~v6Dh% zp3xU?$$~$7BXU(SfYr^45|gNJ8Z;j9aU64AWi9am(<|hFPi`A~*@*R!0A8Pd6Q9g~ z%&2ehwCJ_`qWKhjrB~NAl$DfC4v}!V)Gi^je_`MH%!F!ioc%pvxC&`5xUkXGrDE;E zOS~CqxGZ!#kh9TvJ2}0@Ew8IUfz`NOF}$}K*53@@2_VMgx#;OCg4YYKE!QHV%K}$C zRvj49U-RR)Lvpmg(l()oboyXOPu{J+R#CIN6P7vQGr4!DZ3^i+r1_`dBSVAq8~ z5iT^IOj>u5_t(?oItj-(qSy%#c{ZT)CUOZM&i+##z$nrGr>soYxg1uQDz6HcB}SoF zmGs%jK}wKDom^ng!r1i$A*Pv(D_l6xY6>?6JGs2JeBS#i!N)Gl&3lRly<}@w(RUro zgi_uXYOt5ear2{cCFLi$vIb@?Gb3a7VQyx|)yW?g0YKMawr2QEy z2D0V2Mc+qjzdM=5?1{vb2Wma8S?fnsU*0Mu%nRPe9`%fOyI>L|nYQK7VEr`6X4c zLXI9p0E^EE816NmD2Z8cl`uXw@0g_}R3CDkwnZl9)^`gRLj0c*^8aEjUIc=J)6;t5 zw~LUw_H!=<-ybkMcvlw}Rj-%C@6`z?ZVkk|u8Q^sCAEEeO+ULoa>WeR-{0U!?-iC-nJaDzB72&yDhRZsTsqPedCJO(@j^Ud#X#6D+&I{LTe;TdxgX_MeB=UG9%5q6r_0LL9(Vr+nf!fB z@{5jDy%x_n6p#s>-i{-3^r}UH2(cK~SH;`o12gm*%mrovP=oI~xK%-0SRxIyT(0(p zf7iU;%Wjbn5BXqL+w;DzY-5Tt#&urm&+zXuo-p4aqhM07Ph3P~b^h!F?#a@DS%jX< zD(rvB6Y*@l$PMnq1Wam4h*J>)&`$UF&1CKemkSb%2Rk(iJkvg{)^c5G<;{a+&yIJe zp8ELs1djdcpx{9lVPJ1e>vQlkau&uqTu{Hd3pUJypU;^PTql8>ZNRjGM93F4PyqCk^$QQEMUTQ{2u0^h zM+|j^sq`_$rR-zN8)?x0jD0qQI8pi1w}mue@BbU%{f8}Lp`xO0SvGJaIkVI@PTFp1 zKEF&SWx#6_H3Wd~Y(UftLl?Fy7S%wwSm?rSYO>r4RiRBREK2#Ibt(K!eo`l(Y#hF%|^9|(v^HZ}% zt1a(}!_qsPrIn@5^B%nO?@ zCfZ*1&RZu87?mR9iL3jbADEWOu`^c^J#|CcLrz>wRH>;45$wxct0MnybZl_btpZ>!_ z5!XJI6h_C6He%E+IgdPcWNe2@(I8%GWhgl+#I zVwaIZxA7y|WyQ0hOylMwHd2rqsHCT0aLYT~ILoxM1}hC25&IF1Mo@`#JpFXEPXEwZ3yXe>bBvF;%zzkraPio79$O-RB0=k`i=K ze%}7=@U9}7{^FsGnemDmjB1pRCLAwKNiGcaaBBbj7k0q(6dj{+_+dZ9m?~$V91{))s z2tR)K+9pH4BC)BBeS-G4->k@#0u82SM>LYxmyCam9Jq_se7-=ZUj10EiGtTAlae1y zxRv&uP!qN<7Q}!t6epFdSb)^x)q>*w(3~*6 zjp$~C2hz*FzMD^wQ!PV?vRE5oN#s0xcN86!4y1eb{N)CckshPAevl(b*Vkz3mrhWO zs$-Jl zV!uKGcH1f@@&N4Wia=z)r+&z)+^Et?sn^fr?0WdbZ4L$WZ}e-tnM;RDt49hQ507I; z@V?_81w{{9^lx-TOMVFe^k}67sm%L5JK=^$R!B+>dXaX3U#t_D#Z&Zc-(b|&dQ;C{VH2W?mLFbp^RW4b^d1b-D;7q?{^ zoM=p-qNs&Sgz^v)PmU)z@WabVEpmVuO;Fn zVR`nV+@KN0&xT?R6^6Ivql=&Xjk*{mHt@TR_0PHY#pt<-Ps?@rl)<||IK-)HLI>6mhUHssme zUSIvjcb|hjklLt%UVQlFSr;-Y^;If!?#b}xnJrhn1P-X8`Ns|w)khBaZcV6DF+A^m z8BmgcvHyb{lpwiUK8ts&!g}X&bN_$j4gmOJ$oFZ70TjAl#R`Hd zAS*S+4a^1!xJ(t!UVg-`ZzPxtf2-4;x;|&P7S!8Ys6xW#eVNsbW?;CnEMNap#r|1e z{672n!U?_1Sy+X=R~MxVn?<{&B*z*DQA%K%ZS7IiFWZvu6SRq6$B9K$eL{!f#Z1z3EonLV(9e(lJ{Z7A>kn*$QzEv!7QA5jL%B()_ z%5}yD_ZQ3$J7zolsr#CN$QNchNCR^GZZtIwBkbL-YxzFQJdadEmI(|8%Ubj}(f)b2 z%N7Rv?}liiu^@w?E8TidZ*qP7Y$1S~+_0+f?{?1eN^LXZm+n*42dH&7adIlbiY>gh zHO3a6N%4m}wG^ngS7KRBr07oqMBZ^Wk4RctJedmU%@?`;nQ<^gL9q&{15oi=aWI#q zHO_S|!+It4UpSZ)>>cvw8cyVVAH8!Lc{plTRlkXDl%HMS-HqRR)GPN<{edig?SYhy zwVms(mb70q{{LD2n_q52bc&_Mp}Hlr2#B9`$Q78$wn4&<)rPDQ>}BWtosM!f&NUHm zC|L+uKO~t;YQtrs3eXO@7Ha)Tf_$wM%gBnTVT>xUzs)gm@4;uF zUkY0l6MYnPltz%IC+lXAJ`=N#DMeX}b(~=x3O1%|skoZ|!}=^D@Fx~E5V@X&xRy8q zd?E8)xMs%I19}hvwvsX0@epyS*@IA$0q1Lc>l9@J{x0I#J=)kSKIpdbi&&pF1mC+>$u2vcn<9D?lSJZ zEY(|rux*s0MRI26=S%giq6m4Mtq3;?3JOFU>YP2EPaAc3>gHEhPpw9NgPc4v0|_Q) z`8Mof0qJzH#3_G~qL7?a%M5b{>8>NL!=qHHxuXuRCn}cO3~?ICjk&iPX+FCbh5h~Y zs7k#^xQP4C&a4C&*6Cb3IY}K7;} zlz>UVq#>JNvXA5lGoMu=It&sR?_iIb(%_qupMX^$-w=3E-#ha7?cpIIqM{1UjU5xm z_rmPg{Ur(@9Qsi9fEY7@@(X2hR1N{b3kYztasC$vQv4{M30qCO{5V9kYhlhgeR;;k z7n_+!@i;*C8j&>J9%=%ti+zrK^{>PBBYYV?{DJw)@$^_XE8!fKFx8)q4&-4V>)W_5 zrPq^#&ERaH9DqiwE~7n(q!h9i63W-`Hs~bU`Q!XVIXlvSr|u8LGV|f=V*gXbk$6LI z^~22q`cqH!+GkLAo+Y@N=n|h-Yu4k+5zuPDhr%y#Ap=U6@X)3 zy@Vg%;M8Wv|H_db;_Y*b?J8Lt5?+warOeDKb+CP<^e%G|+Qya8#mfMdBr=MEcH-K~ zkU?aa7T=<5J(8fhw!x#L(#-F8D*~Rx_8So!fbjk*0vGap_{n&XII30h?aX# zG_P%WaWm?JCEbq%RwdsF;k@FuCzgI zT!Ub{y*|Gh2-fi=sg_-Bn~sjjc|N$BpT1aYyjzwGKD0nF9Gyx~ zr%&mH0#1TsNQ|?V%ST8k+94Suw5nzcqMfPySGlxHrsekJN4ybXunmkpsFT^I$t$(Z zbC3I?hduDpQc-f{)&4*^$v8$a-|i32a8XdTd13d7W4vfC1z|#k)er$>o5C-YKW8+=_<0=T{fclXE)~TQ)9jbQ)-?kT<}vYqATjPv*NvEV@ZPIrm?g8IBr$E zW0Z7w(2v;~l7*%umhU&0aRAkqXX-(wILiS@W_3%AD?AnjDK#To-Dm??{IOJ3~E zY(JpLMVz08xn3JK05ZDVKUa>1OHW<5(Qw-83PjWVubZ7Ed>Kw(b>^0q4SGPVX?n)( zBaRbYmgO9$$xEk%gy@69HH2k9>egLv@m05<;kx|zy#2^bp|Dli#9!MFS6Olv((JN>wyosS{6=u)Y5dG^RPJu`6&-9E1V`>nTj z7Zo9h`qy9Vf%yZ?Hphp8*QM*qR{n9?&D;;JzV@H^ynf|25^}QBqXBrLb+sedz@w9! zK+&^!_2g2JDU~%y12lu0+iwYGAMp(h^|e&lf$2aQWmuCIog`o@r?OLpQiC&YdX}zUm0j_P`2^&GjKKvKatAM2AlhH%xlr6w-slPh<}&lC{y1NF z^mi6M=~Jt|}B z-Dc1twN#ZF9y)Z*CNXLDAx9VYoC*rZnFi2Ud+t_h#))nsqLIZfq_+>Ko!2YvmsQ2L zTw@UgvT%C^wD>;=zU3?#iq_qK?S=eico)Nm0l_@(RYR8#tl58hC+UZ#mPy}R`bA6W zNma4nF%JVEyGSkqeAzkIFMGGA|!O}5Ew;v?p=9!1pgz0_DUJLF62yP9#4C}GCl9>&JS2ifI{&E=bgb@3+w^i>M2sxK4T zMX(b4e5^TFMb*xCt`dHSS7svh3s4B{+ekX*kD2-Dydxvf=yye;L<*H|L^!K5+^Nv| zuX2{uTIh|Fr$FpgxL+PK3gFy=ZJ^3xMLg~?G=Bs|f1y(*G=(6SB=_GrW-7uQ?@2wY zg=*MXx~J3S>mT4Q`nkFCgXtuE`2LfRG2Y3@8m}$Dd#TizJ{!TUnTz{fwOrCHfjG>p zx0N`v9(OTn6WIG84Sf@Ya&{00#Yj448^(-Afs_OLw$mIca42tC=;58<3H}-ZUa8MJ z=Ygi4>Re-g-E9u1@Ad$FFND$Gx{f%Gj3LL4Q;~|L5(Vr>o+uFDPuGqCIXbYpn)?Em2;y8U&c8sfwZ-=LgJC@js1kvTR4rO~EkK~+k_`SQH3|J@j z1ktt0#-|b+{bXzwlqn!3kDwq=i94G4vc&O~zO~qM_8`lhFg}Z2fmy!0pqYSj+8}|~ zVUHCjMuPH!6lfgpdIXR)mdI~HyR_z~9_Oconj30>^UZm;DowOzVPeu^c06S?h5w2P zZYea9BBI!X<*SzP4FJet_^6P!UpME2F-tS|t(qf$|0!7kTI9T4V1Tv9n5SR~IfdG! zAiq%iMaqcmf_ew!XtBp4KI%)X1{ZGo`wKHG^vdt5^&VcM=NjI#h%wyd`kDcPy6ue? zkGsvw{ekv`K*ZAoW_(Yc=z{ z#`RyWa|eo*U;{cOK!$B{msIK5SE1WZt7VXK%|;SZ-_XGAwqXaAO5)-;C?0kW zSSQ~g^i3fUaQ`_Y25t*{IL)|9Lv`rD;Nf7tVPnGr)h_SDhkmFLCxmr{ukqB^0>gVc z9*<}m&$gJTsZ$$3j}n(YBzicsdWia=lDO$@u~rq+_@Xc@_uT{G$|uZ7o?}NhJNAs9IgH6+2&;Gu8xVhuKwI&J zwFingyq|dInirY?#ny!Hx43h$O_GXj&SuAD z^m)5&&1nJMH#ZJqMm;(Yx-&Gwc$`<0k7^`edYb5fx6!6O6Nk|L{jt;Foc~M(uv}GX zP#J3HW1T_&=lVj{0bulG>-lVnY`j6d?mYpMg3l|2paI)&Rq#tM$WQ2u03Z{${ zS2=tR@$sJE@>GNVXhl^wdlX(QcK{IU&VH)Yq5Wz_q5EsFf227i;GrecmN@HGB?)zJ zw|BgzQP-oJrYv96sLk$BoigxIJm~bvt+0NT^k~ahjAk@xs#IwfT9@C+ijQ;NHo#jy zmAtv7q-2_9W+tm=$wAjOoC*t24E^9D@R;`0N?~?b_vAV7C6U)tSiEC38(*bF{jWXf z*Uhkt{u8L_FYUy8dhLIz{ecc?d(Xx8!o85Lb4X2YY zA!9?5cJMGI!qR`{1f0o4;Wr*`!l)1bz5Z*UitpFHWIG7@ss?L;gunOF{?jKE-#-%3 zw=QeXgAk`~*UPt%{Y;}ft@op`)OM+4(!^dKTkiqL96gYfU2MqQsN-1LJ0HMul>01Vm64+qOxrgZ`Gp8L$zSkgPi z8C^4KT6)ys+oiV9+4a?jx9QzuXXSgSK;~d?gTU=IC_i>BA?Sf<_GXXR`Vz73Ga-K_ zCl-4uDmOSeWtLCV=LDpF`^QP;Y(No(|BC?3i&p6bqb*7qN~<%h$DFs%yFSMU**LB^ONrnX|F|p1S*yW8&aUH| z^)N02<1Wj%a;>>8SV+^J*yx4Ct72Q(nzUo>;&3Sf$pRS<<={|!e0;^aijK5>cWReL@PIg>pp2Av z9QwBzs~kbCw*lf87kl9qWfq?rkMR@HY|j=`!-Whce<%dd?}N`2Y1$+REo^J3Kc&1b zgY&5tsKSiL{d%zB&%}@yB5vXCJhKS6(brf4rTv~3fp zm$=IA;#vBXLTElXnK;f>ONJW5$)k&5+cQ%NqSCDAdG&=@Ik#-y@6~6FWT>DVt8xi9 z@UI?fRp%Ub1f_L2M6PqX>R+}wVXP6ZbNzD}jOCk>V} zM;$da{4()#D5HL~o3%jLK85&oKTz=ECRjAchiU2o84ZwMHjjtmw|TSW5ioaOwMLwu z_G+RImPV;_u3z!*Peil8uB2%7$<~k$unIct zvJ|=q&$ww!-KF<6|9SdL$ZUcm2#IuEn@F+F-m|C7re9icvy@NIdSS zC#9VmzQZJmU3DG)0~y(|1+POO~NsokU>nj`c9F}aQleXHXohYiDhf!3BBohS#-v9F$XzT$X9Tp`cI)Z1V zm6=s@t-2;AR=-u0dU7Vo^nd_dj@^K+KXSL->koI8%}#M<(7oK96r?E@hKiYrJ6l_l zU+szW-!$}W-H;F5Nb}AAy^?i0`uW0}IsovVn3<*AQ9+xk1vwZd4qc3h%mJojSnXg=oo1nM9qyTiE4Fp29?A&mZ$i)G2v8tR;Vx?db8Sm5rZ= zhQb<(_R$&~L)pAVyZa)e;nxRt5=Nw!=pn>B&XeIV#?DVSRA-M@5iSCW)@_h^<{rvu zw1TLd0zFImi3lgXct$ed^g~l~?uh+&2C3rBOl`e$ZreF3?ZUaYpIP&jZ16B0DFYWL zDA}x@?~V?>%}`%8Qv6Nc&jem;TT#$=w_UGqQ_8fvyUSRQ9rn;d{_;sUJ-QwKE~O47 ziJoaChK))@A-=3z+f09syQj5(j*a(GsxVqDZM8qEiu;dz&$IW14%2(N zioABI#qK5R!qszsD@swX+;{k&fBc7I37w$pY;WZLfD!+XD(E2JtIX$V3Vxh%RD zcu?s=-gbT-*J=HE+2Z7=j4GLnH;&Tk!N-tvCOA65)%O;6@QsVBxMVp;qxPo92qaek zm}u)Fn8@lZP%pE?3E0iyV@acB*(*_p3F^44pC{(p8x~mav5J$Lf?E_m2!MolzpkBo zsjN;!Hj1BlA!wCn58 z+Q4!S%y&G6%dqtE<3j^CR*u8Wk3Ma9dvB6IiFz)7w7XIW%mlYbt>x9rN8C>jXIjAc zJcD6`n`?H^`&8X~-3=6G**N&LZ5b5--|?{HDPJ0i&Ppv#L|X0XyTDe0NDo+rWR~{$i81n?Da*D z@4&=9M}m7&T`^)FM;D;od zS9JpfOv?f~KNI4AWWNtBhr`50lj&@|-V4ON=;-@gJa;}FVjRAg@qQg?tZ z1&w?%xSXA_<qu zqhPlejr2@@N1n_tW#JpF_V^C89N<*88fw}CUNaI~gHukyGWiR}{~EhbxlpBPmanN- z$p3@oW~ornJP9|tS~{E1PPE3GgTJ1z;I>p=?1c2uc!gb|O==Z{31=DMMtd|M3^zQ1 zFZ8&_BJf-n-+ltXc<`{mI|@?NrkI(2k=%i(yFS!tM%vBWJLHnQ?obEMB+UKR@N5;j z1seU{NZQNIubBx(@nsD!yf8_orsD0kE-c?^_u@Fe^75Y1?iqZ}3n#sI3P&`c{&7q} z`4vq}@nc48hywT7SQcU_g*Y_(1gccJ0f=kF)f^T3>QV-rf_^fa%7LcIU{cw@l&OJ0 z+AoT)-^`n?p1ZI`u)HWyV_yU0)w~OdsfVbSeMNl-xqnw19l&zSExK@o+Qn~dYBw4J zkRcWL$gfvU{ii zr{gA7_Xx$4pdEbfr@$>K{I?>T43cc1BifHxKLHA&q#=^9Z4c2fiBXP76fHErIc;0S zFP3Fa)<(Xeyb@J}UDjXCqYwfEipNZX4yb&+<~>Tjkz^A4?jSf%DkX%d@*asZY~4~4v$JE`yh9ip zkw1p?|M2ted{lqJxnCm)Js{^CdF_~`00VsY_H z)ZTnmBBxC`QcEp`Kn2uhJKG>&|5B7l{9`nor3lkpcvt(imZmMg)qLh?iL0RG{er0e z7G_vXiL26~c%pKxgN85SZ*XRAW5Z9=J+pGcJiiAHn~$f=xd#|RjC$b5+?k>s;#YI! z^{TOJ<9{k;`9*+Uo*)(*fA~i;*{K>H{Du4h%Hgmb>ZGx*8FCzBXlBKB=$zrPV;SdU zFwAa@AVcfy^o^u!ymSYY0=?_FX9}%Z5k1|SuL?kMn!C{)>o3BPG*0lJMqyBpxD-W* z%m!{9S4(4i5s7Y_MC82U>cSIr_RsU?eM*sES0VS{q*4FLoXCqsU<90oJNV?p*&Lc1Xc--+s?0-+uV?JU~0R!NK$> z702|bEu7;v3?RFtTAQ#hH_L?#9x8>>QCQoCQW`f*A4duv8pyeEFtb-7C)a)Fp7rt0 z!q6jzA0lM=<)}k3_dDb{QjMr0c>O8GV!6sn+VSA5Cmg<*d?zP4B;bYl-?sp!8z;5Zt)7wt%vi|mGZS4FarpAz;f}DoX z?vsip!WBHGR~{Ml*N^h)pX-}cjU}t(b3ZD9!-uP-kSAMe?ywyX%bfDaEx%K7TbD1FSKCxl-1 zkL3v~s=m!m|Er2351odJy`e!R=vPrj1_pr6Oz3XOWc8%nrkqOj3Qt)zo-^%(2L9pV zQ_(lq`Dqe@-&AZd;X`WMH3;=Nx51e%;58E>^c14(GXZR}=>SYc(cGF6Y^wC7O8HPQ z@(*5nj|I!DzuvB%Rv)4{BfdZWAx)&`^r1?zoT>Chqmi8Kt>R|Zy01OKy$|@oN$b58 zwb{b??b|P%D-8Bn2n~6VdS4y#x`>QZ0tm2gso-}WdqQ&Ut{XmFC~NowC(ojcG5x)# zDPl&qGqzu~uPiqfl!mU3aCeXKm{|RX1);)LXoA#FriHXTN5A7!S=Oh)wXc#JjqYd{ z7Ji=iB(ra<_FtF6AsENnu2iN_b=t3l_h4gZ@E4;Hz%l#LF_ zt@GSiGOBYG%iI&P|0B7hvY?=Qw*5&}JaH`qKV5lM960?y4XlJ6IehWKpx2H>Ae^$V zI^K!MgXPq$s#?cw$U@ma<%ze3aUz$hodTAb|g z8|D~3Nwq%f1H;O62MO;IdR8@RsnegMvs4ipY;>(Ce-S!=Y&leOV?e=o@p=tH(FxvL zS;#4mZia^WizKd)Tlz6Z3Q}!B@kqw%e*eU`8h7n)DEcSX&Y|ItT>FoqI#xrYxWWqK zY8bkrEAA(%Rw~aZ+_b_v8+uvcZ!5o0vqZ}kI?jAfQNp{6V!txn8$+v&|wS-m-skr>6yZX)lc`M zzJ+)x^L!5Dd}c0J;&V=1jrAx5ni^COXSsN09oo*a@_cfW*bGjGfeIRbe}7qPflA8H(MDc9Hqm+erh$;r zhmPjvg~fxTq#7W@9r%Lp5I@%kZ2i*Y0R&2T&zQ#+NkJ&~*76~K(dUCWN`B+rgo?VA_$G_fUhiAmTYI(F zTJD{nZZL`lf432dtjFOJOXJg?b$EGFKsjH{+{1C?dq!8md3!aDD(SAhpit(<-iif5mAjCOclk(Ec-}a&k&ahULfOEwFdJ6=G3S-J|`df6V0o(Dw&V zzC6QV3+0-{67#6c7N}}z)rd~+Z=W-7;DFyfA1>YY<#)naIxo`8J_oZ!^fY4~&Az%{ z9--h(2Ku?($mb=L)PfNI`D6awIZbrtcG(OqB}3-yRdo{$$#6Z(R)H^wzw;MigZ{|? zh$6@4DqYBYKM9=+^u{y0U&)~@t7LTOwypzdX;4du>~Ai7^L0XBXu|>OUOny-IUlQ* zF{UF7-&aGnTumxwniA-p_m4HJy?;8A#4mc?MGd5rQXNaLxM;b@nIXy#^Lb z4v;mT$G}+Gy^4aeRW7*J@{X<%zE0=vU(lViD_--kgRrOOBj3wDJ)KvGL&$!E4i=a} z8)XG$V?ZyHkG-*q-5;p^U`u{c*z+Cg9B0!D;^^&2XsXO6Nz79cf_lD=FCS5iFL|xy z1Dp$#%aFw+X7a>sxX4!UXUvR;$o#ZR37VBrrWk?K%bNp|qo((Zxc6cg{BriDZ(kVX zKib(@-6uxJmLLb!7Eq75A7(s8slVmz*#fVGs+6zwue1E`KA;fs#PH}}a29tTNnf^C z8wh0#WwoJOY~$75e$#%2ro?pkw)VfKxq>_@#9n;Px5Pl7=&@~Tt>i>2I$RI(advUl zO&Ep+d)u$%ISe@ zvGCg!Yy1D ziyvut&UGG(Tt7SVo4BE%b=)^ds!n7+lDtcG%+x-9o(N#k5wOSUi{yi zvz5Y&G%YF<3}8XmLHH4&?Law^SYmiBW`VVm%wcT;1EB(ZQ9aElD-Cx!&Gd3t8dG`R)54xe!HKk8PR+iCs$7cM8(&Haub$^)*za2~ ziT9GQ_LzU(7s(uUa`&|F!L=Ctgv;Y>Y(DGl{+6k8h8vv+5GStuxUO4i=&UY87!#@d z%pRFzJ7q`NwaDNK>X~f3ozjwLr#mW%lp}nqZPW^738LDd-u!wMd}2;Csr1S525tu_ITh zF%U%0W-Rt0#GXI-jpjhObLW(XKR`=k9oHU%zdzi=!#?MK|DDHDI-MI=0SNbHQ9Re( z%3HV5Z*x$mXRzMVgTUcX6}x3y*b`PCx6SH!6?M_&Gp`7e`&mhkwYz4h08({w?b5EuVk4DE_=%{=Yh_b9$Z(c;VSjraSp0MuOJj8_q}{KlBC*LUZm9lNnrlr}9} zvCP{AO(DdOcNww`xQA*~#N7G`bF}K&HoHiW#c$WQ8b_A#KB@x9kG-Doahp3bXFOr= zQrZFJHk;PrK;VOUL;!2ynM%5Us-MrlzT^RHt6}~v1G$GuTd@pDhT^(>^?5vzz-X4T z=r3u-mh%OlJp?~p7*t;-rbT;MBzIz;Gv*W)^d6m1Rfm|l0 zChJYVU{LLB);(|krILwkDA#(SBfoCa;bDV$^)swioi+I21q@1|;p5_VfCD0p-TNTk zGT@7~WigIT%skBBqJTJE742s_m6FWV^xErv7AC>Z6FOlX9_I5eXrR-$bA)Jjuy(7{ z8XEtj^28ZJSX@@2m;mOdN@xU9GxKN``qd{DK`SBOd~GQZVNG2x%R^LGk=Xp$rOLb; zD~of3E{F-wq|KK{7fP{#HoeWJm;a-U65cQ)IbC_Q_xGd0z^a#mrlKVZ%5CcWZ5!@2 zc-?A!jqt!4NWx#Iq_1@n%#q2lGP4F35hDk=EL^*a)_eX(9 z$xt%WRuo`xwz}(!(4C}`FB14nUQQDGK8WW4>@e>RGcn~)NUf&ZwpLEf3}lx|gehO7 zyUR%)@C4~Qh0QI_nnJ}swsJq0tFwxKZ%9xreBgIvbd*U7Zgl?A_}Nl*K^G4fCNkH! z^LKx-;7Dwmid3KPo9J#_^7*3rE=!CLp$`U&nIsn>AfX$&`t8lYg}0p-3r&bWq?0__=$_Dc(T^NgSvMpn9 z(s(h#8!x$4-{#u|?H#N*&(m$z#|!yC^EO8}|WPr)-$lTcCX$*Y|bW?}OV3dWkuW zS^VA)A)}mI_`#+E?{-fOj=GIelJ!Ar;xB#ej(iUa6gtt#K_{c%(h?)(1TXgHP!9(g z0r@?^d7E{o8r}yCzZ%4H(Ru57*EbPtYm8H>uo{{~RQdi8I~;ty<2E8Bl@IfBED{#A zq1`0w^R6)T12joTHT60n;V$>T?^oA_euE+&XbVOrqBWJL;hq(BbLBi_p5@n?*A5Mx z3X^W)cdA=STwEUPhaFQ(*PT?d$}BC>YG;RBuDuZ*9uFfQnE>y!?kj2+5*eo4eEiI> z3zb&d*wmeGZPhXRuEuS!`N2FJ+8h$vOv}HO&Yrya>$F5%_x~fN_wO8xW_* zlnlH5(XD{tQ=edNA_3BYjy`l{a>}?Kn>z|kw>Wo0&I)@PMCxK@LEm%o>IPL!0_@4* zcWE?KiOo-<1j#i`V8?xp>coJxulBN&RXH&jO^qJ~xI?}r=#$4)5;0y& z!=~dCEhQX3aZus61B7opku~Xl@>hP{@1GoS8oc;v@91UKFqtKl(GB%&M}=V$`t!DQ zP%-tEie7}n-^Xa;Xe2gmc?Rg-;dW5j@>1JM=UWzc#c8IUz!6@;Cq6ERZeV9V6Txo5 zz7d_IEsvKcp;?(Xb!n(^W_TRAQJ%r)6H0CR@%VYOREn~HI@9{Eh&@+2M~4i}|W@A3!dqPE@vS~_U>8HOTA zIf`85V#S#%9x?~pSCfSPT~#GTgDO&wVVG!EKEFB1tI(6C^_RvE2ZolKPt%9Z&_sF= zRVI9)SwN=n-`v4XfQhN`atYMn%6E(6wc{s}Hw4aV960m{fXIa?b-$A&>H1OdK^LdS z$m^vyTDz0pg~nDT*dzWR5yP|&2@zMtlCLTy;z6>BrKxS5?5Wn-!VQHVqBj78KXPfV zqA(&}9f-*}fo;R!Bzl~d?hFzeR?sz+QE0!7s#@qrb;U5%_-LP1R%ZV^RihM?$=%HE9*ZsFVQ|!nw;TR(%H$|hct!yQ|2~VG(QCIR(rx(U+cQ*D zWYN>wHOJ6^H1XGdyIj0ko@m{j4qCbpdjkt-QT=lqKG{eCKy;EsK^~>p@jPD?t4zWo z3D@+sCuf}1yTGa21s;`|7p`7H)Yjp|^0>AE6`@$H<>Xls+cAezJvKu32>1uWFJQUWL5a>-6l&#zMgHyq zNRCOjAK{hiq;h3sUB^)4l6VQ+y~*+#V(*}^&A2gE*-hlq)1%&i-K3d5@_XQJ%HNN^ zqbkI?z*_o9hKI}yeY`zV?i8LmY22JcdZT3Zy{*9L_v)gRCj1g+WA-<!z39Z4}@7Gz&$+!v#ooDjZ&^TJ;F>J2)Fz5Uh0BbV4-tFad`wuki(?Q0It;M z)nSR%hk4f#O<-l60y&^dLY@wIuMi@D10M4vwXBD;;aRgY zNHV$Kz)24ydd`iK$52(ts!z5_%17t<{GZK4V;@|XAejX#AJP!V`1?Ts@G6VxI>Y>k zs;QN46cxp-#Xsz{@ap6t$v$3x_>E-|(f0W_%#vH}@~bwCJQ$$YxRCf2I$2O?UKYMf z2^VO$a7R;bFhg@;$7IMKDh@D=rq9VRr8W9<0b~5D0Kr!DnBX<`HOq-gQ=rC&&l7;| zH6AbH-exL2x!&smQA8tKFcp;?KRP^0A~Rhp4jyYkfDSJgIh8Hs_s)9hoFOZ9b3hRv zCnO||t7spD-JRL6Q&iJx=!7+NC_Fv-%cc@GuGpoNv2H8@dXB|L^!CTY0XYcV9~>QN z?w6UC-3d$=^Q6Q{KpJk~FXN7p=|#Wg`hYK#S_tji6H&Mm`6)DsHeK{kQNQ3t6D;qH z{I>q>&`EZJienMt^GtLUf0A7OY=0lmau&DIQJc#tdl`)In4!*owsvY?D<$_1zQ#MF z1&8?P(rF!IvU!&(+1s$2m1BV@Zq8?^Dxplx%Uy`7J;{Wia zFJKX6I(2MJ?je>ri3{fCC@xXXbb!*miBmT87n zxm<|B5V&khr(_G9N_fw~3tx~Dpi4%~r27mF6i%m+9@NM4pWFrfqmMy89Ep$dy5_(3 zFfnP7O5NtJOsnFyj|g70Tu?i1d}EzzJh;^WRoG=S9z4D{I7^-~e=Q0m9YNmj3}PSZ zh!VP(fnulC?b#-fuoc`$(tke4R|0weR$<#f@ih;UgL3_USpd(hIdI2B&}QoU#up-- zACfocz81H~b|aqwC35sBe-Ldu74I)agnlR}s?W~db*2GAFV3DQK0aKW0=b9BpkmF* z)J`09?qht>eR^B$|66cR(866^T@hCgE!%We^hEpL&HKF0-}NA|EYuhct~53_&ix%3 zQAu`N=&00bE8O4B&*1Y~LM7(Ve?i?8-g&rl#&N_#N3>_EIpDnFydtf32sM3}cnJ+f zq~pG{yz6p6;VtCndB?(vA0;dDt8ss86T*r0F&du7K7^ciC@m@ejD4st-ypUuK=(GB zP&@HjJ7cLO@AOsoLLo(4a0oS=-el5en73Z3xnuygNkz&f`OwLF9w@v`fFbgp0Hhb( zCap8Bb(qfkxyH|M1JP8`crQdlk%u4~_`{KI;GRODr*8LS-}g$DaPa->ug9d8KH~gl zZWwj93EmMTa?>ok(WZ!Izf>8de_0S#pxPEtillRl>(7 zpL3Gc$9aYhG4*(z8G9{FdPTm~5{YEd%VXiGozB&WJSx_~2<+S#7VXn9p)N9|+A8s> zBFaFiw~&)DoOcknq4<~-0Cqlty^hHsOh&c9=zVD6X%#D!^?WqakhMTwATML=PZ;Ov zf|V~|Eqrcr>OX&BB!TTT_WR6ybv`XSLXh);9kF!$H2Y)cs?dz6L*g6X?=WQ1_!RFI zl_hT#L-)Zfc)Aa*XN5EJyAf*Xuy^DnOaH_lDE^PTPk=%^{;**}zV`cGC_GB*oUM{r zDsAhk%@#E^t@|cABHEqR0;Hcp;Z%MX4KReHUoJ%~&rQu*j7rJ4owB*}OaW@^h(LSYx)HBiA(8wt9ThaPW*O z)h6betggV~Ux0JXpzv?zX9vFJXkI4=-RsA@R|-VohRRYE@12p}bY9 znkuoQNsvQ=aF6 za~B#n%qnA;I*EpWLe(2&eO)&4QuQ=3^aBOH+HYA2o__Uy9EARylPwOXUprMql4Y4j z;o%VnET>IqSERE#kcJ$0Xulm^7P_0vavSes2xr+Xb=mHOX> z6A)DOh;88h;`}SO0~z)h6K85RTr-cPq7kkROp`g#^HApdHM7pGyyf1oO zlebkqkDuQJuHAbHRxP-o11Mt2Wz6%am*aQnLoD4a2b_uJ7%NjtQYATk@)>tSM@-(a zWk@E5(> zKLBz12i?Foy$Rpv1gO1#^XBTCo}%8}YXNUv+8VIj^Zg?cpqEqoiqav?Y%mQ-xwr>v zk~RdD8mzz&XAFD7bc~|k^AjVuz|Qis-O7wDe+UmY-=Fr{^~X!um-%yp6(3`*Ca=f^ z^hf-Acn;?ftZFn{J@IH1tDq(w_DKHbtVMJG#$=|&rGIU=kzQtw-^2|=@=|EfeE+x@ zZl8*+JRZ=n9QfQ2y9RIqI2sn|sg3^}b4@1>nU-3s(Qjsv_b@&xiBGpKEu0L{U`H}e zA<3glS;s;W^0EggfbPNo8k91^2SXtEgowKQGEx@+77qk`-=Yx6LO7rTV-kHAwBrfG zrOM>~is@Peo$EVBp@0Z47;gaBgY_lcKsr2?HZF?s8$doCvF?slDU<66dn=@1ULtFWY&eNPgGpk*>N5(go?t z+piyxN{gA_vMIAIx@-LQk13?IR{+C(S8k6JpLWo0wOa4bp6Pf~_Fm>1ACxVA61p_^ z$)$2o-qk&tlTFQe(Qni*XdB$|h4(9uroNA3j#+qRfn!F$mAir81A zI)=DhTg78!r0%KBE>kCuk+5!ZgiXYq(GXUt z#4jXuChdCGRi7h~l|B*&1eB2BWj9dzsWxfE>QE*l;jX6qDV_eK5 z)m=)mdlRn3fBNJ(fU90AQb#36ik&TKm(C0w)SV{4QkdjhZq+y_s#!z%@k3OTT1gsp z9J50Kc>l4BnmV1v!whO`eU4XNK9J4iqFRGv&3V2*l}G-SBJkTjPflxYz0iTF(y=Vo zZ|WWBexTM)_osLg>LDYEZo(HX0;**x&--j>8%?vx%ZC?^2ks2`AAnrJ>%4%uzZzj_ zL&E#q-1Rcj^)1a)M<-*s)v3%kp6C7L`fSx@-HHEkSZ-x1PmG2I6(5Xnw{vx6@A2zu zb$28Q2X3v{aNLTP>ht&Xtt~^SFM_xqytXv=k7v8Z+89>)g)bjXu;?s4T4cuX)b~I= z37&v-3pR2HH8h+khMmAy5IsDSX7ouE4_;L;FbeQxvw@f}fq!eXC5%xy=jbO09T1NO zco>;awXygm&jo=Q)|>$e2%OopuUTHnw|Wk=L0<))2NM&rV66@`!rh@k7%p)xNil2c z9}wK4L{~f@cr!a>(y{L-DFk|&KJVFw>ey{5lc~V+?dgKD*z=jqXbbwk0Y; zbp*zk95^7`76oOPZn$Cc8$YH;A8CD|1+J7Bn8gX-E(dBbBr zJ6Xnn9;xRfq|$`H4uMo37UYlyTWhdn4WE?HrQK1Q#Z!W~5_@{fyVKL9p(rT$q5bF> zhD+``yjb7S?z7eIH#8m6#xv?(%S&t3TUi9?1bsn~n>e~i{C_Tg&gba7+VtT|Lf0pd38^pd3JbL8IoG`e{G{<@Kc8}M$SmL_9c z6>UIb>kswp>{kERse`HWGQk$S@g@4CioHP{OuZx`YaI!3c1~q$i~XVIfcjTCN?u

_&F)JKy7jgGR|e>2fMndQVSDC=Ktj8>sbSidM3+kwmydP~*A~>BiCzkQ?Yr+1yGsxTO*(H?67(&EW3vK`# z7rCPeD2W2(Q78DK4VQr6kN=ksbvD}mlkZP3rH9LkDkqd^izv>Ve149fpCt_I-Z;}O z!QB!LV5o5Q>8|?YU)ydVyh)CU!OR$2s*FS)aYrC|sl>s&8+u=ym>sGrzXJCszFc4$R2FP^#*5 zhsDnEk&y1VS`EorCQN?!f75H5I*>#Ry?v2#SWH=jB~;Xu_B*cFmn!jo|8R~<4ecz( zt{QR+nXx&_8yBu3E*X)nXXj^Gp)9ZLrH-A2bVQA0SD8NTG;@2L<{smI8P@B#gPLd3 zPcBJea4C5VUFOg**d~XB1Sn@Zne-Q&S;+Z_Zuc7qVa^4w_C}2pJMi;9`ZioY(Ve%* z`sR8*UhF4~=7F0;Gv8}mH@iG;KBOo@8nU^^9}0ks*uSYB``X^Wa+$_-;JVdMU@kz} z!K_v&+7xP(9ORf3o3@POxR7Ca+t*A5nin(f)N}-}iYiyeuFtePEWNA%v-Sz?Gfr)~ z1KEejuQ`bLlF+9{K&CXT#0>M!>~u|KXdwYnI>4nr2(eETAu{f`cYor>eNCcB9cq56 zijf&(!5iF&eUOPJ3y&@T+B(Hvw$lTxreMpB1&hNpxk3jK%?SI-BG)dh=gIUUjkopc zmpq-PW~vhh`IS9L6ssfZ?YGRlfw3FA)ZuG!h1E84T6gB2#MJ@+-MN@#?2uqAt36x< z3XU`X?nr9qo65Q!&z3346b})8%i)ula*Kk)S7>yNe2r&9{g}^VyPtqpA_Jw9x@cA~ zQ9qNI_`27J9-_2?wb%#GA9SQb&&0&Jto`!HZF#WkOC!AHo~Eg-UhNE)PRbd=^+Mb} zYrefol(oOx{CE(aW%iN zr1JR*E_(V&(51YefCeU(zgNgMGiN*u861#HTb^28j@MOui`-3L6TEq!TFnp050D8q zKL5f>bAo3?jP2t}M@g;4#Ro16!)P2c{-K5eq`_J$_J>|rFeP8cWw7H#HVg6kx3!)+ z%1n@UPkvF|w`z9kh*kTl-RZvS`kIUhtt#A0g=KAPrj0YvGT(HkCjj?z;Agl^Yx~H| z%YMJ9TqaZ|6w@{&NK6j#rDGnjL8QFuHnOKF6|GtR{Vv*(*R+}}d=x%i-yJvFg3WGkJD=nP*Kd4Q6*sJNqULyj18{2D6ox~n{%F@ z(Xj&4D?f$RhfEKa%~vAHdrv+|^(f@LK*xCdBcIm&DWzVFcNJzkO6GRj^Lu2@6&zmd zU2L1k>MBIs@|sieW4avv!iPCsjQ#jFNaqJwyZQ8(V}6Qbp}m>;*R>F)P(TP@a6)k7 zT1JKI#BmIyZgzZ7y)j^wc3i>eYK_ci&_&MiO$D%y-WY`dte7^{eJEJ-+!wx1!FbVD z)XtV{iwZjzWWyVTU_JetTC9Ms)@3gMNCIRo)I?y(u{_0VP$IL?!EY&Fle9aZpsQVP zy!PJG6>v_RVN8S$K@u!OMMBS~?oqD??`~$C0s{QkkF)dZQ{FQbfBm*AOADtFMLch% zSImG7$$wR+V zTGV2YVY6zBcL}31RgxIi{LWI01rE1`{c2ncR)ZeA5ztv$|E>oKoWQPnUC8brKd$Cz1u)*_1A0mkiVM|y=2 zwH~A2P}PmMp)H{&+xGlLLlg;B$+e$%l!nVPru_|Rc5<=|)WW6Z`$^#@Hjx?!g=p+i z7`&_0Sf$aq_SCv=!b{`Tn1@=2(qzUeaIuijLmf|F(obOA63!9xwPX=pu|Udf->v*F zmpau4_z%Ld%!7Um=GWccp(M*ThtrF7%O(^OU$; zV-)l}?$Wva!D;XOuvz=`$f(DOH1-RR+xaA!+wCg<`DR9L%sR3w(Xi_I{yge8dl>Od ze;D2=7a(K>Wh(_$e|-{?{X!Dz^1IXElKO#&5`i<=PTwE-8imp)>efxO@u~9cEcvb{ zyMthUao$4UG(GB^Oz(5;io0SomH=uf7?xTK<>s~}=goUQCwC+z>kb9ld;*I{Q|5vC`lggx8|EUPq|+Y@BrSN-)pDTiDE@HwITTeZZdp>Io2X z-fkjRnk4T}2pM5uVOFpU5K_x`!o#!@s}x)wjK`Z>ETM$`+uy?A#VF_-ip>W}5?n$3 zR*Ijex|(EwQvu%B;mT}|LWa2jmZxSU&}7`HMjLv`B$Sn;I;9=6m&#%N^&$L{p+sl# zj<-;Hv%~iIbItv|**lI*<+XyC_cjndH|`EC;&Ppy?Llm}wqDw%=6k7 z+*#F0A@til*dw*XA`cQ2!Zo!IHVd6zr-C6>R)H7$k^Ljxr774h#Yl%I45kqiT37C< zC7+s#KnQ(7ygKBYWZzL4!B=da?)F?1dL`iB(LV*@e1Hisrc?@+N7NLD#Y_3#U3vHx zK1=emN$J7pHAXM8U^c}c2drM%Pq~_KEPh%D&4JT62V*N5<4=*ZcO4IrZbSt6J}gfg zRfiupVD&dROk@RqiQyBk%9b*jkb{!S%GzEh1nqo|DqGTUYWb)|7O_DwWc}YCRd=&X z@9O&iZ}|wk9)svYW4t@Q%y+OIGE^aMw&zPO=a;^D!mGdr{-Cdmoz9WJ=uFWr;3 zDHcZai-}hmeMz-fnpc13{E`FENX#AeI3VM_8sThbWD3x4vk2oSgO-9tG z12-ENPC#XqkjXcVqda{%V^jQU%rjAKiVRQ#^h1KC5MB#+O27H$#^WWWIQh6c{~hRd z8A4J5*B*SYG?F09e)QcGDJHI(p^@QE-?V)&BZ05mEf1hzd&byBgw=}SPDHh4RgPdVDyM)?b1)J?LVmD=$`>9 zj!5)=d?0H~i5mpMqU_)|fV{u6@Rkd+@Uv{Q3v3|f+W>w@cSjDZ3#vkmjBg7lksi+# z$wo!;?KRnz4DA=Iqmg>X0Y9!7bdn4s~@dd&tMSUpJkvX5M~LX(gclIrXc&MrQ2n z27?9d!{7H~&T2+f{kEZa9RdQRjK;dMLCe7fEkle(<`ZFyim#M)u^f`m=#W%EtKs$+ z0>yQTD9m&=hCWIV(^d{S0)SKbIRKa9j^rfj1CWJTs(7;zXzWJ|fUV%4MLsRVu@N7~ zS_FDU?sGA5!g|O26ChJUvbKuMd9~B_rL03lmzajsn0zwv+0-?3>B0S;S7QK05pBtU zXeA&;g7wiaH-L?U+l-As!DEE5L`E3%!mLH*5PdA7xWEE>-ncZ}CXA^-eiK=aOy-CF z_vI%o%yn3jO!N@a>h{En*iCKaIO#BqGV=7bSjeYQQ4n)VP&-}j;BQpyL-yED_*#CE z>|Ww`%w_HE!OX{`Xj6J`6k7mqsM1UzSoF5ak_Kj%!Syqtb_m7tTEUUowx<8V3P9XQ z%5*%?gRW7}a;uT=kM`4Tg_PB*UB2f5USdOU$?h(qU@QiLeHMkmA!2p*PM^eVAWtlHmf|5CDj zQL({oK+I#>YCN;Iq;!Oa;7+kAhOexD_Qlz_!f0T;jzd@yCe^E zG#>YEFj|T6`m#xgi%suc8)fgcv;#Bca)SL(5C{_>fd1W^83appuRbum_VwF0^ZBh6 zGisv&(bGmigZOitsd%xyrKP`Y_;++r|xChP_OC(1GA{@QyEO!11sMrxNm*Z_@l$A((QZ!efnRu>^!XrL%CY`_9a0@yQ_c%4=W09onzPbH%7bL&HE9~VheYycezVEC zKkZh0j}8N+S|k=PZnh}8`n_CjRK+zSp`D73vgz^z#W^!SkPh1{iM|oXXZ+off6XYa zVSX69WpA7V9deLd>&K@1Bjb}~1(8OaMXZKDOBm3V#s}Rex@=_x2KrHJSQ_1+a1-)q zk7kB>%VdT4BQfZVBN%Q^j{Ty+3u09`FpU}fGk6_YZf>N^PhL63aghg=DZPnCOix{h zVu1=`#JuCJW-j(?Hhw)6r}nWpoZ~mpBS6~^+z%4_g1WQoefY0qTCD~SiZPC+gPZLv zvXjyu3oEoTs&jZ{gk@YS7@@zAkRdE+KG?H}V^znP&a5HBO;bFRMhslS2G#27pE>o*Ym9gF)h^WjLVfCuroc{>>pktKE-mYN0 zTA~2gd3(?rF>T+EkIVY%A+KDf%+q~|Anh+xQ&y(`tX<=MEZqcN#@vmHmJ>vH?aROR z++)w2;%SN@7>*O94V_=-EfGjp9cFd|*+s$f3=~F=c?ar~4C6oO#ykrx$|Zf*Lp~pp zoSAVzy6QF8=xLBtHvX=1zB1DfuMuQNB?aQB7VJbc76G3HOX)=DIMrA@ou8AyB_9tB zmb=`@03?#3h8hk4HD^tQg{Lq>BLL$Ke@Z?s|Hm9>a!0YS!DwO<+~WRq{Af^3Eu`I zKA7bKzlBKQ=8Y$BVAUM>KKWJQ=-Jlp4WzG{-W9E+BhTnC2nb4B`0WY#J>k1`RCgU@ z9yp#bRA;(j9yedOzQ4&kkZXHcl4SD0CHDJj%?+Al?4jNLADVTo=M<y`67z~b#T1z8hI^YFg8hk}FmetB5TNqJ6rq(v}<#=N)U2lI{22^iQX3`eD!ztr&O%y<7$3s zg>rnDDt40jxw}$X>AjBQ{fIEJ~HTe3@oY>z!I_J}`57P^T zFOUtJBYu;D;YbG&(XwUgSEx}YGI+V^pN6fOD+;ksgbe%2l$>mvoNT&Ewyodg!JjHG z1(n;-t)Fze?$GtQ$ZGH+piGe{7&H5 zNc`_^+v|oB!r#R0<$}grJPQ=6j-646r)Qvzkstw*{l_x+Kyh2cvoBRfFkyz4XGdqw z=kORf7bM|gqFV}`oT_-|6tG1zrK%yl9MpbsS)N<0V=gAxpM^dc5xt!xEj^>=r|msl z_SLGtJ*_s&O;+|}bm6q8sUNiwq7DIIyW-|- z0g1EzU*I(Ue_d|>+ierT)v^UhGf#%CZF;*jbPO+jH%*eZ)#JSqg&Gu>PG(<2YTsUI zxIXio!EreoXeW+MJu4k41ARfw$Y7p~uI*uy>Lf@fb}mZ$-14(QicMR`q~anQb9Lw; z`T6kDW#w=H$yysg!T@3jp@ne%P?>GPQk!UbixIrfLt8_q7jIqG*4VeNwI4l@78;vP zv^eXP<9FugzKtPiGBWCTek{szneaJ7s;tc)#f)-oY`Qb|AtA8euhMh=eq_@-z;(Qx zo{5H+`nk>F>5aerDyy6bkofZKb1hbxn=F#&I4`fuyiteX^7JG+&qN;U<9@GlKce?o zwflfrnrDyc<+lIOcIK`X*S4^9&^T{t$9>$`>d%d)?l+~C)xIC8%W*ia+jih=v$SVE zQo0hx|4stKRnYpc?^{zrYxl0Xwubpv5oNM0?1Pld2_7=OmWL9L*F5&ssjwpL-`+JI zmyb5Tk#8$?x3kIqJlWjuk(`n7KOKUYVmN;@>3C{U5B%O#f8U(i6DS05JI_Zzk4|Sv@^by9tJC6}S#8UtQ zxgqK;Wf=}<_CdNjf<5dT2t;Af__036uK&<0)6!B7LhF=SZH#3%_}N$C@Jw}tC32sq zGlNmb^a8w{{y(PP`91D0{PvzqCbn%`jT)=5t;R{)sIilYZMHEQJB>AIY}>Z&C!g;* z=Q-!vf57}Q*M9H&Uaz&*O<7CW@6`fd=p}T_&S<$EG${6e=N@F358csk>1XXob+9A3 z7F6sJp!*pu7~x`jYsHeNM)VE@6$$85{0yggFO6VB@9*?Don~QwE*h-(WQITkR3b=p zv>P-)!}xE@On_L!j|geu>jEj~-%g<*U$JNDsuEzp*dW%=FBR^j{2exz&&Co7$3)rF zUp=RNJSAi`rV-BeUDw8rS^ZryX6-MybUik3fDpiiMMXHSx_Xj=@Vk3ltQtfCB(~y9 zv$uJe!au)+cPr6jawYYHEQLz#!(87F`V2Ip4DVEK93u!*ys?k(m-4eaYd#cK$Z%;b z{c}D#o=Tud32|29Mk<$w@To}U?rF*b*fASw@_`p|p!o$w7=lC3Ei+ncx%ElinHh}H zXY17#KTijR;JHEH3Qf_UVXZ=LW^+E?E_0dR5Me>&L+^K^8g8`?W9=SVo|h9D5L?WZ zueVi7*DZoNvj>SCl`Nqh-5*uJ?u5s;?bqzcuS&mvIJj zz!uU15B#XB^O!U9_@8i^qjE5uf5NvKe+oMYOGt-Uw;TXnYBdbj0kUcl8fYE32?>I2|`4yf>vx%_OKAF*WjPB z`Q&PLOIec5M{0KTPvX7W0UNvrxoG&;YQ}rIa=)`xe@g$hQO#JNp0*YXys+ly8Lmbf z_JC6`e$OH~+s-fg$eYmwoYk0b^&PWRR=Vbo)(_lSg7Cvw5(;ql;CZ@qW)@~_03o5M zCsX5HP8g3FfX+xfBAgSxZ~j7mY6Ys=Z<^RuZjpb#(G-|sEzUUQ#)UW3Pp z$Ys@?T3cE5Z6fEa8_sNR`w;J=jUMs@9uHye_gcxC`Gst*uAEkKp}h=0dsd`f$wL4y(fPzhBLxq5-`Wy~M$1=jyO4Eu zxox(NW z!`**pLn-}x$xNq0;Je97xq$6^y57Fc10W30Nc=;;OOKvO-J82faeEm8H9`Ej+N$gQ zOZI1&5Xa3e9H|Z(UofD@E9fJwY<=1c7p}(OYzQNo0-O`=oqbpY>pk96IUu4R9 zf5Av}(BZvAx2=JVPgdL6rtvrKZwLuiM+nO#PS@Cytebld!>KJUtKiATyCySz&lQPUs_vaBB+97y$3K((%1E8zK(v=!!wd;`|0j~Z!)F@~8=#8zKo;V1gX11%#S zaFeaFr(=zZ&KAUshHp-tJFUWg^zlEpNVVarmfxyD6>L}*#p^bk=h|az>yulni9cJb zk@Y;JIqV56g?7nDe>*J{375Me&=1IW5jyG(}s=&ly=b&wg*Bl!*&)Ix- zD%Mt?K}1(hh<|LucNx8}7k>hT$L3a&kdD9f`Mw@5Mi#Oq8u!2S6`~{j{c#6NV#SdQ zg!_f{bEu((uuw7Wu=vcE<y(al3?*u&Zks!D3drY-x8el%k=C}F% zewU5(F-lQrC))4+f8L${Ge3~=sgQfklf7+{5mpb}9?!4Jv$gMh^?kIsFZw9YJ6p8M zb{Q9WZ+qS~db5B&dN_0IJpPE|I*cI|I(mB`#}>+a_VQbWCi3@-z`sp*uB*olnb z?OcoGx949jl||xg+j_ib{^Cq6UTZ5TrE63p1}j6^_GjS_$pUKBbx?jm`|(^6zD?DW zdt;2tzmdm6{j%ct*Xa1tLvXDgSEa`IZdW5Zo-Nq6j>8ZNSmbk5h^*i4^ke4(w?zt@ z=Y;i;4a7u`cy3N{`(N%Z{thEWxUvm}gojY4UlW+3s{bU{cVKdF1xWRDrqVYHaCS_f z#yr7YV0!PVea8)JOQt>?2E!LJhM4|&VmpHe@P=n1AdyY)|AC0&e#Y2_wuUpTY0sZ` zk)az(eUH+~{Cx!RBk(~K<}-~%=##)3QDaps#`;3m`nxlH{A_v&W+YQ5EB)$S@xbM2 zWtJu#rHjoAR4$p70aa}sy)7YJ#1{=Hpy@qb(XxLgc=DyLVap?PAbv|D?yU{-G~02w zKo*sLX<5x?_{|C(o!sYQ_EHbAZP`#}GCkFm^A{{q=6_ILRtb_@;zNkBq zgEii1U@ncL(4cK_g%;m0WPSpuWYRIOI1JFiXu0$^h$Xl*mxW2W(^liH4Glc}JR~XDP*b{O~dDMV%wZAd4l8g438thOqKaWNhYizM}7i0 z*gGxVaIWdy%#xJ790LEYKbf#bYd+^`qy7BR2oRb$ zm+7Rak(XT4_3EeafBd;YI4En3s5Xhym4z*ihDr9HL!ivh&ulBD{2_p}PrQwc2$G^q zxwTAY1G~f8iU@@fY%$}nE$?k2^pXHR)RnmgS7_zj^-&hyzrLUzisMln7;Cjr6yt;m zNUe20ZliU-<@R_|l;A$wS1$Ba--^wxT5%Y(qJ<@kDvDo)`cU&HI6j<=#?>aI!Y&US z1R9ZN);#f&F_*jb^XoNlR^PKX*3^1~nuRJi?zK+;oM4?WmBRsS7;)J3RCOss9sMs4 zI!Fu7Gxovz5a>ZDh{R8Jq2_H4?YLj3YeHTthS>Bn(ngKX2QLUn5Qae}+=+pv)9#Og zJv*J}&sP$^z@LslJ*tKclQ_F@2vU!W&9Gzf$te^NDE?COowxMtmkBWc5K_eHBOnew zrhco9a(-zVBheo0Ay|Lz;8ya%g-+CMc)GQE-EQ-)Udk7t^iZqk5L0baRsJb6tm2s$ z`AiKub-wSF5ZUL^o=tyIRW&%|oUU8F4$X44B4leWvmHJAqy4Tl`0jX0%8F|;$w z$|jqgnL2$WJ=$@7#5A7`7DoK=&nwnT&EooRnXm=E0w4}Ls^6`_NYbp7x1F^Ls(8eK&c1ibA`nx=$Sl5kx2kO z;L8CvK)QcJk(a#YrvU&{<-1Z|8LON#H%!YHv^@TcO@r~XmuA}eQ-2B%r-nkGFM9u&*IMAF} z_7V)`zkTFe4|UbrWsQWLh+2F5?$2$o?=m-d%9txo%LxV*eHTkbTxW^Lb#w2l*KMr0 z10dlUgp!O?AOt@v&58GEZ{;jn_N+#aW)Hz8$bzMQo}`oK*w>X5La-0WV;GO$)-onJ zz^{0%v$K&y_ywdsoV9k;o85Fi75D!qsFhmavzOA5TJh{vEIjGsje<_}Py+6)*|_Jt zrIS6aM~8N@}e$A0e`cT|4QM=3-!_=dL-X4jh#ejK7RafrQY#Mi~w z0`ql>t(u|)*Rug0nO-`F?z4?bKWecbI+$mAYjiZ-+7Im%_?9gl1D*b1#p264SMql3 zb6%>fB)yNV>iB-w84^+oGx7Pv8}x~rw|-E#Xq-E3J z079)gm1a0<-LWysP)zs9FLWYW;8BH1nlQp9h*k5ocq0t%0qH2nOBJ$fR8^puk+r%| z)hgF{>?^e?J*ogydaEL@54K47i|w|NCu$27QyRHW3ke-nJUrp{i)TpV!WKFBmv;^{ z{qgV)CksWDs;&d7{)Xs(yPS6Z+6XS7<%Wdl9ZMUJ>n@!l`Vl7OMEV?D&3?I$eScAx zFI>=}Nl$l|Bp<6hO~=Dz)|%Sa*~cGzAzW6yOcPb+`hEoS)s6Hq zPS-@&$u{tx`Bm8XO92^lkRc#;YzPKET))ZiS==aAI!zAT%C+FA7bcestZr;h({?S( zeMGidK2@O?Km+n(!As`>oPe>hK)=qq)YeSW%@b)*Eya!=C=40(?uLb-lm$;s_XLn4 zcoS=J!d;UaHR#n<472hVTwe0)UYlsxIw^k4s>h@LEx)51`eKgx14wWHf3)8&=~$(% zf9e1Z7vyyt{ob?R7jM>h7UyJJtnB%#?Nh;d1tP~zG7H;KaPPg@?*RgT$Ujof#-3!z zr8RV)CFj}wBJQYPV9c&@x}pB<6Np2s3j>@e=1>vDt2*8q9XBf%*Ho>nzk7cFychmG!D_s$?3r_d6e=9>xC|n?8-z0G!Q{*pGL@ot9Fo zhydD$B~Ejs!d%`MV3J!#59_2MOF|<>!{p^sD=l-FzJDH~sc5|tj2x)&e7iz0O4*tL znNWj~_YcrelExXfr>l1(e-e1TSVX_ZZ?90Pq)-ZZt$CcA34}^AzQBQCYv Lua+5 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

{qe7^6qxIJ@rVf^E_jn#~M)aAB>4Y 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�^mm6_ihtm^>68_*hTfw zL^!+cr~2Na2nF+;Nu!7onr-DuOVK9}5Q#~Pkb%g(uli!F(G&)R4X<*pAj>{aMKUT# zxI!d@`tzV{k80Kzm;$Evo&g@1n}kX{KGGkv5%Xz5_!Rf6q}$hypa2a<%SguUT*$-E zIj7kr$la3e<^orOw8zAE1uaS@q1ey&*o>&;e%nq-ogfLgZU`?G|JW9);^Tvvl?4!k zGNHYlqPZD4w!!o2qiR1^C`E@>o5i)~;o=vh(4#b{kpb1B{q`ysW*hpU*2EJtkM>|# z(9LYM3)B=zh zgPm7bY75f&ZBG}u0T%Z!;Tsb9)w}bpsbh!#qg|emdk>MDS(X|Uqqxy1gat?0 zrm4Z124gp+NmHxqZo7Z_WB|Tm$6D8L>gP+TSy;;^6Q}~jaVinDYHEL@or1Ocxlk`H z*GiZ`D`$Rled~FRMPm$IHoB2&LkClRMcH=wR)v!Dwb7KpOJbLCJygNh8{djzK28n) zZ0D&HeuVlylLQXNO_YBx+Af5+y*Dc){q1*m$4l%!8vBRht!*HA)ptd` z0>Zs@Atlw`YVENpC7P`C%*xQOd+?DF&6esU%tCX@_|W0DS|Y<>FWs>$=@xI}OSoR( zVM2)CYZn3iO5S%tY@WBYo*ljted%b%f&Y1|kl^BK(m$I3&gfGwURc|amEALTbbsdwpS zubm73+dztIau*d1mRy{VOH7q7cD8Ui+fvffb^`tx16T&ndq2?jV3ndL+Uq)-c4TkL zzo-7%gTb0XasrFeEg$|oTub&NHwI(5*|y26FI5{IRV#zkF=m==yd-AK_Ia#qMe$Q< z1#bh&@%J;gItiPTCfu}TCBBVhiGJnc(F8q!^#t<{U41a@B`&BKezJ*)O2sUl!3aa|OB{_H z3Pr&|CY!|>nX9FdzocII*CEIrB#wfS80qJCCoIA+P-6!^!4yQh?W|cPvQy(Gv3n6f zsa9>JwlYz2g@MiaYO*^WjS7R<3N>@I)PYVF4LJ29B%c(x0`2xd|v5^ z>*Tdy@`|Dq<0lzmw-jymrF6Mxw<3C-0*s)o#VD0v`2ku|3#Fn!X+pYLdOBa5IJI3~ zK@;Yn^nJ>dw*&%OEG{qRUwC64-xHpoTPBq0jZ5UQ>`9}DH#MjF(f`qJi0>~W^6zMB zA1C!Tc6(Rtd&{6t$svp$h}niqpl9*L)1Y-6MG&>0$?Zv-VDh9$^TfJs9aC(9PY7ZGcm`Xxo+B}qwdX${`Zu_AysYn~ $V6!n_`B@Bj}jH%zK8HmB=eM&8p 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�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�{>;}ty`ay%&bzu9SkS1 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 @!F~K*zdt6}^SHJI$N6u%AL` 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 z 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�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

@DEE4{kdq1)Pp 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 literal 0 HcmV?d00001 From 5f87e3bd28bf7a74df8d3c0fa14ca9c05f61ec46 Mon Sep 17 00:00:00 2001 From: Harshit Jain Date: Fri, 13 Feb 2026 18:07:27 +0530 Subject: [PATCH 20/23] fix: add project managemenet api with proper working --- litellm/proxy/_types.py | 115 +++-- litellm/proxy/auth/auth_checks.py | 284 +++++++++++- litellm/proxy/auth/user_api_key_auth.py | 43 +- .../key_management_endpoints.py | 79 ++++ .../management_endpoints/project_endpoints.py | 253 +++++++++-- .../test_project_endpoints_prisma.py | 415 ++++++++++++++++-- 6 files changed, 1025 insertions(+), 164 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 2cd67d8108..739a9d2736 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -198,6 +198,7 @@ class Litellm_EntityType(enum.Enum): TEAM = "team" TEAM_MEMBER = "team_member" ORGANIZATION = "organization" + PROJECT = "project" TAG = "tag" # global proxy level entity @@ -851,9 +852,9 @@ class GenerateRequestBase(LiteLLMPydanticObjectBase): allowed_cache_controls: Optional[list] = [] config: Optional[dict] = {} permissions: Optional[dict] = {} - model_max_budget: Optional[dict] = ( - {} - ) # {"gpt-4": 5.0, "gpt-3.5-turbo": 5.0}, defaults to {} + model_max_budget: Optional[ + dict + ] = {} # {"gpt-4": 5.0, "gpt-3.5-turbo": 5.0}, defaults to {} model_config = ConfigDict(protected_namespaces=()) model_rpm_limit: Optional[dict] = None @@ -1405,12 +1406,12 @@ class NewCustomerRequest(BudgetNewRequest): blocked: bool = False # allow/disallow requests for this end-user budget_id: Optional[str] = None # give either a budget_id or max_budget spend: Optional[float] = None - allowed_model_region: Optional[AllowedModelRegion] = ( - None # require all user requests to use models in this specific region - ) - default_model: Optional[str] = ( - None # if no equivalent model in allowed region - default all requests to this model - ) + allowed_model_region: Optional[ + AllowedModelRegion + ] = None # require all user requests to use models in this specific region + default_model: Optional[ + str + ] = None # if no equivalent model in allowed region - default all requests to this model @model_validator(mode="before") @classmethod @@ -1432,12 +1433,12 @@ class UpdateCustomerRequest(LiteLLMPydanticObjectBase): blocked: bool = False # allow/disallow requests for this end-user max_budget: Optional[float] = None budget_id: Optional[str] = None # give either a budget_id or max_budget - allowed_model_region: Optional[AllowedModelRegion] = ( - None # require all user requests to use models in this specific region - ) - default_model: Optional[str] = ( - None # if no equivalent model in allowed region - default all requests to this model - ) + allowed_model_region: Optional[ + AllowedModelRegion + ] = None # require all user requests to use models in this specific region + default_model: Optional[ + str + ] = None # if no equivalent model in allowed region - default all requests to this model class DeleteCustomerRequest(LiteLLMPydanticObjectBase): @@ -1526,15 +1527,15 @@ class NewTeamRequest(TeamBase): ] = None # raise an error if 'guaranteed_throughput' is set and we're overallocating tpm model_tpm_limit: Optional[Dict[str, int]] = None - team_member_budget: Optional[float] = ( - None # allow user to set a budget for all team members - ) - team_member_rpm_limit: Optional[int] = ( - None # allow user to set RPM limit for all team members - ) - team_member_tpm_limit: Optional[int] = ( - None # allow user to set TPM limit for all team members - ) + team_member_budget: Optional[ + float + ] = None # allow user to set a budget for all team members + team_member_rpm_limit: Optional[ + int + ] = None # allow user to set RPM limit for all team members + team_member_tpm_limit: Optional[ + int + ] = None # allow user to set TPM limit for all team members team_member_key_duration: Optional[str] = None # e.g. "1d", "1w", "1m" allowed_vector_store_indexes: Optional[List[AllowedVectorStoreIndexItem]] = None @@ -1626,9 +1627,9 @@ class BlockKeyRequest(LiteLLMPydanticObjectBase): class AddTeamCallback(LiteLLMPydanticObjectBase): callback_name: str - callback_type: Optional[Literal["success", "failure", "success_and_failure"]] = ( - "success_and_failure" - ) + callback_type: Optional[ + Literal["success", "failure", "success_and_failure"] + ] = "success_and_failure" callback_vars: Dict[str, str] @model_validator(mode="before") @@ -1960,9 +1961,9 @@ class ConfigList(LiteLLMPydanticObjectBase): stored_in_db: Optional[bool] field_default_value: Any premium_field: bool = False - nested_fields: Optional[List[FieldDetail]] = ( - None # For nested dictionary or Pydantic fields - ) + nested_fields: Optional[ + List[FieldDetail] + ] = None # For nested dictionary or Pydantic fields class UserHeaderMapping(LiteLLMPydanticObjectBase): @@ -2403,9 +2404,9 @@ class LiteLLM_OrganizationMembershipTable(LiteLLMPydanticObjectBase): budget_id: Optional[str] = None created_at: datetime updated_at: datetime - user: Optional[Any] = ( - None # You might want to replace 'Any' with a more specific type if available - ) + user: Optional[ + Any + ] = None # You might want to replace 'Any' with a more specific type if available litellm_budget_table: Optional[LiteLLM_BudgetTable] = None model_config = ConfigDict(protected_namespaces=()) @@ -2615,25 +2616,10 @@ class NewProjectResponse(LiteLLM_ProjectTable): updated_at: datetime -class LiteLLM_ProjectTableCachedObj(LiteLLMPydanticObjectBase): - """Cached version for auth checks""" +class LiteLLM_ProjectTableCachedObj(LiteLLM_ProjectTable): + """Cached version for auth checks. Mirrors LiteLLM_TeamTableCachedObj pattern.""" - project_id: str - project_alias: Optional[str] = None - description: Optional[str] = None - team_id: Optional[str] = None - budget_id: Optional[str] = None - metadata: Optional[dict] = None - models: List[str] = [] - spend: float = 0.0 - model_spend: Optional[dict] = None - model_rpm_limit: Optional[dict] = None - model_tpm_limit: Optional[dict] = None - blocked: bool = False - object_permission_id: Optional[str] = None - litellm_budget_table: Optional[LiteLLM_BudgetTable] = None - created_at: Optional[datetime] = None - updated_at: Optional[datetime] = None + last_refreshed_at: Optional[float] = None class LiteLLM_UserTableFiltered(BaseModel): # done to avoid exposing sensitive data @@ -3228,6 +3214,11 @@ class ProxyErrorTypes(str, enum.Enum): Organization does not have access to the model """ + project_model_access_denied = "project_model_access_denied" + """ + Project does not have access to the model + """ + expired_key = "expired_key" """ Key has expired @@ -3290,7 +3281,7 @@ class ProxyErrorTypes(str, enum.Enum): @classmethod def get_model_access_error_type_for_object( - cls, object_type: Literal["key", "user", "team", "org"] + cls, object_type: Literal["key", "user", "team", "org", "project"] ) -> "ProxyErrorTypes": """ Get the model access error type for object_type @@ -3303,6 +3294,8 @@ class ProxyErrorTypes(str, enum.Enum): return cls.user_model_access_denied elif object_type == "org": return cls.org_model_access_denied + elif object_type == "project": + return cls.project_model_access_denied @classmethod def get_vector_store_access_error_type_for_object( @@ -3507,9 +3500,9 @@ class TeamModelDeleteRequest(BaseModel): # Organization Member Requests class OrganizationMemberAddRequest(OrgMemberAddRequest): organization_id: str - max_budget_in_organization: Optional[float] = ( - None # Users max budget within the organization - ) + max_budget_in_organization: Optional[ + float + ] = None # Users max budget within the organization class OrganizationMemberDeleteRequest(MemberDeleteRequest): @@ -3727,9 +3720,9 @@ class ProviderBudgetResponse(LiteLLMPydanticObjectBase): Maps provider names to their budget configs. """ - providers: Dict[str, ProviderBudgetResponseObject] = ( - {} - ) # Dictionary mapping provider names to their budget configurations + providers: Dict[ + str, ProviderBudgetResponseObject + ] = {} # Dictionary mapping provider names to their budget configurations class ProxyStateVariables(TypedDict): @@ -3872,9 +3865,9 @@ class LiteLLM_JWTAuth(LiteLLMPydanticObjectBase): enforce_rbac: bool = False roles_jwt_field: Optional[str] = None # v2 on role mappings role_mappings: Optional[List[RoleMapping]] = None - object_id_jwt_field: Optional[str] = ( - None # can be either user / team, inferred from the role mapping - ) + object_id_jwt_field: Optional[ + str + ] = None # can be either user / team, inferred from the role mapping scope_mappings: Optional[List[ScopeMapping]] = None enforce_scope_based_access: bool = False enforce_team_based_model_access: bool = False diff --git a/litellm/proxy/auth/auth_checks.py b/litellm/proxy/auth/auth_checks.py index 76ec67ab10..dc5d5d749b 100644 --- a/litellm/proxy/auth/auth_checks.py +++ b/litellm/proxy/auth/auth_checks.py @@ -39,6 +39,7 @@ from litellm.proxy._types import ( LiteLLM_ObjectPermissionTable, LiteLLM_OrganizationMembershipTable, LiteLLM_OrganizationTable, + LiteLLM_ProjectTableCachedObj, LiteLLM_TagTable, LiteLLM_TeamMembership, LiteLLM_TeamTable, @@ -75,6 +76,7 @@ db_cache_expiry = DEFAULT_IN_MEMORY_TTL # refresh every 5s all_routes = LiteLLMRoutes.openai_routes.value + LiteLLMRoutes.management_routes.value + def _log_budget_lookup_failure(entity: str, error: Exception) -> None: """ Log a warning when budget lookup fails; cache will not be populated. @@ -92,38 +94,41 @@ def _log_budget_lookup_failure(entity: str, error: Exception) -> None: x in err_str for x in ("column", "schema", "does not exist", "prisma", "migrate") ): - hint = " Run `prisma db push` or `prisma migrate deploy` to fix schema mismatches." + hint = ( + " Run `prisma db push` or `prisma migrate deploy` to fix schema mismatches." + ) verbose_proxy_logger.error( f"Budget lookup failed for {entity}; cache will not be populated. " f"Each request will hit the database. Error: {error}.{hint}" ) + def _is_model_cost_zero( model: Optional[Union[str, List[str]]], llm_router: Optional[Router] ) -> bool: """ Check if a model has zero cost (no configured pricing). - + Uses the router's get_model_group_info method to get pricing information. - + Args: model: The model name or list of model names llm_router: The LiteLLM router instance - + Returns: bool: True if all costs for the model are zero, False otherwise """ if model is None or llm_router is None: return False - + # Handle list of models model_list = [model] if isinstance(model, str) else model - + for model_name in model_list: try: # Use router's get_model_group_info method directly for better reliability model_group_info = llm_router.get_model_group_info(model_group=model_name) - + if model_group_info is None: # Model not found or no pricing info available # Conservative approach: assume it has cost @@ -131,42 +136,87 @@ def _is_model_cost_zero( f"No model group info found for {model_name}, assuming it has cost" ) return False - + # Check costs for this model # Only allow bypass if BOTH costs are explicitly set to 0 (not None) input_cost = model_group_info.input_cost_per_token output_cost = model_group_info.output_cost_per_token - + # If costs are not explicitly configured (None), assume it has cost if input_cost is None or output_cost is None: verbose_proxy_logger.debug( f"Model {model_name} has undefined cost (input: {input_cost}, output: {output_cost}), assuming it has cost" ) return False - + # If either cost is non-zero, return False if input_cost > 0 or output_cost > 0: verbose_proxy_logger.debug( f"Model {model_name} has non-zero cost (input: {input_cost}, output: {output_cost})" ) return False - + # This model has zero cost explicitly configured verbose_proxy_logger.debug( f"Model {model_name} has zero cost explicitly configured (input: {input_cost}, output: {output_cost})" ) - + except Exception as e: # If we can't determine the cost, assume it has cost (conservative approach) verbose_proxy_logger.debug( f"Error checking cost for model {model_name}: {str(e)}, assuming it has cost" ) return False - + # All models checked have zero cost return True +async def _run_project_checks( + project_object: Optional[LiteLLM_ProjectTableCachedObj], + _model: Optional[Union[str, List[str]]], + llm_router: Optional[Router], + skip_budget_checks: bool, + valid_token: Optional[UserAPIKeyAuth], + proxy_logging_obj: ProxyLogging, +) -> None: + """ + Run all project-level checks: blocked, model access, budget, soft budget. + Extracted from common_checks() to keep statement count manageable. + """ + if project_object is None: + return + + # 1.1. If project is blocked + if project_object.blocked is True: + raise Exception( + f"Project={project_object.project_id} is blocked. Update via `/project/update` if you're an admin." + ) + + # 2.2 If project can call model + if _model and len(project_object.models) > 0: + can_project_access_model( + model=_model, + project_object=project_object, + llm_router=llm_router, + ) + + if not skip_budget_checks: + # 3.0.2. If project is in budget + await _project_max_budget_check( + project_object=project_object, + valid_token=valid_token, + proxy_logging_obj=proxy_logging_obj, + ) + + # 3.0.3. If project is over soft budget (alert only, doesn't block) + await _project_soft_budget_check( + project_object=project_object, + valid_token=valid_token, + proxy_logging_obj=proxy_logging_obj, + ) + + async def common_checks( request_body: dict, team_object: Optional[LiteLLM_TeamTable], @@ -180,13 +230,18 @@ async def common_checks( valid_token: Optional[UserAPIKeyAuth], request: Request, skip_budget_checks: bool = False, + project_object: Optional[LiteLLM_ProjectTableCachedObj] = None, ) -> bool: """ Common checks across jwt + key-based auth. 1. If team is blocked + 1.1. If project is blocked 2. If team can call model + 2.2 If project can call model 3. If team is in budget + 3.0.2. If project is in budget + 3.0.3. If project is over soft budget (alert only) 4. If user passed in (JWT or key.user_id) - is in budget 5. If end_user (either via JWT or 'user' passed to /chat/completions, /embeddings endpoint) is in budget 6. [OPTIONAL] If 'enforce_end_user' enabled - did developer pass in 'user' param for openai endpoints @@ -231,6 +286,16 @@ async def common_checks( user_object=user_object, ) + # 1.1 - 2.2 - 3.0.2 - 3.0.3: Project checks (blocked, model access, budget) + await _run_project_checks( + project_object=project_object, + _model=_model, + llm_router=llm_router, + skip_budget_checks=skip_budget_checks, + valid_token=valid_token, + proxy_logging_obj=proxy_logging_obj, + ) + # If this is a free model, skip all budget checks if not skip_budget_checks: # 3. If team is in budget @@ -290,7 +355,10 @@ async def common_checks( ) # 5. If end_user ('user' passed to /chat/completions, /embeddings endpoint) is in budget - if end_user_object is not None and end_user_object.litellm_budget_table is not None: + if ( + end_user_object is not None + and end_user_object.litellm_budget_table is not None + ): end_user_budget = end_user_object.litellm_budget_table.max_budget if end_user_budget is not None and end_user_object.spend > end_user_budget: raise litellm.BudgetExceededError( @@ -1368,7 +1436,7 @@ async def _get_team_object_from_user_api_key_cache( raise Exception _response = LiteLLM_TeamTableCachedObj(**response.dict()) - + # Load object_permission if object_permission_id exists but object_permission is not loaded if _response.object_permission_id and not _response.object_permission: try: @@ -1383,7 +1451,7 @@ async def _get_team_object_from_user_api_key_cache( verbose_proxy_logger.debug( f"Failed to load object_permission for team {team_id} with object_permission_id={_response.object_permission_id}: {e}" ) - + # save the team object to cache await _cache_team_object( team_id=team_id, @@ -2069,7 +2137,7 @@ def _can_object_call_model( models: List[str], team_model_aliases: Optional[Dict[str, str]] = None, team_id: Optional[str] = None, - object_type: Literal["user", "team", "key", "org"] = "user", + object_type: Literal["user", "team", "key", "org", "project"] = "user", fallback_depth: int = 0, ) -> Literal[True]: """ @@ -2220,6 +2288,24 @@ def can_team_access_model( ) +def can_project_access_model( + model: Union[str, List[str]], + project_object: LiteLLM_ProjectTableCachedObj, + llm_router: Optional[Router], +) -> Literal[True]: + """ + Returns True if the project can access a specific model. + + Raises ProxyException if access is denied. + """ + return _can_object_call_model( + model=model, + llm_router=llm_router, + models=project_object.models if project_object else [], + object_type="project", + ) + + async def can_user_call_model( model: Union[str, List[str]], llm_router: Optional[Router], @@ -2520,14 +2606,26 @@ async def _team_soft_budget_check( if valid_token: # Extract alert emails from team metadata alert_emails: Optional[List[str]] = None - if team_object.metadata is not None and isinstance(team_object.metadata, dict): - soft_budget_alert_emails = team_object.metadata.get("soft_budget_alerting_emails") + if team_object.metadata is not None and isinstance( + team_object.metadata, dict + ): + soft_budget_alert_emails = team_object.metadata.get( + "soft_budget_alerting_emails" + ) if soft_budget_alert_emails is not None: if isinstance(soft_budget_alert_emails, list): - alert_emails = [email for email in soft_budget_alert_emails if isinstance(email, str) and email.strip()] + alert_emails = [ + email + for email in soft_budget_alert_emails + if isinstance(email, str) and email.strip() + ] elif isinstance(soft_budget_alert_emails, str): # Handle comma-separated string - alert_emails = [email.strip() for email in soft_budget_alert_emails.split(",") if email.strip()] + alert_emails = [ + email.strip() + for email in soft_budget_alert_emails.split(",") + if email.strip() + ] # Filter out empty strings if alert_emails: alert_emails = [email for email in alert_emails if email] @@ -2566,6 +2664,150 @@ async def _team_soft_budget_check( ) +async def _project_max_budget_check( + project_object: Optional[LiteLLM_ProjectTableCachedObj], + valid_token: Optional[UserAPIKeyAuth], + proxy_logging_obj: ProxyLogging, +): + """ + Check if the project is over its max budget. + + Raises: + BudgetExceededError if the project is over its max budget. + Triggers a budget alert if the project is over its max budget. + """ + if project_object is None: + return + + max_budget = None + if project_object.litellm_budget_table is not None: + max_budget = project_object.litellm_budget_table.max_budget + + if ( + max_budget is not None + and project_object.spend is not None + and project_object.spend > max_budget + ): + if valid_token: + call_info = CallInfo( + token=valid_token.token, + spend=project_object.spend, + max_budget=max_budget, + user_id=valid_token.user_id, + team_id=valid_token.team_id, + team_alias=valid_token.team_alias, + organization_id=valid_token.org_id, + event_group=Litellm_EntityType.PROJECT, + ) + asyncio.create_task( + proxy_logging_obj.budget_alerts( + type="project_budget", + user_info=call_info, + ) + ) + + raise litellm.BudgetExceededError( + current_cost=project_object.spend, + max_budget=max_budget, + message=f"Budget has been exceeded! Project={project_object.project_id} Current cost: {project_object.spend}, Max budget: {max_budget}", + ) + + +async def _project_soft_budget_check( + project_object: Optional[LiteLLM_ProjectTableCachedObj], + valid_token: Optional[UserAPIKeyAuth], + proxy_logging_obj: ProxyLogging, +): + """ + Triggers a budget alert if the project is over its soft budget. + + Mirrors _team_soft_budget_check() pattern. + """ + if project_object is None: + return + + soft_budget = None + if project_object.litellm_budget_table is not None: + soft_budget = project_object.litellm_budget_table.soft_budget + + if ( + soft_budget is not None + and project_object.spend is not None + and project_object.spend >= soft_budget + ): + verbose_proxy_logger.debug( + "Crossed Soft Budget for project %s, spend %s, soft_budget %s", + project_object.project_id, + project_object.spend, + soft_budget, + ) + if valid_token: + call_info = CallInfo( + token=valid_token.token, + spend=project_object.spend, + max_budget=None, + soft_budget=soft_budget, + user_id=valid_token.user_id, + team_id=valid_token.team_id, + team_alias=valid_token.team_alias, + organization_id=valid_token.org_id, + event_group=Litellm_EntityType.PROJECT, + ) + asyncio.create_task( + proxy_logging_obj.budget_alerts( + type="soft_budget", + user_info=call_info, + ) + ) + + +async def get_project_object( + project_id: str, + prisma_client: Optional[PrismaClient], + user_api_key_cache: DualCache, + proxy_logging_obj: Optional[ProxyLogging] = None, +) -> Optional[LiteLLM_ProjectTableCachedObj]: + """ + Fetch project object from cache or DB. + + Follows get_team_object() caching pattern with TTL and last_refreshed_at. + + Returns LiteLLM_ProjectTableCachedObj or None if not found. + """ + if prisma_client is None: + return None + + # Check cache first + cache_key = "project_id:{}".format(project_id) + cached_obj = await user_api_key_cache.async_get_cache(key=cache_key) + if cached_obj is not None: + if isinstance(cached_obj, dict): + return LiteLLM_ProjectTableCachedObj(**cached_obj) + elif isinstance(cached_obj, LiteLLM_ProjectTableCachedObj): + return cached_obj + + # Fetch from DB + project_row = await prisma_client.db.litellm_projecttable.find_unique( + where={"project_id": project_id}, + include={"litellm_budget_table": True}, + ) + if project_row is None: + return None + + project_obj = LiteLLM_ProjectTableCachedObj(**project_row.model_dump()) + + # Cache with TTL following _cache_management_object pattern + project_obj.last_refreshed_at = time.time() + await _cache_management_object( + key=cache_key, + value=project_obj, + user_api_key_cache=user_api_key_cache, + proxy_logging_obj=proxy_logging_obj, + ) + + return project_obj + + async def _organization_max_budget_check( valid_token: Optional[UserAPIKeyAuth], team_object: Optional[LiteLLM_TeamTable], diff --git a/litellm/proxy/auth/user_api_key_auth.py b/litellm/proxy/auth/user_api_key_auth.py index 42f10ff859..fc61f2b05c 100644 --- a/litellm/proxy/auth/user_api_key_auth.py +++ b/litellm/proxy/auth/user_api_key_auth.py @@ -36,6 +36,7 @@ from litellm.proxy.auth.auth_checks import ( common_checks, get_end_user_object, get_key_object, + get_project_object, get_team_object, get_user_object, is_valid_fallback_model, @@ -120,12 +121,12 @@ def _get_bearer_token_or_received_api_key(api_key: str) -> str: # Handle AWS Signature V4 format from LangChain # Format: AWS4-HMAC-SHA256 Credential=Bearer sk-12345/date/region/service/aws4_request, SignedHeaders=..., Signature=... # Extract the Bearer token from the Credential field - match = re.search(r'Credential=Bearer\s+([^/\s,]+)', api_key) + match = re.search(r"Credential=Bearer\s+([^/\s,]+)", api_key) if match: api_key = match.group(1) else: # If no Bearer token found in Credential, try to extract just the credential value - match = re.search(r'Credential=([^/\s,]+)', api_key) + match = re.search(r"Credential=([^/\s,]+)", api_key) if match: api_key = match.group(1) @@ -145,12 +146,12 @@ def _get_bearer_token( # Handle AWS Signature V4 format from LangChain # Format: AWS4-HMAC-SHA256 Credential=Bearer sk-12345/date/region/service/aws4_request, SignedHeaders=..., Signature=... # Extract the Bearer token from the Credential field - match = re.search(r'Credential=Bearer\s+([^/\s,]+)', api_key) + match = re.search(r"Credential=Bearer\s+([^/\s,]+)", api_key) if match: api_key = match.group(1) else: # If no Bearer token found in Credential, try to extract just the credential value - match = re.search(r'Credential=([^/\s,]+)', api_key) + match = re.search(r"Credential=([^/\s,]+)", api_key) if match: api_key = match.group(1) else: @@ -274,7 +275,9 @@ async def get_global_proxy_spend( proxy_logging_obj: ProxyLogging, ) -> Optional[float]: global_proxy_spend = None - if litellm.max_budget > 0 and prisma_client is not None: # user set proxy max budget + if ( + litellm.max_budget > 0 and prisma_client is not None + ): # user set proxy max budget # Use event-driven coordination to prevent cache stampede cache_key = "{}:spend".format(litellm_proxy_admin_name) global_proxy_spend = await _fetch_global_spend_with_event_coordination( @@ -631,13 +634,13 @@ async def _user_api_key_auth_builder( # noqa: PLR0915 if team_object is not None else None, ) - + # Check if model has zero cost - if so, skip all budget checks model = get_model_from_request(request_data, route) skip_budget_checks = False if model is not None and llm_router is not None: from litellm.proxy.auth.auth_checks import _is_model_cost_zero - + skip_budget_checks = _is_model_cost_zero( model=model, llm_router=llm_router ) @@ -645,7 +648,17 @@ async def _user_api_key_auth_builder( # noqa: PLR0915 verbose_proxy_logger.info( f"Skipping all budget checks for zero-cost model: {model}" ) - + + # Fetch project object for JWT path if project_id is set + _jwt_project_obj = None + if valid_token.project_id is not None: + _jwt_project_obj = await get_project_object( + project_id=valid_token.project_id, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + proxy_logging_obj=proxy_logging_obj, + ) + # run through common checks _ = await common_checks( request=request, @@ -660,6 +673,7 @@ async def _user_api_key_auth_builder( # noqa: PLR0915 proxy_logging_obj=proxy_logging_obj, valid_token=valid_token, skip_budget_checks=skip_budget_checks, + project_object=_jwt_project_obj, ) # return UserAPIKeyAuth object @@ -1056,7 +1070,7 @@ async def _user_api_key_auth_builder( # noqa: PLR0915 skip_budget_checks = False if model is not None and llm_router is not None: from litellm.proxy.auth.auth_checks import _is_model_cost_zero - + skip_budget_checks = _is_model_cost_zero( model=model, llm_router=llm_router ) @@ -1192,6 +1206,16 @@ async def _user_api_key_auth_builder( # noqa: PLR0915 key=valid_token.team_id, value=_team_obj ) # save team table in cache - used for tpm/rpm limiting - tpm_rpm_limiter.py + # Fetch project object if key belongs to a project + _project_obj = None + if valid_token.project_id is not None: + _project_obj = await get_project_object( + project_id=valid_token.project_id, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + proxy_logging_obj=proxy_logging_obj, + ) + global_proxy_spend = None if ( litellm.max_budget > 0 and prisma_client is not None @@ -1231,6 +1255,7 @@ async def _user_api_key_auth_builder( # noqa: PLR0915 proxy_logging_obj=proxy_logging_obj, valid_token=valid_token, skip_budget_checks=skip_budget_checks, + project_object=_project_obj, ) # Token passed all checks if valid_token is None: diff --git a/litellm/proxy/management_endpoints/key_management_endpoints.py b/litellm/proxy/management_endpoints/key_management_endpoints.py index cbb271f860..c6c03a119c 100644 --- a/litellm/proxy/management_endpoints/key_management_endpoints.py +++ b/litellm/proxy/management_endpoints/key_management_endpoints.py @@ -43,6 +43,7 @@ from litellm.proxy.auth.auth_checks import ( can_team_access_model, get_key_object, get_org_object, + get_project_object, get_team_object, ) from litellm.proxy.auth.auth_utils import abbreviate_api_key @@ -881,6 +882,61 @@ async def _check_team_key_limits( ) +async def _check_project_key_limits( + project_id: str, + data: Union[GenerateKeyRequest, UpdateKeyRequest], + prisma_client: PrismaClient, + user_api_key_cache: DualCache, +) -> None: + """ + Validate that key's models and budget respect its project's limits. + + - Key models must be a subset of project models + - Key max_budget must be <= project max_budget + """ + project_obj = await get_project_object( + project_id=project_id, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + ) + + if project_obj is None: + raise HTTPException( + status_code=404, + detail={"error": f"Project not found, project_id={project_id}"}, + ) + + # Validate key models are a subset of project models + if data.models and len(project_obj.models) > 0: + for m in data.models: + if m not in project_obj.models: + raise HTTPException( + status_code=400, + detail={ + "error": f"Model '{m}' not in project's allowed models. Project allowed models={project_obj.models}. Project: {project_id}" + }, + ) + + # Validate key max_budget <= project max_budget + project_max_budget = None + if project_obj.litellm_budget_table is not None: + project_max_budget = getattr( + project_obj.litellm_budget_table, "max_budget", None + ) + + if ( + data.max_budget is not None + and project_max_budget is not None + and data.max_budget > project_max_budget + ): + raise HTTPException( + status_code=400, + detail={ + "error": f"Key max_budget ({data.max_budget}) exceeds project's max_budget ({project_max_budget}). Project: {project_id}" + }, + ) + + def check_org_key_model_specific_limits( keys: List[LiteLLM_VerificationToken], org_table: LiteLLM_OrganizationTable, @@ -1135,6 +1191,15 @@ async def generate_key_fn( prisma_client=prisma_client, ) + # Validate key against project limits if project_id is set + if data.project_id is not None: + await _check_project_key_limits( + project_id=data.project_id, + data=data, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + ) + return await _common_key_generation_helper( data=data, user_api_key_dict=user_api_key_dict, @@ -1808,6 +1873,20 @@ async def update_key_fn( prisma_client=prisma_client, ) + # Validate key against project limits if project_id is being set + _project_id_to_check = getattr(data, "project_id", None) or getattr( + existing_key_row, "project_id", None + ) + if _project_id_to_check is not None and ( + data.models is not None or data.max_budget is not None + ): + await _check_project_key_limits( + project_id=_project_id_to_check, + data=data, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + ) + # if team change - check if this is possible if is_different_team(data=data, existing_key_row=existing_key_row): if llm_router is None: diff --git a/litellm/proxy/management_endpoints/project_endpoints.py b/litellm/proxy/management_endpoints/project_endpoints.py index b6c51d3422..ba3238ebfd 100644 --- a/litellm/proxy/management_endpoints/project_endpoints.py +++ b/litellm/proxy/management_endpoints/project_endpoints.py @@ -11,23 +11,19 @@ Endpoints for /project operations #### PROJECT MANAGEMENT #### import json -from typing import List, Optional +from typing import List, Optional, Union -from fastapi import APIRouter, Depends, HTTPException, Request, status +from fastapi import APIRouter, Depends, HTTPException, Request from litellm._logging import verbose_proxy_logger from litellm._uuid import uuid from litellm.proxy._types import * from litellm.proxy.auth.user_api_key_auth import user_api_key_auth from litellm.proxy.management_endpoints.common_utils import _set_object_metadata_field -from litellm.proxy.management_helpers.object_permission_utils import ( - handle_update_object_permission_common, -) from litellm.proxy.management_helpers.utils import ( management_endpoint_wrapper, ) from litellm.proxy.utils import PrismaClient, handle_exception_on_proxy -from litellm.utils import _update_dictionary router = APIRouter() @@ -37,31 +33,37 @@ async def _check_user_permission_for_project( team_id: Optional[str], prisma_client: PrismaClient, require_admin: bool = False, + team_object: Optional[LiteLLM_TeamTable] = None, ) -> bool: """ Check if user has permission to manage a project. - + Returns True if user is proxy admin or team admin (when team_id provided). If require_admin=True, only proxy admins are allowed. + + If team_object is provided, it will be used instead of fetching from DB + (avoids duplicate DB queries when team was already fetched for validation). """ is_proxy_admin = user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN - + if require_admin: return is_proxy_admin - + if is_proxy_admin: return True - + if not team_id or not user_api_key_dict.user_id: return False - - team = await prisma_client.db.litellm_teamtable.find_unique( - where={"team_id": team_id} - ) - + + team = team_object + if team is None: + team = await prisma_client.db.litellm_teamtable.find_unique( + where={"team_id": team_id} + ) + if team and team.admins: return user_api_key_dict.user_id in team.admins - + return False @@ -69,11 +71,11 @@ async def _validate_team_exists( team_id: str, prisma_client: PrismaClient, ): - """Validate that a team exists.""" + """Validate that a team exists. Returns the team row.""" team = await prisma_client.db.litellm_teamtable.find_unique( - where={"team_id": team_id} + where={"team_id": team_id}, ) - + if team is None: raise ProxyException( message=f"Team not found, team_id={team_id}", @@ -81,10 +83,110 @@ async def _validate_team_exists( code=404, param="team_id", ) - + return team +def _check_team_project_limits( + team_object: LiteLLM_TeamTable, + data: Union[NewProjectRequest, UpdateProjectRequest], +) -> None: + """ + Check that project limits respect its parent Team's limits. + + Mirrors _check_org_team_limits() from team_endpoints.py. + + Validates: + - Project models are a subset of Team models + - Project max_budget <= Team max_budget + - Project tpm_limit <= Team tpm_limit + - Project rpm_limit <= Team rpm_limit + - Budget values are non-negative + - soft_budget < max_budget + """ + # --- Budget non-negativity checks --- + if data.max_budget is not None and data.max_budget < 0: + raise HTTPException( + status_code=400, + detail={ + "error": f"max_budget cannot be negative. Received: {data.max_budget}" + }, + ) + if data.soft_budget is not None and data.soft_budget < 0: + raise HTTPException( + status_code=400, + detail={ + "error": f"soft_budget cannot be negative. Received: {data.soft_budget}" + }, + ) + + # --- soft_budget < max_budget --- + if data.soft_budget is not None and data.max_budget is not None: + if data.soft_budget >= data.max_budget: + raise HTTPException( + status_code=400, + detail={ + "error": f"soft_budget ({data.soft_budget}) must be strictly lower than max_budget ({data.max_budget})" + }, + ) + + # --- Validate project models are a subset of team models --- + project_models = getattr(data, "models", None) + team_models = team_object.models or [] + if project_models and len(team_models) > 0: + # If team has 'all-proxy-models', skip validation as it allows all models + if SpecialModelNames.all_proxy_models.value not in team_models: + for m in project_models: + if m not in team_models: + raise HTTPException( + status_code=400, + detail={ + "error": f"Model '{m}' not in team's allowed models. Team allowed models={team_models}. Team: {team_object.team_id}" + }, + ) + + # --- Validate project max_budget <= team max_budget --- + # Team stores budget fields directly (max_budget, tpm_limit, rpm_limit) + # unlike Project which uses a separate LiteLLM_BudgetTable relation + if ( + data.max_budget is not None + and team_object.max_budget is not None + and data.max_budget > team_object.max_budget + ): + raise HTTPException( + status_code=400, + detail={ + "error": f"Project max_budget ({data.max_budget}) exceeds team's max_budget ({team_object.max_budget}). Team: {team_object.team_id}" + }, + ) + + # --- Validate project tpm_limit <= team tpm_limit --- + if ( + data.tpm_limit is not None + and team_object.tpm_limit is not None + and data.tpm_limit > team_object.tpm_limit + ): + raise HTTPException( + status_code=400, + detail={ + "error": f"Project tpm_limit ({data.tpm_limit}) exceeds team's tpm_limit ({team_object.tpm_limit}). Team: {team_object.team_id}" + }, + ) + + # --- Validate project rpm_limit <= team rpm_limit --- + if ( + data.rpm_limit is not None + and team_object.rpm_limit is not None + and data.rpm_limit > team_object.rpm_limit + ): + raise HTTPException( + status_code=400, + detail={ + "error": f"Project rpm_limit ({data.rpm_limit}) exceeds team's rpm_limit ({team_object.rpm_limit}). Team: {team_object.team_id}" + }, + ) + + async def _create_budget_for_project( data: NewProjectRequest, user_id: Optional[str], @@ -96,9 +198,9 @@ async def _create_budget_for_project( _json_data = data.json(exclude_none=True) _budget_data = {k: v for k, v in _json_data.items() if k in budget_params} budget_row = LiteLLM_BudgetTable(**_budget_data) - + new_budget = prisma_client.jsonify_object(budget_row.json(exclude_none=True)) - + _budget = await prisma_client.db.litellm_budgettable.create( data={ **new_budget, @@ -106,7 +208,7 @@ async def _create_budget_for_project( "updated_by": user_id or litellm_proxy_admin_name, } ) - + return _budget.budget_id @@ -137,7 +239,7 @@ def _remove_budget_fields_from_project_data(project_data: dict) -> dict: Remove budget fields from project data. Budget fields belong to LiteLLM_BudgetTable, not LiteLLM_ProjectTable. Keep budget_id as it's a foreign key. - + Following the pattern from organization_endpoints.py """ budget_fields = LiteLLM_BudgetTable.model_fields.keys() @@ -232,18 +334,36 @@ async def new_project( """ from litellm.proxy.proxy_server import ( litellm_proxy_admin_name, + premium_user, prisma_client, ) try: + if not premium_user: + raise HTTPException( + status_code=403, + detail={ + "error": "Project management is an enterprise feature. " + + CommonProxyErrors.not_premium_user.value + }, + ) + if prisma_client is None: raise HTTPException( status_code=500, detail={"error": CommonProxyErrors.db_not_connected_error.value}, ) - # Validate team exists - await _validate_team_exists(team_id=data.team_id, prisma_client=prisma_client) + # Validate team exists and get team object with budget + team_object = await _validate_team_exists( + team_id=data.team_id, prisma_client=prisma_client + ) + + # Validate project limits against team limits + _check_team_project_limits( + team_object=LiteLLM_TeamTable(**team_object.model_dump()), + data=data, + ) # Check if user has permission to create projects for this team # only team admins can create projects for their team @@ -251,8 +371,9 @@ async def new_project( user_api_key_dict=user_api_key_dict, team_id=data.team_id, prisma_client=prisma_client, + team_object=LiteLLM_TeamTable(**team_object.model_dump()), ) - + if not has_permission: raise HTTPException( status_code=403, @@ -311,10 +432,10 @@ async def new_project( new_project_row = prisma_client.jsonify_object( project_row.json(exclude_none=True) ) - + # Remove budget fields (following organization_endpoints.py pattern) new_project_row = _remove_budget_fields_from_project_data(new_project_row) - + verbose_proxy_logger.info( f"new_project_row: {json.dumps(new_project_row, indent=2)}" ) @@ -388,10 +509,20 @@ async def update_project( """ from litellm.proxy.proxy_server import ( litellm_proxy_admin_name, + premium_user, prisma_client, ) try: + if not premium_user: + raise HTTPException( + status_code=403, + detail={ + "error": "Project management is an enterprise feature. " + + CommonProxyErrors.not_premium_user.value + }, + ) + if prisma_client is None: raise HTTPException( status_code=500, @@ -417,23 +548,43 @@ async def update_project( param="project_id", ) + # Validate team exists and get team object for limit + permission checks + team_id_to_check = data.team_id or existing_project.team_id + team_obj_for_checks = None + if team_id_to_check is not None: + team_obj_for_checks = await _validate_team_exists( + team_id=team_id_to_check, prisma_client=prisma_client + ) + # Check if user has permission to update this project has_permission = await _check_user_permission_for_project( user_api_key_dict=user_api_key_dict, team_id=existing_project.team_id, prisma_client=prisma_client, + team_object=LiteLLM_TeamTable(**team_obj_for_checks.model_dump()) + if team_obj_for_checks + else None, ) - + if not has_permission: raise HTTPException( status_code=403, detail={"error": "Only admins or team admins can update projects"}, ) + # Validate project limits against team limits + if team_obj_for_checks is not None: + _check_team_project_limits( + team_object=LiteLLM_TeamTable(**team_obj_for_checks.model_dump()), + data=data, + ) + # Prepare update data update_data = data.json(exclude_none=True, exclude={"project_id"}) update_data = prisma_client.jsonify_object(update_data) - update_data["updated_by"] = user_api_key_dict.user_id or litellm_proxy_admin_name + update_data["updated_by"] = ( + user_api_key_dict.user_id or litellm_proxy_admin_name + ) # Handle budget updates budget_fields = LiteLLM_BudgetTable.model_fields.keys() @@ -459,15 +610,21 @@ async def update_project( if existing_project.object_permission_id: # Update existing permission await prisma_client.db.litellm_objectpermissiontable.update( - where={"object_permission_id": existing_project.object_permission_id}, + where={ + "object_permission_id": existing_project.object_permission_id + }, data=object_permission_data, ) else: # Create new permission - created_permission = await prisma_client.db.litellm_objectpermissiontable.create( - data=object_permission_data, + created_permission = ( + await prisma_client.db.litellm_objectpermissiontable.create( + data=object_permission_data, + ) ) - update_data["object_permission_id"] = created_permission.object_permission_id + update_data[ + "object_permission_id" + ] = created_permission.object_permission_id # Handle metadata fields for field in LiteLLM_ManagementEndpoint_MetadataFields: @@ -524,9 +681,18 @@ async def delete_project( }' ``` """ - from litellm.proxy.proxy_server import prisma_client + from litellm.proxy.proxy_server import premium_user, prisma_client try: + if not premium_user: + raise HTTPException( + status_code=403, + detail={ + "error": "Project management is an enterprise feature. " + + CommonProxyErrors.not_premium_user.value + }, + ) + if prisma_client is None: raise HTTPException( status_code=500, @@ -540,7 +706,7 @@ async def delete_project( prisma_client=prisma_client, require_admin=True, ) - + if not has_permission: raise HTTPException( status_code=403, @@ -564,8 +730,10 @@ async def delete_project( ) # Check if there are any keys associated with this project - associated_keys = await prisma_client.db.litellm_verificationtoken.find_many( - where={"project_id": project_id} + associated_keys = ( + await prisma_client.db.litellm_verificationtoken.find_many( + where={"project_id": project_id} + ) ) if len(associated_keys) > 0: @@ -641,15 +809,15 @@ async def project_info( # Check if user has access to this project (admin or team member) is_admin = user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN is_team_member = False - + if project.team_id and user_api_key_dict.user_id: team = await prisma_client.db.litellm_teamtable.find_unique( where={"team_id": project.team_id} ) if team: is_team_member = ( - user_api_key_dict.user_id in team.admins or - user_api_key_dict.user_id in team.members + user_api_key_dict.user_id in team.admins + or user_api_key_dict.user_id in team.members ) if not (is_admin or is_team_member): @@ -726,4 +894,3 @@ async def list_projects( ) ) raise handle_exception_on_proxy(e) - diff --git a/tests/proxy_unit_tests/test_project_endpoints_prisma.py b/tests/proxy_unit_tests/test_project_endpoints_prisma.py index daa3af2d67..c2366139b0 100644 --- a/tests/proxy_unit_tests/test_project_endpoints_prisma.py +++ b/tests/proxy_unit_tests/test_project_endpoints_prisma.py @@ -2,23 +2,15 @@ import os import sys import traceback from litellm._uuid import uuid -from datetime import datetime, timezone from unittest import mock from dotenv import load_dotenv from fastapi import Request -from fastapi.routing import APIRoute -import httpx load_dotenv() -import io -import os import time -sys.path.insert( - 0, os.path.abspath("../..") -) -import asyncio +sys.path.insert(0, os.path.abspath("../..")) import logging import pytest @@ -27,8 +19,6 @@ import litellm from litellm._logging import verbose_proxy_logger from litellm.proxy.management_endpoints.team_endpoints import ( new_team, - team_info, - update_team, ) from litellm.proxy.management_endpoints.project_endpoints import ( new_project, @@ -38,13 +28,11 @@ from litellm.proxy.management_endpoints.project_endpoints import ( ) from litellm.proxy.proxy_server import ( LitellmUserRoles, - user_api_key_auth, ) -from litellm.proxy.utils import PrismaClient, ProxyLogging, hash_token +from litellm.proxy.utils import PrismaClient, ProxyLogging verbose_proxy_logger.setLevel(level=logging.DEBUG) -from starlette.datastructures import URL from litellm.caching.caching import DualCache from litellm.proxy._types import ( @@ -52,7 +40,6 @@ from litellm.proxy._types import ( UpdateProjectRequest, DeleteProjectRequest, NewTeamRequest, - ProxyException, UserAPIKeyAuth, ) @@ -80,6 +67,9 @@ def prisma_client(): ) litellm.proxy.proxy_server.user_custom_key_generate = None + # Enable premium_user for project management tests + setattr(litellm.proxy.proxy_server, "premium_user", True) + return prisma_client @@ -115,10 +105,7 @@ async def test_new_project(prisma_client): project_alias="test-project", description="Test project for unit testing", team_id=_team_id, - metadata={ - "use_case_id": "TEST-001", - "responsible_ai_id": "RAI-001" - }, + metadata={"use_case_id": "TEST-001", "responsible_ai_id": "RAI-001"}, models=["gpt-4", "gpt-3.5-turbo"], max_budget=100.0, model_rpm_limit={"gpt-4": 100}, @@ -136,7 +123,7 @@ async def test_new_project(prisma_client): ) print("New project response:", response) - + # Assertions assert response.project_id is not None assert response.project_alias == "test-project" @@ -216,7 +203,7 @@ async def test_update_project(prisma_client): description="Updated description", metadata={ "use_case_id": "TEST-002-UPDATED", - "additional_field": "new_value" + "additional_field": "new_value", }, models=["gpt-4", "gpt-3.5-turbo", "claude-3"], max_budget=200.0, @@ -244,8 +231,14 @@ async def test_update_project(prisma_client): # model_rpm_limit and model_tpm_limit are stored in metadata assert update_response.metadata["use_case_id"] == "TEST-002-UPDATED" assert update_response.metadata["additional_field"] == "new_value" - assert update_response.metadata["model_rpm_limit"] == {"gpt-4": 200, "claude-3": 50} - assert update_response.metadata["model_tpm_limit"] == {"gpt-4": 2000, "claude-3": 500} + assert update_response.metadata["model_rpm_limit"] == { + "gpt-4": 200, + "claude-3": 50, + } + assert update_response.metadata["model_tpm_limit"] == { + "gpt-4": 2000, + "claude-3": 500, + } assert update_response.litellm_budget_table is not None assert update_response.litellm_budget_table.max_budget == 200.0 @@ -304,9 +297,7 @@ async def test_delete_project(prisma_client): project_id = create_response.project_id # Delete the project - delete_data = DeleteProjectRequest( - project_ids=[project_id] - ) + delete_data = DeleteProjectRequest(project_ids=[project_id]) delete_response = await delete_project( data=delete_data, @@ -378,10 +369,7 @@ async def test_project_info(prisma_client): project_alias="test-project-info", description="Test project info endpoint", team_id=_team_id, - metadata={ - "use_case_id": "TEST-003", - "cost_center": "engineering" - }, + metadata={"use_case_id": "TEST-003", "cost_center": "engineering"}, models=["gpt-4", "claude-3"], max_budget=150.0, model_rpm_limit={"gpt-4": 150}, @@ -432,3 +420,370 @@ async def test_project_info(prisma_client): traceback.print_exc() pytest.fail(f"Got exception {e}") + +### VALIDATION TESTS ### + + +def test_check_team_project_limits_models_not_in_team(): + """ + Test that creating a project with models not in the team raises an error. + """ + from litellm.proxy.management_endpoints.project_endpoints import ( + _check_team_project_limits, + ) + from litellm.proxy._types import LiteLLM_TeamTable + + team = LiteLLM_TeamTable( + team_id="test-team", + models=["gpt-4", "gpt-3.5-turbo"], + ) + + data = NewProjectRequest( + team_id="test-team", + models=["gpt-4", "claude-3"], # claude-3 not in team + ) + + with pytest.raises(Exception) as exc_info: + _check_team_project_limits(team_object=team, data=data) + + assert "claude-3" in str(exc_info.value.detail) + assert "not in team's allowed models" in str(exc_info.value.detail) + + +def test_check_team_project_limits_budget_exceeds_team(): + """ + Test that creating a project with budget > team budget raises an error. + """ + from litellm.proxy.management_endpoints.project_endpoints import ( + _check_team_project_limits, + ) + from litellm.proxy._types import LiteLLM_TeamTable + + team = LiteLLM_TeamTable( + team_id="test-team", + models=["gpt-4"], + max_budget=100.0, + ) + + data = NewProjectRequest( + team_id="test-team", + models=["gpt-4"], + max_budget=150.0, # exceeds team's 100.0 + ) + + with pytest.raises(Exception) as exc_info: + _check_team_project_limits(team_object=team, data=data) + + assert "exceeds team's max_budget" in str(exc_info.value.detail) + + +def test_check_team_project_limits_valid_subset(): + """ + Test that a valid project (models subset, budget within limit) passes. + """ + from litellm.proxy.management_endpoints.project_endpoints import ( + _check_team_project_limits, + ) + from litellm.proxy._types import LiteLLM_TeamTable + + team = LiteLLM_TeamTable( + team_id="test-team", + models=["gpt-4", "gpt-3.5-turbo", "claude-3"], + max_budget=1000.0, + ) + + data = NewProjectRequest( + team_id="test-team", + models=["gpt-4", "gpt-3.5-turbo"], + max_budget=500.0, + ) + + # Should not raise + _check_team_project_limits(team_object=team, data=data) + + +def test_check_team_project_limits_all_proxy_models(): + """ + Test that team with 'all-proxy-models' allows any project models. + """ + from litellm.proxy.management_endpoints.project_endpoints import ( + _check_team_project_limits, + ) + from litellm.proxy._types import LiteLLM_TeamTable + + team = LiteLLM_TeamTable( + team_id="test-team", + models=["all-proxy-models"], + ) + + data = NewProjectRequest( + team_id="test-team", + models=["gpt-4", "claude-3", "anything-goes"], + ) + + # Should not raise - team allows all models + _check_team_project_limits(team_object=team, data=data) + + +def test_check_team_project_limits_tpm_exceeds_team(): + """ + Test that project tpm_limit exceeding team tpm_limit raises an error. + """ + from litellm.proxy.management_endpoints.project_endpoints import ( + _check_team_project_limits, + ) + from litellm.proxy._types import LiteLLM_TeamTable + + team = LiteLLM_TeamTable( + team_id="test-team", + models=["gpt-4"], + tpm_limit=10000, + ) + + data = NewProjectRequest( + team_id="test-team", + models=["gpt-4"], + tpm_limit=20000, # exceeds team's 10000 + ) + + with pytest.raises(Exception) as exc_info: + _check_team_project_limits(team_object=team, data=data) + + assert "exceeds team's tpm_limit" in str(exc_info.value.detail) + + +def test_check_team_project_limits_negative_budget(): + """ + Test that negative budget values raise an error. + """ + from litellm.proxy.management_endpoints.project_endpoints import ( + _check_team_project_limits, + ) + from litellm.proxy._types import LiteLLM_TeamTable + + team = LiteLLM_TeamTable( + team_id="test-team", + models=["gpt-4"], + ) + + data = NewProjectRequest( + team_id="test-team", + models=["gpt-4"], + max_budget=-10.0, + ) + + with pytest.raises(Exception) as exc_info: + _check_team_project_limits(team_object=team, data=data) + + assert "cannot be negative" in str(exc_info.value.detail) + + +def test_check_team_project_limits_soft_budget_gte_max(): + """ + Test that soft_budget >= max_budget raises an error. + """ + from litellm.proxy.management_endpoints.project_endpoints import ( + _check_team_project_limits, + ) + from litellm.proxy._types import LiteLLM_TeamTable + + team = LiteLLM_TeamTable( + team_id="test-team", + models=["gpt-4"], + ) + + data = NewProjectRequest( + team_id="test-team", + models=["gpt-4"], + max_budget=100.0, + soft_budget=100.0, # equal to max, should fail + ) + + with pytest.raises(Exception) as exc_info: + _check_team_project_limits(team_object=team, data=data) + + assert "must be strictly lower" in str(exc_info.value.detail) + + +def test_premium_user_gate(): + """ + Test that project endpoints require premium_user=True. + """ + + # This test just validates the premium_user check exists + # The actual endpoint test would need prisma, but we can verify + # the import path works + setattr(litellm.proxy.proxy_server, "premium_user", False) + + # Verify that CommonProxyErrors.not_premium_user exists + from litellm.proxy._types import CommonProxyErrors + + assert hasattr(CommonProxyErrors, "not_premium_user") + + # Reset + setattr(litellm.proxy.proxy_server, "premium_user", True) + + +def test_project_model_access_denied_error_type(): + """ + Test that ProxyErrorTypes.project_model_access_denied exists. + """ + from litellm.proxy._types import ProxyErrorTypes + + assert hasattr(ProxyErrorTypes, "project_model_access_denied") + assert ( + ProxyErrorTypes.project_model_access_denied.value + == "project_model_access_denied" + ) + + # Test the classmethod resolves correctly + result = ProxyErrorTypes.get_model_access_error_type_for_object("project") + assert result == ProxyErrorTypes.project_model_access_denied + + +def test_project_cached_obj_has_last_refreshed_at(): + """ + Test that LiteLLM_ProjectTableCachedObj has last_refreshed_at field + matching LiteLLM_TeamTableCachedObj pattern. + """ + from litellm.proxy._types import ( + LiteLLM_ProjectTableCachedObj, + LiteLLM_ProjectTable, + ) + + # Verify inheritance + assert issubclass(LiteLLM_ProjectTableCachedObj, LiteLLM_ProjectTable) + + # Verify last_refreshed_at field exists and defaults to None + obj = LiteLLM_ProjectTableCachedObj( + project_id="test", + created_by="admin", + updated_by="admin", + ) + assert obj.last_refreshed_at is None + + # Verify it can be set + obj.last_refreshed_at = 1234567890.0 + assert obj.last_refreshed_at == 1234567890.0 + + +@pytest.mark.asyncio +async def test_project_max_budget_check_fires_alert(): + """ + Test that _project_max_budget_check fires a budget alert + when project exceeds its max budget (matches _team_max_budget_check pattern). + """ + from litellm.proxy.auth.auth_checks import _project_max_budget_check + from litellm.proxy._types import ( + LiteLLM_BudgetTable, + LiteLLM_ProjectTableCachedObj, + ) + + project = LiteLLM_ProjectTableCachedObj( + project_id="test-project", + spend=150.0, + created_by="admin", + updated_by="admin", + litellm_budget_table=LiteLLM_BudgetTable(max_budget=100.0), + ) + + valid_token = UserAPIKeyAuth( + token="test-token", + user_id="user-1", + team_id="team-1", + ) + + mock_proxy_logging = mock.AsyncMock(spec=ProxyLogging) + mock_proxy_logging.budget_alerts = mock.AsyncMock() + + with pytest.raises(litellm.BudgetExceededError) as exc_info: + await _project_max_budget_check( + project_object=project, + valid_token=valid_token, + proxy_logging_obj=mock_proxy_logging, + ) + + assert "Project=test-project" in str(exc_info.value) + assert "150.0" in str(exc_info.value) + + +@pytest.mark.asyncio +async def test_project_soft_budget_check(): + """ + Test that _project_soft_budget_check triggers alert when soft budget is exceeded. + """ + from litellm.proxy.auth.auth_checks import _project_soft_budget_check + from litellm.proxy._types import ( + LiteLLM_BudgetTable, + LiteLLM_ProjectTableCachedObj, + ) + + project = LiteLLM_ProjectTableCachedObj( + project_id="test-project", + spend=80.0, + created_by="admin", + updated_by="admin", + litellm_budget_table=LiteLLM_BudgetTable(soft_budget=75.0), + ) + + valid_token = UserAPIKeyAuth( + token="test-token", + user_id="user-1", + team_id="team-1", + ) + + mock_proxy_logging = mock.AsyncMock(spec=ProxyLogging) + mock_proxy_logging.budget_alerts = mock.AsyncMock() + + # Should not raise (soft budget only alerts, doesn't block) + await _project_soft_budget_check( + project_object=project, + valid_token=valid_token, + proxy_logging_obj=mock_proxy_logging, + ) + + +@pytest.mark.asyncio +async def test_project_soft_budget_check_no_alert_under_budget(): + """ + Test that _project_soft_budget_check does NOT trigger alert when under soft budget. + """ + from litellm.proxy.auth.auth_checks import _project_soft_budget_check + from litellm.proxy._types import ( + LiteLLM_BudgetTable, + LiteLLM_ProjectTableCachedObj, + ) + + project = LiteLLM_ProjectTableCachedObj( + project_id="test-project", + spend=50.0, + created_by="admin", + updated_by="admin", + litellm_budget_table=LiteLLM_BudgetTable(soft_budget=75.0), + ) + + valid_token = UserAPIKeyAuth( + token="test-token", + user_id="user-1", + team_id="team-1", + ) + + mock_proxy_logging = mock.AsyncMock(spec=ProxyLogging) + mock_proxy_logging.budget_alerts = mock.AsyncMock() + + # Should not raise and should not alert + await _project_soft_budget_check( + project_object=project, + valid_token=valid_token, + proxy_logging_obj=mock_proxy_logging, + ) + + +def test_litellm_entity_type_has_project(): + """ + Test that Litellm_EntityType has PROJECT member for budget alerts. + """ + from litellm.proxy._types import Litellm_EntityType + + assert hasattr(Litellm_EntityType, "PROJECT") + assert Litellm_EntityType.PROJECT.value == "project" From c1fce02b2196c38e2878b916a708d8324c43e877 Mon Sep 17 00:00:00 2001 From: Harshit Jain Date: Thu, 19 Feb 2026 09:26:51 +0530 Subject: [PATCH 21/23] fix: mypy issues --- litellm/proxy/auth/auth_checks.py | 91 +++++++++++++++++-------------- 1 file changed, 50 insertions(+), 41 deletions(-) diff --git a/litellm/proxy/auth/auth_checks.py b/litellm/proxy/auth/auth_checks.py index e3f4534b23..0e097b689e 100644 --- a/litellm/proxy/auth/auth_checks.py +++ b/litellm/proxy/auth/auth_checks.py @@ -11,8 +11,7 @@ Run checks for: import asyncio import re import time -from typing import (TYPE_CHECKING, Any, Dict, List, Literal, Optional, Union, - cast) +from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Union, cast from fastapi import HTTPException, Request, status from pydantic import BaseModel @@ -21,27 +20,42 @@ import litellm from litellm._logging import verbose_proxy_logger from litellm.caching.caching import DualCache from litellm.caching.dual_cache import LimitedSizeOrderedDict -from litellm.constants import (CLI_JWT_EXPIRATION_HOURS, CLI_JWT_TOKEN_NAME, - DEFAULT_ACCESS_GROUP_CACHE_TTL, - DEFAULT_IN_MEMORY_TTL, - DEFAULT_MANAGEMENT_OBJECT_IN_MEMORY_CACHE_TTL, - DEFAULT_MAX_RECURSE_DEPTH, - EMAIL_BUDGET_ALERT_MAX_SPEND_ALERT_PERCENTAGE) +from litellm.constants import ( + CLI_JWT_EXPIRATION_HOURS, + CLI_JWT_TOKEN_NAME, + DEFAULT_ACCESS_GROUP_CACHE_TTL, + DEFAULT_IN_MEMORY_TTL, + DEFAULT_MANAGEMENT_OBJECT_IN_MEMORY_CACHE_TTL, + DEFAULT_MAX_RECURSE_DEPTH, + EMAIL_BUDGET_ALERT_MAX_SPEND_ALERT_PERCENTAGE, +) from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider -from litellm.proxy._types import (RBAC_ROLES, CallInfo, - LiteLLM_AccessGroupTable, - LiteLLM_BudgetTable, LiteLLM_EndUserTable, - Litellm_EntityType, LiteLLM_JWTAuth, - LiteLLM_ObjectPermissionTable, - LiteLLM_OrganizationMembershipTable, - LiteLLM_OrganizationTable, LiteLLM_TagTable, - LiteLLM_TeamMembership, LiteLLM_TeamTable, - LiteLLM_TeamTableCachedObj, - LiteLLM_UserTable, LiteLLMRoutes, - LitellmUserRoles, NewTeamRequest, - ProxyErrorTypes, ProxyException, - RoleBasedPermissions, SpecialModelNames, - UserAPIKeyAuth) +from litellm.proxy._types import ( + RBAC_ROLES, + CallInfo, + LiteLLM_AccessGroupTable, + LiteLLM_BudgetTable, + LiteLLM_EndUserTable, + Litellm_EntityType, + LiteLLM_JWTAuth, + LiteLLM_ObjectPermissionTable, + LiteLLM_OrganizationMembershipTable, + LiteLLM_OrganizationTable, + LiteLLM_TagTable, + LiteLLM_TeamMembership, + LiteLLM_TeamTable, + LiteLLM_TeamTableCachedObj, + LiteLLM_ProjectTableCachedObj, + LiteLLM_UserTable, + LiteLLMRoutes, + LitellmUserRoles, + NewTeamRequest, + ProxyErrorTypes, + ProxyException, + RoleBasedPermissions, + SpecialModelNames, + UserAPIKeyAuth, +) from litellm.proxy.auth.route_checks import RouteChecks from litellm.proxy.route_llm_request import route_request from litellm.proxy.utils import PrismaClient, ProxyLogging, log_db_metrics @@ -420,8 +434,7 @@ async def common_checks( _request_metadata: dict = request_body.get("metadata", {}) or {} if _request_metadata.get("guardrails"): # check if team allowed to modify guardrails - from litellm.proxy.guardrails.guardrail_helpers import \ - can_modify_guardrails + from litellm.proxy.guardrails.guardrail_helpers import can_modify_guardrails can_modify: bool = can_modify_guardrails(team_object) if can_modify is False: @@ -596,11 +609,7 @@ def _allowed_routes_check(user_route: str, allowed_routes: list) -> bool: def allowed_routes_check( - user_role: Literal[ - LitellmUserRoles.PROXY_ADMIN, - LitellmUserRoles.TEAM, - LitellmUserRoles.INTERNAL_USER, - ], + user_role: LitellmUserRoles, user_route: str, litellm_proxy_roles: LiteLLM_JWTAuth, ) -> bool: @@ -1867,8 +1876,9 @@ class ExperimentalUIJWTToken: def get_experimental_ui_login_jwt_auth_token(user_info: LiteLLM_UserTable) -> str: from datetime import timedelta - from litellm.proxy.common_utils.encrypt_decrypt_utils import \ - encrypt_value_helper + from litellm.proxy.common_utils.encrypt_decrypt_utils import ( + encrypt_value_helper, + ) if user_info.user_role is None: raise Exception("User role is required for experimental UI login") @@ -1914,8 +1924,9 @@ class ExperimentalUIJWTToken: """ from datetime import timedelta - from litellm.proxy.common_utils.encrypt_decrypt_utils import \ - encrypt_value_helper + from litellm.proxy.common_utils.encrypt_decrypt_utils import ( + encrypt_value_helper, + ) if user_info.user_role is None: raise Exception("User role is required for CLI JWT login") @@ -1954,8 +1965,9 @@ class ExperimentalUIJWTToken: import json from litellm.proxy.auth.user_api_key_auth import UserAPIKeyAuth - from litellm.proxy.common_utils.encrypt_decrypt_utils import \ - decrypt_value_helper + from litellm.proxy.common_utils.encrypt_decrypt_utils import ( + decrypt_value_helper, + ) decrypted_token = decrypt_value_helper( hashed_token, key="ui_hash_key", exception_type="debug" @@ -2203,10 +2215,8 @@ async def _get_resources_from_access_groups( # Lazy import to avoid circular imports if prisma_client is None or user_api_key_cache is None: from litellm.proxy.proxy_server import prisma_client as _prisma_client - from litellm.proxy.proxy_server import \ - proxy_logging_obj as _proxy_logging_obj - from litellm.proxy.proxy_server import \ - user_api_key_cache as _user_api_key_cache + from litellm.proxy.proxy_server import proxy_logging_obj as _proxy_logging_obj + from litellm.proxy.proxy_server import user_api_key_cache as _user_api_key_cache prisma_client = prisma_client or _prisma_client user_api_key_cache = user_api_key_cache or _user_api_key_cache @@ -3162,8 +3172,7 @@ async def _tag_max_budget_check( BudgetExceededError if any tag is over its max budget. Triggers a budget alert if any tag is over its max budget. """ - from litellm.proxy.common_utils.http_parsing_utils import \ - get_tags_from_request_body + from litellm.proxy.common_utils.http_parsing_utils import get_tags_from_request_body if prisma_client is None: return From 31752c7b78f1690aa8eb4da1cbcfe0135cfb65dc Mon Sep 17 00:00:00 2001 From: Harshit Jain Date: Thu, 19 Feb 2026 11:11:52 +0530 Subject: [PATCH 22/23] fix: mypy issues from auth_checks --- .../integrations/SlackAlerting/budget_alert_types.py | 10 ++++++++++ litellm/integrations/SlackAlerting/slack_alerting.py | 9 +++++++-- litellm/proxy/utils.py | 11 +++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/litellm/integrations/SlackAlerting/budget_alert_types.py b/litellm/integrations/SlackAlerting/budget_alert_types.py index 205c5c89e3..ea80b25854 100644 --- a/litellm/integrations/SlackAlerting/budget_alert_types.py +++ b/litellm/integrations/SlackAlerting/budget_alert_types.py @@ -74,6 +74,14 @@ class ProjectedLimitExceededAlert(BaseBudgetAlertType): return user_info.token or "default_id" +class ProjectBudgetAlert(BaseBudgetAlertType): + def get_event_message(self) -> str: + return "Project Budget: " + + def get_id(self, user_info: CallInfo) -> str: + return user_info.token or "default_id" + + def get_budget_alert_type( type: Literal[ "token_budget", @@ -84,6 +92,7 @@ def get_budget_alert_type( "organization_budget", "proxy_budget", "projected_limit_exceeded", + "project_budget", ], ) -> BaseBudgetAlertType: """Factory function to get the appropriate budget alert type class""" @@ -97,6 +106,7 @@ def get_budget_alert_type( "organization_budget": OrganizationBudgetAlert(), "token_budget": TokenBudgetAlert(), "projected_limit_exceeded": ProjectedLimitExceededAlert(), + "project_budget": ProjectBudgetAlert(), } if type in alert_types: diff --git a/litellm/integrations/SlackAlerting/slack_alerting.py b/litellm/integrations/SlackAlerting/slack_alerting.py index 8fb3e132de..a525856db8 100644 --- a/litellm/integrations/SlackAlerting/slack_alerting.py +++ b/litellm/integrations/SlackAlerting/slack_alerting.py @@ -538,6 +538,7 @@ class SlackAlerting(CustomBatchLogger): "organization_budget", "proxy_budget", "projected_limit_exceeded", + "project_budget", ], user_info: CallInfo, ): @@ -1378,9 +1379,13 @@ Model Info: """ if self.alerting is None: return - + # Start periodic flush if not already started - if not self.periodic_started and self.alerting is not None and len(self.alerting) > 0: + if ( + not self.periodic_started + and self.alerting is not None + and len(self.alerting) > 0 + ): asyncio.create_task(self.periodic_flush()) self.periodic_started = True diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 94471f0e32..1a1764324a 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1238,7 +1238,8 @@ class ProxyLogging: if result.terminal_action == "modify_response": raise ModifyResponseException( - message=result.modify_response_message or "Response modified by pipeline", + message=result.modify_response_message + or "Response modified by pipeline", model=data.get("model", "unknown"), request_data=data, guardrail_name=f"pipeline:{policy_name}", @@ -1321,7 +1322,6 @@ class ProxyLogging: metadata = data.get("metadata", data.get("litellm_metadata", {})) or {} pipeline_managed: set = metadata.get("_pipeline_managed_guardrails", set()) - for callback in litellm.callbacks: start_time = time.time() _callback = None @@ -1337,7 +1337,10 @@ class ProxyLogging: and data is not None ): # Skip guardrails managed by a pipeline - if _callback.guardrail_name and _callback.guardrail_name in pipeline_managed: + if ( + _callback.guardrail_name + and _callback.guardrail_name in pipeline_managed + ): continue result = await self._process_guardrail_callback( @@ -1491,6 +1494,7 @@ class ProxyLogging: "organization_budget", "proxy_budget", "projected_limit_exceeded", + "project_budget", ], user_info: CallInfo, ): @@ -1885,7 +1889,6 @@ class ProxyLogging: from litellm.types.guardrails import GuardrailEventHooks - guardrail_callbacks: List[CustomGuardrail] = [] other_callbacks: List[CustomLogger] = [] try: From bdf01fa283ab0b3ab18c3d43e09b98cfd1b4e346 Mon Sep 17 00:00:00 2001 From: Harshit Jain Date: Thu, 19 Feb 2026 14:04:00 +0530 Subject: [PATCH 23/23] fix mypy error --- .../pagerduty/pagerduty.py | 620 +- litellm/litellm_core_utils/litellm_logging.py | 10890 ++++++++-------- .../proxy/hooks/proxy_track_cost_callback.py | 582 +- .../pass_through_endpoints.py | 5489 ++++---- 4 files changed, 8797 insertions(+), 8784 deletions(-) diff --git a/enterprise/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py b/enterprise/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py index e481cdc995..b6c9104b23 100644 --- a/enterprise/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py +++ b/enterprise/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py @@ -1,309 +1,311 @@ -""" -PagerDuty Alerting Integration - -Handles two types of alerts: -- High LLM API Failure Rate. Configure X fails in Y seconds to trigger an alert. -- High Number of Hanging LLM Requests. Configure X hangs in Y seconds to trigger an alert. - -Note: This is a Free feature on the regular litellm docker image. - -However, this is under the enterprise license -""" - -import asyncio -import os -from datetime import datetime, timedelta, timezone -from typing import List, Literal, Optional, Union - -from litellm._logging import verbose_logger -from litellm.caching import DualCache -from litellm.integrations.SlackAlerting.slack_alerting import SlackAlerting -from litellm.llms.custom_httpx.http_handler import ( - AsyncHTTPHandler, - get_async_httpx_client, - httpxSpecialProvider, -) -from litellm.proxy._types import UserAPIKeyAuth -from litellm.types.integrations.pagerduty import ( - AlertingConfig, - PagerDutyInternalEvent, - PagerDutyPayload, - PagerDutyRequestBody, -) -from litellm.types.utils import ( - CallTypesLiteral, - StandardLoggingPayload, - StandardLoggingPayloadErrorInformation, -) - -PAGERDUTY_DEFAULT_FAILURE_THRESHOLD = 60 -PAGERDUTY_DEFAULT_FAILURE_THRESHOLD_WINDOW_SECONDS = 60 -PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS = 60 -PAGERDUTY_DEFAULT_HANGING_THRESHOLD_WINDOW_SECONDS = 600 - - -class PagerDutyAlerting(SlackAlerting): - """ - Tracks failed requests and hanging requests separately. - If threshold is crossed for either type, triggers a PagerDuty alert. - """ - - def __init__( - self, alerting_args: Optional[Union[AlertingConfig, dict]] = None, **kwargs - ): - super().__init__() - _api_key = os.getenv("PAGERDUTY_API_KEY") - if not _api_key: - raise ValueError("PAGERDUTY_API_KEY is not set") - - self.api_key: str = _api_key - alerting_args = alerting_args or {} - self.pagerduty_alerting_args: AlertingConfig = AlertingConfig( - failure_threshold=alerting_args.get( - "failure_threshold", PAGERDUTY_DEFAULT_FAILURE_THRESHOLD - ), - failure_threshold_window_seconds=alerting_args.get( - "failure_threshold_window_seconds", - PAGERDUTY_DEFAULT_FAILURE_THRESHOLD_WINDOW_SECONDS, - ), - hanging_threshold_seconds=alerting_args.get( - "hanging_threshold_seconds", PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS - ), - hanging_threshold_window_seconds=alerting_args.get( - "hanging_threshold_window_seconds", - PAGERDUTY_DEFAULT_HANGING_THRESHOLD_WINDOW_SECONDS, - ), - ) - - # Separate storage for failures vs. hangs - self._failure_events: List[PagerDutyInternalEvent] = [] - self._hanging_events: List[PagerDutyInternalEvent] = [] - - # ------------------ MAIN LOGIC ------------------ # - - async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): - """ - Record a failure event. Only send an alert to PagerDuty if the - configured *failure* threshold is exceeded in the specified window. - """ - now = datetime.now(timezone.utc) - standard_logging_payload: Optional[StandardLoggingPayload] = kwargs.get( - "standard_logging_object" - ) - if not standard_logging_payload: - raise ValueError( - "standard_logging_object is required for PagerDutyAlerting" - ) - - # Extract error details - error_info: Optional[StandardLoggingPayloadErrorInformation] = ( - standard_logging_payload.get("error_information") or {} - ) - _meta = standard_logging_payload.get("metadata") or {} - - self._failure_events.append( - PagerDutyInternalEvent( - failure_event_type="failed_response", - timestamp=now, - error_class=error_info.get("error_class"), - error_code=error_info.get("error_code"), - error_llm_provider=error_info.get("llm_provider"), - user_api_key_hash=_meta.get("user_api_key_hash"), - user_api_key_alias=_meta.get("user_api_key_alias"), - user_api_key_spend=_meta.get("user_api_key_spend"), - user_api_key_max_budget=_meta.get("user_api_key_max_budget"), - user_api_key_budget_reset_at=_meta.get("user_api_key_budget_reset_at"), - user_api_key_org_id=_meta.get("user_api_key_org_id"), - user_api_key_team_id=_meta.get("user_api_key_team_id"), - user_api_key_user_id=_meta.get("user_api_key_user_id"), - user_api_key_team_alias=_meta.get("user_api_key_team_alias"), - user_api_key_end_user_id=_meta.get("user_api_key_end_user_id"), - user_api_key_user_email=_meta.get("user_api_key_user_email"), - user_api_key_request_route=_meta.get("user_api_key_request_route"), - user_api_key_auth_metadata=_meta.get("user_api_key_auth_metadata"), - ) - ) - - # Prune + Possibly alert - window_seconds = self.pagerduty_alerting_args.get( - "failure_threshold_window_seconds", 60 - ) - threshold = self.pagerduty_alerting_args.get("failure_threshold", 1) - - # If threshold is crossed, send PD alert for failures - await self._send_alert_if_thresholds_crossed( - events=self._failure_events, - window_seconds=window_seconds, - threshold=threshold, - alert_prefix="High LLM API Failure Rate", - ) - - async def async_pre_call_hook( - self, - user_api_key_dict: UserAPIKeyAuth, - cache: DualCache, - data: dict, - call_type: CallTypesLiteral, - ) -> Optional[Union[Exception, str, dict]]: - """ - Example of detecting hanging requests by waiting a given threshold. - If the request didn't finish by then, we treat it as 'hanging'. - """ - verbose_logger.info("Inside Proxy Logging Pre-call hook!") - asyncio.create_task( - self.hanging_response_handler( - request_data=data, user_api_key_dict=user_api_key_dict - ) - ) - return None - - async def hanging_response_handler( - self, request_data: Optional[dict], user_api_key_dict: UserAPIKeyAuth - ): - """ - Checks if request completed by the time 'hanging_threshold_seconds' elapses. - If not, we classify it as a hanging request. - """ - verbose_logger.debug( - f"Inside Hanging Response Handler!..sleeping for {self.pagerduty_alerting_args.get('hanging_threshold_seconds', PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS)} seconds" - ) - await asyncio.sleep( - self.pagerduty_alerting_args.get( - "hanging_threshold_seconds", PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS - ) - ) - - if await self._request_is_completed(request_data=request_data): - return # It's not hanging if completed - - # Otherwise, record it as hanging - self._hanging_events.append( - PagerDutyInternalEvent( - failure_event_type="hanging_response", - timestamp=datetime.now(timezone.utc), - error_class="HangingRequest", - error_code="HangingRequest", - error_llm_provider="HangingRequest", - user_api_key_hash=user_api_key_dict.api_key, - user_api_key_alias=user_api_key_dict.key_alias, - user_api_key_spend=user_api_key_dict.spend, - user_api_key_max_budget=user_api_key_dict.max_budget, - user_api_key_budget_reset_at=( - user_api_key_dict.budget_reset_at.isoformat() - if user_api_key_dict.budget_reset_at - else None - ), - user_api_key_org_id=user_api_key_dict.org_id, - user_api_key_team_id=user_api_key_dict.team_id, - user_api_key_user_id=user_api_key_dict.user_id, - user_api_key_team_alias=user_api_key_dict.team_alias, - user_api_key_end_user_id=user_api_key_dict.end_user_id, - user_api_key_user_email=user_api_key_dict.user_email, - user_api_key_request_route=user_api_key_dict.request_route, - user_api_key_auth_metadata=user_api_key_dict.metadata, - ) - ) - - # Prune + Possibly alert - window_seconds = self.pagerduty_alerting_args.get( - "hanging_threshold_window_seconds", - PAGERDUTY_DEFAULT_HANGING_THRESHOLD_WINDOW_SECONDS, - ) - threshold: int = self.pagerduty_alerting_args.get( - "hanging_threshold_fails", PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS - ) - - # If threshold is crossed, send PD alert for hangs - await self._send_alert_if_thresholds_crossed( - events=self._hanging_events, - window_seconds=window_seconds, - threshold=threshold, - alert_prefix="High Number of Hanging LLM Requests", - ) - - # ------------------ HELPERS ------------------ # - - async def _send_alert_if_thresholds_crossed( - self, - events: List[PagerDutyInternalEvent], - window_seconds: int, - threshold: int, - alert_prefix: str, - ): - """ - 1. Prune old events - 2. If threshold is reached, build alert, send to PagerDuty - 3. Clear those events - """ - cutoff = datetime.now(timezone.utc) - timedelta(seconds=window_seconds) - pruned = [e for e in events if e.get("timestamp", datetime.min) > cutoff] - - # Update the reference list - events.clear() - events.extend(pruned) - - # Check threshold - verbose_logger.debug( - f"Have {len(events)} events in the last {window_seconds} seconds. Threshold is {threshold}" - ) - if len(events) >= threshold: - # Build short summary of last N events - error_summaries = self._build_error_summaries(events, max_errors=5) - alert_message = ( - f"{alert_prefix}: {len(events)} in the last {window_seconds} seconds." - ) - custom_details = {"recent_errors": error_summaries} - - await self.send_alert_to_pagerduty( - alert_message=alert_message, - custom_details=custom_details, - ) - - # Clear them after sending an alert, so we don't spam - events.clear() - - def _build_error_summaries( - self, events: List[PagerDutyInternalEvent], max_errors: int = 5 - ) -> List[PagerDutyInternalEvent]: - """ - Build short text summaries for the last `max_errors`. - Example: "ValueError (code: 500, provider: openai)" - """ - recent = events[-max_errors:] - summaries = [] - for fe in recent: - # If any of these is None, show "N/A" to avoid messing up the summary string - fe.pop("timestamp") - summaries.append(fe) - return summaries - - async def send_alert_to_pagerduty(self, alert_message: str, custom_details: dict): - """ - Send [critical] Alert to PagerDuty - - https://developer.pagerduty.com/api-reference/YXBpOjI3NDgyNjU-pager-duty-v2-events-api - """ - try: - verbose_logger.debug(f"Sending alert to PagerDuty: {alert_message}") - async_client: AsyncHTTPHandler = get_async_httpx_client( - llm_provider=httpxSpecialProvider.LoggingCallback - ) - payload: PagerDutyRequestBody = PagerDutyRequestBody( - payload=PagerDutyPayload( - summary=alert_message, - severity="critical", - source="LiteLLM Alert", - component="LiteLLM", - custom_details=custom_details, - ), - routing_key=self.api_key, - event_action="trigger", - ) - - return await async_client.post( - url="https://events.pagerduty.com/v2/enqueue", - json=dict(payload), - headers={"Content-Type": "application/json"}, - ) - except Exception as e: - verbose_logger.exception(f"Error sending alert to PagerDuty: {e}") +""" +PagerDuty Alerting Integration + +Handles two types of alerts: +- High LLM API Failure Rate. Configure X fails in Y seconds to trigger an alert. +- High Number of Hanging LLM Requests. Configure X hangs in Y seconds to trigger an alert. + +Note: This is a Free feature on the regular litellm docker image. + +However, this is under the enterprise license +""" + +import asyncio +import os +from datetime import datetime, timedelta, timezone +from typing import List, Optional, Union + +from litellm._logging import verbose_logger +from litellm.caching import DualCache +from litellm.integrations.SlackAlerting.slack_alerting import SlackAlerting +from litellm.llms.custom_httpx.http_handler import ( + AsyncHTTPHandler, + get_async_httpx_client, + httpxSpecialProvider, +) +from litellm.proxy._types import UserAPIKeyAuth +from litellm.types.integrations.pagerduty import ( + AlertingConfig, + PagerDutyInternalEvent, + PagerDutyPayload, + PagerDutyRequestBody, +) +from litellm.types.utils import ( + CallTypesLiteral, + StandardLoggingPayload, + StandardLoggingPayloadErrorInformation, +) + +PAGERDUTY_DEFAULT_FAILURE_THRESHOLD = 60 +PAGERDUTY_DEFAULT_FAILURE_THRESHOLD_WINDOW_SECONDS = 60 +PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS = 60 +PAGERDUTY_DEFAULT_HANGING_THRESHOLD_WINDOW_SECONDS = 600 + + +class PagerDutyAlerting(SlackAlerting): + """ + Tracks failed requests and hanging requests separately. + If threshold is crossed for either type, triggers a PagerDuty alert. + """ + + def __init__( + self, alerting_args: Optional[Union[AlertingConfig, dict]] = None, **kwargs + ): + super().__init__() + _api_key = os.getenv("PAGERDUTY_API_KEY") + if not _api_key: + raise ValueError("PAGERDUTY_API_KEY is not set") + + self.api_key: str = _api_key + alerting_args = alerting_args or {} + self.pagerduty_alerting_args: AlertingConfig = AlertingConfig( + failure_threshold=alerting_args.get( + "failure_threshold", PAGERDUTY_DEFAULT_FAILURE_THRESHOLD + ), + failure_threshold_window_seconds=alerting_args.get( + "failure_threshold_window_seconds", + PAGERDUTY_DEFAULT_FAILURE_THRESHOLD_WINDOW_SECONDS, + ), + hanging_threshold_seconds=alerting_args.get( + "hanging_threshold_seconds", PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS + ), + hanging_threshold_window_seconds=alerting_args.get( + "hanging_threshold_window_seconds", + PAGERDUTY_DEFAULT_HANGING_THRESHOLD_WINDOW_SECONDS, + ), + ) + + # Separate storage for failures vs. hangs + self._failure_events: List[PagerDutyInternalEvent] = [] + self._hanging_events: List[PagerDutyInternalEvent] = [] + + # ------------------ MAIN LOGIC ------------------ # + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + """ + Record a failure event. Only send an alert to PagerDuty if the + configured *failure* threshold is exceeded in the specified window. + """ + now = datetime.now(timezone.utc) + standard_logging_payload: Optional[StandardLoggingPayload] = kwargs.get( + "standard_logging_object" + ) + if not standard_logging_payload: + raise ValueError( + "standard_logging_object is required for PagerDutyAlerting" + ) + + # Extract error details + error_info: Optional[StandardLoggingPayloadErrorInformation] = ( + standard_logging_payload.get("error_information") or {} + ) + _meta = standard_logging_payload.get("metadata") or {} + + self._failure_events.append( + PagerDutyInternalEvent( + failure_event_type="failed_response", + timestamp=now, + error_class=error_info.get("error_class"), + error_code=error_info.get("error_code"), + error_llm_provider=error_info.get("llm_provider"), + user_api_key_hash=_meta.get("user_api_key_hash"), + user_api_key_alias=_meta.get("user_api_key_alias"), + user_api_key_spend=_meta.get("user_api_key_spend"), + user_api_key_max_budget=_meta.get("user_api_key_max_budget"), + user_api_key_budget_reset_at=_meta.get("user_api_key_budget_reset_at"), + user_api_key_org_id=_meta.get("user_api_key_org_id"), + user_api_key_team_id=_meta.get("user_api_key_team_id"), + user_api_key_project_id=_meta.get("user_api_key_project_id"), + user_api_key_user_id=_meta.get("user_api_key_user_id"), + user_api_key_team_alias=_meta.get("user_api_key_team_alias"), + user_api_key_end_user_id=_meta.get("user_api_key_end_user_id"), + user_api_key_user_email=_meta.get("user_api_key_user_email"), + user_api_key_request_route=_meta.get("user_api_key_request_route"), + user_api_key_auth_metadata=_meta.get("user_api_key_auth_metadata"), + ) + ) + + # Prune + Possibly alert + window_seconds = self.pagerduty_alerting_args.get( + "failure_threshold_window_seconds", 60 + ) + threshold = self.pagerduty_alerting_args.get("failure_threshold", 1) + + # If threshold is crossed, send PD alert for failures + await self._send_alert_if_thresholds_crossed( + events=self._failure_events, + window_seconds=window_seconds, + threshold=threshold, + alert_prefix="High LLM API Failure Rate", + ) + + async def async_pre_call_hook( + self, + user_api_key_dict: UserAPIKeyAuth, + cache: DualCache, + data: dict, + call_type: CallTypesLiteral, + ) -> Optional[Union[Exception, str, dict]]: + """ + Example of detecting hanging requests by waiting a given threshold. + If the request didn't finish by then, we treat it as 'hanging'. + """ + verbose_logger.info("Inside Proxy Logging Pre-call hook!") + asyncio.create_task( + self.hanging_response_handler( + request_data=data, user_api_key_dict=user_api_key_dict + ) + ) + return None + + async def hanging_response_handler( + self, request_data: Optional[dict], user_api_key_dict: UserAPIKeyAuth + ): + """ + Checks if request completed by the time 'hanging_threshold_seconds' elapses. + If not, we classify it as a hanging request. + """ + verbose_logger.debug( + f"Inside Hanging Response Handler!..sleeping for {self.pagerduty_alerting_args.get('hanging_threshold_seconds', PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS)} seconds" + ) + await asyncio.sleep( + self.pagerduty_alerting_args.get( + "hanging_threshold_seconds", PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS + ) + ) + + if await self._request_is_completed(request_data=request_data): + return # It's not hanging if completed + + # Otherwise, record it as hanging + self._hanging_events.append( + PagerDutyInternalEvent( + failure_event_type="hanging_response", + timestamp=datetime.now(timezone.utc), + error_class="HangingRequest", + error_code="HangingRequest", + error_llm_provider="HangingRequest", + user_api_key_hash=user_api_key_dict.api_key, + user_api_key_alias=user_api_key_dict.key_alias, + user_api_key_spend=user_api_key_dict.spend, + user_api_key_max_budget=user_api_key_dict.max_budget, + user_api_key_budget_reset_at=( + user_api_key_dict.budget_reset_at.isoformat() + if user_api_key_dict.budget_reset_at + else None + ), + user_api_key_org_id=user_api_key_dict.org_id, + user_api_key_team_id=user_api_key_dict.team_id, + user_api_key_project_id=user_api_key_dict.project_id, + user_api_key_user_id=user_api_key_dict.user_id, + user_api_key_team_alias=user_api_key_dict.team_alias, + user_api_key_end_user_id=user_api_key_dict.end_user_id, + user_api_key_user_email=user_api_key_dict.user_email, + user_api_key_request_route=user_api_key_dict.request_route, + user_api_key_auth_metadata=user_api_key_dict.metadata, + ) + ) + + # Prune + Possibly alert + window_seconds = self.pagerduty_alerting_args.get( + "hanging_threshold_window_seconds", + PAGERDUTY_DEFAULT_HANGING_THRESHOLD_WINDOW_SECONDS, + ) + threshold: int = self.pagerduty_alerting_args.get( + "hanging_threshold_fails", PAGERDUTY_DEFAULT_HANGING_THRESHOLD_SECONDS + ) + + # If threshold is crossed, send PD alert for hangs + await self._send_alert_if_thresholds_crossed( + events=self._hanging_events, + window_seconds=window_seconds, + threshold=threshold, + alert_prefix="High Number of Hanging LLM Requests", + ) + + # ------------------ HELPERS ------------------ # + + async def _send_alert_if_thresholds_crossed( + self, + events: List[PagerDutyInternalEvent], + window_seconds: int, + threshold: int, + alert_prefix: str, + ): + """ + 1. Prune old events + 2. If threshold is reached, build alert, send to PagerDuty + 3. Clear those events + """ + cutoff = datetime.now(timezone.utc) - timedelta(seconds=window_seconds) + pruned = [e for e in events if e.get("timestamp", datetime.min) > cutoff] + + # Update the reference list + events.clear() + events.extend(pruned) + + # Check threshold + verbose_logger.debug( + f"Have {len(events)} events in the last {window_seconds} seconds. Threshold is {threshold}" + ) + if len(events) >= threshold: + # Build short summary of last N events + error_summaries = self._build_error_summaries(events, max_errors=5) + alert_message = ( + f"{alert_prefix}: {len(events)} in the last {window_seconds} seconds." + ) + custom_details = {"recent_errors": error_summaries} + + await self.send_alert_to_pagerduty( + alert_message=alert_message, + custom_details=custom_details, + ) + + # Clear them after sending an alert, so we don't spam + events.clear() + + def _build_error_summaries( + self, events: List[PagerDutyInternalEvent], max_errors: int = 5 + ) -> List[PagerDutyInternalEvent]: + """ + Build short text summaries for the last `max_errors`. + Example: "ValueError (code: 500, provider: openai)" + """ + recent = events[-max_errors:] + summaries = [] + for fe in recent: + # If any of these is None, show "N/A" to avoid messing up the summary string + fe.pop("timestamp") + summaries.append(fe) + return summaries + + async def send_alert_to_pagerduty(self, alert_message: str, custom_details: dict): + """ + Send [critical] Alert to PagerDuty + + https://developer.pagerduty.com/api-reference/YXBpOjI3NDgyNjU-pager-duty-v2-events-api + """ + try: + verbose_logger.debug(f"Sending alert to PagerDuty: {alert_message}") + async_client: AsyncHTTPHandler = get_async_httpx_client( + llm_provider=httpxSpecialProvider.LoggingCallback + ) + payload: PagerDutyRequestBody = PagerDutyRequestBody( + payload=PagerDutyPayload( + summary=alert_message, + severity="critical", + source="LiteLLM Alert", + component="LiteLLM", + custom_details=custom_details, + ), + routing_key=self.api_key, + event_action="trigger", + ) + + return await async_client.post( + url="https://events.pagerduty.com/v2/enqueue", + json=dict(payload), + headers={"Content-Type": "application/json"}, + ) + except Exception as e: + verbose_logger.exception(f"Error sending alert to PagerDuty: {e}") diff --git a/litellm/litellm_core_utils/litellm_logging.py b/litellm/litellm_core_utils/litellm_logging.py index 6a14e42c48..5f555d83cf 100644 --- a/litellm/litellm_core_utils/litellm_logging.py +++ b/litellm/litellm_core_utils/litellm_logging.py @@ -1,5444 +1,5446 @@ -# What is this? -## Common Utility file for Logging handler -# Logging function -> log the exact model details + what's being sent | Non-Blocking -import copy -import datetime -import json -import os -import re -import subprocess -import sys -import time -import traceback -from datetime import datetime as dt_object -from functools import lru_cache -from typing import ( - TYPE_CHECKING, - Any, - Callable, - Dict, - List, - Literal, - Optional, - Tuple, - Type, - Union, - cast, -) - -from httpx import Response -from pydantic import BaseModel - -import litellm -from litellm import ( - _custom_logger_compatible_callbacks_literal, - json_logs, - log_raw_request_response, - turn_off_message_logging, -) -from litellm._logging import _is_debugging_on, verbose_logger -from litellm._uuid import uuid -from litellm.batches.batch_utils import _handle_completed_batch -from litellm.caching.caching import DualCache, InMemoryCache -from litellm.caching.caching_handler import LLMCachingHandler -from litellm.constants import ( - DEFAULT_MOCK_RESPONSE_COMPLETION_TOKEN_COUNT, - DEFAULT_MOCK_RESPONSE_PROMPT_TOKEN_COUNT, - SENTRY_DENYLIST, - SENTRY_PII_DENYLIST, -) -from litellm.cost_calculator import ( - RealtimeAPITokenUsageProcessor, - _select_model_name_for_cost_calc, -) -from litellm.integrations.agentops import AgentOps -from litellm.integrations.anthropic_cache_control_hook import AnthropicCacheControlHook -from litellm.integrations.arize.arize import ArizeLogger -from litellm.integrations.custom_guardrail import CustomGuardrail -from litellm.integrations.custom_logger import CustomLogger -from litellm.integrations.deepeval.deepeval import DeepEvalLogger -from litellm.integrations.mlflow import MlflowLogger -from litellm.integrations.sqs import SQSLogger -from litellm.litellm_core_utils.core_helpers import reconstruct_model_name -from litellm.litellm_core_utils.get_litellm_params import get_litellm_params -from litellm.litellm_core_utils.llm_cost_calc.tool_call_cost_tracking import ( - StandardBuiltInToolCostTracking, -) -from litellm.litellm_core_utils.model_param_helper import ModelParamHelper -from litellm.litellm_core_utils.redact_messages import ( - redact_message_input_output_from_custom_logger, - redact_message_input_output_from_logging, -) -from litellm.llms.base_llm.ocr.transformation import OCRResponse -from litellm.llms.base_llm.search.transformation import SearchResponse -from litellm.responses.utils import ResponseAPILoggingUtils -from litellm.types.agents import LiteLLMSendMessageResponse -from litellm.types.containers.main import ContainerObject -from litellm.types.llms.openai import ( - AllMessageValues, - Batch, - FineTuningJob, - HttpxBinaryResponseContent, - OpenAIFileObject, - OpenAIModerationResponse, - ResponseAPIUsage, - ResponseCompletedEvent, - ResponsesAPIResponse, -) -from litellm.types.mcp import MCPPostCallResponseObject -from litellm.types.prompts.init_prompts import PromptSpec -from litellm.types.rerank import RerankResponse -from litellm.types.utils import ( - CachingDetails, - CallTypes, - CostBreakdown, - CostResponseTypes, - CustomPricingLiteLLMParams, - DynamicPromptManagementParamLiteral, - EmbeddingResponse, - GuardrailStatus, - ImageResponse, - LiteLLMBatch, - LiteLLMLoggingBaseClass, - LiteLLMRealtimeStreamLoggingObject, - ModelResponse, - ModelResponseStream, - RawRequestTypedDict, - StandardBuiltInToolsParams, - StandardCallbackDynamicParams, - StandardLoggingAdditionalHeaders, - StandardLoggingHiddenParams, - StandardLoggingMCPToolCall, - StandardLoggingMetadata, - StandardLoggingModelCostFailureDebugInformation, - StandardLoggingModelInformation, - StandardLoggingPayload, - StandardLoggingPayloadErrorInformation, - StandardLoggingPayloadStatus, - StandardLoggingPayloadStatusFields, - StandardLoggingPromptManagementMetadata, - StandardLoggingVectorStoreRequest, - TextCompletionResponse, - TranscriptionResponse, - Usage, -) -from litellm.types.videos.main import VideoObject -from litellm.utils import _get_base_model_from_metadata, executor, print_verbose - -from ..integrations.argilla import ArgillaLogger -from ..integrations.arize.arize_phoenix import ArizePhoenixLogger -from ..integrations.athina import AthinaLogger -from ..integrations.azure_sentinel.azure_sentinel import AzureSentinelLogger -from ..integrations.azure_storage.azure_storage import AzureBlobStorageLogger -from ..integrations.custom_prompt_management import CustomPromptManagement -from ..integrations.datadog.datadog import DataDogLogger -from ..integrations.datadog.datadog_llm_obs import DataDogLLMObsLogger -from ..integrations.dotprompt import DotpromptManager -from ..integrations.dynamodb import DyanmoDBLogger -from ..integrations.galileo import GalileoObserve -from ..integrations.gcs_bucket.gcs_bucket import GCSBucketLogger -from ..integrations.gcs_pubsub.pub_sub import GcsPubSubLogger -from ..integrations.greenscale import GreenscaleLogger -from ..integrations.helicone import HeliconeLogger -from ..integrations.humanloop import HumanloopLogger -from ..integrations.lago import LagoLogger -from ..integrations.langfuse.langfuse import LangFuseLogger -from ..integrations.langfuse.langfuse_handler import LangFuseHandler -from ..integrations.langfuse.langfuse_prompt_management import LangfusePromptManagement -from ..integrations.langsmith import LangsmithLogger -from ..integrations.literal_ai import LiteralAILogger -from ..integrations.logfire_logger import LogfireLevel, LogfireLogger -from ..integrations.lunary import LunaryLogger -from ..integrations.openmeter import OpenMeterLogger -from ..integrations.opik.opik import OpikLogger -from ..integrations.posthog import PostHogLogger -from ..integrations.prompt_layer import PromptLayerLogger -from ..integrations.s3 import S3Logger -from ..integrations.s3_v2 import S3Logger as S3V2Logger -from ..integrations.supabase import Supabase -from ..integrations.traceloop import TraceloopLogger -from .exception_mapping_utils import _get_response_headers -from .initialize_dynamic_callback_params import ( - initialize_standard_callback_dynamic_params as _initialize_standard_callback_dynamic_params, -) -from .specialty_caches.dynamic_logging_cache import DynamicLoggingCache - -if TYPE_CHECKING: - from litellm.llms.base_llm.passthrough.transformation import BasePassthroughConfig -try: - from litellm_enterprise.enterprise_callbacks.callback_controls import ( - EnterpriseCallbackControls, - ) - from litellm_enterprise.enterprise_callbacks.pagerduty.pagerduty import ( - PagerDutyAlerting, - ) - from litellm_enterprise.enterprise_callbacks.send_emails.resend_email import ( - ResendEmailLogger, - ) - from litellm_enterprise.enterprise_callbacks.send_emails.sendgrid_email import ( - SendGridEmailLogger, - ) - from litellm_enterprise.enterprise_callbacks.send_emails.smtp_email import ( - SMTPEmailLogger, - ) - from litellm_enterprise.litellm_core_utils.litellm_logging import ( - StandardLoggingPayloadSetup as EnterpriseStandardLoggingPayloadSetup, - ) - - from litellm.integrations.generic_api.generic_api_callback import GenericAPILogger - - EnterpriseStandardLoggingPayloadSetupVAR: Optional[ - Type[EnterpriseStandardLoggingPayloadSetup] - ] = EnterpriseStandardLoggingPayloadSetup -except Exception as e: - verbose_logger.debug( - f"[Non-Blocking] Unable to import GenericAPILogger - LiteLLM Enterprise Feature - {str(e)}" - ) - GenericAPILogger = CustomLogger # type: ignore - ResendEmailLogger = CustomLogger # type: ignore - SendGridEmailLogger = CustomLogger # type: ignore - SMTPEmailLogger = CustomLogger # type: ignore - PagerDutyAlerting = CustomLogger # type: ignore - EnterpriseCallbackControls = None # type: ignore - EnterpriseStandardLoggingPayloadSetupVAR = None -_in_memory_loggers: List[Any] = [] - -_STANDARD_LOGGING_METADATA_KEYS: frozenset = frozenset( - StandardLoggingMetadata.__annotations__.keys() -) - -### GLOBAL VARIABLES ### - -# Cache custom pricing keys as frozenset for O(1) lookups instead of looping through 49 keys -_CUSTOM_PRICING_KEYS: frozenset = frozenset( - CustomPricingLiteLLMParams.model_fields.keys() -) - -sentry_sdk_instance = None -capture_exception = None -add_breadcrumb = None -slack_app = None -alerts_channel = None -heliconeLogger = None -athinaLogger = None -promptLayerLogger = None -logfireLogger = None -weightsBiasesLogger = None -customLogger = None -langFuseLogger = None -openMeterLogger = None -lagoLogger = None -dataDogLogger = None -prometheusLogger = None -dynamoLogger = None -s3Logger = None -greenscaleLogger = None -lunaryLogger = None -supabaseClient = None -deepevalLogger = None -callback_list: Optional[List[str]] = [] -user_logger_fn = None -additional_details: Optional[Dict[str, str]] = {} -local_cache: Optional[Dict[str, str]] = {} -last_fetched_at = None -last_fetched_at_keys = None - - -#### -class ServiceTraceIDCache: - def __init__(self) -> None: - self.cache = InMemoryCache() - - def get_cache(self, litellm_call_id: str, service_name: str) -> Optional[str]: - key_name = "{}:{}".format(service_name, litellm_call_id) - response = self.cache.get_cache(key=key_name) - return response - - def set_cache(self, litellm_call_id: str, service_name: str, trace_id: str) -> None: - key_name = "{}:{}".format(service_name, litellm_call_id) - self.cache.set_cache(key=key_name, value=trace_id) - return None - - -in_memory_trace_id_cache = ServiceTraceIDCache() -in_memory_dynamic_logger_cache = DynamicLoggingCache() - -# Cached lazy import for PrometheusLogger -# Module-level cache to avoid repeated imports while preserving memory benefits -_PrometheusLogger = None - - -def _get_cached_prometheus_logger(): - """ - Get cached PrometheusLogger class. - Lazy imports on first call to avoid loading prometheus.py and utils.py at import time (60MB saved). - Subsequent calls use cached class for better performance. - """ - global _PrometheusLogger - if _PrometheusLogger is None: - from litellm.integrations.prometheus import PrometheusLogger - - _PrometheusLogger = PrometheusLogger - return _PrometheusLogger - - -class Logging(LiteLLMLoggingBaseClass): - global supabaseClient, promptLayerLogger, weightsBiasesLogger, logfireLogger, capture_exception, add_breadcrumb, lunaryLogger, logfireLogger, prometheusLogger, slack_app - custom_pricing: bool = False - stream_options = None - litellm_request_debug: bool = False - - def __init__( - self, - model: str, - messages, - stream, - call_type, - start_time, - litellm_call_id: str, - function_id: str, - litellm_trace_id: Optional[str] = None, - dynamic_input_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = None, - dynamic_success_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = None, - dynamic_async_success_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = None, - dynamic_failure_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = None, - dynamic_async_failure_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = None, - applied_guardrails: Optional[List[str]] = None, - kwargs: Optional[Dict] = None, - log_raw_request_response: bool = False, - ): - _input: Optional[str] = messages # save original value of messages - if messages is not None: - if isinstance(messages, str): - messages = [ - {"role": "user", "content": messages} - ] # convert text completion input to the chat completion format - elif ( - isinstance(messages, list) - and len(messages) > 0 - and isinstance(messages[0], str) - ): - new_messages = [] - for m in messages: - new_messages.append({"role": "user", "content": m}) - messages = new_messages - - self.model = model - self.messages = copy.deepcopy(messages) if messages is not None else None - self.stream = stream - self.start_time = start_time # log the call start time - self.call_type = call_type - self.litellm_call_id = litellm_call_id - self.litellm_trace_id: str = ( - litellm_trace_id if litellm_trace_id else str(uuid.uuid4()) - ) - self.function_id = function_id - self.streaming_chunks: List[Any] = [] # for generating complete stream response - self.sync_streaming_chunks: List[ - Any - ] = [] # for generating complete stream response - self.log_raw_request_response = log_raw_request_response - - # Initialize dynamic callbacks - self.dynamic_input_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = dynamic_input_callbacks - self.dynamic_success_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = dynamic_success_callbacks - self.dynamic_async_success_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = dynamic_async_success_callbacks - self.dynamic_failure_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = dynamic_failure_callbacks - self.dynamic_async_failure_callbacks: Optional[ - List[Union[str, Callable, CustomLogger]] - ] = dynamic_async_failure_callbacks - - # Process dynamic callbacks - self.process_dynamic_callbacks() - - ## DYNAMIC LANGFUSE / GCS / logging callback KEYS ## - self.standard_callback_dynamic_params: StandardCallbackDynamicParams = ( - self.initialize_standard_callback_dynamic_params(kwargs) - ) - self.standard_built_in_tools_params: StandardBuiltInToolsParams = ( - self.initialize_standard_built_in_tools_params(kwargs) - ) - ## TIME TO FIRST TOKEN LOGGING ## - self.completion_start_time: Optional[datetime.datetime] = None - self._llm_caching_handler: Optional[LLMCachingHandler] = None - - # INITIAL LITELLM_PARAMS - litellm_params = {} - if kwargs is not None: - litellm_params = get_litellm_params(**kwargs) - litellm_params = scrub_sensitive_keys_in_metadata(litellm_params) - - self.litellm_params = litellm_params - - # Initialize cost breakdown field - self.cost_breakdown: Optional[CostBreakdown] = None - - # Init Caching related details - self.caching_details: Optional[CachingDetails] = None - - # Passthrough endpoint guardrails config for field targeting - self.passthrough_guardrails_config: Optional[Dict[str, Any]] = None - - self.model_call_details: Dict[str, Any] = { - "litellm_trace_id": litellm_trace_id, - "litellm_call_id": litellm_call_id, - "input": _input, - "litellm_params": litellm_params, - "applied_guardrails": applied_guardrails, - "model": model, - } - - def process_dynamic_callbacks(self): - """ - Initializes CustomLogger compatible callbacks in self.dynamic_* callbacks - - If a callback is in litellm._known_custom_logger_compatible_callbacks, it needs to be intialized and added to the respective dynamic_* callback list. - """ - # Process input callbacks - self.dynamic_input_callbacks = self._process_dynamic_callback_list( - self.dynamic_input_callbacks, dynamic_callbacks_type="input" - ) - - # Process failure callbacks - self.dynamic_failure_callbacks = self._process_dynamic_callback_list( - self.dynamic_failure_callbacks, dynamic_callbacks_type="failure" - ) - - # Process async failure callbacks - self.dynamic_async_failure_callbacks = self._process_dynamic_callback_list( - self.dynamic_async_failure_callbacks, dynamic_callbacks_type="async_failure" - ) - - # Process success callbacks - self.dynamic_success_callbacks = self._process_dynamic_callback_list( - self.dynamic_success_callbacks, dynamic_callbacks_type="success" - ) - - # Process async success callbacks - self.dynamic_async_success_callbacks = self._process_dynamic_callback_list( - self.dynamic_async_success_callbacks, dynamic_callbacks_type="async_success" - ) - - def _process_dynamic_callback_list( - self, - callback_list: Optional[List[Union[str, Callable, CustomLogger]]], - dynamic_callbacks_type: Literal[ - "input", "success", "failure", "async_success", "async_failure" - ], - ) -> Optional[List[Union[str, Callable, CustomLogger]]]: - """ - Helper function to initialize CustomLogger compatible callbacks in self.dynamic_* callbacks - - - If a callback is in litellm._known_custom_logger_compatible_callbacks, - replace the string with the initialized callback class. - - If dynamic callback is a "success" callback that is a known_custom_logger_compatible_callbacks then add it to dynamic_async_success_callbacks - - If dynamic callback is a "failure" callback that is a known_custom_logger_compatible_callbacks then add it to dynamic_failure_callbacks - """ - if callback_list is None: - return None - - processed_list: List[Union[str, Callable, CustomLogger]] = [] - for callback in callback_list: - if ( - isinstance(callback, str) - and callback in litellm._known_custom_logger_compatible_callbacks - ): - callback_class = _init_custom_logger_compatible_class( - callback, internal_usage_cache=None, llm_router=None # type: ignore - ) - if callback_class is not None: - processed_list.append(callback_class) - - # If processing dynamic_success_callbacks, add to dynamic_async_success_callbacks - if dynamic_callbacks_type == "success": - if self.dynamic_async_success_callbacks is None: - self.dynamic_async_success_callbacks = [] - self.dynamic_async_success_callbacks.append(callback_class) - elif dynamic_callbacks_type == "failure": - if self.dynamic_async_failure_callbacks is None: - self.dynamic_async_failure_callbacks = [] - self.dynamic_async_failure_callbacks.append(callback_class) - else: - processed_list.append(callback) - return processed_list - - def initialize_standard_callback_dynamic_params( - self, kwargs: Optional[Dict] = None - ) -> StandardCallbackDynamicParams: - """ - Initialize the standard callback dynamic params from the kwargs - - checks if langfuse_secret_key, gcs_bucket_name in kwargs and sets the corresponding attributes in StandardCallbackDynamicParams - """ - - return _initialize_standard_callback_dynamic_params(kwargs) - - def initialize_standard_built_in_tools_params( - self, kwargs: Optional[Dict] = None - ) -> StandardBuiltInToolsParams: - """ - Initialize the standard built-in tools params from the kwargs - - checks if web_search_options in kwargs or tools and sets the corresponding attribute in StandardBuiltInToolsParams - """ - return StandardBuiltInToolsParams( - web_search_options=StandardBuiltInToolCostTracking._get_web_search_options( - kwargs or {} - ), - file_search=StandardBuiltInToolCostTracking._get_file_search_tool_call( - kwargs or {} - ), - ) - - def update_environment_variables( - self, - litellm_params: Dict, - optional_params: Dict, - model: Optional[str] = None, - user: Optional[str] = None, - **additional_params, - ): - self.optional_params = optional_params - if model is not None: - self.model = model - self.user = user - self.litellm_params = { - **self.litellm_params, - **scrub_sensitive_keys_in_metadata(litellm_params), - } - self.litellm_request_debug = litellm_params.get("litellm_request_debug", False) - self.logger_fn = litellm_params.get("logger_fn", None) - if _is_debugging_on() or self.litellm_request_debug: - verbose_logger.debug(f"self.optional_params: {self.optional_params}") - - self.model_call_details.update( - { - "model": self.model, - "messages": self.messages, - "optional_params": self.optional_params, - "litellm_params": self.litellm_params, - "start_time": self.start_time, - "stream": self.stream, - "user": user, - "call_type": str(self.call_type), - "litellm_call_id": self.litellm_call_id, - "completion_start_time": self.completion_start_time, - "standard_callback_dynamic_params": self.standard_callback_dynamic_params, - **self.optional_params, - **additional_params, - } - ) - - ## check if stream options is set ## - used by CustomStreamWrapper for easy instrumentation - if "stream_options" in additional_params: - self.stream_options = additional_params["stream_options"] - ## check if custom pricing set ## - if any( - litellm_params.get(key) is not None - for key in _CUSTOM_PRICING_KEYS & litellm_params.keys() - ): - self.custom_pricing = True - - if "custom_llm_provider" in self.model_call_details: - self.custom_llm_provider = self.model_call_details["custom_llm_provider"] - - def update_messages(self, messages: List[AllMessageValues]): - """ - Update the logged value of the messages in the model_call_details - - Allows pre-call hooks to update the messages before the call is made - """ - self.messages = messages - self.model_call_details["messages"] = messages - - def should_run_prompt_management_hooks( - self, - non_default_params: Dict, - prompt_id: Optional[str] = None, - tools: Optional[List[Dict]] = None, - ) -> bool: - """ - Return True if prompt management hooks should be run - """ - if prompt_id: - return True - - if self._should_run_prompt_management_hooks_without_prompt_id( - non_default_params=non_default_params, - tools=tools, - ): - return True - - return False - - def _should_run_prompt_management_hooks_without_prompt_id( - self, - non_default_params: Dict, - tools: Optional[List[Dict]] = None, - ) -> bool: - """ - Certain prompt management hooks don't need a `prompt_id` to be passed in, they are triggered by dynamic params - - eg. AnthropicCacheControlHook and BedrockKnowledgeBaseHook both don't require a `prompt_id` to be passed in, they are triggered by dynamic params - """ - for param in non_default_params: - if param in DynamicPromptManagementParamLiteral.list_all_params(): - return True - - ############################################################################# - # Check if Vector Store / Knowledge Base hooks should be applied to the prompt - ############################################################################# - if litellm.vector_store_registry is not None: - if litellm.vector_store_registry.get_vector_store_to_run( - non_default_params=non_default_params, tools=tools - ): - return True - return False - - def get_chat_completion_prompt( - self, - model: str, - messages: List[AllMessageValues], - non_default_params: Dict, - prompt_variables: Optional[dict], - prompt_id: Optional[str] = None, - prompt_spec: Optional[PromptSpec] = None, - prompt_management_logger: Optional[CustomLogger] = None, - prompt_label: Optional[str] = None, - prompt_version: Optional[int] = None, - ) -> Tuple[str, List[AllMessageValues], dict]: - custom_logger = ( - prompt_management_logger - or self.get_custom_logger_for_prompt_management( - model=model, - non_default_params=non_default_params, - prompt_id=prompt_id, - prompt_spec=prompt_spec, - dynamic_callback_params=self.standard_callback_dynamic_params, - ) - ) - - if custom_logger: - ( - model, - messages, - non_default_params, - ) = custom_logger.get_chat_completion_prompt( - model=model, - messages=messages, - non_default_params=non_default_params or {}, - prompt_id=prompt_id, - prompt_spec=prompt_spec, - prompt_variables=prompt_variables, - dynamic_callback_params=self.standard_callback_dynamic_params, - prompt_label=prompt_label, - prompt_version=prompt_version, - ) - self.messages = messages - return model, messages, non_default_params - - async def async_get_chat_completion_prompt( - self, - model: str, - messages: List[AllMessageValues], - non_default_params: Dict, - prompt_variables: Optional[dict], - prompt_id: Optional[str] = None, - prompt_spec: Optional[PromptSpec] = None, - prompt_management_logger: Optional[CustomLogger] = None, - tools: Optional[List[Dict]] = None, - prompt_label: Optional[str] = None, - prompt_version: Optional[int] = None, - ) -> Tuple[str, List[AllMessageValues], dict]: - custom_logger = ( - prompt_management_logger - or self.get_custom_logger_for_prompt_management( - model=model, - tools=tools, - non_default_params=non_default_params, - prompt_id=prompt_id, - prompt_spec=prompt_spec, - dynamic_callback_params=self.standard_callback_dynamic_params, - ) - ) - - if custom_logger: - ( - model, - messages, - non_default_params, - ) = await custom_logger.async_get_chat_completion_prompt( - model=model, - messages=messages, - non_default_params=non_default_params or {}, - prompt_id=prompt_id, - prompt_spec=prompt_spec, - prompt_variables=prompt_variables, - dynamic_callback_params=self.standard_callback_dynamic_params, - litellm_logging_obj=self, - tools=tools, - prompt_label=prompt_label, - prompt_version=prompt_version, - ) - self.messages = messages - return model, messages, non_default_params - - def _auto_detect_prompt_management_logger( - self, - prompt_id: str, - prompt_spec: Optional[PromptSpec], - dynamic_callback_params: StandardCallbackDynamicParams, - ) -> Optional[CustomLogger]: - """ - Auto-detect which prompt management system owns the given prompt_id. - - This allows a user to just pass prompt_id in the completion call and it will be auto-detected which system owns this prompt. - - Args: - prompt_id: The prompt ID to check - dynamic_callback_params: Dynamic callback parameters for should_run_prompt_management checks - - Returns: - A CustomLogger instance if a matching prompt management system is found, None otherwise - """ - prompt_management_loggers = ( - litellm.logging_callback_manager.get_custom_loggers_for_type( - callback_type=CustomPromptManagement - ) - ) - - for logger in prompt_management_loggers: - if isinstance(logger, CustomPromptManagement): - try: - if logger.should_run_prompt_management( - prompt_id=prompt_id, - prompt_spec=prompt_spec, - dynamic_callback_params=dynamic_callback_params, - ): - self.model_call_details[ - "prompt_integration" - ] = logger.__class__.__name__ - return logger - except Exception: - # If check fails, continue to next logger - continue - - return None - - def get_custom_logger_for_prompt_management( - self, - model: str, - non_default_params: Dict, - tools: Optional[List[Dict]] = None, - prompt_id: Optional[str] = None, - prompt_spec: Optional[PromptSpec] = None, - dynamic_callback_params: Optional[StandardCallbackDynamicParams] = None, - ) -> Optional[CustomLogger]: - """ - Get a custom logger for prompt management based on model name or available callbacks. - - Args: - model: The model name to check for prompt management integration - non_default_params: Non-default parameters passed to the completion call - tools: Optional tools passed to the completion call - prompt_id: Optional prompt ID to auto-detect which system owns this prompt - dynamic_callback_params: Dynamic callback parameters for should_run_prompt_management checks - - Returns: - A CustomLogger instance if one is found, None otherwise - """ - # First check if model starts with a known custom logger compatible callback - # This takes precedence for backward compatibility - for callback_name in litellm._known_custom_logger_compatible_callbacks: - if model.startswith(callback_name): - custom_logger = _init_custom_logger_compatible_class( - logging_integration=callback_name, - internal_usage_cache=None, - llm_router=None, - ) - if custom_logger is not None: - self.model_call_details["prompt_integration"] = model.split("/")[0] - return custom_logger - - # If prompt_id is provided, try to auto-detect which system has this prompt - if prompt_id and dynamic_callback_params is not None: - auto_detected_logger = self._auto_detect_prompt_management_logger( - prompt_id=prompt_id, - prompt_spec=prompt_spec, - dynamic_callback_params=dynamic_callback_params, - ) - if auto_detected_logger is not None: - return auto_detected_logger - - # Then check for any registered CustomPromptManagement loggers (fallback) - prompt_management_loggers = ( - litellm.logging_callback_manager.get_custom_loggers_for_type( - callback_type=CustomPromptManagement - ) - ) - - if prompt_management_loggers: - logger = prompt_management_loggers[0] - self.model_call_details["prompt_integration"] = logger.__class__.__name__ - return logger - - if anthropic_cache_control_logger := AnthropicCacheControlHook.get_custom_logger_for_anthropic_cache_control_hook( - non_default_params - ): - self.model_call_details[ - "prompt_integration" - ] = anthropic_cache_control_logger.__class__.__name__ - return anthropic_cache_control_logger - - ######################################################### - # Vector Store / Knowledge Base hooks - ######################################################### - if litellm.vector_store_registry is not None: - vector_store_custom_logger = _init_custom_logger_compatible_class( - logging_integration="vector_store_pre_call_hook", - internal_usage_cache=None, - llm_router=None, - ) - self.model_call_details[ - "prompt_integration" - ] = vector_store_custom_logger.__class__.__name__ - # Add to global callbacks so post-call hooks are invoked - if ( - vector_store_custom_logger - and vector_store_custom_logger not in litellm.callbacks - ): - litellm.logging_callback_manager.add_litellm_callback( - vector_store_custom_logger - ) - return vector_store_custom_logger - - return None - - def get_custom_logger_for_anthropic_cache_control_hook( - self, non_default_params: Dict - ) -> Optional[CustomLogger]: - if non_default_params.get("cache_control_injection_points", None): - custom_logger = _init_custom_logger_compatible_class( - logging_integration="anthropic_cache_control_hook", - internal_usage_cache=None, - llm_router=None, - ) - return custom_logger - return None - - def _get_raw_request_body(self, data: Optional[Union[dict, str]]) -> dict: - if data is None: - return {"error": "Received empty dictionary for raw request body"} - if isinstance(data, str): - try: - return json.loads(data) - except Exception: - return { - "error": "Unable to parse raw request body. Got - {}".format(data) - } - return data - - def _get_masked_api_base(self, api_base: str) -> str: - if "key=" in api_base: - # Find the position of "key=" in the string - key_index = api_base.find("key=") + 4 - # Mask the last 5 characters after "key=" - masked_api_base = api_base[:key_index] + "*" * 5 + api_base[-4:] - else: - masked_api_base = api_base - return str(masked_api_base) - - def _pre_call(self, input, api_key, model=None, additional_args={}): - """ - Common helper function across the sync + async pre-call function - """ - - self.model_call_details["input"] = input - self.model_call_details["api_key"] = api_key - self.model_call_details["additional_args"] = additional_args - self.model_call_details["log_event_type"] = "pre_api_call" - if ( - model - ): # if model name was changes pre-call, overwrite the initial model call name with the new one - self.model_call_details["model"] = model - self.model_call_details["litellm_params"][ - "api_base" - ] = self._get_masked_api_base(additional_args.get("api_base", "")) - - def pre_call(self, input, api_key, model=None, additional_args={}): # noqa: PLR0915 - # Log the exact input to the LLM API - litellm.error_logs["PRE_CALL"] = locals() - try: - self._pre_call( - input=input, - api_key=api_key, - model=model, - additional_args=additional_args, - ) - - # User Logging -> if you pass in a custom logging function - self._print_llm_call_debugging_log( - api_base=additional_args.get("api_base", ""), - headers=additional_args.get("headers", {}), - additional_args=additional_args, - ) - # log raw request to provider (like LangFuse) -- if opted in. - if ( - self.log_raw_request_response is True - or log_raw_request_response is True - ): - _litellm_params = self.model_call_details.get("litellm_params", {}) - _metadata = _litellm_params.get("metadata", {}) or {} - try: - # [Non-blocking Extra Debug Information in metadata] - if turn_off_message_logging is True: - _metadata[ - "raw_request" - ] = "redacted by litellm. \ - 'litellm.turn_off_message_logging=True'" - else: - curl_command = self._get_request_curl_command( - api_base=additional_args.get("api_base", ""), - headers=additional_args.get("headers", {}), - additional_args=additional_args, - data=additional_args.get("complete_input_dict", {}), - ) - - _metadata["raw_request"] = str(curl_command) - # split up, so it's easier to parse in the UI - self.model_call_details[ - "raw_request_typed_dict" - ] = RawRequestTypedDict( - raw_request_api_base=str( - additional_args.get("api_base") or "" - ), - raw_request_body=self._get_raw_request_body( - additional_args.get("complete_input_dict", {}) - ), - # NOTE: setting ignore_sensitive_headers to True will cause - # the Authorization header to be leaked when calls to the health - # endpoint are made and fail. - raw_request_headers=self._get_masked_headers( - additional_args.get("headers", {}) or {}, - ), - error=None, - ) - except Exception as e: - self.model_call_details[ - "raw_request_typed_dict" - ] = RawRequestTypedDict( - error=str(e), - ) - _metadata[ - "raw_request" - ] = "Unable to Log \ - raw request: {}".format( - str(e) - ) - if getattr(self, "logger_fn", None) and callable(self.logger_fn): - try: - self.logger_fn( - self.model_call_details - ) # Expectation: any logger function passed in by the user should accept a dict object - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( - str(e) - ) - ) - - self.model_call_details["api_call_start_time"] = datetime.datetime.now() - # Input Integration Logging -> If you want to log the fact that an attempt to call the model was made - callbacks = litellm.input_callback + (self.dynamic_input_callbacks or []) - for callback in callbacks: - try: - if callback == "supabase" and supabaseClient is not None: - verbose_logger.debug("reaches supabase for logging!") - model = self.model_call_details["model"] - messages = self.model_call_details["input"] - verbose_logger.debug(f"supabaseClient: {supabaseClient}") - supabaseClient.input_log_event( - model=model, - messages=messages, - end_user=self.model_call_details.get("user", "default"), - litellm_call_id=self.litellm_params["litellm_call_id"], - print_verbose=print_verbose, - ) - elif callback == "sentry" and add_breadcrumb: - try: - details_to_log = copy.deepcopy(self.model_call_details) - except Exception: - details_to_log = self.model_call_details - if litellm.turn_off_message_logging: - # make a copy of the _model_Call_details and log it - details_to_log.pop("messages", None) - details_to_log.pop("input", None) - details_to_log.pop("prompt", None) - - add_breadcrumb( - category="litellm.llm_call", - message=f"Model Call Details pre-call: {details_to_log}", - level="info", - ) - - elif isinstance(callback, CustomLogger): # custom logger class - callback.log_pre_api_call( - model=self.model, - messages=self.messages, - kwargs=self.model_call_details, - ) - elif ( - callable(callback) and customLogger is not None - ): # custom logger functions - customLogger.log_input_event( - model=self.model, - messages=self.messages, - kwargs=self.model_call_details, - print_verbose=print_verbose, - callback_func=callback, - ) - except Exception as e: - verbose_logger.exception( - "litellm.Logging.pre_call(): Exception occured - {}".format( - str(e) - ) - ) - verbose_logger.debug( - f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" - ) - if capture_exception: # log this error to sentry for debugging - capture_exception(e) - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( - str(e) - ) - ) - verbose_logger.error( - f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" - ) - if capture_exception: # log this error to sentry for debugging - capture_exception(e) - - def _print_llm_call_debugging_log( - self, - api_base: str, - headers: dict, - additional_args: dict, - ): - """ - Internal debugging helper function - - Prints the RAW curl command sent from LiteLLM - """ - if _is_debugging_on() or self.litellm_request_debug: - if json_logs: - masked_headers = self._get_masked_headers(headers) - if self.litellm_request_debug: - verbose_logger.warning( # .warning ensures this shows up in all environments - "POST Request Sent from LiteLLM", - extra={"api_base": {api_base}, **masked_headers}, - ) - else: - verbose_logger.debug( - "POST Request Sent from LiteLLM", - extra={"api_base": {api_base}, **masked_headers}, - ) - else: - headers = additional_args.get("headers", {}) - if headers is None: - headers = {} - data = additional_args.get("complete_input_dict", {}) - api_base = str(additional_args.get("api_base", "")) - curl_command = self._get_request_curl_command( - api_base=api_base, - headers=headers, - additional_args=additional_args, - data=data, - ) - if self.litellm_request_debug: - verbose_logger.warning( - f"\033[92m{curl_command}\033[0m\n" - ) # .warning ensures this shows up in all environments - else: - verbose_logger.debug(f"\033[92m{curl_command}\033[0m\n") - - def _get_request_body(self, data: dict) -> str: - return str(data) - - def _get_request_curl_command( - self, api_base: str, headers: Optional[dict], additional_args: dict, data: dict - ) -> str: - masked_api_base = self._get_masked_api_base(api_base) - if headers is None: - headers = {} - curl_command = "\n\nPOST Request Sent from LiteLLM:\n" - curl_command += "curl -X POST \\\n" - curl_command += f"{masked_api_base} \\\n" - masked_headers = self._get_masked_headers(headers) - formatted_headers = " ".join( - [f"-H '{k}: {v}'" for k, v in masked_headers.items()] - ) - curl_command += ( - f"{formatted_headers} \\\n" if formatted_headers.strip() != "" else "" - ) - curl_command += f"-d '{self._get_request_body(data)}'\n" - if additional_args.get("request_str", None) is not None: - # print the sagemaker / bedrock client request - curl_command = "\nRequest Sent from LiteLLM:\n" - request_str = additional_args.get("request_str", "") - curl_command += request_str - elif api_base == "": - curl_command = str(self.model_call_details) - return curl_command - - def _get_masked_headers( - self, headers: dict, ignore_sensitive_headers: bool = False - ) -> dict: - """ - Internal debugging helper function - - Masks the headers of the request sent from LiteLLM - """ - return _get_masked_values( - headers, ignore_sensitive_values=ignore_sensitive_headers - ) - - def post_call( - self, original_response, input=None, api_key=None, additional_args={} - ): - # Log the exact result from the LLM API, for streaming - log the type of response received - litellm.error_logs["POST_CALL"] = locals() - if isinstance(original_response, dict): - original_response = json.dumps(original_response) - try: - self.model_call_details["input"] = input - self.model_call_details["api_key"] = api_key - self.model_call_details["original_response"] = original_response - self.model_call_details["additional_args"] = additional_args - self.model_call_details["log_event_type"] = "post_api_call" - - if self.litellm_request_debug: - attr = "warning" - else: - attr = "debug" - - if json_logs: - callattr = getattr(verbose_logger, attr) - callattr( - "RAW RESPONSE:\n{}\n\n".format( - self.model_call_details.get( - "original_response", self.model_call_details - ) - ), - ) - else: - callattr = getattr(verbose_logger, attr) - callattr( - "RAW RESPONSE:\n{}\n\n".format( - self.model_call_details.get( - "original_response", self.model_call_details - ) - ) - ) - if getattr(self, "logger_fn", None) and callable(self.logger_fn): - try: - self.logger_fn( - self.model_call_details - ) # Expectation: any logger function passed in by the user should accept a dict object - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( - str(e) - ) - ) - original_response = redact_message_input_output_from_logging( - model_call_details=( - self.model_call_details - if hasattr(self, "model_call_details") - else {} - ), - result=original_response, - ) - # Input Integration Logging -> If you want to log the fact that an attempt to call the model was made - - callbacks = litellm.input_callback + (self.dynamic_input_callbacks or []) - for callback in callbacks: - try: - if callback == "sentry" and add_breadcrumb: - verbose_logger.debug("reaches sentry breadcrumbing") - try: - details_to_log = copy.deepcopy(self.model_call_details) - except Exception: - details_to_log = self.model_call_details - if litellm.turn_off_message_logging: - # make a copy of the _model_Call_details and log it - details_to_log.pop("messages", None) - details_to_log.pop("input", None) - details_to_log.pop("prompt", None) - - add_breadcrumb( - category="litellm.llm_call", - message=f"Model Call Details post-call: {details_to_log}", - level="info", - ) - elif isinstance(callback, CustomLogger): # custom logger class - callback.log_post_api_call( - kwargs=self.model_call_details, - response_obj=None, - start_time=self.start_time, - end_time=None, - ) - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while post-call logging with integrations {}".format( - str(e) - ) - ) - verbose_logger.debug( - f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" - ) - if capture_exception: # log this error to sentry for debugging - capture_exception(e) - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( - str(e) - ) - ) - - async def async_post_mcp_tool_call_hook( - self, - kwargs: dict, - response_obj: Any, - start_time: datetime.datetime, - end_time: datetime.datetime, - ): - """ - Post MCP Tool Call Hook - - Use this to modify the MCP tool call response before it is returned to the user. - """ - from litellm.types.llms.base import HiddenParams - from litellm.types.mcp import MCPPostCallResponseObject - - callbacks = self.get_combined_callback_list( - dynamic_success_callbacks=self.dynamic_success_callbacks, - global_callbacks=litellm.success_callback, - ) - post_mcp_tool_call_response_obj: MCPPostCallResponseObject = ( - MCPPostCallResponseObject( - mcp_tool_call_response=response_obj, hidden_params=HiddenParams() - ) - ) - for callback in callbacks: - try: - if isinstance(callback, CustomLogger): - response: Optional[ - MCPPostCallResponseObject - ] = await callback.async_post_mcp_tool_call_hook( - kwargs=kwargs, - response_obj=post_mcp_tool_call_response_obj, - start_time=start_time, - end_time=end_time, - ) - ###################################################################### - # if any of the callbacks modify the response, use the modified response - # current implementation returns the first modified response - ###################################################################### - if response is not None: - response_obj = self._parse_post_mcp_call_hook_response( - response=response - ) - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( - str(e) - ) - ) - return response_obj - - def _parse_post_mcp_call_hook_response( - self, response: Optional[MCPPostCallResponseObject] - ) -> Any: - """ - Parse the response from the post_mcp_tool_call_hook - - 1. Unpack the mcp_tool_call_response - 2. save the updated response_cost to the model_call_details - """ - if response is None: - return None - self.model_call_details["response_cost"] = response.hidden_params.response_cost - return response.mcp_tool_call_response - - def get_response_ms(self) -> float: - return ( - self.model_call_details.get("end_time", datetime.datetime.now()) - - self.model_call_details.get("start_time", datetime.datetime.now()) - ).total_seconds() * 1000 - - def set_cost_breakdown( - self, - input_cost: float, - output_cost: float, - total_cost: float, - cost_for_built_in_tools_cost_usd_dollar: float, - additional_costs: Optional[dict] = None, - original_cost: Optional[float] = None, - discount_percent: Optional[float] = None, - discount_amount: Optional[float] = None, - margin_percent: Optional[float] = None, - margin_fixed_amount: Optional[float] = None, - margin_total_amount: Optional[float] = None, - ) -> None: - """ - Helper method to store cost breakdown in the logging object. - - Args: - input_cost: Cost of input/prompt tokens - output_cost: Cost of output/completion tokens - cost_for_built_in_tools_cost_usd_dollar: Cost of built-in tools - total_cost: Total cost of request - additional_costs: Free-form additional costs dict (e.g., {"azure_model_router_flat_cost": 0.00014}) - original_cost: Cost before discount - discount_percent: Discount percentage (0.05 = 5%) - discount_amount: Discount amount in USD - margin_percent: Margin percentage applied (0.10 = 10%) - margin_fixed_amount: Fixed margin amount in USD - margin_total_amount: Total margin added in USD - """ - - self.cost_breakdown = CostBreakdown( - input_cost=input_cost, - output_cost=output_cost, - total_cost=total_cost, - tool_usage_cost=cost_for_built_in_tools_cost_usd_dollar, - ) - - # Store additional costs if provided (free-form dict for extensibility) - if ( - additional_costs - and isinstance(additional_costs, dict) - and len(additional_costs) > 0 - ): - self.cost_breakdown["additional_costs"] = additional_costs - - # Store discount information if provided - if original_cost is not None: - self.cost_breakdown["original_cost"] = original_cost - if discount_percent is not None: - self.cost_breakdown["discount_percent"] = discount_percent - if discount_amount is not None: - self.cost_breakdown["discount_amount"] = discount_amount - - # Store margin information if provided - if margin_percent is not None: - self.cost_breakdown["margin_percent"] = margin_percent - if margin_fixed_amount is not None: - self.cost_breakdown["margin_fixed_amount"] = margin_fixed_amount - if margin_total_amount is not None: - self.cost_breakdown["margin_total_amount"] = margin_total_amount - - def _response_cost_calculator( - self, - result: Union[ - ModelResponse, - ModelResponseStream, - EmbeddingResponse, - ImageResponse, - TranscriptionResponse, - TextCompletionResponse, - HttpxBinaryResponseContent, - RerankResponse, - Batch, - FineTuningJob, - ResponsesAPIResponse, - ResponseCompletedEvent, - OpenAIFileObject, - LiteLLMRealtimeStreamLoggingObject, - OpenAIModerationResponse, - "SearchResponse", - ], - cache_hit: Optional[bool] = None, - litellm_model_name: Optional[str] = None, - router_model_id: Optional[str] = None, - ) -> Optional[float]: - """ - Calculate response cost using result + logging object variables. - - used for consistent cost calculation across response headers + logging integrations. - """ - - if isinstance(result, BaseModel) and hasattr(result, "_hidden_params"): - hidden_params = getattr(result, "_hidden_params", {}) - if ( - "response_cost" in hidden_params - and hidden_params["response_cost"] is not None - ): # use cost if already calculated - return hidden_params["response_cost"] - elif ( - router_model_id is None and "model_id" in hidden_params - ): # use model_id if not already set - router_model_id = hidden_params["model_id"] - - ## RESPONSE COST ## - custom_pricing = use_custom_pricing_for_model( - litellm_params=( - self.litellm_params if hasattr(self, "litellm_params") else None - ) - ) - - prompt = "" # use for tts cost calc - _input = self.model_call_details.get("input", None) - if _input is not None and isinstance(_input, str): - prompt = _input - - if cache_hit is None: - cache_hit = self.model_call_details.get("cache_hit", False) - - try: - response_cost_calculator_kwargs = { - "response_object": result, - "model": litellm_model_name or self.model, - "cache_hit": cache_hit, - "custom_llm_provider": self.model_call_details.get( - "custom_llm_provider", None - ), - "base_model": _get_base_model_from_metadata( - model_call_details=self.model_call_details - ), - "call_type": self.call_type, - "optional_params": self.optional_params, - "custom_pricing": custom_pricing, - "prompt": prompt, - "standard_built_in_tools_params": self.standard_built_in_tools_params, - "router_model_id": router_model_id, - "litellm_logging_obj": self, - "service_tier": ( - self.optional_params.get("service_tier") - if self.optional_params - else None - ), - } - except Exception as e: # error creating kwargs for cost calculation - debug_info = StandardLoggingModelCostFailureDebugInformation( - error_str=str(e), - traceback_str=_get_traceback_str_for_error(str(e)), - ) - verbose_logger.debug( - f"response_cost_failure_debug_information: {debug_info}" - ) - self.model_call_details[ - "response_cost_failure_debug_information" - ] = debug_info - return None - - try: - response_cost = litellm.response_cost_calculator( - **response_cost_calculator_kwargs - ) - - verbose_logger.debug(f"response_cost: {response_cost}") - return response_cost - except Exception as e: # error calculating cost - debug_info = StandardLoggingModelCostFailureDebugInformation( - error_str=str(e), - traceback_str=_get_traceback_str_for_error(str(e)), - model=response_cost_calculator_kwargs["model"], - cache_hit=response_cost_calculator_kwargs["cache_hit"], - custom_llm_provider=response_cost_calculator_kwargs[ - "custom_llm_provider" - ], - base_model=response_cost_calculator_kwargs["base_model"], - call_type=response_cost_calculator_kwargs["call_type"], - custom_pricing=response_cost_calculator_kwargs["custom_pricing"], - ) - verbose_logger.debug( - f"response_cost_failure_debug_information: {debug_info}" - ) - self.model_call_details[ - "response_cost_failure_debug_information" - ] = debug_info - - return None - - async def _response_cost_calculator_async( - self, - result: Union[ - ModelResponse, - ModelResponseStream, - EmbeddingResponse, - ImageResponse, - TranscriptionResponse, - TextCompletionResponse, - HttpxBinaryResponseContent, - RerankResponse, - Batch, - FineTuningJob, - ], - cache_hit: Optional[bool] = None, - ) -> Optional[float]: - return self._response_cost_calculator(result=result, cache_hit=cache_hit) - - def should_run_logging( - self, - event_type: Literal[ - "async_success", "sync_success", "async_failure", "sync_failure" - ], - stream: bool = False, - ) -> bool: - try: - if self.model_call_details.get(f"has_logged_{event_type}", False) is True: - return False - - return True - except Exception: - return True - - def has_run_logging( - self, - event_type: Literal[ - "async_success", "sync_success", "async_failure", "sync_failure" - ], - ) -> None: - if self.stream is not None and self.stream is True: - """ - Ignore check on stream, as there can be multiple chunks - """ - return - self.model_call_details[f"has_logged_{event_type}"] = True - return - - def should_run_callback( - self, callback: litellm.CALLBACK_TYPES, litellm_params: dict, event_hook: str - ) -> bool: - if litellm.global_disable_no_log_param: - return True - - if litellm_params.get("no-log", False) is True: - # proxy cost tracking cal backs should run - - if not ( - isinstance(callback, CustomLogger) - and "_PROXY_" in callback.__class__.__name__ - ): - verbose_logger.debug( - f"no-log request, skipping logging for {event_hook} event" - ) - return False - - # Check for dynamically disabled callbacks via headers - if ( - EnterpriseCallbackControls is not None - and EnterpriseCallbackControls.is_callback_disabled_dynamically( - callback=callback, - litellm_params=litellm_params, - standard_callback_dynamic_params=self.standard_callback_dynamic_params, - ) - ): - verbose_logger.debug( - f"Callback {callback} disabled via x-litellm-disable-callbacks header for {event_hook} event" - ) - return False - - return True - - def _update_completion_start_time(self, completion_start_time: datetime.datetime): - self.completion_start_time = completion_start_time - self.model_call_details["completion_start_time"] = self.completion_start_time - - def normalize_logging_result(self, result: Any) -> Any: - """ - Some endpoints return a different type of result than what is expected by the logging system. - This function is used to normalize the result to the expected type. - """ - logging_result = result - if self.call_type == CallTypes.arealtime.value and isinstance(result, list): - combined_usage_object = RealtimeAPITokenUsageProcessor.collect_and_combine_usage_from_realtime_stream_results( - results=result - ) - logging_result = ( - RealtimeAPITokenUsageProcessor.create_logging_realtime_object( - usage=combined_usage_object, - results=result, - ) - ) - - elif ( - self.call_type == CallTypes.llm_passthrough_route.value - or self.call_type == CallTypes.allm_passthrough_route.value - ) and isinstance(result, Response): - from litellm.utils import ProviderConfigManager - - provider_config = ProviderConfigManager.get_provider_passthrough_config( - provider=self.model_call_details.get("custom_llm_provider", ""), - model=self.model, - ) - if provider_config is not None: - logging_result = provider_config.logging_non_streaming_response( - model=self.model, - custom_llm_provider=self.model_call_details.get( - "custom_llm_provider", "" - ), - httpx_response=result, - request_data=self.model_call_details.get("request_data", {}), - logging_obj=self, - endpoint=self.model_call_details.get("endpoint", ""), - ) - return logging_result - - def _process_hidden_params_and_response_cost( - self, - logging_result, - start_time, - end_time, - ): - hidden_params = getattr(logging_result, "_hidden_params", {}) - if hidden_params: - if self.model_call_details.get("litellm_params") is not None: - self.model_call_details["litellm_params"].setdefault("metadata", {}) - if self.model_call_details["litellm_params"]["metadata"] is None: - self.model_call_details["litellm_params"]["metadata"] = {} - self.model_call_details["litellm_params"]["metadata"]["hidden_params"] = getattr(logging_result, "_hidden_params", {}) # type: ignore - - if "response_cost" in hidden_params: - self.model_call_details["response_cost"] = hidden_params["response_cost"] - else: - self.model_call_details["response_cost"] = self._response_cost_calculator( - result=logging_result - ) - - self.model_call_details[ - "standard_logging_object" - ] = get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=logging_result, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) - - def _transform_usage_objects(self, result): - if isinstance(result, ResponsesAPIResponse): - result = result.model_copy() - transformed_usage = ( - ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( - result.usage - ) - ) - setattr(result, "usage", transformed_usage) - if ( - standard_logging_payload := self.model_call_details.get( - "standard_logging_object" - ) - ) is not None: - response_dict = ( - result.model_dump() - if hasattr(result, "model_dump") - else dict(result) - ) - # Ensure usage is properly included with transformed chat format - if transformed_usage is not None: - response_dict["usage"] = ( - transformed_usage.model_dump() - if hasattr(transformed_usage, "model_dump") - else dict(transformed_usage) - ) - standard_logging_payload["response"] = response_dict - elif isinstance(result, TranscriptionResponse): - from litellm.litellm_core_utils.llm_cost_calc.usage_object_transformation import ( - TranscriptionUsageObjectTransformation, - ) - - result = result.model_copy() - transformed_usage = TranscriptionUsageObjectTransformation.transform_transcription_usage_object(result.usage) # type: ignore - setattr(result, "usage", transformed_usage) - return result - - def _success_handler_helper_fn( - self, - result=None, - start_time=None, - end_time=None, - cache_hit=None, - standard_logging_object: Optional[StandardLoggingPayload] = None, - ): - try: - if start_time is None: - start_time = self.start_time - if end_time is None: - end_time = datetime.datetime.now() - if self.completion_start_time is None: - self.completion_start_time = end_time - self.model_call_details[ - "completion_start_time" - ] = self.completion_start_time - - self.model_call_details["log_event_type"] = "successful_api_call" - self.model_call_details["end_time"] = end_time - self.model_call_details["cache_hit"] = cache_hit - - if self.call_type == CallTypes.anthropic_messages.value: - result = self._handle_anthropic_messages_response_logging(result=result) - elif ( - self.call_type == CallTypes.generate_content.value - or self.call_type == CallTypes.agenerate_content.value - ): - result = self._handle_non_streaming_google_genai_generate_content_response_logging( - result=result - ) - elif ( - self.call_type == CallTypes.asend_message.value - or self.call_type == CallTypes.send_message.value - ): - result = self._handle_a2a_response_logging(result=result) - - logging_result = self.normalize_logging_result(result=result) - - if ( - standard_logging_object is None - and result is not None - and self.stream is not True - ): - if self._is_recognized_call_type_for_logging( - logging_result=logging_result - ): - self._process_hidden_params_and_response_cost( - logging_result=logging_result, - start_time=start_time, - end_time=end_time, - ) - elif isinstance(result, dict) or isinstance(result, list): - self.model_call_details[ - "standard_logging_object" - ] = get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=result, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) - elif standard_logging_object is not None: - self.model_call_details[ - "standard_logging_object" - ] = standard_logging_object - else: - self.model_call_details["response_cost"] = None - - result = self._transform_usage_objects(result=result) - - if ( - litellm.max_budget - and self.stream is False - and result is not None - and isinstance(result, dict) - and "content" in result - ): - time_diff = (end_time - start_time).total_seconds() - float_diff = float(time_diff) - litellm._current_cost += litellm.completion_cost( - model=self.model, - prompt="", - completion=getattr(result, "content", ""), - total_time=float_diff, - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) - - return start_time, end_time, result - except Exception as e: - raise Exception(f"[Non-Blocking] LiteLLM.Success_Call Error: {str(e)}") - - def _is_recognized_call_type_for_logging( - self, - logging_result: Any, - ): - """ - Returns True if the call type is recognized for logging (eg. ModelResponse, ModelResponseStream, etc.) - """ - if ( - isinstance(logging_result, ModelResponse) - or isinstance(logging_result, ModelResponseStream) - or isinstance(logging_result, EmbeddingResponse) - or isinstance(logging_result, ImageResponse) - or isinstance(logging_result, TranscriptionResponse) - or isinstance(logging_result, TextCompletionResponse) - or isinstance(logging_result, HttpxBinaryResponseContent) # tts - or isinstance(logging_result, RerankResponse) - or isinstance(logging_result, FineTuningJob) - or isinstance(logging_result, LiteLLMBatch) - or isinstance(logging_result, ResponsesAPIResponse) - or isinstance(logging_result, OpenAIFileObject) - or isinstance(logging_result, LiteLLMRealtimeStreamLoggingObject) - or isinstance(logging_result, OpenAIModerationResponse) - or isinstance(logging_result, OCRResponse) # OCR - or isinstance(logging_result, SearchResponse) # Search API - or isinstance(logging_result, dict) - and logging_result.get("object") == "vector_store.search_results.page" - or isinstance(logging_result, dict) - and logging_result.get("object") == "search" # Search API (dict format) - or isinstance(logging_result, VideoObject) - or isinstance(logging_result, ContainerObject) - or isinstance(logging_result, LiteLLMSendMessageResponse) # A2A - or (self.call_type == CallTypes.call_mcp_tool.value) - ): - return True - return False - - def _flush_passthrough_collected_chunks_helper( - self, - raw_bytes: List[bytes], - provider_config: "BasePassthroughConfig", - ) -> Optional["CostResponseTypes"]: - all_chunks = provider_config._convert_raw_bytes_to_str_lines(raw_bytes) - complete_streaming_response = provider_config.handle_logging_collected_chunks( - all_chunks=all_chunks, - litellm_logging_obj=self, - model=self.model, - custom_llm_provider=self.model_call_details.get("custom_llm_provider", ""), - endpoint=self.model_call_details.get("endpoint", ""), - ) - return complete_streaming_response - - def flush_passthrough_collected_chunks( - self, - raw_bytes: List[bytes], - provider_config: "BasePassthroughConfig", - ): - """ - Flush collected chunks from the logging object - This is used to log the collected chunks once streaming is done on passthrough endpoints - - 1. Decode the raw bytes to string lines - 2. Get the complete streaming response from the provider config - 3. Log the complete streaming response (trigger success handler) - This is used for passthrough endpoints - """ - complete_streaming_response = self._flush_passthrough_collected_chunks_helper( - raw_bytes=raw_bytes, - provider_config=provider_config, - ) - - if complete_streaming_response is not None: - self.success_handler(result=complete_streaming_response) - return - - async def async_flush_passthrough_collected_chunks( - self, - raw_bytes: List[bytes], - provider_config: "BasePassthroughConfig", - ): - complete_streaming_response = self._flush_passthrough_collected_chunks_helper( - raw_bytes=raw_bytes, - provider_config=provider_config, - ) - - if complete_streaming_response is not None: - await self.async_success_handler(result=complete_streaming_response) - return - - def success_handler( # noqa: PLR0915 - self, result=None, start_time=None, end_time=None, cache_hit=None, **kwargs - ): - verbose_logger.debug( - f"Logging Details LiteLLM-Success Call: Cache_hit={cache_hit}" - ) - if not self.should_run_logging( - event_type="sync_success" - ): # prevent double logging - return - start_time, end_time, result = self._success_handler_helper_fn( - start_time=start_time, - end_time=end_time, - result=result, - cache_hit=cache_hit, - standard_logging_object=kwargs.get("standard_logging_object", None), - ) - litellm_params = self.model_call_details.get("litellm_params", {}) - is_sync_request = ( - litellm_params.get(CallTypes.acompletion.value, False) is not True - and litellm_params.get(CallTypes.aresponses.value, False) is not True - and litellm_params.get(CallTypes.aembedding.value, False) is not True - and litellm_params.get(CallTypes.aimage_generation.value, False) is not True - and litellm_params.get(CallTypes.atranscription.value, False) is not True - ) - try: - ## BUILD COMPLETE STREAMED RESPONSE - complete_streaming_response: Optional[ - Union[ModelResponse, TextCompletionResponse, ResponsesAPIResponse] - ] = None - if "complete_streaming_response" in self.model_call_details: - return # break out of this. - complete_streaming_response = self._get_assembled_streaming_response( - result=result, - start_time=start_time, - end_time=end_time, - is_async=False, - streaming_chunks=self.sync_streaming_chunks, - ) - if complete_streaming_response is not None: - verbose_logger.debug( - "Logging Details LiteLLM-Success Call streaming complete" - ) - self.model_call_details[ - "complete_streaming_response" - ] = complete_streaming_response - self.model_call_details[ - "response_cost" - ] = self._response_cost_calculator(result=complete_streaming_response) - ## STANDARDIZED LOGGING PAYLOAD - self.model_call_details[ - "standard_logging_object" - ] = get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=complete_streaming_response, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) - if ( - standard_logging_payload := self.model_call_details.get( - "standard_logging_object" - ) - ) is not None: - # Only emit for sync requests (async_success_handler handles async) - if is_sync_request: - emit_standard_logging_payload(standard_logging_payload) - callbacks = self.get_combined_callback_list( - dynamic_success_callbacks=self.dynamic_success_callbacks, - global_callbacks=litellm.success_callback, - ) - - ## REDACT MESSAGES ## - result = redact_message_input_output_from_logging( - model_call_details=( - self.model_call_details - if hasattr(self, "model_call_details") - else {} - ), - result=result, - ) - ## LOGGING HOOK ## - for callback in callbacks: - if isinstance(callback, CustomLogger): - self.model_call_details, result = callback.logging_hook( - kwargs=self.model_call_details, - result=result, - call_type=self.call_type, - ) - - self.has_run_logging(event_type="sync_success") - for callback in callbacks: - try: - should_run = self.should_run_callback( - callback=callback, - litellm_params=litellm_params, - event_hook="success_handler", - ) - if not should_run: - continue - if callback == "promptlayer" and promptLayerLogger is not None: - print_verbose("reaches promptlayer for logging!") - promptLayerLogger.log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - if callback == "supabase" and supabaseClient is not None: - print_verbose("reaches supabase for logging!") - kwargs = self.model_call_details - - # this only logs streaming once, complete_streaming_response exists i.e when stream ends - if self.stream: - if "complete_streaming_response" not in kwargs: - continue - else: - print_verbose("reaches supabase for streaming logging!") - result = kwargs["complete_streaming_response"] - - model = kwargs["model"] - messages = kwargs["messages"] - optional_params = kwargs.get("optional_params", {}) - litellm_params = kwargs.get("litellm_params", {}) - supabaseClient.log_event( - model=model, - messages=messages, - end_user=optional_params.get("user", "default"), - response_obj=result, - start_time=start_time, - end_time=end_time, - litellm_call_id=( - current_call_id - if ( - current_call_id := litellm_params.get( - "litellm_call_id" - ) - ) - is not None - else str(uuid.uuid4()) - ), - print_verbose=print_verbose, - ) - if callback == "wandb" and weightsBiasesLogger is not None: - print_verbose("reaches wandb for logging!") - weightsBiasesLogger.log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - if callback == "logfire" and logfireLogger is not None: - verbose_logger.debug("reaches logfire for success logging!") - kwargs = {} - for k, v in self.model_call_details.items(): - if ( - k != "original_response" - ): # copy.deepcopy raises errors as this could be a coroutine - kwargs[k] = v - - # this only logs streaming once, complete_streaming_response exists i.e when stream ends - if self.stream: - if "complete_streaming_response" not in kwargs: - continue - else: - print_verbose("reaches logfire for streaming logging!") - result = kwargs["complete_streaming_response"] - - logfireLogger.log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - level=LogfireLevel.INFO.value, # type: ignore - ) - - if callback == "lunary" and lunaryLogger is not None: - print_verbose("reaches lunary for logging!") - model = self.model - kwargs = self.model_call_details - - input = kwargs.get("messages", kwargs.get("input", None)) - - type = ( - "embed" - if self.call_type == CallTypes.embedding.value - else "llm" - ) - - # this only logs streaming once, complete_streaming_response exists i.e when stream ends - if self.stream: - if "complete_streaming_response" not in kwargs: - continue - else: - result = kwargs["complete_streaming_response"] - - lunaryLogger.log_event( - type=type, - kwargs=kwargs, - event="end", - model=model, - input=input, - user_id=kwargs.get("user", None), - # user_props=self.model_call_details.get("user_props", None), - extra=kwargs.get("optional_params", {}), - response_obj=result, - start_time=start_time, - end_time=end_time, - run_id=self.litellm_call_id, - print_verbose=print_verbose, - ) - if callback == "helicone" and heliconeLogger is not None: - print_verbose("reaches helicone for logging!") - model = self.model - messages = self.model_call_details["input"] - kwargs = self.model_call_details - - # this only logs streaming once, complete_streaming_response exists i.e when stream ends - if self.stream: - if "complete_streaming_response" not in kwargs: - continue - else: - print_verbose("reaches helicone for streaming logging!") - result = kwargs["complete_streaming_response"] - - heliconeLogger.log_success( - model=model, - messages=messages, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - kwargs=kwargs, - ) - if callback == "langfuse": - global langFuseLogger - print_verbose("reaches langfuse for success logging!") - kwargs = {} - for k, v in self.model_call_details.items(): - if ( - k != "original_response" - ): # copy.deepcopy raises errors as this could be a coroutine - kwargs[k] = v - # this only logs streaming once, complete_streaming_response exists i.e when stream ends - if self.stream: - verbose_logger.debug( - f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" - ) - if complete_streaming_response is None: - continue - else: - print_verbose("reaches langfuse for streaming logging!") - result = kwargs["complete_streaming_response"] - - langfuse_logger_to_use = LangFuseHandler.get_langfuse_logger_for_request( - globalLangfuseLogger=langFuseLogger, - standard_callback_dynamic_params=self.standard_callback_dynamic_params, - in_memory_dynamic_logger_cache=in_memory_dynamic_logger_cache, - ) - if langfuse_logger_to_use is not None: - _response = langfuse_logger_to_use.log_event_on_langfuse( - kwargs=kwargs, - response_obj=result, - start_time=start_time, - end_time=end_time, - user_id=kwargs.get("user", None), - ) - if _response is not None and isinstance(_response, dict): - _trace_id = _response.get("trace_id", None) - if _trace_id is not None: - in_memory_trace_id_cache.set_cache( - litellm_call_id=self.litellm_call_id, - service_name="langfuse", - trace_id=_trace_id, - ) - if callback == "greenscale" and greenscaleLogger is not None: - kwargs = {} - for k, v in self.model_call_details.items(): - if ( - k != "original_response" - ): # copy.deepcopy raises errors as this could be a coroutine - kwargs[k] = v - # this only logs streaming once, complete_streaming_response exists i.e when stream ends - if self.stream: - verbose_logger.debug( - f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" - ) - if complete_streaming_response is None: - continue - else: - print_verbose( - "reaches greenscale for streaming logging!" - ) - result = kwargs["complete_streaming_response"] - - greenscaleLogger.log_event( - kwargs=kwargs, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - if callback == "athina" and athinaLogger is not None: - deep_copy = {} - for k, v in self.model_call_details.items(): - deep_copy[k] = v - athinaLogger.log_event( - kwargs=deep_copy, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - if callback == "traceloop": - deep_copy = {} - for k, v in self.model_call_details.items(): - if k != "original_response": - deep_copy[k] = v - traceloopLogger.log_event( - kwargs=deep_copy, - response_obj=result, - start_time=start_time, - end_time=end_time, - user_id=kwargs.get("user", None), - print_verbose=print_verbose, - ) - if callback == "s3": - global s3Logger - if s3Logger is None: - s3Logger = S3Logger() - if self.stream: - if "complete_streaming_response" in self.model_call_details: - print_verbose( - "S3Logger Logger: Got Stream Event - Completed Stream Response" - ) - s3Logger.log_event( - kwargs=self.model_call_details, - response_obj=self.model_call_details[ - "complete_streaming_response" - ], - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - else: - print_verbose( - "S3Logger Logger: Got Stream Event - No complete stream response as yet" - ) - else: - s3Logger.log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - - if callback == "openmeter" and is_sync_request: - global openMeterLogger - if openMeterLogger is None: - print_verbose("Instantiates openmeter client") - openMeterLogger = OpenMeterLogger() - if self.stream and complete_streaming_response is None: - openMeterLogger.log_stream_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) - else: - if self.stream and complete_streaming_response: - self.model_call_details[ - "complete_response" - ] = self.model_call_details.get( - "complete_streaming_response", {} - ) - result = self.model_call_details["complete_response"] - openMeterLogger.log_success_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) - if ( - isinstance(callback, CustomLogger) - and is_sync_request - and self.call_type - != CallTypes.pass_through.value # pass-through endpoints call async_log_success_event - ): # custom logger class - if self.stream and complete_streaming_response is None: - callback.log_stream_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) - else: - if self.stream and complete_streaming_response: - self.model_call_details[ - "complete_response" - ] = self.model_call_details.get( - "complete_streaming_response", {} - ) - result = self.model_call_details["complete_response"] - - callback.log_success_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) - if ( - callable(callback) is True - and is_sync_request - and customLogger is not None - ): # custom logger functions - print_verbose( - "success callbacks: Running Custom Callback Function - {}".format( - callback - ) - ) - - customLogger.log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - callback_func=callback, - ) - - except Exception as e: - print_verbose( - f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging with integrations {traceback.format_exc()}" - ) - print_verbose( - f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" - ) - if capture_exception: # log this error to sentry for debugging - capture_exception(e) - # Track callback logging failures in Prometheus - try: - self._handle_callback_failure(callback=callback) - except Exception: - pass - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {}".format( - str(e) - ), - ) - - async def async_success_handler( # noqa: PLR0915 - self, result=None, start_time=None, end_time=None, cache_hit=None, **kwargs - ): - """ - Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. - """ - print_verbose( - "Logging Details LiteLLM-Async Success Call, cache_hit={}".format(cache_hit) - ) - if not self.should_run_logging( - event_type="async_success" - ): # prevent double logging - return - - ## CALCULATE COST FOR BATCH JOBS - if self.call_type == CallTypes.aretrieve_batch.value and isinstance( - result, LiteLLMBatch - ): - litellm_params = self.litellm_params or {} - litellm_metadata = litellm_params.get("litellm_metadata") or {} - if ( - litellm_metadata.get("batch_ignore_default_logging", False) is True - ): # polling job will query these frequently, don't spam db logs - return - - from litellm.proxy.openai_files_endpoints.common_utils import ( - _is_base64_encoded_unified_file_id, - ) - - # check if file id is a unified file id - is_base64_unified_file_id = _is_base64_encoded_unified_file_id(result.id) - - batch_cost = kwargs.get("batch_cost", None) - batch_usage = kwargs.get("batch_usage", None) - batch_models = kwargs.get("batch_models", None) - has_explicit_batch_data = all( - x is not None for x in (batch_cost, batch_usage, batch_models) - ) - - should_compute_batch_data = ( - not is_base64_unified_file_id - or not has_explicit_batch_data - and result.status == "completed" - ) - if has_explicit_batch_data: - result._hidden_params["response_cost"] = batch_cost - result._hidden_params["batch_models"] = batch_models - result.usage = batch_usage - - elif should_compute_batch_data: - ( - response_cost, - batch_usage, - batch_models, - ) = await _handle_completed_batch( - batch=result, - custom_llm_provider=self.custom_llm_provider, - litellm_params=self.litellm_params, - ) - - result._hidden_params["response_cost"] = response_cost - result._hidden_params["batch_models"] = batch_models - result.usage = batch_usage - - start_time, end_time, result = self._success_handler_helper_fn( - start_time=start_time, - end_time=end_time, - result=result, - cache_hit=cache_hit, - standard_logging_object=kwargs.get("standard_logging_object", None), - ) - - ## BUILD COMPLETE STREAMED RESPONSE - if "async_complete_streaming_response" in self.model_call_details: - return # break out of this. - complete_streaming_response: Optional[ - Union[ModelResponse, TextCompletionResponse, ResponsesAPIResponse] - ] = self._get_assembled_streaming_response( - result=result, - start_time=start_time, - end_time=end_time, - is_async=True, - streaming_chunks=self.streaming_chunks, - ) - - if complete_streaming_response is not None: - print_verbose("Async success callbacks: Got a complete streaming response") - - self.model_call_details[ - "async_complete_streaming_response" - ] = complete_streaming_response - - try: - if self.model_call_details.get("cache_hit", False) is True: - self.model_call_details["response_cost"] = 0.0 - else: - # check if base_model set on azure - _get_base_model_from_metadata( - model_call_details=self.model_call_details - ) - # base_model defaults to None if not set on model_info - self.model_call_details[ - "response_cost" - ] = self._response_cost_calculator( - result=complete_streaming_response - ) - - verbose_logger.debug( - f"Model={self.model}; cost={self.model_call_details['response_cost']}" - ) - except litellm.NotFoundError: - verbose_logger.warning( - f"Model={self.model} not found in completion cost map. Setting 'response_cost' to None" - ) - self.model_call_details["response_cost"] = None - - ## STANDARDIZED LOGGING PAYLOAD - self.model_call_details[ - "standard_logging_object" - ] = get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=complete_streaming_response, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) - - # print standard logging payload - if ( - standard_logging_payload := self.model_call_details.get( - "standard_logging_object" - ) - ) is not None: - emit_standard_logging_payload(standard_logging_payload) - elif self.call_type == "pass_through_endpoint": - print_verbose( - "Async success callbacks: Got a pass-through endpoint response" - ) - - self.model_call_details["async_complete_streaming_response"] = result - - # cost calculation not possible for pass-through - self.model_call_details["response_cost"] = None - - ## STANDARDIZED LOGGING PAYLOAD - self.model_call_details[ - "standard_logging_object" - ] = get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=result, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) - - # print standard logging payload - if ( - standard_logging_payload := self.model_call_details.get( - "standard_logging_object" - ) - ) is not None: - emit_standard_logging_payload(standard_logging_payload) - callbacks = self.get_combined_callback_list( - dynamic_success_callbacks=self.dynamic_async_success_callbacks, - global_callbacks=litellm._async_success_callback, - ) - - result = redact_message_input_output_from_logging( - model_call_details=( - self.model_call_details if hasattr(self, "model_call_details") else {} - ), - result=result, - ) - - ## LOGGING HOOK ## - - for callback in callbacks: - if isinstance(callback, CustomGuardrail): - from litellm.types.guardrails import GuardrailEventHooks - - if ( - callback.should_run_guardrail( - data=self.model_call_details, - event_type=GuardrailEventHooks.logging_only, - ) - is not True - ): - continue - - self.model_call_details, result = await callback.async_logging_hook( - kwargs=self.model_call_details, - result=result, - call_type=self.call_type, - ) - elif isinstance(callback, CustomLogger): - result = redact_message_input_output_from_custom_logger( - result=result, litellm_logging_obj=self, custom_logger=callback - ) - self.model_call_details, result = await callback.async_logging_hook( - kwargs=self.model_call_details, - result=result, - call_type=self.call_type, - ) - - self.has_run_logging(event_type="async_success") - - for callback in callbacks: - # check if callback can run for this request - litellm_params = self.model_call_details.get("litellm_params", {}) - should_run = self.should_run_callback( - callback=callback, - litellm_params=litellm_params, - event_hook="async_success_handler", - ) - if not should_run: - continue - try: - if callback == "openmeter" and openMeterLogger is not None: - if self.stream is True: - if ( - "async_complete_streaming_response" - in self.model_call_details - ): - await openMeterLogger.async_log_success_event( - kwargs=self.model_call_details, - response_obj=self.model_call_details[ - "async_complete_streaming_response" - ], - start_time=start_time, - end_time=end_time, - ) - else: - await openMeterLogger.async_log_stream_event( # [TODO]: move this to being an async log stream event function - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) - else: - await openMeterLogger.async_log_success_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) - - if isinstance(callback, CustomLogger): # custom logger class - model_call_details: Dict = self.model_call_details - ################################## - # call redaction hook for custom logger - model_call_details = callback.redact_standard_logging_payload_from_model_call_details( - model_call_details=model_call_details - ) - ################################## - if self.stream is True: - if "async_complete_streaming_response" in model_call_details: - await callback.async_log_success_event( - kwargs=model_call_details, - response_obj=model_call_details[ - "async_complete_streaming_response" - ], - start_time=start_time, - end_time=end_time, - ) - else: - await callback.async_log_stream_event( # [TODO]: move this to being an async log stream event function - kwargs=model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) - else: - await callback.async_log_success_event( - kwargs=model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) - if callable(callback): # custom logger functions - global customLogger - if customLogger is None: - customLogger = CustomLogger() - if self.stream: - if ( - "async_complete_streaming_response" - in self.model_call_details - ): - await customLogger.async_log_event( - kwargs=self.model_call_details, - response_obj=self.model_call_details[ - "async_complete_streaming_response" - ], - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - callback_func=callback, - ) - else: - await customLogger.async_log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - callback_func=callback, - ) - if callback == "dynamodb": - global dynamoLogger - if dynamoLogger is None: - dynamoLogger = DyanmoDBLogger() - if self.stream: - if ( - "async_complete_streaming_response" - in self.model_call_details - ): - print_verbose( - "DynamoDB Logger: Got Stream Event - Completed Stream Response" - ) - await dynamoLogger._async_log_event( - kwargs=self.model_call_details, - response_obj=self.model_call_details[ - "async_complete_streaming_response" - ], - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - else: - print_verbose( - "DynamoDB Logger: Got Stream Event - No complete stream response as yet" - ) - else: - await dynamoLogger._async_log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - except Exception: - verbose_logger.error( - f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" - ) - self._handle_callback_failure(callback=callback) - pass - - def _handle_callback_failure(self, callback: Any): - """ - Handle callback logging failures by incrementing Prometheus metrics. - - Works for both sync and async contexts since Prometheus counter increment is synchronous. - - Args: - callback: The callback that failed - """ - try: - callback_name = self._get_callback_name(callback) - - all_callbacks = litellm.logging_callback_manager._get_all_callbacks() - - for callback_obj in all_callbacks: - if hasattr(callback_obj, "increment_callback_logging_failure"): - callback_obj.increment_callback_logging_failure(callback_name=callback_name) # type: ignore - break # Only increment once - - except Exception as e: - verbose_logger.debug(f"Error in _handle_callback_failure: {str(e)}") - - def _failure_handler_helper_fn( - self, exception, traceback_exception, start_time=None, end_time=None - ): - if start_time is None: - start_time = self.start_time - if end_time is None: - end_time = datetime.datetime.now() - - # on some exceptions, model_call_details is not always initialized, this ensures that we still log those exceptions - if not hasattr(self, "model_call_details"): - self.model_call_details = {} - - self.model_call_details["log_event_type"] = "failed_api_call" - self.model_call_details["exception"] = exception - self.model_call_details["traceback_exception"] = traceback_exception - self.model_call_details["end_time"] = end_time - self.model_call_details.setdefault("original_response", None) - self.model_call_details["response_cost"] = 0 - - if hasattr(exception, "headers") and isinstance(exception.headers, dict): - self.model_call_details.setdefault("litellm_params", {}) - metadata = ( - self.model_call_details["litellm_params"].get("metadata", {}) or {} - ) - metadata.update(exception.headers) - - ## STANDARDIZED LOGGING PAYLOAD - - self.model_call_details[ - "standard_logging_object" - ] = get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj={}, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="failure", - error_str=str(exception), - original_exception=exception, - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) - return start_time, end_time - - async def special_failure_handlers(self, exception: Exception): - """ - Custom events, emitted for specific failures. - - Currently just for router model group rate limit error - """ - from litellm.types.router import RouterErrors - - litellm_params: dict = self.model_call_details.get("litellm_params") or {} - metadata = litellm_params.get("metadata") or {} - - ## BASE CASE ## check if rate limit error for model group size 1 - is_base_case = False - if metadata.get("model_group_size") is not None: - model_group_size = metadata.get("model_group_size") - if isinstance(model_group_size, int) and model_group_size == 1: - is_base_case = True - ## check if special error ## - if ( - RouterErrors.no_deployments_available.value not in str(exception) - and is_base_case is False - ): - return - - ## get original model group ## - - model_group = metadata.get("model_group") or None - for callback in litellm._async_failure_callback: - if isinstance(callback, CustomLogger): # custom logger class - await callback.log_model_group_rate_limit_error( - exception=exception, - original_model_group=model_group, - kwargs=self.model_call_details, - ) # type: ignore - - def failure_handler( # noqa: PLR0915 - self, exception, traceback_exception, start_time=None, end_time=None - ): - verbose_logger.debug( - f"Logging Details LiteLLM-Failure Call: {litellm.failure_callback}" - ) - if not self.should_run_logging( - event_type="sync_failure" - ): # prevent double logging - return - litellm_params = self.model_call_details.get("litellm_params", {}) - is_sync_request = ( - litellm_params.get(CallTypes.acompletion.value, False) is not True - and litellm_params.get(CallTypes.aresponses.value, False) is not True - and litellm_params.get(CallTypes.aembedding.value, False) is not True - and litellm_params.get(CallTypes.aimage_generation.value, False) is not True - and litellm_params.get(CallTypes.atranscription.value, False) is not True - ) - - try: - start_time, end_time = self._failure_handler_helper_fn( - exception=exception, - traceback_exception=traceback_exception, - start_time=start_time, - end_time=end_time, - ) - callbacks = self.get_combined_callback_list( - dynamic_success_callbacks=self.dynamic_failure_callbacks, - global_callbacks=litellm.failure_callback, - ) - - result = None # result sent to all loggers, init this to None incase it's not created - - result = redact_message_input_output_from_logging( - model_call_details=( - self.model_call_details - if hasattr(self, "model_call_details") - else {} - ), - result=result, - ) - self.has_run_logging(event_type="sync_failure") - for callback in callbacks: - try: - should_run = self.should_run_callback( - callback=callback, - litellm_params=litellm_params, - event_hook="failure_handler", - ) - if not should_run: - continue - if callback == "lunary" and lunaryLogger is not None: - print_verbose("reaches lunary for logging error!") - - model = self.model - - input = self.model_call_details["input"] - - _type = ( - "embed" - if self.call_type == CallTypes.embedding.value - else "llm" - ) - - lunaryLogger.log_event( - kwargs=self.model_call_details, - type=_type, - event="error", - user_id=self.model_call_details.get("user", "default"), - model=model, - input=input, - error=traceback_exception, - run_id=self.litellm_call_id, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - ) - if callback == "sentry": - print_verbose("sending exception to sentry") - if capture_exception: - capture_exception(exception) - else: - print_verbose( - f"capture exception not initialized: {capture_exception}" - ) - elif callback == "supabase" and supabaseClient is not None: - print_verbose("reaches supabase for logging!") - print_verbose(f"supabaseClient: {supabaseClient}") - supabaseClient.log_event( - model=self.model if hasattr(self, "model") else "", - messages=self.messages, - end_user=self.model_call_details.get("user", "default"), - response_obj=result, - start_time=start_time, - end_time=end_time, - litellm_call_id=self.model_call_details["litellm_call_id"], - print_verbose=print_verbose, - ) - if ( - callable(callback) and customLogger is not None - ): # custom logger functions - customLogger.log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - callback_func=callback, - ) - if ( - isinstance(callback, CustomLogger) and is_sync_request - ): # custom logger class - callback.log_failure_event( - start_time=start_time, - end_time=end_time, - response_obj=result, - kwargs=self.model_call_details, - ) - if callback == "langfuse": - global langFuseLogger - verbose_logger.debug("reaches langfuse for logging failure") - kwargs = {} - for k, v in self.model_call_details.items(): - if ( - k != "original_response" - ): # copy.deepcopy raises errors as this could be a coroutine - kwargs[k] = v - # this only logs streaming once, complete_streaming_response exists i.e when stream ends - langfuse_logger_to_use = LangFuseHandler.get_langfuse_logger_for_request( - globalLangfuseLogger=langFuseLogger, - standard_callback_dynamic_params=self.standard_callback_dynamic_params, - in_memory_dynamic_logger_cache=in_memory_dynamic_logger_cache, - ) - _response = langfuse_logger_to_use.log_event_on_langfuse( - start_time=start_time, - end_time=end_time, - response_obj=None, - user_id=kwargs.get("user", None), - status_message=str(exception), - level="ERROR", - kwargs=self.model_call_details, - ) - if _response is not None and isinstance(_response, dict): - _trace_id = _response.get("trace_id", None) - if _trace_id is not None: - in_memory_trace_id_cache.set_cache( - litellm_call_id=self.litellm_call_id, - service_name="langfuse", - trace_id=_trace_id, - ) - if callback == "traceloop": - traceloopLogger.log_event( - start_time=start_time, - end_time=end_time, - response_obj=None, - user_id=self.model_call_details.get("user", None), - print_verbose=print_verbose, - status_message=str(exception), - level="ERROR", - kwargs=self.model_call_details, - ) - if callback == "logfire" and logfireLogger is not None: - verbose_logger.debug("reaches logfire for failure logging!") - kwargs = {} - for k, v in self.model_call_details.items(): - if ( - k != "original_response" - ): # copy.deepcopy raises errors as this could be a coroutine - kwargs[k] = v - kwargs["exception"] = exception - - logfireLogger.log_event( - kwargs=kwargs, - response_obj=result, - start_time=start_time, - end_time=end_time, - level=LogfireLevel.ERROR.value, # type: ignore - print_verbose=print_verbose, - ) - - except Exception as e: - print_verbose( - f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure logging with integrations {str(e)}" - ) - print_verbose( - f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" - ) - if capture_exception: # log this error to sentry for debugging - capture_exception(e) - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure logging {}".format( - str(e) - ) - ) - - async def async_failure_handler( - self, exception, traceback_exception, start_time=None, end_time=None - ): - """ - Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. - """ - await self.special_failure_handlers(exception=exception) - if not self.should_run_logging( - event_type="async_failure" - ): # prevent double logging - return - start_time, end_time = self._failure_handler_helper_fn( - exception=exception, - traceback_exception=traceback_exception, - start_time=start_time, - end_time=end_time, - ) - - callbacks = self.get_combined_callback_list( - dynamic_success_callbacks=self.dynamic_async_failure_callbacks, - global_callbacks=litellm._async_failure_callback, - ) - - result = None # result sent to all loggers, init this to None incase it's not created - - self.has_run_logging(event_type="async_failure") - for callback in callbacks: - try: - litellm_params = self.model_call_details.get("litellm_params", {}) - should_run = self.should_run_callback( - callback=callback, - litellm_params=litellm_params, - event_hook="async_failure_handler", - ) - if not should_run: - continue - if isinstance(callback, CustomLogger): # custom logger class - await callback.async_log_failure_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - ) # type: ignore - if ( - callable(callback) and customLogger is not None - ): # custom logger functions - await customLogger.async_log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - callback_func=callback, - ) - except Exception as e: - verbose_logger.exception( - "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure \ - logging {}\nCallback={}".format( - str(e), callback - ) - ) - # Track callback logging failures in Prometheus - self._handle_callback_failure(callback=callback) - - def _get_trace_id(self, service_name: Literal["langfuse"]) -> Optional[str]: - """ - For the given service (e.g. langfuse), return the trace_id actually logged. - - Used for constructing the url in slack alerting. - - Returns: - - str: The logged trace id - - None: If trace id not yet emitted. - """ - trace_id: Optional[str] = None - if service_name == "langfuse": - trace_id = in_memory_trace_id_cache.get_cache( - litellm_call_id=self.litellm_call_id, service_name=service_name - ) - - return trace_id - - def _get_callback_object(self, service_name: Literal["langfuse"]) -> Optional[Any]: - """ - Return dynamic callback object. - - Meant to solve issue when doing key-based/team-based logging - """ - global langFuseLogger - - if service_name == "langfuse": - if langFuseLogger is None or ( - ( - self.standard_callback_dynamic_params.get("langfuse_public_key") - is not None - and self.standard_callback_dynamic_params.get("langfuse_public_key") - != langFuseLogger.public_key - ) - or ( - self.standard_callback_dynamic_params.get("langfuse_public_key") - is not None - and self.standard_callback_dynamic_params.get("langfuse_public_key") - != langFuseLogger.public_key - ) - or ( - self.standard_callback_dynamic_params.get("langfuse_host") - is not None - and self.standard_callback_dynamic_params.get("langfuse_host") - != langFuseLogger.langfuse_host - ) - ): - return LangFuseLogger( - langfuse_public_key=self.standard_callback_dynamic_params.get( - "langfuse_public_key" - ), - langfuse_secret=self.standard_callback_dynamic_params.get( - "langfuse_secret" - ), - langfuse_host=self.standard_callback_dynamic_params.get( - "langfuse_host" - ), - ) - return langFuseLogger - - return None - - def handle_sync_success_callbacks_for_async_calls( - self, - result: Any, - start_time: datetime.datetime, - end_time: datetime.datetime, - cache_hit: Optional[Any] = None, - ) -> None: - """ - Handles calling success callbacks for Async calls. - - Why: Some callbacks - `langfuse`, `s3` are sync callbacks. We need to call them in the executor. - """ - if self._should_run_sync_callbacks_for_async_calls() is False: - return - - executor.submit( - self.success_handler, - result, - start_time, - end_time, - cache_hit, - ) - - def _should_run_sync_callbacks_for_async_calls(self) -> bool: - """ - Returns: - - bool: True if sync callbacks should be run for async calls. eg. `langfuse`, `s3` - """ - _combined_sync_callbacks = self.get_combined_callback_list( - dynamic_success_callbacks=self.dynamic_success_callbacks, - global_callbacks=litellm.success_callback, - ) - _filtered_success_callbacks = self._remove_internal_custom_logger_callbacks( - _combined_sync_callbacks - ) - _filtered_success_callbacks = self._remove_internal_litellm_callbacks( - _filtered_success_callbacks - ) - return len(_filtered_success_callbacks) > 0 - - def get_combined_callback_list( - self, dynamic_success_callbacks: Optional[List], global_callbacks: List - ) -> List: - if dynamic_success_callbacks is None: - return list(global_callbacks) - return list(set(dynamic_success_callbacks + global_callbacks)) - - def _remove_internal_litellm_callbacks(self, callbacks: List) -> List: - """ - Creates a filtered list of callbacks, excluding internal LiteLLM callbacks. - - Args: - callbacks: List of callback functions/strings to filter - - Returns: - List of filtered callbacks with internal ones removed - """ - filtered = [ - cb for cb in callbacks if not self._is_internal_litellm_proxy_callback(cb) - ] - - verbose_logger.debug(f"Filtered callbacks: {filtered}") - return filtered - - def _get_callback_name(self, cb) -> str: - """ - Helper to get the name of a callback function - - Args: - cb: The callback object/function/string to get the name of - - Returns: - The name of the callback - """ - if isinstance(cb, str): - return cb - if hasattr(cb, "__name__"): - return cb.__name__ - if hasattr(cb, "__func__"): - return cb.__func__.__name__ - if hasattr(cb, "__class__"): - return cb.__class__.__name__ - return str(cb) - - def _is_internal_litellm_proxy_callback(self, cb) -> bool: - """Helper to check if a callback is internal""" - INTERNAL_PREFIXES = [ - "_PROXY", - "_service_logger.ServiceLogging", - "sync_deployment_callback_on_success", - ] - if isinstance(cb, str): - return False - - if not callable(cb): - return True - - cb_name = self._get_callback_name(cb) - return any(prefix in cb_name for prefix in INTERNAL_PREFIXES) - - def _remove_internal_custom_logger_callbacks(self, callbacks: List) -> List: - """ - Removes internal custom logger callbacks from the list. - """ - _new_callbacks = [] - for _c in callbacks: - if isinstance(_c, CustomLogger): - continue - elif ( - isinstance(_c, str) - and _c in litellm._known_custom_logger_compatible_callbacks - ): - continue - _new_callbacks.append(_c) - return _new_callbacks - - def _get_assembled_streaming_response( - self, - result: Union[ - ModelResponse, - TextCompletionResponse, - ModelResponseStream, - ResponseCompletedEvent, - Any, - ], - start_time: datetime.datetime, - end_time: datetime.datetime, - is_async: bool, - streaming_chunks: List[Any], - ) -> Optional[Union[ModelResponse, TextCompletionResponse, ResponsesAPIResponse]]: - if isinstance(result, ModelResponse): - return result - elif isinstance(result, TextCompletionResponse): - return result - elif isinstance(result, ResponseCompletedEvent): - ## return unified Usage object - if isinstance(result.response.usage, ResponseAPIUsage): - transformed_usage = ( - ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( - result.response.usage - ) - ) - # Set as dict instead of Usage object so model_dump() serializes it correctly - setattr( - result.response, - "usage", - ( - transformed_usage.model_dump() - if hasattr(transformed_usage, "model_dump") - else dict(transformed_usage) - ), - ) - return result.response - else: - return None - return None - - def _handle_anthropic_messages_response_logging(self, result: Any) -> ModelResponse: - """ - Handles logging for Anthropic messages responses. - - Args: - result: The response object from the model call - - Returns: - The the response object from the model call - - - For Non-streaming responses, we need to transform the response to a ModelResponse object. - - For streaming responses, anthropic_messages handler calls success_handler with a assembled ModelResponse. - """ - import httpx - - if self.stream and isinstance(result, ModelResponse): - return result - elif isinstance(result, ModelResponse): - return result - - httpx_response = self.model_call_details.get("httpx_response", None) - if httpx_response and isinstance(httpx_response, httpx.Response): - result = litellm.AnthropicConfig().transform_response( - raw_response=httpx_response, - model_response=litellm.ModelResponse(), - model=self.model, - messages=[], - logging_obj=self, - optional_params={}, - api_key="", - request_data={}, - encoding=litellm.encoding, - json_mode=False, - litellm_params={}, - ) - else: - from litellm.types.llms.anthropic import AnthropicResponse - - pydantic_result = AnthropicResponse.model_validate(result) - import httpx - - result = litellm.AnthropicConfig().transform_parsed_response( - completion_response=pydantic_result.model_dump(), - raw_response=httpx.Response( - status_code=200, - headers={}, - ), - model_response=litellm.ModelResponse(), - json_mode=None, - ) - return result - - def _handle_non_streaming_google_genai_generate_content_response_logging( - self, result: Any - ) -> ModelResponse: - """ - Handles logging for Google GenAI generate content responses. - """ - import httpx - - httpx_response = self.model_call_details.get("httpx_response", None) - if httpx_response is None: - raise ValueError("Google GenAI Generate Content: httpx_response is None") - dict_result = httpx_response.json() - result = litellm.VertexGeminiConfig()._transform_google_generate_content_to_openai_model_response( - completion_response=dict_result, - model_response=litellm.ModelResponse(), - model=self.model, - logging_obj=self, - raw_response=httpx.Response( - status_code=200, - headers={}, - ), - ) - return result - - def _handle_a2a_response_logging(self, result: Any) -> Any: - """ - Handles logging for A2A (Agent-to-Agent) responses. - - Adds usage from model_call_details to the result if available. - Uses Pydantic's model_copy to avoid modifying the original response. - - Args: - result: The LiteLLMSendMessageResponse from the A2A call - - Returns: - The response object with usage added if available - """ - # Get usage from model_call_details (set by asend_message) - usage = self.model_call_details.get("usage") - if usage is None: - return result - - # Deep copy result and add usage - result_copy = result.model_copy(deep=True) - result_copy.usage = ( - usage.model_dump() if hasattr(usage, "model_dump") else dict(usage) - ) - return result_copy - - -def _get_masked_values( - sensitive_object: dict, - ignore_sensitive_values: bool = False, - mask_all_values: bool = False, - unmasked_length: int = 4, - number_of_asterisks: Optional[int] = 4, -) -> dict: - """ - Internal debugging helper function - - Masks the headers of the request sent from LiteLLM - - Args: - masked_length: Optional length for the masked portion (number of *). If set, will use exactly this many * - regardless of original string length. The total length will be unmasked_length + masked_length. - """ - sensitive_keywords = [ - "authorization", - "token", - "key", - "secret", - "vertex_credentials", - ] - return { - k: ( - # If ignore_sensitive_values is True, or if this key doesn't contain sensitive keywords, return original value - v - if ignore_sensitive_values - or not any( - sensitive_keyword in k.lower() - for sensitive_keyword in sensitive_keywords - ) - else ( - # Apply masking to sensitive keys - ( - v[: unmasked_length // 2] - + "*" * number_of_asterisks - + v[-unmasked_length // 2 :] - ) - if ( - isinstance(v, str) - and len(v) > unmasked_length - and number_of_asterisks is not None - ) - else ( - ( - v[: unmasked_length // 2] - + "*" * (len(v) - unmasked_length) - + v[-unmasked_length // 2 :] - ) - if (isinstance(v, str) and len(v) > unmasked_length) - else ("*****" if isinstance(v, str) else v) - ) - ) - ) - for k, v in sensitive_object.items() - } - - -def set_callbacks(callback_list, function_id=None): # noqa: PLR0915 - """ - Globally sets the callback client - """ - global sentry_sdk_instance, capture_exception, add_breadcrumb, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, supabaseClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, logfireLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger, deepevalLogger - - try: - for callback in callback_list: - if callback == "sentry": - try: - import sentry_sdk - except ImportError: - print_verbose("Package 'sentry_sdk' is missing. Installing it...") - subprocess.check_call( - [sys.executable, "-m", "pip", "install", "sentry_sdk"] - ) - import sentry_sdk - from sentry_sdk.scrubber import EventScrubber - - sentry_sdk_instance = sentry_sdk - sentry_trace_rate = ( - os.environ.get("SENTRY_API_TRACE_RATE") - if "SENTRY_API_TRACE_RATE" in os.environ - else "1.0" - ) - sentry_sample_rate = ( - os.environ.get("SENTRY_API_SAMPLE_RATE") - if "SENTRY_API_SAMPLE_RATE" in os.environ - else "1.0" - ) - sentry_sdk_instance.init( - dsn=os.environ.get("SENTRY_DSN"), - traces_sample_rate=float(sentry_trace_rate), # type: ignore - sample_rate=float( - sentry_sample_rate if sentry_sample_rate else 1.0 - ), - send_default_pii=False, # Prevent sending Personal Identifiable Information - event_scrubber=EventScrubber( - denylist=SENTRY_DENYLIST, pii_denylist=SENTRY_PII_DENYLIST - ), - environment=os.environ.get("SENTRY_ENVIRONMENT", "production"), - ) - capture_exception = sentry_sdk_instance.capture_exception - add_breadcrumb = sentry_sdk_instance.add_breadcrumb - elif callback == "slack": - try: - from slack_bolt import App - except ImportError: - print_verbose("Package 'slack_bolt' is missing. Installing it...") - subprocess.check_call( - [sys.executable, "-m", "pip", "install", "slack_bolt"] - ) - from slack_bolt import App - slack_app = App( - token=os.environ.get("SLACK_API_TOKEN"), - signing_secret=os.environ.get("SLACK_API_SECRET"), - ) - alerts_channel = os.environ["SLACK_API_CHANNEL"] - print_verbose(f"Initialized Slack App: {slack_app}") - elif callback == "traceloop": - traceloopLogger = TraceloopLogger() - elif callback == "athina": - athinaLogger = AthinaLogger() - print_verbose("Initialized Athina Logger") - elif callback == "helicone": - heliconeLogger = HeliconeLogger() - elif callback == "lunary": - lunaryLogger = LunaryLogger() - elif callback == "promptlayer": - promptLayerLogger = PromptLayerLogger() - elif callback == "langfuse": - langFuseLogger = LangFuseLogger( - langfuse_public_key=None, langfuse_secret=None, langfuse_host=None - ) - elif callback == "openmeter": - openMeterLogger = OpenMeterLogger() - elif callback == "datadog": - dataDogLogger = DataDogLogger() - elif callback == "dynamodb": - dynamoLogger = DyanmoDBLogger() - elif callback == "s3": - s3Logger = S3Logger() - elif callback == "wandb": - from litellm.integrations.weights_biases import WeightsBiasesLogger - - weightsBiasesLogger = WeightsBiasesLogger() - elif callback == "logfire": - logfireLogger = LogfireLogger() - elif callback == "supabase": - print_verbose("instantiating supabase") - supabaseClient = Supabase() - elif callback == "greenscale": - greenscaleLogger = GreenscaleLogger() - print_verbose("Initialized Greenscale Logger") - elif callable(callback): - customLogger = CustomLogger() - except Exception as e: - raise e - return None - - -def _init_custom_logger_compatible_class( # noqa: PLR0915 - logging_integration: _custom_logger_compatible_callbacks_literal, - internal_usage_cache: Optional[DualCache], - llm_router: Optional[ - Any - ], # expect litellm.Router, but typing errors due to circular import - custom_logger_init_args: Optional[dict] = {}, -) -> Optional[CustomLogger]: - """ - Initialize a custom logger compatible class - """ - try: - custom_logger_init_args = custom_logger_init_args or {} - if logging_integration == "agentops": # Add AgentOps initialization - for callback in _in_memory_loggers: - if isinstance(callback, AgentOps): - return callback # type: ignore - - agentops_logger = AgentOps() - _in_memory_loggers.append(agentops_logger) - return agentops_logger # type: ignore - elif logging_integration == "lago": - for callback in _in_memory_loggers: - if isinstance(callback, LagoLogger): - return callback # type: ignore - - lago_logger = LagoLogger() - _in_memory_loggers.append(lago_logger) - return lago_logger # type: ignore - elif logging_integration == "openmeter": - for callback in _in_memory_loggers: - if isinstance(callback, OpenMeterLogger): - return callback # type: ignore - - _openmeter_logger = OpenMeterLogger() - _in_memory_loggers.append(_openmeter_logger) - return _openmeter_logger # type: ignore - elif logging_integration == "posthog": - for callback in _in_memory_loggers: - if isinstance(callback, PostHogLogger): - return callback # type: ignore - - _posthog_logger = PostHogLogger() - _in_memory_loggers.append(_posthog_logger) - return _posthog_logger # type: ignore - elif logging_integration == "braintrust": - from litellm.integrations.braintrust_logging import BraintrustLogger - - for callback in _in_memory_loggers: - if isinstance(callback, BraintrustLogger): - return callback # type: ignore - - braintrust_logger = BraintrustLogger() - _in_memory_loggers.append(braintrust_logger) - return braintrust_logger # type: ignore - elif logging_integration == "langsmith": - for callback in _in_memory_loggers: - if isinstance(callback, LangsmithLogger): - return callback # type: ignore - - _langsmith_logger = LangsmithLogger() - _in_memory_loggers.append(_langsmith_logger) - return _langsmith_logger # type: ignore - elif logging_integration == "argilla": - for callback in _in_memory_loggers: - if isinstance(callback, ArgillaLogger): - return callback # type: ignore - - _argilla_logger = ArgillaLogger() - _in_memory_loggers.append(_argilla_logger) - return _argilla_logger # type: ignore - elif logging_integration == "literalai": - for callback in _in_memory_loggers: - if isinstance(callback, LiteralAILogger): - return callback # type: ignore - - _literalai_logger = LiteralAILogger() - _in_memory_loggers.append(_literalai_logger) - return _literalai_logger # type: ignore - elif logging_integration == "prometheus": - PrometheusLogger = _get_cached_prometheus_logger() - - for callback in _in_memory_loggers: - if isinstance(callback, PrometheusLogger): - return callback # type: ignore - - _prometheus_logger = PrometheusLogger() - _in_memory_loggers.append(_prometheus_logger) - return _prometheus_logger # type: ignore - elif logging_integration == "datadog": - for callback in _in_memory_loggers: - if isinstance(callback, DataDogLogger): - return callback # type: ignore - - _datadog_logger = DataDogLogger() - _in_memory_loggers.append(_datadog_logger) - return _datadog_logger # type: ignore - elif logging_integration == "datadog_llm_observability": - _datadog_llm_obs_logger = DataDogLLMObsLogger() - _in_memory_loggers.append(_datadog_llm_obs_logger) - return _datadog_llm_obs_logger # type: ignore - elif logging_integration == "azure_sentinel": - for callback in _in_memory_loggers: - if isinstance(callback, AzureSentinelLogger): - return callback # type: ignore - - _azure_sentinel_logger = AzureSentinelLogger() - _in_memory_loggers.append(_azure_sentinel_logger) - return _azure_sentinel_logger # type: ignore - elif logging_integration == "gcs_bucket": - for callback in _in_memory_loggers: - if isinstance(callback, GCSBucketLogger): - return callback # type: ignore - - _gcs_bucket_logger = GCSBucketLogger() - _in_memory_loggers.append(_gcs_bucket_logger) - return _gcs_bucket_logger # type: ignore - elif logging_integration == "s3_v2": - for callback in _in_memory_loggers: - if isinstance(callback, S3V2Logger): - return callback # type: ignore - - _s3_v2_logger = S3V2Logger() - _in_memory_loggers.append(_s3_v2_logger) - return _s3_v2_logger # type: ignore - elif logging_integration == "aws_sqs": - for callback in _in_memory_loggers: - if isinstance(callback, SQSLogger): - return callback # type: ignore - - _aws_sqs_logger = SQSLogger() - _in_memory_loggers.append(_aws_sqs_logger) - return _aws_sqs_logger # type: ignore - elif logging_integration == "azure_storage": - for callback in _in_memory_loggers: - if isinstance(callback, AzureBlobStorageLogger): - return callback # type: ignore - - _azure_storage_logger = AzureBlobStorageLogger() - _in_memory_loggers.append(_azure_storage_logger) - return _azure_storage_logger # type: ignore - elif logging_integration == "opik": - for callback in _in_memory_loggers: - if isinstance(callback, OpikLogger): - return callback # type: ignore - - _opik_logger = OpikLogger() - _in_memory_loggers.append(_opik_logger) - return _opik_logger # type: ignore - elif logging_integration == "arize": - from litellm.integrations.opentelemetry import ( - OpenTelemetry, - OpenTelemetryConfig, - ) - - arize_config = ArizeLogger.get_arize_config() - if arize_config.endpoint is None: - raise ValueError( - "No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint" - ) - otel_config = OpenTelemetryConfig( - exporter=arize_config.protocol, - endpoint=arize_config.endpoint, - service_name=arize_config.project_name, - ) - - os.environ[ - "OTEL_EXPORTER_OTLP_TRACES_HEADERS" - ] = f"space_id={arize_config.space_key or arize_config.space_id},api_key={arize_config.api_key}" - for callback in _in_memory_loggers: - if ( - isinstance(callback, ArizeLogger) - and callback.callback_name == "arize" - ): - return callback # type: ignore - _arize_otel_logger = ArizeLogger(config=otel_config, callback_name="arize") - _in_memory_loggers.append(_arize_otel_logger) - return _arize_otel_logger # type: ignore - elif logging_integration == "arize_phoenix": - from litellm.integrations.opentelemetry import ( - OpenTelemetry, - OpenTelemetryConfig, - ) - - arize_phoenix_config = ArizePhoenixLogger.get_arize_phoenix_config() - otel_config = OpenTelemetryConfig( - exporter=arize_phoenix_config.protocol, - endpoint=arize_phoenix_config.endpoint, - headers=arize_phoenix_config.otlp_auth_headers, - ) - if arize_phoenix_config.project_name: - existing_attrs = os.environ.get("OTEL_RESOURCE_ATTRIBUTES", "") - # Add openinference.project.name attribute - if existing_attrs: - os.environ[ - "OTEL_RESOURCE_ATTRIBUTES" - ] = f"{existing_attrs},openinference.project.name={arize_phoenix_config.project_name}" - else: - os.environ[ - "OTEL_RESOURCE_ATTRIBUTES" - ] = f"openinference.project.name={arize_phoenix_config.project_name}" - - # Set Phoenix project name from environment variable - phoenix_project_name = os.environ.get("PHOENIX_PROJECT_NAME", None) - if phoenix_project_name: - existing_attrs = os.environ.get("OTEL_RESOURCE_ATTRIBUTES", "") - # Add openinference.project.name attribute - if existing_attrs: - os.environ[ - "OTEL_RESOURCE_ATTRIBUTES" - ] = f"{existing_attrs},openinference.project.name={phoenix_project_name}" - else: - os.environ[ - "OTEL_RESOURCE_ATTRIBUTES" - ] = f"openinference.project.name={phoenix_project_name}" - - # auth can be disabled on local deployments of arize phoenix - if arize_phoenix_config.otlp_auth_headers is not None: - os.environ[ - "OTEL_EXPORTER_OTLP_TRACES_HEADERS" - ] = arize_phoenix_config.otlp_auth_headers - - for callback in _in_memory_loggers: - if ( - isinstance(callback, ArizePhoenixLogger) - and callback.callback_name == "arize_phoenix" - ): - return callback # type: ignore - _arize_phoenix_otel_logger = ArizePhoenixLogger( - config=otel_config, callback_name="arize_phoenix" - ) - _in_memory_loggers.append(_arize_phoenix_otel_logger) - return _arize_phoenix_otel_logger # type: ignore - elif logging_integration == "levo": - from litellm.integrations.levo.levo import LevoLogger - from litellm.integrations.opentelemetry import ( - OpenTelemetry, - OpenTelemetryConfig, - ) - - levo_config = LevoLogger.get_levo_config() - otel_config = OpenTelemetryConfig( - exporter=levo_config.protocol, - endpoint=levo_config.endpoint, - headers=levo_config.otlp_auth_headers, - ) - - # Check if LevoLogger instance already exists - for callback in _in_memory_loggers: - if ( - isinstance(callback, LevoLogger) - and callback.callback_name == "levo" - ): - return callback # type: ignore - - _levo_otel_logger = LevoLogger(config=otel_config, callback_name="levo") - _in_memory_loggers.append(_levo_otel_logger) - return _levo_otel_logger # type: ignore - elif logging_integration == "otel": - from litellm.integrations.opentelemetry import OpenTelemetry - - for callback in _in_memory_loggers: - if type(callback) is OpenTelemetry: - return callback # type: ignore - otel_logger = OpenTelemetry( - **_get_custom_logger_settings_from_proxy_server( - callback_name=logging_integration - ) - ) - _in_memory_loggers.append(otel_logger) - return otel_logger # type: ignore - - elif logging_integration == "galileo": - for callback in _in_memory_loggers: - if isinstance(callback, GalileoObserve): - return callback # type: ignore - - galileo_logger = GalileoObserve() - _in_memory_loggers.append(galileo_logger) - return galileo_logger # type: ignore - elif logging_integration == "cloudzero": - from litellm.integrations.cloudzero.cloudzero import CloudZeroLogger - - for callback in _in_memory_loggers: - if isinstance(callback, CloudZeroLogger): - return callback # type: ignore - cloudzero_logger = CloudZeroLogger() - _in_memory_loggers.append(cloudzero_logger) - return cloudzero_logger # type: ignore - elif logging_integration == "focus": - from litellm.integrations.focus.focus_logger import FocusLogger - - for callback in _in_memory_loggers: - if isinstance(callback, FocusLogger): - return callback # type: ignore - focus_logger = FocusLogger() - _in_memory_loggers.append(focus_logger) - return focus_logger # type: ignore - elif logging_integration == "deepeval": - for callback in _in_memory_loggers: - if isinstance(callback, DeepEvalLogger): - return callback # type: ignore - deepeval_logger = DeepEvalLogger() - _in_memory_loggers.append(deepeval_logger) - return deepeval_logger # type: ignore - - elif logging_integration == "logfire": - if "LOGFIRE_TOKEN" not in os.environ: - raise ValueError("LOGFIRE_TOKEN not found in environment variables") - from litellm.integrations.opentelemetry import ( - OpenTelemetry, - OpenTelemetryConfig, - ) - - logfire_base_url = os.getenv( - "LOGFIRE_BASE_URL", "https://logfire-api.pydantic.dev" - ) - otel_config = OpenTelemetryConfig( - exporter="otlp_http", - endpoint=f"{logfire_base_url.rstrip('/')}/v1/traces", - headers=f"Authorization={os.getenv('LOGFIRE_TOKEN')}", - ) - for callback in _in_memory_loggers: - if isinstance(callback, OpenTelemetry): - return callback # type: ignore - _otel_logger = OpenTelemetry(config=otel_config) - _in_memory_loggers.append(_otel_logger) - return _otel_logger # type: ignore - elif logging_integration == "dynamic_rate_limiter": - from litellm.proxy.hooks.dynamic_rate_limiter import ( - _PROXY_DynamicRateLimitHandler, - ) - - for callback in _in_memory_loggers: - if isinstance(callback, _PROXY_DynamicRateLimitHandler): - return callback # type: ignore - - if internal_usage_cache is None: - raise Exception( - "Internal Error: Cache cannot be empty - internal_usage_cache={}".format( - internal_usage_cache - ) - ) - - dynamic_rate_limiter_obj = _PROXY_DynamicRateLimitHandler( - internal_usage_cache=internal_usage_cache - ) - - if llm_router is not None and isinstance(llm_router, litellm.Router): - dynamic_rate_limiter_obj.update_variables(llm_router=llm_router) - _in_memory_loggers.append(dynamic_rate_limiter_obj) - return dynamic_rate_limiter_obj # type: ignore - elif logging_integration == "dynamic_rate_limiter_v3": - from litellm.proxy.hooks.dynamic_rate_limiter_v3 import ( - _PROXY_DynamicRateLimitHandlerV3, - ) - - for callback in _in_memory_loggers: - if isinstance(callback, _PROXY_DynamicRateLimitHandlerV3): - return callback # type: ignore - - if internal_usage_cache is None: - raise Exception( - "Internal Error: Cache cannot be empty - internal_usage_cache={}".format( - internal_usage_cache - ) - ) - - dynamic_rate_limiter_obj_v3 = _PROXY_DynamicRateLimitHandlerV3( - internal_usage_cache=internal_usage_cache - ) - - if llm_router is not None and isinstance(llm_router, litellm.Router): - dynamic_rate_limiter_obj_v3.update_variables(llm_router=llm_router) - _in_memory_loggers.append(dynamic_rate_limiter_obj_v3) - return dynamic_rate_limiter_obj_v3 # type: ignore - elif logging_integration == "langtrace": - if "LANGTRACE_API_KEY" not in os.environ: - raise ValueError("LANGTRACE_API_KEY not found in environment variables") - - from litellm.integrations.opentelemetry import ( - OpenTelemetry, - OpenTelemetryConfig, - ) - - otel_config = OpenTelemetryConfig( - exporter="otlp_http", - endpoint="https://langtrace.ai/api/trace", - ) - os.environ[ - "OTEL_EXPORTER_OTLP_TRACES_HEADERS" - ] = f"api_key={os.getenv('LANGTRACE_API_KEY')}" - for callback in _in_memory_loggers: - if ( - isinstance(callback, OpenTelemetry) - and callback.callback_name == "langtrace" - ): - return callback # type: ignore - _otel_logger = OpenTelemetry(config=otel_config, callback_name="langtrace") - _in_memory_loggers.append(_otel_logger) - return _otel_logger # type: ignore - - elif logging_integration == "mlflow": - for callback in _in_memory_loggers: - if isinstance(callback, MlflowLogger): - return callback # type: ignore - - _mlflow_logger = MlflowLogger() - _in_memory_loggers.append(_mlflow_logger) - return _mlflow_logger # type: ignore - elif logging_integration == "langfuse": - for callback in _in_memory_loggers: - if isinstance(callback, LangfusePromptManagement): - return callback - - langfuse_logger = LangfusePromptManagement() - _in_memory_loggers.append(langfuse_logger) - return langfuse_logger # type: ignore - elif logging_integration == "langfuse_otel": - from litellm.integrations.langfuse.langfuse_otel import LangfuseOtelLogger - - for callback in _in_memory_loggers: - if ( - isinstance(callback, LangfuseOtelLogger) - and callback.callback_name == "langfuse_otel" - ): - return callback # type: ignore - # Allow LangfuseOtelLogger to initialize its own config safely - # This prevents startup crashes if LANGFUSE keys are not in env (e.g. for dynamic usage) - _otel_logger = LangfuseOtelLogger( - config=None, callback_name="langfuse_otel" - ) - _in_memory_loggers.append(_otel_logger) - return _otel_logger # type: ignore - elif logging_integration == "weave_otel": - from litellm.integrations.opentelemetry import OpenTelemetryConfig - from litellm.integrations.weave.weave_otel import ( - WeaveOtelLogger, - get_weave_otel_config, - ) - - weave_otel_config = get_weave_otel_config() - - otel_config = OpenTelemetryConfig( - exporter=weave_otel_config.protocol, - endpoint=weave_otel_config.endpoint, - headers=weave_otel_config.otlp_auth_headers, - ) - - for callback in _in_memory_loggers: - if ( - isinstance(callback, WeaveOtelLogger) - and callback.callback_name == "weave_otel" - ): - return callback # type: ignore - _otel_logger = WeaveOtelLogger( - config=otel_config, callback_name="weave_otel" - ) - _in_memory_loggers.append(_otel_logger) - return _otel_logger # type: ignore - elif logging_integration == "pagerduty": - for callback in _in_memory_loggers: - if isinstance(callback, PagerDutyAlerting): - return callback - pagerduty_logger = PagerDutyAlerting(**custom_logger_init_args) - _in_memory_loggers.append(pagerduty_logger) - return pagerduty_logger # type: ignore - elif logging_integration == "anthropic_cache_control_hook": - for callback in _in_memory_loggers: - if isinstance(callback, AnthropicCacheControlHook): - return callback - anthropic_cache_control_hook = AnthropicCacheControlHook() - _in_memory_loggers.append(anthropic_cache_control_hook) - return anthropic_cache_control_hook # type: ignore - elif logging_integration == "vector_store_pre_call_hook": - from litellm.integrations.vector_store_integrations.vector_store_pre_call_hook import ( - VectorStorePreCallHook, - ) - - for callback in _in_memory_loggers: - if isinstance(callback, VectorStorePreCallHook): - return callback - vector_store_pre_call_hook = VectorStorePreCallHook() - _in_memory_loggers.append(vector_store_pre_call_hook) - return vector_store_pre_call_hook # type: ignore - elif logging_integration == "gcs_pubsub": - for callback in _in_memory_loggers: - if isinstance(callback, GcsPubSubLogger): - return callback - _gcs_pubsub_logger = GcsPubSubLogger() - _in_memory_loggers.append(_gcs_pubsub_logger) - return _gcs_pubsub_logger # type: ignore - elif logging_integration == "generic_api": - for callback in _in_memory_loggers: - if isinstance(callback, GenericAPILogger): - return callback - generic_api_logger = GenericAPILogger() - _in_memory_loggers.append(generic_api_logger) - return generic_api_logger # type: ignore - elif logging_integration == "resend_email": - for callback in _in_memory_loggers: - if isinstance(callback, ResendEmailLogger): - return callback - resend_email_logger = ResendEmailLogger() - _in_memory_loggers.append(resend_email_logger) - return resend_email_logger # type: ignore - elif logging_integration == "sendgrid_email": - for callback in _in_memory_loggers: - if isinstance(callback, SendGridEmailLogger): - return callback - sendgrid_email_logger = SendGridEmailLogger() - _in_memory_loggers.append(sendgrid_email_logger) - return sendgrid_email_logger # type: ignore - elif logging_integration == "smtp_email": - for callback in _in_memory_loggers: - if isinstance(callback, SMTPEmailLogger): - return callback - smtp_email_logger = SMTPEmailLogger() - _in_memory_loggers.append(smtp_email_logger) - return smtp_email_logger # type: ignore - elif logging_integration == "humanloop": - for callback in _in_memory_loggers: - if isinstance(callback, HumanloopLogger): - return callback - - humanloop_logger = HumanloopLogger() - _in_memory_loggers.append(humanloop_logger) - return humanloop_logger # type: ignore - elif logging_integration == "dotprompt": - for callback in _in_memory_loggers: - if isinstance(callback, DotpromptManager): - return callback - - dotprompt_logger = DotpromptManager() - _in_memory_loggers.append(dotprompt_logger) - return dotprompt_logger # type: ignore - elif logging_integration == "bitbucket": - from litellm.integrations.bitbucket.bitbucket_prompt_manager import ( - BitBucketPromptManager, - ) - - for callback in _in_memory_loggers: - if isinstance(callback, BitBucketPromptManager): - return callback - - # Get global BitBucket config - bitbucket_config = getattr(litellm, "global_bitbucket_config", None) - if bitbucket_config is None: - raise ValueError( - "BitBucket configuration not found. Please set litellm.global_bitbucket_config first." - ) - - bitbucket_logger = BitBucketPromptManager(bitbucket_config=bitbucket_config) - _in_memory_loggers.append(bitbucket_logger) - return bitbucket_logger # type: ignore - elif logging_integration == "gitlab": - from litellm.integrations.gitlab.gitlab_prompt_manager import ( - GitLabPromptManager, - ) - - for callback in _in_memory_loggers: - if isinstance(callback, GitLabPromptManager): - return callback - - # Get global BitBucket config - gitlab_config = getattr(litellm, "global_gitlab_config", None) - if gitlab_config is None: - raise ValueError( - "Gitlab configuration not found. Please set litellm.global_gitlab_config first." - ) - - gitlab_logger = GitLabPromptManager(gitlab_config=gitlab_config) - _in_memory_loggers.append(gitlab_logger) - return gitlab_logger # type: ignore - return None - except Exception as e: - verbose_logger.exception( - f"[Non-Blocking Error] Error initializing custom logger: {e}" - ) - return None - return None - - -def get_custom_logger_compatible_class( # noqa: PLR0915 - logging_integration: _custom_logger_compatible_callbacks_literal, -) -> Optional[CustomLogger]: - try: - if logging_integration == "lago": - for callback in _in_memory_loggers: - if isinstance(callback, LagoLogger): - return callback - elif logging_integration == "openmeter": - for callback in _in_memory_loggers: - if isinstance(callback, OpenMeterLogger): - return callback - elif logging_integration == "braintrust": - from litellm.integrations.braintrust_logging import BraintrustLogger - - for callback in _in_memory_loggers: - if isinstance(callback, BraintrustLogger): - return callback - elif logging_integration == "galileo": - for callback in _in_memory_loggers: - if isinstance(callback, GalileoObserve): - return callback - elif logging_integration == "cloudzero": - from litellm.integrations.cloudzero.cloudzero import CloudZeroLogger - - for callback in _in_memory_loggers: - if isinstance(callback, CloudZeroLogger): - return callback - elif logging_integration == "focus": - from litellm.integrations.focus.focus_logger import FocusLogger - - for callback in _in_memory_loggers: - if isinstance(callback, FocusLogger): - return callback - elif logging_integration == "deepeval": - for callback in _in_memory_loggers: - if isinstance(callback, DeepEvalLogger): - return callback - elif logging_integration == "langsmith": - for callback in _in_memory_loggers: - if isinstance(callback, LangsmithLogger): - return callback - elif logging_integration == "argilla": - for callback in _in_memory_loggers: - if isinstance(callback, ArgillaLogger): - return callback - elif logging_integration == "literalai": - for callback in _in_memory_loggers: - if isinstance(callback, LiteralAILogger): - return callback - elif logging_integration == "prometheus": - PrometheusLogger = _get_cached_prometheus_logger() - for callback in _in_memory_loggers: - if isinstance(callback, PrometheusLogger): - return callback - elif logging_integration == "datadog": - for callback in _in_memory_loggers: - if isinstance(callback, DataDogLogger): - return callback - elif logging_integration == "datadog_llm_observability": - for callback in _in_memory_loggers: - if isinstance(callback, DataDogLLMObsLogger): - return callback - elif logging_integration == "azure_sentinel": - for callback in _in_memory_loggers: - if isinstance(callback, AzureSentinelLogger): - return callback - elif logging_integration == "gcs_bucket": - for callback in _in_memory_loggers: - if isinstance(callback, GCSBucketLogger): - return callback - elif logging_integration == "s3_v2": - for callback in _in_memory_loggers: - if isinstance(callback, S3V2Logger): - return callback - elif logging_integration == "aws_sqs": - for callback in _in_memory_loggers: - if isinstance(callback, SQSLogger): - return callback - _aws_sqs_logger = SQSLogger() - _in_memory_loggers.append(_aws_sqs_logger) - return _aws_sqs_logger # type: ignore - elif logging_integration == "azure_storage": - for callback in _in_memory_loggers: - if isinstance(callback, AzureBlobStorageLogger): - return callback - elif logging_integration == "opik": - for callback in _in_memory_loggers: - if isinstance(callback, OpikLogger): - return callback - elif logging_integration == "langfuse": - for callback in _in_memory_loggers: - if isinstance(callback, LangfusePromptManagement): - return callback - elif logging_integration == "otel": - from litellm.integrations.opentelemetry import OpenTelemetry - - for callback in _in_memory_loggers: - if isinstance(callback, OpenTelemetry): - return callback - elif logging_integration == "arize": - if "ARIZE_API_KEY" not in os.environ: - raise ValueError("ARIZE_API_KEY not found in environment variables") - for callback in _in_memory_loggers: - if ( - isinstance(callback, ArizeLogger) - and callback.callback_name == "arize" - ): - return callback - elif logging_integration == "logfire": - if "LOGFIRE_TOKEN" not in os.environ: - raise ValueError("LOGFIRE_TOKEN not found in environment variables") - from litellm.integrations.opentelemetry import OpenTelemetry - - for callback in _in_memory_loggers: - if isinstance(callback, OpenTelemetry): - return callback # type: ignore - - elif logging_integration == "dynamic_rate_limiter": - from litellm.proxy.hooks.dynamic_rate_limiter import ( - _PROXY_DynamicRateLimitHandler, - ) - - for callback in _in_memory_loggers: - if isinstance(callback, _PROXY_DynamicRateLimitHandler): - return callback # type: ignore - elif logging_integration == "dynamic_rate_limiter_v3": - from litellm.proxy.hooks.dynamic_rate_limiter_v3 import ( - _PROXY_DynamicRateLimitHandlerV3, - ) - - for callback in _in_memory_loggers: - if isinstance(callback, _PROXY_DynamicRateLimitHandlerV3): - return callback # type: ignore - - elif logging_integration == "langtrace": - from litellm.integrations.opentelemetry import OpenTelemetry - - if "LANGTRACE_API_KEY" not in os.environ: - raise ValueError("LANGTRACE_API_KEY not found in environment variables") - - for callback in _in_memory_loggers: - if ( - isinstance(callback, OpenTelemetry) - and callback.callback_name == "langtrace" - ): - return callback - - elif logging_integration == "mlflow": - for callback in _in_memory_loggers: - if isinstance(callback, MlflowLogger): - return callback - elif logging_integration == "pagerduty": - for callback in _in_memory_loggers: - if isinstance(callback, PagerDutyAlerting): - return callback - elif logging_integration == "anthropic_cache_control_hook": - for callback in _in_memory_loggers: - if isinstance(callback, AnthropicCacheControlHook): - return callback - elif logging_integration == "vector_store_pre_call_hook": - from litellm.integrations.vector_store_integrations.vector_store_pre_call_hook import ( - VectorStorePreCallHook, - ) - - for callback in _in_memory_loggers: - if isinstance(callback, VectorStorePreCallHook): - return callback - elif logging_integration == "gcs_pubsub": - for callback in _in_memory_loggers: - if isinstance(callback, GcsPubSubLogger): - return callback - elif logging_integration == "generic_api": - for callback in _in_memory_loggers: - if isinstance(callback, GenericAPILogger): - return callback - elif logging_integration == "resend_email": - for callback in _in_memory_loggers: - if isinstance(callback, ResendEmailLogger): - return callback - elif logging_integration == "sendgrid_email": - for callback in _in_memory_loggers: - if isinstance(callback, SendGridEmailLogger): - return callback - elif logging_integration == "smtp_email": - for callback in _in_memory_loggers: - if isinstance(callback, SMTPEmailLogger): - return callback - return None - - except Exception as e: - verbose_logger.exception( - f"[Non-Blocking Error] Error getting custom logger: {e}" - ) - return None - - -def _get_custom_logger_settings_from_proxy_server(callback_name: str) -> Dict: - """ - Get the settings for a custom logger from the proxy server config.yaml - - Proxy server config.yaml defines callback_settings as: - - callback_settings: - otel: - message_logging: False - """ - if litellm.callback_settings: - return dict(litellm.callback_settings.get(callback_name, {})) - return {} - - -def use_custom_pricing_for_model(litellm_params: Optional[dict]) -> bool: - """ - Check if the model uses custom pricing - - Returns True if any of `SPECIAL_MODEL_INFO_PARAMS` are present in `litellm_params` or `model_info` - """ - if litellm_params is None: - return False - - # Check litellm_params using set intersection (only check keys that exist in both) - matching_keys = _CUSTOM_PRICING_KEYS & litellm_params.keys() - for key in matching_keys: - if litellm_params.get(key) is not None: - return True - - # Check model_info - metadata: dict = litellm_params.get("metadata", {}) or {} - model_info: dict = metadata.get("model_info", {}) or {} - - if model_info: - matching_keys = _CUSTOM_PRICING_KEYS & model_info.keys() - for key in matching_keys: - if model_info.get(key) is not None: - return True - - return False - - -def is_valid_sha256_hash(value: str) -> bool: - # Check if the value is a valid SHA-256 hash (64 hexadecimal characters) - return bool(re.fullmatch(r"[a-fA-F0-9]{64}", value)) - - -class StandardLoggingPayloadSetup: - @staticmethod - def cleanup_timestamps( - start_time: Union[dt_object, float], - end_time: Union[dt_object, float], - completion_start_time: Union[dt_object, float], - ) -> Tuple[float, float, float]: - """ - Convert datetime objects to floats - - Args: - start_time: Union[dt_object, float] - end_time: Union[dt_object, float] - completion_start_time: Union[dt_object, float] - - Returns: - Tuple[float, float, float]: A tuple containing the start time, end time, and completion start time as floats. - """ - - if isinstance(start_time, datetime.datetime): - start_time_float = start_time.timestamp() - elif isinstance(start_time, float): - start_time_float = start_time - else: - raise ValueError( - f"start_time is required, got={start_time} of type {type(start_time)}" - ) - - if isinstance(end_time, datetime.datetime): - end_time_float = end_time.timestamp() - elif isinstance(end_time, float): - end_time_float = end_time - else: - raise ValueError( - f"end_time is required, got={end_time} of type {type(end_time)}" - ) - - if isinstance(completion_start_time, datetime.datetime): - completion_start_time_float = completion_start_time.timestamp() - elif isinstance(completion_start_time, float): - completion_start_time_float = completion_start_time - else: - completion_start_time_float = end_time_float - - return start_time_float, end_time_float, completion_start_time_float - - @staticmethod - def append_system_prompt_messages( - kwargs: Optional[Dict] = None, messages: Optional[Any] = None - ): - """ - Append system prompt messages to the messages - """ - if kwargs is not None: - if kwargs.get("system") is not None and isinstance( - kwargs.get("system"), str - ): - if messages is None: - return [{"role": "system", "content": kwargs.get("system")}] - elif isinstance(messages, list): - if len(messages) == 0: - return [{"role": "system", "content": kwargs.get("system")}] - # check for duplicates - if messages[0].get("role") == "system" and messages[0].get( - "content" - ) == kwargs.get("system"): - return messages - messages = [ - {"role": "system", "content": kwargs.get("system")} - ] + messages - elif isinstance(messages, str): - messages = [ - {"role": "system", "content": kwargs.get("system")}, - {"role": "user", "content": messages}, - ] - return messages - - return messages - - @staticmethod - def merge_litellm_metadata(litellm_params: dict) -> dict: - """ - Merge both litellm_metadata and metadata from litellm_params. - - litellm_metadata contains model-related fields, metadata contains user API key fields. - We need both for complete standard logging payload. - - Args: - litellm_params: Dictionary containing metadata and litellm_metadata - - Returns: - dict: Merged metadata with user API key fields taking precedence - """ - merged_metadata: dict = {} - - # Start with metadata (user API key fields) - but skip non-serializable objects - if litellm_params.get("metadata") and isinstance( - litellm_params.get("metadata"), dict - ): - for key, value in litellm_params["metadata"].items(): - # Skip non-serializable objects like UserAPIKeyAuth - if key == "user_api_key_auth": - continue - merged_metadata[key] = value - - # Then merge litellm_metadata (model-related fields) - this will NOT overwrite existing keys - if litellm_params.get("litellm_metadata") and isinstance( - litellm_params.get("litellm_metadata"), dict - ): - for key, value in litellm_params["litellm_metadata"].items(): - if ( - key not in merged_metadata - ): # Don't overwrite existing keys from metadata - merged_metadata[key] = value - - return merged_metadata - - @staticmethod - def get_standard_logging_metadata( - metadata: Optional[Dict[str, Any]], - litellm_params: Optional[dict] = None, - prompt_integration: Optional[str] = None, - applied_guardrails: Optional[List[str]] = None, - mcp_tool_call_metadata: Optional[StandardLoggingMCPToolCall] = None, - vector_store_request_metadata: Optional[ - List[StandardLoggingVectorStoreRequest] - ] = None, - usage_object: Optional[dict] = None, - proxy_server_request: Optional[dict] = None, - start_time: Optional[dt_object] = None, - response_id: Optional[str] = None, - ) -> StandardLoggingMetadata: - """ - Clean and filter the metadata dictionary to include only the specified keys in StandardLoggingMetadata. - - Args: - metadata (Optional[Dict[str, Any]]): The original metadata dictionary. - - Returns: - StandardLoggingMetadata: A StandardLoggingMetadata object containing the cleaned metadata. - - Note: - - If the input metadata is None or not a dictionary, an empty StandardLoggingMetadata object is returned. - - If 'user_api_key' is present in metadata and is a valid SHA256 hash, it's stored as 'user_api_key_hash'. - """ - - prompt_management_metadata: Optional[ - StandardLoggingPromptManagementMetadata - ] = None - if litellm_params is not None: - prompt_id = cast(Optional[str], litellm_params.get("prompt_id", None)) - prompt_variables = cast( - Optional[dict], litellm_params.get("prompt_variables", None) - ) - - if prompt_id is not None and prompt_integration is not None: - prompt_management_metadata = StandardLoggingPromptManagementMetadata( - prompt_id=prompt_id, - prompt_variables=prompt_variables, - prompt_integration=prompt_integration, - ) - - # Initialize with default values - clean_metadata = StandardLoggingMetadata( - user_api_key_hash=None, - user_api_key_alias=None, - user_api_key_spend=None, - user_api_key_max_budget=None, - user_api_key_budget_reset_at=None, - user_api_key_team_id=None, - user_api_key_org_id=None, - user_api_key_user_id=None, - user_api_key_team_alias=None, - user_api_key_user_email=None, - user_api_key_end_user_id=None, - user_api_key_request_route=None, - spend_logs_metadata=None, - requester_ip_address=None, - user_agent=None, - requester_metadata=None, - prompt_management_metadata=prompt_management_metadata, - applied_guardrails=applied_guardrails, - mcp_tool_call_metadata=mcp_tool_call_metadata, - vector_store_request_metadata=vector_store_request_metadata, - usage_object=usage_object, - requester_custom_headers=None, - cold_storage_object_key=None, - user_api_key_auth_metadata=None, - team_alias=None, - team_id=None, - ) - if isinstance(metadata, dict): - for key in metadata.keys() & _STANDARD_LOGGING_METADATA_KEYS: - clean_metadata[key] = metadata[key] # type: ignore - - user_api_key = metadata.get("user_api_key") - if ( - user_api_key - and isinstance(user_api_key, str) - and is_valid_sha256_hash(user_api_key) - ): - clean_metadata["user_api_key_hash"] = user_api_key - _potential_requester_metadata = metadata.get( - "metadata", None - ) # check if user passed metadata in the sdk request - e.g. metadata for langsmith logging - https://docs.litellm.ai/docs/observability/langsmith_integration#set-langsmith-fields - if ( - clean_metadata["requester_metadata"] is None - and _potential_requester_metadata is not None - and isinstance(_potential_requester_metadata, dict) - ): - clean_metadata["requester_metadata"] = _potential_requester_metadata - - if ( - EnterpriseStandardLoggingPayloadSetupVAR - and proxy_server_request is not None - ): - clean_metadata = EnterpriseStandardLoggingPayloadSetupVAR.apply_enterprise_specific_metadata( - standard_logging_metadata=clean_metadata, - proxy_server_request=proxy_server_request, - ) - - # Generate cold storage object key if cold storage is configured - if start_time is not None and response_id is not None: - cold_storage_object_key = ( - StandardLoggingPayloadSetup._generate_cold_storage_object_key( - start_time=start_time, - response_id=response_id, - team_alias=clean_metadata.get("user_api_key_team_alias"), - ) - ) - if cold_storage_object_key: - clean_metadata["cold_storage_object_key"] = cold_storage_object_key - - return clean_metadata - - @staticmethod - def get_usage_from_response_obj( - response_obj: Optional[dict], combined_usage_object: Optional[Usage] = None - ) -> Usage: - ## BASE CASE ## - if combined_usage_object is not None: - return combined_usage_object - if response_obj is None: - return Usage( - prompt_tokens=0, - completion_tokens=0, - total_tokens=0, - ) - - usage = response_obj.get("usage", None) or {} - if usage is None or ( - not isinstance(usage, dict) and not isinstance(usage, Usage) - ): - return Usage( - prompt_tokens=0, - completion_tokens=0, - total_tokens=0, - ) - elif isinstance(usage, Usage): - return usage - elif isinstance(usage, ResponseAPIUsage): - return ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( - usage - ) - elif isinstance(usage, dict): - if ResponseAPILoggingUtils._is_response_api_usage(usage): - return ( - ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( - usage - ) - ) - return Usage(**usage) - - raise ValueError(f"usage is required, got={usage} of type {type(usage)}") - - @staticmethod - def get_model_cost_information( - base_model: Optional[str], - custom_pricing: Optional[bool], - custom_llm_provider: Optional[str], - init_response_obj: Union[Any, BaseModel, dict], - ) -> StandardLoggingModelInformation: - model_cost_name = _select_model_name_for_cost_calc( - model=None, - completion_response=init_response_obj, # type: ignore - base_model=base_model, - custom_pricing=custom_pricing, - ) - if model_cost_name is None: - model_cost_information = StandardLoggingModelInformation( - model_map_key="", model_map_value=None - ) - else: - try: - _model_cost_information = litellm.get_model_info( - model=model_cost_name, custom_llm_provider=custom_llm_provider - ) - model_cost_information = StandardLoggingModelInformation( - model_map_key=model_cost_name, - model_map_value=_model_cost_information, - ) - except Exception: - verbose_logger.debug( # keep in debug otherwise it will trigger on every call - "Model={} is not mapped in model cost map. Defaulting to None model_cost_information for standard_logging_payload".format( - model_cost_name - ) - ) - model_cost_information = StandardLoggingModelInformation( - model_map_key=model_cost_name, model_map_value=None - ) - return model_cost_information - - @staticmethod - def get_final_response_obj( - response_obj: dict, init_response_obj: Union[Any, BaseModel, dict], kwargs: dict - ) -> Optional[Union[dict, str, list]]: - """ - Get final response object after redacting the message input/output from logging - """ - if response_obj: - final_response_obj: Optional[Union[dict, str, list]] = response_obj - elif isinstance(init_response_obj, list) or isinstance(init_response_obj, str): - final_response_obj = init_response_obj - else: - final_response_obj = {} - - modified_final_response_obj = redact_message_input_output_from_logging( - model_call_details=kwargs, - result=final_response_obj, - ) - - if modified_final_response_obj is not None and isinstance( - modified_final_response_obj, BaseModel - ): - final_response_obj = modified_final_response_obj.model_dump() - else: - final_response_obj = modified_final_response_obj - - return final_response_obj - - @staticmethod - def get_additional_headers( - additiona_headers: Optional[dict], - ) -> Optional[StandardLoggingAdditionalHeaders]: - if additiona_headers is None: - return None - - additional_logging_headers: StandardLoggingAdditionalHeaders = {} - - for key in StandardLoggingAdditionalHeaders.__annotations__.keys(): - _key = key.lower() - _key = _key.replace("_", "-") - if _key in additiona_headers: - try: - additional_logging_headers[key] = int(additiona_headers[_key]) # type: ignore - except (ValueError, TypeError): - verbose_logger.debug( - f"Could not convert {additiona_headers[_key]} to int for key {key}." - ) - return additional_logging_headers - - @staticmethod - def get_hidden_params( - hidden_params: Optional[dict], - ) -> StandardLoggingHiddenParams: - clean_hidden_params = StandardLoggingHiddenParams( - model_id=None, - cache_key=None, - api_base=None, - response_cost=None, - additional_headers=None, - litellm_overhead_time_ms=None, - batch_models=None, - litellm_model_name=None, - usage_object=None, - ) - if hidden_params is not None: - for key in StandardLoggingHiddenParams.__annotations__.keys(): - if key in hidden_params: - if key == "additional_headers": - clean_hidden_params[ - "additional_headers" - ] = StandardLoggingPayloadSetup.get_additional_headers( - hidden_params[key] - ) - else: - clean_hidden_params[key] = hidden_params[key] # type: ignore - return clean_hidden_params - - @staticmethod - def strip_trailing_slash(api_base: Optional[str]) -> Optional[str]: - if api_base: - if api_base.endswith("//"): - return api_base.rstrip("/") - if api_base[-1] == "/": - return api_base[:-1] - return api_base - - @staticmethod - def _generate_cold_storage_object_key( - start_time: dt_object, - response_id: str, - team_alias: Optional[str] = None, - ) -> Optional[str]: - """ - Generate cold storage object key in the same format as S3Logger. - - Args: - start_time: The start time of the request - response_id: The response ID - team_alias: Optional team alias for team-based prefixing - - Returns: - Optional[str]: The generated object key or None if cold storage not configured - """ - # Generate object key in same format as S3Logger - from litellm.integrations.s3 import get_s3_object_key - - # Only generate object key if cold storage is configured - cold_storage_custom_logger = litellm.cold_storage_custom_logger - if cold_storage_custom_logger is None: - return None - - try: - # Generate file name in same format as litellm.utils.get_logging_id - s3_file_name = f"time-{start_time.strftime('%H-%M-%S-%f')}_{response_id}" - - # Get the actual s3_path from the configured cold storage logger instance - s3_path = "" # default value - - # Try to get the actual logger instance from the logger name - try: - custom_logger = litellm.logging_callback_manager.get_active_custom_logger_for_callback_name( - cold_storage_custom_logger - ) - if ( - custom_logger - and hasattr(custom_logger, "s3_path") - and getattr(custom_logger, "s3_path") - ): - s3_path = getattr(custom_logger, "s3_path") - except Exception: - # If any error occurs in getting the logger instance, use default empty s3_path - pass - - s3_object_key = get_s3_object_key( - s3_path=s3_path, # Use actual s3_path from logger configuration - prefix="", # Don't split by team alias for cold storage - start_time=start_time, - s3_file_name=s3_file_name, - ) - - return s3_object_key - except Exception: - # If any error occurs in generating the key, return None - return None - - @staticmethod - def get_error_information( - original_exception: Optional[Exception], - traceback_str: Optional[str] = None, - ) -> StandardLoggingPayloadErrorInformation: - from litellm.constants import MAXIMUM_TRACEBACK_LINES_TO_LOG - - # Check for 'code' first (used by ProxyException), then fall back to 'status_code' (used by LiteLLM exceptions) - # Ensure error_code is always a string for Prisma Python JSON field compatibility - error_code_attr = getattr(original_exception, "code", None) - if error_code_attr is not None and str(error_code_attr) not in ("", "None"): - error_status: str = str(error_code_attr) - else: - status_code_attr = getattr(original_exception, "status_code", None) - error_status = str(status_code_attr) if status_code_attr is not None else "" - error_class: str = ( - str(original_exception.__class__.__name__) if original_exception else "" - ) - _llm_provider_in_exception = getattr(original_exception, "llm_provider", "") - - # Get traceback information (first 100 lines) - traceback_info = traceback_str or "" - if original_exception: - tb = getattr(original_exception, "__traceback__", None) - if tb: - tb_lines = traceback.format_tb(tb) - traceback_info += "".join( - tb_lines[:MAXIMUM_TRACEBACK_LINES_TO_LOG] - ) # Limit to first 100 lines - - # Get additional error details - error_message = str(original_exception) - - return StandardLoggingPayloadErrorInformation( - error_code=error_status, - error_class=error_class, - llm_provider=_llm_provider_in_exception, - traceback=traceback_info, - error_message=error_message if original_exception else "", - ) - - @staticmethod - def get_response_time( - start_time_float: float, - end_time_float: float, - completion_start_time_float: float, - stream: bool, - ) -> float: - """ - Get the response time for the LLM response - - Args: - start_time_float: float - start time of the LLM call - end_time_float: float - end time of the LLM call - completion_start_time_float: float - time to first token of the LLM response (for streaming responses) - stream: bool - True when a stream response is returned - - Returns: - float: The response time for the LLM response - """ - if stream is True: - return completion_start_time_float - start_time_float - else: - return end_time_float - start_time_float - - @staticmethod - def _get_standard_logging_payload_trace_id( - logging_obj: Logging, - litellm_params: dict, - ) -> str: - """ - Returns the `litellm_trace_id` for this request - - This helps link sessions when multiple requests are made in a single session - """ - dynamic_litellm_session_id = litellm_params.get("litellm_session_id") - dynamic_litellm_trace_id = litellm_params.get("litellm_trace_id") - - # Note: we recommend using `litellm_session_id` for session tracking - # `litellm_trace_id` is an internal litellm param - if dynamic_litellm_session_id: - return str(dynamic_litellm_session_id) - elif dynamic_litellm_trace_id: - return str(dynamic_litellm_trace_id) - else: - return logging_obj.litellm_trace_id - - @staticmethod - def _get_user_agent_tags(proxy_server_request: dict) -> Optional[List[str]]: - """ - Return the user agent tags from the proxy server request for spend tracking - """ - if litellm.disable_add_user_agent_to_request_tags is True: - return None - user_agent_tags: Optional[List[str]] = None - headers = proxy_server_request.get("headers", {}) - if headers is not None and isinstance(headers, dict): - if "user-agent" in headers: - user_agent = headers["user-agent"] - if user_agent is not None: - if user_agent_tags is None: - user_agent_tags = [] - user_agent_part: Optional[str] = None - if "/" in user_agent: - user_agent_part = user_agent.split("/")[0] - if user_agent_part is not None: - user_agent_tags.append("User-Agent: " + user_agent_part) - if user_agent is not None: - user_agent_tags.append("User-Agent: " + user_agent) - return user_agent_tags - - @staticmethod - def _get_extra_header_tags(proxy_server_request: dict) -> Optional[List[str]]: - """ - Extract additional header tags for spend tracking based on config. - """ - extra_headers: List[str] = ( - getattr(litellm, "extra_spend_tag_headers", None) or [] - ) - if not extra_headers: - return None - - headers = proxy_server_request.get("headers", {}) - if not isinstance(headers, dict): - return None - - header_tags = [] - for header_name in extra_headers: - header_value = headers.get(header_name) - if header_value: - header_tags.append(f"{header_name}: {header_value}") - - return header_tags if header_tags else None - - @staticmethod - def _get_request_tags( - litellm_params: dict, proxy_server_request: dict - ) -> List[str]: - # check for 'tags' in both 'metadata' and 'litellm_metadata' - metadata = litellm_params.get("metadata") or {} - litellm_metadata = litellm_params.get("litellm_metadata") or {} - if metadata.get("tags", []): - request_tags = metadata.get("tags", []).copy() - elif litellm_metadata.get("tags", []): - request_tags = litellm_metadata.get("tags", []).copy() - else: - request_tags = [] - user_agent_tags = StandardLoggingPayloadSetup._get_user_agent_tags( - proxy_server_request - ) - additional_header_tags = StandardLoggingPayloadSetup._get_extra_header_tags( - proxy_server_request - ) - if user_agent_tags is not None: - request_tags.extend(user_agent_tags) - if additional_header_tags is not None: - request_tags.extend(additional_header_tags) - return request_tags - - -def _get_status_fields( - status: StandardLoggingPayloadStatus, - guardrail_information: Optional[List[dict]], - error_str: Optional[str], -) -> "StandardLoggingPayloadStatusFields": - """ - Determine status fields based on request status and guardrail information. - - Args: - status: Overall request status ("success" or "failure") - guardrail_information: Guardrail information from metadata - error_str: Error string if any - - Returns: - StandardLoggingPayloadStatusFields with llm_api_status and guardrail_status - """ - # Mapping for legacy guardrail status values to new GuardrailStatus values - GUARDRAIL_STATUS_MAP: Dict[str, GuardrailStatus] = { - "success": "success", - "blocked": "guardrail_intervened", # legacy - "guardrail_intervened": "guardrail_intervened", # direct - "failure": "guardrail_failed_to_respond", # legacy - "guardrail_failed_to_respond": "guardrail_failed_to_respond", # direct - "not_run": "not_run", - } - - # Set LLM API status - llm_api_status: StandardLoggingPayloadStatus = status - - ######################################################### - # Map - guardrail_information.guardrail_status to guardrail_status - ######################################################### - guardrail_status: GuardrailStatus = "not_run" - if guardrail_information and isinstance(guardrail_information, list): - for information in guardrail_information: - if isinstance(information, dict): - raw_status = information.get("guardrail_status", "not_run") - if raw_status != "not_run": - guardrail_status = GUARDRAIL_STATUS_MAP.get(raw_status, "not_run") - break - - return StandardLoggingPayloadStatusFields( - llm_api_status=llm_api_status, guardrail_status=guardrail_status - ) - - -def _extract_response_obj_and_hidden_params( - init_response_obj: Union[Any, BaseModel, dict], - original_exception: Optional[Exception], -) -> Tuple[dict, Optional[dict]]: - """Extract response_obj and hidden_params from init_response_obj.""" - hidden_params: Optional[dict] = None - if init_response_obj is None: - response_obj = {} - elif isinstance(init_response_obj, BaseModel): - response_obj = init_response_obj.model_dump() - hidden_params = getattr(init_response_obj, "_hidden_params", None) - elif isinstance(init_response_obj, dict): - response_obj = init_response_obj - else: - response_obj = {} - - if original_exception is not None and hidden_params is None: - response_headers = _get_response_headers(original_exception) - if response_headers is not None: - hidden_params = dict( - StandardLoggingHiddenParams( - additional_headers=StandardLoggingPayloadSetup.get_additional_headers( - dict(response_headers) - ), - model_id=None, - cache_key=None, - api_base=None, - response_cost=None, - litellm_overhead_time_ms=None, - batch_models=None, - litellm_model_name=None, - usage_object=None, - ) - ) - - return response_obj, hidden_params - - -def get_standard_logging_object_payload( - kwargs: Optional[dict], - init_response_obj: Union[Any, BaseModel, dict], - start_time: dt_object, - end_time: dt_object, - logging_obj: Logging, - status: StandardLoggingPayloadStatus, - error_str: Optional[str] = None, - original_exception: Optional[Exception] = None, - standard_built_in_tools_params: Optional[StandardBuiltInToolsParams] = None, -) -> Optional[StandardLoggingPayload]: - try: - kwargs = kwargs or {} - - response_obj, hidden_params = _extract_response_obj_and_hidden_params( - init_response_obj, original_exception - ) - - # standardize this function to be used across, s3, dynamoDB, langfuse logging - litellm_params = kwargs.get("litellm_params", {}) or {} - proxy_server_request = litellm_params.get("proxy_server_request") or {} - - # Merge both litellm_metadata and metadata to get complete metadata - metadata: dict = StandardLoggingPayloadSetup.merge_litellm_metadata( - litellm_params - ) - - completion_start_time = kwargs.get("completion_start_time", end_time) - call_type = kwargs.get("call_type") - cache_hit = kwargs.get("cache_hit", False) - usage = StandardLoggingPayloadSetup.get_usage_from_response_obj( - response_obj=response_obj, - combined_usage_object=cast( - Optional[Usage], kwargs.get("combined_usage_object") - ), - ) - - id = response_obj.get("id", kwargs.get("litellm_call_id")) - - _model_id = metadata.get("model_info", {}).get("id", "") - _model_group = metadata.get("model_group", "") - - request_tags = StandardLoggingPayloadSetup._get_request_tags( - litellm_params=litellm_params, proxy_server_request=proxy_server_request - ) - - # cleanup timestamps - ( - start_time_float, - end_time_float, - completion_start_time_float, - ) = StandardLoggingPayloadSetup.cleanup_timestamps( - start_time=start_time, - end_time=end_time, - completion_start_time=completion_start_time, - ) - response_time = StandardLoggingPayloadSetup.get_response_time( - start_time_float=start_time_float, - end_time_float=end_time_float, - completion_start_time_float=completion_start_time_float, - stream=kwargs.get("stream", False), - ) - # clean up litellm hidden params - clean_hidden_params = StandardLoggingPayloadSetup.get_hidden_params( - hidden_params - ) - - # clean up litellm metadata - clean_metadata = StandardLoggingPayloadSetup.get_standard_logging_metadata( - metadata=metadata, - litellm_params=litellm_params, - prompt_integration=kwargs.get("prompt_integration", None), - applied_guardrails=kwargs.get("applied_guardrails", None), - mcp_tool_call_metadata=kwargs.get("mcp_tool_call_metadata", None), - vector_store_request_metadata=kwargs.get( - "vector_store_request_metadata", None - ), - usage_object=usage.model_dump(), - proxy_server_request=proxy_server_request, - start_time=start_time, - response_id=id, - ) - _request_body = proxy_server_request.get("body", {}) - end_user_id = clean_metadata["user_api_key_end_user_id"] or _request_body.get( - "user", None - ) # maintain backwards compatibility with old request body check - - saved_cache_cost: float = 0.0 - if cache_hit is True: - id = f"{id}_cache_hit{time.time()}" # do not duplicate the request id - saved_cache_cost = ( - logging_obj._response_cost_calculator( - result=init_response_obj, cache_hit=False # type: ignore - ) - or 0.0 - ) - - ## Get model cost information ## - base_model = _get_base_model_from_metadata(model_call_details=kwargs) - custom_pricing = use_custom_pricing_for_model(litellm_params=litellm_params) - - model_cost_information = StandardLoggingPayloadSetup.get_model_cost_information( - base_model=base_model, - custom_pricing=custom_pricing, - custom_llm_provider=kwargs.get("custom_llm_provider"), - init_response_obj=init_response_obj, - ) - response_cost: float = kwargs.get("response_cost", 0) or 0.0 - - error_information = StandardLoggingPayloadSetup.get_error_information( - original_exception=original_exception, - ) - - ## get final response object ## - final_response_obj = StandardLoggingPayloadSetup.get_final_response_obj( - response_obj=response_obj, - init_response_obj=init_response_obj, - kwargs=kwargs, - ) - - stream: Optional[bool] = None - if ( - kwargs.get("complete_streaming_response") is not None - or kwargs.get("async_complete_streaming_response") is not None - ) and kwargs.get("stream") is True: - stream = True - - # Reconstruct full model name with provider prefix for logging - # This ensures Bedrock models like "us.anthropic.claude-3-5-sonnet-20240620-v1:0" - # are logged as "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0" - custom_llm_provider = cast(Optional[str], kwargs.get("custom_llm_provider")) - model_name = reconstruct_model_name( - kwargs.get("model", "") or "", custom_llm_provider, metadata - ) - - payload: StandardLoggingPayload = StandardLoggingPayload( - id=str(id), - trace_id=StandardLoggingPayloadSetup._get_standard_logging_payload_trace_id( - logging_obj=logging_obj, - litellm_params=litellm_params, - ), - call_type=call_type or "", - cache_hit=cache_hit, - stream=stream, - status=status, - status_fields=_get_status_fields( - status=status, - guardrail_information=metadata.get( - "standard_logging_guardrail_information", None - ), - error_str=error_str, - ), - custom_llm_provider=custom_llm_provider, - saved_cache_cost=saved_cache_cost, - startTime=start_time_float, - endTime=end_time_float, - completionStartTime=completion_start_time_float, - response_time=response_time, - model=model_name, - metadata=clean_metadata, - cache_key=clean_hidden_params["cache_key"], - response_cost=response_cost, - cost_breakdown=logging_obj.cost_breakdown, - total_tokens=usage.total_tokens, - prompt_tokens=usage.prompt_tokens, - completion_tokens=usage.completion_tokens, - request_tags=request_tags, - end_user=end_user_id or "", - api_base=StandardLoggingPayloadSetup.strip_trailing_slash( - litellm_params.get("api_base", "") - ) - or "", - model_group=_model_group, - model_id=_model_id, - requester_ip_address=clean_metadata.get("requester_ip_address", None), - user_agent=clean_metadata.get("user_agent", None), - messages=StandardLoggingPayloadSetup.append_system_prompt_messages( - kwargs=kwargs, messages=kwargs.get("messages") - ), - response=final_response_obj, - model_parameters=ModelParamHelper.get_standard_logging_model_parameters( - kwargs.get("optional_params", None) or {} - ), - hidden_params=clean_hidden_params, - model_map_information=model_cost_information, - error_str=error_str, - error_information=error_information, - response_cost_failure_debug_info=kwargs.get( - "response_cost_failure_debug_information" - ), - guardrail_information=metadata.get( - "standard_logging_guardrail_information", None - ), - standard_built_in_tools_params=standard_built_in_tools_params, - ) - - # emit_standard_logging_payload(payload) - Moved to success_handler to prevent double emitting - - return payload - except Exception as e: - verbose_logger.exception( - "Error creating standard logging object - {}".format(str(e)) - ) - return None - - -def emit_standard_logging_payload(payload: StandardLoggingPayload): - if os.getenv("LITELLM_PRINT_STANDARD_LOGGING_PAYLOAD"): - print(json.dumps(payload, indent=4)) # noqa - - -def get_standard_logging_metadata( - metadata: Optional[Dict[str, Any]], -) -> StandardLoggingMetadata: - """ - Clean and filter the metadata dictionary to include only the specified keys in StandardLoggingMetadata. - - Args: - metadata (Optional[Dict[str, Any]]): The original metadata dictionary. - - Returns: - StandardLoggingMetadata: A StandardLoggingMetadata object containing the cleaned metadata. - - Note: - - If the input metadata is None or not a dictionary, an empty StandardLoggingMetadata object is returned. - - If 'user_api_key' is present in metadata and is a valid SHA256 hash, it's stored as 'user_api_key_hash'. - """ - # Initialize with default values - clean_metadata = StandardLoggingMetadata( - user_api_key_hash=None, - user_api_key_alias=None, - user_api_key_spend=None, - user_api_key_max_budget=None, - user_api_key_budget_reset_at=None, - user_api_key_team_id=None, - user_api_key_org_id=None, - user_api_key_user_id=None, - user_api_key_user_email=None, - user_api_key_team_alias=None, - spend_logs_metadata=None, - requester_ip_address=None, - user_agent=None, - requester_metadata=None, - user_api_key_end_user_id=None, - prompt_management_metadata=None, - applied_guardrails=None, - mcp_tool_call_metadata=None, - vector_store_request_metadata=None, - usage_object=None, - requester_custom_headers=None, - user_api_key_request_route=None, - cold_storage_object_key=None, - user_api_key_auth_metadata=None, - team_alias=None, - team_id=None, - ) - if isinstance(metadata, dict): - # Update the clean_metadata with values from input metadata that match StandardLoggingMetadata fields - for key in StandardLoggingMetadata.__annotations__.keys(): - if key in metadata: - clean_metadata[key] = metadata[key] # type: ignore - - if metadata.get("user_api_key") is not None: - if is_valid_sha256_hash(str(metadata.get("user_api_key"))): - clean_metadata["user_api_key_hash"] = metadata.get( - "user_api_key" - ) # this is the hash - return clean_metadata - - -def scrub_sensitive_keys_in_metadata(litellm_params: Optional[dict]): - if litellm_params is None: - litellm_params = {} - - metadata = litellm_params.get("metadata", {}) or {} - - ## Extract provider-specific callable values (like langfuse_masking_function) - ## Store them separately so only the intended logger can access them - ## This prevents callables from leaking to other logging integrations - if "langfuse_masking_function" in metadata: - masking_fn = metadata.pop("langfuse_masking_function", None) - if callable(masking_fn): - litellm_params["_langfuse_masking_function"] = masking_fn - litellm_params["metadata"] = metadata - - ## check user_api_key_metadata for sensitive logging keys - cleaned_user_api_key_metadata = {} - if "user_api_key_metadata" in metadata and isinstance( - metadata["user_api_key_metadata"], dict - ): - for k, v in metadata["user_api_key_metadata"].items(): - if k == "logging": # prevent logging user logging keys - cleaned_user_api_key_metadata[ - k - ] = "scrubbed_by_litellm_for_sensitive_keys" - else: - cleaned_user_api_key_metadata[k] = v - - metadata["user_api_key_metadata"] = cleaned_user_api_key_metadata - litellm_params["metadata"] = metadata - - return litellm_params - - -# integration helper function -def modify_integration(integration_name, integration_params): - global supabaseClient - if integration_name == "supabase": - if "table_name" in integration_params: - Supabase.supabase_table_name = integration_params["table_name"] - - -@lru_cache(maxsize=16) -def _get_traceback_str_for_error(error_str: str) -> str: - """ - function wrapped with lru_cache to limit the number of times `traceback.format_exc()` is called - """ - return traceback.format_exc() - - -from decimal import Decimal - -# used for unit testing -from typing import Any, Dict, List, Optional, Union - - -def create_dummy_standard_logging_payload() -> StandardLoggingPayload: - # First create the nested objects with proper typing - model_info = StandardLoggingModelInformation( - model_map_key="gpt-3.5-turbo", model_map_value=None - ) - - metadata = StandardLoggingMetadata( # type: ignore - user_api_key_hash=str("test_hash"), - user_api_key_alias=str("test_alias"), - user_api_key_team_id=str("test_team"), - user_api_key_user_id=str("test_user"), - user_api_key_team_alias=str("test_team_alias"), - user_api_key_org_id=None, - spend_logs_metadata=None, - requester_ip_address=str("127.0.0.1"), - requester_metadata=None, - user_api_key_end_user_id=str("test_end_user"), - ) - - hidden_params = StandardLoggingHiddenParams( - model_id=None, - cache_key=None, - api_base=None, - response_cost=None, - additional_headers=None, - litellm_overhead_time_ms=None, - batch_models=None, - litellm_model_name=None, - usage_object=None, - ) - - # Convert numeric values to appropriate types - response_cost = Decimal("0.1") - start_time = Decimal("1234567890.0") - end_time = Decimal("1234567891.0") - completion_start_time = Decimal("1234567890.5") - saved_cache_cost = Decimal("0.0") - - # Create messages and response with proper typing - messages: List[Dict[str, str]] = [{"role": "user", "content": "Hello, world!"}] - response: Dict[str, List[Dict[str, Dict[str, str]]]] = { - "choices": [{"message": {"content": "Hi there!"}}] - } - - # Main payload initialization - return StandardLoggingPayload( # type: ignore - id=str("test_id"), - call_type=str("completion"), - stream=bool(False), - response_cost=response_cost, - response_cost_failure_debug_info=None, - status=str("success"), - total_tokens=int( - DEFAULT_MOCK_RESPONSE_PROMPT_TOKEN_COUNT - + DEFAULT_MOCK_RESPONSE_COMPLETION_TOKEN_COUNT - ), - prompt_tokens=int(DEFAULT_MOCK_RESPONSE_PROMPT_TOKEN_COUNT), - completion_tokens=int(DEFAULT_MOCK_RESPONSE_COMPLETION_TOKEN_COUNT), - startTime=start_time, - endTime=end_time, - completionStartTime=completion_start_time, - model_map_information=model_info, - model=str("gpt-3.5-turbo"), - model_id=str("model-123"), - model_group=str("openai-gpt"), - custom_llm_provider=str("openai"), - api_base=str("https://api.openai.com"), - metadata=metadata, - cache_hit=bool(False), - cache_key=None, - saved_cache_cost=saved_cache_cost, - request_tags=[], - end_user=None, - requester_ip_address=str("127.0.0.1"), - messages=messages, - response=response, - error_str=None, - model_parameters={"stream": True}, - hidden_params=hidden_params, - ) +# What is this? +## Common Utility file for Logging handler +# Logging function -> log the exact model details + what's being sent | Non-Blocking +import copy +import datetime +import json +import os +import re +import subprocess +import sys +import time +import traceback +from datetime import datetime as dt_object +from functools import lru_cache +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + List, + Literal, + Optional, + Tuple, + Type, + Union, + cast, +) + +from httpx import Response +from pydantic import BaseModel + +import litellm +from litellm import ( + _custom_logger_compatible_callbacks_literal, + json_logs, + log_raw_request_response, + turn_off_message_logging, +) +from litellm._logging import _is_debugging_on, verbose_logger +from litellm._uuid import uuid +from litellm.batches.batch_utils import _handle_completed_batch +from litellm.caching.caching import DualCache, InMemoryCache +from litellm.caching.caching_handler import LLMCachingHandler +from litellm.constants import ( + DEFAULT_MOCK_RESPONSE_COMPLETION_TOKEN_COUNT, + DEFAULT_MOCK_RESPONSE_PROMPT_TOKEN_COUNT, + SENTRY_DENYLIST, + SENTRY_PII_DENYLIST, +) +from litellm.cost_calculator import ( + RealtimeAPITokenUsageProcessor, + _select_model_name_for_cost_calc, +) +from litellm.integrations.agentops import AgentOps +from litellm.integrations.anthropic_cache_control_hook import AnthropicCacheControlHook +from litellm.integrations.arize.arize import ArizeLogger +from litellm.integrations.custom_guardrail import CustomGuardrail +from litellm.integrations.custom_logger import CustomLogger +from litellm.integrations.deepeval.deepeval import DeepEvalLogger +from litellm.integrations.mlflow import MlflowLogger +from litellm.integrations.sqs import SQSLogger +from litellm.litellm_core_utils.core_helpers import reconstruct_model_name +from litellm.litellm_core_utils.get_litellm_params import get_litellm_params +from litellm.litellm_core_utils.llm_cost_calc.tool_call_cost_tracking import ( + StandardBuiltInToolCostTracking, +) +from litellm.litellm_core_utils.model_param_helper import ModelParamHelper +from litellm.litellm_core_utils.redact_messages import ( + redact_message_input_output_from_custom_logger, + redact_message_input_output_from_logging, +) +from litellm.llms.base_llm.ocr.transformation import OCRResponse +from litellm.llms.base_llm.search.transformation import SearchResponse +from litellm.responses.utils import ResponseAPILoggingUtils +from litellm.types.agents import LiteLLMSendMessageResponse +from litellm.types.containers.main import ContainerObject +from litellm.types.llms.openai import ( + AllMessageValues, + Batch, + FineTuningJob, + HttpxBinaryResponseContent, + OpenAIFileObject, + OpenAIModerationResponse, + ResponseAPIUsage, + ResponseCompletedEvent, + ResponsesAPIResponse, +) +from litellm.types.mcp import MCPPostCallResponseObject +from litellm.types.prompts.init_prompts import PromptSpec +from litellm.types.rerank import RerankResponse +from litellm.types.utils import ( + CachingDetails, + CallTypes, + CostBreakdown, + CostResponseTypes, + CustomPricingLiteLLMParams, + DynamicPromptManagementParamLiteral, + EmbeddingResponse, + GuardrailStatus, + ImageResponse, + LiteLLMBatch, + LiteLLMLoggingBaseClass, + LiteLLMRealtimeStreamLoggingObject, + ModelResponse, + ModelResponseStream, + RawRequestTypedDict, + StandardBuiltInToolsParams, + StandardCallbackDynamicParams, + StandardLoggingAdditionalHeaders, + StandardLoggingHiddenParams, + StandardLoggingMCPToolCall, + StandardLoggingMetadata, + StandardLoggingModelCostFailureDebugInformation, + StandardLoggingModelInformation, + StandardLoggingPayload, + StandardLoggingPayloadErrorInformation, + StandardLoggingPayloadStatus, + StandardLoggingPayloadStatusFields, + StandardLoggingPromptManagementMetadata, + StandardLoggingVectorStoreRequest, + TextCompletionResponse, + TranscriptionResponse, + Usage, +) +from litellm.types.videos.main import VideoObject +from litellm.utils import _get_base_model_from_metadata, executor, print_verbose + +from ..integrations.argilla import ArgillaLogger +from ..integrations.arize.arize_phoenix import ArizePhoenixLogger +from ..integrations.athina import AthinaLogger +from ..integrations.azure_sentinel.azure_sentinel import AzureSentinelLogger +from ..integrations.azure_storage.azure_storage import AzureBlobStorageLogger +from ..integrations.custom_prompt_management import CustomPromptManagement +from ..integrations.datadog.datadog import DataDogLogger +from ..integrations.datadog.datadog_llm_obs import DataDogLLMObsLogger +from ..integrations.dotprompt import DotpromptManager +from ..integrations.dynamodb import DyanmoDBLogger +from ..integrations.galileo import GalileoObserve +from ..integrations.gcs_bucket.gcs_bucket import GCSBucketLogger +from ..integrations.gcs_pubsub.pub_sub import GcsPubSubLogger +from ..integrations.greenscale import GreenscaleLogger +from ..integrations.helicone import HeliconeLogger +from ..integrations.humanloop import HumanloopLogger +from ..integrations.lago import LagoLogger +from ..integrations.langfuse.langfuse import LangFuseLogger +from ..integrations.langfuse.langfuse_handler import LangFuseHandler +from ..integrations.langfuse.langfuse_prompt_management import LangfusePromptManagement +from ..integrations.langsmith import LangsmithLogger +from ..integrations.literal_ai import LiteralAILogger +from ..integrations.logfire_logger import LogfireLevel, LogfireLogger +from ..integrations.lunary import LunaryLogger +from ..integrations.openmeter import OpenMeterLogger +from ..integrations.opik.opik import OpikLogger +from ..integrations.posthog import PostHogLogger +from ..integrations.prompt_layer import PromptLayerLogger +from ..integrations.s3 import S3Logger +from ..integrations.s3_v2 import S3Logger as S3V2Logger +from ..integrations.supabase import Supabase +from ..integrations.traceloop import TraceloopLogger +from .exception_mapping_utils import _get_response_headers +from .initialize_dynamic_callback_params import ( + initialize_standard_callback_dynamic_params as _initialize_standard_callback_dynamic_params, +) +from .specialty_caches.dynamic_logging_cache import DynamicLoggingCache + +if TYPE_CHECKING: + from litellm.llms.base_llm.passthrough.transformation import BasePassthroughConfig +try: + from litellm_enterprise.enterprise_callbacks.callback_controls import ( + EnterpriseCallbackControls, + ) + from litellm_enterprise.enterprise_callbacks.pagerduty.pagerduty import ( + PagerDutyAlerting, + ) + from litellm_enterprise.enterprise_callbacks.send_emails.resend_email import ( + ResendEmailLogger, + ) + from litellm_enterprise.enterprise_callbacks.send_emails.sendgrid_email import ( + SendGridEmailLogger, + ) + from litellm_enterprise.enterprise_callbacks.send_emails.smtp_email import ( + SMTPEmailLogger, + ) + from litellm_enterprise.litellm_core_utils.litellm_logging import ( + StandardLoggingPayloadSetup as EnterpriseStandardLoggingPayloadSetup, + ) + + from litellm.integrations.generic_api.generic_api_callback import GenericAPILogger + + EnterpriseStandardLoggingPayloadSetupVAR: Optional[ + Type[EnterpriseStandardLoggingPayloadSetup] + ] = EnterpriseStandardLoggingPayloadSetup +except Exception as e: + verbose_logger.debug( + f"[Non-Blocking] Unable to import GenericAPILogger - LiteLLM Enterprise Feature - {str(e)}" + ) + GenericAPILogger = CustomLogger # type: ignore + ResendEmailLogger = CustomLogger # type: ignore + SendGridEmailLogger = CustomLogger # type: ignore + SMTPEmailLogger = CustomLogger # type: ignore + PagerDutyAlerting = CustomLogger # type: ignore + EnterpriseCallbackControls = None # type: ignore + EnterpriseStandardLoggingPayloadSetupVAR = None +_in_memory_loggers: List[Any] = [] + +_STANDARD_LOGGING_METADATA_KEYS: frozenset = frozenset( + StandardLoggingMetadata.__annotations__.keys() +) + +### GLOBAL VARIABLES ### + +# Cache custom pricing keys as frozenset for O(1) lookups instead of looping through 49 keys +_CUSTOM_PRICING_KEYS: frozenset = frozenset( + CustomPricingLiteLLMParams.model_fields.keys() +) + +sentry_sdk_instance = None +capture_exception = None +add_breadcrumb = None +slack_app = None +alerts_channel = None +heliconeLogger = None +athinaLogger = None +promptLayerLogger = None +logfireLogger = None +weightsBiasesLogger = None +customLogger = None +langFuseLogger = None +openMeterLogger = None +lagoLogger = None +dataDogLogger = None +prometheusLogger = None +dynamoLogger = None +s3Logger = None +greenscaleLogger = None +lunaryLogger = None +supabaseClient = None +deepevalLogger = None +callback_list: Optional[List[str]] = [] +user_logger_fn = None +additional_details: Optional[Dict[str, str]] = {} +local_cache: Optional[Dict[str, str]] = {} +last_fetched_at = None +last_fetched_at_keys = None + + +#### +class ServiceTraceIDCache: + def __init__(self) -> None: + self.cache = InMemoryCache() + + def get_cache(self, litellm_call_id: str, service_name: str) -> Optional[str]: + key_name = "{}:{}".format(service_name, litellm_call_id) + response = self.cache.get_cache(key=key_name) + return response + + def set_cache(self, litellm_call_id: str, service_name: str, trace_id: str) -> None: + key_name = "{}:{}".format(service_name, litellm_call_id) + self.cache.set_cache(key=key_name, value=trace_id) + return None + + +in_memory_trace_id_cache = ServiceTraceIDCache() +in_memory_dynamic_logger_cache = DynamicLoggingCache() + +# Cached lazy import for PrometheusLogger +# Module-level cache to avoid repeated imports while preserving memory benefits +_PrometheusLogger = None + + +def _get_cached_prometheus_logger(): + """ + Get cached PrometheusLogger class. + Lazy imports on first call to avoid loading prometheus.py and utils.py at import time (60MB saved). + Subsequent calls use cached class for better performance. + """ + global _PrometheusLogger + if _PrometheusLogger is None: + from litellm.integrations.prometheus import PrometheusLogger + + _PrometheusLogger = PrometheusLogger + return _PrometheusLogger + + +class Logging(LiteLLMLoggingBaseClass): + global supabaseClient, promptLayerLogger, weightsBiasesLogger, logfireLogger, capture_exception, add_breadcrumb, lunaryLogger, logfireLogger, prometheusLogger, slack_app + custom_pricing: bool = False + stream_options = None + litellm_request_debug: bool = False + + def __init__( + self, + model: str, + messages, + stream, + call_type, + start_time, + litellm_call_id: str, + function_id: str, + litellm_trace_id: Optional[str] = None, + dynamic_input_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = None, + dynamic_success_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = None, + dynamic_async_success_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = None, + dynamic_failure_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = None, + dynamic_async_failure_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = None, + applied_guardrails: Optional[List[str]] = None, + kwargs: Optional[Dict] = None, + log_raw_request_response: bool = False, + ): + _input: Optional[str] = messages # save original value of messages + if messages is not None: + if isinstance(messages, str): + messages = [ + {"role": "user", "content": messages} + ] # convert text completion input to the chat completion format + elif ( + isinstance(messages, list) + and len(messages) > 0 + and isinstance(messages[0], str) + ): + new_messages = [] + for m in messages: + new_messages.append({"role": "user", "content": m}) + messages = new_messages + + self.model = model + self.messages = copy.deepcopy(messages) if messages is not None else None + self.stream = stream + self.start_time = start_time # log the call start time + self.call_type = call_type + self.litellm_call_id = litellm_call_id + self.litellm_trace_id: str = ( + litellm_trace_id if litellm_trace_id else str(uuid.uuid4()) + ) + self.function_id = function_id + self.streaming_chunks: List[Any] = [] # for generating complete stream response + self.sync_streaming_chunks: List[ + Any + ] = [] # for generating complete stream response + self.log_raw_request_response = log_raw_request_response + + # Initialize dynamic callbacks + self.dynamic_input_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = dynamic_input_callbacks + self.dynamic_success_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = dynamic_success_callbacks + self.dynamic_async_success_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = dynamic_async_success_callbacks + self.dynamic_failure_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = dynamic_failure_callbacks + self.dynamic_async_failure_callbacks: Optional[ + List[Union[str, Callable, CustomLogger]] + ] = dynamic_async_failure_callbacks + + # Process dynamic callbacks + self.process_dynamic_callbacks() + + ## DYNAMIC LANGFUSE / GCS / logging callback KEYS ## + self.standard_callback_dynamic_params: StandardCallbackDynamicParams = ( + self.initialize_standard_callback_dynamic_params(kwargs) + ) + self.standard_built_in_tools_params: StandardBuiltInToolsParams = ( + self.initialize_standard_built_in_tools_params(kwargs) + ) + ## TIME TO FIRST TOKEN LOGGING ## + self.completion_start_time: Optional[datetime.datetime] = None + self._llm_caching_handler: Optional[LLMCachingHandler] = None + + # INITIAL LITELLM_PARAMS + litellm_params = {} + if kwargs is not None: + litellm_params = get_litellm_params(**kwargs) + litellm_params = scrub_sensitive_keys_in_metadata(litellm_params) + + self.litellm_params = litellm_params + + # Initialize cost breakdown field + self.cost_breakdown: Optional[CostBreakdown] = None + + # Init Caching related details + self.caching_details: Optional[CachingDetails] = None + + # Passthrough endpoint guardrails config for field targeting + self.passthrough_guardrails_config: Optional[Dict[str, Any]] = None + + self.model_call_details: Dict[str, Any] = { + "litellm_trace_id": litellm_trace_id, + "litellm_call_id": litellm_call_id, + "input": _input, + "litellm_params": litellm_params, + "applied_guardrails": applied_guardrails, + "model": model, + } + + def process_dynamic_callbacks(self): + """ + Initializes CustomLogger compatible callbacks in self.dynamic_* callbacks + + If a callback is in litellm._known_custom_logger_compatible_callbacks, it needs to be intialized and added to the respective dynamic_* callback list. + """ + # Process input callbacks + self.dynamic_input_callbacks = self._process_dynamic_callback_list( + self.dynamic_input_callbacks, dynamic_callbacks_type="input" + ) + + # Process failure callbacks + self.dynamic_failure_callbacks = self._process_dynamic_callback_list( + self.dynamic_failure_callbacks, dynamic_callbacks_type="failure" + ) + + # Process async failure callbacks + self.dynamic_async_failure_callbacks = self._process_dynamic_callback_list( + self.dynamic_async_failure_callbacks, dynamic_callbacks_type="async_failure" + ) + + # Process success callbacks + self.dynamic_success_callbacks = self._process_dynamic_callback_list( + self.dynamic_success_callbacks, dynamic_callbacks_type="success" + ) + + # Process async success callbacks + self.dynamic_async_success_callbacks = self._process_dynamic_callback_list( + self.dynamic_async_success_callbacks, dynamic_callbacks_type="async_success" + ) + + def _process_dynamic_callback_list( + self, + callback_list: Optional[List[Union[str, Callable, CustomLogger]]], + dynamic_callbacks_type: Literal[ + "input", "success", "failure", "async_success", "async_failure" + ], + ) -> Optional[List[Union[str, Callable, CustomLogger]]]: + """ + Helper function to initialize CustomLogger compatible callbacks in self.dynamic_* callbacks + + - If a callback is in litellm._known_custom_logger_compatible_callbacks, + replace the string with the initialized callback class. + - If dynamic callback is a "success" callback that is a known_custom_logger_compatible_callbacks then add it to dynamic_async_success_callbacks + - If dynamic callback is a "failure" callback that is a known_custom_logger_compatible_callbacks then add it to dynamic_failure_callbacks + """ + if callback_list is None: + return None + + processed_list: List[Union[str, Callable, CustomLogger]] = [] + for callback in callback_list: + if ( + isinstance(callback, str) + and callback in litellm._known_custom_logger_compatible_callbacks + ): + callback_class = _init_custom_logger_compatible_class( + callback, internal_usage_cache=None, llm_router=None # type: ignore + ) + if callback_class is not None: + processed_list.append(callback_class) + + # If processing dynamic_success_callbacks, add to dynamic_async_success_callbacks + if dynamic_callbacks_type == "success": + if self.dynamic_async_success_callbacks is None: + self.dynamic_async_success_callbacks = [] + self.dynamic_async_success_callbacks.append(callback_class) + elif dynamic_callbacks_type == "failure": + if self.dynamic_async_failure_callbacks is None: + self.dynamic_async_failure_callbacks = [] + self.dynamic_async_failure_callbacks.append(callback_class) + else: + processed_list.append(callback) + return processed_list + + def initialize_standard_callback_dynamic_params( + self, kwargs: Optional[Dict] = None + ) -> StandardCallbackDynamicParams: + """ + Initialize the standard callback dynamic params from the kwargs + + checks if langfuse_secret_key, gcs_bucket_name in kwargs and sets the corresponding attributes in StandardCallbackDynamicParams + """ + + return _initialize_standard_callback_dynamic_params(kwargs) + + def initialize_standard_built_in_tools_params( + self, kwargs: Optional[Dict] = None + ) -> StandardBuiltInToolsParams: + """ + Initialize the standard built-in tools params from the kwargs + + checks if web_search_options in kwargs or tools and sets the corresponding attribute in StandardBuiltInToolsParams + """ + return StandardBuiltInToolsParams( + web_search_options=StandardBuiltInToolCostTracking._get_web_search_options( + kwargs or {} + ), + file_search=StandardBuiltInToolCostTracking._get_file_search_tool_call( + kwargs or {} + ), + ) + + def update_environment_variables( + self, + litellm_params: Dict, + optional_params: Dict, + model: Optional[str] = None, + user: Optional[str] = None, + **additional_params, + ): + self.optional_params = optional_params + if model is not None: + self.model = model + self.user = user + self.litellm_params = { + **self.litellm_params, + **scrub_sensitive_keys_in_metadata(litellm_params), + } + self.litellm_request_debug = litellm_params.get("litellm_request_debug", False) + self.logger_fn = litellm_params.get("logger_fn", None) + if _is_debugging_on() or self.litellm_request_debug: + verbose_logger.debug(f"self.optional_params: {self.optional_params}") + + self.model_call_details.update( + { + "model": self.model, + "messages": self.messages, + "optional_params": self.optional_params, + "litellm_params": self.litellm_params, + "start_time": self.start_time, + "stream": self.stream, + "user": user, + "call_type": str(self.call_type), + "litellm_call_id": self.litellm_call_id, + "completion_start_time": self.completion_start_time, + "standard_callback_dynamic_params": self.standard_callback_dynamic_params, + **self.optional_params, + **additional_params, + } + ) + + ## check if stream options is set ## - used by CustomStreamWrapper for easy instrumentation + if "stream_options" in additional_params: + self.stream_options = additional_params["stream_options"] + ## check if custom pricing set ## + if any( + litellm_params.get(key) is not None + for key in _CUSTOM_PRICING_KEYS & litellm_params.keys() + ): + self.custom_pricing = True + + if "custom_llm_provider" in self.model_call_details: + self.custom_llm_provider = self.model_call_details["custom_llm_provider"] + + def update_messages(self, messages: List[AllMessageValues]): + """ + Update the logged value of the messages in the model_call_details + + Allows pre-call hooks to update the messages before the call is made + """ + self.messages = messages + self.model_call_details["messages"] = messages + + def should_run_prompt_management_hooks( + self, + non_default_params: Dict, + prompt_id: Optional[str] = None, + tools: Optional[List[Dict]] = None, + ) -> bool: + """ + Return True if prompt management hooks should be run + """ + if prompt_id: + return True + + if self._should_run_prompt_management_hooks_without_prompt_id( + non_default_params=non_default_params, + tools=tools, + ): + return True + + return False + + def _should_run_prompt_management_hooks_without_prompt_id( + self, + non_default_params: Dict, + tools: Optional[List[Dict]] = None, + ) -> bool: + """ + Certain prompt management hooks don't need a `prompt_id` to be passed in, they are triggered by dynamic params + + eg. AnthropicCacheControlHook and BedrockKnowledgeBaseHook both don't require a `prompt_id` to be passed in, they are triggered by dynamic params + """ + for param in non_default_params: + if param in DynamicPromptManagementParamLiteral.list_all_params(): + return True + + ############################################################################# + # Check if Vector Store / Knowledge Base hooks should be applied to the prompt + ############################################################################# + if litellm.vector_store_registry is not None: + if litellm.vector_store_registry.get_vector_store_to_run( + non_default_params=non_default_params, tools=tools + ): + return True + return False + + def get_chat_completion_prompt( + self, + model: str, + messages: List[AllMessageValues], + non_default_params: Dict, + prompt_variables: Optional[dict], + prompt_id: Optional[str] = None, + prompt_spec: Optional[PromptSpec] = None, + prompt_management_logger: Optional[CustomLogger] = None, + prompt_label: Optional[str] = None, + prompt_version: Optional[int] = None, + ) -> Tuple[str, List[AllMessageValues], dict]: + custom_logger = ( + prompt_management_logger + or self.get_custom_logger_for_prompt_management( + model=model, + non_default_params=non_default_params, + prompt_id=prompt_id, + prompt_spec=prompt_spec, + dynamic_callback_params=self.standard_callback_dynamic_params, + ) + ) + + if custom_logger: + ( + model, + messages, + non_default_params, + ) = custom_logger.get_chat_completion_prompt( + model=model, + messages=messages, + non_default_params=non_default_params or {}, + prompt_id=prompt_id, + prompt_spec=prompt_spec, + prompt_variables=prompt_variables, + dynamic_callback_params=self.standard_callback_dynamic_params, + prompt_label=prompt_label, + prompt_version=prompt_version, + ) + self.messages = messages + return model, messages, non_default_params + + async def async_get_chat_completion_prompt( + self, + model: str, + messages: List[AllMessageValues], + non_default_params: Dict, + prompt_variables: Optional[dict], + prompt_id: Optional[str] = None, + prompt_spec: Optional[PromptSpec] = None, + prompt_management_logger: Optional[CustomLogger] = None, + tools: Optional[List[Dict]] = None, + prompt_label: Optional[str] = None, + prompt_version: Optional[int] = None, + ) -> Tuple[str, List[AllMessageValues], dict]: + custom_logger = ( + prompt_management_logger + or self.get_custom_logger_for_prompt_management( + model=model, + tools=tools, + non_default_params=non_default_params, + prompt_id=prompt_id, + prompt_spec=prompt_spec, + dynamic_callback_params=self.standard_callback_dynamic_params, + ) + ) + + if custom_logger: + ( + model, + messages, + non_default_params, + ) = await custom_logger.async_get_chat_completion_prompt( + model=model, + messages=messages, + non_default_params=non_default_params or {}, + prompt_id=prompt_id, + prompt_spec=prompt_spec, + prompt_variables=prompt_variables, + dynamic_callback_params=self.standard_callback_dynamic_params, + litellm_logging_obj=self, + tools=tools, + prompt_label=prompt_label, + prompt_version=prompt_version, + ) + self.messages = messages + return model, messages, non_default_params + + def _auto_detect_prompt_management_logger( + self, + prompt_id: str, + prompt_spec: Optional[PromptSpec], + dynamic_callback_params: StandardCallbackDynamicParams, + ) -> Optional[CustomLogger]: + """ + Auto-detect which prompt management system owns the given prompt_id. + + This allows a user to just pass prompt_id in the completion call and it will be auto-detected which system owns this prompt. + + Args: + prompt_id: The prompt ID to check + dynamic_callback_params: Dynamic callback parameters for should_run_prompt_management checks + + Returns: + A CustomLogger instance if a matching prompt management system is found, None otherwise + """ + prompt_management_loggers = ( + litellm.logging_callback_manager.get_custom_loggers_for_type( + callback_type=CustomPromptManagement + ) + ) + + for logger in prompt_management_loggers: + if isinstance(logger, CustomPromptManagement): + try: + if logger.should_run_prompt_management( + prompt_id=prompt_id, + prompt_spec=prompt_spec, + dynamic_callback_params=dynamic_callback_params, + ): + self.model_call_details[ + "prompt_integration" + ] = logger.__class__.__name__ + return logger + except Exception: + # If check fails, continue to next logger + continue + + return None + + def get_custom_logger_for_prompt_management( + self, + model: str, + non_default_params: Dict, + tools: Optional[List[Dict]] = None, + prompt_id: Optional[str] = None, + prompt_spec: Optional[PromptSpec] = None, + dynamic_callback_params: Optional[StandardCallbackDynamicParams] = None, + ) -> Optional[CustomLogger]: + """ + Get a custom logger for prompt management based on model name or available callbacks. + + Args: + model: The model name to check for prompt management integration + non_default_params: Non-default parameters passed to the completion call + tools: Optional tools passed to the completion call + prompt_id: Optional prompt ID to auto-detect which system owns this prompt + dynamic_callback_params: Dynamic callback parameters for should_run_prompt_management checks + + Returns: + A CustomLogger instance if one is found, None otherwise + """ + # First check if model starts with a known custom logger compatible callback + # This takes precedence for backward compatibility + for callback_name in litellm._known_custom_logger_compatible_callbacks: + if model.startswith(callback_name): + custom_logger = _init_custom_logger_compatible_class( + logging_integration=callback_name, + internal_usage_cache=None, + llm_router=None, + ) + if custom_logger is not None: + self.model_call_details["prompt_integration"] = model.split("/")[0] + return custom_logger + + # If prompt_id is provided, try to auto-detect which system has this prompt + if prompt_id and dynamic_callback_params is not None: + auto_detected_logger = self._auto_detect_prompt_management_logger( + prompt_id=prompt_id, + prompt_spec=prompt_spec, + dynamic_callback_params=dynamic_callback_params, + ) + if auto_detected_logger is not None: + return auto_detected_logger + + # Then check for any registered CustomPromptManagement loggers (fallback) + prompt_management_loggers = ( + litellm.logging_callback_manager.get_custom_loggers_for_type( + callback_type=CustomPromptManagement + ) + ) + + if prompt_management_loggers: + logger = prompt_management_loggers[0] + self.model_call_details["prompt_integration"] = logger.__class__.__name__ + return logger + + if anthropic_cache_control_logger := AnthropicCacheControlHook.get_custom_logger_for_anthropic_cache_control_hook( + non_default_params + ): + self.model_call_details[ + "prompt_integration" + ] = anthropic_cache_control_logger.__class__.__name__ + return anthropic_cache_control_logger + + ######################################################### + # Vector Store / Knowledge Base hooks + ######################################################### + if litellm.vector_store_registry is not None: + vector_store_custom_logger = _init_custom_logger_compatible_class( + logging_integration="vector_store_pre_call_hook", + internal_usage_cache=None, + llm_router=None, + ) + self.model_call_details[ + "prompt_integration" + ] = vector_store_custom_logger.__class__.__name__ + # Add to global callbacks so post-call hooks are invoked + if ( + vector_store_custom_logger + and vector_store_custom_logger not in litellm.callbacks + ): + litellm.logging_callback_manager.add_litellm_callback( + vector_store_custom_logger + ) + return vector_store_custom_logger + + return None + + def get_custom_logger_for_anthropic_cache_control_hook( + self, non_default_params: Dict + ) -> Optional[CustomLogger]: + if non_default_params.get("cache_control_injection_points", None): + custom_logger = _init_custom_logger_compatible_class( + logging_integration="anthropic_cache_control_hook", + internal_usage_cache=None, + llm_router=None, + ) + return custom_logger + return None + + def _get_raw_request_body(self, data: Optional[Union[dict, str]]) -> dict: + if data is None: + return {"error": "Received empty dictionary for raw request body"} + if isinstance(data, str): + try: + return json.loads(data) + except Exception: + return { + "error": "Unable to parse raw request body. Got - {}".format(data) + } + return data + + def _get_masked_api_base(self, api_base: str) -> str: + if "key=" in api_base: + # Find the position of "key=" in the string + key_index = api_base.find("key=") + 4 + # Mask the last 5 characters after "key=" + masked_api_base = api_base[:key_index] + "*" * 5 + api_base[-4:] + else: + masked_api_base = api_base + return str(masked_api_base) + + def _pre_call(self, input, api_key, model=None, additional_args={}): + """ + Common helper function across the sync + async pre-call function + """ + + self.model_call_details["input"] = input + self.model_call_details["api_key"] = api_key + self.model_call_details["additional_args"] = additional_args + self.model_call_details["log_event_type"] = "pre_api_call" + if ( + model + ): # if model name was changes pre-call, overwrite the initial model call name with the new one + self.model_call_details["model"] = model + self.model_call_details["litellm_params"][ + "api_base" + ] = self._get_masked_api_base(additional_args.get("api_base", "")) + + def pre_call(self, input, api_key, model=None, additional_args={}): # noqa: PLR0915 + # Log the exact input to the LLM API + litellm.error_logs["PRE_CALL"] = locals() + try: + self._pre_call( + input=input, + api_key=api_key, + model=model, + additional_args=additional_args, + ) + + # User Logging -> if you pass in a custom logging function + self._print_llm_call_debugging_log( + api_base=additional_args.get("api_base", ""), + headers=additional_args.get("headers", {}), + additional_args=additional_args, + ) + # log raw request to provider (like LangFuse) -- if opted in. + if ( + self.log_raw_request_response is True + or log_raw_request_response is True + ): + _litellm_params = self.model_call_details.get("litellm_params", {}) + _metadata = _litellm_params.get("metadata", {}) or {} + try: + # [Non-blocking Extra Debug Information in metadata] + if turn_off_message_logging is True: + _metadata[ + "raw_request" + ] = "redacted by litellm. \ + 'litellm.turn_off_message_logging=True'" + else: + curl_command = self._get_request_curl_command( + api_base=additional_args.get("api_base", ""), + headers=additional_args.get("headers", {}), + additional_args=additional_args, + data=additional_args.get("complete_input_dict", {}), + ) + + _metadata["raw_request"] = str(curl_command) + # split up, so it's easier to parse in the UI + self.model_call_details[ + "raw_request_typed_dict" + ] = RawRequestTypedDict( + raw_request_api_base=str( + additional_args.get("api_base") or "" + ), + raw_request_body=self._get_raw_request_body( + additional_args.get("complete_input_dict", {}) + ), + # NOTE: setting ignore_sensitive_headers to True will cause + # the Authorization header to be leaked when calls to the health + # endpoint are made and fail. + raw_request_headers=self._get_masked_headers( + additional_args.get("headers", {}) or {}, + ), + error=None, + ) + except Exception as e: + self.model_call_details[ + "raw_request_typed_dict" + ] = RawRequestTypedDict( + error=str(e), + ) + _metadata[ + "raw_request" + ] = "Unable to Log \ + raw request: {}".format( + str(e) + ) + if getattr(self, "logger_fn", None) and callable(self.logger_fn): + try: + self.logger_fn( + self.model_call_details + ) # Expectation: any logger function passed in by the user should accept a dict object + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( + str(e) + ) + ) + + self.model_call_details["api_call_start_time"] = datetime.datetime.now() + # Input Integration Logging -> If you want to log the fact that an attempt to call the model was made + callbacks = litellm.input_callback + (self.dynamic_input_callbacks or []) + for callback in callbacks: + try: + if callback == "supabase" and supabaseClient is not None: + verbose_logger.debug("reaches supabase for logging!") + model = self.model_call_details["model"] + messages = self.model_call_details["input"] + verbose_logger.debug(f"supabaseClient: {supabaseClient}") + supabaseClient.input_log_event( + model=model, + messages=messages, + end_user=self.model_call_details.get("user", "default"), + litellm_call_id=self.litellm_params["litellm_call_id"], + print_verbose=print_verbose, + ) + elif callback == "sentry" and add_breadcrumb: + try: + details_to_log = copy.deepcopy(self.model_call_details) + except Exception: + details_to_log = self.model_call_details + if litellm.turn_off_message_logging: + # make a copy of the _model_Call_details and log it + details_to_log.pop("messages", None) + details_to_log.pop("input", None) + details_to_log.pop("prompt", None) + + add_breadcrumb( + category="litellm.llm_call", + message=f"Model Call Details pre-call: {details_to_log}", + level="info", + ) + + elif isinstance(callback, CustomLogger): # custom logger class + callback.log_pre_api_call( + model=self.model, + messages=self.messages, + kwargs=self.model_call_details, + ) + elif ( + callable(callback) and customLogger is not None + ): # custom logger functions + customLogger.log_input_event( + model=self.model, + messages=self.messages, + kwargs=self.model_call_details, + print_verbose=print_verbose, + callback_func=callback, + ) + except Exception as e: + verbose_logger.exception( + "litellm.Logging.pre_call(): Exception occured - {}".format( + str(e) + ) + ) + verbose_logger.debug( + f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" + ) + if capture_exception: # log this error to sentry for debugging + capture_exception(e) + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( + str(e) + ) + ) + verbose_logger.error( + f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" + ) + if capture_exception: # log this error to sentry for debugging + capture_exception(e) + + def _print_llm_call_debugging_log( + self, + api_base: str, + headers: dict, + additional_args: dict, + ): + """ + Internal debugging helper function + + Prints the RAW curl command sent from LiteLLM + """ + if _is_debugging_on() or self.litellm_request_debug: + if json_logs: + masked_headers = self._get_masked_headers(headers) + if self.litellm_request_debug: + verbose_logger.warning( # .warning ensures this shows up in all environments + "POST Request Sent from LiteLLM", + extra={"api_base": {api_base}, **masked_headers}, + ) + else: + verbose_logger.debug( + "POST Request Sent from LiteLLM", + extra={"api_base": {api_base}, **masked_headers}, + ) + else: + headers = additional_args.get("headers", {}) + if headers is None: + headers = {} + data = additional_args.get("complete_input_dict", {}) + api_base = str(additional_args.get("api_base", "")) + curl_command = self._get_request_curl_command( + api_base=api_base, + headers=headers, + additional_args=additional_args, + data=data, + ) + if self.litellm_request_debug: + verbose_logger.warning( + f"\033[92m{curl_command}\033[0m\n" + ) # .warning ensures this shows up in all environments + else: + verbose_logger.debug(f"\033[92m{curl_command}\033[0m\n") + + def _get_request_body(self, data: dict) -> str: + return str(data) + + def _get_request_curl_command( + self, api_base: str, headers: Optional[dict], additional_args: dict, data: dict + ) -> str: + masked_api_base = self._get_masked_api_base(api_base) + if headers is None: + headers = {} + curl_command = "\n\nPOST Request Sent from LiteLLM:\n" + curl_command += "curl -X POST \\\n" + curl_command += f"{masked_api_base} \\\n" + masked_headers = self._get_masked_headers(headers) + formatted_headers = " ".join( + [f"-H '{k}: {v}'" for k, v in masked_headers.items()] + ) + curl_command += ( + f"{formatted_headers} \\\n" if formatted_headers.strip() != "" else "" + ) + curl_command += f"-d '{self._get_request_body(data)}'\n" + if additional_args.get("request_str", None) is not None: + # print the sagemaker / bedrock client request + curl_command = "\nRequest Sent from LiteLLM:\n" + request_str = additional_args.get("request_str", "") + curl_command += request_str + elif api_base == "": + curl_command = str(self.model_call_details) + return curl_command + + def _get_masked_headers( + self, headers: dict, ignore_sensitive_headers: bool = False + ) -> dict: + """ + Internal debugging helper function + + Masks the headers of the request sent from LiteLLM + """ + return _get_masked_values( + headers, ignore_sensitive_values=ignore_sensitive_headers + ) + + def post_call( + self, original_response, input=None, api_key=None, additional_args={} + ): + # Log the exact result from the LLM API, for streaming - log the type of response received + litellm.error_logs["POST_CALL"] = locals() + if isinstance(original_response, dict): + original_response = json.dumps(original_response) + try: + self.model_call_details["input"] = input + self.model_call_details["api_key"] = api_key + self.model_call_details["original_response"] = original_response + self.model_call_details["additional_args"] = additional_args + self.model_call_details["log_event_type"] = "post_api_call" + + if self.litellm_request_debug: + attr = "warning" + else: + attr = "debug" + + if json_logs: + callattr = getattr(verbose_logger, attr) + callattr( + "RAW RESPONSE:\n{}\n\n".format( + self.model_call_details.get( + "original_response", self.model_call_details + ) + ), + ) + else: + callattr = getattr(verbose_logger, attr) + callattr( + "RAW RESPONSE:\n{}\n\n".format( + self.model_call_details.get( + "original_response", self.model_call_details + ) + ) + ) + if getattr(self, "logger_fn", None) and callable(self.logger_fn): + try: + self.logger_fn( + self.model_call_details + ) # Expectation: any logger function passed in by the user should accept a dict object + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( + str(e) + ) + ) + original_response = redact_message_input_output_from_logging( + model_call_details=( + self.model_call_details + if hasattr(self, "model_call_details") + else {} + ), + result=original_response, + ) + # Input Integration Logging -> If you want to log the fact that an attempt to call the model was made + + callbacks = litellm.input_callback + (self.dynamic_input_callbacks or []) + for callback in callbacks: + try: + if callback == "sentry" and add_breadcrumb: + verbose_logger.debug("reaches sentry breadcrumbing") + try: + details_to_log = copy.deepcopy(self.model_call_details) + except Exception: + details_to_log = self.model_call_details + if litellm.turn_off_message_logging: + # make a copy of the _model_Call_details and log it + details_to_log.pop("messages", None) + details_to_log.pop("input", None) + details_to_log.pop("prompt", None) + + add_breadcrumb( + category="litellm.llm_call", + message=f"Model Call Details post-call: {details_to_log}", + level="info", + ) + elif isinstance(callback, CustomLogger): # custom logger class + callback.log_post_api_call( + kwargs=self.model_call_details, + response_obj=None, + start_time=self.start_time, + end_time=None, + ) + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while post-call logging with integrations {}".format( + str(e) + ) + ) + verbose_logger.debug( + f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" + ) + if capture_exception: # log this error to sentry for debugging + capture_exception(e) + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( + str(e) + ) + ) + + async def async_post_mcp_tool_call_hook( + self, + kwargs: dict, + response_obj: Any, + start_time: datetime.datetime, + end_time: datetime.datetime, + ): + """ + Post MCP Tool Call Hook + + Use this to modify the MCP tool call response before it is returned to the user. + """ + from litellm.types.llms.base import HiddenParams + from litellm.types.mcp import MCPPostCallResponseObject + + callbacks = self.get_combined_callback_list( + dynamic_success_callbacks=self.dynamic_success_callbacks, + global_callbacks=litellm.success_callback, + ) + post_mcp_tool_call_response_obj: MCPPostCallResponseObject = ( + MCPPostCallResponseObject( + mcp_tool_call_response=response_obj, hidden_params=HiddenParams() + ) + ) + for callback in callbacks: + try: + if isinstance(callback, CustomLogger): + response: Optional[ + MCPPostCallResponseObject + ] = await callback.async_post_mcp_tool_call_hook( + kwargs=kwargs, + response_obj=post_mcp_tool_call_response_obj, + start_time=start_time, + end_time=end_time, + ) + ###################################################################### + # if any of the callbacks modify the response, use the modified response + # current implementation returns the first modified response + ###################################################################### + if response is not None: + response_obj = self._parse_post_mcp_call_hook_response( + response=response + ) + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while logging {}".format( + str(e) + ) + ) + return response_obj + + def _parse_post_mcp_call_hook_response( + self, response: Optional[MCPPostCallResponseObject] + ) -> Any: + """ + Parse the response from the post_mcp_tool_call_hook + + 1. Unpack the mcp_tool_call_response + 2. save the updated response_cost to the model_call_details + """ + if response is None: + return None + self.model_call_details["response_cost"] = response.hidden_params.response_cost + return response.mcp_tool_call_response + + def get_response_ms(self) -> float: + return ( + self.model_call_details.get("end_time", datetime.datetime.now()) + - self.model_call_details.get("start_time", datetime.datetime.now()) + ).total_seconds() * 1000 + + def set_cost_breakdown( + self, + input_cost: float, + output_cost: float, + total_cost: float, + cost_for_built_in_tools_cost_usd_dollar: float, + additional_costs: Optional[dict] = None, + original_cost: Optional[float] = None, + discount_percent: Optional[float] = None, + discount_amount: Optional[float] = None, + margin_percent: Optional[float] = None, + margin_fixed_amount: Optional[float] = None, + margin_total_amount: Optional[float] = None, + ) -> None: + """ + Helper method to store cost breakdown in the logging object. + + Args: + input_cost: Cost of input/prompt tokens + output_cost: Cost of output/completion tokens + cost_for_built_in_tools_cost_usd_dollar: Cost of built-in tools + total_cost: Total cost of request + additional_costs: Free-form additional costs dict (e.g., {"azure_model_router_flat_cost": 0.00014}) + original_cost: Cost before discount + discount_percent: Discount percentage (0.05 = 5%) + discount_amount: Discount amount in USD + margin_percent: Margin percentage applied (0.10 = 10%) + margin_fixed_amount: Fixed margin amount in USD + margin_total_amount: Total margin added in USD + """ + + self.cost_breakdown = CostBreakdown( + input_cost=input_cost, + output_cost=output_cost, + total_cost=total_cost, + tool_usage_cost=cost_for_built_in_tools_cost_usd_dollar, + ) + + # Store additional costs if provided (free-form dict for extensibility) + if ( + additional_costs + and isinstance(additional_costs, dict) + and len(additional_costs) > 0 + ): + self.cost_breakdown["additional_costs"] = additional_costs + + # Store discount information if provided + if original_cost is not None: + self.cost_breakdown["original_cost"] = original_cost + if discount_percent is not None: + self.cost_breakdown["discount_percent"] = discount_percent + if discount_amount is not None: + self.cost_breakdown["discount_amount"] = discount_amount + + # Store margin information if provided + if margin_percent is not None: + self.cost_breakdown["margin_percent"] = margin_percent + if margin_fixed_amount is not None: + self.cost_breakdown["margin_fixed_amount"] = margin_fixed_amount + if margin_total_amount is not None: + self.cost_breakdown["margin_total_amount"] = margin_total_amount + + def _response_cost_calculator( + self, + result: Union[ + ModelResponse, + ModelResponseStream, + EmbeddingResponse, + ImageResponse, + TranscriptionResponse, + TextCompletionResponse, + HttpxBinaryResponseContent, + RerankResponse, + Batch, + FineTuningJob, + ResponsesAPIResponse, + ResponseCompletedEvent, + OpenAIFileObject, + LiteLLMRealtimeStreamLoggingObject, + OpenAIModerationResponse, + "SearchResponse", + ], + cache_hit: Optional[bool] = None, + litellm_model_name: Optional[str] = None, + router_model_id: Optional[str] = None, + ) -> Optional[float]: + """ + Calculate response cost using result + logging object variables. + + used for consistent cost calculation across response headers + logging integrations. + """ + + if isinstance(result, BaseModel) and hasattr(result, "_hidden_params"): + hidden_params = getattr(result, "_hidden_params", {}) + if ( + "response_cost" in hidden_params + and hidden_params["response_cost"] is not None + ): # use cost if already calculated + return hidden_params["response_cost"] + elif ( + router_model_id is None and "model_id" in hidden_params + ): # use model_id if not already set + router_model_id = hidden_params["model_id"] + + ## RESPONSE COST ## + custom_pricing = use_custom_pricing_for_model( + litellm_params=( + self.litellm_params if hasattr(self, "litellm_params") else None + ) + ) + + prompt = "" # use for tts cost calc + _input = self.model_call_details.get("input", None) + if _input is not None and isinstance(_input, str): + prompt = _input + + if cache_hit is None: + cache_hit = self.model_call_details.get("cache_hit", False) + + try: + response_cost_calculator_kwargs = { + "response_object": result, + "model": litellm_model_name or self.model, + "cache_hit": cache_hit, + "custom_llm_provider": self.model_call_details.get( + "custom_llm_provider", None + ), + "base_model": _get_base_model_from_metadata( + model_call_details=self.model_call_details + ), + "call_type": self.call_type, + "optional_params": self.optional_params, + "custom_pricing": custom_pricing, + "prompt": prompt, + "standard_built_in_tools_params": self.standard_built_in_tools_params, + "router_model_id": router_model_id, + "litellm_logging_obj": self, + "service_tier": ( + self.optional_params.get("service_tier") + if self.optional_params + else None + ), + } + except Exception as e: # error creating kwargs for cost calculation + debug_info = StandardLoggingModelCostFailureDebugInformation( + error_str=str(e), + traceback_str=_get_traceback_str_for_error(str(e)), + ) + verbose_logger.debug( + f"response_cost_failure_debug_information: {debug_info}" + ) + self.model_call_details[ + "response_cost_failure_debug_information" + ] = debug_info + return None + + try: + response_cost = litellm.response_cost_calculator( + **response_cost_calculator_kwargs + ) + + verbose_logger.debug(f"response_cost: {response_cost}") + return response_cost + except Exception as e: # error calculating cost + debug_info = StandardLoggingModelCostFailureDebugInformation( + error_str=str(e), + traceback_str=_get_traceback_str_for_error(str(e)), + model=response_cost_calculator_kwargs["model"], + cache_hit=response_cost_calculator_kwargs["cache_hit"], + custom_llm_provider=response_cost_calculator_kwargs[ + "custom_llm_provider" + ], + base_model=response_cost_calculator_kwargs["base_model"], + call_type=response_cost_calculator_kwargs["call_type"], + custom_pricing=response_cost_calculator_kwargs["custom_pricing"], + ) + verbose_logger.debug( + f"response_cost_failure_debug_information: {debug_info}" + ) + self.model_call_details[ + "response_cost_failure_debug_information" + ] = debug_info + + return None + + async def _response_cost_calculator_async( + self, + result: Union[ + ModelResponse, + ModelResponseStream, + EmbeddingResponse, + ImageResponse, + TranscriptionResponse, + TextCompletionResponse, + HttpxBinaryResponseContent, + RerankResponse, + Batch, + FineTuningJob, + ], + cache_hit: Optional[bool] = None, + ) -> Optional[float]: + return self._response_cost_calculator(result=result, cache_hit=cache_hit) + + def should_run_logging( + self, + event_type: Literal[ + "async_success", "sync_success", "async_failure", "sync_failure" + ], + stream: bool = False, + ) -> bool: + try: + if self.model_call_details.get(f"has_logged_{event_type}", False) is True: + return False + + return True + except Exception: + return True + + def has_run_logging( + self, + event_type: Literal[ + "async_success", "sync_success", "async_failure", "sync_failure" + ], + ) -> None: + if self.stream is not None and self.stream is True: + """ + Ignore check on stream, as there can be multiple chunks + """ + return + self.model_call_details[f"has_logged_{event_type}"] = True + return + + def should_run_callback( + self, callback: litellm.CALLBACK_TYPES, litellm_params: dict, event_hook: str + ) -> bool: + if litellm.global_disable_no_log_param: + return True + + if litellm_params.get("no-log", False) is True: + # proxy cost tracking cal backs should run + + if not ( + isinstance(callback, CustomLogger) + and "_PROXY_" in callback.__class__.__name__ + ): + verbose_logger.debug( + f"no-log request, skipping logging for {event_hook} event" + ) + return False + + # Check for dynamically disabled callbacks via headers + if ( + EnterpriseCallbackControls is not None + and EnterpriseCallbackControls.is_callback_disabled_dynamically( + callback=callback, + litellm_params=litellm_params, + standard_callback_dynamic_params=self.standard_callback_dynamic_params, + ) + ): + verbose_logger.debug( + f"Callback {callback} disabled via x-litellm-disable-callbacks header for {event_hook} event" + ) + return False + + return True + + def _update_completion_start_time(self, completion_start_time: datetime.datetime): + self.completion_start_time = completion_start_time + self.model_call_details["completion_start_time"] = self.completion_start_time + + def normalize_logging_result(self, result: Any) -> Any: + """ + Some endpoints return a different type of result than what is expected by the logging system. + This function is used to normalize the result to the expected type. + """ + logging_result = result + if self.call_type == CallTypes.arealtime.value and isinstance(result, list): + combined_usage_object = RealtimeAPITokenUsageProcessor.collect_and_combine_usage_from_realtime_stream_results( + results=result + ) + logging_result = ( + RealtimeAPITokenUsageProcessor.create_logging_realtime_object( + usage=combined_usage_object, + results=result, + ) + ) + + elif ( + self.call_type == CallTypes.llm_passthrough_route.value + or self.call_type == CallTypes.allm_passthrough_route.value + ) and isinstance(result, Response): + from litellm.utils import ProviderConfigManager + + provider_config = ProviderConfigManager.get_provider_passthrough_config( + provider=self.model_call_details.get("custom_llm_provider", ""), + model=self.model, + ) + if provider_config is not None: + logging_result = provider_config.logging_non_streaming_response( + model=self.model, + custom_llm_provider=self.model_call_details.get( + "custom_llm_provider", "" + ), + httpx_response=result, + request_data=self.model_call_details.get("request_data", {}), + logging_obj=self, + endpoint=self.model_call_details.get("endpoint", ""), + ) + return logging_result + + def _process_hidden_params_and_response_cost( + self, + logging_result, + start_time, + end_time, + ): + hidden_params = getattr(logging_result, "_hidden_params", {}) + if hidden_params: + if self.model_call_details.get("litellm_params") is not None: + self.model_call_details["litellm_params"].setdefault("metadata", {}) + if self.model_call_details["litellm_params"]["metadata"] is None: + self.model_call_details["litellm_params"]["metadata"] = {} + self.model_call_details["litellm_params"]["metadata"]["hidden_params"] = getattr(logging_result, "_hidden_params", {}) # type: ignore + + if "response_cost" in hidden_params: + self.model_call_details["response_cost"] = hidden_params["response_cost"] + else: + self.model_call_details["response_cost"] = self._response_cost_calculator( + result=logging_result + ) + + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=logging_result, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, + ) + + def _transform_usage_objects(self, result): + if isinstance(result, ResponsesAPIResponse): + result = result.model_copy() + transformed_usage = ( + ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( + result.usage + ) + ) + setattr(result, "usage", transformed_usage) + if ( + standard_logging_payload := self.model_call_details.get( + "standard_logging_object" + ) + ) is not None: + response_dict = ( + result.model_dump() + if hasattr(result, "model_dump") + else dict(result) + ) + # Ensure usage is properly included with transformed chat format + if transformed_usage is not None: + response_dict["usage"] = ( + transformed_usage.model_dump() + if hasattr(transformed_usage, "model_dump") + else dict(transformed_usage) + ) + standard_logging_payload["response"] = response_dict + elif isinstance(result, TranscriptionResponse): + from litellm.litellm_core_utils.llm_cost_calc.usage_object_transformation import ( + TranscriptionUsageObjectTransformation, + ) + + result = result.model_copy() + transformed_usage = TranscriptionUsageObjectTransformation.transform_transcription_usage_object(result.usage) # type: ignore + setattr(result, "usage", transformed_usage) + return result + + def _success_handler_helper_fn( + self, + result=None, + start_time=None, + end_time=None, + cache_hit=None, + standard_logging_object: Optional[StandardLoggingPayload] = None, + ): + try: + if start_time is None: + start_time = self.start_time + if end_time is None: + end_time = datetime.datetime.now() + if self.completion_start_time is None: + self.completion_start_time = end_time + self.model_call_details[ + "completion_start_time" + ] = self.completion_start_time + + self.model_call_details["log_event_type"] = "successful_api_call" + self.model_call_details["end_time"] = end_time + self.model_call_details["cache_hit"] = cache_hit + + if self.call_type == CallTypes.anthropic_messages.value: + result = self._handle_anthropic_messages_response_logging(result=result) + elif ( + self.call_type == CallTypes.generate_content.value + or self.call_type == CallTypes.agenerate_content.value + ): + result = self._handle_non_streaming_google_genai_generate_content_response_logging( + result=result + ) + elif ( + self.call_type == CallTypes.asend_message.value + or self.call_type == CallTypes.send_message.value + ): + result = self._handle_a2a_response_logging(result=result) + + logging_result = self.normalize_logging_result(result=result) + + if ( + standard_logging_object is None + and result is not None + and self.stream is not True + ): + if self._is_recognized_call_type_for_logging( + logging_result=logging_result + ): + self._process_hidden_params_and_response_cost( + logging_result=logging_result, + start_time=start_time, + end_time=end_time, + ) + elif isinstance(result, dict) or isinstance(result, list): + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=result, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, + ) + elif standard_logging_object is not None: + self.model_call_details[ + "standard_logging_object" + ] = standard_logging_object + else: + self.model_call_details["response_cost"] = None + + result = self._transform_usage_objects(result=result) + + if ( + litellm.max_budget + and self.stream is False + and result is not None + and isinstance(result, dict) + and "content" in result + ): + time_diff = (end_time - start_time).total_seconds() + float_diff = float(time_diff) + litellm._current_cost += litellm.completion_cost( + model=self.model, + prompt="", + completion=getattr(result, "content", ""), + total_time=float_diff, + standard_built_in_tools_params=self.standard_built_in_tools_params, + ) + + return start_time, end_time, result + except Exception as e: + raise Exception(f"[Non-Blocking] LiteLLM.Success_Call Error: {str(e)}") + + def _is_recognized_call_type_for_logging( + self, + logging_result: Any, + ): + """ + Returns True if the call type is recognized for logging (eg. ModelResponse, ModelResponseStream, etc.) + """ + if ( + isinstance(logging_result, ModelResponse) + or isinstance(logging_result, ModelResponseStream) + or isinstance(logging_result, EmbeddingResponse) + or isinstance(logging_result, ImageResponse) + or isinstance(logging_result, TranscriptionResponse) + or isinstance(logging_result, TextCompletionResponse) + or isinstance(logging_result, HttpxBinaryResponseContent) # tts + or isinstance(logging_result, RerankResponse) + or isinstance(logging_result, FineTuningJob) + or isinstance(logging_result, LiteLLMBatch) + or isinstance(logging_result, ResponsesAPIResponse) + or isinstance(logging_result, OpenAIFileObject) + or isinstance(logging_result, LiteLLMRealtimeStreamLoggingObject) + or isinstance(logging_result, OpenAIModerationResponse) + or isinstance(logging_result, OCRResponse) # OCR + or isinstance(logging_result, SearchResponse) # Search API + or isinstance(logging_result, dict) + and logging_result.get("object") == "vector_store.search_results.page" + or isinstance(logging_result, dict) + and logging_result.get("object") == "search" # Search API (dict format) + or isinstance(logging_result, VideoObject) + or isinstance(logging_result, ContainerObject) + or isinstance(logging_result, LiteLLMSendMessageResponse) # A2A + or (self.call_type == CallTypes.call_mcp_tool.value) + ): + return True + return False + + def _flush_passthrough_collected_chunks_helper( + self, + raw_bytes: List[bytes], + provider_config: "BasePassthroughConfig", + ) -> Optional["CostResponseTypes"]: + all_chunks = provider_config._convert_raw_bytes_to_str_lines(raw_bytes) + complete_streaming_response = provider_config.handle_logging_collected_chunks( + all_chunks=all_chunks, + litellm_logging_obj=self, + model=self.model, + custom_llm_provider=self.model_call_details.get("custom_llm_provider", ""), + endpoint=self.model_call_details.get("endpoint", ""), + ) + return complete_streaming_response + + def flush_passthrough_collected_chunks( + self, + raw_bytes: List[bytes], + provider_config: "BasePassthroughConfig", + ): + """ + Flush collected chunks from the logging object + This is used to log the collected chunks once streaming is done on passthrough endpoints + + 1. Decode the raw bytes to string lines + 2. Get the complete streaming response from the provider config + 3. Log the complete streaming response (trigger success handler) + This is used for passthrough endpoints + """ + complete_streaming_response = self._flush_passthrough_collected_chunks_helper( + raw_bytes=raw_bytes, + provider_config=provider_config, + ) + + if complete_streaming_response is not None: + self.success_handler(result=complete_streaming_response) + return + + async def async_flush_passthrough_collected_chunks( + self, + raw_bytes: List[bytes], + provider_config: "BasePassthroughConfig", + ): + complete_streaming_response = self._flush_passthrough_collected_chunks_helper( + raw_bytes=raw_bytes, + provider_config=provider_config, + ) + + if complete_streaming_response is not None: + await self.async_success_handler(result=complete_streaming_response) + return + + def success_handler( # noqa: PLR0915 + self, result=None, start_time=None, end_time=None, cache_hit=None, **kwargs + ): + verbose_logger.debug( + f"Logging Details LiteLLM-Success Call: Cache_hit={cache_hit}" + ) + if not self.should_run_logging( + event_type="sync_success" + ): # prevent double logging + return + start_time, end_time, result = self._success_handler_helper_fn( + start_time=start_time, + end_time=end_time, + result=result, + cache_hit=cache_hit, + standard_logging_object=kwargs.get("standard_logging_object", None), + ) + litellm_params = self.model_call_details.get("litellm_params", {}) + is_sync_request = ( + litellm_params.get(CallTypes.acompletion.value, False) is not True + and litellm_params.get(CallTypes.aresponses.value, False) is not True + and litellm_params.get(CallTypes.aembedding.value, False) is not True + and litellm_params.get(CallTypes.aimage_generation.value, False) is not True + and litellm_params.get(CallTypes.atranscription.value, False) is not True + ) + try: + ## BUILD COMPLETE STREAMED RESPONSE + complete_streaming_response: Optional[ + Union[ModelResponse, TextCompletionResponse, ResponsesAPIResponse] + ] = None + if "complete_streaming_response" in self.model_call_details: + return # break out of this. + complete_streaming_response = self._get_assembled_streaming_response( + result=result, + start_time=start_time, + end_time=end_time, + is_async=False, + streaming_chunks=self.sync_streaming_chunks, + ) + if complete_streaming_response is not None: + verbose_logger.debug( + "Logging Details LiteLLM-Success Call streaming complete" + ) + self.model_call_details[ + "complete_streaming_response" + ] = complete_streaming_response + self.model_call_details[ + "response_cost" + ] = self._response_cost_calculator(result=complete_streaming_response) + ## STANDARDIZED LOGGING PAYLOAD + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=complete_streaming_response, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, + ) + if ( + standard_logging_payload := self.model_call_details.get( + "standard_logging_object" + ) + ) is not None: + # Only emit for sync requests (async_success_handler handles async) + if is_sync_request: + emit_standard_logging_payload(standard_logging_payload) + callbacks = self.get_combined_callback_list( + dynamic_success_callbacks=self.dynamic_success_callbacks, + global_callbacks=litellm.success_callback, + ) + + ## REDACT MESSAGES ## + result = redact_message_input_output_from_logging( + model_call_details=( + self.model_call_details + if hasattr(self, "model_call_details") + else {} + ), + result=result, + ) + ## LOGGING HOOK ## + for callback in callbacks: + if isinstance(callback, CustomLogger): + self.model_call_details, result = callback.logging_hook( + kwargs=self.model_call_details, + result=result, + call_type=self.call_type, + ) + + self.has_run_logging(event_type="sync_success") + for callback in callbacks: + try: + should_run = self.should_run_callback( + callback=callback, + litellm_params=litellm_params, + event_hook="success_handler", + ) + if not should_run: + continue + if callback == "promptlayer" and promptLayerLogger is not None: + print_verbose("reaches promptlayer for logging!") + promptLayerLogger.log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + if callback == "supabase" and supabaseClient is not None: + print_verbose("reaches supabase for logging!") + kwargs = self.model_call_details + + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + if self.stream: + if "complete_streaming_response" not in kwargs: + continue + else: + print_verbose("reaches supabase for streaming logging!") + result = kwargs["complete_streaming_response"] + + model = kwargs["model"] + messages = kwargs["messages"] + optional_params = kwargs.get("optional_params", {}) + litellm_params = kwargs.get("litellm_params", {}) + supabaseClient.log_event( + model=model, + messages=messages, + end_user=optional_params.get("user", "default"), + response_obj=result, + start_time=start_time, + end_time=end_time, + litellm_call_id=( + current_call_id + if ( + current_call_id := litellm_params.get( + "litellm_call_id" + ) + ) + is not None + else str(uuid.uuid4()) + ), + print_verbose=print_verbose, + ) + if callback == "wandb" and weightsBiasesLogger is not None: + print_verbose("reaches wandb for logging!") + weightsBiasesLogger.log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + if callback == "logfire" and logfireLogger is not None: + verbose_logger.debug("reaches logfire for success logging!") + kwargs = {} + for k, v in self.model_call_details.items(): + if ( + k != "original_response" + ): # copy.deepcopy raises errors as this could be a coroutine + kwargs[k] = v + + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + if self.stream: + if "complete_streaming_response" not in kwargs: + continue + else: + print_verbose("reaches logfire for streaming logging!") + result = kwargs["complete_streaming_response"] + + logfireLogger.log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + level=LogfireLevel.INFO.value, # type: ignore + ) + + if callback == "lunary" and lunaryLogger is not None: + print_verbose("reaches lunary for logging!") + model = self.model + kwargs = self.model_call_details + + input = kwargs.get("messages", kwargs.get("input", None)) + + type = ( + "embed" + if self.call_type == CallTypes.embedding.value + else "llm" + ) + + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + if self.stream: + if "complete_streaming_response" not in kwargs: + continue + else: + result = kwargs["complete_streaming_response"] + + lunaryLogger.log_event( + type=type, + kwargs=kwargs, + event="end", + model=model, + input=input, + user_id=kwargs.get("user", None), + # user_props=self.model_call_details.get("user_props", None), + extra=kwargs.get("optional_params", {}), + response_obj=result, + start_time=start_time, + end_time=end_time, + run_id=self.litellm_call_id, + print_verbose=print_verbose, + ) + if callback == "helicone" and heliconeLogger is not None: + print_verbose("reaches helicone for logging!") + model = self.model + messages = self.model_call_details["input"] + kwargs = self.model_call_details + + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + if self.stream: + if "complete_streaming_response" not in kwargs: + continue + else: + print_verbose("reaches helicone for streaming logging!") + result = kwargs["complete_streaming_response"] + + heliconeLogger.log_success( + model=model, + messages=messages, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + kwargs=kwargs, + ) + if callback == "langfuse": + global langFuseLogger + print_verbose("reaches langfuse for success logging!") + kwargs = {} + for k, v in self.model_call_details.items(): + if ( + k != "original_response" + ): # copy.deepcopy raises errors as this could be a coroutine + kwargs[k] = v + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + if self.stream: + verbose_logger.debug( + f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" + ) + if complete_streaming_response is None: + continue + else: + print_verbose("reaches langfuse for streaming logging!") + result = kwargs["complete_streaming_response"] + + langfuse_logger_to_use = LangFuseHandler.get_langfuse_logger_for_request( + globalLangfuseLogger=langFuseLogger, + standard_callback_dynamic_params=self.standard_callback_dynamic_params, + in_memory_dynamic_logger_cache=in_memory_dynamic_logger_cache, + ) + if langfuse_logger_to_use is not None: + _response = langfuse_logger_to_use.log_event_on_langfuse( + kwargs=kwargs, + response_obj=result, + start_time=start_time, + end_time=end_time, + user_id=kwargs.get("user", None), + ) + if _response is not None and isinstance(_response, dict): + _trace_id = _response.get("trace_id", None) + if _trace_id is not None: + in_memory_trace_id_cache.set_cache( + litellm_call_id=self.litellm_call_id, + service_name="langfuse", + trace_id=_trace_id, + ) + if callback == "greenscale" and greenscaleLogger is not None: + kwargs = {} + for k, v in self.model_call_details.items(): + if ( + k != "original_response" + ): # copy.deepcopy raises errors as this could be a coroutine + kwargs[k] = v + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + if self.stream: + verbose_logger.debug( + f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" + ) + if complete_streaming_response is None: + continue + else: + print_verbose( + "reaches greenscale for streaming logging!" + ) + result = kwargs["complete_streaming_response"] + + greenscaleLogger.log_event( + kwargs=kwargs, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + if callback == "athina" and athinaLogger is not None: + deep_copy = {} + for k, v in self.model_call_details.items(): + deep_copy[k] = v + athinaLogger.log_event( + kwargs=deep_copy, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + if callback == "traceloop": + deep_copy = {} + for k, v in self.model_call_details.items(): + if k != "original_response": + deep_copy[k] = v + traceloopLogger.log_event( + kwargs=deep_copy, + response_obj=result, + start_time=start_time, + end_time=end_time, + user_id=kwargs.get("user", None), + print_verbose=print_verbose, + ) + if callback == "s3": + global s3Logger + if s3Logger is None: + s3Logger = S3Logger() + if self.stream: + if "complete_streaming_response" in self.model_call_details: + print_verbose( + "S3Logger Logger: Got Stream Event - Completed Stream Response" + ) + s3Logger.log_event( + kwargs=self.model_call_details, + response_obj=self.model_call_details[ + "complete_streaming_response" + ], + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + else: + print_verbose( + "S3Logger Logger: Got Stream Event - No complete stream response as yet" + ) + else: + s3Logger.log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + + if callback == "openmeter" and is_sync_request: + global openMeterLogger + if openMeterLogger is None: + print_verbose("Instantiates openmeter client") + openMeterLogger = OpenMeterLogger() + if self.stream and complete_streaming_response is None: + openMeterLogger.log_stream_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) + else: + if self.stream and complete_streaming_response: + self.model_call_details[ + "complete_response" + ] = self.model_call_details.get( + "complete_streaming_response", {} + ) + result = self.model_call_details["complete_response"] + openMeterLogger.log_success_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) + if ( + isinstance(callback, CustomLogger) + and is_sync_request + and self.call_type + != CallTypes.pass_through.value # pass-through endpoints call async_log_success_event + ): # custom logger class + if self.stream and complete_streaming_response is None: + callback.log_stream_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) + else: + if self.stream and complete_streaming_response: + self.model_call_details[ + "complete_response" + ] = self.model_call_details.get( + "complete_streaming_response", {} + ) + result = self.model_call_details["complete_response"] + + callback.log_success_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) + if ( + callable(callback) is True + and is_sync_request + and customLogger is not None + ): # custom logger functions + print_verbose( + "success callbacks: Running Custom Callback Function - {}".format( + callback + ) + ) + + customLogger.log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback, + ) + + except Exception as e: + print_verbose( + f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging with integrations {traceback.format_exc()}" + ) + print_verbose( + f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" + ) + if capture_exception: # log this error to sentry for debugging + capture_exception(e) + # Track callback logging failures in Prometheus + try: + self._handle_callback_failure(callback=callback) + except Exception: + pass + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {}".format( + str(e) + ), + ) + + async def async_success_handler( # noqa: PLR0915 + self, result=None, start_time=None, end_time=None, cache_hit=None, **kwargs + ): + """ + Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. + """ + print_verbose( + "Logging Details LiteLLM-Async Success Call, cache_hit={}".format(cache_hit) + ) + if not self.should_run_logging( + event_type="async_success" + ): # prevent double logging + return + + ## CALCULATE COST FOR BATCH JOBS + if self.call_type == CallTypes.aretrieve_batch.value and isinstance( + result, LiteLLMBatch + ): + litellm_params = self.litellm_params or {} + litellm_metadata = litellm_params.get("litellm_metadata") or {} + if ( + litellm_metadata.get("batch_ignore_default_logging", False) is True + ): # polling job will query these frequently, don't spam db logs + return + + from litellm.proxy.openai_files_endpoints.common_utils import ( + _is_base64_encoded_unified_file_id, + ) + + # check if file id is a unified file id + is_base64_unified_file_id = _is_base64_encoded_unified_file_id(result.id) + + batch_cost = kwargs.get("batch_cost", None) + batch_usage = kwargs.get("batch_usage", None) + batch_models = kwargs.get("batch_models", None) + has_explicit_batch_data = all( + x is not None for x in (batch_cost, batch_usage, batch_models) + ) + + should_compute_batch_data = ( + not is_base64_unified_file_id + or not has_explicit_batch_data + and result.status == "completed" + ) + if has_explicit_batch_data: + result._hidden_params["response_cost"] = batch_cost + result._hidden_params["batch_models"] = batch_models + result.usage = batch_usage + + elif should_compute_batch_data: + ( + response_cost, + batch_usage, + batch_models, + ) = await _handle_completed_batch( + batch=result, + custom_llm_provider=self.custom_llm_provider, + litellm_params=self.litellm_params, + ) + + result._hidden_params["response_cost"] = response_cost + result._hidden_params["batch_models"] = batch_models + result.usage = batch_usage + + start_time, end_time, result = self._success_handler_helper_fn( + start_time=start_time, + end_time=end_time, + result=result, + cache_hit=cache_hit, + standard_logging_object=kwargs.get("standard_logging_object", None), + ) + + ## BUILD COMPLETE STREAMED RESPONSE + if "async_complete_streaming_response" in self.model_call_details: + return # break out of this. + complete_streaming_response: Optional[ + Union[ModelResponse, TextCompletionResponse, ResponsesAPIResponse] + ] = self._get_assembled_streaming_response( + result=result, + start_time=start_time, + end_time=end_time, + is_async=True, + streaming_chunks=self.streaming_chunks, + ) + + if complete_streaming_response is not None: + print_verbose("Async success callbacks: Got a complete streaming response") + + self.model_call_details[ + "async_complete_streaming_response" + ] = complete_streaming_response + + try: + if self.model_call_details.get("cache_hit", False) is True: + self.model_call_details["response_cost"] = 0.0 + else: + # check if base_model set on azure + _get_base_model_from_metadata( + model_call_details=self.model_call_details + ) + # base_model defaults to None if not set on model_info + self.model_call_details[ + "response_cost" + ] = self._response_cost_calculator( + result=complete_streaming_response + ) + + verbose_logger.debug( + f"Model={self.model}; cost={self.model_call_details['response_cost']}" + ) + except litellm.NotFoundError: + verbose_logger.warning( + f"Model={self.model} not found in completion cost map. Setting 'response_cost' to None" + ) + self.model_call_details["response_cost"] = None + + ## STANDARDIZED LOGGING PAYLOAD + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=complete_streaming_response, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, + ) + + # print standard logging payload + if ( + standard_logging_payload := self.model_call_details.get( + "standard_logging_object" + ) + ) is not None: + emit_standard_logging_payload(standard_logging_payload) + elif self.call_type == "pass_through_endpoint": + print_verbose( + "Async success callbacks: Got a pass-through endpoint response" + ) + + self.model_call_details["async_complete_streaming_response"] = result + + # cost calculation not possible for pass-through + self.model_call_details["response_cost"] = None + + ## STANDARDIZED LOGGING PAYLOAD + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=result, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, + ) + + # print standard logging payload + if ( + standard_logging_payload := self.model_call_details.get( + "standard_logging_object" + ) + ) is not None: + emit_standard_logging_payload(standard_logging_payload) + callbacks = self.get_combined_callback_list( + dynamic_success_callbacks=self.dynamic_async_success_callbacks, + global_callbacks=litellm._async_success_callback, + ) + + result = redact_message_input_output_from_logging( + model_call_details=( + self.model_call_details if hasattr(self, "model_call_details") else {} + ), + result=result, + ) + + ## LOGGING HOOK ## + + for callback in callbacks: + if isinstance(callback, CustomGuardrail): + from litellm.types.guardrails import GuardrailEventHooks + + if ( + callback.should_run_guardrail( + data=self.model_call_details, + event_type=GuardrailEventHooks.logging_only, + ) + is not True + ): + continue + + self.model_call_details, result = await callback.async_logging_hook( + kwargs=self.model_call_details, + result=result, + call_type=self.call_type, + ) + elif isinstance(callback, CustomLogger): + result = redact_message_input_output_from_custom_logger( + result=result, litellm_logging_obj=self, custom_logger=callback + ) + self.model_call_details, result = await callback.async_logging_hook( + kwargs=self.model_call_details, + result=result, + call_type=self.call_type, + ) + + self.has_run_logging(event_type="async_success") + + for callback in callbacks: + # check if callback can run for this request + litellm_params = self.model_call_details.get("litellm_params", {}) + should_run = self.should_run_callback( + callback=callback, + litellm_params=litellm_params, + event_hook="async_success_handler", + ) + if not should_run: + continue + try: + if callback == "openmeter" and openMeterLogger is not None: + if self.stream is True: + if ( + "async_complete_streaming_response" + in self.model_call_details + ): + await openMeterLogger.async_log_success_event( + kwargs=self.model_call_details, + response_obj=self.model_call_details[ + "async_complete_streaming_response" + ], + start_time=start_time, + end_time=end_time, + ) + else: + await openMeterLogger.async_log_stream_event( # [TODO]: move this to being an async log stream event function + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) + else: + await openMeterLogger.async_log_success_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) + + if isinstance(callback, CustomLogger): # custom logger class + model_call_details: Dict = self.model_call_details + ################################## + # call redaction hook for custom logger + model_call_details = callback.redact_standard_logging_payload_from_model_call_details( + model_call_details=model_call_details + ) + ################################## + if self.stream is True: + if "async_complete_streaming_response" in model_call_details: + await callback.async_log_success_event( + kwargs=model_call_details, + response_obj=model_call_details[ + "async_complete_streaming_response" + ], + start_time=start_time, + end_time=end_time, + ) + else: + await callback.async_log_stream_event( # [TODO]: move this to being an async log stream event function + kwargs=model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) + else: + await callback.async_log_success_event( + kwargs=model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) + if callable(callback): # custom logger functions + global customLogger + if customLogger is None: + customLogger = CustomLogger() + if self.stream: + if ( + "async_complete_streaming_response" + in self.model_call_details + ): + await customLogger.async_log_event( + kwargs=self.model_call_details, + response_obj=self.model_call_details[ + "async_complete_streaming_response" + ], + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback, + ) + else: + await customLogger.async_log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback, + ) + if callback == "dynamodb": + global dynamoLogger + if dynamoLogger is None: + dynamoLogger = DyanmoDBLogger() + if self.stream: + if ( + "async_complete_streaming_response" + in self.model_call_details + ): + print_verbose( + "DynamoDB Logger: Got Stream Event - Completed Stream Response" + ) + await dynamoLogger._async_log_event( + kwargs=self.model_call_details, + response_obj=self.model_call_details[ + "async_complete_streaming_response" + ], + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + else: + print_verbose( + "DynamoDB Logger: Got Stream Event - No complete stream response as yet" + ) + else: + await dynamoLogger._async_log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + except Exception: + verbose_logger.error( + f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" + ) + self._handle_callback_failure(callback=callback) + pass + + def _handle_callback_failure(self, callback: Any): + """ + Handle callback logging failures by incrementing Prometheus metrics. + + Works for both sync and async contexts since Prometheus counter increment is synchronous. + + Args: + callback: The callback that failed + """ + try: + callback_name = self._get_callback_name(callback) + + all_callbacks = litellm.logging_callback_manager._get_all_callbacks() + + for callback_obj in all_callbacks: + if hasattr(callback_obj, "increment_callback_logging_failure"): + callback_obj.increment_callback_logging_failure(callback_name=callback_name) # type: ignore + break # Only increment once + + except Exception as e: + verbose_logger.debug(f"Error in _handle_callback_failure: {str(e)}") + + def _failure_handler_helper_fn( + self, exception, traceback_exception, start_time=None, end_time=None + ): + if start_time is None: + start_time = self.start_time + if end_time is None: + end_time = datetime.datetime.now() + + # on some exceptions, model_call_details is not always initialized, this ensures that we still log those exceptions + if not hasattr(self, "model_call_details"): + self.model_call_details = {} + + self.model_call_details["log_event_type"] = "failed_api_call" + self.model_call_details["exception"] = exception + self.model_call_details["traceback_exception"] = traceback_exception + self.model_call_details["end_time"] = end_time + self.model_call_details.setdefault("original_response", None) + self.model_call_details["response_cost"] = 0 + + if hasattr(exception, "headers") and isinstance(exception.headers, dict): + self.model_call_details.setdefault("litellm_params", {}) + metadata = ( + self.model_call_details["litellm_params"].get("metadata", {}) or {} + ) + metadata.update(exception.headers) + + ## STANDARDIZED LOGGING PAYLOAD + + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj={}, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="failure", + error_str=str(exception), + original_exception=exception, + standard_built_in_tools_params=self.standard_built_in_tools_params, + ) + return start_time, end_time + + async def special_failure_handlers(self, exception: Exception): + """ + Custom events, emitted for specific failures. + + Currently just for router model group rate limit error + """ + from litellm.types.router import RouterErrors + + litellm_params: dict = self.model_call_details.get("litellm_params") or {} + metadata = litellm_params.get("metadata") or {} + + ## BASE CASE ## check if rate limit error for model group size 1 + is_base_case = False + if metadata.get("model_group_size") is not None: + model_group_size = metadata.get("model_group_size") + if isinstance(model_group_size, int) and model_group_size == 1: + is_base_case = True + ## check if special error ## + if ( + RouterErrors.no_deployments_available.value not in str(exception) + and is_base_case is False + ): + return + + ## get original model group ## + + model_group = metadata.get("model_group") or None + for callback in litellm._async_failure_callback: + if isinstance(callback, CustomLogger): # custom logger class + await callback.log_model_group_rate_limit_error( + exception=exception, + original_model_group=model_group, + kwargs=self.model_call_details, + ) # type: ignore + + def failure_handler( # noqa: PLR0915 + self, exception, traceback_exception, start_time=None, end_time=None + ): + verbose_logger.debug( + f"Logging Details LiteLLM-Failure Call: {litellm.failure_callback}" + ) + if not self.should_run_logging( + event_type="sync_failure" + ): # prevent double logging + return + litellm_params = self.model_call_details.get("litellm_params", {}) + is_sync_request = ( + litellm_params.get(CallTypes.acompletion.value, False) is not True + and litellm_params.get(CallTypes.aresponses.value, False) is not True + and litellm_params.get(CallTypes.aembedding.value, False) is not True + and litellm_params.get(CallTypes.aimage_generation.value, False) is not True + and litellm_params.get(CallTypes.atranscription.value, False) is not True + ) + + try: + start_time, end_time = self._failure_handler_helper_fn( + exception=exception, + traceback_exception=traceback_exception, + start_time=start_time, + end_time=end_time, + ) + callbacks = self.get_combined_callback_list( + dynamic_success_callbacks=self.dynamic_failure_callbacks, + global_callbacks=litellm.failure_callback, + ) + + result = None # result sent to all loggers, init this to None incase it's not created + + result = redact_message_input_output_from_logging( + model_call_details=( + self.model_call_details + if hasattr(self, "model_call_details") + else {} + ), + result=result, + ) + self.has_run_logging(event_type="sync_failure") + for callback in callbacks: + try: + should_run = self.should_run_callback( + callback=callback, + litellm_params=litellm_params, + event_hook="failure_handler", + ) + if not should_run: + continue + if callback == "lunary" and lunaryLogger is not None: + print_verbose("reaches lunary for logging error!") + + model = self.model + + input = self.model_call_details["input"] + + _type = ( + "embed" + if self.call_type == CallTypes.embedding.value + else "llm" + ) + + lunaryLogger.log_event( + kwargs=self.model_call_details, + type=_type, + event="error", + user_id=self.model_call_details.get("user", "default"), + model=model, + input=input, + error=traceback_exception, + run_id=self.litellm_call_id, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + ) + if callback == "sentry": + print_verbose("sending exception to sentry") + if capture_exception: + capture_exception(exception) + else: + print_verbose( + f"capture exception not initialized: {capture_exception}" + ) + elif callback == "supabase" and supabaseClient is not None: + print_verbose("reaches supabase for logging!") + print_verbose(f"supabaseClient: {supabaseClient}") + supabaseClient.log_event( + model=self.model if hasattr(self, "model") else "", + messages=self.messages, + end_user=self.model_call_details.get("user", "default"), + response_obj=result, + start_time=start_time, + end_time=end_time, + litellm_call_id=self.model_call_details["litellm_call_id"], + print_verbose=print_verbose, + ) + if ( + callable(callback) and customLogger is not None + ): # custom logger functions + customLogger.log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback, + ) + if ( + isinstance(callback, CustomLogger) and is_sync_request + ): # custom logger class + callback.log_failure_event( + start_time=start_time, + end_time=end_time, + response_obj=result, + kwargs=self.model_call_details, + ) + if callback == "langfuse": + global langFuseLogger + verbose_logger.debug("reaches langfuse for logging failure") + kwargs = {} + for k, v in self.model_call_details.items(): + if ( + k != "original_response" + ): # copy.deepcopy raises errors as this could be a coroutine + kwargs[k] = v + # this only logs streaming once, complete_streaming_response exists i.e when stream ends + langfuse_logger_to_use = LangFuseHandler.get_langfuse_logger_for_request( + globalLangfuseLogger=langFuseLogger, + standard_callback_dynamic_params=self.standard_callback_dynamic_params, + in_memory_dynamic_logger_cache=in_memory_dynamic_logger_cache, + ) + _response = langfuse_logger_to_use.log_event_on_langfuse( + start_time=start_time, + end_time=end_time, + response_obj=None, + user_id=kwargs.get("user", None), + status_message=str(exception), + level="ERROR", + kwargs=self.model_call_details, + ) + if _response is not None and isinstance(_response, dict): + _trace_id = _response.get("trace_id", None) + if _trace_id is not None: + in_memory_trace_id_cache.set_cache( + litellm_call_id=self.litellm_call_id, + service_name="langfuse", + trace_id=_trace_id, + ) + if callback == "traceloop": + traceloopLogger.log_event( + start_time=start_time, + end_time=end_time, + response_obj=None, + user_id=self.model_call_details.get("user", None), + print_verbose=print_verbose, + status_message=str(exception), + level="ERROR", + kwargs=self.model_call_details, + ) + if callback == "logfire" and logfireLogger is not None: + verbose_logger.debug("reaches logfire for failure logging!") + kwargs = {} + for k, v in self.model_call_details.items(): + if ( + k != "original_response" + ): # copy.deepcopy raises errors as this could be a coroutine + kwargs[k] = v + kwargs["exception"] = exception + + logfireLogger.log_event( + kwargs=kwargs, + response_obj=result, + start_time=start_time, + end_time=end_time, + level=LogfireLevel.ERROR.value, # type: ignore + print_verbose=print_verbose, + ) + + except Exception as e: + print_verbose( + f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure logging with integrations {str(e)}" + ) + print_verbose( + f"LiteLLM.Logging: is sentry capture exception initialized {capture_exception}" + ) + if capture_exception: # log this error to sentry for debugging + capture_exception(e) + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure logging {}".format( + str(e) + ) + ) + + async def async_failure_handler( + self, exception, traceback_exception, start_time=None, end_time=None + ): + """ + Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. + """ + await self.special_failure_handlers(exception=exception) + if not self.should_run_logging( + event_type="async_failure" + ): # prevent double logging + return + start_time, end_time = self._failure_handler_helper_fn( + exception=exception, + traceback_exception=traceback_exception, + start_time=start_time, + end_time=end_time, + ) + + callbacks = self.get_combined_callback_list( + dynamic_success_callbacks=self.dynamic_async_failure_callbacks, + global_callbacks=litellm._async_failure_callback, + ) + + result = None # result sent to all loggers, init this to None incase it's not created + + self.has_run_logging(event_type="async_failure") + for callback in callbacks: + try: + litellm_params = self.model_call_details.get("litellm_params", {}) + should_run = self.should_run_callback( + callback=callback, + litellm_params=litellm_params, + event_hook="async_failure_handler", + ) + if not should_run: + continue + if isinstance(callback, CustomLogger): # custom logger class + await callback.async_log_failure_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + ) # type: ignore + if ( + callable(callback) and customLogger is not None + ): # custom logger functions + await customLogger.async_log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback, + ) + except Exception as e: + verbose_logger.exception( + "LiteLLM.LoggingError: [Non-Blocking] Exception occurred while failure \ + logging {}\nCallback={}".format( + str(e), callback + ) + ) + # Track callback logging failures in Prometheus + self._handle_callback_failure(callback=callback) + + def _get_trace_id(self, service_name: Literal["langfuse"]) -> Optional[str]: + """ + For the given service (e.g. langfuse), return the trace_id actually logged. + + Used for constructing the url in slack alerting. + + Returns: + - str: The logged trace id + - None: If trace id not yet emitted. + """ + trace_id: Optional[str] = None + if service_name == "langfuse": + trace_id = in_memory_trace_id_cache.get_cache( + litellm_call_id=self.litellm_call_id, service_name=service_name + ) + + return trace_id + + def _get_callback_object(self, service_name: Literal["langfuse"]) -> Optional[Any]: + """ + Return dynamic callback object. + + Meant to solve issue when doing key-based/team-based logging + """ + global langFuseLogger + + if service_name == "langfuse": + if langFuseLogger is None or ( + ( + self.standard_callback_dynamic_params.get("langfuse_public_key") + is not None + and self.standard_callback_dynamic_params.get("langfuse_public_key") + != langFuseLogger.public_key + ) + or ( + self.standard_callback_dynamic_params.get("langfuse_public_key") + is not None + and self.standard_callback_dynamic_params.get("langfuse_public_key") + != langFuseLogger.public_key + ) + or ( + self.standard_callback_dynamic_params.get("langfuse_host") + is not None + and self.standard_callback_dynamic_params.get("langfuse_host") + != langFuseLogger.langfuse_host + ) + ): + return LangFuseLogger( + langfuse_public_key=self.standard_callback_dynamic_params.get( + "langfuse_public_key" + ), + langfuse_secret=self.standard_callback_dynamic_params.get( + "langfuse_secret" + ), + langfuse_host=self.standard_callback_dynamic_params.get( + "langfuse_host" + ), + ) + return langFuseLogger + + return None + + def handle_sync_success_callbacks_for_async_calls( + self, + result: Any, + start_time: datetime.datetime, + end_time: datetime.datetime, + cache_hit: Optional[Any] = None, + ) -> None: + """ + Handles calling success callbacks for Async calls. + + Why: Some callbacks - `langfuse`, `s3` are sync callbacks. We need to call them in the executor. + """ + if self._should_run_sync_callbacks_for_async_calls() is False: + return + + executor.submit( + self.success_handler, + result, + start_time, + end_time, + cache_hit, + ) + + def _should_run_sync_callbacks_for_async_calls(self) -> bool: + """ + Returns: + - bool: True if sync callbacks should be run for async calls. eg. `langfuse`, `s3` + """ + _combined_sync_callbacks = self.get_combined_callback_list( + dynamic_success_callbacks=self.dynamic_success_callbacks, + global_callbacks=litellm.success_callback, + ) + _filtered_success_callbacks = self._remove_internal_custom_logger_callbacks( + _combined_sync_callbacks + ) + _filtered_success_callbacks = self._remove_internal_litellm_callbacks( + _filtered_success_callbacks + ) + return len(_filtered_success_callbacks) > 0 + + def get_combined_callback_list( + self, dynamic_success_callbacks: Optional[List], global_callbacks: List + ) -> List: + if dynamic_success_callbacks is None: + return list(global_callbacks) + return list(set(dynamic_success_callbacks + global_callbacks)) + + def _remove_internal_litellm_callbacks(self, callbacks: List) -> List: + """ + Creates a filtered list of callbacks, excluding internal LiteLLM callbacks. + + Args: + callbacks: List of callback functions/strings to filter + + Returns: + List of filtered callbacks with internal ones removed + """ + filtered = [ + cb for cb in callbacks if not self._is_internal_litellm_proxy_callback(cb) + ] + + verbose_logger.debug(f"Filtered callbacks: {filtered}") + return filtered + + def _get_callback_name(self, cb) -> str: + """ + Helper to get the name of a callback function + + Args: + cb: The callback object/function/string to get the name of + + Returns: + The name of the callback + """ + if isinstance(cb, str): + return cb + if hasattr(cb, "__name__"): + return cb.__name__ + if hasattr(cb, "__func__"): + return cb.__func__.__name__ + if hasattr(cb, "__class__"): + return cb.__class__.__name__ + return str(cb) + + def _is_internal_litellm_proxy_callback(self, cb) -> bool: + """Helper to check if a callback is internal""" + INTERNAL_PREFIXES = [ + "_PROXY", + "_service_logger.ServiceLogging", + "sync_deployment_callback_on_success", + ] + if isinstance(cb, str): + return False + + if not callable(cb): + return True + + cb_name = self._get_callback_name(cb) + return any(prefix in cb_name for prefix in INTERNAL_PREFIXES) + + def _remove_internal_custom_logger_callbacks(self, callbacks: List) -> List: + """ + Removes internal custom logger callbacks from the list. + """ + _new_callbacks = [] + for _c in callbacks: + if isinstance(_c, CustomLogger): + continue + elif ( + isinstance(_c, str) + and _c in litellm._known_custom_logger_compatible_callbacks + ): + continue + _new_callbacks.append(_c) + return _new_callbacks + + def _get_assembled_streaming_response( + self, + result: Union[ + ModelResponse, + TextCompletionResponse, + ModelResponseStream, + ResponseCompletedEvent, + Any, + ], + start_time: datetime.datetime, + end_time: datetime.datetime, + is_async: bool, + streaming_chunks: List[Any], + ) -> Optional[Union[ModelResponse, TextCompletionResponse, ResponsesAPIResponse]]: + if isinstance(result, ModelResponse): + return result + elif isinstance(result, TextCompletionResponse): + return result + elif isinstance(result, ResponseCompletedEvent): + ## return unified Usage object + if isinstance(result.response.usage, ResponseAPIUsage): + transformed_usage = ( + ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( + result.response.usage + ) + ) + # Set as dict instead of Usage object so model_dump() serializes it correctly + setattr( + result.response, + "usage", + ( + transformed_usage.model_dump() + if hasattr(transformed_usage, "model_dump") + else dict(transformed_usage) + ), + ) + return result.response + else: + return None + return None + + def _handle_anthropic_messages_response_logging(self, result: Any) -> ModelResponse: + """ + Handles logging for Anthropic messages responses. + + Args: + result: The response object from the model call + + Returns: + The the response object from the model call + + - For Non-streaming responses, we need to transform the response to a ModelResponse object. + - For streaming responses, anthropic_messages handler calls success_handler with a assembled ModelResponse. + """ + import httpx + + if self.stream and isinstance(result, ModelResponse): + return result + elif isinstance(result, ModelResponse): + return result + + httpx_response = self.model_call_details.get("httpx_response", None) + if httpx_response and isinstance(httpx_response, httpx.Response): + result = litellm.AnthropicConfig().transform_response( + raw_response=httpx_response, + model_response=litellm.ModelResponse(), + model=self.model, + messages=[], + logging_obj=self, + optional_params={}, + api_key="", + request_data={}, + encoding=litellm.encoding, + json_mode=False, + litellm_params={}, + ) + else: + from litellm.types.llms.anthropic import AnthropicResponse + + pydantic_result = AnthropicResponse.model_validate(result) + import httpx + + result = litellm.AnthropicConfig().transform_parsed_response( + completion_response=pydantic_result.model_dump(), + raw_response=httpx.Response( + status_code=200, + headers={}, + ), + model_response=litellm.ModelResponse(), + json_mode=None, + ) + return result + + def _handle_non_streaming_google_genai_generate_content_response_logging( + self, result: Any + ) -> ModelResponse: + """ + Handles logging for Google GenAI generate content responses. + """ + import httpx + + httpx_response = self.model_call_details.get("httpx_response", None) + if httpx_response is None: + raise ValueError("Google GenAI Generate Content: httpx_response is None") + dict_result = httpx_response.json() + result = litellm.VertexGeminiConfig()._transform_google_generate_content_to_openai_model_response( + completion_response=dict_result, + model_response=litellm.ModelResponse(), + model=self.model, + logging_obj=self, + raw_response=httpx.Response( + status_code=200, + headers={}, + ), + ) + return result + + def _handle_a2a_response_logging(self, result: Any) -> Any: + """ + Handles logging for A2A (Agent-to-Agent) responses. + + Adds usage from model_call_details to the result if available. + Uses Pydantic's model_copy to avoid modifying the original response. + + Args: + result: The LiteLLMSendMessageResponse from the A2A call + + Returns: + The response object with usage added if available + """ + # Get usage from model_call_details (set by asend_message) + usage = self.model_call_details.get("usage") + if usage is None: + return result + + # Deep copy result and add usage + result_copy = result.model_copy(deep=True) + result_copy.usage = ( + usage.model_dump() if hasattr(usage, "model_dump") else dict(usage) + ) + return result_copy + + +def _get_masked_values( + sensitive_object: dict, + ignore_sensitive_values: bool = False, + mask_all_values: bool = False, + unmasked_length: int = 4, + number_of_asterisks: Optional[int] = 4, +) -> dict: + """ + Internal debugging helper function + + Masks the headers of the request sent from LiteLLM + + Args: + masked_length: Optional length for the masked portion (number of *). If set, will use exactly this many * + regardless of original string length. The total length will be unmasked_length + masked_length. + """ + sensitive_keywords = [ + "authorization", + "token", + "key", + "secret", + "vertex_credentials", + ] + return { + k: ( + # If ignore_sensitive_values is True, or if this key doesn't contain sensitive keywords, return original value + v + if ignore_sensitive_values + or not any( + sensitive_keyword in k.lower() + for sensitive_keyword in sensitive_keywords + ) + else ( + # Apply masking to sensitive keys + ( + v[: unmasked_length // 2] + + "*" * number_of_asterisks + + v[-unmasked_length // 2 :] + ) + if ( + isinstance(v, str) + and len(v) > unmasked_length + and number_of_asterisks is not None + ) + else ( + ( + v[: unmasked_length // 2] + + "*" * (len(v) - unmasked_length) + + v[-unmasked_length // 2 :] + ) + if (isinstance(v, str) and len(v) > unmasked_length) + else ("*****" if isinstance(v, str) else v) + ) + ) + ) + for k, v in sensitive_object.items() + } + + +def set_callbacks(callback_list, function_id=None): # noqa: PLR0915 + """ + Globally sets the callback client + """ + global sentry_sdk_instance, capture_exception, add_breadcrumb, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, supabaseClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, logfireLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger, deepevalLogger + + try: + for callback in callback_list: + if callback == "sentry": + try: + import sentry_sdk + except ImportError: + print_verbose("Package 'sentry_sdk' is missing. Installing it...") + subprocess.check_call( + [sys.executable, "-m", "pip", "install", "sentry_sdk"] + ) + import sentry_sdk + from sentry_sdk.scrubber import EventScrubber + + sentry_sdk_instance = sentry_sdk + sentry_trace_rate = ( + os.environ.get("SENTRY_API_TRACE_RATE") + if "SENTRY_API_TRACE_RATE" in os.environ + else "1.0" + ) + sentry_sample_rate = ( + os.environ.get("SENTRY_API_SAMPLE_RATE") + if "SENTRY_API_SAMPLE_RATE" in os.environ + else "1.0" + ) + sentry_sdk_instance.init( + dsn=os.environ.get("SENTRY_DSN"), + traces_sample_rate=float(sentry_trace_rate), # type: ignore + sample_rate=float( + sentry_sample_rate if sentry_sample_rate else 1.0 + ), + send_default_pii=False, # Prevent sending Personal Identifiable Information + event_scrubber=EventScrubber( + denylist=SENTRY_DENYLIST, pii_denylist=SENTRY_PII_DENYLIST + ), + environment=os.environ.get("SENTRY_ENVIRONMENT", "production"), + ) + capture_exception = sentry_sdk_instance.capture_exception + add_breadcrumb = sentry_sdk_instance.add_breadcrumb + elif callback == "slack": + try: + from slack_bolt import App + except ImportError: + print_verbose("Package 'slack_bolt' is missing. Installing it...") + subprocess.check_call( + [sys.executable, "-m", "pip", "install", "slack_bolt"] + ) + from slack_bolt import App + slack_app = App( + token=os.environ.get("SLACK_API_TOKEN"), + signing_secret=os.environ.get("SLACK_API_SECRET"), + ) + alerts_channel = os.environ["SLACK_API_CHANNEL"] + print_verbose(f"Initialized Slack App: {slack_app}") + elif callback == "traceloop": + traceloopLogger = TraceloopLogger() + elif callback == "athina": + athinaLogger = AthinaLogger() + print_verbose("Initialized Athina Logger") + elif callback == "helicone": + heliconeLogger = HeliconeLogger() + elif callback == "lunary": + lunaryLogger = LunaryLogger() + elif callback == "promptlayer": + promptLayerLogger = PromptLayerLogger() + elif callback == "langfuse": + langFuseLogger = LangFuseLogger( + langfuse_public_key=None, langfuse_secret=None, langfuse_host=None + ) + elif callback == "openmeter": + openMeterLogger = OpenMeterLogger() + elif callback == "datadog": + dataDogLogger = DataDogLogger() + elif callback == "dynamodb": + dynamoLogger = DyanmoDBLogger() + elif callback == "s3": + s3Logger = S3Logger() + elif callback == "wandb": + from litellm.integrations.weights_biases import WeightsBiasesLogger + + weightsBiasesLogger = WeightsBiasesLogger() + elif callback == "logfire": + logfireLogger = LogfireLogger() + elif callback == "supabase": + print_verbose("instantiating supabase") + supabaseClient = Supabase() + elif callback == "greenscale": + greenscaleLogger = GreenscaleLogger() + print_verbose("Initialized Greenscale Logger") + elif callable(callback): + customLogger = CustomLogger() + except Exception as e: + raise e + return None + + +def _init_custom_logger_compatible_class( # noqa: PLR0915 + logging_integration: _custom_logger_compatible_callbacks_literal, + internal_usage_cache: Optional[DualCache], + llm_router: Optional[ + Any + ], # expect litellm.Router, but typing errors due to circular import + custom_logger_init_args: Optional[dict] = {}, +) -> Optional[CustomLogger]: + """ + Initialize a custom logger compatible class + """ + try: + custom_logger_init_args = custom_logger_init_args or {} + if logging_integration == "agentops": # Add AgentOps initialization + for callback in _in_memory_loggers: + if isinstance(callback, AgentOps): + return callback # type: ignore + + agentops_logger = AgentOps() + _in_memory_loggers.append(agentops_logger) + return agentops_logger # type: ignore + elif logging_integration == "lago": + for callback in _in_memory_loggers: + if isinstance(callback, LagoLogger): + return callback # type: ignore + + lago_logger = LagoLogger() + _in_memory_loggers.append(lago_logger) + return lago_logger # type: ignore + elif logging_integration == "openmeter": + for callback in _in_memory_loggers: + if isinstance(callback, OpenMeterLogger): + return callback # type: ignore + + _openmeter_logger = OpenMeterLogger() + _in_memory_loggers.append(_openmeter_logger) + return _openmeter_logger # type: ignore + elif logging_integration == "posthog": + for callback in _in_memory_loggers: + if isinstance(callback, PostHogLogger): + return callback # type: ignore + + _posthog_logger = PostHogLogger() + _in_memory_loggers.append(_posthog_logger) + return _posthog_logger # type: ignore + elif logging_integration == "braintrust": + from litellm.integrations.braintrust_logging import BraintrustLogger + + for callback in _in_memory_loggers: + if isinstance(callback, BraintrustLogger): + return callback # type: ignore + + braintrust_logger = BraintrustLogger() + _in_memory_loggers.append(braintrust_logger) + return braintrust_logger # type: ignore + elif logging_integration == "langsmith": + for callback in _in_memory_loggers: + if isinstance(callback, LangsmithLogger): + return callback # type: ignore + + _langsmith_logger = LangsmithLogger() + _in_memory_loggers.append(_langsmith_logger) + return _langsmith_logger # type: ignore + elif logging_integration == "argilla": + for callback in _in_memory_loggers: + if isinstance(callback, ArgillaLogger): + return callback # type: ignore + + _argilla_logger = ArgillaLogger() + _in_memory_loggers.append(_argilla_logger) + return _argilla_logger # type: ignore + elif logging_integration == "literalai": + for callback in _in_memory_loggers: + if isinstance(callback, LiteralAILogger): + return callback # type: ignore + + _literalai_logger = LiteralAILogger() + _in_memory_loggers.append(_literalai_logger) + return _literalai_logger # type: ignore + elif logging_integration == "prometheus": + PrometheusLogger = _get_cached_prometheus_logger() + + for callback in _in_memory_loggers: + if isinstance(callback, PrometheusLogger): + return callback # type: ignore + + _prometheus_logger = PrometheusLogger() + _in_memory_loggers.append(_prometheus_logger) + return _prometheus_logger # type: ignore + elif logging_integration == "datadog": + for callback in _in_memory_loggers: + if isinstance(callback, DataDogLogger): + return callback # type: ignore + + _datadog_logger = DataDogLogger() + _in_memory_loggers.append(_datadog_logger) + return _datadog_logger # type: ignore + elif logging_integration == "datadog_llm_observability": + _datadog_llm_obs_logger = DataDogLLMObsLogger() + _in_memory_loggers.append(_datadog_llm_obs_logger) + return _datadog_llm_obs_logger # type: ignore + elif logging_integration == "azure_sentinel": + for callback in _in_memory_loggers: + if isinstance(callback, AzureSentinelLogger): + return callback # type: ignore + + _azure_sentinel_logger = AzureSentinelLogger() + _in_memory_loggers.append(_azure_sentinel_logger) + return _azure_sentinel_logger # type: ignore + elif logging_integration == "gcs_bucket": + for callback in _in_memory_loggers: + if isinstance(callback, GCSBucketLogger): + return callback # type: ignore + + _gcs_bucket_logger = GCSBucketLogger() + _in_memory_loggers.append(_gcs_bucket_logger) + return _gcs_bucket_logger # type: ignore + elif logging_integration == "s3_v2": + for callback in _in_memory_loggers: + if isinstance(callback, S3V2Logger): + return callback # type: ignore + + _s3_v2_logger = S3V2Logger() + _in_memory_loggers.append(_s3_v2_logger) + return _s3_v2_logger # type: ignore + elif logging_integration == "aws_sqs": + for callback in _in_memory_loggers: + if isinstance(callback, SQSLogger): + return callback # type: ignore + + _aws_sqs_logger = SQSLogger() + _in_memory_loggers.append(_aws_sqs_logger) + return _aws_sqs_logger # type: ignore + elif logging_integration == "azure_storage": + for callback in _in_memory_loggers: + if isinstance(callback, AzureBlobStorageLogger): + return callback # type: ignore + + _azure_storage_logger = AzureBlobStorageLogger() + _in_memory_loggers.append(_azure_storage_logger) + return _azure_storage_logger # type: ignore + elif logging_integration == "opik": + for callback in _in_memory_loggers: + if isinstance(callback, OpikLogger): + return callback # type: ignore + + _opik_logger = OpikLogger() + _in_memory_loggers.append(_opik_logger) + return _opik_logger # type: ignore + elif logging_integration == "arize": + from litellm.integrations.opentelemetry import ( + OpenTelemetry, + OpenTelemetryConfig, + ) + + arize_config = ArizeLogger.get_arize_config() + if arize_config.endpoint is None: + raise ValueError( + "No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint" + ) + otel_config = OpenTelemetryConfig( + exporter=arize_config.protocol, + endpoint=arize_config.endpoint, + service_name=arize_config.project_name, + ) + + os.environ[ + "OTEL_EXPORTER_OTLP_TRACES_HEADERS" + ] = f"space_id={arize_config.space_key or arize_config.space_id},api_key={arize_config.api_key}" + for callback in _in_memory_loggers: + if ( + isinstance(callback, ArizeLogger) + and callback.callback_name == "arize" + ): + return callback # type: ignore + _arize_otel_logger = ArizeLogger(config=otel_config, callback_name="arize") + _in_memory_loggers.append(_arize_otel_logger) + return _arize_otel_logger # type: ignore + elif logging_integration == "arize_phoenix": + from litellm.integrations.opentelemetry import ( + OpenTelemetry, + OpenTelemetryConfig, + ) + + arize_phoenix_config = ArizePhoenixLogger.get_arize_phoenix_config() + otel_config = OpenTelemetryConfig( + exporter=arize_phoenix_config.protocol, + endpoint=arize_phoenix_config.endpoint, + headers=arize_phoenix_config.otlp_auth_headers, + ) + if arize_phoenix_config.project_name: + existing_attrs = os.environ.get("OTEL_RESOURCE_ATTRIBUTES", "") + # Add openinference.project.name attribute + if existing_attrs: + os.environ[ + "OTEL_RESOURCE_ATTRIBUTES" + ] = f"{existing_attrs},openinference.project.name={arize_phoenix_config.project_name}" + else: + os.environ[ + "OTEL_RESOURCE_ATTRIBUTES" + ] = f"openinference.project.name={arize_phoenix_config.project_name}" + + # Set Phoenix project name from environment variable + phoenix_project_name = os.environ.get("PHOENIX_PROJECT_NAME", None) + if phoenix_project_name: + existing_attrs = os.environ.get("OTEL_RESOURCE_ATTRIBUTES", "") + # Add openinference.project.name attribute + if existing_attrs: + os.environ[ + "OTEL_RESOURCE_ATTRIBUTES" + ] = f"{existing_attrs},openinference.project.name={phoenix_project_name}" + else: + os.environ[ + "OTEL_RESOURCE_ATTRIBUTES" + ] = f"openinference.project.name={phoenix_project_name}" + + # auth can be disabled on local deployments of arize phoenix + if arize_phoenix_config.otlp_auth_headers is not None: + os.environ[ + "OTEL_EXPORTER_OTLP_TRACES_HEADERS" + ] = arize_phoenix_config.otlp_auth_headers + + for callback in _in_memory_loggers: + if ( + isinstance(callback, ArizePhoenixLogger) + and callback.callback_name == "arize_phoenix" + ): + return callback # type: ignore + _arize_phoenix_otel_logger = ArizePhoenixLogger( + config=otel_config, callback_name="arize_phoenix" + ) + _in_memory_loggers.append(_arize_phoenix_otel_logger) + return _arize_phoenix_otel_logger # type: ignore + elif logging_integration == "levo": + from litellm.integrations.levo.levo import LevoLogger + from litellm.integrations.opentelemetry import ( + OpenTelemetry, + OpenTelemetryConfig, + ) + + levo_config = LevoLogger.get_levo_config() + otel_config = OpenTelemetryConfig( + exporter=levo_config.protocol, + endpoint=levo_config.endpoint, + headers=levo_config.otlp_auth_headers, + ) + + # Check if LevoLogger instance already exists + for callback in _in_memory_loggers: + if ( + isinstance(callback, LevoLogger) + and callback.callback_name == "levo" + ): + return callback # type: ignore + + _levo_otel_logger = LevoLogger(config=otel_config, callback_name="levo") + _in_memory_loggers.append(_levo_otel_logger) + return _levo_otel_logger # type: ignore + elif logging_integration == "otel": + from litellm.integrations.opentelemetry import OpenTelemetry + + for callback in _in_memory_loggers: + if type(callback) is OpenTelemetry: + return callback # type: ignore + otel_logger = OpenTelemetry( + **_get_custom_logger_settings_from_proxy_server( + callback_name=logging_integration + ) + ) + _in_memory_loggers.append(otel_logger) + return otel_logger # type: ignore + + elif logging_integration == "galileo": + for callback in _in_memory_loggers: + if isinstance(callback, GalileoObserve): + return callback # type: ignore + + galileo_logger = GalileoObserve() + _in_memory_loggers.append(galileo_logger) + return galileo_logger # type: ignore + elif logging_integration == "cloudzero": + from litellm.integrations.cloudzero.cloudzero import CloudZeroLogger + + for callback in _in_memory_loggers: + if isinstance(callback, CloudZeroLogger): + return callback # type: ignore + cloudzero_logger = CloudZeroLogger() + _in_memory_loggers.append(cloudzero_logger) + return cloudzero_logger # type: ignore + elif logging_integration == "focus": + from litellm.integrations.focus.focus_logger import FocusLogger + + for callback in _in_memory_loggers: + if isinstance(callback, FocusLogger): + return callback # type: ignore + focus_logger = FocusLogger() + _in_memory_loggers.append(focus_logger) + return focus_logger # type: ignore + elif logging_integration == "deepeval": + for callback in _in_memory_loggers: + if isinstance(callback, DeepEvalLogger): + return callback # type: ignore + deepeval_logger = DeepEvalLogger() + _in_memory_loggers.append(deepeval_logger) + return deepeval_logger # type: ignore + + elif logging_integration == "logfire": + if "LOGFIRE_TOKEN" not in os.environ: + raise ValueError("LOGFIRE_TOKEN not found in environment variables") + from litellm.integrations.opentelemetry import ( + OpenTelemetry, + OpenTelemetryConfig, + ) + + logfire_base_url = os.getenv( + "LOGFIRE_BASE_URL", "https://logfire-api.pydantic.dev" + ) + otel_config = OpenTelemetryConfig( + exporter="otlp_http", + endpoint=f"{logfire_base_url.rstrip('/')}/v1/traces", + headers=f"Authorization={os.getenv('LOGFIRE_TOKEN')}", + ) + for callback in _in_memory_loggers: + if isinstance(callback, OpenTelemetry): + return callback # type: ignore + _otel_logger = OpenTelemetry(config=otel_config) + _in_memory_loggers.append(_otel_logger) + return _otel_logger # type: ignore + elif logging_integration == "dynamic_rate_limiter": + from litellm.proxy.hooks.dynamic_rate_limiter import ( + _PROXY_DynamicRateLimitHandler, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, _PROXY_DynamicRateLimitHandler): + return callback # type: ignore + + if internal_usage_cache is None: + raise Exception( + "Internal Error: Cache cannot be empty - internal_usage_cache={}".format( + internal_usage_cache + ) + ) + + dynamic_rate_limiter_obj = _PROXY_DynamicRateLimitHandler( + internal_usage_cache=internal_usage_cache + ) + + if llm_router is not None and isinstance(llm_router, litellm.Router): + dynamic_rate_limiter_obj.update_variables(llm_router=llm_router) + _in_memory_loggers.append(dynamic_rate_limiter_obj) + return dynamic_rate_limiter_obj # type: ignore + elif logging_integration == "dynamic_rate_limiter_v3": + from litellm.proxy.hooks.dynamic_rate_limiter_v3 import ( + _PROXY_DynamicRateLimitHandlerV3, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, _PROXY_DynamicRateLimitHandlerV3): + return callback # type: ignore + + if internal_usage_cache is None: + raise Exception( + "Internal Error: Cache cannot be empty - internal_usage_cache={}".format( + internal_usage_cache + ) + ) + + dynamic_rate_limiter_obj_v3 = _PROXY_DynamicRateLimitHandlerV3( + internal_usage_cache=internal_usage_cache + ) + + if llm_router is not None and isinstance(llm_router, litellm.Router): + dynamic_rate_limiter_obj_v3.update_variables(llm_router=llm_router) + _in_memory_loggers.append(dynamic_rate_limiter_obj_v3) + return dynamic_rate_limiter_obj_v3 # type: ignore + elif logging_integration == "langtrace": + if "LANGTRACE_API_KEY" not in os.environ: + raise ValueError("LANGTRACE_API_KEY not found in environment variables") + + from litellm.integrations.opentelemetry import ( + OpenTelemetry, + OpenTelemetryConfig, + ) + + otel_config = OpenTelemetryConfig( + exporter="otlp_http", + endpoint="https://langtrace.ai/api/trace", + ) + os.environ[ + "OTEL_EXPORTER_OTLP_TRACES_HEADERS" + ] = f"api_key={os.getenv('LANGTRACE_API_KEY')}" + for callback in _in_memory_loggers: + if ( + isinstance(callback, OpenTelemetry) + and callback.callback_name == "langtrace" + ): + return callback # type: ignore + _otel_logger = OpenTelemetry(config=otel_config, callback_name="langtrace") + _in_memory_loggers.append(_otel_logger) + return _otel_logger # type: ignore + + elif logging_integration == "mlflow": + for callback in _in_memory_loggers: + if isinstance(callback, MlflowLogger): + return callback # type: ignore + + _mlflow_logger = MlflowLogger() + _in_memory_loggers.append(_mlflow_logger) + return _mlflow_logger # type: ignore + elif logging_integration == "langfuse": + for callback in _in_memory_loggers: + if isinstance(callback, LangfusePromptManagement): + return callback + + langfuse_logger = LangfusePromptManagement() + _in_memory_loggers.append(langfuse_logger) + return langfuse_logger # type: ignore + elif logging_integration == "langfuse_otel": + from litellm.integrations.langfuse.langfuse_otel import LangfuseOtelLogger + + for callback in _in_memory_loggers: + if ( + isinstance(callback, LangfuseOtelLogger) + and callback.callback_name == "langfuse_otel" + ): + return callback # type: ignore + # Allow LangfuseOtelLogger to initialize its own config safely + # This prevents startup crashes if LANGFUSE keys are not in env (e.g. for dynamic usage) + _otel_logger = LangfuseOtelLogger( + config=None, callback_name="langfuse_otel" + ) + _in_memory_loggers.append(_otel_logger) + return _otel_logger # type: ignore + elif logging_integration == "weave_otel": + from litellm.integrations.opentelemetry import OpenTelemetryConfig + from litellm.integrations.weave.weave_otel import ( + WeaveOtelLogger, + get_weave_otel_config, + ) + + weave_otel_config = get_weave_otel_config() + + otel_config = OpenTelemetryConfig( + exporter=weave_otel_config.protocol, + endpoint=weave_otel_config.endpoint, + headers=weave_otel_config.otlp_auth_headers, + ) + + for callback in _in_memory_loggers: + if ( + isinstance(callback, WeaveOtelLogger) + and callback.callback_name == "weave_otel" + ): + return callback # type: ignore + _otel_logger = WeaveOtelLogger( + config=otel_config, callback_name="weave_otel" + ) + _in_memory_loggers.append(_otel_logger) + return _otel_logger # type: ignore + elif logging_integration == "pagerduty": + for callback in _in_memory_loggers: + if isinstance(callback, PagerDutyAlerting): + return callback + pagerduty_logger = PagerDutyAlerting(**custom_logger_init_args) + _in_memory_loggers.append(pagerduty_logger) + return pagerduty_logger # type: ignore + elif logging_integration == "anthropic_cache_control_hook": + for callback in _in_memory_loggers: + if isinstance(callback, AnthropicCacheControlHook): + return callback + anthropic_cache_control_hook = AnthropicCacheControlHook() + _in_memory_loggers.append(anthropic_cache_control_hook) + return anthropic_cache_control_hook # type: ignore + elif logging_integration == "vector_store_pre_call_hook": + from litellm.integrations.vector_store_integrations.vector_store_pre_call_hook import ( + VectorStorePreCallHook, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, VectorStorePreCallHook): + return callback + vector_store_pre_call_hook = VectorStorePreCallHook() + _in_memory_loggers.append(vector_store_pre_call_hook) + return vector_store_pre_call_hook # type: ignore + elif logging_integration == "gcs_pubsub": + for callback in _in_memory_loggers: + if isinstance(callback, GcsPubSubLogger): + return callback + _gcs_pubsub_logger = GcsPubSubLogger() + _in_memory_loggers.append(_gcs_pubsub_logger) + return _gcs_pubsub_logger # type: ignore + elif logging_integration == "generic_api": + for callback in _in_memory_loggers: + if isinstance(callback, GenericAPILogger): + return callback + generic_api_logger = GenericAPILogger() + _in_memory_loggers.append(generic_api_logger) + return generic_api_logger # type: ignore + elif logging_integration == "resend_email": + for callback in _in_memory_loggers: + if isinstance(callback, ResendEmailLogger): + return callback + resend_email_logger = ResendEmailLogger() + _in_memory_loggers.append(resend_email_logger) + return resend_email_logger # type: ignore + elif logging_integration == "sendgrid_email": + for callback in _in_memory_loggers: + if isinstance(callback, SendGridEmailLogger): + return callback + sendgrid_email_logger = SendGridEmailLogger() + _in_memory_loggers.append(sendgrid_email_logger) + return sendgrid_email_logger # type: ignore + elif logging_integration == "smtp_email": + for callback in _in_memory_loggers: + if isinstance(callback, SMTPEmailLogger): + return callback + smtp_email_logger = SMTPEmailLogger() + _in_memory_loggers.append(smtp_email_logger) + return smtp_email_logger # type: ignore + elif logging_integration == "humanloop": + for callback in _in_memory_loggers: + if isinstance(callback, HumanloopLogger): + return callback + + humanloop_logger = HumanloopLogger() + _in_memory_loggers.append(humanloop_logger) + return humanloop_logger # type: ignore + elif logging_integration == "dotprompt": + for callback in _in_memory_loggers: + if isinstance(callback, DotpromptManager): + return callback + + dotprompt_logger = DotpromptManager() + _in_memory_loggers.append(dotprompt_logger) + return dotprompt_logger # type: ignore + elif logging_integration == "bitbucket": + from litellm.integrations.bitbucket.bitbucket_prompt_manager import ( + BitBucketPromptManager, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, BitBucketPromptManager): + return callback + + # Get global BitBucket config + bitbucket_config = getattr(litellm, "global_bitbucket_config", None) + if bitbucket_config is None: + raise ValueError( + "BitBucket configuration not found. Please set litellm.global_bitbucket_config first." + ) + + bitbucket_logger = BitBucketPromptManager(bitbucket_config=bitbucket_config) + _in_memory_loggers.append(bitbucket_logger) + return bitbucket_logger # type: ignore + elif logging_integration == "gitlab": + from litellm.integrations.gitlab.gitlab_prompt_manager import ( + GitLabPromptManager, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, GitLabPromptManager): + return callback + + # Get global BitBucket config + gitlab_config = getattr(litellm, "global_gitlab_config", None) + if gitlab_config is None: + raise ValueError( + "Gitlab configuration not found. Please set litellm.global_gitlab_config first." + ) + + gitlab_logger = GitLabPromptManager(gitlab_config=gitlab_config) + _in_memory_loggers.append(gitlab_logger) + return gitlab_logger # type: ignore + return None + except Exception as e: + verbose_logger.exception( + f"[Non-Blocking Error] Error initializing custom logger: {e}" + ) + return None + return None + + +def get_custom_logger_compatible_class( # noqa: PLR0915 + logging_integration: _custom_logger_compatible_callbacks_literal, +) -> Optional[CustomLogger]: + try: + if logging_integration == "lago": + for callback in _in_memory_loggers: + if isinstance(callback, LagoLogger): + return callback + elif logging_integration == "openmeter": + for callback in _in_memory_loggers: + if isinstance(callback, OpenMeterLogger): + return callback + elif logging_integration == "braintrust": + from litellm.integrations.braintrust_logging import BraintrustLogger + + for callback in _in_memory_loggers: + if isinstance(callback, BraintrustLogger): + return callback + elif logging_integration == "galileo": + for callback in _in_memory_loggers: + if isinstance(callback, GalileoObserve): + return callback + elif logging_integration == "cloudzero": + from litellm.integrations.cloudzero.cloudzero import CloudZeroLogger + + for callback in _in_memory_loggers: + if isinstance(callback, CloudZeroLogger): + return callback + elif logging_integration == "focus": + from litellm.integrations.focus.focus_logger import FocusLogger + + for callback in _in_memory_loggers: + if isinstance(callback, FocusLogger): + return callback + elif logging_integration == "deepeval": + for callback in _in_memory_loggers: + if isinstance(callback, DeepEvalLogger): + return callback + elif logging_integration == "langsmith": + for callback in _in_memory_loggers: + if isinstance(callback, LangsmithLogger): + return callback + elif logging_integration == "argilla": + for callback in _in_memory_loggers: + if isinstance(callback, ArgillaLogger): + return callback + elif logging_integration == "literalai": + for callback in _in_memory_loggers: + if isinstance(callback, LiteralAILogger): + return callback + elif logging_integration == "prometheus": + PrometheusLogger = _get_cached_prometheus_logger() + for callback in _in_memory_loggers: + if isinstance(callback, PrometheusLogger): + return callback + elif logging_integration == "datadog": + for callback in _in_memory_loggers: + if isinstance(callback, DataDogLogger): + return callback + elif logging_integration == "datadog_llm_observability": + for callback in _in_memory_loggers: + if isinstance(callback, DataDogLLMObsLogger): + return callback + elif logging_integration == "azure_sentinel": + for callback in _in_memory_loggers: + if isinstance(callback, AzureSentinelLogger): + return callback + elif logging_integration == "gcs_bucket": + for callback in _in_memory_loggers: + if isinstance(callback, GCSBucketLogger): + return callback + elif logging_integration == "s3_v2": + for callback in _in_memory_loggers: + if isinstance(callback, S3V2Logger): + return callback + elif logging_integration == "aws_sqs": + for callback in _in_memory_loggers: + if isinstance(callback, SQSLogger): + return callback + _aws_sqs_logger = SQSLogger() + _in_memory_loggers.append(_aws_sqs_logger) + return _aws_sqs_logger # type: ignore + elif logging_integration == "azure_storage": + for callback in _in_memory_loggers: + if isinstance(callback, AzureBlobStorageLogger): + return callback + elif logging_integration == "opik": + for callback in _in_memory_loggers: + if isinstance(callback, OpikLogger): + return callback + elif logging_integration == "langfuse": + for callback in _in_memory_loggers: + if isinstance(callback, LangfusePromptManagement): + return callback + elif logging_integration == "otel": + from litellm.integrations.opentelemetry import OpenTelemetry + + for callback in _in_memory_loggers: + if isinstance(callback, OpenTelemetry): + return callback + elif logging_integration == "arize": + if "ARIZE_API_KEY" not in os.environ: + raise ValueError("ARIZE_API_KEY not found in environment variables") + for callback in _in_memory_loggers: + if ( + isinstance(callback, ArizeLogger) + and callback.callback_name == "arize" + ): + return callback + elif logging_integration == "logfire": + if "LOGFIRE_TOKEN" not in os.environ: + raise ValueError("LOGFIRE_TOKEN not found in environment variables") + from litellm.integrations.opentelemetry import OpenTelemetry + + for callback in _in_memory_loggers: + if isinstance(callback, OpenTelemetry): + return callback # type: ignore + + elif logging_integration == "dynamic_rate_limiter": + from litellm.proxy.hooks.dynamic_rate_limiter import ( + _PROXY_DynamicRateLimitHandler, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, _PROXY_DynamicRateLimitHandler): + return callback # type: ignore + elif logging_integration == "dynamic_rate_limiter_v3": + from litellm.proxy.hooks.dynamic_rate_limiter_v3 import ( + _PROXY_DynamicRateLimitHandlerV3, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, _PROXY_DynamicRateLimitHandlerV3): + return callback # type: ignore + + elif logging_integration == "langtrace": + from litellm.integrations.opentelemetry import OpenTelemetry + + if "LANGTRACE_API_KEY" not in os.environ: + raise ValueError("LANGTRACE_API_KEY not found in environment variables") + + for callback in _in_memory_loggers: + if ( + isinstance(callback, OpenTelemetry) + and callback.callback_name == "langtrace" + ): + return callback + + elif logging_integration == "mlflow": + for callback in _in_memory_loggers: + if isinstance(callback, MlflowLogger): + return callback + elif logging_integration == "pagerduty": + for callback in _in_memory_loggers: + if isinstance(callback, PagerDutyAlerting): + return callback + elif logging_integration == "anthropic_cache_control_hook": + for callback in _in_memory_loggers: + if isinstance(callback, AnthropicCacheControlHook): + return callback + elif logging_integration == "vector_store_pre_call_hook": + from litellm.integrations.vector_store_integrations.vector_store_pre_call_hook import ( + VectorStorePreCallHook, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, VectorStorePreCallHook): + return callback + elif logging_integration == "gcs_pubsub": + for callback in _in_memory_loggers: + if isinstance(callback, GcsPubSubLogger): + return callback + elif logging_integration == "generic_api": + for callback in _in_memory_loggers: + if isinstance(callback, GenericAPILogger): + return callback + elif logging_integration == "resend_email": + for callback in _in_memory_loggers: + if isinstance(callback, ResendEmailLogger): + return callback + elif logging_integration == "sendgrid_email": + for callback in _in_memory_loggers: + if isinstance(callback, SendGridEmailLogger): + return callback + elif logging_integration == "smtp_email": + for callback in _in_memory_loggers: + if isinstance(callback, SMTPEmailLogger): + return callback + return None + + except Exception as e: + verbose_logger.exception( + f"[Non-Blocking Error] Error getting custom logger: {e}" + ) + return None + + +def _get_custom_logger_settings_from_proxy_server(callback_name: str) -> Dict: + """ + Get the settings for a custom logger from the proxy server config.yaml + + Proxy server config.yaml defines callback_settings as: + + callback_settings: + otel: + message_logging: False + """ + if litellm.callback_settings: + return dict(litellm.callback_settings.get(callback_name, {})) + return {} + + +def use_custom_pricing_for_model(litellm_params: Optional[dict]) -> bool: + """ + Check if the model uses custom pricing + + Returns True if any of `SPECIAL_MODEL_INFO_PARAMS` are present in `litellm_params` or `model_info` + """ + if litellm_params is None: + return False + + # Check litellm_params using set intersection (only check keys that exist in both) + matching_keys = _CUSTOM_PRICING_KEYS & litellm_params.keys() + for key in matching_keys: + if litellm_params.get(key) is not None: + return True + + # Check model_info + metadata: dict = litellm_params.get("metadata", {}) or {} + model_info: dict = metadata.get("model_info", {}) or {} + + if model_info: + matching_keys = _CUSTOM_PRICING_KEYS & model_info.keys() + for key in matching_keys: + if model_info.get(key) is not None: + return True + + return False + + +def is_valid_sha256_hash(value: str) -> bool: + # Check if the value is a valid SHA-256 hash (64 hexadecimal characters) + return bool(re.fullmatch(r"[a-fA-F0-9]{64}", value)) + + +class StandardLoggingPayloadSetup: + @staticmethod + def cleanup_timestamps( + start_time: Union[dt_object, float], + end_time: Union[dt_object, float], + completion_start_time: Union[dt_object, float], + ) -> Tuple[float, float, float]: + """ + Convert datetime objects to floats + + Args: + start_time: Union[dt_object, float] + end_time: Union[dt_object, float] + completion_start_time: Union[dt_object, float] + + Returns: + Tuple[float, float, float]: A tuple containing the start time, end time, and completion start time as floats. + """ + + if isinstance(start_time, datetime.datetime): + start_time_float = start_time.timestamp() + elif isinstance(start_time, float): + start_time_float = start_time + else: + raise ValueError( + f"start_time is required, got={start_time} of type {type(start_time)}" + ) + + if isinstance(end_time, datetime.datetime): + end_time_float = end_time.timestamp() + elif isinstance(end_time, float): + end_time_float = end_time + else: + raise ValueError( + f"end_time is required, got={end_time} of type {type(end_time)}" + ) + + if isinstance(completion_start_time, datetime.datetime): + completion_start_time_float = completion_start_time.timestamp() + elif isinstance(completion_start_time, float): + completion_start_time_float = completion_start_time + else: + completion_start_time_float = end_time_float + + return start_time_float, end_time_float, completion_start_time_float + + @staticmethod + def append_system_prompt_messages( + kwargs: Optional[Dict] = None, messages: Optional[Any] = None + ): + """ + Append system prompt messages to the messages + """ + if kwargs is not None: + if kwargs.get("system") is not None and isinstance( + kwargs.get("system"), str + ): + if messages is None: + return [{"role": "system", "content": kwargs.get("system")}] + elif isinstance(messages, list): + if len(messages) == 0: + return [{"role": "system", "content": kwargs.get("system")}] + # check for duplicates + if messages[0].get("role") == "system" and messages[0].get( + "content" + ) == kwargs.get("system"): + return messages + messages = [ + {"role": "system", "content": kwargs.get("system")} + ] + messages + elif isinstance(messages, str): + messages = [ + {"role": "system", "content": kwargs.get("system")}, + {"role": "user", "content": messages}, + ] + return messages + + return messages + + @staticmethod + def merge_litellm_metadata(litellm_params: dict) -> dict: + """ + Merge both litellm_metadata and metadata from litellm_params. + + litellm_metadata contains model-related fields, metadata contains user API key fields. + We need both for complete standard logging payload. + + Args: + litellm_params: Dictionary containing metadata and litellm_metadata + + Returns: + dict: Merged metadata with user API key fields taking precedence + """ + merged_metadata: dict = {} + + # Start with metadata (user API key fields) - but skip non-serializable objects + if litellm_params.get("metadata") and isinstance( + litellm_params.get("metadata"), dict + ): + for key, value in litellm_params["metadata"].items(): + # Skip non-serializable objects like UserAPIKeyAuth + if key == "user_api_key_auth": + continue + merged_metadata[key] = value + + # Then merge litellm_metadata (model-related fields) - this will NOT overwrite existing keys + if litellm_params.get("litellm_metadata") and isinstance( + litellm_params.get("litellm_metadata"), dict + ): + for key, value in litellm_params["litellm_metadata"].items(): + if ( + key not in merged_metadata + ): # Don't overwrite existing keys from metadata + merged_metadata[key] = value + + return merged_metadata + + @staticmethod + def get_standard_logging_metadata( + metadata: Optional[Dict[str, Any]], + litellm_params: Optional[dict] = None, + prompt_integration: Optional[str] = None, + applied_guardrails: Optional[List[str]] = None, + mcp_tool_call_metadata: Optional[StandardLoggingMCPToolCall] = None, + vector_store_request_metadata: Optional[ + List[StandardLoggingVectorStoreRequest] + ] = None, + usage_object: Optional[dict] = None, + proxy_server_request: Optional[dict] = None, + start_time: Optional[dt_object] = None, + response_id: Optional[str] = None, + ) -> StandardLoggingMetadata: + """ + Clean and filter the metadata dictionary to include only the specified keys in StandardLoggingMetadata. + + Args: + metadata (Optional[Dict[str, Any]]): The original metadata dictionary. + + Returns: + StandardLoggingMetadata: A StandardLoggingMetadata object containing the cleaned metadata. + + Note: + - If the input metadata is None or not a dictionary, an empty StandardLoggingMetadata object is returned. + - If 'user_api_key' is present in metadata and is a valid SHA256 hash, it's stored as 'user_api_key_hash'. + """ + + prompt_management_metadata: Optional[ + StandardLoggingPromptManagementMetadata + ] = None + if litellm_params is not None: + prompt_id = cast(Optional[str], litellm_params.get("prompt_id", None)) + prompt_variables = cast( + Optional[dict], litellm_params.get("prompt_variables", None) + ) + + if prompt_id is not None and prompt_integration is not None: + prompt_management_metadata = StandardLoggingPromptManagementMetadata( + prompt_id=prompt_id, + prompt_variables=prompt_variables, + prompt_integration=prompt_integration, + ) + + # Initialize with default values + clean_metadata = StandardLoggingMetadata( + user_api_key_hash=None, + user_api_key_alias=None, + user_api_key_spend=None, + user_api_key_max_budget=None, + user_api_key_budget_reset_at=None, + user_api_key_team_id=None, + user_api_key_org_id=None, + user_api_key_project_id=None, + user_api_key_user_id=None, + user_api_key_team_alias=None, + user_api_key_user_email=None, + user_api_key_end_user_id=None, + user_api_key_request_route=None, + spend_logs_metadata=None, + requester_ip_address=None, + user_agent=None, + requester_metadata=None, + prompt_management_metadata=prompt_management_metadata, + applied_guardrails=applied_guardrails, + mcp_tool_call_metadata=mcp_tool_call_metadata, + vector_store_request_metadata=vector_store_request_metadata, + usage_object=usage_object, + requester_custom_headers=None, + cold_storage_object_key=None, + user_api_key_auth_metadata=None, + team_alias=None, + team_id=None, + ) + if isinstance(metadata, dict): + for key in metadata.keys() & _STANDARD_LOGGING_METADATA_KEYS: + clean_metadata[key] = metadata[key] # type: ignore + + user_api_key = metadata.get("user_api_key") + if ( + user_api_key + and isinstance(user_api_key, str) + and is_valid_sha256_hash(user_api_key) + ): + clean_metadata["user_api_key_hash"] = user_api_key + _potential_requester_metadata = metadata.get( + "metadata", None + ) # check if user passed metadata in the sdk request - e.g. metadata for langsmith logging - https://docs.litellm.ai/docs/observability/langsmith_integration#set-langsmith-fields + if ( + clean_metadata["requester_metadata"] is None + and _potential_requester_metadata is not None + and isinstance(_potential_requester_metadata, dict) + ): + clean_metadata["requester_metadata"] = _potential_requester_metadata + + if ( + EnterpriseStandardLoggingPayloadSetupVAR + and proxy_server_request is not None + ): + clean_metadata = EnterpriseStandardLoggingPayloadSetupVAR.apply_enterprise_specific_metadata( + standard_logging_metadata=clean_metadata, + proxy_server_request=proxy_server_request, + ) + + # Generate cold storage object key if cold storage is configured + if start_time is not None and response_id is not None: + cold_storage_object_key = ( + StandardLoggingPayloadSetup._generate_cold_storage_object_key( + start_time=start_time, + response_id=response_id, + team_alias=clean_metadata.get("user_api_key_team_alias"), + ) + ) + if cold_storage_object_key: + clean_metadata["cold_storage_object_key"] = cold_storage_object_key + + return clean_metadata + + @staticmethod + def get_usage_from_response_obj( + response_obj: Optional[dict], combined_usage_object: Optional[Usage] = None + ) -> Usage: + ## BASE CASE ## + if combined_usage_object is not None: + return combined_usage_object + if response_obj is None: + return Usage( + prompt_tokens=0, + completion_tokens=0, + total_tokens=0, + ) + + usage = response_obj.get("usage", None) or {} + if usage is None or ( + not isinstance(usage, dict) and not isinstance(usage, Usage) + ): + return Usage( + prompt_tokens=0, + completion_tokens=0, + total_tokens=0, + ) + elif isinstance(usage, Usage): + return usage + elif isinstance(usage, ResponseAPIUsage): + return ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( + usage + ) + elif isinstance(usage, dict): + if ResponseAPILoggingUtils._is_response_api_usage(usage): + return ( + ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( + usage + ) + ) + return Usage(**usage) + + raise ValueError(f"usage is required, got={usage} of type {type(usage)}") + + @staticmethod + def get_model_cost_information( + base_model: Optional[str], + custom_pricing: Optional[bool], + custom_llm_provider: Optional[str], + init_response_obj: Union[Any, BaseModel, dict], + ) -> StandardLoggingModelInformation: + model_cost_name = _select_model_name_for_cost_calc( + model=None, + completion_response=init_response_obj, # type: ignore + base_model=base_model, + custom_pricing=custom_pricing, + ) + if model_cost_name is None: + model_cost_information = StandardLoggingModelInformation( + model_map_key="", model_map_value=None + ) + else: + try: + _model_cost_information = litellm.get_model_info( + model=model_cost_name, custom_llm_provider=custom_llm_provider + ) + model_cost_information = StandardLoggingModelInformation( + model_map_key=model_cost_name, + model_map_value=_model_cost_information, + ) + except Exception: + verbose_logger.debug( # keep in debug otherwise it will trigger on every call + "Model={} is not mapped in model cost map. Defaulting to None model_cost_information for standard_logging_payload".format( + model_cost_name + ) + ) + model_cost_information = StandardLoggingModelInformation( + model_map_key=model_cost_name, model_map_value=None + ) + return model_cost_information + + @staticmethod + def get_final_response_obj( + response_obj: dict, init_response_obj: Union[Any, BaseModel, dict], kwargs: dict + ) -> Optional[Union[dict, str, list]]: + """ + Get final response object after redacting the message input/output from logging + """ + if response_obj: + final_response_obj: Optional[Union[dict, str, list]] = response_obj + elif isinstance(init_response_obj, list) or isinstance(init_response_obj, str): + final_response_obj = init_response_obj + else: + final_response_obj = {} + + modified_final_response_obj = redact_message_input_output_from_logging( + model_call_details=kwargs, + result=final_response_obj, + ) + + if modified_final_response_obj is not None and isinstance( + modified_final_response_obj, BaseModel + ): + final_response_obj = modified_final_response_obj.model_dump() + else: + final_response_obj = modified_final_response_obj + + return final_response_obj + + @staticmethod + def get_additional_headers( + additiona_headers: Optional[dict], + ) -> Optional[StandardLoggingAdditionalHeaders]: + if additiona_headers is None: + return None + + additional_logging_headers: StandardLoggingAdditionalHeaders = {} + + for key in StandardLoggingAdditionalHeaders.__annotations__.keys(): + _key = key.lower() + _key = _key.replace("_", "-") + if _key in additiona_headers: + try: + additional_logging_headers[key] = int(additiona_headers[_key]) # type: ignore + except (ValueError, TypeError): + verbose_logger.debug( + f"Could not convert {additiona_headers[_key]} to int for key {key}." + ) + return additional_logging_headers + + @staticmethod + def get_hidden_params( + hidden_params: Optional[dict], + ) -> StandardLoggingHiddenParams: + clean_hidden_params = StandardLoggingHiddenParams( + model_id=None, + cache_key=None, + api_base=None, + response_cost=None, + additional_headers=None, + litellm_overhead_time_ms=None, + batch_models=None, + litellm_model_name=None, + usage_object=None, + ) + if hidden_params is not None: + for key in StandardLoggingHiddenParams.__annotations__.keys(): + if key in hidden_params: + if key == "additional_headers": + clean_hidden_params[ + "additional_headers" + ] = StandardLoggingPayloadSetup.get_additional_headers( + hidden_params[key] + ) + else: + clean_hidden_params[key] = hidden_params[key] # type: ignore + return clean_hidden_params + + @staticmethod + def strip_trailing_slash(api_base: Optional[str]) -> Optional[str]: + if api_base: + if api_base.endswith("//"): + return api_base.rstrip("/") + if api_base[-1] == "/": + return api_base[:-1] + return api_base + + @staticmethod + def _generate_cold_storage_object_key( + start_time: dt_object, + response_id: str, + team_alias: Optional[str] = None, + ) -> Optional[str]: + """ + Generate cold storage object key in the same format as S3Logger. + + Args: + start_time: The start time of the request + response_id: The response ID + team_alias: Optional team alias for team-based prefixing + + Returns: + Optional[str]: The generated object key or None if cold storage not configured + """ + # Generate object key in same format as S3Logger + from litellm.integrations.s3 import get_s3_object_key + + # Only generate object key if cold storage is configured + cold_storage_custom_logger = litellm.cold_storage_custom_logger + if cold_storage_custom_logger is None: + return None + + try: + # Generate file name in same format as litellm.utils.get_logging_id + s3_file_name = f"time-{start_time.strftime('%H-%M-%S-%f')}_{response_id}" + + # Get the actual s3_path from the configured cold storage logger instance + s3_path = "" # default value + + # Try to get the actual logger instance from the logger name + try: + custom_logger = litellm.logging_callback_manager.get_active_custom_logger_for_callback_name( + cold_storage_custom_logger + ) + if ( + custom_logger + and hasattr(custom_logger, "s3_path") + and getattr(custom_logger, "s3_path") + ): + s3_path = getattr(custom_logger, "s3_path") + except Exception: + # If any error occurs in getting the logger instance, use default empty s3_path + pass + + s3_object_key = get_s3_object_key( + s3_path=s3_path, # Use actual s3_path from logger configuration + prefix="", # Don't split by team alias for cold storage + start_time=start_time, + s3_file_name=s3_file_name, + ) + + return s3_object_key + except Exception: + # If any error occurs in generating the key, return None + return None + + @staticmethod + def get_error_information( + original_exception: Optional[Exception], + traceback_str: Optional[str] = None, + ) -> StandardLoggingPayloadErrorInformation: + from litellm.constants import MAXIMUM_TRACEBACK_LINES_TO_LOG + + # Check for 'code' first (used by ProxyException), then fall back to 'status_code' (used by LiteLLM exceptions) + # Ensure error_code is always a string for Prisma Python JSON field compatibility + error_code_attr = getattr(original_exception, "code", None) + if error_code_attr is not None and str(error_code_attr) not in ("", "None"): + error_status: str = str(error_code_attr) + else: + status_code_attr = getattr(original_exception, "status_code", None) + error_status = str(status_code_attr) if status_code_attr is not None else "" + error_class: str = ( + str(original_exception.__class__.__name__) if original_exception else "" + ) + _llm_provider_in_exception = getattr(original_exception, "llm_provider", "") + + # Get traceback information (first 100 lines) + traceback_info = traceback_str or "" + if original_exception: + tb = getattr(original_exception, "__traceback__", None) + if tb: + tb_lines = traceback.format_tb(tb) + traceback_info += "".join( + tb_lines[:MAXIMUM_TRACEBACK_LINES_TO_LOG] + ) # Limit to first 100 lines + + # Get additional error details + error_message = str(original_exception) + + return StandardLoggingPayloadErrorInformation( + error_code=error_status, + error_class=error_class, + llm_provider=_llm_provider_in_exception, + traceback=traceback_info, + error_message=error_message if original_exception else "", + ) + + @staticmethod + def get_response_time( + start_time_float: float, + end_time_float: float, + completion_start_time_float: float, + stream: bool, + ) -> float: + """ + Get the response time for the LLM response + + Args: + start_time_float: float - start time of the LLM call + end_time_float: float - end time of the LLM call + completion_start_time_float: float - time to first token of the LLM response (for streaming responses) + stream: bool - True when a stream response is returned + + Returns: + float: The response time for the LLM response + """ + if stream is True: + return completion_start_time_float - start_time_float + else: + return end_time_float - start_time_float + + @staticmethod + def _get_standard_logging_payload_trace_id( + logging_obj: Logging, + litellm_params: dict, + ) -> str: + """ + Returns the `litellm_trace_id` for this request + + This helps link sessions when multiple requests are made in a single session + """ + dynamic_litellm_session_id = litellm_params.get("litellm_session_id") + dynamic_litellm_trace_id = litellm_params.get("litellm_trace_id") + + # Note: we recommend using `litellm_session_id` for session tracking + # `litellm_trace_id` is an internal litellm param + if dynamic_litellm_session_id: + return str(dynamic_litellm_session_id) + elif dynamic_litellm_trace_id: + return str(dynamic_litellm_trace_id) + else: + return logging_obj.litellm_trace_id + + @staticmethod + def _get_user_agent_tags(proxy_server_request: dict) -> Optional[List[str]]: + """ + Return the user agent tags from the proxy server request for spend tracking + """ + if litellm.disable_add_user_agent_to_request_tags is True: + return None + user_agent_tags: Optional[List[str]] = None + headers = proxy_server_request.get("headers", {}) + if headers is not None and isinstance(headers, dict): + if "user-agent" in headers: + user_agent = headers["user-agent"] + if user_agent is not None: + if user_agent_tags is None: + user_agent_tags = [] + user_agent_part: Optional[str] = None + if "/" in user_agent: + user_agent_part = user_agent.split("/")[0] + if user_agent_part is not None: + user_agent_tags.append("User-Agent: " + user_agent_part) + if user_agent is not None: + user_agent_tags.append("User-Agent: " + user_agent) + return user_agent_tags + + @staticmethod + def _get_extra_header_tags(proxy_server_request: dict) -> Optional[List[str]]: + """ + Extract additional header tags for spend tracking based on config. + """ + extra_headers: List[str] = ( + getattr(litellm, "extra_spend_tag_headers", None) or [] + ) + if not extra_headers: + return None + + headers = proxy_server_request.get("headers", {}) + if not isinstance(headers, dict): + return None + + header_tags = [] + for header_name in extra_headers: + header_value = headers.get(header_name) + if header_value: + header_tags.append(f"{header_name}: {header_value}") + + return header_tags if header_tags else None + + @staticmethod + def _get_request_tags( + litellm_params: dict, proxy_server_request: dict + ) -> List[str]: + # check for 'tags' in both 'metadata' and 'litellm_metadata' + metadata = litellm_params.get("metadata") or {} + litellm_metadata = litellm_params.get("litellm_metadata") or {} + if metadata.get("tags", []): + request_tags = metadata.get("tags", []).copy() + elif litellm_metadata.get("tags", []): + request_tags = litellm_metadata.get("tags", []).copy() + else: + request_tags = [] + user_agent_tags = StandardLoggingPayloadSetup._get_user_agent_tags( + proxy_server_request + ) + additional_header_tags = StandardLoggingPayloadSetup._get_extra_header_tags( + proxy_server_request + ) + if user_agent_tags is not None: + request_tags.extend(user_agent_tags) + if additional_header_tags is not None: + request_tags.extend(additional_header_tags) + return request_tags + + +def _get_status_fields( + status: StandardLoggingPayloadStatus, + guardrail_information: Optional[List[dict]], + error_str: Optional[str], +) -> "StandardLoggingPayloadStatusFields": + """ + Determine status fields based on request status and guardrail information. + + Args: + status: Overall request status ("success" or "failure") + guardrail_information: Guardrail information from metadata + error_str: Error string if any + + Returns: + StandardLoggingPayloadStatusFields with llm_api_status and guardrail_status + """ + # Mapping for legacy guardrail status values to new GuardrailStatus values + GUARDRAIL_STATUS_MAP: Dict[str, GuardrailStatus] = { + "success": "success", + "blocked": "guardrail_intervened", # legacy + "guardrail_intervened": "guardrail_intervened", # direct + "failure": "guardrail_failed_to_respond", # legacy + "guardrail_failed_to_respond": "guardrail_failed_to_respond", # direct + "not_run": "not_run", + } + + # Set LLM API status + llm_api_status: StandardLoggingPayloadStatus = status + + ######################################################### + # Map - guardrail_information.guardrail_status to guardrail_status + ######################################################### + guardrail_status: GuardrailStatus = "not_run" + if guardrail_information and isinstance(guardrail_information, list): + for information in guardrail_information: + if isinstance(information, dict): + raw_status = information.get("guardrail_status", "not_run") + if raw_status != "not_run": + guardrail_status = GUARDRAIL_STATUS_MAP.get(raw_status, "not_run") + break + + return StandardLoggingPayloadStatusFields( + llm_api_status=llm_api_status, guardrail_status=guardrail_status + ) + + +def _extract_response_obj_and_hidden_params( + init_response_obj: Union[Any, BaseModel, dict], + original_exception: Optional[Exception], +) -> Tuple[dict, Optional[dict]]: + """Extract response_obj and hidden_params from init_response_obj.""" + hidden_params: Optional[dict] = None + if init_response_obj is None: + response_obj = {} + elif isinstance(init_response_obj, BaseModel): + response_obj = init_response_obj.model_dump() + hidden_params = getattr(init_response_obj, "_hidden_params", None) + elif isinstance(init_response_obj, dict): + response_obj = init_response_obj + else: + response_obj = {} + + if original_exception is not None and hidden_params is None: + response_headers = _get_response_headers(original_exception) + if response_headers is not None: + hidden_params = dict( + StandardLoggingHiddenParams( + additional_headers=StandardLoggingPayloadSetup.get_additional_headers( + dict(response_headers) + ), + model_id=None, + cache_key=None, + api_base=None, + response_cost=None, + litellm_overhead_time_ms=None, + batch_models=None, + litellm_model_name=None, + usage_object=None, + ) + ) + + return response_obj, hidden_params + + +def get_standard_logging_object_payload( + kwargs: Optional[dict], + init_response_obj: Union[Any, BaseModel, dict], + start_time: dt_object, + end_time: dt_object, + logging_obj: Logging, + status: StandardLoggingPayloadStatus, + error_str: Optional[str] = None, + original_exception: Optional[Exception] = None, + standard_built_in_tools_params: Optional[StandardBuiltInToolsParams] = None, +) -> Optional[StandardLoggingPayload]: + try: + kwargs = kwargs or {} + + response_obj, hidden_params = _extract_response_obj_and_hidden_params( + init_response_obj, original_exception + ) + + # standardize this function to be used across, s3, dynamoDB, langfuse logging + litellm_params = kwargs.get("litellm_params", {}) or {} + proxy_server_request = litellm_params.get("proxy_server_request") or {} + + # Merge both litellm_metadata and metadata to get complete metadata + metadata: dict = StandardLoggingPayloadSetup.merge_litellm_metadata( + litellm_params + ) + + completion_start_time = kwargs.get("completion_start_time", end_time) + call_type = kwargs.get("call_type") + cache_hit = kwargs.get("cache_hit", False) + usage = StandardLoggingPayloadSetup.get_usage_from_response_obj( + response_obj=response_obj, + combined_usage_object=cast( + Optional[Usage], kwargs.get("combined_usage_object") + ), + ) + + id = response_obj.get("id", kwargs.get("litellm_call_id")) + + _model_id = metadata.get("model_info", {}).get("id", "") + _model_group = metadata.get("model_group", "") + + request_tags = StandardLoggingPayloadSetup._get_request_tags( + litellm_params=litellm_params, proxy_server_request=proxy_server_request + ) + + # cleanup timestamps + ( + start_time_float, + end_time_float, + completion_start_time_float, + ) = StandardLoggingPayloadSetup.cleanup_timestamps( + start_time=start_time, + end_time=end_time, + completion_start_time=completion_start_time, + ) + response_time = StandardLoggingPayloadSetup.get_response_time( + start_time_float=start_time_float, + end_time_float=end_time_float, + completion_start_time_float=completion_start_time_float, + stream=kwargs.get("stream", False), + ) + # clean up litellm hidden params + clean_hidden_params = StandardLoggingPayloadSetup.get_hidden_params( + hidden_params + ) + + # clean up litellm metadata + clean_metadata = StandardLoggingPayloadSetup.get_standard_logging_metadata( + metadata=metadata, + litellm_params=litellm_params, + prompt_integration=kwargs.get("prompt_integration", None), + applied_guardrails=kwargs.get("applied_guardrails", None), + mcp_tool_call_metadata=kwargs.get("mcp_tool_call_metadata", None), + vector_store_request_metadata=kwargs.get( + "vector_store_request_metadata", None + ), + usage_object=usage.model_dump(), + proxy_server_request=proxy_server_request, + start_time=start_time, + response_id=id, + ) + _request_body = proxy_server_request.get("body", {}) + end_user_id = clean_metadata["user_api_key_end_user_id"] or _request_body.get( + "user", None + ) # maintain backwards compatibility with old request body check + + saved_cache_cost: float = 0.0 + if cache_hit is True: + id = f"{id}_cache_hit{time.time()}" # do not duplicate the request id + saved_cache_cost = ( + logging_obj._response_cost_calculator( + result=init_response_obj, cache_hit=False # type: ignore + ) + or 0.0 + ) + + ## Get model cost information ## + base_model = _get_base_model_from_metadata(model_call_details=kwargs) + custom_pricing = use_custom_pricing_for_model(litellm_params=litellm_params) + + model_cost_information = StandardLoggingPayloadSetup.get_model_cost_information( + base_model=base_model, + custom_pricing=custom_pricing, + custom_llm_provider=kwargs.get("custom_llm_provider"), + init_response_obj=init_response_obj, + ) + response_cost: float = kwargs.get("response_cost", 0) or 0.0 + + error_information = StandardLoggingPayloadSetup.get_error_information( + original_exception=original_exception, + ) + + ## get final response object ## + final_response_obj = StandardLoggingPayloadSetup.get_final_response_obj( + response_obj=response_obj, + init_response_obj=init_response_obj, + kwargs=kwargs, + ) + + stream: Optional[bool] = None + if ( + kwargs.get("complete_streaming_response") is not None + or kwargs.get("async_complete_streaming_response") is not None + ) and kwargs.get("stream") is True: + stream = True + + # Reconstruct full model name with provider prefix for logging + # This ensures Bedrock models like "us.anthropic.claude-3-5-sonnet-20240620-v1:0" + # are logged as "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0" + custom_llm_provider = cast(Optional[str], kwargs.get("custom_llm_provider")) + model_name = reconstruct_model_name( + kwargs.get("model", "") or "", custom_llm_provider, metadata + ) + + payload: StandardLoggingPayload = StandardLoggingPayload( + id=str(id), + trace_id=StandardLoggingPayloadSetup._get_standard_logging_payload_trace_id( + logging_obj=logging_obj, + litellm_params=litellm_params, + ), + call_type=call_type or "", + cache_hit=cache_hit, + stream=stream, + status=status, + status_fields=_get_status_fields( + status=status, + guardrail_information=metadata.get( + "standard_logging_guardrail_information", None + ), + error_str=error_str, + ), + custom_llm_provider=custom_llm_provider, + saved_cache_cost=saved_cache_cost, + startTime=start_time_float, + endTime=end_time_float, + completionStartTime=completion_start_time_float, + response_time=response_time, + model=model_name, + metadata=clean_metadata, + cache_key=clean_hidden_params["cache_key"], + response_cost=response_cost, + cost_breakdown=logging_obj.cost_breakdown, + total_tokens=usage.total_tokens, + prompt_tokens=usage.prompt_tokens, + completion_tokens=usage.completion_tokens, + request_tags=request_tags, + end_user=end_user_id or "", + api_base=StandardLoggingPayloadSetup.strip_trailing_slash( + litellm_params.get("api_base", "") + ) + or "", + model_group=_model_group, + model_id=_model_id, + requester_ip_address=clean_metadata.get("requester_ip_address", None), + user_agent=clean_metadata.get("user_agent", None), + messages=StandardLoggingPayloadSetup.append_system_prompt_messages( + kwargs=kwargs, messages=kwargs.get("messages") + ), + response=final_response_obj, + model_parameters=ModelParamHelper.get_standard_logging_model_parameters( + kwargs.get("optional_params", None) or {} + ), + hidden_params=clean_hidden_params, + model_map_information=model_cost_information, + error_str=error_str, + error_information=error_information, + response_cost_failure_debug_info=kwargs.get( + "response_cost_failure_debug_information" + ), + guardrail_information=metadata.get( + "standard_logging_guardrail_information", None + ), + standard_built_in_tools_params=standard_built_in_tools_params, + ) + + # emit_standard_logging_payload(payload) - Moved to success_handler to prevent double emitting + + return payload + except Exception as e: + verbose_logger.exception( + "Error creating standard logging object - {}".format(str(e)) + ) + return None + + +def emit_standard_logging_payload(payload: StandardLoggingPayload): + if os.getenv("LITELLM_PRINT_STANDARD_LOGGING_PAYLOAD"): + print(json.dumps(payload, indent=4)) # noqa + + +def get_standard_logging_metadata( + metadata: Optional[Dict[str, Any]], +) -> StandardLoggingMetadata: + """ + Clean and filter the metadata dictionary to include only the specified keys in StandardLoggingMetadata. + + Args: + metadata (Optional[Dict[str, Any]]): The original metadata dictionary. + + Returns: + StandardLoggingMetadata: A StandardLoggingMetadata object containing the cleaned metadata. + + Note: + - If the input metadata is None or not a dictionary, an empty StandardLoggingMetadata object is returned. + - If 'user_api_key' is present in metadata and is a valid SHA256 hash, it's stored as 'user_api_key_hash'. + """ + # Initialize with default values + clean_metadata = StandardLoggingMetadata( + user_api_key_hash=None, + user_api_key_alias=None, + user_api_key_spend=None, + user_api_key_max_budget=None, + user_api_key_budget_reset_at=None, + user_api_key_team_id=None, + user_api_key_org_id=None, + user_api_key_project_id=None, + user_api_key_user_id=None, + user_api_key_user_email=None, + user_api_key_team_alias=None, + spend_logs_metadata=None, + requester_ip_address=None, + user_agent=None, + requester_metadata=None, + user_api_key_end_user_id=None, + prompt_management_metadata=None, + applied_guardrails=None, + mcp_tool_call_metadata=None, + vector_store_request_metadata=None, + usage_object=None, + requester_custom_headers=None, + user_api_key_request_route=None, + cold_storage_object_key=None, + user_api_key_auth_metadata=None, + team_alias=None, + team_id=None, + ) + if isinstance(metadata, dict): + # Update the clean_metadata with values from input metadata that match StandardLoggingMetadata fields + for key in StandardLoggingMetadata.__annotations__.keys(): + if key in metadata: + clean_metadata[key] = metadata[key] # type: ignore + + if metadata.get("user_api_key") is not None: + if is_valid_sha256_hash(str(metadata.get("user_api_key"))): + clean_metadata["user_api_key_hash"] = metadata.get( + "user_api_key" + ) # this is the hash + return clean_metadata + + +def scrub_sensitive_keys_in_metadata(litellm_params: Optional[dict]): + if litellm_params is None: + litellm_params = {} + + metadata = litellm_params.get("metadata", {}) or {} + + ## Extract provider-specific callable values (like langfuse_masking_function) + ## Store them separately so only the intended logger can access them + ## This prevents callables from leaking to other logging integrations + if "langfuse_masking_function" in metadata: + masking_fn = metadata.pop("langfuse_masking_function", None) + if callable(masking_fn): + litellm_params["_langfuse_masking_function"] = masking_fn + litellm_params["metadata"] = metadata + + ## check user_api_key_metadata for sensitive logging keys + cleaned_user_api_key_metadata = {} + if "user_api_key_metadata" in metadata and isinstance( + metadata["user_api_key_metadata"], dict + ): + for k, v in metadata["user_api_key_metadata"].items(): + if k == "logging": # prevent logging user logging keys + cleaned_user_api_key_metadata[ + k + ] = "scrubbed_by_litellm_for_sensitive_keys" + else: + cleaned_user_api_key_metadata[k] = v + + metadata["user_api_key_metadata"] = cleaned_user_api_key_metadata + litellm_params["metadata"] = metadata + + return litellm_params + + +# integration helper function +def modify_integration(integration_name, integration_params): + global supabaseClient + if integration_name == "supabase": + if "table_name" in integration_params: + Supabase.supabase_table_name = integration_params["table_name"] + + +@lru_cache(maxsize=16) +def _get_traceback_str_for_error(error_str: str) -> str: + """ + function wrapped with lru_cache to limit the number of times `traceback.format_exc()` is called + """ + return traceback.format_exc() + + +from decimal import Decimal + +# used for unit testing +from typing import Any, Dict, List, Optional, Union + + +def create_dummy_standard_logging_payload() -> StandardLoggingPayload: + # First create the nested objects with proper typing + model_info = StandardLoggingModelInformation( + model_map_key="gpt-3.5-turbo", model_map_value=None + ) + + metadata = StandardLoggingMetadata( # type: ignore + user_api_key_hash=str("test_hash"), + user_api_key_alias=str("test_alias"), + user_api_key_team_id=str("test_team"), + user_api_key_user_id=str("test_user"), + user_api_key_team_alias=str("test_team_alias"), + user_api_key_org_id=None, + spend_logs_metadata=None, + requester_ip_address=str("127.0.0.1"), + requester_metadata=None, + user_api_key_end_user_id=str("test_end_user"), + ) + + hidden_params = StandardLoggingHiddenParams( + model_id=None, + cache_key=None, + api_base=None, + response_cost=None, + additional_headers=None, + litellm_overhead_time_ms=None, + batch_models=None, + litellm_model_name=None, + usage_object=None, + ) + + # Convert numeric values to appropriate types + response_cost = Decimal("0.1") + start_time = Decimal("1234567890.0") + end_time = Decimal("1234567891.0") + completion_start_time = Decimal("1234567890.5") + saved_cache_cost = Decimal("0.0") + + # Create messages and response with proper typing + messages: List[Dict[str, str]] = [{"role": "user", "content": "Hello, world!"}] + response: Dict[str, List[Dict[str, Dict[str, str]]]] = { + "choices": [{"message": {"content": "Hi there!"}}] + } + + # Main payload initialization + return StandardLoggingPayload( # type: ignore + id=str("test_id"), + call_type=str("completion"), + stream=bool(False), + response_cost=response_cost, + response_cost_failure_debug_info=None, + status=str("success"), + total_tokens=int( + DEFAULT_MOCK_RESPONSE_PROMPT_TOKEN_COUNT + + DEFAULT_MOCK_RESPONSE_COMPLETION_TOKEN_COUNT + ), + prompt_tokens=int(DEFAULT_MOCK_RESPONSE_PROMPT_TOKEN_COUNT), + completion_tokens=int(DEFAULT_MOCK_RESPONSE_COMPLETION_TOKEN_COUNT), + startTime=start_time, + endTime=end_time, + completionStartTime=completion_start_time, + model_map_information=model_info, + model=str("gpt-3.5-turbo"), + model_id=str("model-123"), + model_group=str("openai-gpt"), + custom_llm_provider=str("openai"), + api_base=str("https://api.openai.com"), + metadata=metadata, + cache_hit=bool(False), + cache_key=None, + saved_cache_cost=saved_cache_cost, + request_tags=[], + end_user=None, + requester_ip_address=str("127.0.0.1"), + messages=messages, + response=response, + error_str=None, + model_parameters={"stream": True}, + hidden_params=hidden_params, + ) diff --git a/litellm/proxy/hooks/proxy_track_cost_callback.py b/litellm/proxy/hooks/proxy_track_cost_callback.py index d903ce0d9d..815d64f22a 100644 --- a/litellm/proxy/hooks/proxy_track_cost_callback.py +++ b/litellm/proxy/hooks/proxy_track_cost_callback.py @@ -1,287 +1,295 @@ -import asyncio -import traceback -from datetime import datetime -from typing import Any, List, Optional, Union, cast - -import litellm -from litellm._logging import verbose_proxy_logger -from litellm.integrations.custom_logger import CustomLogger -from litellm.litellm_core_utils.core_helpers import ( - _get_parent_otel_span_from_kwargs, - get_litellm_metadata_from_kwargs, -) -from litellm.litellm_core_utils.litellm_logging import StandardLoggingPayloadSetup -from litellm.proxy._types import UserAPIKeyAuth -from litellm.proxy.auth.auth_checks import log_db_metrics -from litellm.proxy.auth.route_checks import RouteChecks -from litellm.proxy.utils import ProxyUpdateSpend -from litellm.types.utils import ( - StandardLoggingPayload, - StandardLoggingUserAPIKeyMetadata, -) -from litellm.utils import get_end_user_id_for_cost_tracking - - -class _ProxyDBLogger(CustomLogger): - async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): - await self._PROXY_track_cost_callback( - kwargs, response_obj, start_time, end_time - ) - - async def async_post_call_failure_hook( - self, - request_data: dict, - original_exception: Exception, - user_api_key_dict: UserAPIKeyAuth, - traceback_str: Optional[str] = None, - ): - request_route = user_api_key_dict.request_route - if _ProxyDBLogger._should_track_errors_in_db() is False: - return - elif request_route is not None and not RouteChecks.is_llm_api_route( - route=request_route - ): - return - - from litellm.proxy.proxy_server import proxy_logging_obj - - _metadata = dict( - StandardLoggingUserAPIKeyMetadata( - user_api_key_hash=user_api_key_dict.api_key, - user_api_key_alias=user_api_key_dict.key_alias, - user_api_key_spend=user_api_key_dict.spend, - user_api_key_max_budget=user_api_key_dict.max_budget, - user_api_key_budget_reset_at=( - user_api_key_dict.budget_reset_at.isoformat() - if user_api_key_dict.budget_reset_at - else None - ), - user_api_key_user_email=user_api_key_dict.user_email, - user_api_key_user_id=user_api_key_dict.user_id, - user_api_key_team_id=user_api_key_dict.team_id, - user_api_key_org_id=user_api_key_dict.org_id, - user_api_key_team_alias=user_api_key_dict.team_alias, - user_api_key_end_user_id=user_api_key_dict.end_user_id, - user_api_key_request_route=user_api_key_dict.request_route, - user_api_key_auth_metadata=user_api_key_dict.metadata, - ) - ) - _metadata["user_api_key"] = user_api_key_dict.api_key - _metadata["status"] = "failure" - _metadata["error_information"] = ( - StandardLoggingPayloadSetup.get_error_information( - original_exception=original_exception, - traceback_str=traceback_str, - ) - ) - - existing_metadata: dict = request_data.get("metadata", None) or {} - existing_metadata.update(_metadata) - - if "litellm_params" not in request_data: - request_data["litellm_params"] = {} - - existing_litellm_params = request_data.get("litellm_params", {}) - existing_litellm_metadata = existing_litellm_params.get("metadata", {}) or {} - - # Preserve tags from existing metadata - if existing_litellm_metadata.get("tags"): - existing_metadata["tags"] = existing_litellm_metadata.get("tags") - - request_data["litellm_params"]["proxy_server_request"] = ( - request_data.get("proxy_server_request") or existing_litellm_params.get("proxy_server_request") or {} - ) - request_data["litellm_params"]["metadata"] = existing_metadata - - # Preserve model name and custom_llm_provider - if "model" not in request_data: - request_data["model"] = existing_litellm_params.get("model") or request_data.get("model", "") - if "custom_llm_provider" not in request_data: - request_data["custom_llm_provider"] = existing_litellm_params.get("custom_llm_provider") or request_data.get("custom_llm_provider", "") - - await proxy_logging_obj.db_spend_update_writer.update_database( - token=user_api_key_dict.api_key, - response_cost=0.0, - user_id=user_api_key_dict.user_id, - end_user_id=user_api_key_dict.end_user_id, - team_id=user_api_key_dict.team_id, - kwargs=request_data, - completion_response=original_exception, - start_time=datetime.now(), - end_time=datetime.now(), - org_id=user_api_key_dict.org_id, - ) - - @log_db_metrics - async def _PROXY_track_cost_callback( - self, - kwargs, # kwargs to completion - completion_response: Optional[ - Union[litellm.ModelResponse, Any] - ], # response from completion - start_time=None, - end_time=None, # start/end time for completion - ): - from litellm.proxy.proxy_server import proxy_logging_obj, update_cache - - verbose_proxy_logger.debug("INSIDE _PROXY_track_cost_callback") - try: - verbose_proxy_logger.debug( - f"kwargs stream: {kwargs.get('stream', None)} + complete streaming response: {kwargs.get('complete_streaming_response', None)}" - ) - parent_otel_span = _get_parent_otel_span_from_kwargs(kwargs=kwargs) - litellm_params = kwargs.get("litellm_params", {}) or {} - end_user_id = get_end_user_id_for_cost_tracking(litellm_params) - metadata = get_litellm_metadata_from_kwargs(kwargs=kwargs) - user_id = cast(Optional[str], metadata.get("user_api_key_user_id", None)) - team_id = cast(Optional[str], metadata.get("user_api_key_team_id", None)) - org_id = cast(Optional[str], metadata.get("user_api_key_org_id", None)) - key_alias = cast(Optional[str], metadata.get("user_api_key_alias", None)) - end_user_max_budget = metadata.get("user_api_end_user_max_budget", None) - sl_object: Optional[StandardLoggingPayload] = kwargs.get( - "standard_logging_object", None - ) - response_cost = ( - sl_object.get("response_cost", None) - if sl_object is not None - else kwargs.get("response_cost", None) - ) - tags: Optional[List[str]] = ( - sl_object.get("request_tags", None) if sl_object is not None else None - ) - - if response_cost is not None: - user_api_key = metadata.get("user_api_key", None) - if kwargs.get("cache_hit", False) is True: - response_cost = 0.0 - verbose_proxy_logger.debug( - f"Cache Hit: response_cost {response_cost}, for user_id {user_id}" - ) - - verbose_proxy_logger.debug( - f"user_api_key {user_api_key}, user_id {user_id}, team_id {team_id}, end_user_id {end_user_id}" - ) - if _should_track_cost_callback( - user_api_key=user_api_key, - user_id=user_id, - team_id=team_id, - end_user_id=end_user_id, - ): - ## UPDATE DATABASE - await proxy_logging_obj.db_spend_update_writer.update_database( - token=user_api_key, - response_cost=response_cost, - user_id=user_id, - end_user_id=end_user_id, - team_id=team_id, - kwargs=kwargs, - completion_response=completion_response, - start_time=start_time, - end_time=end_time, - org_id=org_id, - ) - - # update cache - asyncio.create_task( - update_cache( - token=user_api_key, - user_id=user_id, - end_user_id=end_user_id, - response_cost=response_cost, - team_id=team_id, - parent_otel_span=parent_otel_span, - tags=tags, - ) - ) - - await proxy_logging_obj.slack_alerting_instance.customer_spend_alert( - token=user_api_key, - key_alias=key_alias, - end_user_id=end_user_id, - response_cost=response_cost, - max_budget=end_user_max_budget, - ) - else: - # Non-model call types (health checks, afile_delete) have no model or standard_logging_object. - # Use .get() for "stream" to avoid KeyError on health checks. - if sl_object is None and not kwargs.get("model"): - verbose_proxy_logger.warning( - "Cost tracking - skipping, no standard_logging_object and no model for call_type=%s", - kwargs.get("call_type", "unknown"), - ) - return - if kwargs.get("stream") is not True or ( - kwargs.get("stream") is True and "complete_streaming_response" in kwargs - ): - if sl_object is not None: - cost_tracking_failure_debug_info: Union[dict, str] = ( - sl_object["response_cost_failure_debug_info"] # type: ignore - or "response_cost_failure_debug_info is None in standard_logging_object" - ) - else: - cost_tracking_failure_debug_info = ( - "standard_logging_object not found" - ) - model = kwargs.get("model") - raise Exception( - f"Cost tracking failed for model={model}.\nDebug info - {cost_tracking_failure_debug_info}\nAdd custom pricing - https://docs.litellm.ai/docs/proxy/custom_pricing" - ) - except Exception as e: - error_msg = f"Error in tracking cost callback - {str(e)}\n Traceback:{traceback.format_exc()}" - model = kwargs.get("model", "") - metadata = get_litellm_metadata_from_kwargs(kwargs=kwargs) - litellm_metadata = kwargs.get("litellm_params", {}).get( - "litellm_metadata", {} - ) - old_metadata = kwargs.get("litellm_params", {}).get("metadata", {}) - call_type = kwargs.get("call_type", "") - error_msg += f"\n Args to _PROXY_track_cost_callback\n model: {model}\n chosen_metadata: {metadata}\n litellm_metadata: {litellm_metadata}\n old_metadata: {old_metadata}\n call_type: {call_type}\n" - asyncio.create_task( - proxy_logging_obj.failed_tracking_alert( - error_message=error_msg, - failing_model=model, - ) - ) - - verbose_proxy_logger.exception( - "Error in tracking cost callback - %s", str(e) - ) - - @staticmethod - def _should_track_errors_in_db(): - """ - Returns True if errors should be tracked in the database - - By default, errors are tracked in the database - - If users want to disable error tracking, they can set the disable_error_logs flag in the general_settings - """ - from litellm.proxy.proxy_server import general_settings - - if general_settings.get("disable_error_logs") is True: - return False - return - - -def _should_track_cost_callback( - user_api_key: Optional[str], - user_id: Optional[str], - team_id: Optional[str], - end_user_id: Optional[str], -) -> bool: - """ - Determine if the cost callback should be tracked based on the kwargs - """ - - # don't run track cost callback if user opted into disabling spend - if ProxyUpdateSpend.disable_spend_updates() is True: - return False - - if ( - user_api_key is not None - or user_id is not None - or team_id is not None - or end_user_id is not None - ): - return True - return False +import asyncio +import traceback +from datetime import datetime +from typing import Any, List, Optional, Union, cast + +import litellm +from litellm._logging import verbose_proxy_logger +from litellm.integrations.custom_logger import CustomLogger +from litellm.litellm_core_utils.core_helpers import ( + _get_parent_otel_span_from_kwargs, + get_litellm_metadata_from_kwargs, +) +from litellm.litellm_core_utils.litellm_logging import StandardLoggingPayloadSetup +from litellm.proxy._types import UserAPIKeyAuth +from litellm.proxy.auth.auth_checks import log_db_metrics +from litellm.proxy.auth.route_checks import RouteChecks +from litellm.proxy.utils import ProxyUpdateSpend +from litellm.types.utils import ( + StandardLoggingPayload, + StandardLoggingUserAPIKeyMetadata, +) +from litellm.utils import get_end_user_id_for_cost_tracking + + +class _ProxyDBLogger(CustomLogger): + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + await self._PROXY_track_cost_callback( + kwargs, response_obj, start_time, end_time + ) + + async def async_post_call_failure_hook( + self, + request_data: dict, + original_exception: Exception, + user_api_key_dict: UserAPIKeyAuth, + traceback_str: Optional[str] = None, + ): + request_route = user_api_key_dict.request_route + if _ProxyDBLogger._should_track_errors_in_db() is False: + return + elif request_route is not None and not RouteChecks.is_llm_api_route( + route=request_route + ): + return + + from litellm.proxy.proxy_server import proxy_logging_obj + + _metadata = dict( + StandardLoggingUserAPIKeyMetadata( + user_api_key_hash=user_api_key_dict.api_key, + user_api_key_alias=user_api_key_dict.key_alias, + user_api_key_spend=user_api_key_dict.spend, + user_api_key_max_budget=user_api_key_dict.max_budget, + user_api_key_budget_reset_at=( + user_api_key_dict.budget_reset_at.isoformat() + if user_api_key_dict.budget_reset_at + else None + ), + user_api_key_user_email=user_api_key_dict.user_email, + user_api_key_user_id=user_api_key_dict.user_id, + user_api_key_team_id=user_api_key_dict.team_id, + user_api_key_org_id=user_api_key_dict.org_id, + user_api_key_project_id=user_api_key_dict.project_id, + user_api_key_team_alias=user_api_key_dict.team_alias, + user_api_key_end_user_id=user_api_key_dict.end_user_id, + user_api_key_request_route=user_api_key_dict.request_route, + user_api_key_auth_metadata=user_api_key_dict.metadata, + ) + ) + _metadata["user_api_key"] = user_api_key_dict.api_key + _metadata["status"] = "failure" + _metadata[ + "error_information" + ] = StandardLoggingPayloadSetup.get_error_information( + original_exception=original_exception, + traceback_str=traceback_str, + ) + + existing_metadata: dict = request_data.get("metadata", None) or {} + existing_metadata.update(_metadata) + + if "litellm_params" not in request_data: + request_data["litellm_params"] = {} + + existing_litellm_params = request_data.get("litellm_params", {}) + existing_litellm_metadata = existing_litellm_params.get("metadata", {}) or {} + + # Preserve tags from existing metadata + if existing_litellm_metadata.get("tags"): + existing_metadata["tags"] = existing_litellm_metadata.get("tags") + + request_data["litellm_params"]["proxy_server_request"] = ( + request_data.get("proxy_server_request") + or existing_litellm_params.get("proxy_server_request") + or {} + ) + request_data["litellm_params"]["metadata"] = existing_metadata + + # Preserve model name and custom_llm_provider + if "model" not in request_data: + request_data["model"] = existing_litellm_params.get( + "model" + ) or request_data.get("model", "") + if "custom_llm_provider" not in request_data: + request_data["custom_llm_provider"] = existing_litellm_params.get( + "custom_llm_provider" + ) or request_data.get("custom_llm_provider", "") + + await proxy_logging_obj.db_spend_update_writer.update_database( + token=user_api_key_dict.api_key, + response_cost=0.0, + user_id=user_api_key_dict.user_id, + end_user_id=user_api_key_dict.end_user_id, + team_id=user_api_key_dict.team_id, + kwargs=request_data, + completion_response=original_exception, + start_time=datetime.now(), + end_time=datetime.now(), + org_id=user_api_key_dict.org_id, + ) + + @log_db_metrics + async def _PROXY_track_cost_callback( + self, + kwargs, # kwargs to completion + completion_response: Optional[ + Union[litellm.ModelResponse, Any] + ], # response from completion + start_time=None, + end_time=None, # start/end time for completion + ): + from litellm.proxy.proxy_server import proxy_logging_obj, update_cache + + verbose_proxy_logger.debug("INSIDE _PROXY_track_cost_callback") + try: + verbose_proxy_logger.debug( + f"kwargs stream: {kwargs.get('stream', None)} + complete streaming response: {kwargs.get('complete_streaming_response', None)}" + ) + parent_otel_span = _get_parent_otel_span_from_kwargs(kwargs=kwargs) + litellm_params = kwargs.get("litellm_params", {}) or {} + end_user_id = get_end_user_id_for_cost_tracking(litellm_params) + metadata = get_litellm_metadata_from_kwargs(kwargs=kwargs) + user_id = cast(Optional[str], metadata.get("user_api_key_user_id", None)) + team_id = cast(Optional[str], metadata.get("user_api_key_team_id", None)) + org_id = cast(Optional[str], metadata.get("user_api_key_org_id", None)) + key_alias = cast(Optional[str], metadata.get("user_api_key_alias", None)) + end_user_max_budget = metadata.get("user_api_end_user_max_budget", None) + sl_object: Optional[StandardLoggingPayload] = kwargs.get( + "standard_logging_object", None + ) + response_cost = ( + sl_object.get("response_cost", None) + if sl_object is not None + else kwargs.get("response_cost", None) + ) + tags: Optional[List[str]] = ( + sl_object.get("request_tags", None) if sl_object is not None else None + ) + + if response_cost is not None: + user_api_key = metadata.get("user_api_key", None) + if kwargs.get("cache_hit", False) is True: + response_cost = 0.0 + verbose_proxy_logger.debug( + f"Cache Hit: response_cost {response_cost}, for user_id {user_id}" + ) + + verbose_proxy_logger.debug( + f"user_api_key {user_api_key}, user_id {user_id}, team_id {team_id}, end_user_id {end_user_id}" + ) + if _should_track_cost_callback( + user_api_key=user_api_key, + user_id=user_id, + team_id=team_id, + end_user_id=end_user_id, + ): + ## UPDATE DATABASE + await proxy_logging_obj.db_spend_update_writer.update_database( + token=user_api_key, + response_cost=response_cost, + user_id=user_id, + end_user_id=end_user_id, + team_id=team_id, + kwargs=kwargs, + completion_response=completion_response, + start_time=start_time, + end_time=end_time, + org_id=org_id, + ) + + # update cache + asyncio.create_task( + update_cache( + token=user_api_key, + user_id=user_id, + end_user_id=end_user_id, + response_cost=response_cost, + team_id=team_id, + parent_otel_span=parent_otel_span, + tags=tags, + ) + ) + + await proxy_logging_obj.slack_alerting_instance.customer_spend_alert( + token=user_api_key, + key_alias=key_alias, + end_user_id=end_user_id, + response_cost=response_cost, + max_budget=end_user_max_budget, + ) + else: + # Non-model call types (health checks, afile_delete) have no model or standard_logging_object. + # Use .get() for "stream" to avoid KeyError on health checks. + if sl_object is None and not kwargs.get("model"): + verbose_proxy_logger.warning( + "Cost tracking - skipping, no standard_logging_object and no model for call_type=%s", + kwargs.get("call_type", "unknown"), + ) + return + if kwargs.get("stream") is not True or ( + kwargs.get("stream") is True + and "complete_streaming_response" in kwargs + ): + if sl_object is not None: + cost_tracking_failure_debug_info: Union[dict, str] = ( + sl_object["response_cost_failure_debug_info"] # type: ignore + or "response_cost_failure_debug_info is None in standard_logging_object" + ) + else: + cost_tracking_failure_debug_info = ( + "standard_logging_object not found" + ) + model = kwargs.get("model") + raise Exception( + f"Cost tracking failed for model={model}.\nDebug info - {cost_tracking_failure_debug_info}\nAdd custom pricing - https://docs.litellm.ai/docs/proxy/custom_pricing" + ) + except Exception as e: + error_msg = f"Error in tracking cost callback - {str(e)}\n Traceback:{traceback.format_exc()}" + model = kwargs.get("model", "") + metadata = get_litellm_metadata_from_kwargs(kwargs=kwargs) + litellm_metadata = kwargs.get("litellm_params", {}).get( + "litellm_metadata", {} + ) + old_metadata = kwargs.get("litellm_params", {}).get("metadata", {}) + call_type = kwargs.get("call_type", "") + error_msg += f"\n Args to _PROXY_track_cost_callback\n model: {model}\n chosen_metadata: {metadata}\n litellm_metadata: {litellm_metadata}\n old_metadata: {old_metadata}\n call_type: {call_type}\n" + asyncio.create_task( + proxy_logging_obj.failed_tracking_alert( + error_message=error_msg, + failing_model=model, + ) + ) + + verbose_proxy_logger.exception( + "Error in tracking cost callback - %s", str(e) + ) + + @staticmethod + def _should_track_errors_in_db(): + """ + Returns True if errors should be tracked in the database + + By default, errors are tracked in the database + + If users want to disable error tracking, they can set the disable_error_logs flag in the general_settings + """ + from litellm.proxy.proxy_server import general_settings + + if general_settings.get("disable_error_logs") is True: + return False + return + + +def _should_track_cost_callback( + user_api_key: Optional[str], + user_id: Optional[str], + team_id: Optional[str], + end_user_id: Optional[str], +) -> bool: + """ + Determine if the cost callback should be tracked based on the kwargs + """ + + # don't run track cost callback if user opted into disabling spend + if ProxyUpdateSpend.disable_spend_updates() is True: + return False + + if ( + user_api_key is not None + or user_id is not None + or team_id is not None + or end_user_id is not None + ): + return True + return False diff --git a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py index 56b513554a..2104a60604 100644 --- a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py +++ b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py @@ -1,2744 +1,2745 @@ -import ast -import asyncio -import copy -import json -import traceback -from base64 import b64encode -from datetime import datetime -from typing import Any, Dict, List, Optional, Tuple, Union, cast -from urllib.parse import urlencode, urlparse - -import httpx -from fastapi import ( - APIRouter, - Depends, - FastAPI, - HTTPException, - Request, - Response, - UploadFile, - WebSocket, - status, -) -from fastapi.responses import StreamingResponse -from starlette.datastructures import UploadFile as StarletteUploadFile -from starlette.websockets import WebSocketState -from websockets.asyncio.client import connect -from websockets.exceptions import ( - ConnectionClosedError, - ConnectionClosedOK, - InvalidStatus, -) - -import litellm -from litellm._logging import verbose_proxy_logger -from litellm._uuid import uuid -from litellm.constants import MAXIMUM_TRACEBACK_LINES_TO_LOG -from litellm.integrations.custom_logger import CustomLogger -from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj -from litellm.litellm_core_utils.safe_json_dumps import safe_dumps -from litellm.llms.custom_httpx.http_handler import get_async_httpx_client -from litellm.passthrough import BasePassthroughUtils -from litellm.proxy._types import ( - ConfigFieldInfo, - ConfigFieldUpdate, - LiteLLMRoutes, - PassThroughEndpointResponse, - PassThroughGenericEndpoint, - ProxyException, - UserAPIKeyAuth, -) -from litellm.proxy.auth.user_api_key_auth import user_api_key_auth -from litellm.proxy.common_request_processing import ProxyBaseLLMRequestProcessing -from litellm.proxy.common_utils.http_parsing_utils import _read_request_body -from litellm.proxy.utils import get_server_root_path -from litellm.secret_managers.main import get_secret_str -from litellm.types.llms.custom_http import httpxSpecialProvider -from litellm.types.passthrough_endpoints.pass_through_endpoints import ( - EndpointType, - PassthroughStandardLoggingPayload, -) -from litellm.types.utils import StandardLoggingUserAPIKeyMetadata - -from .streaming_handler import PassThroughStreamingHandler -from .success_handler import PassThroughEndpointLogging - -router = APIRouter() - -pass_through_endpoint_logging = PassThroughEndpointLogging() - -# Global registry to track registered pass-through routes and prevent memory leaks -_registered_pass_through_routes: Dict[str, Dict[str, Union[str, Dict[str, Any]]]] = {} - - -def get_response_body(response: httpx.Response) -> Optional[dict]: - try: - return response.json() - except Exception: - return None - - -async def set_env_variables_in_header(custom_headers: Optional[dict]) -> Optional[dict]: - """ - checks if any headers on config.yaml are defined as os.environ/COHERE_API_KEY etc - - only runs for headers defined on config.yaml - - example header can be - - {"Authorization": "Bearer os.environ/COHERE_API_KEY"} - """ - if custom_headers is None: - return None - headers = {} - for key, value in custom_headers.items(): - # langfuse Api requires base64 encoded headers - it's simpleer to just ask litellm users to set their langfuse public and secret keys - # we can then get the b64 encoded keys here - if key == "LANGFUSE_PUBLIC_KEY" or key == "LANGFUSE_SECRET_KEY": - # langfuse requires b64 encoded headers - we construct that here - _langfuse_public_key = custom_headers["LANGFUSE_PUBLIC_KEY"] - _langfuse_secret_key = custom_headers["LANGFUSE_SECRET_KEY"] - if isinstance( - _langfuse_public_key, str - ) and _langfuse_public_key.startswith("os.environ/"): - _langfuse_public_key = get_secret_str(_langfuse_public_key) - if isinstance( - _langfuse_secret_key, str - ) and _langfuse_secret_key.startswith("os.environ/"): - _langfuse_secret_key = get_secret_str(_langfuse_secret_key) - headers["Authorization"] = "Basic " + b64encode( - f"{_langfuse_public_key}:{_langfuse_secret_key}".encode("utf-8") - ).decode("ascii") - else: - # for all other headers - headers[key] = value - if isinstance(value, str) and "os.environ/" in value: - verbose_proxy_logger.debug( - "pass through endpoint - looking up 'os.environ/' variable" - ) - # get string section that is os.environ/ - start_index = value.find("os.environ/") - _variable_name = value[start_index:] - - verbose_proxy_logger.debug( - "pass through endpoint - getting secret for variable name: %s", - _variable_name, - ) - _secret_value = get_secret_str(_variable_name) - if _secret_value is not None: - new_value = value.replace(_variable_name, _secret_value) - headers[key] = new_value - return headers - - -async def chat_completion_pass_through_endpoint( # noqa: PLR0915 - fastapi_response: Response, - request: Request, - adapter_id: str, - user_api_key_dict: UserAPIKeyAuth, -): - from litellm.proxy.proxy_server import ( - add_litellm_data_to_request, - general_settings, - llm_router, - proxy_config, - proxy_logging_obj, - user_api_base, - user_max_tokens, - user_model, - user_request_timeout, - user_temperature, - version, - ) - - data = {} - try: - body = await request.body() - body_str = body.decode() - try: - data = ast.literal_eval(body_str) - except Exception: - data = json.loads(body_str) - - data["adapter_id"] = adapter_id - - verbose_proxy_logger.debug( - "Request received by LiteLLM:\n{}".format(json.dumps(data, indent=4)), - ) - data["model"] = ( - general_settings.get("completion_model", None) # server default - or user_model # model name passed via cli args - or data.get("model", None) # default passed in http request - ) - if user_model: - data["model"] = user_model - - data = await add_litellm_data_to_request( - data=data, # type: ignore - request=request, - general_settings=general_settings, - user_api_key_dict=user_api_key_dict, - version=version, - proxy_config=proxy_config, - ) - - # override with user settings, these are params passed via cli - if user_temperature: - data["temperature"] = user_temperature - if user_request_timeout: - data["request_timeout"] = user_request_timeout - if user_max_tokens: - data["max_tokens"] = user_max_tokens - if user_api_base: - data["api_base"] = user_api_base - - ### MODEL ALIAS MAPPING ### - # check if model name in model alias map - # get the actual model name - if data["model"] in litellm.model_alias_map: - data["model"] = litellm.model_alias_map[data["model"]] - - # Check key-specific aliases - if ( - isinstance(data["model"], str) - and user_api_key_dict.aliases - and isinstance(user_api_key_dict.aliases, dict) - and data["model"] in user_api_key_dict.aliases - ): - data["model"] = user_api_key_dict.aliases[data["model"]] - - ### CALL HOOKS ### - modify incoming data before calling the model - data = await proxy_logging_obj.pre_call_hook( # type: ignore - user_api_key_dict=user_api_key_dict, data=data, call_type="text_completion" - ) - - ### ROUTE THE REQUESTs ### - router_model_names = llm_router.model_names if llm_router is not None else [] - # skip router if user passed their key - if "api_key" in data: - llm_response = asyncio.create_task(litellm.aadapter_completion(**data)) - elif ( - llm_router is not None and data["model"] in router_model_names - ): # model in router model list - llm_response = asyncio.create_task(llm_router.aadapter_completion(**data)) - elif ( - llm_router is not None - and llm_router.model_group_alias is not None - and data["model"] in llm_router.model_group_alias - ): # model set in model_group_alias - llm_response = asyncio.create_task(llm_router.aadapter_completion(**data)) - elif llm_router is not None and llm_router.has_model_id( - data["model"] - ): # model in router model list - llm_response = asyncio.create_task(llm_router.aadapter_completion(**data)) - elif ( - llm_router is not None - and data["model"] not in router_model_names - and ( - llm_router.default_deployment is not None - or len(llm_router.pattern_router.patterns) > 0 - ) - ): # check for wildcard routes or default deployment before checking deployment_names - llm_response = asyncio.create_task(llm_router.aadapter_completion(**data)) - elif ( - llm_router is not None and data["model"] in llm_router.deployment_names - ): # model in router deployments, calling a specific deployment on the router (lowest priority) - llm_response = asyncio.create_task( - llm_router.aadapter_completion(**data, specific_deployment=True) - ) - elif user_model is not None: # `litellm --model ` - llm_response = asyncio.create_task(litellm.aadapter_completion(**data)) - else: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail={ - "error": "completion: Invalid model name passed in model=" - + data.get("model", "") - }, - ) - - # Await the llm_response task - response = await llm_response - - hidden_params = getattr(response, "_hidden_params", {}) or {} - model_id = hidden_params.get("model_id", None) or "" - cache_key = hidden_params.get("cache_key", None) or "" - api_base = hidden_params.get("api_base", None) or "" - response_cost = hidden_params.get("response_cost", None) or "" - - ### ALERTING ### - asyncio.create_task( - proxy_logging_obj.update_request_status( - litellm_call_id=data.get("litellm_call_id", ""), status="success" - ) - ) - - verbose_proxy_logger.debug("final response: %s", response) - - fastapi_response.headers.update( - ProxyBaseLLMRequestProcessing.get_custom_headers( - user_api_key_dict=user_api_key_dict, - model_id=model_id, - cache_key=cache_key, - api_base=api_base, - version=version, - response_cost=response_cost, - ) - ) - - verbose_proxy_logger.debug("\nResponse from Litellm:\n{}".format(response)) - return response - except Exception as e: - await proxy_logging_obj.post_call_failure_hook( - user_api_key_dict=user_api_key_dict, original_exception=e, request_data=data - ) - verbose_proxy_logger.exception( - "litellm.proxy.proxy_server.completion(): Exception occured - {}".format( - str(e) - ) - ) - error_msg = f"{str(e)}" - raise ProxyException( - message=getattr(e, "message", error_msg), - type=getattr(e, "type", "None"), - param=getattr(e, "param", "None"), - code=getattr(e, "status_code", 500), - ) - - -class HttpPassThroughEndpointHelpers(BasePassthroughUtils): - @staticmethod - def get_response_headers( - headers: httpx.Headers, - litellm_call_id: Optional[str] = None, - custom_headers: Optional[dict] = None, - ) -> dict: - excluded_headers = {"transfer-encoding", "content-encoding"} - - return_headers = { - key: value - for key, value in headers.items() - if key.lower() not in excluded_headers - } - if litellm_call_id: - return_headers["x-litellm-call-id"] = litellm_call_id - if custom_headers: - return_headers.update(custom_headers) - - return return_headers - - @staticmethod - def get_endpoint_type(url: str) -> EndpointType: - parsed_url = urlparse(url) - if ( - ("generateContent") in url - or ("streamGenerateContent") in url - or ("rawPredict") in url - or ("streamRawPredict") in url - ): - return EndpointType.VERTEX_AI - elif parsed_url.hostname == "api.anthropic.com": - return EndpointType.ANTHROPIC - elif ( - parsed_url.hostname == "api.openai.com" - or parsed_url.hostname == "openai.azure.com" - or (parsed_url.hostname and "openai.com" in parsed_url.hostname) - ): - return EndpointType.OPENAI - return EndpointType.GENERIC - - @staticmethod - async def _make_non_streaming_http_request( - request: Request, - async_client: httpx.AsyncClient, - url: str, - headers: dict, - requested_query_params: Optional[dict] = None, - custom_body: Optional[dict] = None, - ) -> httpx.Response: - """ - Make a non-streaming HTTP request - - If request is GET, don't include a JSON body - """ - if request.method == "GET": - response = await async_client.request( - method=request.method, - url=url, - headers=headers, - params=requested_query_params, - ) - else: - response = await async_client.request( - method=request.method, - url=url, - headers=headers, - params=requested_query_params, - json=custom_body, - ) - return response - - @staticmethod - async def non_streaming_http_request_handler( - request: Request, - async_client: httpx.AsyncClient, - url: httpx.URL, - headers: dict, - requested_query_params: Optional[dict] = None, - _parsed_body: Optional[dict] = None, - ) -> httpx.Response: - """ - Handle non-streaming HTTP requests - - Handles special cases when GET requests, multipart/form-data requests, and generic httpx requests - """ - if request.method == "GET": - response = await async_client.request( - method=request.method, - url=url, - headers=headers, - params=requested_query_params, - ) - elif HttpPassThroughEndpointHelpers.is_multipart(request) is True: - return await HttpPassThroughEndpointHelpers.make_multipart_http_request( - request=request, - async_client=async_client, - url=url, - headers=headers, - requested_query_params=requested_query_params, - ) - else: - # Generic httpx method - response = await async_client.request( - method=request.method, - url=url, - headers=headers, - params=requested_query_params, - json=_parsed_body, - ) - return response - - @staticmethod - def is_multipart(request: Request) -> bool: - """Check if the request is a multipart/form-data request""" - return "multipart/form-data" in request.headers.get("content-type", "") - - @staticmethod - async def _build_request_files_from_upload_file( - upload_file: Union[UploadFile, StarletteUploadFile], - ) -> Tuple[Optional[str], bytes, Optional[str]]: - """Build a request files dict from an UploadFile object""" - file_content = await upload_file.read() - return (upload_file.filename, file_content, upload_file.content_type) - - @staticmethod - async def make_multipart_http_request( - request: Request, - async_client: httpx.AsyncClient, - url: httpx.URL, - headers: dict, - requested_query_params: Optional[dict] = None, - ) -> httpx.Response: - """Process multipart/form-data requests, handling both files and form fields""" - form_data = await request.form() - files = {} - form_data_dict = {} - - for field_name, field_value in form_data.items(): - if isinstance(field_value, (StarletteUploadFile, UploadFile)): - files[ - field_name - ] = await HttpPassThroughEndpointHelpers._build_request_files_from_upload_file( - upload_file=field_value - ) - else: - form_data_dict[field_name] = field_value - - # Remove content-type header - httpx will set it correctly with the new boundary - # when it creates the multipart body from files/data parameters - headers_copy = headers.copy() - headers_copy.pop("content-type", None) - - response = await async_client.request( - method=request.method, - url=url, - headers=headers_copy, - params=requested_query_params, - files=files, - data=form_data_dict, - ) - return response - - @staticmethod - def _init_kwargs_for_pass_through_endpoint( - request: Request, - user_api_key_dict: UserAPIKeyAuth, - passthrough_logging_payload: PassthroughStandardLoggingPayload, - logging_obj: LiteLLMLoggingObj, - _parsed_body: Optional[dict] = None, - litellm_call_id: Optional[str] = None, - ) -> dict: - """ - Filter out litellm params from the request body - """ - from litellm.types.utils import all_litellm_params - - _parsed_body = _parsed_body or {} - - litellm_params_in_body = {} - for k in all_litellm_params: - if k in _parsed_body: - litellm_params_in_body[k] = _parsed_body.pop(k, None) - - _metadata = dict( - StandardLoggingUserAPIKeyMetadata( - user_api_key_hash=user_api_key_dict.api_key, - user_api_key_alias=user_api_key_dict.key_alias, - user_api_key_user_email=user_api_key_dict.user_email, - user_api_key_user_id=user_api_key_dict.user_id, - user_api_key_team_id=user_api_key_dict.team_id, - user_api_key_org_id=user_api_key_dict.org_id, - user_api_key_team_alias=user_api_key_dict.team_alias, - user_api_key_end_user_id=user_api_key_dict.end_user_id, - user_api_key_request_route=user_api_key_dict.request_route, - user_api_key_spend=user_api_key_dict.spend, - user_api_key_max_budget=user_api_key_dict.max_budget, - user_api_key_budget_reset_at=( - user_api_key_dict.budget_reset_at.isoformat() - if user_api_key_dict.budget_reset_at - else None - ), - user_api_key_auth_metadata=user_api_key_dict.metadata, - ) - ) - - _metadata["user_api_key"] = user_api_key_dict.api_key - - litellm_metadata = litellm_params_in_body.pop("litellm_metadata", None) - metadata = litellm_params_in_body.pop("metadata", None) - if litellm_metadata: - _metadata.update(litellm_metadata) - if metadata: - _metadata.update(metadata) - - _metadata = _update_metadata_with_tags_in_header( - request=request, - metadata=_metadata, - ) - - kwargs = { - "litellm_params": { - **litellm_params_in_body, # type: ignore - "metadata": _metadata, - "proxy_server_request": { - "url": str(request.url), - "method": request.method, - "body": copy.copy(_parsed_body), # use copy instead of deepcopy - "headers": request.headers, - }, - }, - "call_type": "pass_through_endpoint", - "litellm_call_id": litellm_call_id, - "passthrough_logging_payload": passthrough_logging_payload, - } - - logging_obj.model_call_details[ - "passthrough_logging_payload" - ] = passthrough_logging_payload - - return kwargs - - @staticmethod - def construct_target_url_with_subpath( - base_target: str, subpath: str, include_subpath: Optional[bool] - ) -> str: - """ - Helper function to construct the full target URL with subpath handling. - - Args: - base_target: The base target URL - subpath: The captured subpath from the request - include_subpath: Whether to include the subpath in the target URL - - Returns: - The constructed full target URL - """ - if not include_subpath: - return base_target - - if not subpath: - return base_target - - # Ensure base_target ends with / and subpath doesn't start with / - if not base_target.endswith("/"): - base_target = base_target + "/" - if subpath.startswith("/"): - subpath = subpath[1:] - - return base_target + subpath - - @staticmethod - def _update_stream_param_based_on_request_body( - parsed_body: dict, - stream: Optional[bool] = None, - ) -> Optional[bool]: - """ - If stream is provided in the request body, use it. - Otherwise, use the stream parameter passed to the `pass_through_request` function - """ - if "stream" in parsed_body: - return parsed_body.get("stream", stream) - return stream - - -async def pass_through_request( # noqa: PLR0915 - request: Request, - target: str, - custom_headers: dict, - user_api_key_dict: UserAPIKeyAuth, - custom_body: Optional[dict] = None, - forward_headers: Optional[bool] = False, - merge_query_params: Optional[bool] = False, - query_params: Optional[dict] = None, - stream: Optional[bool] = None, - cost_per_request: Optional[float] = None, - custom_llm_provider: Optional[str] = None, - guardrails_config: Optional[dict] = None, -): - """ - Pass through endpoint handler, makes the httpx request for pass-through endpoints and ensures logging hooks are called - - Args: - request: The incoming request - target: The target URL - custom_headers: The custom headers - user_api_key_dict: The user API key dictionary - custom_body: The custom body - forward_headers: Whether to forward headers - merge_query_params: Whether to merge query params - query_params: The query params - stream: Whether to stream the response - cost_per_request: Optional field - cost per request to the target endpoint - custom_llm_provider: Optional field - custom LLM provider for the endpoint - guardrails_config: Optional field - guardrails configuration for passthrough endpoint - """ - from litellm.litellm_core_utils.litellm_logging import Logging - from litellm.proxy.pass_through_endpoints.passthrough_guardrails import ( - PassthroughGuardrailHandler, - ) - from litellm.proxy.proxy_server import proxy_logging_obj - - ######################################################### - # Initialize variables - ######################################################### - litellm_call_id = str(uuid.uuid4()) - url: Optional[httpx.URL] = None - - # parsed request body - _parsed_body: Optional[dict] = None - # kwargs for pass through endpoint, contains metadata, litellm_params, call_type, litellm_call_id, passthrough_logging_payload - kwargs: Optional[dict] = None - - ######################################################### - try: - url = httpx.URL(target) - headers = custom_headers - headers = HttpPassThroughEndpointHelpers.forward_headers_from_request( - request_headers=dict(request.headers), - headers=headers, - forward_headers=forward_headers, - ) - - if merge_query_params: - # Create a new URL with the merged query params - url = url.copy_with( - query=urlencode( - HttpPassThroughEndpointHelpers.get_merged_query_parameters( - existing_url=url, - request_query_params=dict(request.query_params), - ) - ).encode("ascii") - ) - - endpoint_type: EndpointType = HttpPassThroughEndpointHelpers.get_endpoint_type( - str(url) - ) - - if custom_body: - _parsed_body = custom_body - else: - _parsed_body = await _read_request_body(request) - verbose_proxy_logger.debug( - "Pass through endpoint sending request to \nURL {}\nheaders: {}\nbody: {}\n".format( - url, headers, _parsed_body - ) - ) - - ### COLLECT GUARDRAILS FOR PASSTHROUGH ENDPOINT ### - # Passthrough endpoints are opt-in only for guardrails - # When enabled, collect guardrails from org/team/key levels + passthrough-specific - guardrails_to_run = PassthroughGuardrailHandler.collect_guardrails( - user_api_key_dict=user_api_key_dict, - passthrough_guardrails_config=guardrails_config, - ) - - # Add guardrails to metadata if any should run - if guardrails_to_run and len(guardrails_to_run) > 0: - if _parsed_body is None: - _parsed_body = {} - if "metadata" not in _parsed_body: - _parsed_body["metadata"] = {} - _parsed_body["metadata"]["guardrails"] = guardrails_to_run - verbose_proxy_logger.debug( - f"Added guardrails to passthrough request metadata: {guardrails_to_run}" - ) - - ## LOGGING OBJECT ## - initialize before pre_call_hook so guardrails can access it - start_time = datetime.now() - logging_obj = Logging( - model="unknown", - messages=[{"role": "user", "content": safe_dumps(_parsed_body)}], - stream=False, - call_type="pass_through_endpoint", - start_time=start_time, - litellm_call_id=litellm_call_id, - function_id="1245", - ) - - # Store passthrough guardrails config on logging_obj for field targeting - logging_obj.passthrough_guardrails_config = guardrails_config - - # Store logging_obj in data so guardrails can access it - if _parsed_body is None: - _parsed_body = {} - _parsed_body["litellm_logging_obj"] = logging_obj - - ### CALL HOOKS ### - modify incoming data / reject request before calling the model - _parsed_body = await proxy_logging_obj.pre_call_hook( - user_api_key_dict=user_api_key_dict, - data=_parsed_body, - call_type="pass_through_endpoint", - ) - async_client_obj = get_async_httpx_client( - llm_provider=httpxSpecialProvider.PassThroughEndpoint, - params={"timeout": 600}, - ) - async_client = async_client_obj.client - passthrough_logging_payload = PassthroughStandardLoggingPayload( - url=str(url), - request_body=_parsed_body, - request_method=getattr(request, "method", None), - cost_per_request=cost_per_request, - ) - kwargs = HttpPassThroughEndpointHelpers._init_kwargs_for_pass_through_endpoint( - user_api_key_dict=user_api_key_dict, - _parsed_body=_parsed_body, - passthrough_logging_payload=passthrough_logging_payload, - litellm_call_id=litellm_call_id, - request=request, - logging_obj=logging_obj, - ) - - # Store custom_llm_provider in kwargs and logging object if provided - if custom_llm_provider: - logging_obj.model_call_details["custom_llm_provider"] = custom_llm_provider - logging_obj.model_call_details["litellm_params"] = kwargs.get( - "litellm_params", {} - ) - - # done for supporting 'parallel_request_limiter.py' with pass-through endpoints - logging_obj.update_environment_variables( - model="unknown", - user="unknown", - optional_params={}, - litellm_params=kwargs["litellm_params"], - call_type="pass_through_endpoint", - ) - logging_obj.model_call_details["litellm_call_id"] = litellm_call_id - - # combine url with query params for logging - requested_query_params: Optional[dict] = query_params or dict( - request.query_params - ) - - requested_query_params_str = None - if requested_query_params: - requested_query_params_str = "&".join( - f"{k}={v}" for k, v in requested_query_params.items() - ) - - logging_url = str(url) - if requested_query_params_str: - if "?" in str(url): - logging_url = str(url) + "&" + requested_query_params_str - else: - logging_url = str(url) + "?" + requested_query_params_str - - logging_obj.pre_call( - input=[{"role": "user", "content": safe_dumps(_parsed_body)}], - api_key="", - additional_args={ - "complete_input_dict": _parsed_body, - "api_base": str(logging_url), - "headers": headers, - }, - ) - stream = ( - HttpPassThroughEndpointHelpers._update_stream_param_based_on_request_body( - parsed_body=_parsed_body, - stream=stream, - ) - ) - - if stream: - req = async_client.build_request( - "POST", - url, - json=_parsed_body, - params=requested_query_params, - headers=headers, - ) - - response = await async_client.send(req, stream=stream) - - try: - response.raise_for_status() - except httpx.HTTPStatusError as e: - raise HTTPException( - status_code=e.response.status_code, detail=await e.response.aread() - ) - - return StreamingResponse( - PassThroughStreamingHandler.chunk_processor( - response=response, - request_body=_parsed_body, - litellm_logging_obj=logging_obj, - endpoint_type=endpoint_type, - start_time=start_time, - passthrough_success_handler_obj=pass_through_endpoint_logging, - url_route=str(url), - ), - headers=HttpPassThroughEndpointHelpers.get_response_headers( - headers=response.headers, - litellm_call_id=litellm_call_id, - ), - status_code=response.status_code, - ) - - response = ( - await HttpPassThroughEndpointHelpers.non_streaming_http_request_handler( - request=request, - async_client=async_client, - url=url, - headers=headers, - requested_query_params=requested_query_params, - _parsed_body=_parsed_body, - ) - ) - verbose_proxy_logger.debug("response.headers= %s", response.headers) - - if _is_streaming_response(response) is True: - try: - response.raise_for_status() - except httpx.HTTPStatusError as e: - raise HTTPException( - status_code=e.response.status_code, detail=await e.response.aread() - ) - - return StreamingResponse( - PassThroughStreamingHandler.chunk_processor( - response=response, - request_body=_parsed_body, - litellm_logging_obj=logging_obj, - endpoint_type=endpoint_type, - start_time=start_time, - passthrough_success_handler_obj=pass_through_endpoint_logging, - url_route=str(url), - ), - headers=HttpPassThroughEndpointHelpers.get_response_headers( - headers=response.headers, - litellm_call_id=litellm_call_id, - ), - status_code=response.status_code, - ) - - try: - response.raise_for_status() - except httpx.HTTPStatusError as e: - raise HTTPException( - status_code=e.response.status_code, detail=e.response.text - ) - - if response.status_code >= 300: - raise HTTPException(status_code=response.status_code, detail=response.text) - - content = await response.aread() - - ## LOG SUCCESS - response_body: Optional[dict] = get_response_body(response) - passthrough_logging_payload["response_body"] = response_body - end_time = datetime.now() - asyncio.create_task( - pass_through_endpoint_logging.pass_through_async_success_handler( - httpx_response=response, - response_body=response_body, - url_route=str(url), - result="", - start_time=start_time, - end_time=end_time, - logging_obj=logging_obj, - cache_hit=False, - request_body=_parsed_body, - custom_llm_provider=custom_llm_provider, - **kwargs, - ) - ) - - ## CUSTOM HEADERS - `x-litellm-*` - custom_headers = ProxyBaseLLMRequestProcessing.get_custom_headers( - user_api_key_dict=user_api_key_dict, - call_id=litellm_call_id, - model_id=None, - cache_key=None, - api_base=str(url._uri_reference), - ) - - return Response( - content=content, - status_code=response.status_code, - headers=HttpPassThroughEndpointHelpers.get_response_headers( - headers=response.headers, - custom_headers=custom_headers, - ), - ) - except Exception as e: - custom_headers = ProxyBaseLLMRequestProcessing.get_custom_headers( - user_api_key_dict=user_api_key_dict, - call_id=litellm_call_id, - model_id=None, - cache_key=None, - api_base=str(url._uri_reference) if url else None, - ) - verbose_proxy_logger.exception( - "litellm.proxy.proxy_server.pass_through_endpoint(): Exception occured - {}".format( - str(e) - ) - ) - - ######################################################### - # Monitoring: Trigger post_call_failure_hook - # for pass through endpoint failure - ######################################################### - request_payload: dict = _parsed_body or {} - # add user_api_key_dict, litellm_call_id, passthrough_logging_payloa for logging - if kwargs: - for key, value in kwargs.items(): - request_payload[key] = value - - if ( - "model" not in request_payload - and _parsed_body - and isinstance(_parsed_body, dict) - ): - request_payload["model"] = _parsed_body.get("model", "") - if "custom_llm_provider" not in request_payload and custom_llm_provider: - request_payload["custom_llm_provider"] = custom_llm_provider - - await proxy_logging_obj.post_call_failure_hook( - user_api_key_dict=user_api_key_dict, - original_exception=e, - request_data=request_payload, - traceback_str=traceback.format_exc( - limit=MAXIMUM_TRACEBACK_LINES_TO_LOG, - ), - ) - - ######################################################### - - if isinstance(e, HTTPException): - raise ProxyException( - message=getattr(e, "message", str(e.detail)), - type=getattr(e, "type", "None"), - param=getattr(e, "param", "None"), - code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST), - headers=custom_headers, - ) - else: - error_msg = f"{str(e)}" - raise ProxyException( - message=getattr(e, "message", error_msg), - type=getattr(e, "type", "None"), - param=getattr(e, "param", "None"), - code=getattr(e, "status_code", 500), - headers=custom_headers, - ) - - -def _update_metadata_with_tags_in_header(request: Request, metadata: dict) -> dict: - """ - If tags are in the request headers, add them to the metadata - - Used for google and vertex JS SDKs, and Azure passthrough - Checks both 'tags' and 'x-litellm-tags' headers - """ - tags_to_add = [] - - # Check for 'tags' header first - _tags = request.headers.get("tags") - if _tags: - tags_to_add.extend([tag.strip() for tag in _tags.split(",")]) - - _tags = request.headers.get("x-litellm-tags") - if _tags: - tags_to_add.extend([tag.strip() for tag in _tags.split(",")]) - - # Only add tags key if there are tags to add - if tags_to_add: - if "tags" not in metadata: - metadata["tags"] = [] - metadata["tags"].extend(tags_to_add) - - return metadata - - -async def _parse_request_data_by_content_type( - request: Request, -) -> Tuple[Optional[Any], Optional[Any], Optional[Any], Optional[Any]]: - """ - Parse request data based on content type. - - Handles JSON, multipart/form-data, and URL-encoded form data. - - Returns: - Tuple of (query_params_data, custom_body_data, file_data, stream) - """ - content_type = request.headers.get("content-type", "") - - query_params_data = None - custom_body_data = None - file_data = None - stream = None - - if "application/json" in content_type: - # ✅ Handle JSON - try: - body = await request.json() - query_params_data = body.get("query_params") - custom_body_data = body.get("custom_body") - stream = body.get("stream") - except json.JSONDecodeError: - # Handle requests with no body (e.g., DELETE requests) - pass - elif "multipart/form-data" in content_type: - # ✅ Handle multipart form-data - form = await request.form() - if "query_params" in form: - form_value = form["query_params"] - if isinstance(form_value, str): - try: - query_params_data = json.loads(form_value) - except Exception: - query_params_data = form_value - else: - query_params_data = form_value - - if "custom_body" in form: - form_value = form["custom_body"] - if isinstance(form_value, str): - try: - custom_body_data = json.loads(form_value) - except Exception: - custom_body_data = form_value - else: - custom_body_data = form_value - - if "file" in form: - file_data = form["file"] # this is a Starlette UploadFile object - - elif "application/x-www-form-urlencoded" in content_type: - # ✅ Handle URL-encoded form data - form = await request.form() - query_params_data = form.get("query_params") - custom_body_data = form.get("custom_body") - - else: - # ✅ Fallback: maybe no body, just query params - query_params_data = dict(request.query_params) or None - - return query_params_data, custom_body_data, file_data, stream - - -def create_pass_through_route( - endpoint, - target: str, - custom_headers: Optional[dict] = None, - _forward_headers: Optional[bool] = False, - _merge_query_params: Optional[bool] = False, - dependencies: Optional[List] = None, - include_subpath: Optional[bool] = False, - cost_per_request: Optional[float] = None, - custom_llm_provider: Optional[str] = None, - is_streaming_request: Optional[bool] = False, - query_params: Optional[dict] = None, - guardrails: Optional[Dict[str, Any]] = None, -): - # check if target is an adapter.py or a url - from litellm._uuid import uuid - from litellm.proxy.types_utils.utils import get_instance_fn - - try: - if isinstance(target, CustomLogger): - adapter = target - else: - adapter = get_instance_fn(value=target) - adapter_id = str(uuid.uuid4()) - litellm.adapters = [{"id": adapter_id, "adapter": adapter}] - - async def endpoint_func( # type: ignore - request: Request, - fastapi_response: Response, - user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), - subpath: str = "", # captures sub-paths when include_subpath=True - custom_body: Optional[dict] = None, # accepted for signature compatibility with URL-based path; not forwarded because chat_completion_pass_through_endpoint does not support it - ): - return await chat_completion_pass_through_endpoint( - fastapi_response=fastapi_response, - request=request, - adapter_id=adapter_id, - user_api_key_dict=user_api_key_dict, - ) - - except Exception: - verbose_proxy_logger.debug("Defaulting to target being a url.") - - async def endpoint_func( # type: ignore - request: Request, - fastapi_response: Response, - user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), - subpath: str = "", # captures sub-paths when include_subpath=True - custom_body: Optional[dict] = None, - ): - from litellm.proxy.pass_through_endpoints.pass_through_endpoints import ( - InitPassThroughEndpointHelpers, - ) - - path = request.url.path - - # Parse request data based on content type - ( - query_params_data, - custom_body_data, - file_data, - stream, - ) = await _parse_request_data_by_content_type(request) - - if not InitPassThroughEndpointHelpers.is_registered_pass_through_route( - route=path - ): - raise HTTPException( - status_code=404, - detail=f"Pass-through endpoint {endpoint} not found. This could have been deleted or not yet added to the proxy.", - ) - - passthrough_params = ( - InitPassThroughEndpointHelpers.get_registered_pass_through_route( - route=path - ) - ) - target_params = { - "target": target, - "custom_headers": custom_headers, - "forward_headers": _forward_headers, - "merge_query_params": _merge_query_params, - "cost_per_request": cost_per_request, - "guardrails": None, - } - - if passthrough_params is not None: - target_params.update(passthrough_params.get("passthrough_params", {})) - - # Extract and cast parameters with proper types - param_target = target_params.get("target") or target - param_custom_headers = target_params.get("custom_headers", custom_headers) - param_forward_headers = target_params.get( - "forward_headers", _forward_headers - ) - param_merge_query_params = target_params.get( - "merge_query_params", _merge_query_params - ) - param_cost_per_request = target_params.get( - "cost_per_request", cost_per_request - ) - param_guardrails = target_params.get("guardrails", None) - - # Construct the full target URL with subpath if needed - full_target = ( - HttpPassThroughEndpointHelpers.construct_target_url_with_subpath( - base_target=cast(str, param_target), - subpath=subpath, - include_subpath=include_subpath, - ) - ) - - # Ensure custom_headers is a dict - headers_dict = ( - param_custom_headers if isinstance(param_custom_headers, dict) else {} - ) - - # Ensure query_params and custom_body are dicts or None - final_query_params = ( - query_params_data if isinstance(query_params_data, dict) else {} - ) - if query_params: - final_query_params.update(query_params) - # When a caller (e.g. bedrock_proxy_route) supplies a pre-built - # body, use it instead of the body parsed from the raw request. - final_custom_body: Optional[dict] = None - if custom_body is not None: - final_custom_body = custom_body - elif isinstance(custom_body_data, dict): - final_custom_body = custom_body_data - - return await pass_through_request( # type: ignore - request=request, - target=full_target, - custom_headers=headers_dict, - user_api_key_dict=user_api_key_dict, - forward_headers=cast(Optional[bool], param_forward_headers), - merge_query_params=cast(Optional[bool], param_merge_query_params), - query_params=final_query_params, - stream=is_streaming_request or stream, - custom_body=final_custom_body, - cost_per_request=cast(Optional[float], param_cost_per_request), - custom_llm_provider=custom_llm_provider, - guardrails_config=cast(Optional[dict], param_guardrails), - ) - - return endpoint_func - - -def create_websocket_passthrough_route( - endpoint: str, - target: str, - custom_headers: Optional[dict] = None, - _forward_headers: Optional[bool] = False, - dependencies: Optional[List] = None, - cost_per_request: Optional[float] = None, -): - """ - Create a WebSocket passthrough route function. - - Args: - endpoint: The endpoint path (for logging purposes) - target: The target WebSocket URL (e.g., "wss://api.example.com/ws") - custom_headers: Custom headers to include in the WebSocket connection - _forward_headers: Whether to forward incoming headers - dependencies: FastAPI dependencies to inject - - Returns: - A WebSocket passthrough function that can be registered with app.websocket() - """ - from litellm.proxy.auth.user_api_key_auth import user_api_key_auth_websocket - - async def websocket_endpoint_func( - websocket: WebSocket, - user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth_websocket), - **kwargs, # For additional query parameters - ): - """ - WebSocket passthrough endpoint function. - - This function handles the WebSocket connection by: - 1. Accepting the incoming WebSocket connection - 2. Establishing a connection to the target WebSocket - 3. Forwarding messages bidirectionally - 4. Handling connection cleanup - """ - return await websocket_passthrough_request( - websocket=websocket, - target=target, - custom_headers=custom_headers or {}, - user_api_key_dict=user_api_key_dict, - forward_headers=_forward_headers, - endpoint=endpoint, - cost_per_request=cost_per_request, - accept_websocket=True, # Generic usage should accept the WebSocket - ) - - return websocket_endpoint_func - - -async def websocket_passthrough_request( # noqa: PLR0915 - websocket: WebSocket, - target: str, - custom_headers: dict, - user_api_key_dict: UserAPIKeyAuth, - forward_headers: Optional[bool] = False, - endpoint: Optional[str] = None, - cost_per_request: Optional[float] = None, - accept_websocket: bool = True, -): - """ - WebSocket passthrough request handler. - - Args: - websocket: The incoming WebSocket connection - target: The target WebSocket URL - custom_headers: Custom headers to include in the connection - user_api_key_dict: The user API key dictionary - forward_headers: Whether to forward incoming headers - endpoint: The endpoint path (for logging purposes) - cost_per_request: Optional field - cost per request to the target endpoint - """ - from litellm.litellm_core_utils.litellm_logging import Logging - from litellm.proxy.proxy_server import proxy_logging_obj - from litellm.types.passthrough_endpoints.pass_through_endpoints import ( - PassthroughStandardLoggingPayload, - ) - - # Initialize tracking variables - start_time = datetime.now() - websocket_messages: list[dict[str, Any]] = [] - litellm_call_id = str(uuid.uuid4()) - - verbose_proxy_logger.info( - f"WebSocket passthrough ({endpoint}): Starting WebSocket connection to {target}" - ) - - # Only accept the WebSocket if requested (for generic usage) - if accept_websocket: - await websocket.accept() - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): WebSocket connection accepted" - ) - - # Prepare headers for the upstream connection - upstream_headers = custom_headers.copy() - - if forward_headers: - # Forward relevant headers from the incoming request - incoming_headers = dict(websocket.headers) - for header_name, header_value in incoming_headers.items(): - # Only forward certain headers to avoid conflicts - if header_name.lower() in [ - "authorization", - "x-api-key", - "x-goog-user-project", - ]: - upstream_headers[header_name] = header_value - - # Initialize logging object similar to HTTP passthrough - logging_obj = Logging( - model="unknown", - messages=[{"role": "user", "content": "WebSocket connection"}], - stream=True, # WebSockets are inherently streaming - call_type="pass_through_endpoint", - start_time=start_time, - litellm_call_id=litellm_call_id, - function_id="websocket_passthrough", - ) - - # Create passthrough logging payload - passthrough_logging_payload = PassthroughStandardLoggingPayload( - url=target, - request_body={}, # WebSocket doesn't have a traditional request body - request_method="WEBSOCKET", - cost_per_request=cost_per_request, - ) - - # Create a dummy request object for WebSocket connections to maintain compatibility - # with the existing _init_kwargs_for_pass_through_endpoint function - class DummyRequest: - def __init__( - self, url: str, method: str = "WEBSOCKET", headers: Optional[dict] = None - ): - self.url = url - self.method = method - self.headers = headers or {} - - def __str__(self): - return f"DummyRequest(url={self.url}, method={self.method})" - - dummy_request = DummyRequest( - url=target, - method="WEBSOCKET", - headers=dict(websocket.headers) if hasattr(websocket, "headers") else {}, - ) - - # Initialize kwargs for logging using the same pattern as HTTP passthrough - kwargs = HttpPassThroughEndpointHelpers._init_kwargs_for_pass_through_endpoint( - user_api_key_dict=user_api_key_dict, - _parsed_body={}, # WebSocket doesn't have a traditional request body - passthrough_logging_payload=passthrough_logging_payload, - litellm_call_id=litellm_call_id, - request=dummy_request, # type: ignore - logging_obj=logging_obj, - ) - - # Update logging environment variables - logging_obj.update_environment_variables( - model="unknown", - user="unknown", - optional_params={}, - litellm_params=dict(kwargs.get("litellm_params", {})), - call_type="pass_through_endpoint", - ) - logging_obj.model_call_details["litellm_call_id"] = litellm_call_id - - # Pre-call logging - logging_obj.pre_call( - input=[{"role": "user", "content": "WebSocket connection"}], - api_key="", - additional_args={ - "complete_input_dict": {}, - "api_base": target, - "headers": upstream_headers, - }, - ) - - ### CALL HOOKS ### - modify incoming data / reject request before calling the model - websocket_data: dict[str, Any] = {} - websocket_data = await proxy_logging_obj.pre_call_hook( - user_api_key_dict=user_api_key_dict, - data=websocket_data, - call_type="pass_through_endpoint", - ) - - try: - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Establishing upstream connection to {target}" - ) - async with connect( - target, - additional_headers=upstream_headers, - ) as upstream_ws: - verbose_proxy_logger.info( - f"WebSocket passthrough ({endpoint}): Upstream connection established successfully" - ) - - async def forward_client_to_upstream() -> None: - """Forward messages from client to upstream WebSocket""" - try: - while True: - message = await websocket.receive() - message_type = message.get("type") - if message_type == "websocket.disconnect": - await upstream_ws.close() - break - - text_data = message.get("text") - bytes_data = message.get("bytes") - - if text_data is not None: - # Try to extract model from client setup message for Vertex AI Live - if endpoint and "/vertex_ai/live" in endpoint: - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Processing client message for model extraction" - ) - try: - client_message = json.loads(text_data) - if ( - isinstance(client_message, dict) - and "setup" in client_message - ): - setup_data = client_message["setup"] - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Found setup data in client message: {setup_data}" - ) - if ( - isinstance(setup_data, dict) - and "model" in setup_data - ): - extracted_model = ( - _extract_model_from_vertex_ai_setup( - setup_data - ) - ) - if extracted_model: - kwargs["model"] = extracted_model - kwargs[ - "custom_llm_provider" - ] = "vertex_ai-language-models" - # Update logging object with correct model - logging_obj.model = extracted_model - logging_obj.model_call_details[ - "model" - ] = extracted_model - logging_obj.model_call_details[ - "custom_llm_provider" - ] = "vertex_ai" - verbose_proxy_logger.info( - f"WebSocket passthrough ({endpoint}): Successfully extracted model '{extracted_model}' and set provider to 'vertex_ai' from client setup message" - ) - else: - verbose_proxy_logger.warning( - f"WebSocket passthrough ({endpoint}): Failed to extract model from client setup data: {setup_data}" - ) - else: - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Setup data does not contain model field: {setup_data}" - ) - else: - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Client message does not contain setup data" - ) - except (json.JSONDecodeError, KeyError, TypeError) as e: - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Client message is not a valid setup message: {e}" - ) - pass # Not a JSON message or doesn't contain setup data - - await upstream_ws.send(text_data) - elif bytes_data is not None: - await upstream_ws.send(bytes_data) - except asyncio.CancelledError: - raise - except Exception: - verbose_proxy_logger.exception( - f"WebSocket passthrough ({endpoint}): error forwarding client message" - ) - await upstream_ws.close() - - async def forward_upstream_to_client() -> None: - """Forward messages from upstream to client WebSocket""" - try: - # Wait for the first response from upstream - raw_response = await upstream_ws.recv(decode=False) - # Ensure raw_response is bytes before decoding - if isinstance(raw_response, str): - raw_response = raw_response.encode("ascii") - setup_response = json.loads(raw_response.decode("ascii")) - verbose_proxy_logger.debug(f"Setup response: {setup_response}") - - # Extract model and provider from setup response for Vertex AI Live - if endpoint and "/vertex_ai/live" in endpoint: - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Processing server setup response for model extraction" - ) - extracted_model = _extract_model_from_vertex_ai_setup( - setup_response - ) - if extracted_model: - kwargs["model"] = extracted_model - kwargs["custom_llm_provider"] = "vertex_ai_language_models" - # Update logging object with correct model - logging_obj.model = extracted_model - logging_obj.model_call_details["model"] = extracted_model - logging_obj.model_call_details[ - "custom_llm_provider" - ] = "vertex_ai_language_models" - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Successfully extracted model '{extracted_model}' and set provider to 'vertex_ai' from server setup response" - ) - else: - verbose_proxy_logger.warning( - f"WebSocket passthrough ({endpoint}): Failed to extract model from server setup response: {setup_response}" - ) - else: - verbose_proxy_logger.debug( - f"WebSocket passthrough ({endpoint}): Not a Vertex AI Live endpoint, skipping model extraction" - ) - - # Send the setup response to the client - await websocket.send_text(json.dumps(setup_response)) - - # Now continuously forward messages from upstream to client - async for upstream_message in upstream_ws: - if isinstance(upstream_message, bytes): - await websocket.send_bytes(upstream_message) - # Parse and collect for cost tracking - try: - message_data = json.loads(upstream_message.decode()) - websocket_messages.append(message_data) - except (json.JSONDecodeError, UnicodeDecodeError): - pass - else: - await websocket.send_text(upstream_message) - # Parse and collect for cost tracking - try: - message_data = json.loads(upstream_message) - websocket_messages.append(message_data) - except json.JSONDecodeError: - pass - - except (ConnectionClosedOK, ConnectionClosedError) as e: - verbose_proxy_logger.debug( - f"Upstream WebSocket connection closed: {e}" - ) - pass - except asyncio.CancelledError: - verbose_proxy_logger.debug( - "asyncio.CancelledError in forward_upstream_to_client" - ) - raise - except Exception as e: - verbose_proxy_logger.debug( - f"Exception in forward_upstream_to_client: {e}" - ) - verbose_proxy_logger.exception( - f"WebSocket passthrough ({endpoint}): error forwarding upstream message" - ) - raise - - # Create tasks for bidirectional message forwarding - tasks = [ - asyncio.create_task(forward_client_to_upstream()), - asyncio.create_task(forward_upstream_to_client()), - ] - - done, pending = await asyncio.wait( - tasks, return_when=asyncio.FIRST_COMPLETED - ) - - # Cancel remaining tasks - for task in pending: - task.cancel() - try: - await task - except asyncio.CancelledError: - pass - - # Check for exceptions in completed tasks - for task in done: - exception = task.exception() - if exception is not None: - raise exception - - end_time = datetime.now() - - # Update passthrough logging payload with response data - passthrough_logging_payload["response_body"] = websocket_messages # type: ignore - passthrough_logging_payload["end_time"] = end_time # type: ignore - - # Remove logging_obj from kwargs to avoid duplicate keyword argument - success_kwargs = kwargs.copy() - success_kwargs.pop("logging_obj", None) - - # # Add user authentication context for database logging - # if user_api_key_dict: - # success_kwargs.setdefault('litellm_params', {}) - # success_kwargs['litellm_params'].update({ - # 'proxy_server_request': { - # 'body': { - # 'user': user_api_key_dict.user_id, - # 'team_id': user_api_key_dict.team_id, - # 'end_user_id': user_api_key_dict.end_user_id, - # } - # } - # }) - # # Also add the user_api_key for direct access - # success_kwargs['user_api_key'] = user_api_key_dict.api_key - - # Create a dummy httpx.Response for WebSocket connections - class MockWebSocketResponse: - def __init__(self, target_url: str): - self.status_code = 200 - self.text = "WebSocket connection successful" - self.headers: dict[str, str] = {} - self.request = MockWebSocketRequest(target_url) - - class MockWebSocketRequest: - def __init__(self, target_url: str): - self.method = "WEBSOCKET" - self.url = target_url - - mock_response = MockWebSocketResponse(target) - - # Use the same success handler as HTTP passthrough endpoints - asyncio.create_task( - pass_through_endpoint_logging.pass_through_async_success_handler( - httpx_response=mock_response, # type: ignore - response_body=websocket_messages, # type: ignore - url_route=endpoint or "", - result="websocket_connection_successful", - start_time=start_time, - end_time=end_time, - logging_obj=logging_obj, - cache_hit=False, - request_body={}, - **success_kwargs, - ) - ) - - # Call the proxy logging success hook - if proxy_logging_obj: - await proxy_logging_obj.post_call_success_hook( - data={}, - user_api_key_dict=user_api_key_dict, - response={"status": "websocket_connection_successful"}, # type: ignore - ) - - except InvalidStatus as exc: - verbose_proxy_logger.exception( - f"WebSocket passthrough ({endpoint}): upstream rejected WebSocket connection" - ) - - # Prepare request payload for logging - request_payload = {} - if kwargs: - for key, value in kwargs.items(): - request_payload[key] = value - - # Log the connection failure using the same pattern as HTTP - await proxy_logging_obj.post_call_failure_hook( - user_api_key_dict=user_api_key_dict, - original_exception=exc, - request_data=request_payload, - traceback_str=traceback.format_exc( - limit=MAXIMUM_TRACEBACK_LINES_TO_LOG, - ), - ) - - if websocket.client_state != WebSocketState.DISCONNECTED: - await websocket.close( - code=getattr(exc, "status_code", 1011), - reason="Upstream connection rejected", - ) - except Exception as e: - verbose_proxy_logger.exception( - f"WebSocket passthrough ({endpoint}): unexpected error while proxying WebSocket" - ) - - # Prepare request payload for logging - request_payload = {} - if kwargs: - for key, value in kwargs.items(): - request_payload[key] = value - - # Log the unexpected error using the same pattern as HTTP - await proxy_logging_obj.post_call_failure_hook( - user_api_key_dict=user_api_key_dict, - original_exception=e, - request_data=request_payload, - traceback_str=traceback.format_exc( - limit=MAXIMUM_TRACEBACK_LINES_TO_LOG, - ), - ) - - if websocket.client_state != WebSocketState.DISCONNECTED: - await websocket.close(code=1011, reason="WebSocket passthrough error") - finally: - if websocket.client_state != WebSocketState.DISCONNECTED: - await websocket.close() - - -def _is_streaming_response(response: httpx.Response) -> bool: - _content_type = response.headers.get("content-type") - if _content_type is not None and "text/event-stream" in _content_type: - return True - return False - - -def _extract_model_from_vertex_ai_setup(setup_response: dict) -> Optional[str]: - """ - Extract the model name from Vertex AI Live setup response. - - The setup response can contain a model field in two formats: - 1. Direct: {"model": "projects/.../models/gemini-2.0-flash-live-preview-04-09"} - 2. Nested: {"setup": {"model": "projects/.../models/gemini-2.0-flash-live-preview-04-09"}} - - We extract just the model name: "gemini-2.0-flash-live-preview-04-09" - """ - try: - # Handle both direct model field and nested setup.model field - model_path = None - if isinstance(setup_response, dict): - if "model" in setup_response: - model_path = setup_response["model"] - elif ( - "setup" in setup_response - and isinstance(setup_response["setup"], dict) - and "model" in setup_response["setup"] - ): - model_path = setup_response["setup"]["model"] - - if isinstance(model_path, str) and "/models/" in model_path: - # Extract the model name after the last "/models/" - model_name = model_path.split("/models/")[-1] - return model_name - except Exception as e: - verbose_proxy_logger.debug(f"Error extracting model from setup response: {e}") - return None - - -class SafeRouteAdder: - """ - Wrapper class for adding routes to FastAPI app. - Only adds routes if they don't already exist on the app. - """ - - @staticmethod - def _is_path_registered(app: FastAPI, path: str, methods: List[str]) -> bool: - """ - Check if a path with any of the specified methods is already registered on the app. - - Args: - app: The FastAPI application instance - path: The path to check (e.g., "/v1/chat/completions") - methods: List of HTTP methods to check (e.g., ["GET", "POST"]) - - Returns: - True if the path is already registered with any of the methods, False otherwise - """ - for route in app.routes: - # Use getattr to safely access route attributes - route_path = getattr(route, "path", None) - route_methods = getattr(route, "methods", None) - - if route_path == path and route_methods is not None: - # Check if any of the methods overlap - if any(method in route_methods for method in methods): - return True - return False - - @staticmethod - def add_api_route_if_not_exists( - app: FastAPI, - path: str, - endpoint: Any, - methods: List[str], - dependencies: Optional[List] = None, - ) -> bool: - """ - Add an API route to the app only if it doesn't already exist. - - Args: - app: The FastAPI application instance - path: The path for the route - endpoint: The endpoint function/callable - methods: List of HTTP methods - dependencies: Optional list of dependencies - - Returns: - True if route was added, False if it already existed - """ - if SafeRouteAdder._is_path_registered(app=app, path=path, methods=methods): - verbose_proxy_logger.debug( - "Skipping route registration - path %s with methods %s already registered on app", - path, - methods, - ) - return False - - app.add_api_route( - path=path, - endpoint=endpoint, - methods=methods, - dependencies=dependencies, - ) - verbose_proxy_logger.debug( - "Successfully added route: %s with methods %s", - path, - methods, - ) - return True - - -class InitPassThroughEndpointHelpers: - @staticmethod - def add_exact_path_route( - app: FastAPI, - path: str, - target: str, - custom_headers: Optional[dict], - forward_headers: Optional[bool], - merge_query_params: Optional[bool], - dependencies: Optional[List], - cost_per_request: Optional[float], - endpoint_id: str, - guardrails: Optional[dict] = None, - ): - """Add exact path route for pass-through endpoint""" - route_key = f"{endpoint_id}:exact:{path}" - - # Check if this exact route is already registered - if route_key in _registered_pass_through_routes: - verbose_proxy_logger.debug( - "Updating duplicate exact pass through endpoint: %s (already registered)", - path, - ) - - verbose_proxy_logger.debug( - "adding exact pass through endpoint: %s, dependencies: %s", - path, - dependencies, - ) - - # Use SafeRouteAdder to only add route if it doesn't exist on the app - SafeRouteAdder.add_api_route_if_not_exists( - app=app, - path=path, - endpoint=create_pass_through_route( # type: ignore - path, - target, - custom_headers, - forward_headers, - merge_query_params, - dependencies, - cost_per_request=cost_per_request, - guardrails=guardrails, - ), - methods=["GET", "POST", "PUT", "DELETE", "PATCH"], - dependencies=dependencies, - ) - - # Always register/update the route metadata (headers, target) even if FastAPI route exists - _registered_pass_through_routes[route_key] = { - "endpoint_id": endpoint_id, - "path": path, - "type": "exact", - "passthrough_params": { - "target": target, - "custom_headers": custom_headers, - "forward_headers": forward_headers, - "merge_query_params": merge_query_params, - "dependencies": dependencies, - "cost_per_request": cost_per_request, - "guardrails": guardrails, - }, - } - - @staticmethod - def add_subpath_route( - app: FastAPI, - path: str, - target: str, - custom_headers: Optional[dict], - forward_headers: Optional[bool], - merge_query_params: Optional[bool], - dependencies: Optional[List], - cost_per_request: Optional[float], - endpoint_id: str, - guardrails: Optional[dict] = None, - ): - """Add wildcard route for sub-paths""" - wildcard_path = f"{path}/{{subpath:path}}" - route_key = f"{endpoint_id}:subpath:{path}" - - # Check if this subpath route is already registered - if route_key in _registered_pass_through_routes: - verbose_proxy_logger.debug( - "Updating duplicate wildcard pass through endpoint: %s (already registered)", - wildcard_path, - ) - - verbose_proxy_logger.debug( - "adding wildcard pass through endpoint: %s, dependencies: %s", - wildcard_path, - dependencies, - ) - - # Use SafeRouteAdder to only add route if it doesn't exist on the app - SafeRouteAdder.add_api_route_if_not_exists( - app=app, - path=wildcard_path, - endpoint=create_pass_through_route( # type: ignore - path, - target, - custom_headers, - forward_headers, - merge_query_params, - dependencies, - include_subpath=True, - cost_per_request=cost_per_request, - guardrails=guardrails, - ), - methods=["GET", "POST", "PUT", "DELETE", "PATCH"], - dependencies=dependencies, - ) - - # Register the route to prevent duplicates only if it was added - _registered_pass_through_routes[route_key] = { - "endpoint_id": endpoint_id, - "path": path, - "type": "subpath", - "passthrough_params": { - "target": target, - "custom_headers": custom_headers, - "forward_headers": forward_headers, - "merge_query_params": merge_query_params, - "dependencies": dependencies, - "cost_per_request": cost_per_request, - "guardrails": guardrails, - }, - } - - @staticmethod - def remove_endpoint_routes(endpoint_id: str): - """Remove all routes for a specific endpoint ID from the registry""" - keys_to_remove = [ - key - for key, value in _registered_pass_through_routes.items() - if value["endpoint_id"] == endpoint_id - ] - for key in keys_to_remove: - del _registered_pass_through_routes[key] - verbose_proxy_logger.debug( - "Removed pass-through route from registry: %s", key - ) - - @staticmethod - def clear_all_pass_through_routes(): - """Clear all pass-through routes from the registry""" - _registered_pass_through_routes.clear() - - @staticmethod - def get_all_registered_pass_through_routes() -> List[str]: - """Get all registered pass-through endpoints from the registry""" - return list(_registered_pass_through_routes.keys()) - - @staticmethod - def _build_full_path_with_root(path: str) -> str: - """ - Build full path by prepending server root path if needed. - - Args: - path: The relative path to build - - Returns: - Full path with server root prepended (if root is not "/") - """ - root_path = get_server_root_path() - if root_path == "/": - return path - return f"{root_path}{path}" - - @staticmethod - def is_registered_pass_through_route(route: str) -> bool: - """ - Check if route is a registered pass-through endpoint from DB - - Uses the in-memory registry to avoid additional DB queries - Optimized for minimal latency - - Args: - route: The route to check - - Returns: - bool: True if route is a registered pass-through endpoint, False otherwise - """ - ## CHECK IF MAPPED PASS THROUGH ENDPOINT - for mapped_route in LiteLLMRoutes.mapped_pass_through_routes.value: - if route.startswith(mapped_route): - return True - - # Fast path: check if any registered route key contains this path - # Keys are in format: "{endpoint_id}:exact:{path}" or "{endpoint_id}:subpath:{path}" - # Extract unique paths from keys for quick checking - for key in _registered_pass_through_routes.keys(): - parts = key.split(":", 2) # Split into [endpoint_id, type, path] - if len(parts) == 3: - route_type = parts[1] - registered_path = InitPassThroughEndpointHelpers._build_full_path_with_root( - parts[2] - ) - if route_type == "exact" and route == registered_path: - return True - elif route_type == "subpath": - if route == registered_path or route.startswith( - registered_path + "/" - ): - return True - - return False - - @staticmethod - def get_registered_pass_through_route(route: str) -> Optional[Dict[str, Any]]: - """Get passthrough params for a given route""" - for key in _registered_pass_through_routes.keys(): - parts = key.split(":", 2) # Split into [endpoint_id, type, path] - if len(parts) == 3: - route_type = parts[1] - registered_path = InitPassThroughEndpointHelpers._build_full_path_with_root( - parts[2] - ) - - if route_type == "exact" and route == registered_path: - return _registered_pass_through_routes[key] - elif route_type == "subpath": - if route == registered_path or route.startswith( - registered_path + "/" - ): - return _registered_pass_through_routes[key] - - return None - - -def _get_combined_pass_through_endpoints( - pass_through_endpoints: Union[List[Dict], List[PassThroughGenericEndpoint]], - config_pass_through_endpoints: List[Dict], -): - """Get combined pass-through endpoints from db + config""" - return pass_through_endpoints + config_pass_through_endpoints - - -async def initialize_pass_through_endpoints( - pass_through_endpoints: Union[List[Dict], List[PassThroughGenericEndpoint]], -): - """ - 1. Create a global list of pass-through endpoints (db + config) - 2. Clear all existing pass-through endpoints from the FastAPI app routes - 3. Add new endpoints to the in-memory registry - - Initialize a list of pass-through endpoints by adding them to the FastAPI app routes - - Args: - pass_through_endpoints: List of pass-through endpoints to initialize - - Returns: - None - """ - from litellm._uuid import uuid - - verbose_proxy_logger.debug("initializing pass through endpoints") - from litellm.proxy._types import CommonProxyErrors, LiteLLMRoutes - from litellm.proxy.proxy_server import ( - app, - config_passthrough_endpoints, - premium_user, - ) - - ## get combined pass-through endpoints from db + config - combined_pass_through_endpoints: List[Union[Dict, PassThroughGenericEndpoint]] - - if config_passthrough_endpoints is not None: - combined_pass_through_endpoints = _get_combined_pass_through_endpoints( # type: ignore - pass_through_endpoints, config_passthrough_endpoints - ) - else: - combined_pass_through_endpoints = pass_through_endpoints # type: ignore - - ## clear all existing pass-through endpoints from the FastAPI app routes - # InitPassThroughEndpointHelpers.clear_all_pass_through_routes() - - # get a list of all registered pass-through endpoints - # mark the ones that are visited in the list - # remove the ones that are not visited from the list - registered_pass_through_endpoints = ( - InitPassThroughEndpointHelpers.get_all_registered_pass_through_routes() - ) - - visited_endpoints = set() - - for endpoint in combined_pass_through_endpoints: - if isinstance(endpoint, PassThroughGenericEndpoint): - endpoint = endpoint.model_dump() - - # Auto-generate ID for backwards compatibility if not present - if endpoint.get("id") is None: - endpoint["id"] = str(uuid.uuid4()) - - # Get the endpoint_id as a string (guaranteed to be set at this point) - endpoint_id: str = endpoint["id"] - - _target = endpoint.get("target", None) - _path: Optional[str] = endpoint.get("path", None) - if _path is None: - raise ValueError("Path is required for pass-through endpoint") - _custom_headers = endpoint.get("headers", None) - _custom_headers = await set_env_variables_in_header( - custom_headers=_custom_headers - ) - _forward_headers = endpoint.get("forward_headers", None) - _merge_query_params = endpoint.get("merge_query_params", None) - _auth = endpoint.get("auth", None) - _dependencies = None - if _auth is not None and str(_auth).lower() == "true": - if premium_user is not True: - raise ValueError( - "Error Setting Authentication on Pass Through Endpoint: {}".format( - CommonProxyErrors.not_premium_user.value - ) - ) - _dependencies = [Depends(user_api_key_auth)] - LiteLLMRoutes.openai_routes.value.append(_path) - - if _target is None: - continue - - # Get guardrails config if present - _guardrails = endpoint.get("guardrails", None) - - # Add exact path route - verbose_proxy_logger.debug( - "Initializing pass through endpoint: %s (ID: %s)", _path, endpoint_id - ) - InitPassThroughEndpointHelpers.add_exact_path_route( - app=app, - path=_path, - target=_target, - custom_headers=_custom_headers, - forward_headers=_forward_headers, - merge_query_params=_merge_query_params, - dependencies=_dependencies, - cost_per_request=endpoint.get("cost_per_request", None), - endpoint_id=endpoint_id, - guardrails=_guardrails, - ) - - visited_endpoints.add(f"{endpoint_id}:exact:{_path}") - - # Add wildcard route for sub-paths - if endpoint.get("include_subpath", False) is True: - InitPassThroughEndpointHelpers.add_subpath_route( - app=app, - path=_path, - target=_target, - custom_headers=_custom_headers, - forward_headers=_forward_headers, - merge_query_params=_merge_query_params, - dependencies=_dependencies, - cost_per_request=endpoint.get("cost_per_request", None), - endpoint_id=endpoint_id, - guardrails=_guardrails, - ) - - visited_endpoints.add(f"{endpoint_id}:subpath:{_path}") - - verbose_proxy_logger.debug( - "Added new pass through endpoint: %s (ID: %s)", _path, endpoint_id - ) - - # remove the ones that are not visited from the list - for endpoint_key in registered_pass_through_endpoints: - if endpoint_key not in visited_endpoints: - InitPassThroughEndpointHelpers.remove_endpoint_routes(endpoint_key) - - -def _get_pass_through_endpoints_from_config() -> List[PassThroughGenericEndpoint]: - """ - Get pass-through endpoints defined in the config file. - These are read-only and cannot be edited via the UI. - Malformed endpoints are logged and skipped; they do not crash the function. - """ - from pydantic import ValidationError - - from litellm.proxy.proxy_server import config_passthrough_endpoints - - if config_passthrough_endpoints is None or len(config_passthrough_endpoints) == 0: - return [] - - returned_endpoints: List[PassThroughGenericEndpoint] = [] - for endpoint in config_passthrough_endpoints: - try: - if isinstance(endpoint, dict): - endpoint_dict = dict(endpoint) - endpoint_dict["is_from_config"] = True - returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) - elif isinstance(endpoint, PassThroughGenericEndpoint): - # Create a copy with is_from_config=True - endpoint_dict = endpoint.model_dump() - endpoint_dict["is_from_config"] = True - returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) - except ValidationError as e: - verbose_proxy_logger.warning( - "Skipping malformed pass-through endpoint from config: %s", - e, - exc_info=False, - ) - - return returned_endpoints - - -async def _get_pass_through_endpoints_from_db( - endpoint_id: Optional[str] = None, - user_api_key_dict: Optional[UserAPIKeyAuth] = None, -) -> List[PassThroughGenericEndpoint]: - from litellm.proxy._types import LitellmUserRoles - from litellm.proxy.proxy_server import get_config_general_settings - - try: - if user_api_key_dict is None: - user_api_key_dict = UserAPIKeyAuth(user_role=LitellmUserRoles.PROXY_ADMIN) - response: ConfigFieldInfo = await get_config_general_settings( - field_name="pass_through_endpoints", user_api_key_dict=user_api_key_dict - ) - except Exception: - return [] - - pass_through_endpoint_data: Optional[List] = response.field_value - if pass_through_endpoint_data is None: - return [] - - returned_endpoints: List[PassThroughGenericEndpoint] = [] - if endpoint_id is None: - # Return all endpoints from DB, mark as not from config - for endpoint in pass_through_endpoint_data: - if isinstance(endpoint, dict): - endpoint_dict = dict(endpoint) - endpoint_dict["is_from_config"] = False - returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) - elif isinstance(endpoint, PassThroughGenericEndpoint): - endpoint_dict = endpoint.model_dump() - endpoint_dict["is_from_config"] = False - returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) - else: - # Find specific endpoint by ID - found_endpoint = _find_endpoint_by_id(pass_through_endpoint_data, endpoint_id) - if found_endpoint is not None: - endpoint_dict = ( - found_endpoint.model_dump() - if isinstance(found_endpoint, PassThroughGenericEndpoint) - else dict(found_endpoint) - ) - endpoint_dict["is_from_config"] = False - returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) - - return returned_endpoints - - -async def _filter_endpoints_by_team_allowed_routes( - team_id: str, - pass_through_endpoints: List[PassThroughGenericEndpoint], - prisma_client, -) -> List[PassThroughGenericEndpoint]: - """ - Filter pass-through endpoints based on team's allowed_passthrough_routes metadata. - - Args: - team_id: The team ID to check permissions for - pass_through_endpoints: List of endpoints to filter - prisma_client: Database client - - Returns: - Filtered list of endpoints based on team permissions - - Raises: - HTTPException: If team is not found - """ - # retrieve team from db - team = await prisma_client.db.litellm_teamtable.find_unique( - where={"team_id": team_id}, - ) - if team is None: - raise HTTPException( - status_code=404, - detail={"error": "Team not found"}, - ) - - # retrieve team metadata - team_metadata = team.metadata - if ( - team_metadata is not None - and team_metadata.get("allowed_passthrough_routes") is not None - ): - ## FILTER pass_through_endpoints by allowed_passthrough_routes - pass_through_endpoints = [ - endpoint - for endpoint in pass_through_endpoints - if endpoint.path in team_metadata.get("allowed_passthrough_routes") - ] - - return pass_through_endpoints - - -@router.get( - "/config/pass_through_endpoint", - dependencies=[Depends(user_api_key_auth)], - response_model=PassThroughEndpointResponse, -) -@router.get( - "/config/pass_through_endpoint/team/{team_id}", - dependencies=[Depends(user_api_key_auth)], - response_model=PassThroughEndpointResponse, -) -async def get_pass_through_endpoints( - endpoint_id: Optional[str] = None, - user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), - team_id: Optional[str] = None, -): - """ - GET configured pass through endpoint. - - If no endpoint_id given, return all configured endpoints. - """ ## Get existing pass-through endpoint field value - from litellm.proxy._types import CommonProxyErrors - from litellm.proxy.proxy_server import prisma_client - - if prisma_client is None: - raise HTTPException( - status_code=500, - detail={"error": CommonProxyErrors.db_not_connected_error.value}, - ) - - # Get endpoints from DB (editable via UI) - db_endpoints = await _get_pass_through_endpoints_from_db( - endpoint_id=endpoint_id, user_api_key_dict=user_api_key_dict - ) - - # Get endpoints from config file (read-only, not editable via UI) - config_endpoints = _get_pass_through_endpoints_from_config() - - # Merge: config endpoints not in DB + all DB endpoints (DB overrides config for same path) - db_paths = {ep.path for ep in db_endpoints} - config_only_endpoints = [ - ep for ep in config_endpoints if ep.path not in db_paths - ] - if endpoint_id is not None: - # When filtering by endpoint_id, only return if found in DB (config endpoints use generated IDs) - pass_through_endpoints = db_endpoints - else: - pass_through_endpoints = config_only_endpoints + db_endpoints - - if team_id is not None: - pass_through_endpoints = await _filter_endpoints_by_team_allowed_routes( - team_id=team_id, - pass_through_endpoints=pass_through_endpoints, - prisma_client=prisma_client, - ) - - return PassThroughEndpointResponse(endpoints=pass_through_endpoints) - - -@router.post( - "/config/pass_through_endpoint/{endpoint_id}", - dependencies=[Depends(user_api_key_auth)], -) -async def update_pass_through_endpoints( - endpoint_id: str, - data: PassThroughGenericEndpoint, - request: Request, - user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), -): - """ - Update a pass-through endpoint by ID. - """ - from litellm.proxy.proxy_server import ( - get_config_general_settings, - update_config_general_settings, - ) - - ## Get existing pass-through endpoint field value - try: - response: ConfigFieldInfo = await get_config_general_settings( - field_name="pass_through_endpoints", user_api_key_dict=user_api_key_dict - ) - except Exception: - raise HTTPException( - status_code=404, - detail={"error": "No pass-through endpoints found"}, - ) - - pass_through_endpoint_data: Optional[List] = response.field_value - if pass_through_endpoint_data is None: - raise HTTPException( - status_code=404, - detail={"error": "No pass-through endpoints found"}, - ) - - # Find the endpoint to update - found_endpoint = _find_endpoint_by_id(pass_through_endpoint_data, endpoint_id) - - if found_endpoint is None: - raise HTTPException( - status_code=404, - detail={"error": f"Endpoint with ID '{endpoint_id}' not found"}, - ) - - # Find the index for updating the list - endpoint_index = None - for idx, endpoint in enumerate(pass_through_endpoint_data): - _endpoint = ( - PassThroughGenericEndpoint(**endpoint) - if isinstance(endpoint, dict) - else endpoint - ) - if _endpoint.id == endpoint_id: - endpoint_index = idx - break - - if endpoint_index is None: - raise HTTPException( - status_code=404, - detail={ - "error": f"Could not find index for endpoint with ID '{endpoint_id}'" - }, - ) - - # Get the update data as dict, excluding None values for partial updates - # Exclude is_from_config as it's a response-only field (computed at read time) - update_data = data.model_dump(exclude_none=True, exclude={"is_from_config"}) - - # Start with existing endpoint data - endpoint_dict = found_endpoint.model_dump() - - # Update with new data (only non-None values) - endpoint_dict.update(update_data) - - # Preserve existing ID if not provided in update and endpoint has ID - if "id" not in update_data and found_endpoint.id is not None: - endpoint_dict["id"] = found_endpoint.id - - # Remove is_from_config before saving - it's a response-only field (computed at read time) - endpoint_dict.pop("is_from_config", None) - - # Create updated endpoint object - updated_endpoint = PassThroughGenericEndpoint(**endpoint_dict) - - # Update the list - pass_through_endpoint_data[endpoint_index] = endpoint_dict - - # Remove old routes from registry before they get re-registered - InitPassThroughEndpointHelpers.remove_endpoint_routes(endpoint_id) - - ## Update db - updated_data = ConfigFieldUpdate( - field_name="pass_through_endpoints", - field_value=pass_through_endpoint_data, - config_type="general_settings", - ) - - await update_config_general_settings( - data=updated_data, user_api_key_dict=user_api_key_dict - ) - - # Re-register the route with updated headers - _custom_headers: Optional[dict] = updated_endpoint.headers or {} - _custom_headers = await set_env_variables_in_header(custom_headers=_custom_headers) - - if updated_endpoint.include_subpath: - InitPassThroughEndpointHelpers.add_subpath_route( - app=request.app, - path=updated_endpoint.path, - target=updated_endpoint.target, - custom_headers=_custom_headers, - forward_headers=None, # Defaults not available in model? assuming None logic handles it - merge_query_params=None, - dependencies=None, - cost_per_request=updated_endpoint.cost_per_request, - endpoint_id=updated_endpoint.id or endpoint_id or "", - guardrails=getattr(updated_endpoint, "guardrails", None), - ) - else: - InitPassThroughEndpointHelpers.add_exact_path_route( - app=request.app, - path=updated_endpoint.path, - target=updated_endpoint.target, - custom_headers=_custom_headers, - forward_headers=None, - merge_query_params=None, - dependencies=None, - cost_per_request=updated_endpoint.cost_per_request, - endpoint_id=updated_endpoint.id or endpoint_id or "", - guardrails=getattr(updated_endpoint, "guardrails", None), - ) - - return PassThroughEndpointResponse( - endpoints=[updated_endpoint] if updated_endpoint else [] - ) - - -@router.post( - "/config/pass_through_endpoint", - dependencies=[Depends(user_api_key_auth)], -) -async def create_pass_through_endpoints( - data: PassThroughGenericEndpoint, - request: Request, - user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), -): - """ - Create new pass-through endpoint - """ - from litellm._uuid import uuid - from litellm.proxy.proxy_server import ( - get_config_general_settings, - update_config_general_settings, - ) - - ## Get existing pass-through endpoint field value - - try: - response: ConfigFieldInfo = await get_config_general_settings( - field_name="pass_through_endpoints", user_api_key_dict=user_api_key_dict - ) - except Exception: - response = ConfigFieldInfo( - field_name="pass_through_endpoints", field_value=None - ) - - ## Auto-generate ID if not provided - # Exclude is_from_config as it's a response-only field (computed at read time) - data_dict = data.model_dump(exclude={"is_from_config"}) - if data_dict.get("id") is None: - data_dict["id"] = str(uuid.uuid4()) - - if response.field_value is None: - response.field_value = [data_dict] - elif isinstance(response.field_value, List): - response.field_value.append(data_dict) - - ## Update db - updated_data = ConfigFieldUpdate( - field_name="pass_through_endpoints", - field_value=response.field_value, - config_type="general_settings", - ) - await update_config_general_settings( - data=updated_data, user_api_key_dict=user_api_key_dict - ) - - # Return the created endpoint with the generated ID - created_endpoint = PassThroughGenericEndpoint(**data_dict) - - # Register the new route - _custom_headers: Optional[dict] = created_endpoint.headers or {} - _custom_headers = await set_env_variables_in_header(custom_headers=_custom_headers) - - if created_endpoint.include_subpath: - InitPassThroughEndpointHelpers.add_subpath_route( - app=request.app, - path=created_endpoint.path, - target=created_endpoint.target, - custom_headers=_custom_headers, - forward_headers=None, - merge_query_params=None, - dependencies=None, - cost_per_request=created_endpoint.cost_per_request, - endpoint_id=created_endpoint.id or "", - guardrails=getattr(created_endpoint, "guardrails", None), - ) - else: - InitPassThroughEndpointHelpers.add_exact_path_route( - app=request.app, - path=created_endpoint.path, - target=created_endpoint.target, - custom_headers=_custom_headers, - forward_headers=None, - merge_query_params=None, - dependencies=None, - cost_per_request=created_endpoint.cost_per_request, - endpoint_id=created_endpoint.id or "", - guardrails=getattr(created_endpoint, "guardrails", None), - ) - - return PassThroughEndpointResponse(endpoints=[created_endpoint]) - - -@router.delete( - "/config/pass_through_endpoint", - dependencies=[Depends(user_api_key_auth)], - response_model=PassThroughEndpointResponse, -) -async def delete_pass_through_endpoints( - endpoint_id: str, - user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), -): - """ - Delete a pass-through endpoint by ID. - - Returns - the deleted endpoint - """ - from litellm.proxy.proxy_server import ( - get_config_general_settings, - update_config_general_settings, - ) - - ## Get existing pass-through endpoint field value - - try: - response: ConfigFieldInfo = await get_config_general_settings( - field_name="pass_through_endpoints", user_api_key_dict=user_api_key_dict - ) - except Exception: - response = ConfigFieldInfo( - field_name="pass_through_endpoints", field_value=None - ) - - ## Update field by removing endpoint - pass_through_endpoint_data: Optional[List] = response.field_value - if response.field_value is None or pass_through_endpoint_data is None: - raise HTTPException( - status_code=400, - detail={"error": "There are no pass-through endpoints setup."}, - ) - - # Find the endpoint to delete - found_endpoint = _find_endpoint_by_id(pass_through_endpoint_data, endpoint_id) - - if found_endpoint is None: - raise HTTPException( - status_code=400, - detail={ - "error": "Endpoint with ID '{}' was not found in pass-through endpoint list.".format( - endpoint_id - ) - }, - ) - - # Find the index for deleting from the list - endpoint_index = None - for idx, endpoint in enumerate(pass_through_endpoint_data): - _endpoint = ( - PassThroughGenericEndpoint(**endpoint) - if isinstance(endpoint, dict) - else endpoint - ) - if _endpoint.id == endpoint_id: - endpoint_index = idx - break - - if endpoint_index is None: - raise HTTPException( - status_code=400, - detail={ - "error": f"Could not find index for endpoint with ID '{endpoint_id}'" - }, - ) - - # Remove the endpoint - pass_through_endpoint_data.pop(endpoint_index) - response_obj = found_endpoint - - # Remove routes from registry - InitPassThroughEndpointHelpers.remove_endpoint_routes(endpoint_id) - - ## Update db - updated_data = ConfigFieldUpdate( - field_name="pass_through_endpoints", - field_value=pass_through_endpoint_data, - config_type="general_settings", - ) - await update_config_general_settings( - data=updated_data, user_api_key_dict=user_api_key_dict - ) - - return PassThroughEndpointResponse(endpoints=[response_obj]) - - -def _find_endpoint_by_id( - endpoints_data: List, - endpoint_id: str, -) -> Optional[PassThroughGenericEndpoint]: - """ - Find an endpoint by ID. - - Args: - endpoints_data: List of endpoint data (dicts or PassThroughGenericEndpoint objects) - endpoint_id: ID to search for - - Returns: - Found endpoint or None if not found - """ - for endpoint in endpoints_data: - _endpoint: Optional[PassThroughGenericEndpoint] = None - if isinstance(endpoint, dict): - _endpoint = PassThroughGenericEndpoint(**endpoint) - elif isinstance(endpoint, PassThroughGenericEndpoint): - _endpoint = endpoint - - # Only compare IDs to IDs - if _endpoint is not None and _endpoint.id == endpoint_id: - return _endpoint - - return None - - -async def initialize_pass_through_endpoints_in_db(): - """ - Gets all pass-through endpoints from db and initializes them in the proxy server. - """ - pass_through_endpoints = await _get_pass_through_endpoints_from_db() - await initialize_pass_through_endpoints( - pass_through_endpoints=pass_through_endpoints - ) +import ast +import asyncio +import copy +import json +import traceback +from base64 import b64encode +from datetime import datetime +from typing import Any, Dict, List, Optional, Tuple, Union, cast +from urllib.parse import urlencode, urlparse + +import httpx +from fastapi import ( + APIRouter, + Depends, + FastAPI, + HTTPException, + Request, + Response, + UploadFile, + WebSocket, + status, +) +from fastapi.responses import StreamingResponse +from starlette.datastructures import UploadFile as StarletteUploadFile +from starlette.websockets import WebSocketState +from websockets.asyncio.client import connect +from websockets.exceptions import ( + ConnectionClosedError, + ConnectionClosedOK, + InvalidStatus, +) + +import litellm +from litellm._logging import verbose_proxy_logger +from litellm._uuid import uuid +from litellm.constants import MAXIMUM_TRACEBACK_LINES_TO_LOG +from litellm.integrations.custom_logger import CustomLogger +from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj +from litellm.litellm_core_utils.safe_json_dumps import safe_dumps +from litellm.llms.custom_httpx.http_handler import get_async_httpx_client +from litellm.passthrough import BasePassthroughUtils +from litellm.proxy._types import ( + ConfigFieldInfo, + ConfigFieldUpdate, + LiteLLMRoutes, + PassThroughEndpointResponse, + PassThroughGenericEndpoint, + ProxyException, + UserAPIKeyAuth, +) +from litellm.proxy.auth.user_api_key_auth import user_api_key_auth +from litellm.proxy.common_request_processing import ProxyBaseLLMRequestProcessing +from litellm.proxy.common_utils.http_parsing_utils import _read_request_body +from litellm.proxy.utils import get_server_root_path +from litellm.secret_managers.main import get_secret_str +from litellm.types.llms.custom_http import httpxSpecialProvider +from litellm.types.passthrough_endpoints.pass_through_endpoints import ( + EndpointType, + PassthroughStandardLoggingPayload, +) +from litellm.types.utils import StandardLoggingUserAPIKeyMetadata + +from .streaming_handler import PassThroughStreamingHandler +from .success_handler import PassThroughEndpointLogging + +router = APIRouter() + +pass_through_endpoint_logging = PassThroughEndpointLogging() + +# Global registry to track registered pass-through routes and prevent memory leaks +_registered_pass_through_routes: Dict[str, Dict[str, Union[str, Dict[str, Any]]]] = {} + + +def get_response_body(response: httpx.Response) -> Optional[dict]: + try: + return response.json() + except Exception: + return None + + +async def set_env_variables_in_header(custom_headers: Optional[dict]) -> Optional[dict]: + """ + checks if any headers on config.yaml are defined as os.environ/COHERE_API_KEY etc + + only runs for headers defined on config.yaml + + example header can be + + {"Authorization": "Bearer os.environ/COHERE_API_KEY"} + """ + if custom_headers is None: + return None + headers = {} + for key, value in custom_headers.items(): + # langfuse Api requires base64 encoded headers - it's simpleer to just ask litellm users to set their langfuse public and secret keys + # we can then get the b64 encoded keys here + if key == "LANGFUSE_PUBLIC_KEY" or key == "LANGFUSE_SECRET_KEY": + # langfuse requires b64 encoded headers - we construct that here + _langfuse_public_key = custom_headers["LANGFUSE_PUBLIC_KEY"] + _langfuse_secret_key = custom_headers["LANGFUSE_SECRET_KEY"] + if isinstance( + _langfuse_public_key, str + ) and _langfuse_public_key.startswith("os.environ/"): + _langfuse_public_key = get_secret_str(_langfuse_public_key) + if isinstance( + _langfuse_secret_key, str + ) and _langfuse_secret_key.startswith("os.environ/"): + _langfuse_secret_key = get_secret_str(_langfuse_secret_key) + headers["Authorization"] = "Basic " + b64encode( + f"{_langfuse_public_key}:{_langfuse_secret_key}".encode("utf-8") + ).decode("ascii") + else: + # for all other headers + headers[key] = value + if isinstance(value, str) and "os.environ/" in value: + verbose_proxy_logger.debug( + "pass through endpoint - looking up 'os.environ/' variable" + ) + # get string section that is os.environ/ + start_index = value.find("os.environ/") + _variable_name = value[start_index:] + + verbose_proxy_logger.debug( + "pass through endpoint - getting secret for variable name: %s", + _variable_name, + ) + _secret_value = get_secret_str(_variable_name) + if _secret_value is not None: + new_value = value.replace(_variable_name, _secret_value) + headers[key] = new_value + return headers + + +async def chat_completion_pass_through_endpoint( # noqa: PLR0915 + fastapi_response: Response, + request: Request, + adapter_id: str, + user_api_key_dict: UserAPIKeyAuth, +): + from litellm.proxy.proxy_server import ( + add_litellm_data_to_request, + general_settings, + llm_router, + proxy_config, + proxy_logging_obj, + user_api_base, + user_max_tokens, + user_model, + user_request_timeout, + user_temperature, + version, + ) + + data = {} + try: + body = await request.body() + body_str = body.decode() + try: + data = ast.literal_eval(body_str) + except Exception: + data = json.loads(body_str) + + data["adapter_id"] = adapter_id + + verbose_proxy_logger.debug( + "Request received by LiteLLM:\n{}".format(json.dumps(data, indent=4)), + ) + data["model"] = ( + general_settings.get("completion_model", None) # server default + or user_model # model name passed via cli args + or data.get("model", None) # default passed in http request + ) + if user_model: + data["model"] = user_model + + data = await add_litellm_data_to_request( + data=data, # type: ignore + request=request, + general_settings=general_settings, + user_api_key_dict=user_api_key_dict, + version=version, + proxy_config=proxy_config, + ) + + # override with user settings, these are params passed via cli + if user_temperature: + data["temperature"] = user_temperature + if user_request_timeout: + data["request_timeout"] = user_request_timeout + if user_max_tokens: + data["max_tokens"] = user_max_tokens + if user_api_base: + data["api_base"] = user_api_base + + ### MODEL ALIAS MAPPING ### + # check if model name in model alias map + # get the actual model name + if data["model"] in litellm.model_alias_map: + data["model"] = litellm.model_alias_map[data["model"]] + + # Check key-specific aliases + if ( + isinstance(data["model"], str) + and user_api_key_dict.aliases + and isinstance(user_api_key_dict.aliases, dict) + and data["model"] in user_api_key_dict.aliases + ): + data["model"] = user_api_key_dict.aliases[data["model"]] + + ### CALL HOOKS ### - modify incoming data before calling the model + data = await proxy_logging_obj.pre_call_hook( # type: ignore + user_api_key_dict=user_api_key_dict, data=data, call_type="text_completion" + ) + + ### ROUTE THE REQUESTs ### + router_model_names = llm_router.model_names if llm_router is not None else [] + # skip router if user passed their key + if "api_key" in data: + llm_response = asyncio.create_task(litellm.aadapter_completion(**data)) + elif ( + llm_router is not None and data["model"] in router_model_names + ): # model in router model list + llm_response = asyncio.create_task(llm_router.aadapter_completion(**data)) + elif ( + llm_router is not None + and llm_router.model_group_alias is not None + and data["model"] in llm_router.model_group_alias + ): # model set in model_group_alias + llm_response = asyncio.create_task(llm_router.aadapter_completion(**data)) + elif llm_router is not None and llm_router.has_model_id( + data["model"] + ): # model in router model list + llm_response = asyncio.create_task(llm_router.aadapter_completion(**data)) + elif ( + llm_router is not None + and data["model"] not in router_model_names + and ( + llm_router.default_deployment is not None + or len(llm_router.pattern_router.patterns) > 0 + ) + ): # check for wildcard routes or default deployment before checking deployment_names + llm_response = asyncio.create_task(llm_router.aadapter_completion(**data)) + elif ( + llm_router is not None and data["model"] in llm_router.deployment_names + ): # model in router deployments, calling a specific deployment on the router (lowest priority) + llm_response = asyncio.create_task( + llm_router.aadapter_completion(**data, specific_deployment=True) + ) + elif user_model is not None: # `litellm --model ` + llm_response = asyncio.create_task(litellm.aadapter_completion(**data)) + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail={ + "error": "completion: Invalid model name passed in model=" + + data.get("model", "") + }, + ) + + # Await the llm_response task + response = await llm_response + + hidden_params = getattr(response, "_hidden_params", {}) or {} + model_id = hidden_params.get("model_id", None) or "" + cache_key = hidden_params.get("cache_key", None) or "" + api_base = hidden_params.get("api_base", None) or "" + response_cost = hidden_params.get("response_cost", None) or "" + + ### ALERTING ### + asyncio.create_task( + proxy_logging_obj.update_request_status( + litellm_call_id=data.get("litellm_call_id", ""), status="success" + ) + ) + + verbose_proxy_logger.debug("final response: %s", response) + + fastapi_response.headers.update( + ProxyBaseLLMRequestProcessing.get_custom_headers( + user_api_key_dict=user_api_key_dict, + model_id=model_id, + cache_key=cache_key, + api_base=api_base, + version=version, + response_cost=response_cost, + ) + ) + + verbose_proxy_logger.debug("\nResponse from Litellm:\n{}".format(response)) + return response + except Exception as e: + await proxy_logging_obj.post_call_failure_hook( + user_api_key_dict=user_api_key_dict, original_exception=e, request_data=data + ) + verbose_proxy_logger.exception( + "litellm.proxy.proxy_server.completion(): Exception occured - {}".format( + str(e) + ) + ) + error_msg = f"{str(e)}" + raise ProxyException( + message=getattr(e, "message", error_msg), + type=getattr(e, "type", "None"), + param=getattr(e, "param", "None"), + code=getattr(e, "status_code", 500), + ) + + +class HttpPassThroughEndpointHelpers(BasePassthroughUtils): + @staticmethod + def get_response_headers( + headers: httpx.Headers, + litellm_call_id: Optional[str] = None, + custom_headers: Optional[dict] = None, + ) -> dict: + excluded_headers = {"transfer-encoding", "content-encoding"} + + return_headers = { + key: value + for key, value in headers.items() + if key.lower() not in excluded_headers + } + if litellm_call_id: + return_headers["x-litellm-call-id"] = litellm_call_id + if custom_headers: + return_headers.update(custom_headers) + + return return_headers + + @staticmethod + def get_endpoint_type(url: str) -> EndpointType: + parsed_url = urlparse(url) + if ( + ("generateContent") in url + or ("streamGenerateContent") in url + or ("rawPredict") in url + or ("streamRawPredict") in url + ): + return EndpointType.VERTEX_AI + elif parsed_url.hostname == "api.anthropic.com": + return EndpointType.ANTHROPIC + elif ( + parsed_url.hostname == "api.openai.com" + or parsed_url.hostname == "openai.azure.com" + or (parsed_url.hostname and "openai.com" in parsed_url.hostname) + ): + return EndpointType.OPENAI + return EndpointType.GENERIC + + @staticmethod + async def _make_non_streaming_http_request( + request: Request, + async_client: httpx.AsyncClient, + url: str, + headers: dict, + requested_query_params: Optional[dict] = None, + custom_body: Optional[dict] = None, + ) -> httpx.Response: + """ + Make a non-streaming HTTP request + + If request is GET, don't include a JSON body + """ + if request.method == "GET": + response = await async_client.request( + method=request.method, + url=url, + headers=headers, + params=requested_query_params, + ) + else: + response = await async_client.request( + method=request.method, + url=url, + headers=headers, + params=requested_query_params, + json=custom_body, + ) + return response + + @staticmethod + async def non_streaming_http_request_handler( + request: Request, + async_client: httpx.AsyncClient, + url: httpx.URL, + headers: dict, + requested_query_params: Optional[dict] = None, + _parsed_body: Optional[dict] = None, + ) -> httpx.Response: + """ + Handle non-streaming HTTP requests + + Handles special cases when GET requests, multipart/form-data requests, and generic httpx requests + """ + if request.method == "GET": + response = await async_client.request( + method=request.method, + url=url, + headers=headers, + params=requested_query_params, + ) + elif HttpPassThroughEndpointHelpers.is_multipart(request) is True: + return await HttpPassThroughEndpointHelpers.make_multipart_http_request( + request=request, + async_client=async_client, + url=url, + headers=headers, + requested_query_params=requested_query_params, + ) + else: + # Generic httpx method + response = await async_client.request( + method=request.method, + url=url, + headers=headers, + params=requested_query_params, + json=_parsed_body, + ) + return response + + @staticmethod + def is_multipart(request: Request) -> bool: + """Check if the request is a multipart/form-data request""" + return "multipart/form-data" in request.headers.get("content-type", "") + + @staticmethod + async def _build_request_files_from_upload_file( + upload_file: Union[UploadFile, StarletteUploadFile], + ) -> Tuple[Optional[str], bytes, Optional[str]]: + """Build a request files dict from an UploadFile object""" + file_content = await upload_file.read() + return (upload_file.filename, file_content, upload_file.content_type) + + @staticmethod + async def make_multipart_http_request( + request: Request, + async_client: httpx.AsyncClient, + url: httpx.URL, + headers: dict, + requested_query_params: Optional[dict] = None, + ) -> httpx.Response: + """Process multipart/form-data requests, handling both files and form fields""" + form_data = await request.form() + files = {} + form_data_dict = {} + + for field_name, field_value in form_data.items(): + if isinstance(field_value, (StarletteUploadFile, UploadFile)): + files[ + field_name + ] = await HttpPassThroughEndpointHelpers._build_request_files_from_upload_file( + upload_file=field_value + ) + else: + form_data_dict[field_name] = field_value + + # Remove content-type header - httpx will set it correctly with the new boundary + # when it creates the multipart body from files/data parameters + headers_copy = headers.copy() + headers_copy.pop("content-type", None) + + response = await async_client.request( + method=request.method, + url=url, + headers=headers_copy, + params=requested_query_params, + files=files, + data=form_data_dict, + ) + return response + + @staticmethod + def _init_kwargs_for_pass_through_endpoint( + request: Request, + user_api_key_dict: UserAPIKeyAuth, + passthrough_logging_payload: PassthroughStandardLoggingPayload, + logging_obj: LiteLLMLoggingObj, + _parsed_body: Optional[dict] = None, + litellm_call_id: Optional[str] = None, + ) -> dict: + """ + Filter out litellm params from the request body + """ + from litellm.types.utils import all_litellm_params + + _parsed_body = _parsed_body or {} + + litellm_params_in_body = {} + for k in all_litellm_params: + if k in _parsed_body: + litellm_params_in_body[k] = _parsed_body.pop(k, None) + + _metadata = dict( + StandardLoggingUserAPIKeyMetadata( + user_api_key_hash=user_api_key_dict.api_key, + user_api_key_alias=user_api_key_dict.key_alias, + user_api_key_user_email=user_api_key_dict.user_email, + user_api_key_user_id=user_api_key_dict.user_id, + user_api_key_team_id=user_api_key_dict.team_id, + user_api_key_org_id=user_api_key_dict.org_id, + user_api_key_project_id=user_api_key_dict.project_id, + user_api_key_team_alias=user_api_key_dict.team_alias, + user_api_key_end_user_id=user_api_key_dict.end_user_id, + user_api_key_request_route=user_api_key_dict.request_route, + user_api_key_spend=user_api_key_dict.spend, + user_api_key_max_budget=user_api_key_dict.max_budget, + user_api_key_budget_reset_at=( + user_api_key_dict.budget_reset_at.isoformat() + if user_api_key_dict.budget_reset_at + else None + ), + user_api_key_auth_metadata=user_api_key_dict.metadata, + ) + ) + + _metadata["user_api_key"] = user_api_key_dict.api_key + + litellm_metadata = litellm_params_in_body.pop("litellm_metadata", None) + metadata = litellm_params_in_body.pop("metadata", None) + if litellm_metadata: + _metadata.update(litellm_metadata) + if metadata: + _metadata.update(metadata) + + _metadata = _update_metadata_with_tags_in_header( + request=request, + metadata=_metadata, + ) + + kwargs = { + "litellm_params": { + **litellm_params_in_body, # type: ignore + "metadata": _metadata, + "proxy_server_request": { + "url": str(request.url), + "method": request.method, + "body": copy.copy(_parsed_body), # use copy instead of deepcopy + "headers": request.headers, + }, + }, + "call_type": "pass_through_endpoint", + "litellm_call_id": litellm_call_id, + "passthrough_logging_payload": passthrough_logging_payload, + } + + logging_obj.model_call_details[ + "passthrough_logging_payload" + ] = passthrough_logging_payload + + return kwargs + + @staticmethod + def construct_target_url_with_subpath( + base_target: str, subpath: str, include_subpath: Optional[bool] + ) -> str: + """ + Helper function to construct the full target URL with subpath handling. + + Args: + base_target: The base target URL + subpath: The captured subpath from the request + include_subpath: Whether to include the subpath in the target URL + + Returns: + The constructed full target URL + """ + if not include_subpath: + return base_target + + if not subpath: + return base_target + + # Ensure base_target ends with / and subpath doesn't start with / + if not base_target.endswith("/"): + base_target = base_target + "/" + if subpath.startswith("/"): + subpath = subpath[1:] + + return base_target + subpath + + @staticmethod + def _update_stream_param_based_on_request_body( + parsed_body: dict, + stream: Optional[bool] = None, + ) -> Optional[bool]: + """ + If stream is provided in the request body, use it. + Otherwise, use the stream parameter passed to the `pass_through_request` function + """ + if "stream" in parsed_body: + return parsed_body.get("stream", stream) + return stream + + +async def pass_through_request( # noqa: PLR0915 + request: Request, + target: str, + custom_headers: dict, + user_api_key_dict: UserAPIKeyAuth, + custom_body: Optional[dict] = None, + forward_headers: Optional[bool] = False, + merge_query_params: Optional[bool] = False, + query_params: Optional[dict] = None, + stream: Optional[bool] = None, + cost_per_request: Optional[float] = None, + custom_llm_provider: Optional[str] = None, + guardrails_config: Optional[dict] = None, +): + """ + Pass through endpoint handler, makes the httpx request for pass-through endpoints and ensures logging hooks are called + + Args: + request: The incoming request + target: The target URL + custom_headers: The custom headers + user_api_key_dict: The user API key dictionary + custom_body: The custom body + forward_headers: Whether to forward headers + merge_query_params: Whether to merge query params + query_params: The query params + stream: Whether to stream the response + cost_per_request: Optional field - cost per request to the target endpoint + custom_llm_provider: Optional field - custom LLM provider for the endpoint + guardrails_config: Optional field - guardrails configuration for passthrough endpoint + """ + from litellm.litellm_core_utils.litellm_logging import Logging + from litellm.proxy.pass_through_endpoints.passthrough_guardrails import ( + PassthroughGuardrailHandler, + ) + from litellm.proxy.proxy_server import proxy_logging_obj + + ######################################################### + # Initialize variables + ######################################################### + litellm_call_id = str(uuid.uuid4()) + url: Optional[httpx.URL] = None + + # parsed request body + _parsed_body: Optional[dict] = None + # kwargs for pass through endpoint, contains metadata, litellm_params, call_type, litellm_call_id, passthrough_logging_payload + kwargs: Optional[dict] = None + + ######################################################### + try: + url = httpx.URL(target) + headers = custom_headers + headers = HttpPassThroughEndpointHelpers.forward_headers_from_request( + request_headers=dict(request.headers), + headers=headers, + forward_headers=forward_headers, + ) + + if merge_query_params: + # Create a new URL with the merged query params + url = url.copy_with( + query=urlencode( + HttpPassThroughEndpointHelpers.get_merged_query_parameters( + existing_url=url, + request_query_params=dict(request.query_params), + ) + ).encode("ascii") + ) + + endpoint_type: EndpointType = HttpPassThroughEndpointHelpers.get_endpoint_type( + str(url) + ) + + if custom_body: + _parsed_body = custom_body + else: + _parsed_body = await _read_request_body(request) + verbose_proxy_logger.debug( + "Pass through endpoint sending request to \nURL {}\nheaders: {}\nbody: {}\n".format( + url, headers, _parsed_body + ) + ) + + ### COLLECT GUARDRAILS FOR PASSTHROUGH ENDPOINT ### + # Passthrough endpoints are opt-in only for guardrails + # When enabled, collect guardrails from org/team/key levels + passthrough-specific + guardrails_to_run = PassthroughGuardrailHandler.collect_guardrails( + user_api_key_dict=user_api_key_dict, + passthrough_guardrails_config=guardrails_config, + ) + + # Add guardrails to metadata if any should run + if guardrails_to_run and len(guardrails_to_run) > 0: + if _parsed_body is None: + _parsed_body = {} + if "metadata" not in _parsed_body: + _parsed_body["metadata"] = {} + _parsed_body["metadata"]["guardrails"] = guardrails_to_run + verbose_proxy_logger.debug( + f"Added guardrails to passthrough request metadata: {guardrails_to_run}" + ) + + ## LOGGING OBJECT ## - initialize before pre_call_hook so guardrails can access it + start_time = datetime.now() + logging_obj = Logging( + model="unknown", + messages=[{"role": "user", "content": safe_dumps(_parsed_body)}], + stream=False, + call_type="pass_through_endpoint", + start_time=start_time, + litellm_call_id=litellm_call_id, + function_id="1245", + ) + + # Store passthrough guardrails config on logging_obj for field targeting + logging_obj.passthrough_guardrails_config = guardrails_config + + # Store logging_obj in data so guardrails can access it + if _parsed_body is None: + _parsed_body = {} + _parsed_body["litellm_logging_obj"] = logging_obj + + ### CALL HOOKS ### - modify incoming data / reject request before calling the model + _parsed_body = await proxy_logging_obj.pre_call_hook( + user_api_key_dict=user_api_key_dict, + data=_parsed_body, + call_type="pass_through_endpoint", + ) + async_client_obj = get_async_httpx_client( + llm_provider=httpxSpecialProvider.PassThroughEndpoint, + params={"timeout": 600}, + ) + async_client = async_client_obj.client + passthrough_logging_payload = PassthroughStandardLoggingPayload( + url=str(url), + request_body=_parsed_body, + request_method=getattr(request, "method", None), + cost_per_request=cost_per_request, + ) + kwargs = HttpPassThroughEndpointHelpers._init_kwargs_for_pass_through_endpoint( + user_api_key_dict=user_api_key_dict, + _parsed_body=_parsed_body, + passthrough_logging_payload=passthrough_logging_payload, + litellm_call_id=litellm_call_id, + request=request, + logging_obj=logging_obj, + ) + + # Store custom_llm_provider in kwargs and logging object if provided + if custom_llm_provider: + logging_obj.model_call_details["custom_llm_provider"] = custom_llm_provider + logging_obj.model_call_details["litellm_params"] = kwargs.get( + "litellm_params", {} + ) + + # done for supporting 'parallel_request_limiter.py' with pass-through endpoints + logging_obj.update_environment_variables( + model="unknown", + user="unknown", + optional_params={}, + litellm_params=kwargs["litellm_params"], + call_type="pass_through_endpoint", + ) + logging_obj.model_call_details["litellm_call_id"] = litellm_call_id + + # combine url with query params for logging + requested_query_params: Optional[dict] = query_params or dict( + request.query_params + ) + + requested_query_params_str = None + if requested_query_params: + requested_query_params_str = "&".join( + f"{k}={v}" for k, v in requested_query_params.items() + ) + + logging_url = str(url) + if requested_query_params_str: + if "?" in str(url): + logging_url = str(url) + "&" + requested_query_params_str + else: + logging_url = str(url) + "?" + requested_query_params_str + + logging_obj.pre_call( + input=[{"role": "user", "content": safe_dumps(_parsed_body)}], + api_key="", + additional_args={ + "complete_input_dict": _parsed_body, + "api_base": str(logging_url), + "headers": headers, + }, + ) + stream = ( + HttpPassThroughEndpointHelpers._update_stream_param_based_on_request_body( + parsed_body=_parsed_body, + stream=stream, + ) + ) + + if stream: + req = async_client.build_request( + "POST", + url, + json=_parsed_body, + params=requested_query_params, + headers=headers, + ) + + response = await async_client.send(req, stream=stream) + + try: + response.raise_for_status() + except httpx.HTTPStatusError as e: + raise HTTPException( + status_code=e.response.status_code, detail=await e.response.aread() + ) + + return StreamingResponse( + PassThroughStreamingHandler.chunk_processor( + response=response, + request_body=_parsed_body, + litellm_logging_obj=logging_obj, + endpoint_type=endpoint_type, + start_time=start_time, + passthrough_success_handler_obj=pass_through_endpoint_logging, + url_route=str(url), + ), + headers=HttpPassThroughEndpointHelpers.get_response_headers( + headers=response.headers, + litellm_call_id=litellm_call_id, + ), + status_code=response.status_code, + ) + + response = ( + await HttpPassThroughEndpointHelpers.non_streaming_http_request_handler( + request=request, + async_client=async_client, + url=url, + headers=headers, + requested_query_params=requested_query_params, + _parsed_body=_parsed_body, + ) + ) + verbose_proxy_logger.debug("response.headers= %s", response.headers) + + if _is_streaming_response(response) is True: + try: + response.raise_for_status() + except httpx.HTTPStatusError as e: + raise HTTPException( + status_code=e.response.status_code, detail=await e.response.aread() + ) + + return StreamingResponse( + PassThroughStreamingHandler.chunk_processor( + response=response, + request_body=_parsed_body, + litellm_logging_obj=logging_obj, + endpoint_type=endpoint_type, + start_time=start_time, + passthrough_success_handler_obj=pass_through_endpoint_logging, + url_route=str(url), + ), + headers=HttpPassThroughEndpointHelpers.get_response_headers( + headers=response.headers, + litellm_call_id=litellm_call_id, + ), + status_code=response.status_code, + ) + + try: + response.raise_for_status() + except httpx.HTTPStatusError as e: + raise HTTPException( + status_code=e.response.status_code, detail=e.response.text + ) + + if response.status_code >= 300: + raise HTTPException(status_code=response.status_code, detail=response.text) + + content = await response.aread() + + ## LOG SUCCESS + response_body: Optional[dict] = get_response_body(response) + passthrough_logging_payload["response_body"] = response_body + end_time = datetime.now() + asyncio.create_task( + pass_through_endpoint_logging.pass_through_async_success_handler( + httpx_response=response, + response_body=response_body, + url_route=str(url), + result="", + start_time=start_time, + end_time=end_time, + logging_obj=logging_obj, + cache_hit=False, + request_body=_parsed_body, + custom_llm_provider=custom_llm_provider, + **kwargs, + ) + ) + + ## CUSTOM HEADERS - `x-litellm-*` + custom_headers = ProxyBaseLLMRequestProcessing.get_custom_headers( + user_api_key_dict=user_api_key_dict, + call_id=litellm_call_id, + model_id=None, + cache_key=None, + api_base=str(url._uri_reference), + ) + + return Response( + content=content, + status_code=response.status_code, + headers=HttpPassThroughEndpointHelpers.get_response_headers( + headers=response.headers, + custom_headers=custom_headers, + ), + ) + except Exception as e: + custom_headers = ProxyBaseLLMRequestProcessing.get_custom_headers( + user_api_key_dict=user_api_key_dict, + call_id=litellm_call_id, + model_id=None, + cache_key=None, + api_base=str(url._uri_reference) if url else None, + ) + verbose_proxy_logger.exception( + "litellm.proxy.proxy_server.pass_through_endpoint(): Exception occured - {}".format( + str(e) + ) + ) + + ######################################################### + # Monitoring: Trigger post_call_failure_hook + # for pass through endpoint failure + ######################################################### + request_payload: dict = _parsed_body or {} + # add user_api_key_dict, litellm_call_id, passthrough_logging_payloa for logging + if kwargs: + for key, value in kwargs.items(): + request_payload[key] = value + + if ( + "model" not in request_payload + and _parsed_body + and isinstance(_parsed_body, dict) + ): + request_payload["model"] = _parsed_body.get("model", "") + if "custom_llm_provider" not in request_payload and custom_llm_provider: + request_payload["custom_llm_provider"] = custom_llm_provider + + await proxy_logging_obj.post_call_failure_hook( + user_api_key_dict=user_api_key_dict, + original_exception=e, + request_data=request_payload, + traceback_str=traceback.format_exc( + limit=MAXIMUM_TRACEBACK_LINES_TO_LOG, + ), + ) + + ######################################################### + + if isinstance(e, HTTPException): + raise ProxyException( + message=getattr(e, "message", str(e.detail)), + type=getattr(e, "type", "None"), + param=getattr(e, "param", "None"), + code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST), + headers=custom_headers, + ) + else: + error_msg = f"{str(e)}" + raise ProxyException( + message=getattr(e, "message", error_msg), + type=getattr(e, "type", "None"), + param=getattr(e, "param", "None"), + code=getattr(e, "status_code", 500), + headers=custom_headers, + ) + + +def _update_metadata_with_tags_in_header(request: Request, metadata: dict) -> dict: + """ + If tags are in the request headers, add them to the metadata + + Used for google and vertex JS SDKs, and Azure passthrough + Checks both 'tags' and 'x-litellm-tags' headers + """ + tags_to_add = [] + + # Check for 'tags' header first + _tags = request.headers.get("tags") + if _tags: + tags_to_add.extend([tag.strip() for tag in _tags.split(",")]) + + _tags = request.headers.get("x-litellm-tags") + if _tags: + tags_to_add.extend([tag.strip() for tag in _tags.split(",")]) + + # Only add tags key if there are tags to add + if tags_to_add: + if "tags" not in metadata: + metadata["tags"] = [] + metadata["tags"].extend(tags_to_add) + + return metadata + + +async def _parse_request_data_by_content_type( + request: Request, +) -> Tuple[Optional[Any], Optional[Any], Optional[Any], Optional[Any]]: + """ + Parse request data based on content type. + + Handles JSON, multipart/form-data, and URL-encoded form data. + + Returns: + Tuple of (query_params_data, custom_body_data, file_data, stream) + """ + content_type = request.headers.get("content-type", "") + + query_params_data = None + custom_body_data = None + file_data = None + stream = None + + if "application/json" in content_type: + # ✅ Handle JSON + try: + body = await request.json() + query_params_data = body.get("query_params") + custom_body_data = body.get("custom_body") + stream = body.get("stream") + except json.JSONDecodeError: + # Handle requests with no body (e.g., DELETE requests) + pass + elif "multipart/form-data" in content_type: + # ✅ Handle multipart form-data + form = await request.form() + if "query_params" in form: + form_value = form["query_params"] + if isinstance(form_value, str): + try: + query_params_data = json.loads(form_value) + except Exception: + query_params_data = form_value + else: + query_params_data = form_value + + if "custom_body" in form: + form_value = form["custom_body"] + if isinstance(form_value, str): + try: + custom_body_data = json.loads(form_value) + except Exception: + custom_body_data = form_value + else: + custom_body_data = form_value + + if "file" in form: + file_data = form["file"] # this is a Starlette UploadFile object + + elif "application/x-www-form-urlencoded" in content_type: + # ✅ Handle URL-encoded form data + form = await request.form() + query_params_data = form.get("query_params") + custom_body_data = form.get("custom_body") + + else: + # ✅ Fallback: maybe no body, just query params + query_params_data = dict(request.query_params) or None + + return query_params_data, custom_body_data, file_data, stream + + +def create_pass_through_route( + endpoint, + target: str, + custom_headers: Optional[dict] = None, + _forward_headers: Optional[bool] = False, + _merge_query_params: Optional[bool] = False, + dependencies: Optional[List] = None, + include_subpath: Optional[bool] = False, + cost_per_request: Optional[float] = None, + custom_llm_provider: Optional[str] = None, + is_streaming_request: Optional[bool] = False, + query_params: Optional[dict] = None, + guardrails: Optional[Dict[str, Any]] = None, +): + # check if target is an adapter.py or a url + from litellm._uuid import uuid + from litellm.proxy.types_utils.utils import get_instance_fn + + try: + if isinstance(target, CustomLogger): + adapter = target + else: + adapter = get_instance_fn(value=target) + adapter_id = str(uuid.uuid4()) + litellm.adapters = [{"id": adapter_id, "adapter": adapter}] + + async def endpoint_func( # type: ignore + request: Request, + fastapi_response: Response, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), + subpath: str = "", # captures sub-paths when include_subpath=True + custom_body: Optional[ + dict + ] = None, # accepted for signature compatibility with URL-based path; not forwarded because chat_completion_pass_through_endpoint does not support it + ): + return await chat_completion_pass_through_endpoint( + fastapi_response=fastapi_response, + request=request, + adapter_id=adapter_id, + user_api_key_dict=user_api_key_dict, + ) + + except Exception: + verbose_proxy_logger.debug("Defaulting to target being a url.") + + async def endpoint_func( # type: ignore + request: Request, + fastapi_response: Response, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), + subpath: str = "", # captures sub-paths when include_subpath=True + custom_body: Optional[dict] = None, + ): + from litellm.proxy.pass_through_endpoints.pass_through_endpoints import ( + InitPassThroughEndpointHelpers, + ) + + path = request.url.path + + # Parse request data based on content type + ( + query_params_data, + custom_body_data, + file_data, + stream, + ) = await _parse_request_data_by_content_type(request) + + if not InitPassThroughEndpointHelpers.is_registered_pass_through_route( + route=path + ): + raise HTTPException( + status_code=404, + detail=f"Pass-through endpoint {endpoint} not found. This could have been deleted or not yet added to the proxy.", + ) + + passthrough_params = ( + InitPassThroughEndpointHelpers.get_registered_pass_through_route( + route=path + ) + ) + target_params = { + "target": target, + "custom_headers": custom_headers, + "forward_headers": _forward_headers, + "merge_query_params": _merge_query_params, + "cost_per_request": cost_per_request, + "guardrails": None, + } + + if passthrough_params is not None: + target_params.update(passthrough_params.get("passthrough_params", {})) + + # Extract and cast parameters with proper types + param_target = target_params.get("target") or target + param_custom_headers = target_params.get("custom_headers", custom_headers) + param_forward_headers = target_params.get( + "forward_headers", _forward_headers + ) + param_merge_query_params = target_params.get( + "merge_query_params", _merge_query_params + ) + param_cost_per_request = target_params.get( + "cost_per_request", cost_per_request + ) + param_guardrails = target_params.get("guardrails", None) + + # Construct the full target URL with subpath if needed + full_target = ( + HttpPassThroughEndpointHelpers.construct_target_url_with_subpath( + base_target=cast(str, param_target), + subpath=subpath, + include_subpath=include_subpath, + ) + ) + + # Ensure custom_headers is a dict + headers_dict = ( + param_custom_headers if isinstance(param_custom_headers, dict) else {} + ) + + # Ensure query_params and custom_body are dicts or None + final_query_params = ( + query_params_data if isinstance(query_params_data, dict) else {} + ) + if query_params: + final_query_params.update(query_params) + # When a caller (e.g. bedrock_proxy_route) supplies a pre-built + # body, use it instead of the body parsed from the raw request. + final_custom_body: Optional[dict] = None + if custom_body is not None: + final_custom_body = custom_body + elif isinstance(custom_body_data, dict): + final_custom_body = custom_body_data + + return await pass_through_request( # type: ignore + request=request, + target=full_target, + custom_headers=headers_dict, + user_api_key_dict=user_api_key_dict, + forward_headers=cast(Optional[bool], param_forward_headers), + merge_query_params=cast(Optional[bool], param_merge_query_params), + query_params=final_query_params, + stream=is_streaming_request or stream, + custom_body=final_custom_body, + cost_per_request=cast(Optional[float], param_cost_per_request), + custom_llm_provider=custom_llm_provider, + guardrails_config=cast(Optional[dict], param_guardrails), + ) + + return endpoint_func + + +def create_websocket_passthrough_route( + endpoint: str, + target: str, + custom_headers: Optional[dict] = None, + _forward_headers: Optional[bool] = False, + dependencies: Optional[List] = None, + cost_per_request: Optional[float] = None, +): + """ + Create a WebSocket passthrough route function. + + Args: + endpoint: The endpoint path (for logging purposes) + target: The target WebSocket URL (e.g., "wss://api.example.com/ws") + custom_headers: Custom headers to include in the WebSocket connection + _forward_headers: Whether to forward incoming headers + dependencies: FastAPI dependencies to inject + + Returns: + A WebSocket passthrough function that can be registered with app.websocket() + """ + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth_websocket + + async def websocket_endpoint_func( + websocket: WebSocket, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth_websocket), + **kwargs, # For additional query parameters + ): + """ + WebSocket passthrough endpoint function. + + This function handles the WebSocket connection by: + 1. Accepting the incoming WebSocket connection + 2. Establishing a connection to the target WebSocket + 3. Forwarding messages bidirectionally + 4. Handling connection cleanup + """ + return await websocket_passthrough_request( + websocket=websocket, + target=target, + custom_headers=custom_headers or {}, + user_api_key_dict=user_api_key_dict, + forward_headers=_forward_headers, + endpoint=endpoint, + cost_per_request=cost_per_request, + accept_websocket=True, # Generic usage should accept the WebSocket + ) + + return websocket_endpoint_func + + +async def websocket_passthrough_request( # noqa: PLR0915 + websocket: WebSocket, + target: str, + custom_headers: dict, + user_api_key_dict: UserAPIKeyAuth, + forward_headers: Optional[bool] = False, + endpoint: Optional[str] = None, + cost_per_request: Optional[float] = None, + accept_websocket: bool = True, +): + """ + WebSocket passthrough request handler. + + Args: + websocket: The incoming WebSocket connection + target: The target WebSocket URL + custom_headers: Custom headers to include in the connection + user_api_key_dict: The user API key dictionary + forward_headers: Whether to forward incoming headers + endpoint: The endpoint path (for logging purposes) + cost_per_request: Optional field - cost per request to the target endpoint + """ + from litellm.litellm_core_utils.litellm_logging import Logging + from litellm.proxy.proxy_server import proxy_logging_obj + from litellm.types.passthrough_endpoints.pass_through_endpoints import ( + PassthroughStandardLoggingPayload, + ) + + # Initialize tracking variables + start_time = datetime.now() + websocket_messages: list[dict[str, Any]] = [] + litellm_call_id = str(uuid.uuid4()) + + verbose_proxy_logger.info( + f"WebSocket passthrough ({endpoint}): Starting WebSocket connection to {target}" + ) + + # Only accept the WebSocket if requested (for generic usage) + if accept_websocket: + await websocket.accept() + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): WebSocket connection accepted" + ) + + # Prepare headers for the upstream connection + upstream_headers = custom_headers.copy() + + if forward_headers: + # Forward relevant headers from the incoming request + incoming_headers = dict(websocket.headers) + for header_name, header_value in incoming_headers.items(): + # Only forward certain headers to avoid conflicts + if header_name.lower() in [ + "authorization", + "x-api-key", + "x-goog-user-project", + ]: + upstream_headers[header_name] = header_value + + # Initialize logging object similar to HTTP passthrough + logging_obj = Logging( + model="unknown", + messages=[{"role": "user", "content": "WebSocket connection"}], + stream=True, # WebSockets are inherently streaming + call_type="pass_through_endpoint", + start_time=start_time, + litellm_call_id=litellm_call_id, + function_id="websocket_passthrough", + ) + + # Create passthrough logging payload + passthrough_logging_payload = PassthroughStandardLoggingPayload( + url=target, + request_body={}, # WebSocket doesn't have a traditional request body + request_method="WEBSOCKET", + cost_per_request=cost_per_request, + ) + + # Create a dummy request object for WebSocket connections to maintain compatibility + # with the existing _init_kwargs_for_pass_through_endpoint function + class DummyRequest: + def __init__( + self, url: str, method: str = "WEBSOCKET", headers: Optional[dict] = None + ): + self.url = url + self.method = method + self.headers = headers or {} + + def __str__(self): + return f"DummyRequest(url={self.url}, method={self.method})" + + dummy_request = DummyRequest( + url=target, + method="WEBSOCKET", + headers=dict(websocket.headers) if hasattr(websocket, "headers") else {}, + ) + + # Initialize kwargs for logging using the same pattern as HTTP passthrough + kwargs = HttpPassThroughEndpointHelpers._init_kwargs_for_pass_through_endpoint( + user_api_key_dict=user_api_key_dict, + _parsed_body={}, # WebSocket doesn't have a traditional request body + passthrough_logging_payload=passthrough_logging_payload, + litellm_call_id=litellm_call_id, + request=dummy_request, # type: ignore + logging_obj=logging_obj, + ) + + # Update logging environment variables + logging_obj.update_environment_variables( + model="unknown", + user="unknown", + optional_params={}, + litellm_params=dict(kwargs.get("litellm_params", {})), + call_type="pass_through_endpoint", + ) + logging_obj.model_call_details["litellm_call_id"] = litellm_call_id + + # Pre-call logging + logging_obj.pre_call( + input=[{"role": "user", "content": "WebSocket connection"}], + api_key="", + additional_args={ + "complete_input_dict": {}, + "api_base": target, + "headers": upstream_headers, + }, + ) + + ### CALL HOOKS ### - modify incoming data / reject request before calling the model + websocket_data: dict[str, Any] = {} + websocket_data = await proxy_logging_obj.pre_call_hook( + user_api_key_dict=user_api_key_dict, + data=websocket_data, + call_type="pass_through_endpoint", + ) + + try: + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Establishing upstream connection to {target}" + ) + async with connect( + target, + additional_headers=upstream_headers, + ) as upstream_ws: + verbose_proxy_logger.info( + f"WebSocket passthrough ({endpoint}): Upstream connection established successfully" + ) + + async def forward_client_to_upstream() -> None: + """Forward messages from client to upstream WebSocket""" + try: + while True: + message = await websocket.receive() + message_type = message.get("type") + if message_type == "websocket.disconnect": + await upstream_ws.close() + break + + text_data = message.get("text") + bytes_data = message.get("bytes") + + if text_data is not None: + # Try to extract model from client setup message for Vertex AI Live + if endpoint and "/vertex_ai/live" in endpoint: + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Processing client message for model extraction" + ) + try: + client_message = json.loads(text_data) + if ( + isinstance(client_message, dict) + and "setup" in client_message + ): + setup_data = client_message["setup"] + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Found setup data in client message: {setup_data}" + ) + if ( + isinstance(setup_data, dict) + and "model" in setup_data + ): + extracted_model = ( + _extract_model_from_vertex_ai_setup( + setup_data + ) + ) + if extracted_model: + kwargs["model"] = extracted_model + kwargs[ + "custom_llm_provider" + ] = "vertex_ai-language-models" + # Update logging object with correct model + logging_obj.model = extracted_model + logging_obj.model_call_details[ + "model" + ] = extracted_model + logging_obj.model_call_details[ + "custom_llm_provider" + ] = "vertex_ai" + verbose_proxy_logger.info( + f"WebSocket passthrough ({endpoint}): Successfully extracted model '{extracted_model}' and set provider to 'vertex_ai' from client setup message" + ) + else: + verbose_proxy_logger.warning( + f"WebSocket passthrough ({endpoint}): Failed to extract model from client setup data: {setup_data}" + ) + else: + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Setup data does not contain model field: {setup_data}" + ) + else: + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Client message does not contain setup data" + ) + except (json.JSONDecodeError, KeyError, TypeError) as e: + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Client message is not a valid setup message: {e}" + ) + pass # Not a JSON message or doesn't contain setup data + + await upstream_ws.send(text_data) + elif bytes_data is not None: + await upstream_ws.send(bytes_data) + except asyncio.CancelledError: + raise + except Exception: + verbose_proxy_logger.exception( + f"WebSocket passthrough ({endpoint}): error forwarding client message" + ) + await upstream_ws.close() + + async def forward_upstream_to_client() -> None: + """Forward messages from upstream to client WebSocket""" + try: + # Wait for the first response from upstream + raw_response = await upstream_ws.recv(decode=False) + # Ensure raw_response is bytes before decoding + if isinstance(raw_response, str): + raw_response = raw_response.encode("ascii") + setup_response = json.loads(raw_response.decode("ascii")) + verbose_proxy_logger.debug(f"Setup response: {setup_response}") + + # Extract model and provider from setup response for Vertex AI Live + if endpoint and "/vertex_ai/live" in endpoint: + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Processing server setup response for model extraction" + ) + extracted_model = _extract_model_from_vertex_ai_setup( + setup_response + ) + if extracted_model: + kwargs["model"] = extracted_model + kwargs["custom_llm_provider"] = "vertex_ai_language_models" + # Update logging object with correct model + logging_obj.model = extracted_model + logging_obj.model_call_details["model"] = extracted_model + logging_obj.model_call_details[ + "custom_llm_provider" + ] = "vertex_ai_language_models" + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Successfully extracted model '{extracted_model}' and set provider to 'vertex_ai' from server setup response" + ) + else: + verbose_proxy_logger.warning( + f"WebSocket passthrough ({endpoint}): Failed to extract model from server setup response: {setup_response}" + ) + else: + verbose_proxy_logger.debug( + f"WebSocket passthrough ({endpoint}): Not a Vertex AI Live endpoint, skipping model extraction" + ) + + # Send the setup response to the client + await websocket.send_text(json.dumps(setup_response)) + + # Now continuously forward messages from upstream to client + async for upstream_message in upstream_ws: + if isinstance(upstream_message, bytes): + await websocket.send_bytes(upstream_message) + # Parse and collect for cost tracking + try: + message_data = json.loads(upstream_message.decode()) + websocket_messages.append(message_data) + except (json.JSONDecodeError, UnicodeDecodeError): + pass + else: + await websocket.send_text(upstream_message) + # Parse and collect for cost tracking + try: + message_data = json.loads(upstream_message) + websocket_messages.append(message_data) + except json.JSONDecodeError: + pass + + except (ConnectionClosedOK, ConnectionClosedError) as e: + verbose_proxy_logger.debug( + f"Upstream WebSocket connection closed: {e}" + ) + pass + except asyncio.CancelledError: + verbose_proxy_logger.debug( + "asyncio.CancelledError in forward_upstream_to_client" + ) + raise + except Exception as e: + verbose_proxy_logger.debug( + f"Exception in forward_upstream_to_client: {e}" + ) + verbose_proxy_logger.exception( + f"WebSocket passthrough ({endpoint}): error forwarding upstream message" + ) + raise + + # Create tasks for bidirectional message forwarding + tasks = [ + asyncio.create_task(forward_client_to_upstream()), + asyncio.create_task(forward_upstream_to_client()), + ] + + done, pending = await asyncio.wait( + tasks, return_when=asyncio.FIRST_COMPLETED + ) + + # Cancel remaining tasks + for task in pending: + task.cancel() + try: + await task + except asyncio.CancelledError: + pass + + # Check for exceptions in completed tasks + for task in done: + exception = task.exception() + if exception is not None: + raise exception + + end_time = datetime.now() + + # Update passthrough logging payload with response data + passthrough_logging_payload["response_body"] = websocket_messages # type: ignore + passthrough_logging_payload["end_time"] = end_time # type: ignore + + # Remove logging_obj from kwargs to avoid duplicate keyword argument + success_kwargs = kwargs.copy() + success_kwargs.pop("logging_obj", None) + + # # Add user authentication context for database logging + # if user_api_key_dict: + # success_kwargs.setdefault('litellm_params', {}) + # success_kwargs['litellm_params'].update({ + # 'proxy_server_request': { + # 'body': { + # 'user': user_api_key_dict.user_id, + # 'team_id': user_api_key_dict.team_id, + # 'end_user_id': user_api_key_dict.end_user_id, + # } + # } + # }) + # # Also add the user_api_key for direct access + # success_kwargs['user_api_key'] = user_api_key_dict.api_key + + # Create a dummy httpx.Response for WebSocket connections + class MockWebSocketResponse: + def __init__(self, target_url: str): + self.status_code = 200 + self.text = "WebSocket connection successful" + self.headers: dict[str, str] = {} + self.request = MockWebSocketRequest(target_url) + + class MockWebSocketRequest: + def __init__(self, target_url: str): + self.method = "WEBSOCKET" + self.url = target_url + + mock_response = MockWebSocketResponse(target) + + # Use the same success handler as HTTP passthrough endpoints + asyncio.create_task( + pass_through_endpoint_logging.pass_through_async_success_handler( + httpx_response=mock_response, # type: ignore + response_body=websocket_messages, # type: ignore + url_route=endpoint or "", + result="websocket_connection_successful", + start_time=start_time, + end_time=end_time, + logging_obj=logging_obj, + cache_hit=False, + request_body={}, + **success_kwargs, + ) + ) + + # Call the proxy logging success hook + if proxy_logging_obj: + await proxy_logging_obj.post_call_success_hook( + data={}, + user_api_key_dict=user_api_key_dict, + response={"status": "websocket_connection_successful"}, # type: ignore + ) + + except InvalidStatus as exc: + verbose_proxy_logger.exception( + f"WebSocket passthrough ({endpoint}): upstream rejected WebSocket connection" + ) + + # Prepare request payload for logging + request_payload = {} + if kwargs: + for key, value in kwargs.items(): + request_payload[key] = value + + # Log the connection failure using the same pattern as HTTP + await proxy_logging_obj.post_call_failure_hook( + user_api_key_dict=user_api_key_dict, + original_exception=exc, + request_data=request_payload, + traceback_str=traceback.format_exc( + limit=MAXIMUM_TRACEBACK_LINES_TO_LOG, + ), + ) + + if websocket.client_state != WebSocketState.DISCONNECTED: + await websocket.close( + code=getattr(exc, "status_code", 1011), + reason="Upstream connection rejected", + ) + except Exception as e: + verbose_proxy_logger.exception( + f"WebSocket passthrough ({endpoint}): unexpected error while proxying WebSocket" + ) + + # Prepare request payload for logging + request_payload = {} + if kwargs: + for key, value in kwargs.items(): + request_payload[key] = value + + # Log the unexpected error using the same pattern as HTTP + await proxy_logging_obj.post_call_failure_hook( + user_api_key_dict=user_api_key_dict, + original_exception=e, + request_data=request_payload, + traceback_str=traceback.format_exc( + limit=MAXIMUM_TRACEBACK_LINES_TO_LOG, + ), + ) + + if websocket.client_state != WebSocketState.DISCONNECTED: + await websocket.close(code=1011, reason="WebSocket passthrough error") + finally: + if websocket.client_state != WebSocketState.DISCONNECTED: + await websocket.close() + + +def _is_streaming_response(response: httpx.Response) -> bool: + _content_type = response.headers.get("content-type") + if _content_type is not None and "text/event-stream" in _content_type: + return True + return False + + +def _extract_model_from_vertex_ai_setup(setup_response: dict) -> Optional[str]: + """ + Extract the model name from Vertex AI Live setup response. + + The setup response can contain a model field in two formats: + 1. Direct: {"model": "projects/.../models/gemini-2.0-flash-live-preview-04-09"} + 2. Nested: {"setup": {"model": "projects/.../models/gemini-2.0-flash-live-preview-04-09"}} + + We extract just the model name: "gemini-2.0-flash-live-preview-04-09" + """ + try: + # Handle both direct model field and nested setup.model field + model_path = None + if isinstance(setup_response, dict): + if "model" in setup_response: + model_path = setup_response["model"] + elif ( + "setup" in setup_response + and isinstance(setup_response["setup"], dict) + and "model" in setup_response["setup"] + ): + model_path = setup_response["setup"]["model"] + + if isinstance(model_path, str) and "/models/" in model_path: + # Extract the model name after the last "/models/" + model_name = model_path.split("/models/")[-1] + return model_name + except Exception as e: + verbose_proxy_logger.debug(f"Error extracting model from setup response: {e}") + return None + + +class SafeRouteAdder: + """ + Wrapper class for adding routes to FastAPI app. + Only adds routes if they don't already exist on the app. + """ + + @staticmethod + def _is_path_registered(app: FastAPI, path: str, methods: List[str]) -> bool: + """ + Check if a path with any of the specified methods is already registered on the app. + + Args: + app: The FastAPI application instance + path: The path to check (e.g., "/v1/chat/completions") + methods: List of HTTP methods to check (e.g., ["GET", "POST"]) + + Returns: + True if the path is already registered with any of the methods, False otherwise + """ + for route in app.routes: + # Use getattr to safely access route attributes + route_path = getattr(route, "path", None) + route_methods = getattr(route, "methods", None) + + if route_path == path and route_methods is not None: + # Check if any of the methods overlap + if any(method in route_methods for method in methods): + return True + return False + + @staticmethod + def add_api_route_if_not_exists( + app: FastAPI, + path: str, + endpoint: Any, + methods: List[str], + dependencies: Optional[List] = None, + ) -> bool: + """ + Add an API route to the app only if it doesn't already exist. + + Args: + app: The FastAPI application instance + path: The path for the route + endpoint: The endpoint function/callable + methods: List of HTTP methods + dependencies: Optional list of dependencies + + Returns: + True if route was added, False if it already existed + """ + if SafeRouteAdder._is_path_registered(app=app, path=path, methods=methods): + verbose_proxy_logger.debug( + "Skipping route registration - path %s with methods %s already registered on app", + path, + methods, + ) + return False + + app.add_api_route( + path=path, + endpoint=endpoint, + methods=methods, + dependencies=dependencies, + ) + verbose_proxy_logger.debug( + "Successfully added route: %s with methods %s", + path, + methods, + ) + return True + + +class InitPassThroughEndpointHelpers: + @staticmethod + def add_exact_path_route( + app: FastAPI, + path: str, + target: str, + custom_headers: Optional[dict], + forward_headers: Optional[bool], + merge_query_params: Optional[bool], + dependencies: Optional[List], + cost_per_request: Optional[float], + endpoint_id: str, + guardrails: Optional[dict] = None, + ): + """Add exact path route for pass-through endpoint""" + route_key = f"{endpoint_id}:exact:{path}" + + # Check if this exact route is already registered + if route_key in _registered_pass_through_routes: + verbose_proxy_logger.debug( + "Updating duplicate exact pass through endpoint: %s (already registered)", + path, + ) + + verbose_proxy_logger.debug( + "adding exact pass through endpoint: %s, dependencies: %s", + path, + dependencies, + ) + + # Use SafeRouteAdder to only add route if it doesn't exist on the app + SafeRouteAdder.add_api_route_if_not_exists( + app=app, + path=path, + endpoint=create_pass_through_route( # type: ignore + path, + target, + custom_headers, + forward_headers, + merge_query_params, + dependencies, + cost_per_request=cost_per_request, + guardrails=guardrails, + ), + methods=["GET", "POST", "PUT", "DELETE", "PATCH"], + dependencies=dependencies, + ) + + # Always register/update the route metadata (headers, target) even if FastAPI route exists + _registered_pass_through_routes[route_key] = { + "endpoint_id": endpoint_id, + "path": path, + "type": "exact", + "passthrough_params": { + "target": target, + "custom_headers": custom_headers, + "forward_headers": forward_headers, + "merge_query_params": merge_query_params, + "dependencies": dependencies, + "cost_per_request": cost_per_request, + "guardrails": guardrails, + }, + } + + @staticmethod + def add_subpath_route( + app: FastAPI, + path: str, + target: str, + custom_headers: Optional[dict], + forward_headers: Optional[bool], + merge_query_params: Optional[bool], + dependencies: Optional[List], + cost_per_request: Optional[float], + endpoint_id: str, + guardrails: Optional[dict] = None, + ): + """Add wildcard route for sub-paths""" + wildcard_path = f"{path}/{{subpath:path}}" + route_key = f"{endpoint_id}:subpath:{path}" + + # Check if this subpath route is already registered + if route_key in _registered_pass_through_routes: + verbose_proxy_logger.debug( + "Updating duplicate wildcard pass through endpoint: %s (already registered)", + wildcard_path, + ) + + verbose_proxy_logger.debug( + "adding wildcard pass through endpoint: %s, dependencies: %s", + wildcard_path, + dependencies, + ) + + # Use SafeRouteAdder to only add route if it doesn't exist on the app + SafeRouteAdder.add_api_route_if_not_exists( + app=app, + path=wildcard_path, + endpoint=create_pass_through_route( # type: ignore + path, + target, + custom_headers, + forward_headers, + merge_query_params, + dependencies, + include_subpath=True, + cost_per_request=cost_per_request, + guardrails=guardrails, + ), + methods=["GET", "POST", "PUT", "DELETE", "PATCH"], + dependencies=dependencies, + ) + + # Register the route to prevent duplicates only if it was added + _registered_pass_through_routes[route_key] = { + "endpoint_id": endpoint_id, + "path": path, + "type": "subpath", + "passthrough_params": { + "target": target, + "custom_headers": custom_headers, + "forward_headers": forward_headers, + "merge_query_params": merge_query_params, + "dependencies": dependencies, + "cost_per_request": cost_per_request, + "guardrails": guardrails, + }, + } + + @staticmethod + def remove_endpoint_routes(endpoint_id: str): + """Remove all routes for a specific endpoint ID from the registry""" + keys_to_remove = [ + key + for key, value in _registered_pass_through_routes.items() + if value["endpoint_id"] == endpoint_id + ] + for key in keys_to_remove: + del _registered_pass_through_routes[key] + verbose_proxy_logger.debug( + "Removed pass-through route from registry: %s", key + ) + + @staticmethod + def clear_all_pass_through_routes(): + """Clear all pass-through routes from the registry""" + _registered_pass_through_routes.clear() + + @staticmethod + def get_all_registered_pass_through_routes() -> List[str]: + """Get all registered pass-through endpoints from the registry""" + return list(_registered_pass_through_routes.keys()) + + @staticmethod + def _build_full_path_with_root(path: str) -> str: + """ + Build full path by prepending server root path if needed. + + Args: + path: The relative path to build + + Returns: + Full path with server root prepended (if root is not "/") + """ + root_path = get_server_root_path() + if root_path == "/": + return path + return f"{root_path}{path}" + + @staticmethod + def is_registered_pass_through_route(route: str) -> bool: + """ + Check if route is a registered pass-through endpoint from DB + + Uses the in-memory registry to avoid additional DB queries + Optimized for minimal latency + + Args: + route: The route to check + + Returns: + bool: True if route is a registered pass-through endpoint, False otherwise + """ + ## CHECK IF MAPPED PASS THROUGH ENDPOINT + for mapped_route in LiteLLMRoutes.mapped_pass_through_routes.value: + if route.startswith(mapped_route): + return True + + # Fast path: check if any registered route key contains this path + # Keys are in format: "{endpoint_id}:exact:{path}" or "{endpoint_id}:subpath:{path}" + # Extract unique paths from keys for quick checking + for key in _registered_pass_through_routes.keys(): + parts = key.split(":", 2) # Split into [endpoint_id, type, path] + if len(parts) == 3: + route_type = parts[1] + registered_path = ( + InitPassThroughEndpointHelpers._build_full_path_with_root(parts[2]) + ) + if route_type == "exact" and route == registered_path: + return True + elif route_type == "subpath": + if route == registered_path or route.startswith( + registered_path + "/" + ): + return True + + return False + + @staticmethod + def get_registered_pass_through_route(route: str) -> Optional[Dict[str, Any]]: + """Get passthrough params for a given route""" + for key in _registered_pass_through_routes.keys(): + parts = key.split(":", 2) # Split into [endpoint_id, type, path] + if len(parts) == 3: + route_type = parts[1] + registered_path = ( + InitPassThroughEndpointHelpers._build_full_path_with_root(parts[2]) + ) + + if route_type == "exact" and route == registered_path: + return _registered_pass_through_routes[key] + elif route_type == "subpath": + if route == registered_path or route.startswith( + registered_path + "/" + ): + return _registered_pass_through_routes[key] + + return None + + +def _get_combined_pass_through_endpoints( + pass_through_endpoints: Union[List[Dict], List[PassThroughGenericEndpoint]], + config_pass_through_endpoints: List[Dict], +): + """Get combined pass-through endpoints from db + config""" + return pass_through_endpoints + config_pass_through_endpoints + + +async def initialize_pass_through_endpoints( + pass_through_endpoints: Union[List[Dict], List[PassThroughGenericEndpoint]], +): + """ + 1. Create a global list of pass-through endpoints (db + config) + 2. Clear all existing pass-through endpoints from the FastAPI app routes + 3. Add new endpoints to the in-memory registry + + Initialize a list of pass-through endpoints by adding them to the FastAPI app routes + + Args: + pass_through_endpoints: List of pass-through endpoints to initialize + + Returns: + None + """ + from litellm._uuid import uuid + + verbose_proxy_logger.debug("initializing pass through endpoints") + from litellm.proxy._types import CommonProxyErrors, LiteLLMRoutes + from litellm.proxy.proxy_server import ( + app, + config_passthrough_endpoints, + premium_user, + ) + + ## get combined pass-through endpoints from db + config + combined_pass_through_endpoints: List[Union[Dict, PassThroughGenericEndpoint]] + + if config_passthrough_endpoints is not None: + combined_pass_through_endpoints = _get_combined_pass_through_endpoints( # type: ignore + pass_through_endpoints, config_passthrough_endpoints + ) + else: + combined_pass_through_endpoints = pass_through_endpoints # type: ignore + + ## clear all existing pass-through endpoints from the FastAPI app routes + # InitPassThroughEndpointHelpers.clear_all_pass_through_routes() + + # get a list of all registered pass-through endpoints + # mark the ones that are visited in the list + # remove the ones that are not visited from the list + registered_pass_through_endpoints = ( + InitPassThroughEndpointHelpers.get_all_registered_pass_through_routes() + ) + + visited_endpoints = set() + + for endpoint in combined_pass_through_endpoints: + if isinstance(endpoint, PassThroughGenericEndpoint): + endpoint = endpoint.model_dump() + + # Auto-generate ID for backwards compatibility if not present + if endpoint.get("id") is None: + endpoint["id"] = str(uuid.uuid4()) + + # Get the endpoint_id as a string (guaranteed to be set at this point) + endpoint_id: str = endpoint["id"] + + _target = endpoint.get("target", None) + _path: Optional[str] = endpoint.get("path", None) + if _path is None: + raise ValueError("Path is required for pass-through endpoint") + _custom_headers = endpoint.get("headers", None) + _custom_headers = await set_env_variables_in_header( + custom_headers=_custom_headers + ) + _forward_headers = endpoint.get("forward_headers", None) + _merge_query_params = endpoint.get("merge_query_params", None) + _auth = endpoint.get("auth", None) + _dependencies = None + if _auth is not None and str(_auth).lower() == "true": + if premium_user is not True: + raise ValueError( + "Error Setting Authentication on Pass Through Endpoint: {}".format( + CommonProxyErrors.not_premium_user.value + ) + ) + _dependencies = [Depends(user_api_key_auth)] + LiteLLMRoutes.openai_routes.value.append(_path) + + if _target is None: + continue + + # Get guardrails config if present + _guardrails = endpoint.get("guardrails", None) + + # Add exact path route + verbose_proxy_logger.debug( + "Initializing pass through endpoint: %s (ID: %s)", _path, endpoint_id + ) + InitPassThroughEndpointHelpers.add_exact_path_route( + app=app, + path=_path, + target=_target, + custom_headers=_custom_headers, + forward_headers=_forward_headers, + merge_query_params=_merge_query_params, + dependencies=_dependencies, + cost_per_request=endpoint.get("cost_per_request", None), + endpoint_id=endpoint_id, + guardrails=_guardrails, + ) + + visited_endpoints.add(f"{endpoint_id}:exact:{_path}") + + # Add wildcard route for sub-paths + if endpoint.get("include_subpath", False) is True: + InitPassThroughEndpointHelpers.add_subpath_route( + app=app, + path=_path, + target=_target, + custom_headers=_custom_headers, + forward_headers=_forward_headers, + merge_query_params=_merge_query_params, + dependencies=_dependencies, + cost_per_request=endpoint.get("cost_per_request", None), + endpoint_id=endpoint_id, + guardrails=_guardrails, + ) + + visited_endpoints.add(f"{endpoint_id}:subpath:{_path}") + + verbose_proxy_logger.debug( + "Added new pass through endpoint: %s (ID: %s)", _path, endpoint_id + ) + + # remove the ones that are not visited from the list + for endpoint_key in registered_pass_through_endpoints: + if endpoint_key not in visited_endpoints: + InitPassThroughEndpointHelpers.remove_endpoint_routes(endpoint_key) + + +def _get_pass_through_endpoints_from_config() -> List[PassThroughGenericEndpoint]: + """ + Get pass-through endpoints defined in the config file. + These are read-only and cannot be edited via the UI. + Malformed endpoints are logged and skipped; they do not crash the function. + """ + from pydantic import ValidationError + + from litellm.proxy.proxy_server import config_passthrough_endpoints + + if config_passthrough_endpoints is None or len(config_passthrough_endpoints) == 0: + return [] + + returned_endpoints: List[PassThroughGenericEndpoint] = [] + for endpoint in config_passthrough_endpoints: + try: + if isinstance(endpoint, dict): + endpoint_dict = dict(endpoint) + endpoint_dict["is_from_config"] = True + returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) + elif isinstance(endpoint, PassThroughGenericEndpoint): + # Create a copy with is_from_config=True + endpoint_dict = endpoint.model_dump() + endpoint_dict["is_from_config"] = True + returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) + except ValidationError as e: + verbose_proxy_logger.warning( + "Skipping malformed pass-through endpoint from config: %s", + e, + exc_info=False, + ) + + return returned_endpoints + + +async def _get_pass_through_endpoints_from_db( + endpoint_id: Optional[str] = None, + user_api_key_dict: Optional[UserAPIKeyAuth] = None, +) -> List[PassThroughGenericEndpoint]: + from litellm.proxy._types import LitellmUserRoles + from litellm.proxy.proxy_server import get_config_general_settings + + try: + if user_api_key_dict is None: + user_api_key_dict = UserAPIKeyAuth(user_role=LitellmUserRoles.PROXY_ADMIN) + response: ConfigFieldInfo = await get_config_general_settings( + field_name="pass_through_endpoints", user_api_key_dict=user_api_key_dict + ) + except Exception: + return [] + + pass_through_endpoint_data: Optional[List] = response.field_value + if pass_through_endpoint_data is None: + return [] + + returned_endpoints: List[PassThroughGenericEndpoint] = [] + if endpoint_id is None: + # Return all endpoints from DB, mark as not from config + for endpoint in pass_through_endpoint_data: + if isinstance(endpoint, dict): + endpoint_dict = dict(endpoint) + endpoint_dict["is_from_config"] = False + returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) + elif isinstance(endpoint, PassThroughGenericEndpoint): + endpoint_dict = endpoint.model_dump() + endpoint_dict["is_from_config"] = False + returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) + else: + # Find specific endpoint by ID + found_endpoint = _find_endpoint_by_id(pass_through_endpoint_data, endpoint_id) + if found_endpoint is not None: + endpoint_dict = ( + found_endpoint.model_dump() + if isinstance(found_endpoint, PassThroughGenericEndpoint) + else dict(found_endpoint) + ) + endpoint_dict["is_from_config"] = False + returned_endpoints.append(PassThroughGenericEndpoint(**endpoint_dict)) + + return returned_endpoints + + +async def _filter_endpoints_by_team_allowed_routes( + team_id: str, + pass_through_endpoints: List[PassThroughGenericEndpoint], + prisma_client, +) -> List[PassThroughGenericEndpoint]: + """ + Filter pass-through endpoints based on team's allowed_passthrough_routes metadata. + + Args: + team_id: The team ID to check permissions for + pass_through_endpoints: List of endpoints to filter + prisma_client: Database client + + Returns: + Filtered list of endpoints based on team permissions + + Raises: + HTTPException: If team is not found + """ + # retrieve team from db + team = await prisma_client.db.litellm_teamtable.find_unique( + where={"team_id": team_id}, + ) + if team is None: + raise HTTPException( + status_code=404, + detail={"error": "Team not found"}, + ) + + # retrieve team metadata + team_metadata = team.metadata + if ( + team_metadata is not None + and team_metadata.get("allowed_passthrough_routes") is not None + ): + ## FILTER pass_through_endpoints by allowed_passthrough_routes + pass_through_endpoints = [ + endpoint + for endpoint in pass_through_endpoints + if endpoint.path in team_metadata.get("allowed_passthrough_routes") + ] + + return pass_through_endpoints + + +@router.get( + "/config/pass_through_endpoint", + dependencies=[Depends(user_api_key_auth)], + response_model=PassThroughEndpointResponse, +) +@router.get( + "/config/pass_through_endpoint/team/{team_id}", + dependencies=[Depends(user_api_key_auth)], + response_model=PassThroughEndpointResponse, +) +async def get_pass_through_endpoints( + endpoint_id: Optional[str] = None, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), + team_id: Optional[str] = None, +): + """ + GET configured pass through endpoint. + + If no endpoint_id given, return all configured endpoints. + """ ## Get existing pass-through endpoint field value + from litellm.proxy._types import CommonProxyErrors + from litellm.proxy.proxy_server import prisma_client + + if prisma_client is None: + raise HTTPException( + status_code=500, + detail={"error": CommonProxyErrors.db_not_connected_error.value}, + ) + + # Get endpoints from DB (editable via UI) + db_endpoints = await _get_pass_through_endpoints_from_db( + endpoint_id=endpoint_id, user_api_key_dict=user_api_key_dict + ) + + # Get endpoints from config file (read-only, not editable via UI) + config_endpoints = _get_pass_through_endpoints_from_config() + + # Merge: config endpoints not in DB + all DB endpoints (DB overrides config for same path) + db_paths = {ep.path for ep in db_endpoints} + config_only_endpoints = [ep for ep in config_endpoints if ep.path not in db_paths] + if endpoint_id is not None: + # When filtering by endpoint_id, only return if found in DB (config endpoints use generated IDs) + pass_through_endpoints = db_endpoints + else: + pass_through_endpoints = config_only_endpoints + db_endpoints + + if team_id is not None: + pass_through_endpoints = await _filter_endpoints_by_team_allowed_routes( + team_id=team_id, + pass_through_endpoints=pass_through_endpoints, + prisma_client=prisma_client, + ) + + return PassThroughEndpointResponse(endpoints=pass_through_endpoints) + + +@router.post( + "/config/pass_through_endpoint/{endpoint_id}", + dependencies=[Depends(user_api_key_auth)], +) +async def update_pass_through_endpoints( + endpoint_id: str, + data: PassThroughGenericEndpoint, + request: Request, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Update a pass-through endpoint by ID. + """ + from litellm.proxy.proxy_server import ( + get_config_general_settings, + update_config_general_settings, + ) + + ## Get existing pass-through endpoint field value + try: + response: ConfigFieldInfo = await get_config_general_settings( + field_name="pass_through_endpoints", user_api_key_dict=user_api_key_dict + ) + except Exception: + raise HTTPException( + status_code=404, + detail={"error": "No pass-through endpoints found"}, + ) + + pass_through_endpoint_data: Optional[List] = response.field_value + if pass_through_endpoint_data is None: + raise HTTPException( + status_code=404, + detail={"error": "No pass-through endpoints found"}, + ) + + # Find the endpoint to update + found_endpoint = _find_endpoint_by_id(pass_through_endpoint_data, endpoint_id) + + if found_endpoint is None: + raise HTTPException( + status_code=404, + detail={"error": f"Endpoint with ID '{endpoint_id}' not found"}, + ) + + # Find the index for updating the list + endpoint_index = None + for idx, endpoint in enumerate(pass_through_endpoint_data): + _endpoint = ( + PassThroughGenericEndpoint(**endpoint) + if isinstance(endpoint, dict) + else endpoint + ) + if _endpoint.id == endpoint_id: + endpoint_index = idx + break + + if endpoint_index is None: + raise HTTPException( + status_code=404, + detail={ + "error": f"Could not find index for endpoint with ID '{endpoint_id}'" + }, + ) + + # Get the update data as dict, excluding None values for partial updates + # Exclude is_from_config as it's a response-only field (computed at read time) + update_data = data.model_dump(exclude_none=True, exclude={"is_from_config"}) + + # Start with existing endpoint data + endpoint_dict = found_endpoint.model_dump() + + # Update with new data (only non-None values) + endpoint_dict.update(update_data) + + # Preserve existing ID if not provided in update and endpoint has ID + if "id" not in update_data and found_endpoint.id is not None: + endpoint_dict["id"] = found_endpoint.id + + # Remove is_from_config before saving - it's a response-only field (computed at read time) + endpoint_dict.pop("is_from_config", None) + + # Create updated endpoint object + updated_endpoint = PassThroughGenericEndpoint(**endpoint_dict) + + # Update the list + pass_through_endpoint_data[endpoint_index] = endpoint_dict + + # Remove old routes from registry before they get re-registered + InitPassThroughEndpointHelpers.remove_endpoint_routes(endpoint_id) + + ## Update db + updated_data = ConfigFieldUpdate( + field_name="pass_through_endpoints", + field_value=pass_through_endpoint_data, + config_type="general_settings", + ) + + await update_config_general_settings( + data=updated_data, user_api_key_dict=user_api_key_dict + ) + + # Re-register the route with updated headers + _custom_headers: Optional[dict] = updated_endpoint.headers or {} + _custom_headers = await set_env_variables_in_header(custom_headers=_custom_headers) + + if updated_endpoint.include_subpath: + InitPassThroughEndpointHelpers.add_subpath_route( + app=request.app, + path=updated_endpoint.path, + target=updated_endpoint.target, + custom_headers=_custom_headers, + forward_headers=None, # Defaults not available in model? assuming None logic handles it + merge_query_params=None, + dependencies=None, + cost_per_request=updated_endpoint.cost_per_request, + endpoint_id=updated_endpoint.id or endpoint_id or "", + guardrails=getattr(updated_endpoint, "guardrails", None), + ) + else: + InitPassThroughEndpointHelpers.add_exact_path_route( + app=request.app, + path=updated_endpoint.path, + target=updated_endpoint.target, + custom_headers=_custom_headers, + forward_headers=None, + merge_query_params=None, + dependencies=None, + cost_per_request=updated_endpoint.cost_per_request, + endpoint_id=updated_endpoint.id or endpoint_id or "", + guardrails=getattr(updated_endpoint, "guardrails", None), + ) + + return PassThroughEndpointResponse( + endpoints=[updated_endpoint] if updated_endpoint else [] + ) + + +@router.post( + "/config/pass_through_endpoint", + dependencies=[Depends(user_api_key_auth)], +) +async def create_pass_through_endpoints( + data: PassThroughGenericEndpoint, + request: Request, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Create new pass-through endpoint + """ + from litellm._uuid import uuid + from litellm.proxy.proxy_server import ( + get_config_general_settings, + update_config_general_settings, + ) + + ## Get existing pass-through endpoint field value + + try: + response: ConfigFieldInfo = await get_config_general_settings( + field_name="pass_through_endpoints", user_api_key_dict=user_api_key_dict + ) + except Exception: + response = ConfigFieldInfo( + field_name="pass_through_endpoints", field_value=None + ) + + ## Auto-generate ID if not provided + # Exclude is_from_config as it's a response-only field (computed at read time) + data_dict = data.model_dump(exclude={"is_from_config"}) + if data_dict.get("id") is None: + data_dict["id"] = str(uuid.uuid4()) + + if response.field_value is None: + response.field_value = [data_dict] + elif isinstance(response.field_value, List): + response.field_value.append(data_dict) + + ## Update db + updated_data = ConfigFieldUpdate( + field_name="pass_through_endpoints", + field_value=response.field_value, + config_type="general_settings", + ) + await update_config_general_settings( + data=updated_data, user_api_key_dict=user_api_key_dict + ) + + # Return the created endpoint with the generated ID + created_endpoint = PassThroughGenericEndpoint(**data_dict) + + # Register the new route + _custom_headers: Optional[dict] = created_endpoint.headers or {} + _custom_headers = await set_env_variables_in_header(custom_headers=_custom_headers) + + if created_endpoint.include_subpath: + InitPassThroughEndpointHelpers.add_subpath_route( + app=request.app, + path=created_endpoint.path, + target=created_endpoint.target, + custom_headers=_custom_headers, + forward_headers=None, + merge_query_params=None, + dependencies=None, + cost_per_request=created_endpoint.cost_per_request, + endpoint_id=created_endpoint.id or "", + guardrails=getattr(created_endpoint, "guardrails", None), + ) + else: + InitPassThroughEndpointHelpers.add_exact_path_route( + app=request.app, + path=created_endpoint.path, + target=created_endpoint.target, + custom_headers=_custom_headers, + forward_headers=None, + merge_query_params=None, + dependencies=None, + cost_per_request=created_endpoint.cost_per_request, + endpoint_id=created_endpoint.id or "", + guardrails=getattr(created_endpoint, "guardrails", None), + ) + + return PassThroughEndpointResponse(endpoints=[created_endpoint]) + + +@router.delete( + "/config/pass_through_endpoint", + dependencies=[Depends(user_api_key_auth)], + response_model=PassThroughEndpointResponse, +) +async def delete_pass_through_endpoints( + endpoint_id: str, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + """ + Delete a pass-through endpoint by ID. + + Returns - the deleted endpoint + """ + from litellm.proxy.proxy_server import ( + get_config_general_settings, + update_config_general_settings, + ) + + ## Get existing pass-through endpoint field value + + try: + response: ConfigFieldInfo = await get_config_general_settings( + field_name="pass_through_endpoints", user_api_key_dict=user_api_key_dict + ) + except Exception: + response = ConfigFieldInfo( + field_name="pass_through_endpoints", field_value=None + ) + + ## Update field by removing endpoint + pass_through_endpoint_data: Optional[List] = response.field_value + if response.field_value is None or pass_through_endpoint_data is None: + raise HTTPException( + status_code=400, + detail={"error": "There are no pass-through endpoints setup."}, + ) + + # Find the endpoint to delete + found_endpoint = _find_endpoint_by_id(pass_through_endpoint_data, endpoint_id) + + if found_endpoint is None: + raise HTTPException( + status_code=400, + detail={ + "error": "Endpoint with ID '{}' was not found in pass-through endpoint list.".format( + endpoint_id + ) + }, + ) + + # Find the index for deleting from the list + endpoint_index = None + for idx, endpoint in enumerate(pass_through_endpoint_data): + _endpoint = ( + PassThroughGenericEndpoint(**endpoint) + if isinstance(endpoint, dict) + else endpoint + ) + if _endpoint.id == endpoint_id: + endpoint_index = idx + break + + if endpoint_index is None: + raise HTTPException( + status_code=400, + detail={ + "error": f"Could not find index for endpoint with ID '{endpoint_id}'" + }, + ) + + # Remove the endpoint + pass_through_endpoint_data.pop(endpoint_index) + response_obj = found_endpoint + + # Remove routes from registry + InitPassThroughEndpointHelpers.remove_endpoint_routes(endpoint_id) + + ## Update db + updated_data = ConfigFieldUpdate( + field_name="pass_through_endpoints", + field_value=pass_through_endpoint_data, + config_type="general_settings", + ) + await update_config_general_settings( + data=updated_data, user_api_key_dict=user_api_key_dict + ) + + return PassThroughEndpointResponse(endpoints=[response_obj]) + + +def _find_endpoint_by_id( + endpoints_data: List, + endpoint_id: str, +) -> Optional[PassThroughGenericEndpoint]: + """ + Find an endpoint by ID. + + Args: + endpoints_data: List of endpoint data (dicts or PassThroughGenericEndpoint objects) + endpoint_id: ID to search for + + Returns: + Found endpoint or None if not found + """ + for endpoint in endpoints_data: + _endpoint: Optional[PassThroughGenericEndpoint] = None + if isinstance(endpoint, dict): + _endpoint = PassThroughGenericEndpoint(**endpoint) + elif isinstance(endpoint, PassThroughGenericEndpoint): + _endpoint = endpoint + + # Only compare IDs to IDs + if _endpoint is not None and _endpoint.id == endpoint_id: + return _endpoint + + return None + + +async def initialize_pass_through_endpoints_in_db(): + """ + Gets all pass-through endpoints from db and initializes them in the proxy server. + """ + pass_through_endpoints = await _get_pass_through_endpoints_from_db() + await initialize_pass_through_endpoints( + pass_through_endpoints=pass_through_endpoints + )