/ api / __pycache__ / video_router.cpython-311.pyc
video_router.cpython-311.pyc
  1  2  7��g�W��(�dZddlZddlZddlZddlZddlmZmZmZm	Z	ddl
  3  mZmZm
Z
mZmZmZmZmZmZddlmZddlmZddlmZmZmZmZdd	lmZmZm Z m!Z!dd
  4  l"m#Z#m$Z$ddl%m&Z&m'Z'ddl(m)Z)m*Z*m+Z+m,Z,m-Z-dd
l.m/Z/ej0d��Z1eddgedd�edd�edd�edd�d����Z2hd�Z3dZ4dZ5ej6e4d���ej6e5d���Gd�de��Z7de8d e9fd!�Z:d"ed e8fd#�Z;dLd%e8d&e8d e8fd'�Z<d(e=d)e8d dfd*�Z>dMd+e8d,ee8fd-�Z?dMd+e8d,ee8fd.�Z@d/e8d0e8d1e8fd2�ZAe2�Bd3e�4��e
d5��ee#��fd$ed6e$fd7���ZCe2�Bd8e�4��e
d5��ee#��fd$ed6e$fd9���ZDe2�Bd:e�4��ed5��ee#��fd;ed<e7d6e$fd=���ZEe2�Bd>e�4��ed5��ee#��fd;ed<e7d6e$fd?���ZFe2�Bd@e�4��e
d5��edA��ee#��fdBed$edCe8d6e$fdD���ZGe2�BdEe�4��ed5��ed5��ed��ee#��fdBedFe8d+e8d,ee8d6e$f
  5  dG���ZHe2�IdH��dI���ZJe2�IdJd�4��ee#��fd/e8d;ed6e$fdK���ZKdS)Nz�
  6  Router for video analysis features
  7  ----------------------------------------------
  8  This module implements routes for extracting and analyzing video content,
  9  including nonverbal analysis and manipulation strategies.
 10  �N)�Optional�Dict�Any�List)	�	APIRouter�
 11  UploadFile�File�Form�
HTTPException�Depends�Body�BackgroundTasks�Request)�JSONResponse)�	BaseModel�)�VideoExtractionResponse�NonverbalAnalysisResponse�
ErrorResponse�TaskResponse)�extract_video_content�extract_nonverbal�analyze_nonverbal�analyze_manipulation_strategies)�get_current_active_user�User)�video_config�system_prompts)�TaskType�create_task�update_task�get_task_status�ProgressTracker)�get_prompt_managerz	api.videoz/video�VideozInvalid request)�model�description�UnauthorizedzFile not foundzServer error)�i����)�prefix�tags�	responses>�avi�mkv�mov�mp4�webm�uploadszresults/videosT)�exist_okc�4�eZdZUeed<dZeeed<dS)�AnalysisRequest�extraction_textN�extraction_path)�__name__�
 12  __module__�__qualname__�str�__annotations__r9r���E/Users/robertbadinter/Desktop/Cerastes_Public_API/api/video_router.pyr7r7Js2�����������%)�O�X�c�]�)�)�)�)�)r@r7�filename�returnc�t�d|vo4|�dd��d���tvS)z+Checks if the file has an allowed extension�.r)�rsplit�lower�ALLOWED_EXTENSIONS)rBs rA�allowed_filerINs=���(�?�D��?�?�3��"�"�1�%�+�+�-�-�1C�C�Dr@�filec��K�|stdd����t|j��stdd����d�d�|jD����}t	tj����}tj�t|�d|����}|�	���d{V��}t|d	��5}|�|��ddd��n#1swxYwY|S)
 13  z+Saves an uploaded file and returns its pathr)zNo file was provided��status_code�detailzUnsupported file type�c3�JK�|]}|���s|dv�|V��dS)z._- N)�isalnum)�.0�cs  rA�	<genexpr>z%save_uploaded_file.<locals>.<genexpr>\s3����N�N�Q�1�9�9�;�;�N�!�v�+�+�q�+�+�+�+�N�Nr@�_N�wb)rrIrB�join�int�time�os�path�
