Ë
    tPêjïî  ã                   ó"
  — U d dl Z 	 d dlmZmZ d dlmZmZmZmZm	Z	m
Z
 d dlZd dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dl­ d d	lmZmZ d d
lmZ d dlmZ d dlm Z m!Z! d dl"m#Z# d dl$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ er$d dlAmBZB d dlCmDZE d dlCmFZG d dlCmHZI d dlCmJZK d d lCmLZM  e«       ZNeeOd!<    G d"„ d#e«      ZP G d$„ d%e«      ZQ G d&„ d'e«      ZR G d(„ d)e«      ZS G d*„ d+e«      ZT G d,„ d-e«      ZU G d.„ d/e«      ZV G d0„ d1e«      ZW G d2„ d3e«      ZX G d4„ d5e«      ZY G d6„ d7e«      ZZ G d8„ d9e«      Z[e
d:e0d;d'fd<„«       Z\e
d:e2d;d)fd=„«       Z\e
d:e4d;d+fd>„«       Z\e
d:e6d;d-fd?„«       Z\e
d:e8d;d/fd@„«       Z\e
d:e:d;d%fdA„«       Z\e
d:e<d;d1fdB„«       Z\d:e0e2z  e4z  e6z  e8z  e:z  e<z  d;e]fdC„Z\dDe^dEe_dFe.d;dfdG„Z` eeae^e]f   «      ZbeeOdH<    eceDjÈ                  jË                  «       «      dIhz
  ZfeeOdJ<    ecdKdLh«      ZgeeOdM<   dNee^e]f   dOe^d;ee^e]f   fdP„ZhdQead;eafdR„ZieNjÕ                  dSdTg ee«      gek¬U«       ee«      fdVeldEe_fdW„«       ZmeNjÝ                  dXe>dTg¬Y«      ddddddZd[d ee«      f	d\e^dz  d]e^dz  d^e^dz  d_e^dz  d`e^dz  daeodbeodce^dz  dEe_fdd„«       ZpdVeldFe.dz  d;e^dz  fde„ZqeNjå                  dfdTg ee«      ges¬U«       ee«      fdgedEe_fdh„«       Ztdieae^e]f   djePd;eae^e]f   fdk„ZueNjå                  dldTg ee«      gesdm¬n«      dDe^dVevdEee_ ee«      f   fdo„«       ZweNjñ                  dpdTg ee«      geyes   ¬U«       ee«      fdVezdEe_fdq„«       Z{eNjÝ                  drdTg ee«      geyes   ¬U«       ejø                  dds¬t«       ejø                  ddu¬t«       ee«      fdve^dz  dwe^dz  dEe_fdx„«       Z}eNjÝ                  dydTg ee«      ges¬U«       ee«      fdDe^dEe_fdz„«       Z~eNjÕ                  dydTg ee«      g¬{«       ee«      fdVedEe_fd|„«       Z€eNjÕ                  d}dTg ee«      ge�¬U«      e, ee«      fdVe‚d~edEe_d;e�fd„«       «       Zƒd€e^dFe.d;eLfd�„Z„eNjå                  d‚dTg ee«      ge…¬U«      e, ee«      fdVe†dEe_fdƒ„«       «       Z‡eNjñ                  d„dTg ee«      g¬{«       ee«      fdVeˆdEe_fd…„«       Z‰d†eŠdDe^dFe.d;e‹eLe…f   fd‡„ZŒy)ˆé    N)ÚMappingÚSequence)ÚTYPE_CHECKINGÚ	AnnotatedÚFinalÚProtocolÚcastÚoverload)Ú	APIRouterÚDependsÚHTTPExceptionÚRequestÚstatus)ÚTypeAdapter)Úverbose_proxy_logger)Úuuid)Ú*)Úcan_user_call_modelÚget_user_object)Úuser_api_key_auth)Úget_budget_reset_time)Ú
new_budgetÚupdate_budget)Úget_daily_activity)Ú_set_object_metadata_fieldÚ_user_has_admin_view)Ú&handle_update_object_permission_commonÚ prepare_object_permission_upsert)Úget_new_internal_user_defaultsÚmanagement_endpoint_wrapper)ÚPrismaClient)ÚBudgetRepository)ÚObjectPermissionRepository)ÚOrganizationRepository)Ú OrganizationMembershipRepository)ÚTeamRepository)ÚUserRepository)ÚVerificationTokenRepository)ÚSpendAnalyticsPaginatedResponse)Ú_update_dictionary)ÚTracebackType)ÚLiteLLM_BudgetTable)ÚLiteLLM_ObjectPermissionTable)ÚLiteLLM_OrganizationMembership)ÚLiteLLM_OrganizationTable)ÚLiteLLM_UserTableÚrouterc                   ó(   — e Zd Zededz  fd„«       Zy)Ú_ObjectPermissionRowÚreturnNc                  ó   — y ©N© ©Úselfs    ú~/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/management_endpoints/organization_endpoints.pyÚobject_permission_idz)_ObjectPermissionRow.object_permission_idU   s   € Ø25ó    )Ú__name__Ú
__module__Ú__qualname__ÚpropertyÚstrr;   r7   r<   r:   r3   r3   T   s   „ ØØ5 c¨D¡jÒ5ó Ù5r<   r3   c                   ó&   — e Zd Zdeeef   ddfd„Zy)Ú_UserTableClientÚwherer4   zPrismaUserTable | Nonec              ƒ   ó   K  — y ­wr6   r7   ©r9   rD   s     r:   Úfind_uniquez_UserTableClient.find_uniqueZ   ó   è ø� ùó   ‚N)r=   r>   r?   r   rA   ÚobjectrG   r7   r<   r:   rC   rC   Y   s   „ Ø] w¨s°F¨{Ñ';Ð]Ð@XÔ]r<   rC   c                   ó&   — e Zd Zdeeef   ddfd„Zy)Ú_BudgetTableClientÚdatar4   ÚPrismaBudgetTablec              ƒ   ó   K  — y ­wr6   r7   ©r9   rM   s     r:   Úcreatez_BudgetTableClient.create^   rH   rI   N©r=   r>   r?   r   rA   rJ   rQ   r7   r<   r:   rL   rL   ]   s   „ ØR ¨¨f¨Ñ!5ÐRÐ:MÔRr<   rL   c                   ó&   — e Zd Zdeeef   ddfd„Zy)Ú_ObjectPermissionTableClientrM   r4   ÚPrismaObjectPermissionTablec              ƒ   ó   K  — y ­wr6   r7   rP   s     r:   rQ   z#_ObjectPermissionTableClient.createb   rH   rI   NrR   r7   r<   r:   rT   rT   a   s   „ Ø\ ¨¨f¨Ñ!5Ð\Ð:WÔ\r<   rT   c            	       ó  — e Zd Z	 ddeeef   deeef   dz  ddfd„Z	 ddeeef   deeef   dz  ddfd	„Z	 	 ddeeef   dz  deeef   dz  dd
fd„Z	 ddeeef   deeef   deeef   dz  ddfd„Z		 ddeeef   deeef   dz  ddfd„Z
y)Ú_OrganizationTableClientNrM   Úincluder4   ÚPrismaOrganizationTablec              ƒ   ó   K  — y ­wr6   r7   )r9   rM   rY   s      r:   rQ   z_OrganizationTableClient.createf   s	   è ø€ à$'ùrI   rD   zPrismaOrganizationTable | Nonec              ƒ   ó   K  — y ­wr6   r7   ©r9   rD   rY   s      r:   rG   z$_OrganizationTableClient.find_uniquej   ó	   è ø€ à+.ùrI   z!Sequence[PrismaOrganizationTable]c              ƒ   ó   K  — y ­wr6   r7   r]   s      r:   Ú	find_manyz"_OrganizationTableClient.find_manyn   s   è ø€ ð /2ùrI   c              ƒ   ó   K  — y ­wr6   r7   )r9   rD   rM   rY   s       r:   Úupdatez_OrganizationTableClient.updatet   s   è ø€ ð
 %(ùrI   c              ƒ   ó   K  — y ­wr6   r7   r]   s      r:   Údeletez_OrganizationTableClient.delete{   r^   rI   r6   )NN)r=   r>   r?   r   rA   rJ   rQ   rG   r`   rb   rd   r7   r<   r:   rX   rX   e   sD  „ àQUñ(Ø˜C ˜KÑ(ð(Ø3:¸3À¸;Ñ3GÈ$Ñ3Nð(à	"ó(ð
 SWñ/Ø˜S &˜[Ñ)ð/Ø4;¸CÀ¸KÑ4HÈ4Ñ4Oð/à	)ó/ð .2Ø/3ñ2à�s˜F�{Ñ# dÑ*ð2ð ˜˜f˜Ñ%¨Ñ,ð2ð 
-ó	2ð 04ñ	(à�s˜F�{Ñ#ð(ð �c˜6�kÑ"ð(ð ˜˜f˜Ñ%¨Ñ,ð	(ð
 
#ó(ð SWñ/Ø˜S &˜[Ñ)ð/Ø4;¸CÀ¸KÑ4HÈ4Ñ4Oð/à	)ô/r<   rX   c                   óØ   — e Zd Zdeeef   ddfd„Z	 ddeeef   deeef   dz  ddfd	„Z	 ddeeef   dz  dd
fd„Zdeeef   deeef   ddfd„Z	deeef   ddfd„Z
deeef   defd„Zy)Ú"_OrganizationMembershipTableClientrM   r4   ÚPrismaOrganizationMembershipc              ƒ   ó   K  — y ­wr6   r7   rP   s     r:   rQ   z)_OrganizationMembershipTableClient.create�   rH   rI   NrD   rY   z#PrismaOrganizationMembership | Nonec              ƒ   ó   K  — y ­wr6   r7   r]   s      r:   rG   z._OrganizationMembershipTableClient.find_uniqueƒ   s	   è ø€ à03ùrI   z&Sequence[PrismaOrganizationMembership]c              ƒ   ó   K  — y ­wr6   r7   rF   s     r:   r`   z,_OrganizationMembershipTableClient.find_many‡   s	   è ø€ à36ùrI   c              ƒ   ó   K  — y ­wr6   r7   ©r9   rD   rM   s      r:   rb   z)_OrganizationMembershipTableClient.update‹   s	   è ø€ à),ùrI   c              ƒ   ó   K  — y ­wr6   r7   rF   s     r:   rd   z)_OrganizationMembershipTableClient.delete�   rH   rI   c              ƒ   ó   K  — y ­wr6   r7   rF   s     r:   Údelete_manyz._OrganizationMembershipTableClient.delete_many‘   rH   rI   r6   )r=   r>   r?   r   rA   rJ   rQ   rG   r`   rb   rd   Úintro   r7   r<   r:   rf   rf   €   sÛ   „ Ø] ¨¨f¨Ñ!5Ð]Ð:XÓ]ð SWñ4Ø˜S &˜[Ñ)ð4Ø4;¸CÀ¸KÑ4HÈ4Ñ4Oð4à	.ó4ð
 48ñ7Ø˜S &˜[Ñ)¨DÑ0ð7à	1ó7ð-Ø˜S &˜[Ñ)ð-Ø18¸¸f¸Ñ1Eð-à	'ó-ð f '¨#¨v¨+Ñ"6ÐeÐ;`ÓeàH w¨s°F¨{Ñ';ÐHÀÔHr<   rf   c                   ó&   — e Zd Zdeeef   defd„Zy)Ú_TeamTableClientrD   r4   c              ƒ   ó   K  — y ­wr6   r7   rF   s     r:   ro   z_TeamTableClient.delete_many•   rH   rI   N©r=   r>   r?   r   rA   rJ   rp   ro   r7   r<   r:   rr   rr   ”   ó   „ ØH w¨s°F¨{Ñ';ÐHÀÔHr<   rr   c                   ó&   — e Zd Zdeeef   defd„Zy)Ú_VerificationTokenTableClientrD   r4   c              ƒ   ó   K  — y ­wr6   r7   rF   s     r:   ro   z)_VerificationTokenTableClient.delete_many™   rH   rI   Nrt   r7   r<   r:   rw   rw   ˜   ru   r<   rw   c                   ó4   — e Zd Zdeeef   deeef   ddfd„Zy)Ú_ObjectPermissionTxClientrD   rM   r4   rU   c              ƒ   ó   K  — y ­wr6   r7   rl   s      r:   Úupsertz _ObjectPermissionTxClient.upsert�   s	   è ø€ à(+ùrI   N)r=   r>   r?   r   rA   rJ   r|   r7   r<   r:   rz   rz   œ   s1   „ ð,Ø˜S &˜[Ñ)ð,Ø18¸¸f¸Ñ1Eð,à	&ô,r<   rz   c                   ó4   — e Zd Zdeeef   deeef   ddfd„Zy)Ú_BudgetTxClientrD   rM   r4   zPrismaBudgetTable | Nonec              ƒ   ó   K  — y ­wr6   r7   rl   s      r:   rb   z_BudgetTxClient.update£   rH   rI   N)r=   r>   r?   r   rA   rJ   rb   r7   r<   r:   r~   r~   ¢   s'   „ Øv '¨#¨v¨+Ñ"6Ðv¸gÀcÈ6ÀkÑ>RÐvÐWqÔvr<   r~   c                   óB   — e Zd Zedd„«       Zedd„«       Zedd„«       Zy)Ú_TransactionTablesc                  ó   — y r6   r7   r8   s    r:   Úlitellm_objectpermissiontablez0_TransactionTables.litellm_objectpermissiontable§   s   € ØLOr<   c                  ó   — y r6   r7   r8   s    r:   Úlitellm_budgettablez&_TransactionTables.litellm_budgettableª   s   € Ø8;r<   c                  ó   — y r6   r7   r8   s    r:   Úlitellm_organizationtablez,_TransactionTables.litellm_organizationtable­   s   € ØGJr<   N)r4   rz   )r4   r~   )r4   rX   )r=   r>   r?   r@   rƒ   r…   r‡   r7   r<   r:   r�   r�   ¦   s,   „ ØÚOó ØOàÚ;ó Ø;àÚJó ÙJr<   r�   c            	       óD   — e Zd Zd	d„Zdee   dz  dedz  dddedz  fd„Zy)
