Ë
    tPêjüG  ã                   óº   — d Z ddlZddlZddlZddlmZmZ ddl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mZ dd
lmZmZ ddlmZmZ  G d„ de«      Zy)ao  
PostHog Integration - sends LLM analytics events to PostHog

Follows PostHog's LLM Analytics format: https://posthog.com/docs/llm-analytics/manual-capture

async_log_success_event: stores batch of events in memory and flushes to PostHog
async_log_failure_event: logs failed LLM calls with error information

For batching specific details see CustomBatchLogger class
é    N)ÚAnyÚFinal)Úverbose_logger)Úuuid)ÚCustomBatchLogger)Úcreate_mock_posthog_clientÚshould_use_posthog_mock)Ú
safe_dumps)Ú_get_httpx_clientÚget_async_httpx_clientÚhttpxSpecialProvider)ÚPOSTHOG_MAX_BATCH_SIZEÚPostHogEventPayload)ÚStandardCallbackDynamicParamsÚStandardLoggingPayloadc            
       óŽ  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zdd„Zdee	e
f   defd	„Zd
edee	e
f   de	dee	e
f   fd„Zdee	e
f   dee	e
f   fd„Zdee	e
f   dee	e
f   fd„Zd
edee	e
f   de	fd„Zdee	e
f   dee	dz  e	dz  f   fd„Zd„ Zd„ Zdee	e
f   dee	e
f   fd„Zde	fd„Zdede	dee	e
f   fd„Zdde
de	de
de
fd„Zd„ Zˆ xZS ) ÚPostHogLoggerc                 óâ  •— 	 t        j                  d«       t        «       | _        | j                  rt	        «        t        j                  d«       t        j                  dd«      €t        d«      ‚t        t        j                  ¬«      | _        t        «       | _        t        j                  d«      | _        t        j                  dd«      }|j                  d	«      | _        | j                   › d
�| _        d| _        d| _        g | _        t+        j,                  | j.                  «       t1        ‰| �d  di |¤dt4        dœ¤Ž y# t        $ r}t        j6                  d|«       |‚d}~ww xY w)a  
        Initializes the PostHog logger, checks if the correct env variables are set

        Required environment variables:
        `POSTHOG_API_KEY` - your PostHog API key
        `POSTHOG_API_URL` - your PostHog API URL (defaults to https://app.posthog.com)
        zPostHog: in init posthog loggerz6[POSTHOG MOCK] PostHog logger initialized in mock modeÚPOSTHOG_API_KEYNz4POSTHOG_API_KEY is not set, set 'POSTHOG_API_KEY=<>')Úllm_providerÚPOSTHOG_API_URLzhttps://us.i.posthog.comú/ú/batch/F)Ú
