
    yj                        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
Z
d dlmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
l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& d dl'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; e	rd dl<m=Z=m>Z> de?fdZ@ e jA         e@            d            e jB        eC          ZD e jB        d          E                    e jF                    G d de jG                  ZH e jB        d          I                     eH                       dOd%ZJe#jK        jL        ZMeMr# e; ed&'           ed&'          geJ(           ed)efd*            ZN eeNd+d,d-d.d/d-gd0d1d2ed3d4d5d6d7d8d9d:;          ZOg d<ZPeOQ                    eePd=d>gd>g?            eeO           eOR                    e0jS        d@A           eOR                    e-jS        d@A           eOR                    e.jS        d@A           eOR                    e,jS        d@A           eOR                    e*jS        d@A           eOR                    e+jS        d@A           eOR                    e/jS        d@A           eOT                    dBe5dCgD           eOU                    dE          dF             ZVeOW                    e(          dGedHe(fdI            ZXeOW                    eY          dGedHeYfdJ            ZZeO[                    dK          dLedMeegee         f         fdN            Z\dS )P    N)	AwaitableCallable)asynccontextmanager)TYPE_CHECKING)FastAPIRequestResponse)RequestValidationError)CORSMiddleware)JSONResponse)add_pagination)ValidationError)FastApiIntegration)StarletteIntegration)HONCHO_VERSION)close_cache
init_cache)settings)enginerequest_context)HonchoException)conclusionskeysmessagespeerssessionswebhooks
workspaces)validate_embedding_schema)initialize_telemetry_asyncmetrics_endpointprometheus_metricsshutdown_telemetry)get_route_template)initialize_sentry)EventHintreturnc                     t           j                                        } t          j        t          j        t          j        t          j        t          j        t          j	        d}|
                    | t          j                  S )z
    Convert log level string from settings to logging module constant.

    Returns:
        int: The logging level constant (e.g., logging.INFO)
    )CRITICALERRORWARNINGINFODEBUGNOTSET)r   	LOG_LEVELupperloggingr*   r+   r,   r-   r.   r/   get)log_level_str
log_levelss     0/DATA/AppData/hermes/projects/honcho/src/main.pyget_log_levelr7   .   s]     &,,..M $?. J >>-666    z4%(asctime)s - %(name)s - %(levelname)s - %(message)s)levelformatzcashews.backends.redis.clientc                   (    e Zd Zdej        defdZdS )MetricsAccessFilterrecordr(   c                 2    |                                 }d|vS )NzGET /metrics)
getMessage)selfr=   msgs      r6   filterzMetricsAccessFilter.filterP   s    !!S((r8   N)__name__
__module____qualname__r2   	LogRecordboolrB    r8   r6   r<   r<   O   s9        )W. )4 ) ) ) ) ) )r8   r<   zuvicorn.accesseventr&   hintHint | NoneEvent | Nonec                     |s| S |                     d          }|s| S |\  }}}t          |t                    rdS t          |t          t          z            rt
                              d|            dS | S )zVFilter out events raised from known non-actionable exceptions before Sentry sees them.exc_infoNz,Filtering out validation error from Sentry: )r3   
isinstancer   r   r
   loggerinfo)rI   rJ   rN   _	exc_values        r6   before_sendrT   X   s     xx