Ú_TransactionManagerr4   c              ƒ   ó   K  — y ­wr6   r7   r8   s    r:   Ú
__aenter__z_TransactionManager.__aenter__²   rH   rI   Úexc_typeNÚ	exc_valueÚ	tracebackzTracebackType | Nonec              ƒ   ó   K  — y ­wr6   r7   )r9   rŒ   r�   rŽ   s       r:   Ú	__aexit__z_TransactionManager.__aexit__´   s   è ø€ ð
 ùrI   )r4   r�   )r=   r>   r?   r‹   ÚtypeÚBaseExceptionÚboolr�   r7   r<   r:   r‰   r‰   ±   sC   „ Û;ðà�}Ñ%¨Ñ,ðð ! 4Ñ'ðð *ð	ð
 
�‰ôr<   r‰   Ú
repositoryr4   c                  ó   — y r6   r7   ©r”   s    r:   Ú_tabler—   ¼   s   € ØBEr<   c                  ó   — y r6   r7   r–   s    r:   r—   r—   À   s   € ØVYr<   c                  ó   — y r6   r7   r–   s    r:   r—   r—   Ä   s   € ØNQr<   c                  ó   — y r6   r7   r–   s    r:   r—   r—   È   s   € Øber<   c                  ó   — y r6   r7   r–   s    r:   r—   r—   Ì   ó   € Ø>Ar<   c                  ó   — y r6   r7   r–   s    r:   r—   r—   Ð   rœ   r<   c                  ó   — y r6   r7   r–   s    r:   r—   r—   Ô   s   € ØX[r<   c                 ó   — | j                   }|S r6   )Útable)r”   Úprisma_tables     r:   r—   r—   Ø   s   € ð #-×"2Ñ"2€LØÐr<   Úorganization_idÚuser_api_key_dictÚprisma_clientc              ƒ   óÔ  K  — t        |«      ry|j                  st        t        j                  d¬«      ‚ddlm}m} t        |j                  ||d|¬«      ƒ d{  –—† }|€t        t        j                  d¬«      ‚|j                  xs g D ];  }|j                  | k(  sŒ|j                  t        j                  j                  k(  sŒ; y t        t        j                  d¬«      ‚7 ŒŠ­w)z¡
    Verify the caller is either a proxy admin or an org admin of the given organization.

    Raises HTTPException(403) if the caller does not have access.
    Nz+You do not have access to this organization©Ústatus_codeÚdetailr   )Úproxy_logging_objÚuser_api_key_cacheF)Úuser_idr¤   rª   Úuser_id_upsertr©   )r   r«   r   r   ÚHTTP_403_FORBIDDENÚlitellm.proxy.proxy_serverr©   rª   r   Úorganization_membershipsr¢   Ú	user_roleÚLitellmUserRolesÚ	ORG_ADMINÚvalue)r¢   r£   r¤   r©   rª   Úcaller_userÚms          r:   Ú_verify_org_accessr¶   å   sæ   è ø€ ô Ð-Ô.Øà×$Ò$ÜÜ×1Ñ1Ø@ô
ð 	
÷
 Qä.Ø!×)Ñ)Ø#Ø-ØØ+ô ÷ €Kð ÐÜÜ×1Ñ1Ø@ô
ð 	
ð
 ×1Ñ1Ò7°Rò ˆØ×Ñ Ó/°A·K±KÔCS×C]ÑC]×CcÑCcÓ4cÙðô Ü×-Ñ-Ø<ôð ð#ús   ‚AC(ÁC&ÁAC(Â 'C(ÃC(Ú_STR_OBJECT_DICT_ADAPTERÚ	budget_idÚ_BUDGET_SETTABLE_FIELDSÚorganization_aliasÚmodelsÚ_ORG_COLUMN_FIELDSÚbudget_updatesÚ
updated_byc                 ó„   — | j                  d«      }d| v r dt        |t        «      rt        |¬«      ndini }i | ¥|¥d|i¥S )a  
    Budget-row columns to write. ``budget_reset_at`` tracks any sent ``budget_duration``:
    recomputed for a new duration, cleared alongside a ``None`` duration so no stale reset
    timestamp survives. Other sent fields (including a ``None`` clear) are written as-is.
    Úbudget_durationÚbudget_reset_at)rÀ   Nr¾   )ÚgetÚ
isinstancerA   r   )r½   r¾   rÀ   Úrecomputed_reset_ats       r:   Úbuild_budget_write_datarÅ     se   € ð ,×/Ñ/Ð0AÓB€Oð  Ñ.ð	 ÜJTÐUdÔfiÔJjÔ%°oÕFÐptñ	
ð ð ð OˆnÐNÐ 3ÐN°\À:ÑNÐNr<   Úraw_datac                 óÜ   — | j                  «       }d|v rW|j                  di «      }|rCt        j                  j	                  «       }|j                  «       D ]  \  }}||v sŒ|€Œ|||<   Œ |S )zË
    Transform organization update request to handle UI payload format.

    The UI sends nested budget data in 'litellm_budget_table', but our
    model expects flat budget fields at the top level.
    Úlitellm_budget_table)ÚcopyÚpopr,   Úmodel_fieldsÚkeysÚitems)rÆ   Útransformed_dataÚbudget_dataÚbudget_fieldsÚkeyr³   s         r:   Ú=handle_nested_budget_structure_in_organization_update_requestrÒ   )  s�   € ð 'Ÿm™m›oÐð Ð!1Ñ1Ø-×1Ñ1Ð2HÈ"ÓMˆÙä#6×#CÑ#C×#HÑ#HÓ#JˆMØ)×/Ñ/Ó1ò 2‘
��UØ˜-Ò'¨EÑ,=Ø,1Ð$ SÒ)ð2ð Ðr<   z/organization/newzorganization management)ÚtagsÚdependenciesÚresponse_modelrM   c           	   ƒ   ó	  K  — ddl m}m}m} |€'t	        ddt
        j                  j                  i¬«      ‚|j                  �|j                  t        j                  k7  rt	        ddd|j                  › �i¬«      ‚|€'t	        ddt
        j                  j                  i¬«      ‚| j                  �Jt        j                  | j                  «      r| j                  dk  rt	        d	dd