flush_lockÚ
batch_sizez0PostHog: Got exception on init PostHog client %s© )r   Údebugr	   Úis_mock_moder   ÚosÚgetenvÚ	Exceptionr   r   ÚLoggingCallbackÚasync_clientr   Úsync_clientr   ÚrstripÚposthog_hostÚcapture_urlÚ_async_initializedr   Ú	log_queueÚatexitÚregisterÚ_flush_on_exitÚsuperÚ__init__r   Ú	exception)ÚselfÚkwargsÚposthog_api_urlÚeÚ	__class__s       €úa/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/posthog.pyr.   zPostHogLogger.__init__&   s3  ø€ ð	Ü× Ñ Ð!BÔCä 7Ó 9ˆDÔØ× Ò Ü*Ô,Ü×$Ñ$Ð%]Ô^ä�y‰yÐ*¨DÓ1Ð9ÜÐ VÓWÐWä 6ÔDX×DhÑDhÔ iˆDÔÜ0Ó2ˆDÔä#%§9¡9Ð->Ó#?ˆDÔ Ü%'§Y¡YÐ/@ÐB\Ó%]ˆOØ /× 6Ñ 6°sÓ ;ˆDÔØ"&×"3Ñ"3Ð!4°GÐ<ˆDÔà&+ˆDÔ#Ø"ˆDŒOØˆDŒNô �O‰O˜D×/Ñ/Ô0ä‰GÑÑZ˜vÐZ°$ÔCYÕZøäò 	Ü×$Ñ$Ð%WÐYZÔ[ØˆGûð	ús   ƒEE Å	E.ÅE)Å)E.c                 óŒ  — 	 t        j                  d|«       | j                  |«      \  }}|�|€t        d«      ‚| j	                  |«      }ddi}| j                  |g|«      }	|j                  d«      › d�}
| j                  j                  |
t        |	«      |¬«      }|j                  «        |j                  dk7  r%t        d	|j                  › d
|j                  › �«      ‚| j                  rt        j                  d«       y t        j                  d«       y # t        $ r }t        j                  d|«       Y d }~y d }~ww xY w)Nz<PostHog: Sync logging - Enters logging function for model %sz'PostHog credentials not found in kwargsúContent-Typeúapplication/jsonr   r   ©ÚurlÚcontentÚheaderséÈ   ú'Response from PostHog API status_code: ú, text: z-[POSTHOG MOCK] Sync event successfully mockedz%PostHog: Sync event successfully sentzPostHog Sync Layer Error - %s)r   r   Ú_get_credentials_for_requestr!   Úcreate_posthog_event_payloadÚ_create_posthog_payloadr%   r$   Úpostr
   Úraise_for_statusÚstatus_codeÚtextr   r/   )r0   r1   Úresponse_objÚ
