
    yj!                       d Z ddlmZ ddlZddlm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mZ ddlmZ dd	lmZ  e              ej        e          Z G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z eddg d          Z eddddg          Z  eddg d          Z! ed d!g d"          Z" ed#d$g d%          Z# ed&d'g d(          Z$ ed)d*g d+          Z% ed,d-dd.g          Z& ed/d0dd.g          Z' ed1d2dd3g          Z( ed4d5dg          Z)e G d6 d7                      Z* e*            Z+d=d<Z,dS )>zPrometheus metrics for Honcho.    )annotationsN)Enum)castfinal)CONTENT_TYPE_LATESTREGISTRYCounterGaugedisable_created_metricsgenerate_latest)Request)Response)settingsc                        e Zd Zd fdZ xZS )NamespacedCounterkwargsstrreturnc                    t          t          t          j        j                  |d<    t                      j        di |S N	namespace r   r   r   METRICS	NAMESPACEsuperlabelsselfr   	__class__s     H/DATA/AppData/hermes/projects/honcho/src/telemetry/prometheus/metrics.pyr   zNamespacedCounter.labels   9    "3(8(BCC{uww~'''''    )r   r   r   r   __name__
__module____qualname__r   __classcell__r    s   @r!   r   r      =        ( ( ( ( ( ( ( ( ( (r#   r   c                        e Zd Zd fdZ xZS )NamespacedGauger   r   r   c                    t          t          t          j        j                  |d<    t                      j        di |S r   r   r   s     r!   r   zNamespacedGauge.labels"   r"   r#   )r   r   r   r,   r$   r)   s   @r!   r,   r,   !   r*   r#   r,   c                      e Zd ZdZdZdS )
TokenTypesinputoutputN)r%   r&   r'   INPUTOUTPUTr   r#   r!   r/   r/   '   s        EFFFr#   r/   c                      e Zd ZdZdZdS )DeriverTaskTypes	ingestionsummaryN)r%   r&   r'   	INGESTIONSUMMARYr   r#   r!   r5   r5   ,   s        IGGGr#   r5   c                      e Zd ZdZdZdZdZdS )DeriverComponentspromptmessagesprevious_summaryoutput_totalN)r%   r&   r'   PROMPTMESSAGESPREVIOUS_SUMMARYOUTPUT_TOTALr   r#   r!   r;   r;   1   s#        FH)!LLLr#   r;   c                      e Zd ZdZdS )DialecticComponentstotalN)r%   r&   r'   TOTALr   r#   r!   rE   rE   8   s        EEEr#   rE   api_requestszTotal API requests)r   methodendpointstatus_codemessages_createdzTotal messages createdr   workspace_namedialectic_callszTotal dialectic calls)r   rM   reasoning_levelderiver_queue_items_processedz#Total deriver queue items processed)r   rM   	task_typederiver_tokens_processedz%Total tokens processed by the deriver)r   rQ   
token_type	componentdialectic_tokens_processedz'Total tokens processed by the dialectic)r   rS   rT   rO   dreamer_tokens_processedz%Total tokens processed by the dreamer)r   specialist_namerS   telemetry_events_emittedz5CloudEvents successfully placed on the emitter buffertypetelemetry_events_sampled_outz<CloudEvents intentionally dropped by HIGH_VOLUME_SAMPLE_RATEtelemetry_events_droppedz=CloudEvents lost unintentionally (buffer_full or send_failed)reasontelemetry_buffer_sizez.Current size of the CloudEvents emitter bufferc                       e Zd ZU dZded<   d% fdZd&dZd'dZd(dZd)dZ	d*dZ
d+dZd,dZd-dZd.dZd.d Zd/d"Zd0d$Z xZS )1PrometheusMetricsNzPrometheusMetrics | None	_instancer   c                l    | j         &t                                          |           | _         | j         S )N)r`   r   __new__)clsr    s    r!   rb   zPrometheusMetrics.__new__   s*    = !GGOOC00CM}r#   method_namer   error	ExceptionNonec                    dd l }|                    |           t                              d|t	          |                     d S )Nr   z,Failed to record Prometheus metric in %s: %s)
sentry_sdkcapture_exceptionloggerwarningr   )r   rd   re   ri   s       r!   _handle_metric_errorz&PrometheusMetrics._handle_metric_error   sO    $$U+++:KU	
 	
 	
 	
 	
r#   rI   rJ   rK   c                   	 t                               |||                                           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)N)rI   rJ   rK   record_api_request)api_requests_counterr   incrf   rm   )r   rI   rJ   rK   es        r!   ro   z$PrometheusMetrics.record_api_request   s    	? ''!' (   ceeeee 	? 	? 	?%%&:A>>>>>>>>>	?   /3 
AAAcountintrM   c                   	 t                               |                              |           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)N)rM   record_messages_created)messages_created_counterr   rq   rf   rm   )r   rt   rM   rr   s       r!   rw   z)PrometheusMetrics.record_messages_created   s    	D$++- ,  c%jjjjj 	D 	D 	D%%&?CCCCCCCCC	D   .2 
AAArO   c                   	 t                               ||                                           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)N)rM   rO   record_dialectic_call)dialectic_calls_counterr   rq   rf   rm   )r   rM   rO   rr   s       r!   r{   z'PrometheusMetrics.record_dialectic_call   s    	B#**- / +   ceeeee 	B 	B 	B%%&=qAAAAAAAAA	Bry   rQ   c                   	 t                               ||                              |           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)N)rM   rQ   record_deriver_queue_item)%deriver_queue_items_processed_counterr   rq   rf   rm   )r   rt   rM   rQ   rr   s        r!   r~   z+PrometheusMetrics.record_deriver_queue_item   s    	F188-# 9   c%jjjjj 	F 	F 	F%%&A1EEEEEEEEE	Frs   rS   rT   c                   	 t                               |||                              |           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)N)rQ   rS   rT   record_deriver_tokens) deriver_tokens_processed_counterr   rq   rf   rm   )r   rt   rQ   rS   rT   rr   s         r!   r   z'PrometheusMetrics.record_deriver_tokens   s    	B,33#%# 4   c%jjjjj 	B 	B 	B%%&=qAAAAAAAAA	B   04 
AAAc                   	 t                               |||                              |           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)N)rS   rT   rO   record_dialectic_tokens)"dialectic_tokens_processed_counterr   rq   rf   rm   )r   rt   rS   rT   rO   rr   s         r!   r   z)PrometheusMetrics.record_dialectic_tokens   s    	D.55%# / 6   c%jjjjj 	D 	D 	D%%&?CCCCCCCCC	Dr   rW   c                   	 t                               ||                              |           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)N)rW   rS   record_dreamer_tokens) dreamer_tokens_processed_counterr   rq   rf   rm   )r   rt   rW   rS   rr   s        r!   r   z'PrometheusMetrics.record_dreamer_tokens   s    	B,33 /% 4   c%jjjjj 	B 	B 	B%%&=qAAAAAAAAA	Brs   
event_typec                   	 t                               |                                           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)NrY   record_telemetry_event_emitted) telemetry_events_emitted_counterr   rq   rf   rm   r   r   rr   s      r!   r   z0PrometheusMetrics.record_telemetry_event_emitted   s}    	K,333DDHHJJJJJ 	K 	K 	K%%&FJJJJJJJJJ	K   -1 
AAAc                   	 t                               |                                           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)Nr   "record_telemetry_event_sampled_out)$telemetry_events_sampled_out_counterr   rq   rf   rm   r   s      r!   r   z4PrometheusMetrics.record_telemetry_event_sampled_out  s}    	O077Z7HHLLNNNNN 	O 	O 	O%%&JANNNNNNNNN	Or   r\   c                   	 t                               |                                           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)N)r\   record_telemetry_event_dropped) telemetry_events_dropped_counterr   rq   rf   rm   )r   r\   rr   s      r!   r   z0PrometheusMetrics.record_telemetry_event_dropped	  s}    	K,3363BBFFHHHHH 	K 	K 	K%%&FJJJJJJJJJ	Kr   sizec                   	 t                                                               |           d S # t          $ r!}|                     d|           Y d }~d S d }~ww xY w)Nset_telemetry_buffer_size)telemetry_buffer_size_gauger   setrf   rm   )r   r   rr   s      r!   r   z+PrometheusMetrics.set_telemetry_buffer_size  sz    	F'..0044T::::: 	F 	F 	F%%&A1EEEEEEEEE	Fs   ,0 
AAA)r   r_   )rd   r   re   rf   r   rg   )rI   r   rJ   r   rK   r   r   rg   )rt   ru   rM   r   r   rg   )rM   r   rO   r   r   rg   )rt   ru   rM   r   rQ   r   r   rg   )
rt   ru   rQ   r   rS   r   rT   r   r   rg   )
rt   ru   rS   r   rT   r   rO   r   r   rg   )rt   ru   rW   r   rS   r   r   rg   )r   r   r   rg   )r\   r   r   rg   )r   ru   r   rg   )r%   r&   r'   r`   __annotations__rb   rm   ro   rw   r{   r~   r   r   r   r   r   r   r   r(   r)   s   @r!   r_   r_      sl        *.I....     

 
 
 
? ? ? ? D D D DB B B BF F F FB B B B"D D D D"B B B BK K K KO O O OK K K KF F F F F F F Fr#   r_   _requestr   r   r   c                *  K   t           j        j        st          dd          S 	 t          t	          t
                    t                    S # t          $ r:}t          	                    d| d           t          dd	          cY d }~S d }~ww xY w)