| j                  › �i¬«      ‚| j                  �Jt        j                  | j                  «      r| j                  dk  rt	        d	dd| j                  › �i¬«      ‚d}|j                   �^	 t#        t%        |«      «      j'                  d|j                   i¬«      ƒ d{  –—† }|�#t(        j+                  |j-                  «       «      }| j0                  �€	 t2        j4                  j7                  «       }t8        j;                  | j=                  d¬«      «      }|j?                  «       D �	�
ci c]  \  }	}
|	|v sŒ|	|
“Œ }}	}
t2        j+                  |«      }t8        j;                  |jA                  |j=                  d¬«      «      «      }t#        tC        |«      «      jE                  i |¥|j                   xs ||j                   xs |dœ¥¬«      ƒ d{  –—† }|j0                  | _        tG        | |¬«      ƒ d{  –—† }	 tI        |jJ                  «      dk(  rnNtI        | jJ                  «      dk(  rt	        d	ddi¬«      ‚| jJ                  D ]  }tM        |||¬«      ƒ d{  –—†  Œ tO        di | j=                  d¬«      ¤||j                   xs ||j                   xs |dœ¤Ž}tP        D ](  }tS        | |d«      €ŒtU        ||tS        | |«      ¬«       Œ* t8        j;                  |jA                  |j=                  d¬«      «      «      }tW        jX                  dt<        j[                  |d¬«      «       t#        t]        |«      «      jE                  i |¥ddi¬«      ƒ d{  –—† }|S 7 �ŒÉ# t.        $ r Y �Œ®w xY wc c}
}	w 7 �Œ¬7 �Œ‰7 �Œ&7 Œ(­w)a  
    Allow orgs to own teams

    Set org level budgets + model access.

    Only admins can create orgs.

    # Parameters

    - organization_alias: *str* - The name of the organization.
    - models: *List* - The models the organization has access to.
    - budget_id: *Optional[str]* - The id for a budget (tpm/rpm/max budget) for the organization.
    ### IF NO BUDGET ID - CREATE ONE WITH THESE PARAMS ###
    - max_budget: *Optional[float]* - Max budget for org
    - tpm_limit: *Optional[int]* - Max tpm limit for org
    - rpm_limit: *Optional[int]* - Max rpm limit for org
    - model_rpm_limit: *Optional[Dict[str, int]]* - The RPM (Requests Per Minute) limit per model for this organization.
    - model_tpm_limit: *Optional[Dict[str, int]]* - The TPM (Tokens Per Minute) limit per model for this organization.
    - max_parallel_requests: *Optional[int]* - [Not Implemented Yet] Max parallel requests for org
    - soft_budget: *Optional[float]* - [Not Implemented Yet] 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 org budget
    - metadata: *Optional[dict]* - Metadata for organization, store information for organization. Example metadata - {"extra_info": "some info"}
    - blocked: *bool* - Flag indicating if the org is blocked or not - will stop all calls from keys with this org_id.
    - tags: *Optional[List[str]]* - Tags for [tracking spend](https://litellm.vercel.app/docs/proxy/enterprise#tracking-spend-for-custom-tags) and/or doing [tag-based routing](https://litellm.vercel.app/docs/proxy/tag_routing).
    - organization_id: *Optional[str]* - The organization id of the team. Default is None. Create via `/organization/new`.
    - model_aliases: Optional[dict] - Model aliases for the team. [Docs](https://docs.litellm.ai/docs/proxy/team_based_routing#create-team-with-model-alias)
    - object_permission: Optional[LiteLLM_ObjectPermissionBase] - organization-specific object permission. Example - {"vector_stores": ["vector_store_1", "vector_store_2"]}. IF null or {} then no object permission.
    - allowed_models: Optional[List[str]] - List of models the organization is allowed to access. If not set, defaults to the models field.
    Case 1: Create new org **without** a budget_id

    ```bash
    curl --location 'http://0.0.0.0:4000/organization/new' 
    --header 'Authorization: Bearer sk-1234' 
    --header 'Content-Type: application/json' 
    --data '{
        "organization_alias": "my-secret-org",
        "models": ["model1", "model2"],
        "max_budget": 100
    }'


    ```

    Case 2: Create new org **with** a budget_id

    ```bash
    curl --location 'http://0.0.0.0:4000/organization/new' 
    --header 'Authorization: Bearer sk-1234' 
    --header 'Content-Type: application/json' 
    --data '{
        "organization_alias": "my-secret-org",
        "models": ["model1", "model2"],
        "budget_id": "428eeaa8-f3ac-4e85-a8fb-7dc8d7aa8689"
    }'
    ```
    r   )Úlitellm_proxy_admin_nameÚ
llm_routerr¤   Néô  Úerrorr¦   é‘  z,Only admins can create orgs. Your role is = é�  ú;max_budget must be a non-negative finite number. Received: ú<soft_budget must be a non-negative finite number. Received: r«   ©rD   T©Úexclude_none)Ú
created_byr¾   ©rM   )rM   r¤   z\User not allowed to give access to all models. Select models you want org to have access to.)rØ   Úuser_object)r;   râ   r¾   )Úobject_dataÚ
field_namer³   znew_organization_row: %sé   )ÚindentrÈ   )rM   rY   r7   )/r®   r×   rØ   r¤   r   ÚCommonProxyErrorsÚdb_not_connected_errorr³   r°   r±   ÚPROXY_ADMINÚno_llm_routerÚ
max_budgetÚmathÚisfiniteÚsoft_budgetr«   r—   r'   rG   r0   Úmodel_validateÚ
model_dumpÚ	Exceptionr¸   r,   rË   rÌ   r·   Úvalidate_pythonÚjsonrÍ   Újsonify_objectr"   rQ   Ú_set_object_permissionÚlenr»   r   r/   Ú)LiteLLM_ManagementEndpoint_MetadataFieldsÚgetattrr   r   ÚinfoÚdumpsr$   )rM   r£   r×   rØ   r¤   Úuser_object_correct_typerä   Úbudget_paramsÚ
_json_dataÚkÚvÚ_budget_dataÚ
budget_rowr   Ú_budgetr;   rµ   Úorganization_rowÚfieldÚnew_organization_rowÚresponses                        r:   Únew_organizationr	  A  s«  è ø€ ÷Tñ ð ÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð
 ×"Ñ"Ð*Ð.?×.IÑ.IÔM]×MiÑMiÒ.iÜØØÐKÐL]×LgÑLgÐKhÐiÐjô
ð 	
ð
 ÐÜ¨°WÔ>O×>]Ñ>]×>cÑ>cÐ4dÔeÐeð ‡�Ð"¬D¯M©M¸$¿/¹/Ô,JÈdÏoÉoÐ`aÒNaÜØØÐZÐ[_×[jÑ[jÐZkÐlÐmô
ð 	
ð ×ÑÐ#¬T¯]©]¸4×;KÑ;KÔ-LÐPT×P`ÑP`ÐcdÒPdÜØØÐ[Ð\`×\lÑ\lÐ[mÐnÐoô
ð 	
ð
 :>Ðà× Ñ Ð,ð	Ü'-¬n¸]Ó.KÓ'L×'XÑ'XØ Ð"3×";Ñ";Ð<ð (Yó (÷ "ˆKð Ð&Ü+<×+KÑ+KÈK×LbÑLbÓLdÓ+eÐ(ð ‡~�~Ñð	ô
  3×?Ñ?×DÑDÓFˆô 5×DÑDÀTÇYÁYÐ\`ÀYÓEaÓbˆ
Ø0:×0@Ñ0@Ó0B×Y©¨¨1ÀaÈ=ÒFX˜q !™tÐYˆÑYÜ/×>Ñ>¸|ÓLˆ
ä4×DÑDØ×(Ñ(¨¯©Àd¨Ó)KÓLó
ˆ
ô  &Ô&6°}Ó&EÓF×MÑMðØðà/×7Ñ7ÒSÐ;SØ/×7Ñ7ÒSÐ;Sòð  Nó  
÷ 
ˆð !×*Ñ*ˆŒô )?ØØ#ô)÷ #Ðð
ô Ð×#Ñ#Ó$¨Ò)Øäˆt�{‰{Ó˜qÒ ÜØàÐ{ðôð ð —‘ò 	fˆAÜ% a°JÐLdÔe×eÑeð	fô 8ñ Ø
�)‰) ˆ)Ó
&ðà1Ø$×,Ñ,ÒHÐ0HØ$×,Ñ,ÒHÐ0Hó	Ðô ;ò ˆÜ�4˜ Ó%Ñ1Ü&Ø,Ø Ü˜d EÓ*öðô #;×"JÑ"JØ×$Ñ$Ð%5×%:Ñ%:ÈÐ%:Ó%MÓNó#Ðô ×ÑÐ8¼$¿*¹*ÐEYÐbc¸*Ó:dÔeÜ"Ô#9¸-Ó#HÓI×PÑPð
Ø"ð
ð (¨Ð.ð	 Qó ÷ €Hð €Oði"úô
 ò 	Úð	üó Zð
ùð#ùð( fùð*ús›   ‚EQ?Å3Q ÆQÆ)Q Æ<A$Q?È Q.È-Q.È2BQ?ËQ4Ë	%Q?Ë.Q7Ë/A%Q?ÍQ:ÍAQ?Î/B%Q?ÑQ=ÑQ?ÑQ Ñ	Q+Ñ'Q?Ñ*Q+Ñ+
Q?Ñ7Q?Ñ:Q?Ñ=Q?z/organization/daily/activity)rÕ   rÓ   é   é
   Úorganization_idsÚ
start_dateÚend_dateÚmodelÚapi_keyÚpageÚ	page_sizeÚexclude_organization_idsc	              ƒ   ó`  K  — ddl m}	 |	€'t        ddt        j                  j
                  i¬«      ‚| r| j                  d«      nd}
d}|r|r|j                  d«      nd}t        |«      sœt        t        |	«      «      j                  d|j                  i¬	«      ƒ d{  –—† }|D �cg c]6  }|j                  t        j                  j
                  k(  sŒ+|j                  ‘Œ8 }}|
€|}
n|
D ]  }||vsŒt        d
dd|› d�i¬«      ‚ t         j#                  i «      }|
�dt%        |
«      i|d<   t        t'        |	«      «      j                  |¬	«      ƒ d{  –—† }t)        |	dd|
|D �ci c]  }|j                  d|j*                  i“Œ c}|||||||¬«      ƒ d{  –—† S 7 Œÿc c}w 7 ŒOc c}w 7 Œ­w)zX
    Get daily activity for specific organizations or all accessible organizations.
    r   ©r¤   NrÙ   rÚ   r¦   ú,r«   rß   é“  z(User is not org_admin for Organization= ú.Úinr¢   Úlitellm_dailyorganizationspendrº   )r¤   Ú