start_timeÚend_timeÚapi_keyÚapi_urlÚevent_payloadr<   Úpayloadr'   Úresponser3   s                r5   Úlog_success_eventzPostHogLogger.log_success_eventN   sJ  € ð	IÜ× Ñ Ð!_ÐagÔhà#×@Ñ@ÀÓHÑˆG�WØˆ ' /ÜÐ IÓJÐJØ#'×#DÑ#DÀVÓ#LˆMð Ð 2ðˆGð "×9Ñ9¸=¸/È7ÓSˆGØ$+§N¡N°3Ó$7Ð#8¸Ð!@ˆKà"×.Ñ.×3Ñ3ØÜ" 7Ó+Øð 4ó ˆHð
 ×%Ñ%Ô'à×#Ñ# sÒ*ÜÐ"IÈ(×J^ÑJ^ÐI_Ð_gÐhp×huÑhuÐgvÐ wÓxÐxà× Ò Ü×$Ñ$Ð%TÕUä×$Ñ$Ð%LÕMøäò 	IÜ×$Ñ$Ð%DÀa×HÑHûð	Iús   ‚DD ÄD Ä	EÄ#D>Ä>Ec              ƒ   óî   K  — 	 t        j                  d|«       | j                  «        | j                  ||||«      ƒ d {  –—†  y 7 Œ# t        $ r }t        j
                  d|«       Y d }~y d }~ww xY w­w©Nz=PostHog: Async logging - Enters logging function for model %szPostHog Layer Error - %s©r   r   Ú_ensure_async_setupÚ_log_async_eventr!   r/   ©r0   r1   rG   rH   rI   r3   s         r5   Úasync_log_success_eventz%PostHogLogger.async_log_success_eventp   ói   è ø€ ð	DÜ× Ñ Ð!`ÐbhÔiØ×$Ñ$Ô&Ø×'Ñ'¨°¸jÈ(ÓS×SÒSùÜò 	DÜ×$Ñ$Ð%?À×CÑCûð	Düó@   ‚A5„=A	 ÁAÁA	 ÁA5ÁA	 Á		A2ÁA-Á(A5Á-A2Á2A5c              ƒ   óî   K  — 	 t        j                  d|«       | j                  «        | j                  ||||«      ƒ d {  –—†  y 7 Œ# t        $ r }t        j
                  d|«       Y d }~y d }~ww xY w­wrQ   rR   rU   s         r5   Úasync_log_failure_eventz%PostHogLogger.async_log_failure_eventx   rW   rX   Nc              ƒ   óN  K  — | j                  |«      \  }}| j                  |«      }| j                  j                  |||dœ«       t	        j
                  d| j                  «       t        | j                  «      | j                  k\  r| j                  «       ƒ d {  –—†  y y 7 Œ­w)N)ÚeventrJ   rK   z:PostHog, event added to queue. Will flush in %s seconds...)
r@   rA   r)   Úappendr   r   Úflush_intervalÚlenr   Úflush_queue)r0   r1   rG   rH   rI   rJ   rK   rL   s           r5   rT   zPostHogLogger._log_async_event€   sŽ   è ø€ à×<Ñ<¸VÓDÑˆ�Ø#×@Ñ@ÀÓHˆð 	�‰×Ñ¨À'ÐV]Ñ^Ô_Ü×ÑÐYÐ[_×[nÑ[nÔoäˆt�~‰~Ó $§/¡/Ò1Ø×"Ñ"Ó$×$Ñ$ð 2Ø$ús   ‚BB%ÂB#ÂB%r1   Úreturnc                 óÞ   — |j                  dd«      }|€t        d«      ‚|j                  dd«      }|dk(  rdnd}| j                  |||¬	«      }| j                  ||«      }t	        |||¬
«      S )zü
        Helper function to create a PostHog event payload for logging

        Args:
            kwargs (Dict[str, Any]): request kwargs containing standard_logging_object

        Returns:
            PostHogEventPayload: defined in types.py
        Ústandard_logging_objectNz+standard_logging_object not found in kwargsÚ	call_typeÚ Ú	embeddingz$ai_embeddingú$ai_generation)rc   r1   Ú
event_name)r\   Ú
propertiesÚdistinct_id)ÚgetÚ
ValueErrorÚ_create_posthog_propertiesÚ_get_distinct_idr   )r0   r1   rc   rd   rh   ri   rj   s          r5   rA   z*PostHogLogger.create_posthog_event_payloadŒ   s•   € ð IOÏ
É
ÐSlÐnrÓHsÐØ"Ð*ÜÐJÓKÐKà2×6Ñ6°{ÀBÓGˆ	Ø/8¸KÒ/G™OÐM]ˆ
à ×;Ñ;Ø$;ØØ!ð <ó 
ˆ
ð "×2Ñ2Ð3JÈFÓSˆä"ØØ!Ø#ô
ð 	
ó    rc   rh   c                 ó>  — i }| j                  |dd«      |d<   | j                  |dd«      |d<   | j                  |d«      }|�||d<   |dk(  r| j                  |d	«      }|�||d
<   | j                  |dd«      |d<   |dk(  r| j                  |dd«      |d<   | j                  |d«      }|�||d<   | j                  |dd«      |d<   | j                  |d«      dk(  rd|d<   | j                  |d«      }|�||d<   | j                  ||«       | j                  ||«       |S )z6Create PostHog properties following LLM Analytics specÚmodelre   z	$ai_modelÚcustom_llm_providerz$ai_providerÚmessagesz	$ai_inputrg   rN   z$ai_output_choicesÚprompt_tokensr   z$ai_input_tokensÚcompletion_tokensz$ai_output_tokensÚresponse_costz$ai_total_cost_usdÚresponse_timeç        z$ai_latencyÚstatusÚfailureTz$ai_is_errorÚ	error_strz	$ai_error)Ú	_safe_getÚ_add_trace_propertiesÚ_add_custom_metadata_properties)	r0   rc   r1   rh   ri   rs   rN   rv   r{   s	            r5   rm   z(PostHogLogger._create_posthog_properties«   su  € ð ˆ
ð #'§.¡.Ð1HÈ'ÐSUÓ"Vˆ
�;ÑØ%)§^¡^Ð4KÐMbÐdfÓ%gˆ
�>Ñ"ð Ÿ.™.Ð)@À*ÓMˆØÐØ&.ˆJ�{Ñ#àÐ)Ò)Ø"Ÿn™nÐ-DÀjÓQˆHØÐ#Ø3;�
Ð/Ñ0ð *.¯©Ð8OÐQ`ÐbcÓ)dˆ
Ð%Ñ&ØÐ)Ò)Ø.2¯n©nÐ=TÐViÐklÓ.mˆJÐ*Ñ+ð  $Ÿ~™~Ð.EÀÓWˆØÐ$Ø/<ˆJÐ+Ñ,à$(§N¡NÐ3JÈOÐ]`Ó$aˆ
�=Ñ!ð �>‰>Ð1°8Ó<À	ÒIØ)-ˆJ�~Ñ&Ø#Ÿ~™~Ð.EÀ{ÓSˆIØÐ$Ø*3�
˜;Ñ'ð 	×"Ñ" :¨vÔ6ð 	×,Ñ,¨Z¸Ô@àÐro   ri   c                 ó<  — | j                  |di «      }| j                  |d| j                  «       «      }||d<   | j                  |d| j                  «       «      }||d<   | j                  |«      }|j                  d«      xs |j                  d«      }|r||d<   y y )	Nrc   Útrace_idz$ai_trace_idÚidz$ai_span_idÚparent_run_idÚ	parent_idz$ai_parent_id)r|   Ú
_safe_uuidÚ_extract_metadatark   )r0   ri   r1   rc   r€   Úspan_idÚmetadatarƒ   s           r5   r}   z#PostHogLogger._add_trace_propertiesÝ   s�   € Ø)-¯©¸Ð@YÐ[]Ó)^ÐàŸ.™.Ð)@À*ÈdÏoÉoÓN_Ó`ˆØ%-ˆ
�>Ñ"àŸ™Ð(?ÀÀtÇÁÓGXÓYˆØ$+ˆ
�=Ñ!à×0Ñ0°Ó8ˆØ#Ÿ<™<¨Ó8ÒU¸H¿L¹LÈÓ<Uˆ	ÙØ*3ˆJ�Ò'ð ro   c                 ó”   — | j                  |«      }t        |t        «      syh d£}|j                  «       D ]  \  }}||vsŒ|||<   Œ y)z0Add custom metadata fields to PostHog propertiesN>    r<   Úuser_idÚapi_baseÚendpointrƒ   Ú
deploymentÚ
model_infoÚmodel_groupÚuser_api_keyÚhidden_paramsr‚   Úcaching_groupsÚmodel_group_sizeÚuser_api_key_hashÚuser_api_key_aliasÚuser_api_key_spendÚlitellm_api_versionÚuser_api_key_org_idÚrequester_ip_addressÚuser_api_key_team_idÚuser_api_key_user_idÚuser_api_key_metadataÚuser_api_key_max_budgetÚuser_api_key_team_aliasÚuser_api_key_team_spendÚuser_api_key_user_emailÚlitellm_parent_otel_spanÚuser_api_key_end_user_idÚglobal_max_parallel_requestsÚuser_api_end_user_max_budgetÚuser_api_key_team_max_budgetÚuser_api_key_model_max_budget)r…   Ú
isinstanceÚdictÚitems)r0   ri   r1   r‡   Úlitellm_internal_fieldsÚkeyÚvalues          r5   r~   z-PostHogLogger._add_custom_metadata_propertiesë   sV   € à×0Ñ0°Ó8ˆÜ˜(¤DÔ)Øò!*
ÐðF #Ÿ.™.Ó*ò 	(‰JˆC�ØÐ1Ò1Ø"'�
˜3’ñ	(ro   c                 óþ   — | j                  |«      }| j                  |d«      }|rt        |«      S | j                  |d«      }|rt        |«      S | j                  |d«      }|rt        |«      S | j                  «       S )Nr‰   Úend_userr€   )r…   r|   Ústrr„   )r0   rc   r1   r‡   r‰   r­   r€   s          r5   rn   zPostHogLogger._get_distinct_id  sx   € Ø×0Ñ0°Ó8ˆØŸ™¨°)Ó<ˆÙÜ�w“<ÐØŸ.™.Ð)@À*ÓMˆÙÜ�x“=Ð ØŸ.™.Ð)@À*ÓMˆÙÜ�x“=Ð à�‰Ó Ð ro   c                 óæ   — |j                  dd«      }|�B|j                  d«      xs | j                  }|j                  d«      xs | j                  }||fS | j                  }| j                  }||fS )ap  
        Get PostHog credentials for this request.

        Checks for per-request credentials in standard_callback_dynamic_params,
        falls back to instance defaults from environment variables.

        Args:
            kwargs: Request kwargs containing standard_callback_dynamic_params

        Returns:
            tuple[str, str]: (api_key, api_url)
        Ú standard_callback_dynamic_paramsNÚposthog_api_keyr2   )rk   r   r&   )r0   r1   r°   rJ   rK   s        r5   r@   z*PostHogLogger._get_credentials_for_request&  s�   € ð Y_×XbÑXbØ.°óY