NzMetrics are disabledi  )rK   )content
media_typezFailed to generate metrics: T)exc_infozFailed to generate metricsi  )
r   r   ENABLEDr   r   r   r   rf   rk   re   )r   rr   s     r!   metrics_endpointr     s      # A.C@@@@G#H--*
 
 
 	
  G G G7A77$GGG4#FFFFFFFFFGs   'A 
B/BBB)r   r   r   r   )-__doc__
__future__r   loggingenumr   typingr   r   prometheus_clientr   r   r	   r
   r   r   starlette.requestsr   starlette.responsesr   
src.configr   	getLoggerr%   rk   r   r,   r/   r5   r;   rE   rp   rx   r|   r   r   r   r   r   r   r   r   r_   prometheus_metricsr   r   r#   r!   <module>r      s   $ $ " " " " " "                               ' & & & & & ( ( ( ( ( (           		8	$	$( ( ( ( ( ( ( (( ( ( ( (e ( ( (       
    t   
" " " " " " " "    $    )(666   -,"#   ,+666   ):(9#)000) ) % $5#4+999$ $   &7%6 -???& & " $5#4+222$ $   $5#4;&$ $   (9'8"B&( ( $ $5#4C($ $   .o4M   RF RF RF RF RF RF RF RFj '&(( 
G 
G 
G 
G 
G 
Gr#   