table_nameÚentity_id_fieldÚ	entity_idÚentity_metadata_fieldÚexclude_entity_idsr  r  r  r  r  r  )r®   r¤   r   ré   rê   r³   Úsplitr   r—   r%   r`   r«   r°   r±   r²   r¢   r·   rô   Úlistr$   r   rº   )r  r  r  r  r  r  r  r  r£   r¤   Úorg_ids_listÚexclude_org_ids_listÚmembershipsrµ   Úadmin_org_idsÚorg_idÚwhere_conditionÚorg_aliasesÚos                      r:   Úget_organization_daily_activityr*    só  è ø€ õ&ð ÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ñ 3CÐ#×)Ñ)¨#Ô.È€LØ-1ÐÙÙF^Ð7×=Ñ=¸cÔBÐdhÐô  Ð 1Ô2Ü#)Ô*JÈ=Ó*YÓ#Z×#dÑ#dØÐ/×7Ñ7Ð8ð $eó $
÷ 
ˆð 5@Ös¨qÀ1Ç;Á;ÔRb×RlÑRl×RrÑRrÓCr˜×*Ó*ÐsˆÐsØÐà(‰Lð 'ò �Ø Ò.Ü'Ø$'Ø 'Ð+SÐTZÐS[Ð[\Ð)]Ð^ôð ðô 6×EÑEÀbÓI€OØÐØ.2´D¸Ó4FÐ-GˆÐ)Ñ*Ü%Ô&<¸]Ó&KÓL×VÑVÐ]lÐVÓm×m€Kô $Ø#Ø3Ø)ØØhsÖtÐcd˜q×0Ñ0Ð3GÈ×I]ÑI]Ð2^Ñ^ÒtØ/ØØØØØØô÷ ð ð/
úò tð" núò uðús[   ‚BF.ÂFÂF.Â',F ÃF Ã"F.Ã3A"F.ÅF%ÅF.Å' F'ÆF.ÆF,ÆF.Æ F.Æ'F.c              ƒ   óÖ   K  — |€y| j                   �Tt        t        |«      «      j                  | j                   j	                  d¬«      ¬«      ƒ d{  –—† }| ` |j
                  S y7 Œ­w)zÏ
    Creates the LiteLLM_ObjectPermissionTable record for the organization.
    - Handles permissions for vector stores and mcp servers.

    Returns the object_permission_id if created, otherwise None.
    NTrà   rã   )Úobject_permissionr—   r#   rQ   rò   r;   )rM   r¤   Úcreated_object_permissions      r:   r÷   r÷   S  sx   è ø€ ð ÐØà×ÑÐ)Ü17Ô8RÐS`Ó8aÓ1b×1iÑ1iØ×'Ñ'×2Ñ2ÀÐ2ÓEð 2jó 2
÷ ,
Ð!ð Ð"Ø(×=Ñ=Ð=Øð,
ús   ‚AA)ÁA'ÁA)z/organization/updateÚrequestc              ƒ   ó  K  — ddl m} |€'t        ddt        j                  j
                  i¬«      ‚|j                  €t        dddi¬«      ‚| j                  «       ƒ d{  –—† }t        |«      }t        di |¤Ž}|j                  �Jt        j                  |j                  «      r|j                  dk  rt        ddd	|j                  › �i¬«      ‚|j                  �Jt        j                  |j                  «      r|j                  dk  rt        ddd
|j                  › �i¬«      ‚|j                  €|j                  |_        |j                  €t        dddi¬«      ‚t!        |j                  ||¬«      ƒ d{  –—†  t#        |«      j$                  j'                  d|j                  i¬«      ƒ d{  –—† }|€t)        d|j                  › �«      ‚|j+                  d¬«      }|j-                  d«      �L|j.                  xs i }|j-                  di «      }	t1        t3        d|«      j5                  «       |	¬«      }
|
|d<   t6        j9                  |j;                  |«      «      }|j<                  �t?        ||¬«      ƒ d{  –—† }|j+                  «       jA                  «       D ��ci c]  \  }}|tB        jD                  v sŒ|€Œ||“Œ  }}}|r6|jF                  r*tI        tK        dd|jF                  i|¤Ž|¬«      ƒ d{  –—†  tB        jD                  D ]  }|jM                  |d«       Œ tO        t#        |«      «      jQ                  d|j                  i|ddddœ¬«      ƒ d{  –—† }|S 7 �Œ7 �Œõ7 �Œ¿7 Œóc c}}w 7 Œ|7 Œ­w)z 
    Update an organization
    r   r  NrÙ   rÚ   r¦   rÜ   ú]Cannot associate a user_id to this action. Check `/key/info` to validate if 'user_id' is set.rÝ   rÞ   zorganization_id is required©r¢   r£   r¤   r¢   rß   ú+Organization not found for organization_id=Trà   Úmetadatazdict[str, object])Úexisting_dictÚnew_dict)Ú	data_jsonÚexisting_organization_rowr¸   ©Ú
budget_objr£   ©ÚmembersÚteamsrÈ   ©rD   rM   rY   r7   ))r®   r¤   r   ré   rê   r³   r«   rõ   rÒ   ÚLiteLLM_OrganizationTableUpdaterí   rî   rï   rð   r¾   r¢   r¶   r$   r    rG   Ú
ValueErrorrò   rÂ   r3  r*   r	   rÉ   r·   rô   rö   r,  Úhandle_update_object_permissionrÍ   r,   rË   r¸   r   ÚBudgetNewRequestrÊ   r—   rb   )r.  r£   r¤   rÆ   Ú raw_data_with_flat_budget_fieldsrM   r7  Úupdated_organization_row_jsonÚexisting_metadataÚupdated_metadataÚmerged_metadataÚupdated_organization_rowr   r  rÐ   r  r  s                    r:   Úupdate_organizationrH  i  sÂ  è ø€ õ 9àÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð
 × Ñ Ð(ÜØàÐxðô
ð 	
ð $ŸL™L›N×*€HÜ.kÐltÓ.uÐ$ô 2ÑUÐ4TÑU€Dð ‡�Ð"¬D¯M©M¸$¿/¹/Ô,JÈdÏoÉoÐ`aÒNaÜØØÐZÐ[_×[jÑ[jÐZkÐlÐmô
ð 	
ð ×ÑÐ#¬T¯]©]¸4×;KÑ;KÔ-LÐPT×P`ÑP`ÐcdÒPdÜØØÐ[Ð\`×\lÑ\lÐ[mÐnÐoô
ð 	
ð
 ‡�ÐØ+×3Ñ3ˆŒà×ÑÐ#ÜØØÐ:Ð;ô
ð 	
ô Ø×,Ñ,Ø+Ø#ô÷ ð ô .DÀMÓ-R×-XÑ-X×-dÑ-dØ  $×"6Ñ"6Ð7ð .eó .÷ (Ðð !Ð(ÜÐFÀt×G[ÑG[ÐF\Ð]Ó^Ð^à+/¯?©?È¨?Ó+MÐ!à$×(Ñ(¨Ó4Ð@Ø#<×#EÑ#EÒ#KÈÐØ"?×"CÑ"CÀJÐPRÓ"SÐÜ7IÜØ#Ð%6óç‰d‹fØ%ô	8
ˆð 5DÐ% jÑ1ä7×GÑGØ×$Ñ$Ð%BÓCó Ðð ×ÑÐ)Ü)HØ.Ø&?ô*
÷ $
Ð ð Ÿ™Ó*×0Ñ0Ó2÷Ù��A°aÔ;N×;[Ñ;[Ò6[Ð`aÑ`mˆˆ1‰ð€Mñ ñ Ð2×<Ò<ÜÜ'ÑgÐ2K×2UÑ2UÐgÐYfÑgØ/ô
÷ 	
ð 	
ô %×1Ñ1ò 2ˆØ ×$Ñ$ U¨DÕ1ð2ô #Ô#9¸-Ó#HÓI×PÑPØ  $×"6Ñ"6Ð7Ø%Ø ¨4ÈÑNð Qó ÷ €Hð €Oðm +ùð<ùð(ùð0$
úóð
	
øðús‡   ‚ANÁ M,Á!DNÅ:M/Å;8NÆ3M2Æ4CNÊM5Ê%NÊ'M7ËM7ËM7Ë
6NÌ M=ÌA$NÍ%M?Í&NÍ/NÍ2NÍ5NÍ7NÍ?Nr6  r7  c              ƒ   ól   K  — ddl m} t        | |j                  |¬«      ƒ d{  –—† }|�|| d<   | S 7 Œ­w)a  
    Handle the update of object permission for an organization.

    - Upserts the new object permission into the LiteLLM_ObjectPermissionTable
    - Adds object_permission_id to data_json (this gets added in the DB)
    - Pops the object_permission from data_json
    r   r  )r6  Úexisting_object_permission_idr¤   Nr;   )r®   r¤   r   r;   )r6  r7  r¤   r;   s       r:   r@  r@  à  sK   è ø€ õ 9ô )OØØ&?×&TÑ&TØ#ô)÷ #Ðð Ð'Ø,@ˆ	Ð(Ñ)àÐð#ús   ‚"4¤2¥4z"/v2/organization/{organization_id}F)rÓ   rÔ   rÕ   Úinclude_in_schemac              ƒ   óV	  K  — ddl m} |€'t        ddt        j                  j
                  i¬«      ‚|j                  €t        dddi¬«      ‚|j                  �Jt        j                  |j                  «      r|j                  dk  rt        d	dd