Ð(ð ,Ð7Ø6×:Ñ:Ð;LÓMÒeÐQU×QeÑQeˆGØ6×:Ñ:Ð;LÓMÒbÐQU×QbÑQbˆGð
 ˜ÐÐð ×*Ñ*ˆGØ×'Ñ'ˆGà˜ÐÐro   c              ƒ   óÀ  K  — 	 | j                   syt        j                  dt        | j                   «      «       | j                  rt        j                  d«       i }| j                   D ],  }|d   |d   f}||vrg ||<   ||   j                  |d   «       Œ. |j                  «       D ]¥  \  \  }}}ddi}| j                  ||«      }|j                  d	«      › d
�}	| j                  j                  |	t        |«      |¬«      ƒ d{  –—† }
|
j                  «        |
j                  dk7  sŒ‚t        d|
j                  › d|
j                  › �«      ‚ | j                  r*t        j                  dt        | j                   «      «       yt        j                  dt        | j                   «      «       y7 Œª# t        $ r }t        j                   d|«       Y d}~yd}~ww xY w­w)zž
        Sends the in memory logs queue to PostHog API

        Raises:
            Raises a NON Blocking verbose_logger.exception if an error occurs
        Nz#PostHog: Sending batch of %s eventsz@[POSTHOG MOCK] Mock mode enabled - API calls will be interceptedrJ   rK   r\   r7   r8   r   r   r9   r=   r>   r?   z5[POSTHOG MOCK] Batch of %s events successfully mockedz-PostHog: Batch of %s events successfully sentz$PostHog Error sending batch API - %s)r)   r   r   r_   r   r]   r¨   rB   r%   r#   rC   r
   rD   rE   r!   rF   r/   ©r0   Úbatches_by_credentialsÚitemrª   rJ   rK   Úeventsr<   rM   r'   rN   r3   s               r5   Úasync_send_batchzPostHogLogger.async_send_batch@  sê  è ø€ ð+	PØ—>’>Øä× Ñ Ð!FÌÈDÏNÉNÓH[Ô\à× Ò Ü×$Ñ$Ð%gÔhð JLÐ"ØŸ™ò B�Ø˜I‘¨¨Y©Ð8�ØÐ4Ñ4Ø24Ð*¨3Ñ/Ø& sÑ+×2Ñ2°4¸±=ÕAð	Bð /E×.JÑ.JÓ.Lò Ñ*Ñ"�˜' Fà"Ð$6ð�ð ×6Ñ6°v¸wÓG�Ø!(§¡°Ó!4Ð 5°WÐ=�à!%×!2Ñ!2×!7Ñ!7Ø#Ü& wÓ/Ø#ð "8ó "÷ �ð
 ×)Ñ)Ô+à×'Ñ'¨3Ó.Ü#ØAÀ(×BVÑBVÐAWÐW_Ð`h×`mÑ`mÐ_nÐoóð ð!ð( × Ò Ü×$Ñ$Ð%\Ô^aÐbf×bpÑbpÓ^qÕrä×$Ñ$Ð%TÔVYÐZ^×ZhÑZhÓViÕjðùô  ò 	PÜ×$Ñ$Ð%KÈQ×OÑOûð	Püs^   ‚G„F2 �G‘C4F2 ÄF0Ä#F2 Ä*AF2 ÆGÆ)F2 Æ/GÆ0F2 Æ2	GÆ;GÇGÇGÇGc                 ó   — | j                   sZ	 t        j                  «       | _        t        j                  | j                  «       «       d| _         t        j                  d«       y y # t        $ r}t        j                  d|«       ‚ d }~ww xY w)NTz%PostHog: Async components initializedz2PostHog: Failed to initialize async components: %s)
