48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
from datetime import timedelta
|
|
|
|
from fastapi import HTTPException
|
|
|
|
import litellm
|
|
from litellm.proxy._types import CommonProxyErrors, InvitationNew, UserAPIKeyAuth
|
|
|
|
|
|
async def create_invitation_for_user(
|
|
data: InvitationNew,
|
|
user_api_key_dict: UserAPIKeyAuth,
|
|
):
|
|
"""
|
|
Create an invitation for the user to onboard to LiteLLM Admin UI.
|
|
"""
|
|
from litellm.proxy.proxy_server import litellm_proxy_admin_name, prisma_client
|
|
|
|
if prisma_client is None:
|
|
raise HTTPException(
|
|
status_code=400,
|
|
detail={"error": CommonProxyErrors.db_not_connected_error.value},
|
|
)
|
|
|
|
current_time = litellm.utils.get_utc_datetime()
|
|
expires_at = current_time + timedelta(days=7)
|
|
|
|
try:
|
|
response = await prisma_client.db.litellm_invitationlink.create(
|
|
data={
|
|
"user_id": data.user_id,
|
|
"created_at": current_time,
|
|
"expires_at": expires_at,
|
|
"created_by": user_api_key_dict.user_id or litellm_proxy_admin_name,
|
|
"updated_at": current_time,
|
|
"updated_by": user_api_key_dict.user_id or litellm_proxy_admin_name,
|
|
} # type: ignore
|
|
)
|
|
return response
|
|
except Exception as e:
|
|
if "Foreign key constraint failed on the field" in str(e):
|
|
raise HTTPException(
|
|
status_code=400,
|
|
detail={
|
|
"error": "User id does not exist in 'LiteLLM_UserTable'. Fix this by creating user via `/user/new`."
|
|
},
|
|
)
|
|
raise HTTPException(status_code=500, detail={"error": str(e)})
|