Ë
    tPêj],  ã                   ót   — U d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZmZ ddgZeed<    G d	„ d
«      Zy)é    )ÚFinalN)Úprint_verboseÚverbose_logger)ÚLATENCY_BUCKETS)ÚDEFAULT_SERVICE_CONFIGSÚServiceLoggerPayloadÚServiceMetricsÚServiceTypesÚerror_classÚfunction_nameÚFAILED_REQUESTS_LABELSc                   ó
  — e Zd ZdZ	 ddefd„Zdedee   fd„Z	defd„Z
d„ Zded	efd
„Zded	efd„Z	 dded	edee   dz  fd„Zdedefd„Zdedefd„Zg fdededee   dz  fd„Zdefd„Zdefd„Zdefd„Zdedeez  fd„Zy)ÚPrometheusServicesLoggerNÚmock_testingc                 ó  — 	 	 ddl m}m}m}m} ddlm} t        j                  }|�t        |«      nt        | _        || _        || _        || _        || _        t        j                  d«       i | _        t"        D �].  }	g }
| j%                  |	«      }t&        j(                  |v r0| j+                  |	j,                  d¬«      }|r|
j/                  |«       t&        j0                  |v re| j3                  |	j,                  dt4        ¬	«      }|r|
j/                  |«       | j3                  |	j,                  d
¬«      }|r|
j/                  |«       t&        j6                  |v r0| j9                  |	j,                  d¬«      }|r|
j/                  |«       |
s�Œ|
| j                   |	j,                  <   �Œ1 i | _        || _        d| _        d| _         y # t        $ r t        d«      ‚w xY w# t        $ r}tC        d|› �«       |‚d }~ww xY w)Nr   )ÚREGISTRYÚCounterÚGaugeÚ	Histogram)Ú	Collectorz>Missing prometheus_client. Run `pip install prometheus-client`z#in init prometheus services metricsÚlatency)Útype_of_requestÚfailed_requests)r   Úadditional_labelsÚtotal_requestsÚsizez(Got exception on init prometheus client )"Úprometheus_clientr   r   r   r   Úprometheus_client.gc_collectorr   ÚImportErrorÚ	ExceptionÚlitellmÚprometheus_latency_bucketsÚtupler   Úlatency_bucketsr   ÚdebugÚpayload_to_prometheus_mapr
   Ú_get_service_metrics_initializer	   Ú	HISTOGRAMÚcreate_histogramÚvalueÚappendÚCOUNTERÚcreate_counterr   ÚGAUGEÚcreate_gaugeÚprometheus_to_amount_mapr   Úmock_testing_success_callsÚmock_testing_failure_callsr   )Úselfr   Úkwargsr   r   r   r   r   Ú_custom_bucketsÚserviceÚservice_metricsÚmetrics_to_initializeÚ	histogramÚcounter_failed_requestÚcounter_total_requestsÚgaugeÚes                    úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/prometheus_services.pyÚ__init__z!PrometheusServicesLogger.__init__   sû  € ð
:	ðbßQÓQÝDô &-×%GÑ%GˆOØ=LÐ=X¤5¨Ô#9Ô^mˆDÔ à&ˆDŒNØ"ˆDŒLØˆDŒJØ$ˆDŒMä× Ñ Ð!FÔGàgiˆDÔ*ä'ó T�ØQS�à(,×(LÑ(LÈWÓ(UÐ%ô "×+Ñ+Ð/DÑDØ $× 5Ñ 5°g·m±mÐU^Ð 5Ó _�IÙ Ø'×.Ñ.¨yÔ9ä!×)Ñ)Ð-BÑBØ-1×-@Ñ-@ØŸ™Ø(9Ü*@ð .Aó .Ð*ñ
 .Ø'×.Ñ.Ð/EÔFØ-1×-@Ñ-@ÀÇÁÐ`pÐ-@Ó-qÐ*Ù-Ø'×.Ñ.Ð/EÔFä!×'Ñ'Ð+@Ñ@Ø ×-Ñ-¨g¯m©mÈVÐ-ÓT�EÙØ'×.Ñ.¨uÔ5ã"ØDS�D×2Ñ2°7·=±=ÓAð;Tð> 35ˆDÔ)à ,ˆDÔØ./ˆDÔ+Ø./ˆDÕ+øôe ò bÜÐ `ÓaÐaðbûôh ò 	ÜÐDÀQÀCÐHÔIØˆGûð	ús/   ƒG
 •E:G" Æ8G" Ç