r(   ÚasyncioÚLockr   Úcreate_taskÚperiodic_flushr   r   r!   Úerror)r0   r3   s     r5   rS   z!PostHogLogger._ensure_async_setupt  sw   € Ø×&Ò&ðÜ")§,¡,£.�”Ü×#Ñ# D×$7Ñ$7Ó$9Ô:Ø*.�Ô'Ü×$Ñ$Ð%LÕMð 'øô ò Ü×$Ñ$Ð%YÐ[\Ô]Øûðús   ŽAA( Á(	BÁ1BÂBc                 óZ   — |j                  di «      xs i }|j                  di «      xs i S )NÚlitellm_paramsr‡   )rk   )r0   r1   r¿   s      r5   r…   zPostHogLogger._extract_metadata  s0   € Ø &§
¡
Ð+;¸RÓ @Ò FÀBˆØ×!Ñ! *¨bÓ1Ò7°RÐ7ro   c                 ó<   — t        t        j                  «       «      S ©N)r®   r   Úuuid4)r0   s    r5   r„   zPostHogLogger._safe_uuidƒ  s   € Ü”4—:‘:“<Ó Ð ro   r¶   rJ   c                 ó   — ||dœS )N)rJ   Úbatchr   )r0   r¶   rJ   s      r5   rB   z%PostHogLogger._create_posthog_payload†  s   € Ø"¨VÑ4Ð4ro   Úobjrª   Údefaultc                 óF   — |�t        |d«      s|S |j                  ||«      S )Nrk   )Úhasattrrk   )r0   rÅ   rª   rÆ   s       r5   r|   zPostHogLogger._safe_get‰  s&   € Øˆ;œg c¨5Ô1ØˆNØ�w‰w�s˜GÓ$Ð$ro   c                 óŽ  — | j                   syt        j                  dt        | j                   «      «       	 i }| j                   D ],  }|d   |d   f}||vrg ||<   ||   j	                  |d   «       Œ. |j                  «       D ]™  \  \  }}}ddi}| j                  ||«      }|j                  d«      › d	�}	| j                  j                  |	t        |«      |¬
«      }
|
j                  «        |
j                  dk7  sŒzt        j                  d|
j                  «       Œ› | j                  r*t        j                  dt        | j                   «      «       n)t        j                  dt        | j                   «      «       | j                   j                  «        y# t         $ r }t        j                  d|«       Y d}~yd}~ww xY w)a¡  
        Flush remaining events from internal log_queue before process exit.
        Called automatically via atexit handler.

        This works in conjunction with GLOBAL_LOGGING_WORKER's atexit handler:
        1. GLOBAL_LOGGING_WORKER atexit invokes pending callbacks
        2. Callbacks add events to this logger's internal log_queue
        3. This atexit handler flushes the internal queue to PostHog
        Nz-PostHog: Flushing %s remaining events on exitrJ   rK   r\   r7   r8   r   r   r9   r=   z,PostHog: Failed to flush on exit - status %sz5[POSTHOG MOCK] Successfully flushed %s events on exitz/PostHog: Successfully flushed %s events on exitz*PostHog: Error flushing events on exit: %s)r)   r   r   r_   r]   r¨   rB   r%   r$   rC   r
   rD   rE   r½   r   Úclearr!   r³   s               r5   r,   zPostHogLogger._flush_on_exitŽ  sÁ  € ð �~Š~Øä×ÑÐLÌcÐRV×R`ÑR`ÓNaÔbð#	RàIKÐ"ØŸ™ò B�Ø˜I‘¨¨Y©Ð8�ØÐ4Ñ4Ø24Ð*¨3Ñ/Ø& sÑ+×2Ñ2°4¸±=ÕAð	Bð /E×.JÑ.JÓ.Lò oÑ*Ñ"�˜' Fà"Ð$6ð�ð ×6Ñ6°v¸wÓG�Ø!(§¡°Ó!4Ð 5°WÐ=�à×+Ñ+×0Ñ0Ø#Ü& wÓ/Ø#ð 1ó �ð
 ×)Ñ)Ô+à×'Ñ'¨3Ó.Ü"×(Ñ(Ð)WÐYa×YmÑYmÕnð!oð$ × Ò Ü×$Ñ$Ð%\Ô^aÐbf×bpÑbpÓ^qÕrä×$Ñ$Ð%VÔX[Ð\`×\jÑ\jÓXkÔlØ�N‰N× Ñ Õ"øäò 	RÜ× Ñ Ð!MÈq×QÑQûð	Rús   ¸CF Ã?BF Æ	GÆ$F?Æ?G)Nrx   rx   rÁ   )Ú__name__Ú