|j                  › �i¬«      ‚|j                  �Jt        j                  |j                  «      r|j                  dk  rt        d	dd|j                  › �i¬«      ‚|j                  rddlm} 	  ||j                  «       d|j                   v r|j"                  €t        d	ddi¬«      ‚d|j                   v r|j$                  €t        d	ddi¬«      ‚|j&                  �+|j&                  j)                  d¬«      st        d	ddi¬«      ‚t+        | ||¬«      ƒ d{  –—†  t-        t/        |«      «      j1                  d| i¬«      ƒ d{  –—† }|€t        ddd| › �i¬«      ‚t2        j5                  |j)                  «       «      }|j                   }|D �	ci c]  }	|	t6        v sŒ|	||	   “Œ }
}	i |D �	ci c]  }	|	t8        v sŒ|	||	   “Œ c}	¥d|v rd|j:                  xs i ini ¥}d|v xr |j&                  du }|j&                  �:t=        |j&                  j)                  d¬«      |j>                  |¬«      ƒ d{  –—† nd}|�d|j>                  in|rddini }t2        j5                  |jA                  i |¥|¥d|j                  i¥«      «      }|jB                  jE                  «       }|4 ƒd{  –—† }|�H|jF                  jI                  d|j>                  i|jJ                  |jJ                  dœ¬«      ƒ d{  –—†  |
rrt2        j5                  |jA                  tM        tO        |
|j                  «      «      «      «      }|jP                  jS                  d |jT                  i|¬«      ƒ d{  –—†  |jV                  jS                  d| i|dddd!œ¬"«      ƒ d{  –—† }ddd«      ƒd{  –—†  |S # t        $ r}t        d	dt        |«      i¬«      ‚d}~ww xY w7 �Œ½7 �Œ’c c}	w c c}	w 7 �Œ¯7 �Œ=7 Œõ7 Œƒ7 ŒY7 ŒK# 1 ƒd{  –—†7  sw Y   S xY w­w)#aX  
    Partial update of an organization (RESTful PATCH, RFC 7396 merge-patch semantics).

    A sent field is written and an omitted one is left untouched (presence is read from
    ``model_fields_set``). Clear tokens are per field: budget limits and ``metadata`` clear with
    ``null``, ``models`` with ``[]``, and ``object_permission`` with ``null`` (it merges when sent,
    so an empty ``{}`` is rejected). ``organization_alias`` is required and cannot be cleared.
    Validation failures return 422; the object-permission upsert, budget-row write, and
    org-row write are one transaction.
    r   r  NrÙ   rÚ   r¦   rÜ   r0  i¦  rÝ   rÞ   )Úvalidate_model_max_budgetrº   z4organization_alias cannot be cleared; it is requiredr»   z1models cannot be set to null; send [] to clear itTrà   zgobject_permission cannot be an empty object; send null to clear it, or a non-empty object to set grantsr1  r¢   rß   é”  r2  r3  r,  )Únew_object_permissionrJ  r¤   r;   r¾   )rQ   rb   ©rD   rM   r¸   r:  r=  ),r®   r¤   r   ré   rê   r³   r«   rí   rî   rï   rð   Úmodel_max_budgetÚ;litellm.proxy.management_endpoints.key_management_endpointsrM  r?  rA   Úmodel_fields_setrº   r»   r,  rò   r¶   r—   r$   rG   r·   rô   r¹   r¼   r3  r   r;   rö   ÚdbÚtxrƒ   r|   ÚrecordÚdictrÅ   r…   rb   r¸   r‡   )r¢   rM   r£   r¤   rM  Úer7  Úfield_valuesÚpresent_fieldsr  r½   Úorg_column_updatesÚobject_permission_clearedÚobject_permission_upsertÚobject_permission_writeÚorganization_write_dataÚ
tx_managerrU  Úbudget_write_datar  s                       r:   Úupdate_organization_v2rb  û  sg  è ø€ õ, 9àÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð
 × Ñ Ð(ÜØàÐxðô
ð 	
ð ‡�Ð"¬D¯M©M¸$¿/¹/Ô,JÈdÏoÉoÐ`aÒNaÜØØÐZÐ[_×[jÑ[jÐZkÐlÐmô
ð 	
ð ×ÑÐ#¬T¯]©]¸4×;KÑ;KÔ-LÐPT×P`ÑP`ÐcdÒPdÜØØÐ[Ð\`×\lÑ\lÐ[mÐnÐoô
ð 	
ð ×Òõ	
ð	KÙ% d×&;Ñ&;Ô<ð ˜t×4Ñ4Ñ4¸×9PÑ9PÐ9XÜØØÐSÐTô
ð 	
ð �4×(Ñ(Ñ(¨T¯[©[Ð-@ÜØØÐPÐQô
ð 	
ð ×ÑÐ)°$×2HÑ2H×2SÑ2SÐaeÐ2SÔ2fÜØàð  Cðô
ð 	
ô Ø'Ø+Ø#ô÷ ð ô .4Ô4JÈ=Ó4YÓ-Z×-fÑ-fØ  /Ð2ð .gó .÷ (Ðð !Ð(ÜØØÐJÈ?ÐJ[Ð\Ð]ô
ð 	
ô
 3×BÑBÀ4Ç?Á?ÓCTÓU€LØ ×1Ñ1€NØESÖx¸EÐW\Ô`wÒWw˜U L°Ñ$7Ñ7Ðx€NÐxð7Ø3AÖ
a¨%ÀUÔN`ÒE`ˆ5�,˜uÑ%Ñ%Ò
að7à0:¸nÑ0LˆJ˜Ÿ™Ò+¨Ñ,ÐRTð7Ðð
 (;¸nÐ'LÒ'oÐQU×QgÑQgÐkoÐQoÐð ×!Ñ!Ð-ô /Ø"&×"8Ñ"8×"CÑ"CÐQUÐ"CÓ"VØ*C×*XÑ*XØ'ô
÷ 	
ð 	
ð ð ð $Ð/ð 
 Ð!9×!NÑ!NÑOá0IÐ% tÑ,Èrð ô &>×%MÑ%MØ×$Ñ$ðØ$ðà)ðð Ð/×7Ñ7ñó	
ó&Ðð .;×-=Ñ-=×-@Ñ-@Ó-B€JØ÷ 
ð 
˜RØ#Ð/Ø×2Ñ2×9Ñ9Ø-Ð/G×/\Ñ/\Ð]à6×=Ñ=Ø6×=Ñ=ñð :ó ÷ ð ñ Ü'?×'OÑ'OØ×,Ñ,¬TÔ2IÈ.ÐZk×ZsÑZsÓ2tÓ-uÓvó(Ðð ×(Ñ(×/Ñ/Ø"Ð$=×$GÑ$GÐHØ&ð 0ó ÷ ð ð !#× <Ñ <× CÑ CØ$ oÐ6Ø(Ø $¨tÈTÑRð !Dó !
÷ 
ˆ÷#
÷ 
ð. €Oøô} ò 	KÜ¨C¸Ä#ÀaÃ&Ð8IÔJÐJûð	Kúð*ùð(ûò yùâ
að	
ùð2
ùðøðøð
øð#
ø÷ 
÷ 
ð 
ð. €Oüs  ‚D	R)ÄQ ÄBR)Æ8Q5Æ9-R)Ç&Q8Ç'AR)È2Q;É Q;ÉR)ÉR ÉR É%A1R)ËRËA4R)ÍRÍR)ÍARÎRÎA3RÐ	RÐ
+RÐ5RÐ6RÐ:R)ÑRÑR)Ñ	Q2ÑQ-Ñ-Q2Ñ2R)Ñ8R)Ñ;R)ÒR)ÒRÒRÒRÒR)ÒR&ÒRÒR&Ò!R)z/organization/deletec              ƒ   óÀ  K  — ddl m} |€'t        ddt        j                  j
                  i¬«      ‚|j                  t        j                  k7  rt        dddi¬«      ‚g }| j                  D ]å  }t        t        |«      «      j                  d	|i¬
«      ƒ d{  –—†  t        t        |«      «      j                  d	|i¬
«      ƒ d{  –—†  t        t        |«      «      j                  d	|i¬
«      ƒ d{  –—†  t        t        |«      «      j!                  d	|iddddœ¬«      ƒ d{  –—† }|€t        ddd|› d�i¬«      ‚|j#                  |«       Œç |S 7 Œ½7 Œ‘7 Œe7 Œ4­w)zx
    Delete an organization

    # Parameters:

    - organization_ids: List[str] - The organization ids to delete.
    r   r  NrÙ   rÚ   r¦   rÛ   z*Only proxy admins can delete organizationsr¢   rß   Tr:  ©rD   rY   rN  zOrganization=z
 not found)r®   r¤   r   ré   rê   r³   r°   r±   rë   r  r—   r&   ro   r%   r(   r$   rd   Úappend)rM   r£   r¤   Údeleted_orgsr¢   Údeleted_orgs         r:   Údelete_organizationrh  “  s™  è ø€ õ" 9àÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð
 ×"Ñ"Ô&6×&BÑ&BÒBÜØØÐIÐJô
ð 	
ð
 €LØ×0Ñ0ò )ˆä”^ MÓ2Ó3×?Ñ?ÐGXÐZiÐFjÐ?Ók×kÐkäÔ5°mÓDÓE×QÑQØ$ oÐ6ð Ró 
÷ 	
ð 	
ô Ô0°Ó?Ó@×LÑLÐTeÐgvÐSwÐLÓx×xÐxä"Ô#9¸-Ó#HÓI×PÑPØ$ oÐ6Ø $¨tÈTÑRð Qó 
÷ 
ˆð ÐÜØØ =°Ð0AÀÐ!LÐMôð ð 	×Ñ˜KÕ(ð')ð* Ðð' 	løð	
øð 	yøð
úsH   ‚BEÂEÂ-EÃEÃ-EÃ4EÃ52EÄ'EÄ(/EÅEÅEÅEz/organization/listz3Filter organizations by exact organization_id match)ÚdefaultÚdescriptionz[Filter organizations by partial organization_alias match. Supports case-insensitive search.r&  Ú	org_aliasc              ƒ   óô  K  — ddl m} |€t        dddi¬«      ‚|€'t        ddt        j                  j
                  i¬«      ‚i }| r| |d	<   |r|d
dœ|d<   t        |«      r7t        t        |«      «      j                  |r|ndddddœ¬«      ƒ d{  –—† }|S t        t        |«      «      j                  d|j                  i¬«      ƒ d{  –—† }|D �cg c]  }|j                  ‘Œ }}|r|| r@| |vrg }|S | |d	<   t        t        |«      «      j                  |ddddœ¬«      ƒ d{  –—† }|S d|i|d	<   t        t        |«      «      j                  |ddddœ¬«      ƒ d{  –—† }|S g }|S 7 ŒÙ7 Œ¡c c}w 7 ŒM7 Œ­w)a¡  
    Get a list of organizations with optional filtering.

    Parameters:
        org_id: Optional[str]
            Filter organizations by exact organization_id match
        org_alias: Optional[str]
            Filter organizations by partial organization_alias match (case-insensitive)

    Example:
    ```
    curl --location --request GET 'http://0.0.0.0:4000/organization/list?org_alias=my-org'         --header 'Authorization: Bearer sk-1234'
    ```

    Example with org_id:
    ```
    curl --location --request GET 'http://0.0.0.0:4000/organization/list?org_id=123e4567-e89b-12d3-a456-426614174000'         --header 'Authorization: Bearer sk-1234'
    ```
    r   r  NrÙ   rÚ   úNo db connectedr¦   rÜ   r¢   Úinsensitive)ÚcontainsÚmoderº   T)rÈ   r;  r<  rd  r«   rß   r  )r®   r¤   r   ré   rê   r³   r   r—   r$   r`   r%   r«   r¢   )	r&  rk  r£   r¤   Úwhere_conditionsr  Úorg_membershipsÚ
membershipÚmembership_org_idss	            r:   Úlist_organizationru  Ë  s  è ø€ õF 9àÐÜ¨°WÐ>OÐ4PÔQÐQàÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ð 24ÐáØ.4ÐÐ*Ñ+áà!Ø!ñ2
ÐÐ-Ñ.ô Ð-Ô.ÜÔ 6°}Ó EÓF×PÑPÙ&6Ñ"¸DØ-1¸dÈTÑRð Qó 
÷ 
ˆðV €OôK (.Ô.NÈ}Ó.]Ó'^×'hÑ'hØÐ/×7Ñ7Ð8ð (ió (
÷ "
ˆð SbÖ$bÀJ Z×%?Ó%?Ð$bÐÐ$bñ ÙàÐ!3Ñ3à!�Hð4 €Oð1 ;AÐ$Ð%6Ñ7Ü%+Ô,BÀ=Ó,QÓ%R×%\Ñ%\Ø.à48Ø'+Ø%)ñ!ð &]ó &÷  �Hð. €Oð 8<Ð=OÐ6PÐ Ð!2Ñ3Ü!'Ô(>¸}Ó(MÓ!N×!XÑ!XØ*à04Ø#'Ø!%ñð "Yó "÷ �ð €Oð ˆHà€OðW
øð"
úò %cð øðúsT   ‚BE8ÂE+Â9E8ÃE-ÃE8ÃE/Ã'?E8Ä&E4Ä'9E8Å E6Å!E8Å-E8Å/E8Å6E8z/organization/infoc              ƒ   óH  K  — ddl m} |€t        dddi¬«      ‚t        | ||¬«      ƒ d{  –—†  t	        t        |«      «      j                  d	| id
ddd
iid
d
dœ¬«      ƒ d{  –—† }|€t        dddi¬«      ‚t        j                  |j                  «       «      }|S 7 Œr7 Œ<­w)z*
    Get the org specific information
    r   r  NrÙ   rÚ   rm  r¦   r1  r¢   TrY   Úuser)rÈ   r;  r<  r,  rd  rN  zOrganization not found)