GÇG" Ç"	H Ç+G;Ç;H r6   Úreturnc                 óÚ   — t         j                  t         j                  g}|t        vr|S t        j                  |i «      j	                  dg «      }|st        j                  d|«       |S |S )NÚmetricszNo metrics found for service %s)r	   r,   r(   r   Úgetr   r%   )r3   r6   ÚDEFAULT_METRICSrB   s       r>   r'   z8PrometheusServicesLogger._get_service_metrics_initializeZ   sf   € Ü"0×"8Ñ"8¼.×:RÑ:RÐ!SˆØÔ1Ñ1Ø"Ð"ä0×4Ñ4°W¸bÓA×EÑEÀiÐQSÓTˆÙÜ× Ñ Ð!BÀGÔLØ"Ð"Øˆó    c                 óž   — t        | j                  dd «      }|�||v S | j                  j                  «       D ]  }||j                  k(  sŒ y y)NÚ_names_to_collectorsTF)Úgetattrr   ÚcollectÚname)r3   Úmetric_nameÚnames_to_collectorsÚmetrics       r>   Úis_metric_registeredz-PrometheusServicesLogger.is_metric_registerede   s[   € ô &-¨T¯]©]Ð<RÐTXÓ%YÐØÐ*ØÐ"5Ð5Ð5Ø—m‘m×+Ñ+Ó-ò 	ˆFØ˜fŸk™kÓ)Ùð	ð rE   c                 óL   — | j                   j                  j                  |«      S )zL
        Helper function to get a metric from the registry by name.
        )r   rG   rC   )r3   rK   s     r>   Ú_get_metricz$PrometheusServicesLogger._get_metricp   s   € ð �}‰}×1Ñ1×5Ñ5°kÓBÐBrE   r   c                 ó¢   — d|› d|› �}| j                  |«      }|r| j                  |«      S | j                  |d|› d�|g| j                  ¬«      S )NÚlitellm_Ú_zLatency for ú service)Ú