UPLOAD_FOLDER�read�open�write)rJrB�	timestamp�	safe_path�contents�fs      rA�save_uploaded_filerdSsA�����L���4J�K�K�K�K���
�&�&�M���4K�L�L�L�L��w�w�N�N�$�-�N�N�N�N�N�H��D�I�K�K� � �I�����]�y�,E�,E�8�,E�,E�F�F�I��Y�Y�[�[� � � � � � �H�	
�i��	�	��!�	��������������������������s�C5�5C9�<C9�video�original_filenamer,c	�&�tj�|��}tj�|��d}t	tj����}tj�t|�d|�d|�d���S)z0Creates a filename for the video analysis outputrrUz.txt)rZr[�basename�splitextrXrYrW�RESULTS_FOLDER)rfr,�	base_name�name_without_extr`s     rA�create_output_filenamermgsv���� � �!2�3�3�I��w�'�'�	�2�2�1�5���D�I�K�K� � �I�
�7�<�<��6�(V�(V�4D�(V�(V�y�(V�(V�(V�W�W�Wr@�progress�descc�N�t�d|dzd�d|����dS)z%Progress function (for compatibility)�
 14  Progress: �d�.1f�% - N��logger�debug�rnros  rA�progress_callbackryns2��
 15  �L�L�:�h�s�l�:�:�:�D�:�:�;�;�;�;�;r@r8r9c���t��}dtvr#|�td|���}n|�d|���}t|||���S)z>Modified version of analyze_nonverbal using the prompt manager�nonverbal_analysis��text�AAnalyze the nonverbal cues in the following video content: {text}�rn)r$r�format_prompt_directr�r8r9rn�prompt_manager�prompts     rA�formatted_analyze_nonverbalr�ss{��'�)�)�N��~�-�-��4�4��/�0� �5�
 16  �
 17  ��� �4�4�O� �5�
 18  �
 19  ���V�_�x�H�H�H�Hr@c���t��}dtvr#|�td|���}n|�d|���}t|||���S)zLModified version of analyze_manipulation_strategies using the prompt manager�manipulation_analysisr|�JAnalyze the manipulation strategies in the following video content: {text}r)r$rr�rr�s     rA�formatted_analyze_manipulationr��s{��'�)�)�N��.�0�0��4�4��2�3� �5�
 20  �
 21  ��� �4�4�X� �5�
 22  �
 23  ��+�6�?�X�V�V�V�Vr@�task_id�	task_type�
 24  video_pathc
 25  ��K�	t|ddd���t|��}|tjkr.t|ddi��t	||���\}}||d�}d}nP|tjkr.t|dd	i��t
||���\}}||d�}d
 26  }ntd|�����t|d||d
���t�	d|�d���dS#t$r�}	t�d|�dt|	������t�tj����t|dt|	��dt|	����d���Yd}	~	dSd}	~	wwxYw)z?Asynchronous function to process a video task in the background�runningzVideo processing in progress...��status�messager�zExtracting nonverbal cues...r)�content�	file_pathz0Nonverbal cues extraction completed successfullyzExtracting video content...z/Video content extraction completed successfullyzUnsupported video task type: �	completed�r��resultsr�zVideo task � completed successfullyzError during video task �: �failed�Error: �r��errorr�N)r!r#r�VIDEO_NONVERBALr�VIDEO_MANIPULATIONr�
 27  ValueErrorrv�info�	Exceptionr�r=�	traceback�
 28  format_exc)
 29  r�r�r��kwargs�progress_trackerr��	temp_path�result�success_message�es
 30            rA�process_video_taskr��s����0��G��8�
 31  �
 32  �	�	�	�+�7�3�3����0�0�0���)�-K�!L�M�M�M�!2�:�HX�!Y�!Y�!Y��G�Y�"�&���F�Q�O�O�
�(�5�
5�
5���)�-J�!K�L�L�L�!6�z�L\�!]�!]�!]��G�Y�"�&���F�P�O�O��H�Y�H�H�I�I�I�	�G�!��&�
 33  �
 34  �	�	�	�	���B�'�B�B�B�C�C�C�C�C���������C��C�C�3�q�6�6�C�C�D�D�D����Y�)�+�+�,�,�,��G����V�V�)��Q���)�)�
 35  �
 36  �	�	�	�	�	�	�	�	�	��������s�C"C(�(
 37  F�2B	F�Fz/extract)�response_model.�current_userc��K�	t|���d{V��}t�d|����t|d����\}}t	||d���}|S#t
 38  $r�t$rP}t�dt|������tddt|�����	���d}~wwxYw)
 39  zExtracts content from a videoN�Video saved to c�J�t�d|dzd�d|����S�Nrqrrrsrtrurxs  rA�<lambda>z"video_extraction.<locals>.<lambda>��+��F�L�L�9b�h�s�l�9b�9b�9b�\`�9b�9b�,c�,c�r@rzVideo extraction successful�r�r�r�zError during video extraction: r+rL)	rdrvr�rrrr�r�r=�rer�r�r�r��responser�s       rA�video_extractionr��s����`�-�e�4�4�4�4�4�4�4�4�
 40  ����2�j�2�2�3�3�3�3��c�c�
 41  �
 42  �
 43  ����+���1�
 44  �
 45  �
 46  ���������
