/ __pycache__ / main.cpython-311.pyc
main.cpython-311.pyc
  1  2  ���g5B�
�"
  3  �dZddlZddlZddlZddlZddlmZddlmZm	Z	m
  4  Z
  5  ddlmZddl
mZddlmZddlmZmZdd	lmZdd
  6  lmZmZmZmZmZmZmZmZddlm Z ddl!m"Z"dd
l#m$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,m-Z-m.Z.m/Z/e,��ej0d��Z1dD]"Z2ee2���3dd����#edde-j4dd��ddd���Z5gd�Z6gd�Z7ej8dd���9d ��Z:e5�;ee:ddgdg�!��e5�;e&ddddddde:gd"��#�
  7  8  e5�;e(e/j4d$d%��e/j4d&d'��e/j4d(d)��e/j4d*d+��e6e7�,��e5�;e$e/j4d-d.��e/j4d/d%��gd0�e6d1gze7dd�2��e5�;e"e6e7gd3��4��e5�;e*e6e7d5�6��e5�;e e6d7d8gd9g�:��e5�4d;d<�=��d>���Z<e5�4d?d<�=��d@���Z=dA�Z>e>e5_?e5�dB��dCe	fdD���Z@e5�dB��dCe	fdE���ZAe5�BedF�G��e5�BedF�G��e5�BedH�G��e5�BedI�G��e5�BedJ�G��e5�Bed1�G��e5�BedK�G��ejCe5��edL��ZDeD�E��r6eD�F��r"e5�GdMedL�N��dL�O��edP��ZHeH�E��r7eH�F��r#e5�GdQedPd�R��dS�O��e5�IdT��dU���ZJe5�IdV��dW���ZKeLdXkr�ddlMZMej8dYdZ��ZNeOej8d[d\����ZPej8d]d^���Q��d_kZRe1�Sd`eN�daeP�dbeR�dc���eMjTddeNePeRej8dedf���Q���g��dSdS)hz�
  9  Main entry point for the Cerastes API
 10  -----------------------------------------
 11  This module initializes the FastAPI application and mounts the various routers.
 12  �N)�Path)�FastAPI�Request�Depends)�CORSMiddleware)�JSONResponse)�StaticFiles)�get_swagger_ui_html�get_redoc_html)�get_openapi)�
health_router�error_handlers�inference_router�transcription_router�video_router�subscription_router�task_router�auth_router)�APIKeyMiddleware)�TranslationMiddleware)�CacheMiddleware)�SecurityMiddleware)�RateLimitMiddleware)�FailoverMiddleware)�
setup_logging�
 13  app_config�model_config�
 14  api_configzapi.main)�inference_results�uploads�results�logs�cache�translation_modelsT)�parents�exist_okzCerastes APIz;API for advanced analysis of multimedia and textual content�versionz1.0.0�/api/openapi.json)�title�descriptionr'�docs_url�	redoc_url�openapi_url)z/api/healthz/auth/tokenz/auth/register�	/api/docs�
 15  /api/redocr(�/static)�/static/�/docs/z/assets/�CORS_ORIGINS�*�,)�
allow_origins�allow_credentials�
allow_methods�
allow_headers)�GET�POST�PUT�DELETE�OPTIONS�PATCH)	�enable_xss_protection�enable_hsts�enable_content_type_options�enable_frame_options�enable_referrer_policy�
 16  enable_csp�enable_cors_protection�allowed_origins�allowed_methods�global_rate_limiti��
ip_rate_limit�d�api_key_rate_limit���rate_limit_window�<)rIrJrL�window_size�
exclude_paths�exclude_prefixes�	cache_ttli,�cache_max_size)z/api/inference/z/api/video/z/api/transcription/z
 17  /api/tasks)�ttl�max_size�include_prefixesrQrR�cache_query_params�cache_by_api_key)�text�content�prompt�
transcription�question)rQrR�text_field_namesrZ)rQrR�default_model_typer1r2z/admin/)rQrR�admin_pathsr.F)�include_in_schemac��,K�tdddd���S)zCustom route for Swagger UI.r(zCerastes API - Documentationz/static/swagger-ui-bundle.jsz/static/swagger-ui.css)r-r)�swagger_js_url�swagger_css_url)r
 18  ���9/Users/robertbadinter/Desktop/Cerastes_Public_API/main.py�custom_swagger_ui_htmlri�s+�����'�,�5�0�	���rgr/c��*K�tddd���S)zCustom route for ReDoc.r(z"Cerastes API - Documentation ReDocz/static/redoc.standalone.js)r-r)�redoc_js_url)rrfrgrh�custom_redoc_htmlrl�s(�����'�2�2����rgc	�T�tjrtjSttjtjtjtj���}dddd�|dd<dd	d
 19  �|dd<dd