##H OAy!)_-- t )_/EEFF N9NNOOOtLr8   endpoint)transaction_style)integrationsrT   rR   c                h  K   t                       d {V  t          t                     d {V  	 t                       d {V  n2# t          $ r%}t
                              d|           Y d }~nd }~ww xY w	 d W V  ddlm}  |             d {V  t                       d {V  t          j
                     d {V  t                       d {V  d S # ddlm}  |             d {V  t                       d {V  t          j
                     d {V  t                       d {V  w xY w)NzEError initializing cache in api process; proceeding without cache: %sr   )close_external_vector_store)r    r   r   r   	ExceptionrP   warningsrc.vector_storerY   r   disposer#   )rR   erY   s      r6   lifespanr_   }   s      %
&
&&&&&&&& $F
+
++++++++
ll 
 
 
SUV	
 	
 	
 	
 	
 	
 	
 	



# 	A@@@@@))+++++++++mmn """"""""""" 	A@@@@@))+++++++++mmn """"""""""s$   A 
A6A11A6:C AD1https://api.honcho.devzProduction SaaS Platform)urldescriptionzhttp://localhost:8000zLocal Development Serverz
Honcho APIz(The Identity Layer for the Agentic WorldzPHoncho is a platform for giving agents user-centric memory and social cognition.zPlastic Labszhttps://honcho.devzhello@plasticlabs.ai)namera   emailz&GNU Affero General Public License v3.0zAGPL-3.0-onlyz8https://github.com/plastic-labs/honcho/blob/main/LICENSE)rc   
identifierra   )r_   serverstitlesummaryrb   versioncontactlicense_info)zhttp://localhostzhttp://127.0.0.1:8000r`   T*)allow_originsallow_credentialsallow_methodsallow_headersz/v3)prefixz/metricsGET)methodsz/healthc                     K   ddiS )zAHealth check endpoint for monitoring and container orchestration.statusokrH   rH   r8   r6   health_checkrw      s       dr8   _requestexcc                    K   t                               |j        j         d|j         |           t          |j        d|j        i          S )z&Handle all Honcho-specific exceptions.z: rN   detailstatus_codecontent)rP   error	__class__rC   r|   r   r~   rx   ry   s     r6   honcho_exception_handlerr      sY       LLCM*::cj::SLIIIO3:&   r8   c                    K   t                               dt          |           d           t          rt	          j        |           t          dddi          S )z Handle all unhandled exceptions.zUnhandled exception: Tr{   i  r|   zAn unexpected error occurredr}   )rP   r   strSENTRY_ENABLED
sentry_sdkcapture_exceptionr   r   s     r6   global_exception_handlerr      si       LL3S33dLCCC *$S)))9:   r8   httprequest	call_nextc                 <  K   t          j        dd| j        j                                      dd          }| j         d| dt          t          j                              d d          }|| j	        _
        t          j        d|           }	  ||            d {V }t          j        j        r=t!          |           }t#          j        | j        |t          |j                             |t          j        |           S # t          j        |           w xY w)	Nz/[A-Za-z0-9_-]{21} /rR   :   zapi:)methodrU   r~   )resubra   pathreplacer   r   uuiduuid4state
request_idr   setr   METRICSENABLEDr$   r"   record_api_requestr~   reset)r   r   rU   r   tokenresponsetemplates          r6   track_requestr      s.     
 v+R1ABBJJ3PSTTHNGGXGGDJLL0A0A"1"0EGGJ  *GM 3z 3 344E%"7++++++++ # 	)'22H1~! 455    e$$$$e$$$$s   A D D)rI   r&   rJ   rK   r(   rL   )]r2   r   r   collections.abcr   r   
contextlibr   typingr   r   fastapir   r   r	   fastapi.exceptionsr
   fastapi.middleware.corsr   fastapi.responsesr   fastapi_paginationr   pydanticr   sentry_sdk.integrations.fastapir   !sentry_sdk.integrations.starletter   src._versionr   src.cache.clientr   r   
src.configr   src.dbr   r   src.exceptionsr   src.routersr   r   r   r   r   r   r   src.startupr   src.telemetryr    r!   r"   r#   src.telemetry.loggingr$   src.telemetry.sentryr%   sentry_sdk._typesr&   r'   intr7   basicConfig	getLoggerrC   rP   setLevelr*   Filterr<   	addFilterrT   SENTRYr   r   r_   apporiginsadd_middlewareinclude_routerrouter	add_router3   rw   exception_handlerr   rZ   r   
middlewarer   rH   r8   r6   <module>r      ss    				  / / / / / / / / * * * * * *                 . . . . . . . . . . 5 5 5 5 5 5 2 2 2 2 2 2 * * * * * * - - - - - - $ $ $ $ $ $ > > > > > > B B B B B B ' ' ' ' ' ' 4 4 4 4 4 4 4 4       * * * * * * * * * * * * * *                  2 1 1 1 1 1            5 4 4 4 4 4 2 2 2 2 2 2 .--------7s 7 7 7 7,  
-//A    
	8	$	$  1 2 2 ; ;G<L M M M) ) ) ) )'. ) ) )  " # # - -.A.A.C.C D D D   , (   ",   ",  	
  
 
 
 
 #g # # # #< g(9STT'8RSS 6f#'  9%I   ,     %%     s      :$U  3 3 3   5<  . . .   8?5  1 1 1   8?5  1 1 1   ;%e  4 4 4   4;u  - - -   8?5  1 1 1 j*UG < < <    ''W ?    (' y!!	W 	9 	 	 	 "!	 %%!)7)Yx5H*H!I% % % % % %r8   