��`�`�`����?�s�1�v�v�?�?�@�@�@���4^�VY�Z[�V\�V\�4^�4^�_�_�_�_�����`�����AA�C�3AB>�>Cz/extract_nonverbalc��K�	t|���d{V��}t�d|����t|d����\}}t	||d���}|S#t
 47  $r�t$rP}t�dt|������tddt|�����	���d}~wwxYw)
 48  z$Extracts nonverbal cues from a videoNr�c�J�t�d|dzd�d|����Sr�rurxs  rAr�z&nonverbal_extraction.<locals>.<lambda>�r�r@rz$Nonverbal cues extraction successfulr�z(Error during nonverbal cues extraction: r+rL)	rdrvr�rrrr�r�r=r�s       rA�nonverbal_extractionr��s����i�-�e�4�4�4�4�4�4�4�4�
 49  ����2�j�2�2�3�3�3�/��c�c�
 50  �
 51  �
 52  ����+���:�
 53  �
 54  �
 55  ���������
��i�i�i����H��A���H�H�I�I�I���4g�_b�cd�_e�_e�4g�4g�h�h�h�h�����i���r�z/analyze_nonverbal�request�analysis_reqc���K�	t|j|jt���}|dd�}t	|jjdd��}|r+|�d��r|�|d��}td
 56  i|��}|S#t$r�t$rP}t�
dt|������tddt|�����	���d}~wwxYw)z"Analyzes nonverbal cues in a videorz"Nonverbal cues analysis successful��analysisr��json_simplifierNrez&Error during nonverbal cues analysis: r+rLr?)r�r8r9ry�getattr�app�state�should_process�processrrr�rvr�r=�r�r�r�r�r�r�r�r�s        rA�analyze_nonverbal_apir�s!����g�.��(��(�&�
 57  �
 58  �
 59  ��'�3W�X�X��!�'�+�"3�5F��M�M���	>��=�=�g�F�F�	>�$�,�,�V�W�=�=�F�-�6�6�v�6�6���������
��g�g�g����F�c�!�f�f�F�F�G�G�G���4e�]`�ab�]c�]c�4e�4e�f�f�f�f�����g�����A;B�C$�AC�C$z/analyze_manipulationc���K�	t|j|jt���}|dd�}t	|jjdd��}|r+|�d��r|�|d��}td
 60  i|��}|S#t$r�t$rP}t�
dt|������tddt|�����	���d}~wwxYw)z+Analyzes manipulation strategies in a videorz+Manipulation strategies analysis successfulr�r�Nrez/Error during manipulation strategies analysis: r+rLr?)r�r8r9ryr�r�r�r�r�rrr�rvr�r=r�s        rA�analyze_manipulation_apir�0s!����p�1��(��(�&�
 61  �
 62  �
 63  ��'�3`�a�a��!�'�+�"3�5F��M�M���	>��=�=�g�F�F�	>�$�,�,�V�W�=�=�F�-�6�6�v�6�6���������
��p�p�p����O�s�1�v�v�O�O�P�P�P���4n�fi�jk�fl�fl�4n�4n�o�o�o�o�����p���r�z/async_extract�standard�background_tasks�extract_typec��VK�	t|���d{V��}t�d|�d���|���dkrtj}d}ntj}d}||t||���d�}t||j	|�	��}|j
 64  tf|||d
 65  �|��t|d|�d��
��S#t$r�t$rP}	t�dt!|	������tddt!|	��������d}	~	wwxYw)z7Starts an asynchronous video extraction (in background)Nr�z for asynchronous extraction�	nonverbalznonverbal cues extractionzvideo content extraction)r,)r�r��
 66  output_txt�r��user_id�params)r�r�r��pending� task launched successfully�r�r�r�z/Error launching asynchronous video extraction: r+rL)rdrvr�rGrr�r�rmr �username�add_taskr�rrr�r�r=)
 67  r�rer�r�r�r��	task_desc�task_paramsr�r�s
 68            rA�async_video_extractionr�Ps�����1
 69  �-�e�4�4�4�4�4�4�4�4�
 70  ����N�j�N�N�N�O�O�O������;�.�.� �0�I�3�I�I� �3�I�2�I�%�(�0��L�Q�Q�Q�
 71  �
 72  ���� �)��
 73  �
 74  �
 75  ��	"��!��	
 76  ���!�		
 77  �	
 78 79  �	
 80  �	
 81  �	
 82  ���� �=�=�=�
 83  �
 84  �
 85  �	
 86  ������
��
 87  �
 88  �
 89  ����O�s�1�v�v�O�O�P�P�P���M�S��V�V�M�M�
 90  �
 91  �
 92  �	
 93  �����
 94  ���s�B?C�D(�AD#�#D(z/async_analyze�
analysis_typec	��4K�	|dvrtdd����|||d�}|dkrtj}d}ntj}d}t	||j|�	��}d
 95  tdtdtd
ttfd�}	|�|	||||���t|d|�d����S#t$r�t$rP}
 96  t�dt
|
 97  ������tddt
|
 98  ��������d}
 99  ~
100  wwxYw)z5Starts an asynchronous video analysis (in background))r��manipulationr)z8Invalid analysis type. Use 'nonverbal' or 'manipulation'rL)r8r9r�r�znonverbal cues analysisz manipulation strategies analysisr�r�r�r8r9c
101  ��jK�	t|d|�d�d���t|��}t��}|dkrXdtvr#|�td|���}n|�d|���}t|||���}d	}nWd
102  tvr#|�td
103  |���}n|�d|���}t
|||���}d}d
dlm}	t|	j
104  dd��}
105  |}|
106  rT|
107  �d��r?d|i}|
108  �|d��}
|
�
d|��}d|
vr|
d|d<t|d||d���t�d|�d���dS#t $r�}t�d|�dt%|������t�t'j����t|dt%|��dt%|����d���Yd}~dSd}~wwxYw)Nr�z analysis in progress...r�r�r{r|r~rz.Nonverbal cues analysis completed successfullyr�r�z7Manipulation strategies analysis completed successfullyr)r�r�rer��plain_explanationr�r�zAnalysis task r�zError during analysis task r�r�r�r�)r!r#r$rr�rr�mainr�r�r�r�r��getrvr�r�r�r=r�r�)r�r�r8r9r�r��formatted_textr�r�r�r�r��result_dict�	processedr�s               rA�execute_analysisz.async_video_analysis.<locals>.execute_analysis�s����V
��G�'�"/�I�I�I�&�&����$3�7�#;�#;� �"4�!5�!5��!�K�/�/�+�~�=�=�)7�)L�)L�*�+?�@�!0�*M�*�*���
109  *8�)L�)L�_�!0�*M�*�*��
110   1�&�'�!1� � � �H�
111  'W�O�O�/�.�@�@�)7�)L�)L�*�+B�C�!0�*M�*�*���
112  *8�)L�)L�h�!0�*M�*�*��
113   ?�&�'�!1� � � �H�
114  '`�O�%�$�$�$�$�$�")�#�)�5F��"M�"M��"��#�U��'E�'E�g�'N�'N�U�#+�V�"4�K� /� 7� 7��W� M� M�I�&�]�]�8�V�<�<�F�+�i�7�7�6?�@S�6T��2�3��G�)�%�.�&�&�������M�W�M�M�M�N�N�N�N�N���
�
�
����N�7�N�N�c�!�f�f�N�N�O�O�O����Y�1�3�3�4�4�4��G�&� ��V�V�1��Q���1�1�&�&��������������
���s�FF�
115  H2�B	H-�-H2)r�r�r8r9r�r�r�z-Error launching asynchronous video analysis: r+N)
rrr�r�r r�r=rr�rr�rvr�)r�r�r8r9r�r�r�r�r�r�r�s           rA�async_video_analysisr��s�����N
116  �� =�=�=���Q����
� /�.�*�
117  �
118  ���K�'�'� �0�I�1�I�I� �3�I�:�I��� �)��
119  �
120  �
121  ��W	�C�W	��W	�VY�W	�lt�ux�ly�W	�W	�W	�W	�t	�!�!���'�+�+�	"�	
122  �	
123  �	
124  ���� �=�=�=�
125  �
126  �
127  �	
128  ������
��
129  �
130  �
131  ����M�S��V�V�M�M�N�N�N���K�3�q�6�6�K�K�
132  �
133  �
134  �	
135  �����
136  ���s�B.B3�3D�AD�Dz/allowed_extensionsc��JK�tt��tdd�S)z3Retrieves the list of allowed video file extensions�max_upload_size_mb)�allowed_extensionsr�)�listrHrr?r@rA�get_allowed_extensionsr�$s,����#�#5�6�6�*�+?�@���r@z/task/{task_id}/resultc��K�	t|��}|stdd����|ddkr|d|�dd��d�S|�d	i��}d
137  |vr[t|jjdd��}|r>|�d
��r)d|i}|�|d
��}d
138  |vr|d
139  |d
140  <d||�dd��d�S#t$r�t$rP}t�
141  dt|������tddt|��������d}~wwxYw)z-Retrieves the result of a video analysis taskr*zTask not foundrLr�r�r�zTask is being processedr�r�r�r�Nrer�zTask completed successfully)r�r�r�zError retrieving task result: r+)r"rr�r�r�r�r�r�r�rvr�r=)	r�r�r��taskr�r�r�r�r�s	         rA�get_task_resultr�,s�����(
142  ��w�'�'���	J��C�8H�I�I�I�I���>�[�(�(��x�.��8�8�I�/H�I�I���
����)�R�(�(���f�,�,�%�g�k�&7�9J�D�Q�Q�O��
Q�?�#A�#A�'�#J�#J�
Q�'��0��+�3�3�K��I�I�	�'�)�3�3�2;�<O�2P�F�.�/�"���x�x�	�+H�I�I�
143  �
144  �	
145  ������
��
146  �
147  �
148  ����>�c�!�f�f�>�>�?�?�?���<�C��F�F�<�<�
149  �
150  �
151  �	
152  �����
153  ���s �AC �BC � E�4AD?�?E)re)N)L�__doc__rZ�loggingrYr��typingrrrr�fastapirrr	r
154  rrr
rr�fastapi.responsesr�pydanticr�response_modelsrrrr�video_modelsrrrr�authrr�configrr�inference_enginerr r!r"r#�utils.prompt_managerr$�	getLoggerrv�video_routerrHr\rj�makedirsr7r=�boolrIrdrm�floatryr�r�r��postr�r�r�r�r�r�r�r�r�r?r@rA�<module>rsq����
155  �	�	�	�������������,�,�,�,�,�,�,�,�,�,�,�,�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�m�*�*�*�*�*�*�������������������������������/�.�.�.�.�.�.�.�0�/�/�/�/�/�/�/���������������4�3�3�3�3�3�
156  ��	�;�	'�	'���y��
157  ��$�5F�
G�
G�$�^�
D�
D�$�5E�
F�
F�$�^�
D�
D�	��	�	�	��:�9�9���
�!�����M�D�)�)�)�)����N�T�*�*�*�*�*�*�*�*�*�i�*�*�*�D�3�D�4�D�D�D�D�
158  �:��#�����(X�X�c�X�3�X�S�X�X�X�X�<��<�S�<�T�<�<�<�<�
159  I�I��I�x�PS�}�I�I�I�I�*W�W�C�W�(�SV�-�W�W�W�W�(2�c�2�c�2�s�2�2�2�2�h���:�.E��F�F���S�	�	� ��!8�9�9�`�`��`��`�`�`�G�F�`�>���'�8O��P�P���S�	�	� ��!8�9�9�i�i��i��i�i�i�Q�P�i�>���'�8Q��R�R�%)�D��I�I� ��!8�9�9�g�g�
�g�!�g��g�g�g�S�R�g�>���*�;T��U�U�%)�D��I�I� ��!8�9�9�p�p�
�p�!�p��p�p�p�V�U�p�>���#�L��A�A���S�	�	���Z�(�(� ��!8�9�9�	8
160  �8
161  �%�8
162  ��8
163  ��8
164  ��	8
165  �8
166  �8
167  �B�A�8
168  �t���#�L��A�A���c����4��9�9�%)�T�$�Z�Z� ��!8�9�9�V
169  �V
170  �%�V
171  ��V
172  ��V
173  ��c�]�	V
174175  �V
176  �V
177  �V
178  �B�A�V
179  �p���'�(�(���)�(�����*�4��@�@�!��!8�9�9�.
180  �.
181  �
�.
182  �
�.
183  ��.
184  �.
185  �.
186  �A�@�.
187  �.
188  �.
189  r@