r®   r¤   r   r¶   r—   r$   rG   Ú$LiteLLM_OrganizationTableWithMembersrñ   rò   )r¢   r£   r¤   r  Úresponse_pydantic_objs        r:   Úinfo_organizationrz  5  sÚ   è ø€ õ 9àÐÜ¨°WÐ>OÐ4PÔQÐQô Ø'Ø+Ø#ô÷ ð ô #Ô#9¸-Ó#HÓI×UÑUØ  /Ð2à$(àØ˜Dððð
 Ø!%ñ	
ð Vó ÷ €Hð ÐÜ¨°WÐ>VÐ4WÔXÐXä#G×#VÑ#VÐW_×WjÑWjÓWlÓ#mÐà Ð ð3øðús!   ‚)B"«B¬7B"Á#B Á$;B"Â B")rÓ   rÔ   c              ƒ   ót  K  — ddl m} |€t        dddi¬«      ‚t        | j                  «      dk(  rt        ddd	| j                  › �i¬«      ‚| j                  D ]  }t        |||¬
«      ƒ d{  –—†  Œ t        t        |«      «      j                  dd| j                  iiddi¬«      ƒ d{  –—† }|S 7 ŒE7 Œ­w)z8
    DEPRECATED: Use GET /organization/info instead
    r   r  NrÙ   rÚ   rm  r¦   rÜ   z6Specify list of organization id's to query. Passed in=r1  r¢   r  rÈ   Trd  )	r®   r¤   r   rø   Úorganizationsr¶   r—   r$   r`   )rM   r£   r¤   r&  r  s        r:   Údeprecated_info_organizationr}  d  sæ   è ø€ õ 9àÐÜ¨°WÐ>OÐ4PÔQÐQä
ˆ4×ÑÓ !Ò#ÜØØÐUÐVZ×VhÑVhÐUiÐjÐkô
ð 	
ð ×$Ñ$ò 
ˆÜ Ø"Ø/Ø'ô
÷ 	
ñ 	
ð
ô #Ô#9¸-Ó#HÓI×SÑSØ  4¨×);Ñ);Ð"<Ð=Ø'¨Ð.ð Tó ÷ €Hð
 €Oð	
øðús$   ‚A,B8Á.B4Á/>B8Â-B6Â.B8Â6B8z/organization/member_addÚhttp_requestc              ƒ   ó"  K  — 	 ddl m} |€t        dddi¬«      ‚t        | j                  ||¬«      ƒ d{  –—†  t        t        |«      «      j                  d	| j                  i¬
«      ƒ d{  –—† }|€t        dddt        | d	d«      › �i¬«      ‚t        | j                  t        «      r| j                  }n| j                  g}g }g }|D ]G  }t        || j                  |¬«      ƒ d{  –—† \  }	}
|j                  |	«       |j                  |
«       ŒI t        | j                  ||¬«      S 7 Œ÷7 ŒÁ7 ŒG# t        $ rÏ}t!        j"                  d|«       t        |t        «      rPt%        t        |dd|› d�«      t&        j(                  t        |dd«      t        |dt*        j,                  «      ¬«      ‚t        |t$        «      r|‚t%        dt/        |«      z   t&        j(                  t        |dd«      t*        j,                  ¬«      ‚d}~ww xY w­w)aË  
    [BETA]

    Add new members (either via user_email or user_id) to an organization

    If user doesn't exist, new user row will also be added to User Table

    Only proxy_admin or org_admin of organization, allowed to access this endpoint.

    # Parameters:

    - organization_id: str (required)
    - member: Union[List[Member], Member] (required)
        - role: Literal[LitellmUserRoles] (required)
        - user_id: Optional[str]
        - user_email: Optional[str]

    Note: Either user_id or user_email must be provided for each member.

    Example:
    ```
    curl -X POST 'http://0.0.0.0:4000/organization/member_add'     -H 'Authorization: Bearer sk-1234'     -H 'Content-Type: application/json'     -d '{
        "organization_id": "45e3e396-ee08-4a61-a88e-16b3ce7e0849",
        "member": {
            "role": "internal_user",
            "user_id": "krrish247652@berri.ai"
        },
        "max_budget_in_organization": 100.0
    }'
    ```

    The following is executed in this function:

    1. Check if organization exists
    2. Creates a new Internal User if the user_id or user_email is not found in LiteLLM_UserTable
    3. Add Internal User to the `LiteLLM_OrganizationMembership` table
    r   r  NrÙ   rÚ   rm  r¦   r1  r¢   rß   rN  r2  )Úmemberr¢   r¤   )r¢   Úupdated_usersÚ updated_organization_membershipsz'Error adding member to organization: %sr¨   zAuthentication Error(ú)ÚparamÚNoner§   )Úmessager‘   r„  ÚcodezAuthentication Error, )r®   r¤   r   r¶   r¢   r—   r$   rG   rú   rÃ   r€  r!  Úadd_member_to_organizationre  ÚOrganizationAddMemberResponseró   r   Ú	exceptionÚProxyExceptionÚProxyErrorTypesÚ
auth_errorr   ÚHTTP_500_INTERNAL_SERVER_ERRORrA   )rM   r~  r£   r¤   r7  r;  r�  r‚  r€  Úupdated_userÚupdated_organization_membershiprX  s               r:   Úorganization_member_addr‘  ‹  s1  è ø€ ðhG
Ý<àÐ Ü¨C¸ÐBSÐ8TÔUÐUô !Ø ×0Ñ0Ø/Ø'ô
÷ 	
ð 	
ô 28Ô8NÈ}Ó8]Ó1^×1jÑ1jØ$ d×&:Ñ&:Ð;ð 2kó 2
÷ ,
Ð!ð %Ð,ÜØàÐJÌ7ÐSWÐYjÐlpÓKqÐJrÐsðôð ô �d—k‘k¤4Ô(Ø—k‘k‰Gà—{‘{�mˆGà8:ˆØ]_Ð(àò 	UˆFô 1ØØ $× 4Ñ 4Ø+ô÷ ñØØ/ð × Ñ  Ô.Ø,×3Ñ3Ð4SÕTð	Uô -Ø ×0Ñ0Ø'Ø-Mô
ð 	
ðQ	
øð,
øð0ùô ò 
Ü×&Ñ&Ð'PÐRSÔTÜ�aœÔ'Ü Ü  8Ð/DÀQÀCÀqÐ-IÓJÜ$×/Ñ/Ü˜a ¨&Ó1Ü˜Q ¬v×/TÑ/TÓUô	ð ô ˜œ>Ô*ØˆGÜØ,¬s°1«vÑ5Ü ×+Ñ+Ü˜!˜W fÓ-Ü×6Ñ6ô	
ð 	
ûð
üs_   ‚H„2D4 ¶D.·7D4 Á.D0Á/A;D4 Ã*D2Ã+AD4 Ä-HÄ.D4 Ä0D4 Ä2D4 Ä4	HÄ=C
HÈHÈHÚ
user_emailc              ƒ   ó  K  — t        ddd| › d�i¬«      }	 t        |«      j                  j                  d| i¬«      ƒ d{  –—† }|€|‚t
        j                  |j                  «       «      }|S 7 Œ-# t        $ r |‚w xY w­w)	zA
    Find a member if the user_email is in LiteLLM_UserTable
    rÜ   rÚ   z%Unique user not found for user_email=z]. Potential duplicate OR non-existent user_email in LiteLLM_UserTable. Use 'user_id' instead.r¦   r’  rß   N)r   r'   r    rG   ró   r0   rñ   rò   )r’  r¤   Únot_unique_user_email_errorÚexisting_user_email_rowÚ existing_user_email_row_pydantics        r:   Úfind_member_if_emailr—  	  s°   è ø€ ô
 *7ØàÐ<¸Z¸Lð  Ifð  gð