d�ddd�ddd�ddd�ddd�ddd�ddd�g|d<|t_tjS)N)r)r'r*�routeszCerastes API Supportzhttps://cerastes.ai/supportzsupport@cerastes.ai)�name�url�email�info�contactzDual GPL/Commercial Licensezhttps://cerastes.ai/license)rorp�license�healthzEndpoints to check API status)ror*�	inferencezEndpoints for text inferencer]z!Endpoints for audio transcription�videozEndpoints for video analysis�taskszEndpoints for task management�authz.Endpoints for authentication and authorization�subscriptionz%Endpoints for subscription management�tags)�app�openapi_schemarr)r'r*rn)r}s rh�custom_openapir~�s��
 20  ��"��!�!� ��i����O��z�	���N�'�,�&�)�)�N�6��9�%�.�,�)�)�N�6��9�%��:�	
 21  �	
 22 23   �9�	
 24  �	
 25 26  $�>�	
 27  �	
 28 29  �9�	
 30  �	
 31 32  �:�	
 33  �	
 34 35  �K�	
 36  �	
 37 38  #�B�	
 39  �	
 40  �3�N�6��>(�C����rg�http�requestc
 41  ��@K�tj��}	||���d{V��}tj��|z
 42  }t�|j�d|jj�d|j�d|d�d���|S#t$�r}t�dt|������t�d|jj����t�d|j����t�d	|j
 43  r|j
 44  jnd
 45  ����t�tj
����tddt|��t|��j|jjd
����cYd}~Sd}~wwxYw)z'Middleware to handle global exceptions.N� z - z.3f�szUnhandled exception: zPath: zMethod: zClient: �Unknowni�zInternal server error)�detail�message�type�path)�status_coder[)�time�logger�debug�methodrpr�r��	Exception�error�str�client�host�	traceback�
 46  format_excrr��__name__)r��	call_next�
 47  start_time�response�process_time�es      rh�exception_handlingr��s���������J�
 48  �"��7�+�+�+�+�+�+�+�+���y�{�{�Z�/�������j�j���)9�j�j�h�>R�j�j�Wc�j�j�j�j�k�k�k�����
 49  �
 50  �
 51  ����5�S��V�V�5�5�6�6�6����0�g�k�.�0�0�1�1�1����0���0�0�1�1�1����V�w�~� T��� 3� 3�9�V�V�W�W�W����Y�)�+�+�,�,�,���1��q�6�6��Q���(���(�	��
 52  �
 53  �
 54  �	
 55  �	
 56  �	
 57  �	
 58  �	
 59  �	
 60  �����
 61  ���s�A#A;�;F�DF�F�Fc��K�tj��}||���d{V��}tj��|z
 62  }t|��|jd<|S)z#Adds a header with processing time.NzX-Process-Time)r�r��headers)r�r�r�r�r�s     rh�add_process_time_headerr�s_��������J��Y�w�'�'�'�'�'�'�'�'�H��9�;�;��+�L�),�\�):�):�H��%�&��Orgz/api)�prefixz
 63  /api/videoz/api/transcriptionz/api/subscriptionz/auth�staticr0)�	directory)roz
frontend/dist�/)r��html�frontend�startupc��K�t�d��	ddlm}|��t�d��nl#t$r_}t�dt
|������t�tj����Yd}~nd}~wwxYw	ddl	m
 64  }|���t�d��tj
d	d
 65  ��r�t�d��tj
dg��}|D]�}	t�d
|�d���|����|���I#t$r7}t�d|�dt
|������Yd}~��d}~wwxYwnl#t$r_}t�dt
|������t�tj����Yd}~nd}~wwxYw	ddlm}ddlm}|��}||�
di���
di����}|t*j_|jr5t�dd�|j������nl#t$r_}t�dt
|������t�tj����Yd}~nd}~wwxYw	ddlm}	|	��}
 66  t�dt;|
 67  d���d���ddlm}t�d|������nA#t$r4}t�dt