labelnamesÚbuckets)rN   rP   r   r$   ©r3   r6   r   rK   Úis_registereds        r>   r)   z)PrometheusServicesLogger.create_histogramv   sl   € Ø'¨ y°°/Ð1BÐCˆØ#×8Ñ8¸ÓEˆÙØ×#Ñ# KÓ0Ð0Ø�~‰~ØØ˜7˜) 8Ð,Ø�yØ×(Ñ(ð	 ó 
ð 	
rE   c                 óŒ   — d|› d|› �}| j                  |«      }|r| j                  |«      S | j                  |d|› d�|g¬«      S )NrR   rS   z
Gauge for rT   ©rU   )rN   rP   r   rW   s        r>   r/   z%PrometheusServicesLogger.create_gauge‚   s[   € Ø'¨ y°°/Ð1BÐCˆØ#×8Ñ8¸ÓEˆÙØ×#Ñ# KÓ0Ð0Ø�z‰z˜+¨°G°9¸HÐ'EÐSZÐR[ˆzÓ\Ð\rE   r   c                 ó    — d|› d|› �}| j                  |«      }|r| j                  |«      S | j                  |d|› d|› d�|g|xs g z   ¬«      S )NrR   rS   zTotal z for rT   rZ   )rN   rP   r   )r3   r6   r   r   rK   rX   s         r>   r-   z'PrometheusServicesLogger.create_counter‰   sw   € ð  (¨ y°°/Ð1BÐCˆØ#×8Ñ8¸ÓEˆÙØ×#Ñ# KÓ0Ð0Ø�|‰|ØØ�_Ð% U¨7¨)°8Ð<Ø�yÐ$5Ò$;¸Ñ<ð ó 
ð 	
rE   ÚlabelsÚamountc                 ót   — t        || j                  «      sJ ‚|j                  |«      j                  |«       y ©N)Ú
isinstancer   r\   Úobserve)r3   r9   r\   r]   s       r>   Úobserve_histogramz*PrometheusServicesLogger.observe_histogram™   s1   € ô ˜) T§^¡^Ô4Ð4Ð4à×Ñ˜Ó ×(Ñ(¨Õ0rE   c                 ót   — t        || j                  «      sJ ‚|j                  |«      j                  |«       y r_   )r`   r   r\   Úset)r3   r<   r\   r]   s       r>   Úupdate_gaugez%PrometheusServicesLogger.update_gauge£   s/   € ô ˜% §¡Ô,Ð,Ð,Ø�‰�VÓ× Ñ  Õ(rE   c                 ó¾   — t        || j                  «      sJ ‚|r# |j                  |g|¢­Ž j                  |«       y |j                  |«      j                  |«       y r_   )r`   r   r\   Úinc)r3   Úcounterr\   r]   r   s        r>   Úincrement_counterz*PrometheusServicesLogger.increment_counter¬   sQ   € ô ˜' 4§<¡<Ô0Ð0Ð0áØˆG�N‰N˜6Ð6Ð$5Ò6×:Ñ:¸6ÕBà�N‰N˜6Ó"×&Ñ& vÕ.rE   Úpayloadc                 ó  — | j                   r| xj                  dz  c_        |j                  j                  | j                  v rÂ| j                  |j                  j                     }|D ]™  }t        || j                  «      r3| j                  ||j                  j                  |j                  ¬«       ŒLt        || j                  «      sŒcd|j                  v sŒr| j                  ||j                  j                  d¬«       Œ› y y )Né   ©r9   r\   r]   r   ©rh   r\   r]   )r   r1   r6   r*   r&   r`   r   rb   Údurationr   Ú_nameri   ©r3   rj   Úprom_objectsÚobjs       r>   Úservice_success_hookz-PrometheusServicesLogger.service_success_hookº   sß   € Ø×ÒØ×+Ò+¨qÑ0Õ+à�?‰?× Ñ  D×$BÑ$BÑBØ"&×"@Ñ"@ÀÇÁ×AVÑAVÑ"WˆLØ#ò �Ü˜c 4§>¡>Ô2Ø×*Ñ*Ø"%Ø&Ÿ™×4Ñ4Ø&×/Ñ/ð +õ ô
    T§\¡\Õ2Ð7GÈ3Ï9É9Ò7TØ×*Ñ*Ø #Ø&Ÿ™×4Ñ4Ø ð +õ ñð CrE   c                 ó^  — | j                   r| xj                  dz  c_        |j                  j                  | j                  v rj| j                  |j                  j                     }|D ]A  }t        || j                  «      sŒ| j                  ||j                  j                  d¬«       ŒC y y )Nrl   rn   )r   r2   r6   r*   r&   r`   r   ri   rq   s       r>   Úservice_failure_hookz-PrometheusServicesLogger.service_failure_hookÎ   s—   € Ø×ÒØ×+Ò+¨qÑ0Õ+à�?‰?× Ñ  D×$BÑ$BÑBØ"&×"@Ñ"@ÀÇÁ×AVÑAVÑ"WˆLØ#ò �Ü˜c 4§<¡<Õ0Ø×*Ñ*Ø #Ø&Ÿ™×4Ñ4Ø ð +õ ñð CrE   c              ƒ   óþ  K  — | j                   r| xj                  dz  c_        |j                  j                  | j                  v �r5| j                  |j                  j                     }|D �]  }t        || j                  «      r3| j                  ||j                  j                  |j                  ¬«       ŒMt        || j                  «      r7d|j                  v r)| j                  ||j                  j                  d¬«       Œšt        || j                  «      sŒ±|j                  sŒ¾| j                  ||j                  j                  d«      xs d|j                  j                  d«      xs d¬	«       �Œ y