ô*Ðð*Ü/=¸mÓ/L×/RÑ/R×/^Ñ/^Ø Ð,ð 0_ó 0
÷ *
Ðð
 Ð&Ø)Ð)Ü.?×.NÑ.NÐOf×OqÑOqÓOsÓ.tÐ$Ø+Ð+ð*
ùô ò *Ø)Ð)ð*üs.   ‚B —*A1 ÁA/ÁA1 Á)B Á/A1 Á1A=Á=B z/organization/member_updatec              ƒ   óÈ  K  — 	 ddl m} |€'t        ddt        j                  j
                  i¬«      ‚t        | j                  ||¬«      ƒ d{  –—†  t        t        |«      «      j                  d| j                  i¬	«      ƒ d{  –—† }|€t        d
ddt        | dd«      › �i¬«      ‚| j                  �;| j                  €/t        | j                  |«      ƒ d{  –—† }|j                  | _        	 t        t        |«      «      j                  d| j                  | j                  dœi¬	«      ƒ d{  –—† }|€t        ddd| j                  › �i¬«      ‚t        t#        |«      «      j                  d| j                  i¬	«      ƒ d{  –—† }|�wt        |dd«      t$        j&                  j
                  t$        j(                  j
                  fv r6|j*                  t$        j&                  j
                  k7  rt        dddi¬«      ‚| j,                  �Rt        t        |«      «      j/                  d| j                  | j                  dœid| j,                  i¬«      ƒ d{  –—†  | j0                  �Ö|j2                  xs t5        t7        j8                  «       «      }|j2                  €-t;        || j0                  ¬«      }	t=        |	|¬«      ƒ d{  –—†  n*t?        t;        || j0                  ¬«      |¬«      ƒ d{  –—†  t        t        |«      «      j/                  d| j                  | j                  dœid|i¬«      ƒ d{  –—†  t        t        |«      «      j                  d| j                  | j                  dœiddi¬«      ƒ d{  –—† }
|
€)t        d
dd| j                  › d| j                  › �i¬«      ‚t@        jC                  |
jE                  d¬ «      «      }|S 7 �Œ’7 �Œ]7 �Œ7 �Œ·# t         $ r1}t        d
dd| j                  › d| j                  › d|› �i¬«      ‚d}~ww xY w7 �Œ¡7 �ŒÍ7 �Œa7 �Œ97 Œó7 Œ­# t         $ r}tG        jH                  d!|«       |‚d}~ww xY w­w)"z3
    Update a member's role in an organization
    r   r  NrÙ   rÚ   r¦   r1  r¢   rß   rÜ   r2  Úuser_id_organization_id©r«   r¢   z2Error finding organization membership for user_id=z in organization=ú: rN  z-Member not found in organization for user_id=r«   r°   r  zXOnly PROXY_ADMIN may modify the organization role of a user who is a global PROXY_ADMIN.rP  )r¸   rí   r8  r¸   rÈ   Trd  z!Member not found in organization=z for user_id=rà   z)Error updating member in organization: %s)%r®   r¤   r   ré   rê   r³   r¶   r¢   r—   r$   rG   rú   r’  r«   r—  r%   ró   r'   r±   rë   ÚPROXY_ADMIN_VIEW_ONLYr°   Úrolerb   Úmax_budget_in_organizationr¸   rA   r   Úuuid4rA  r   r   Ú#LiteLLM_OrganizationMembershipTablerñ   rò   r   rŠ  )rM   r£   r¤   r7  r•  Ú existing_organization_membershiprX  Útarget_user_rowr¸   Únew_budget_objÚfinal_organization_membershipÚ&final_organization_membership_pydantics               r:   Úorganization_member_updater¦     så  è ø€ ðGÝ<àÐ ÜØØÔ!2×!IÑ!I×!OÑ!OÐPôð ô !Ø ×0Ñ0Ø/Ø'ô
÷ 	
ð 	
ô 28Ô8NÈ}Ó8]Ó1^×1jÑ1jØ$ d×&:Ñ&:Ð;ð 2kó 2
÷ ,
Ð!ð %Ð,ÜØàÐJÌ7ÐSWÐYjÐlpÓKqÐJrÐsðôð ð �?‰?Ð&¨4¯<©<Ð+?Ü3GÈÏÉÐYfÓ3g×-gÐ#Ø2×:Ñ:ˆDŒLð	Ü<BÜ0°Ó?ó=ç‰kà-Ø#'§<¡<Ø+/×+?Ñ+?ñ0ðð ó ÷	7Ð,ð" ,Ð3ÜØØÐ#PÐQU×Q]ÑQ]ÐP^Ð!_Ð`ôð ô !'¤~°mÓ'DÓ E× QÑ QÐYbÐdh×dpÑdpÐXqÐ QÓ r×rˆØÐ&¬7°?ÀKÐQUÓ+VÜ×(Ñ(×.Ñ.Ü×2Ñ2×8Ñ8ð[
ñ ,
ð !×*Ñ*Ô.>×.JÑ.J×.PÑ.PÒPÜ#Ø #àØvðôð ð �9‰9Ð ÜÔ9¸-ÓHÓI×PÑPà-Ø#'§<¡<Ø+/×+?Ñ+?ñ0ðð " 4§9¡9Ð-ð Qó ÷ ð ð ×*Ñ*Ð6à?×IÑIÒ^ÌSÔQU×Q[ÑQ[ÓQ]ÓM^ˆIØ/×9Ñ9ÐAÜ!1¸IÐRV×RqÑRqÔ!r�Ü ¨NÐN_Ô`×`Ñ`ô $Ü/¸)ÐPT×PoÑPoÔpØ&7ô÷ ð ô Ô9¸-ÓHÓI×PÑPà-Ø#'§<¡<Ø+/×+?Ñ+?ñ0ðð " 9Ð-ð Qó ÷ ð ô /5Ô5UÐVcÓ5dÓ.e×.qÑ.qà)Ø#Ÿ|™|Ø'+×';Ñ';ñ,ðð ,¨TÐ2ð /ró /
÷ )
Ð%ð )Ð0ÜØØÐ#DÀT×EYÑEYÐDZÐZgÐhl×htÑhtÐguÐ!vÐwôð ô
 9\×8jÑ8jØ)×4Ñ4À$Ð4ÓGó9
Ð.ð 6Ð5ðo	
ùð,
ùð .hùð	7úô ò 	ÜØàÐQÐRV×R^ÑR^ÐQ_Ð_pÐqu÷  rFñ  rFð  qGð  GIð  JKð  ILð  Mðôð ûð	úð" sùð"ùð aùðùðøð)
ùô( ò Ü×&Ñ&Ð'RÐTUÔVØˆûðüs  ‚Q"„A
P9 ÁO Á7P9 ÂO#ÂAP9 ÃO&ÃP9 Ã2A O, Ä2O)Ä3O, Ä7AP9 ÆP)Æ	CP9 ÉP,É A.P9 ËP/Ë*P9 Ë9P2Ë:AP9 ÍP5ÍAP9 Î	P7Î
AP9 ÏQ"Ï P9 Ï#P9 Ï&P9 Ï)O, Ï,	P&Ï5,P!Ð!P&Ð&P9 Ð,P9 Ð/P9 Ð2P9 Ð5P9 Ð7P9 Ð9	QÑQÑQÑQ"z/organization/member_deletec              ƒ   ó$  K  — 	 ddl m} |€'t        ddt        j                  j
                  i¬«      ‚t        | j                  ||¬«      ƒ d{  –—†  | j                  �;| j                  €/t        | j                  |«      ƒ d{  –—† }|j                  | _	        t        t        |«      «      j                  d| j                  | j                  d	œi¬
«      ƒ d{  –—† }|S 7 Œ’7 Œ^7 Œ
# t        $ r}t        j                   d|«       |‚d}~ww xY w­w)z.
    Delete a member from an organization
    r   r  NrÙ   rÚ   r¦   r1  r™  rš  rß   z+Error deleting member from organization: %s)r®   r¤   r   ré   rê   r³   r¶   r¢   r’  r«   r—  r—   r%   rd   ró   r   rŠ  )rM   r£   r¤   r•  Úmember_to_deleterX  s         r:   Úorganization_member_deleter©  ¸  s  è ø€ ð"Ý<àÐ ÜØØÔ!2×!IÑ!I×!OÑ!OÐPôð ô !Ø ×0Ñ0Ø/Ø'ô
÷ 	
ð 	
ð �?‰?Ð&¨4¯<©<Ð+?Ü3GÈÏÉÐYfÓ3g×-gÐ#Ø2×:Ñ:ˆDŒLä(.Ô/OÐP]Ó/^Ó(_×(fÑ(fà)Ø#Ÿ|™|Ø'+×';Ñ';ñ,ðð )gó )
÷ #
Ðð  Ðð%	
øð .høð#
ùô ò Ü×&Ñ&Ð'TÐVWÔXØˆûðüs`   ‚D„A
C' ÁC!Á5C' ÂC#ÂAC' ÃC%ÃC' Ã DÃ!C' Ã#C' Ã%C' Ã'	DÃ0DÄDÄDr€  c           	   ƒ   óB  K  — 	 d}d}d}| j                   �8t        t        |«      «      j                  d| j                   i¬«      ƒ d{  –—† }|€F| j                  �:	 t        |«      j
                  j                  d| j                  i¬«      ƒ d{  –—† }|€…|€ƒ| j                   xs t        t        j                  «       «      }t        || j                  ¬«      }|j                  |d¬	«      ƒ d{  –—† }	|	�¸t        j                  |	j                  «       «      }n”|�t!        |«      d