__module__Ú__qualname__r.   rO   rV   rZ   rT   r§   r®   r   r   rA   r   rm   r}   r~   rn   Útupler@   r·   rS   r…   r„   ÚlistrB   r|   r,   Ú__classcell__)r4   s   @r5   r   r   %   s¤  ø„ ô&òP IòDDòDó
%ð
°4¸¸S¸±>ð 
ÐFYó 
ð>0à!7ð0ð �S˜#�X‘ð0ð ð	0ð
 
ˆc�3ˆh‰ó0ðd4°°S¸#°X±ð 4ÈÈSÐRUÈXÉó 4ð+(¸$¸sÀC¸x¹.ð +(ÐRVÐWZÐ\_ÐW_ÑR`ó +(ðZ!Ð8Nð !ÐX\Ð]`ÐbeÐ]eÑXfð !Ðknó !ð °4¸¸S¸±>ð  ÀeÈCÐRVÉJÐX[Ð^bÑXbÐLbÑFcó  ò42Pòh	ð8¨¨S°#¨X©ð 8¸4ÀÀSÀ¹>ó 8ð!˜Có !ð5¨dð 5¸Sð 5ÀTÈ#ÈsÈ(Á^ó 5ñ%˜Sð % sð %°Sð %ÀCó %ö
2Rro   r   )Ú__doc__r¹   r*   r   Útypingr   r   Úlitellm._loggingr   Úlitellm._uuidr   Ú(litellm.integrations.custom_batch_loggerr   Ú(litellm.integrations.posthog_mock_clientr   r	   Ú*litellm.litellm_core_utils.safe_json_dumpsr
   Ú&litellm.llms.custom_httpx.http_handlerr   r   r   Ú"litellm.types.integrations.posthogr   r   Úlitellm.types.utilsr   r   r   r   ro   r5   ú<module>rÛ      sR   ðñ	ó Û Û 	ß å +Ý Ý F÷õ B÷ñ ÷
÷ Vô[RÐ%õ [Rro   