y
­w)z3
        Log successful call to prometheus
        rl   rm   r   rn   Úgauge_labelsÚ Úgauge_valuer   )r<   r\   r]   N)r   r1   r6   r*   r&   r`   r   rb   ro   r   rp   ri   r   Úevent_metadatare   rC   rq   s       r>   Úasync_service_success_hookz3PrometheusServicesLogger.async_service_success_hookÜ   sH  è ø€ ð ×ÒØ×+Ò+¨qÑ0Õ+à�?‰?× Ñ  D×$BÑ$BÒBØ"&×"@Ñ"@ÀÇÁ×AVÑAVÑ"WˆLØ#ó �Ü˜c 4§>¡>Ô2Ø×*Ñ*Ø"%Ø&Ÿ™×4Ñ4Ø&×/Ñ/ð +õ ô
    T§\¡\Ô2Ð7GÈ3Ï9É9Ñ7TØ×*Ñ*Ø #Ø&Ÿ™×4Ñ4Ø ð +õ ô
    T§Z¡ZÕ0Ø×-Ó-Ø×)Ñ)Ø"%Ø#*×#9Ñ#9×#=Ñ#=¸nÓ#MÒ#SÐQSØ#*×#9Ñ#9×#=Ñ#=¸mÓ#LÒ#QÐPQð *ö ñð Cùs   ‚DE=ÄE=Ä*AE=Úerrorc              ƒ   ó  K  — | j                   r| xj                  dz  c_        |j                  j                  }|j                  }|j
                  j                  | j                  v r¤| j                  |j
                  j                     }|D ]{  }t        || j                  «      sŒd|j                  v r,| j                  ||j
                  j                  ||gd¬«       ŒT| j                  ||j
                  j                  d¬«       Œ} y y ­w)Nrl   r   )rh   r\   r   r]   rn   )r   r2   Ú	__class__Ú__name__Ú	call_typer6   r*   r&   r`   r   rp   ri   )r3   rj   r}   r   r   rr   rs   s          r>   Úasync_service_failure_hookz3PrometheusServicesLogger.async_service_failure_hookú   só   è ø€ ð
 ×ÒØ×+Ò+¨qÑ0Õ+Ø"Ÿ_™_×5Ñ5ˆØ&×0Ñ0ˆà�?‰?× Ñ  D×$BÑ$BÑBØ"&×"@Ñ"@ÀÇÁ×AVÑAVÑ"WˆLØ#ò �ä˜c 4§<¡<Õ0Ø(¨C¯I©IÑ5Ø×.Ñ.Ø$'Ø#*§?¡?×#8Ñ#8à/:¸MÐ.JØ#$ð /õ ð ×.Ñ.Ø$'Ø#*§?¡?×#8Ñ#8Ø#$ð /õ ñð Cùs   ‚B$DÂ'A&D)Fr_   )r€   Ú
__module__Ú__qualname__Úlitellm_service_latencyÚboolr?   r
   Úlistr	   r'   rN   rP   Ústrr)   r/   r-   Úfloatrb   re   ri   r   rt   rv   r|   r    r‚   © rE   r>   r   r      sB  „ à"Ðð #ñ?àó?ðB	°|ð 	ÈÈ^ÑH\ó 	ð	°4ó 	òCð

¨ð 

¸có 

ð] Cð ]¸#ó ]ð /3ñ	
àð
ð ð
ð   ™9 tÑ+ó	
ð 1ð ð1ð ó	1ð)ð ð)ð ó	)ð /1ñ/ð ð/ð ð	/ð
   ™9 tÑ+ó/ðÐ,@ó ð(Ð,@ó ðÐ8Ló ð<à%ðð �Y‰ôrE   r   )Útypingr   r!   Úlitellm._loggingr   r   Ú%litellm.types.integrations.prometheusr   Úlitellm.types.servicesr   r   r	   r
   r   Ú__annotations__r   rŠ   rE   r>   ú<module>r�      s;   ðö ã ß :Ý A÷ó ð "/°Ð @Ð ˜Ó @÷Aò ArE   