kD  rt#        dddi¬«      ‚|�$t        j                  |j                  «       «      }nO|�$t        j                  |j                  «       «      }n)t#        ddd| j                   › d| j                  › �i¬«      ‚|€%t        d| j                   › d| j                  › �«      ‚t        t%        |«      «      j'                  ||j                   | j(                  dœ¬«      ƒ d{  –—† }
t*        j                  |
j                  «       «      }||fS 7 �Œú7 �Œµ# t        $ r }t        d| j                  › d|› �«      ‚d}~ww xY w7 �Œƒ7 Œ`# t        $ r}t        d| › d|› d|› �«      ‚d}~ww xY w­w)zò
    Add a member to an organization

    - Checks if member.user_id or member.user_email is in LiteLLM_UserTable
    - If not found, create a new user in LiteLLM_UserTable
    - Add user to organization in LiteLLM_OrganizationMembership
    Nr«   rß   r’  zdPotential NON-Existent or Duplicate user email in DB: Error finding a unique instance of user_email=z in LiteLLM_UserTable.: )r«   r’  rw  )rM   r  r
  rÜ   rÚ   zIMultiple users with this email found in db. Please use 'user_id' instead.r¦   rN  zUser not found for user_id=z and user_email=z2User does not exist in LiteLLM_UserTable. user_id=)r¢   r«   r°   rã   zError adding member=z to organization=r›  )r«   r—   r'   rG   r’  r    ró   r?  rA   r   rŸ  r   Úinsert_datar0   rñ   rò   rø   r   r%   rQ   r�  r   )r€  r¢   r¤   rä   Úexisting_user_id_rowr•  rX  r«   Únew_user_defaultsÚ_returned_userÚ_organization_membershipÚorganization_memberships               r:   rˆ  rˆ  é  s  è ø€ ðEaØ04ˆØ#ÐØ"&Ðà�>‰>Ð%Ü)/´¸}Ó0MÓ)N×)ZÑ)ZØ  &§.¡.Ð1ð *[ó *÷ $Ð ð  Ð'¨F×,=Ñ,=Ð,IðÜ0>¸}Ó0M×0SÑ0S×0_Ñ0_Ø'¨×):Ñ):Ð;ð 1`ó 1÷ +Ð'ð  Ð'Ð,CÐ,Kà"(§.¡.Ò"E´C¼¿
¹
»Ó4EˆGÜ'EØØ!×,Ñ,ô(Ðð
 $1×#<Ñ#<ÐBSÐ`fÐ#<Ó#g×gˆNØÐ)Ü/×>Ñ>¸~×?XÑ?XÓ?ZÓ[‘Ø$Ð0ÜÐ'Ó(Øòô  ØØÐ!lÐmôð ð %Ð0Ü+×:Ñ:Ð;R×;]Ñ;]Ó;_Ó`‰KØ!Ð-Ü+×:Ñ:Ð;O×;ZÑ;ZÓ;\Ó]‰KäØØÐ#>¸v¿~¹~Ð>NÐN^Ð_e×_pÑ_pÐ^qÐ!rÐsôð ð
 ÐÜØDÀVÇ^Á^ÐDTÐTdÐek×evÑevÐdwÐxóð ô
 17Ô7WÐXeÓ7fÓ0g×0nÑ0nà#2Ø&×.Ñ.Ø#Ÿ[™[ñð 1oó 1
÷ +
Ð ô *M×)[Ñ)[Ø$×/Ñ/Ó1ó*
Ðð Ð3Ð3Ð3ðy$ùð+úô ò Ü Øzð  |B÷  |Mñ  |Mð  {Nð  Nfð  ghð  fið  jóð ûðúð hùð6+
ùô ò aÜÐ/°¨xÐ7HÈÐHYÐY[Ð\]Ð[^Ð_Ó`Ð`ûðaüs‘   ‚J„AI: Á	IÁ
I: Á4I	 ÂIÂI	 ÂAI: Ã2I5Ã3D$I: ÈI8È*I: ÉJÉI: ÉI	 É		I2ÉI-É-I2É2I: É8I: É:	JÊJÊJÊJ)�rî   Úcollections.abcr   r   Útypingr   r   r   r   r	   r
   Úfastapir   r   r   r   r   Úpydanticr   Úlitellm._loggingr   Úlitellm._uuidr   Úlitellm.proxy._typesÚlitellm.proxy.auth.auth_checksr   r   Ú$litellm.proxy.auth.user_api_key_authr   Ú)litellm.proxy.common_utils.timezone_utilsr   Ú>litellm.proxy.management_endpoints.budget_management_endpointsr   r   Ú8litellm.proxy.management_endpoints.common_daily_activityr   Ú/litellm.proxy.management_endpoints.common_utilsr   r   Ú8litellm.proxy.management_helpers.object_permission_utilsr   r   Ú&litellm.proxy.management_helpers.utilsr   r    Úlitellm.proxy.utilsr!   Ú&litellm.repositories.budget_repositoryr"   Ú1litellm.repositories.object_permission_repositoryr#   Ú,litellm.repositories.organization_repositoryr$   Ú'litellm.repositories.table_repositoriesr%   Ú$litellm.repositories.team_repositoryr&   Ú$litellm.repositories.user_repositoryr'   Ú2litellm.repositories.verification_token_repositoryr(   Ú>litellm.types.proxy.management_endpoints.common_daily_activityr)   Úlitellm.utilsr*   Útypesr+   Úprisma.modelsr,   rN   r-   rU   r.   rg   r/   rZ   r0   ÚPrismaUserTabler1   Ú__annotations__r3   rC   rL   rT   rX   rf   rr   rw   rz   r~   r�   r‰   r—   rJ   rA   ÚUserAPIKeyAuthr¶   rW  r·   Ú	frozensetrË   rÌ   r¹   r¼   rÅ   rÒ   ÚpostÚNewOrganizationResponseÚNewOrganizationRequestr	  rÂ   rp   r*  r÷   Úpatchrx  rH  r@  ÚOrganizationUpdateRequestV2rb  rd   r!  ÚDeleteOrganizationRequestrh  ÚQueryru  rz  ÚOrganizationRequestr}  r‰  ÚOrganizationMemberAddRequestr‘  r—  r   ÚOrganizationMemberUpdateRequestr¦  ÚOrganizationMemberDeleteRequestr©  Ú	OrgMemberÚtuplerˆ  r7   r<   r:   ú<module>rÝ     s‘  ðÜ ð	÷ .÷÷ ó ß FÕ FÝ  å 1Ý Ü "ß OÝ BÝ K÷õ X÷÷÷õ -Ý CÝ XÝ OÝ TÝ ?Ý ?õõõ -áÝ#åFõõõ SÝBá“€ˆÓ ô6˜8ô 6ô
^�xô ^ôS˜ô Sô] 8ô ]ô/˜xô /ô6I¨ô Iô(I�xô IôI Hô Iô, ô ,ôw�hô wôK˜ô Kô˜(ô ð 
Ø EÐ'Ð EÐ,@Ò Eó 
Ø Eð 
Ø YÐ1Ð YÐ6TÒ Yó 
Ø Yð 
Ø QÐ-Ð QÐ2LÒ Qó 
Ø Qð 
Ø eÐ7Ð eÐ<`Ò eó 
Ø eð 
Ø A�~Ð AÐ*<Ò Aó 
Ø Að 
Ø A�~Ð AÐ*<Ò Aó 
Ø Að 
Ø [Ð2Ð [Ð7VÒ [ó 
Ø [ð
Ø Ø ñ!àñð 'ñ'ð ñ	ð
 ñð "ñ"ð
ð ó
ð)Øð)à%ð)ð  ð)ð 
ó	)ñX #.¨d°3¸°;Ñ.?Ó"@Ð ˜%Ó @Ù!*Ð+>×+KÑ+K×+PÑ+PÓ+RÓ!SÐWbÐVcÑ!cÐ ˜Ó cÙ%Ð';¸XÐ&FÓGÐ �EÓ GðO¨G°C¸°KÑ,@ð OÈcð OÐV]Ð^aÐciÐ^iÑVjó Oð&Øðà	óð0 ‡�ØØ
#Ð	$ÙÐ+Ó,Ð-Ø*ð	 ó ñ )0Ð0AÓ(Bñ}Ø
 ð}à%ò}óð}ð@ ‡�Ø"Ø2Ø
#Ð	$ð ó ð $(Ø!ØØØØØØ+/Ù(/Ð0AÓ(BñDØ˜D‘jðDà�d‘
ðDð �D‰jðDð �‰:ð	Dð
 �4‰ZðDð ðDð ðDð " D™jðDð &òDóð
DðNØ
 ðà $Ñ&ðð 	ˆ4�Zóð, ‡�ØØ
#Ð	$ÙÐ+Ó,Ð-Ø7ð	 ó ñ )0Ð0AÓ(BñnØðnà%ònóðnðbØ�C˜�KÑ ðà3ðð 
ˆ#ˆvˆ+Ñóð6 ‡�Ø(Ø
#Ð	$ÙÐ+Ó,Ð-Ø7Øð ó ðNØðNà
%ðNð ! ±Ð9JÓ1KÐ!KÑLòNóðNðb ‡�ØØ
#Ð	$ÙÐ+Ó,Ð-ØÐ<Ñ=ð	 ó ñ )0Ð0AÓ(Bñ/Ø
#ð/à%ò/óð/ðd ‡�ØØ
#Ð	$ÙÐ+Ó,Ð-ØÐ<Ñ=ð	 ó ð '˜Ÿ™¨tÐAvÔwØ)˜GŸM™MØØqôñ )0Ð0AÓ(BñaØ�$‰Jðaà�T‰zðað &òaóðaðH ‡�ØØ
#Ð	$ÙÐ+Ó,Ð-Ø7ð	 ó ñ )0Ð0AÓ(Bñ&!Øð&!à%ò&!óð&!ðR ‡�ØØ
#Ð	$ÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(BñØ
ðà%òóð
ðD ‡�ØØ
#Ð	$ÙÐ+Ó,Ð-Ø0ð	 ó ð ñ )0Ð0AÓ(Bñt
Ø
&ðt
àðt
ð &ðt
ð #ò	t
ó óðt
ðn,¨3ð ,¸|ð ,ÐPaó ,ð. ‡�Ø!Ø
#Ð	$ÙÐ+Ó,Ð-Ø6ð	 ó ð ñ )0Ð0AÓ(BñNØ
)ðNà%òNó óðNðb ‡�Ø!Ø
#Ð	$ÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(Bñ)Ø
)ð)à%ò)óð
)ðXRaØðRaàðRað  ðRað ÐÐAÐAÑBô	Rar<   