|������Yd}~nd}~wwxYwt�d t*j ����t�d!tCj"d"d#������t�d$tCj"d%d&������	ddl#}|j$�%��}
|
r|j$�&��nd}t�d'|
�d(|����|
rotO|��D]_}t�d)|�d|j$�(|���d*|j$�)|��j*d+zd,�d-����`nf#tV$rt�d.��Yn@t$r4}t�d/t
|������Yd}~nd}~wwxYwd0tYd1��fd2tYd3��fd4tYd5��fd6tYd7��fd8tYd9��ffD]\}}t�|�d|�-���d:|�.��o2|�/��otCj0|tBj1���d;�����	dd<lm2}|��\}}t�d=t;|���d>d�|������nl#t$r_}t�d?t
|������t�tj����Yd}~nd}~wwxYwd@�t*j3D��}t�dAd�|������t�dB��dS)Cz Executed at application startup.z=== Starting Cerastes API ===r)�init_dbz!Database initialized successfullyzError initializing database: N��ModelManagerz&Model manager initialized successfully�preload_modelsFzModel preloading requested...�preload_listzPreloading model z...zFailed to preload model �: z"Error initializing model manager: )�JSONSimplifier)�load_config�postprocessing�json_simplifierz+JSONSimplifier post-processor enabled for: z, z#Error initializing JSONSimplifier: )�get_models_healthz%Failover middleware initialized with �modelsz configured models)�get_cache_statszCache middleware initialized: z(Error initializing advanced middleware: z	Version: z
Environment: �ENVIRONMENT�developmentzLog level: �	LOG_LEVEL�INFOzGPU available: z
, GPU count: zGPU z, Total memory: i@z.2fz GBz1PyTorch not available, operating in CPU-only modezError checking GPUs: �Uploadsr �Resultsr!�Logsr"�Cacher#zTranslation modelsr$z (�))�get_system_promptszSystem prompts loaded: z prompts in order: zError loading system prompts: c�&�g|]}|jj��Srf)�	__class__r�)�.0�ms  rh�
 68  <listcomp>z!startup_event.<locals>.<listcomp>�s��I�I�I��q�{�+�I�I�IrgzActive middlewares: z@Cerastes API started successfully and ready to receive requests!)4r�rr�
 69  db.init_dbr�r�r�r�r�r��
model_managerr��
 70  initializer�get�get_instance�
 71  load_model�warning�postprocessors.json_simplifierr��configr�r|�stater��enabled�join�apply_to�middleware.failover_middlewarer��len�middleware.cache_middlewarer�r'�os�getenv�torch�cuda�is_available�device_count�range�get_device_name�get_device_properties�total_memory�ImportErrorr�absolute�exists�is_dir�access�W_OKr��user_middleware)r�r�r�r��
 72  model_namer�r�r�r�r��
health_reportr�r��
gpu_available�	gpu_count�i�	path_namer�r��prompts�prompt_order�middleware_lists                      rh�
startup_eventr�!s3�����K�K�/�0�0�0�-�&�&�&�&�&�&���	�	�	����7�8�8�8�8���-�-�-����=�S��V�V�=�=�>�>�>����Y�)�+�+�,�,�,�,�,�,�,�,�����-����
 73  -�.�.�.�.�.�.����!�!�!����<�=�=�=���,�e�4�4�	V��K�K�7�8�8�8�'�+�N�B�?�?�L�*�
V�
V�
 74  �V��K�K� C�J� C� C� C�D�D�D� �-�-�/�/�:�:�:�F�F�F�F�� �V�V�V��N�N�#T�j�#T�#T�C�PQ�F�F�#T�#T�U�U�U�U�U�U�U�U�����V�������-�-�-����B�#�a�&�&�B�B�C�C�C����Y�)�+�+�,�,�,�,�,�,�,�,�����-����
 75  -�A�A�A�A�A�A�&�&�&�&�&�&������(�.����4D�b�)I�)I�)M�)M�N_�ac�)d�)d�e�e��$3��	�!��"�	m��K�K�k�d�i�i�P_�Ph�Fi�Fi�k�k�l�l�l����-�-�-����C�3�q�6�6�C�C�D�D�D����Y�)�+�+�,�,�,�,�,�,�,�,�����-����
 76  
 77  L�D�D�D�D�D�D�)�)�+�+�
����l�C�
�h�@W�<X�<X�l�l�l�m�m�m�	@�?�?�?�?�?����H�_�_�5F�5F�H�H�I�I�I�I���L�L�L����J�#�a�&�&�J�J�K�K�K�K�K�K�K�K�����L�����K�K�)�C�K�)�)�*�*�*�
 78  �K�K�I��	�-�� G� G�I�I�J�J�J�
 79  �K�K�>�b�i��V�<�<�>�>�?�?�?�9������
 80  �/�/�1�1�
�1>�E�E�J�+�+�-�-�-�A�	����M�m�M�M�)�M�M�N�N�N��	\��9�%�%�
\�
\�����[�1�[�[��
 81  �(B�(B�1�(E�(E�[�[�W\�Wa�Ww�Ww�xy�Wz�Wz�XH�KR�XR�[�[�[�[�\�\�\�\����L�L�L����J�K�K�K�K�K��9�9�9����7�s�1�v�v�7�7�8�8�8�8�8�8�8�8�����9����
 82  
 83  �D��O�O�$�	�D��O�O�$�	��f����	�$�w�-�-� �	�t�$8�9�9�:��x�x��	�4�	���y�v�v�D�M�M�O�O�v�v�t�{�{�}�}�7s������7s�[]�[d�ei�km�kr�[s�[s�v�v�v�w�w�w�w�-�-�-�-�-�-�-� 2� 2� 4� 4�������h�c�'�l�l�h�h�t�y�y�Ye�Of�Of�h�h�i�i�i�i���-�-�-����>�c�!�f�f�>�>�?�?�?����Y�)�+�+�,�,�,�,�,�,�,�,�����-����
 84  J�I�S�5H�I�I�I�O�
 85  �K�K�C�t�y�y��'A�'A�C�C�D�D�D�
 86  �K�K�R�S�S�S�S�Ss��*A	�	
 87  B2�AB-�-B2�6A<F>�3AE9�8F>�9
 88  F:�-F5�0F>�5F:�:F>�>
 89  H'�AH"�"H'�+BK�
 90  L+�AL&�&L+�/A,N�
 91  O�&*O�O�%CT1�1$V�	V� *V�V�*AZ>�>
 92  \'�A\"�"\'�shutdownc��tK�t�d��	ddlm}t�d��|���nA#t
 93  $r4}t�dt|������Yd}~nd}~wwxYw	ddlm	}t�d��|�
 94  ��dd	lm}t�d
 95  ��|��t�d��nA#t
 96  $r4}t�dt|������Yd}~nd}~wwxYw	ddl
}dd
lm}m}t�d��gd�}|���|d���z
 97  }|D�](}	t"j�|	���rt#j|	��D]�}
 98  t"j�|	|
 99  ��}t"j�|��r�|�t"j�|����}||krw	t#j|��t�d|������#t
100  $r7}t�d|�dt|������Yd}~��d}~wwxYw���*nA#t
101  $r4}t�dt|������Yd}~nd}~wwxYw	ddl}
|
j���r3t�d��|
j���nL#t@$rYn@t
102  $r4}t�dt|������Yd}~nd}~wwxYw	ddl!m"}t�d��|�#��nA#t
103  $r4}t�dt|������Yd}~nd}~wwxYwt�d��dS)z!Executed at application shutdown.z=== Stopping Cerastes API ===rr�zReleasing models from memory...zError releasing models: N)�translation_managerzReleasing translation models...)�invalidate_cachezCleaning cache...z*Middleware resources released successfullyz&Error releasing middleware resources: )�datetime�	timedeltazCleaning temporary files...)r zresults/transcriptionsr#�)�hourszTemporary file deleted: zUnable to delete r�z Error cleaning temporary files: zReleasing CUDA memory...zError releasing CUDA memory: )�enginezClosing database connections...zError closing DB connections: zCerastes API shutdown completed)$r�rrr�r��cleanupr�r�r��!middleware.translation_middlewarer��closer�r��shutilr�r��nowr�r�r��listdirr��isfile�
fromtimestamp�getmtime�unlinkr�r�r�r�r��empty_cacher��dbr��dispose)r�r�r�r�r�r�r��	temp_dirs�cutoff_time�temp_dir�item�	item_path�mod_timer�r�s               rh�shutdown_eventr
104  �s������K�K�/�0�0�0�:�.�.�.�.�.�.����5�6�6�6����������:�:�:����8��A���8�8�9�9�9�9�9�9�9�9�����:����
H�I�I�I�I�I�I����5�6�6�6��!�!�#�#�#�	A�@�@�@�@�@����'�(�(�(���������@�A�A�A�A���H�H�H����F�c�!�f�f�F�F�G�G�G�G�G�G�G�G�����H����B��
�
�
�0�0�0�0�0�0�0�0�	���1�2�2�2�B�B�B�	��l�l�n�n�y�y�r�':�':�':�:��!�
	Z�
	Z�H��w�~�~�h�'�'�
Z��J�x�0�0�Z�Z�D� "����X�t� <� <�I��w�~�~�i�0�0�Z�#+�#9�#9�"�'�:J�:J�9�:U�:U�#V�#V��#�k�1�1�Z� "�	�)� 4� 4� 4� &���-S�	�-S�-S� T� T� T� T��#,�Z�Z�Z� &���/X�9�/X�/X�PS�TU�PV�PV�/X�/X� Y� Y� Y� Y� Y� Y� Y� Y�����Z������
	Z���B�B�B����@��A���@�@�A�A�A�A�A�A�A�A�����B����?������:�"�"�$�$�	%��K�K�2�3�3�3��J�"�"�$�$�$����
�
�
����?�?�?����=�S��V�V�=�=�>�>�>�>�>�>�>�>�����?����@����������5�6�6�6����������@�@�@����>�c�!�f�f�>�>�?�?�?�?�?�?�?�?�����@�����K�K�1�2�2�2�2�2s��4A�
105  B�*B�B�A8D�
106  E�*E�E�C=K�1J�?K�
107  K�
108  -J<�7K�<K�K�
109  L�*L�L�
110  AM�
111  N$�'	N$�0*N�N$�(4O�
112  P�'*P�P�__main__�HOSTz0.0.0.0�PORT�8000�RELOAD�false�truezStarting server on �:z
113   (reload: r�zmain:appr�rr)r��port�reload�	log_level)U�__doc__r��loggingr�r��pathlibr�fastapirrr�fastapi.middleware.corsr�fastapi.responsesr�fastapi.staticfilesr	�fastapi.openapi.docsr
114  r�fastapi.openapi.utilsr�apir
rrrrrrr�
115  middlewarerr�rr�r�middleware.security_middlewarer� middleware.rate_limit_middlewarerr�rr�rrrr�	getLoggerr�r��mkdirr�r|�common_exclude_paths�common_exclude_prefixesr��split�cors_origins�add_middlewarerirlr~�openapir�r��include_router�register_exception_handlers�
116  static_dirr�r��mount�frontend_dir�on_eventr�r
117  r��uvicornr��intr�lower�reload_enabledrr�runrfrgrh�<module>r6s����
118  �	�	�	�������������������-�-�-�-�-�-�-�-�-�-�2�2�2�2�2�2�*�*�*�*�*�*�+�+�+�+�+�+�D�D�D�D�D�D�D�D�-�-�-�-�-�-�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�(�'�'�'�'�'�C�C�C�C�C�C�7�7�7�7�7�7�=�=�=�=�=�=�@�@�@�@�@�@�=�=�=�=�=�=�G�F�F�F�F�F�F�F�F�F�F�F��
����	��	�:�	&�	&��d�7�7�I��D��O�O���$���6�6�6�6��g�
119  �M��J�N�9�g�.�.�
��#�
��������=�<�<���r�y���-�-�3�3�C�8�8���������%��%����������� $����� �H�H�H���������$�j�n�%8�$�?�?� �*�.��#�6�6�%�z�~�&:�C�@�@��
120  ��2�B�7�7�&�,����������
121  ��{�C�(�(�
�Z�^�,�d�
3�
3�N�N�N�&�,��7�,����	�	�	�����&�,�O�O�O�	��������&�,��	��������&� �(�+���	����������.�.���/�.��������/�/���0�/��8�8�8�t���������
122  �g�
123  �
124  �
125  ���
126  �@�������7����������=���0�0�0����#�F��3�3�3����<���5�5�5����'�0D��E�E�E����&�/B��C�C�C����;�|��4�4�4����;�w��/�/�/�+��*�3�/�/�/��T�(�^�^�
127  �
�����I�:�,�,�.�.�I��I�I�i���x�8�8�8�x�I�H�H�H��t�O�$�$�������W�\�0�0�2�2�W��I�I�c�;�;��t�D�D�D�:�I�V�V�V����i���iT�iT���iT�V���j���J3�J3���J3�Z�z����N�N�N��2�9�V�Y�'�'�D��3�y�r�y���(�(�)�)�D��R�Y�x��1�1�7�7�9�9�V�C�N�
128  �K�K�N�d�N�N�T�N�N�^�N�N�N�O�O�O��G�K��
�
���"�)�K��0�0�6�6�8�8��������rg