
    Xj                         d dl Z d dlmZ d dlmZ  ee          Z G d d          Z G d d          Zdadefd	Z	dS )
    N)datetime)
get_loggerc                   l    e Zd ZddedefdZedefd            Zd Zdefd	Z	d
 Z
defdZdefdZdS )VectorizationTask   document_idtotal_chunksc                 h    || _         || _        d| _        d| _        d | _        d | _        d | _        d S )Nr   pending)r   r	   completed_chunksstatuserror_message
started_atcompleted_at)selfr   r	   s      Y/lsinfo/ai/hellotax_ai/base_platform/app/services/knowledge/vectorization_task_manager.py__init__zVectorizationTask.__init__   s>    &( !!     returnc                 @    | j         dk    rdS | j        | j         z  dz  S )Nr   g        d   )r	   r   r   s    r   progresszVectorizationTask.progress   s+    !!3$t'883>>r   c                 D    d| _         t          j                    | _        d S )N
processing)r   r   nowr   r   s    r   startzVectorizationTask.start   s    "",..r   	completedc                     || _         d S N)r   )r   r   s     r   update_progressz!VectorizationTask.update_progress   s     )r   c                 \    d| _         t          j                    | _        | j        | _        d S )Nr   )r   r   r   r   r	   r   r   s    r   completezVectorizationTask.complete!   s(    !$LNN $ 1r   errorc                 R    d| _         || _        t          j                    | _        d S )Nfailed)r   r   r   r   r   )r   r$   s     r   failzVectorizationTask.fail&   s%    "$LNNr   c           	          | j         | j        | j        | j        | j        | j        | j        r| j                                        nd | j        r| j                                        nd dS )N)r   r   r   r	   r   r   r   r   )	r   r   r   r	   r   r   r   	isoformatr   r   s    r   to_dictzVectorizationTask.to_dict+   sp    +k - $ 5!/9=R$/33555d=A=NXD-77999TX	
 	
 		
r   Nr   )__name__
__module____qualname__intr   propertyfloatr   r   r!   r#   strr'   dictr*    r   r   r   r   	   s        ! !C !s ! ! ! ! ?% ? ? ? X?
) ) )* * * * *2 2 2
+# + + + +


 

 

 

 

 

 

r   r   c                       e Zd Zd ZddededefdZdededz  fdZded	efd
ZdefdZ	dede
fdZdefdZdefdZddefdZdS )VectorizationTaskManagerc                 D    i | _         t          j                    | _        d S r    )tasks	threadingLocklockr   s    r   r   z!VectorizationTaskManager.__init__:   s    35
N$$			r   r   r   r	   r   c                     | j         5  t          ||          }|| j        |<   t                              |                              d           |cd d d            S # 1 swxY w Y   d S )Ntask_idzvectorization task created)r;   r   r8   loggerbindinfo)r   r   r	   tasks       r   create_taskz$VectorizationTaskManager.create_task>   s    Y 	 	$[,??D&*DJ{#KKK,,112NOOO		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A
AA#&A#Nc                 x    | j         5  | j                            |          cd d d            S # 1 swxY w Y   d S r    )r;   r8   getr   r   s     r   get_taskz!VectorizationTaskManager.get_taskE   s    Y 	/ 	/:>>+..	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   /33r   c                     | j         5  | j                            |          }|r|                    |           d d d            d S # 1 swxY w Y   d S r    )r;   r8   rE   r!   )r   r   r   rB   s       r   update_taskz$VectorizationTaskManager.update_taskI   s    Y 	0 	0:>>+..D 0$$Y///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   2AAAc                    | j         5  | j                            |          }|rB|                                 t                              |                              d           d d d            d S # 1 swxY w Y   d S )Nr=   zvectorization task completed)r;   r8   rE   r#   r?   r@   rA   )r   r   rB   s      r   complete_taskz&VectorizationTaskManager.complete_taskO   s    Y 	V 	V:>>+..D VK00556TUUU		V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	Vs   AA44A8;A8r$   c                    | j         5  | j                            |          }|rE|                    |           t                              |                              d|           d d d            d S # 1 swxY w Y   d S )Nr=   z"vectorization task failed: {error})r$   )r;   r8   rE   r'   r?   r@   warning)r   r   r$   rB   s       r   	fail_taskz"VectorizationTaskManager.fail_taskV   s    Y 	 	:>>+..D 		%   K00888 9   		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A"A77A;>A;c                     | j         5  || j        v r6| j        |= t                              |                              d           d d d            d S # 1 swxY w Y   d S )Nr=   zvectorization task removed)r;   r8   r?   r@   rA   rF   s     r   remove_taskz$VectorizationTaskManager.remove_task_   s    Y 	T 	Tdj((J{+K00556RSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts   A AAAc                     | j         5  d | j                                        D             cd d d            S # 1 swxY w Y   d S )Nc                 6    g | ]}|                                 S r4   )r*   ).0rB   s     r   
<listcomp>z:VectorizationTaskManager.get_all_tasks.<locals>.<listcomp>g   s     CCCtDLLNNCCCr   )r;   r8   valuesr   s    r   get_all_tasksz&VectorizationTaskManager.get_all_taskse   s    Y 	D 	DCCtz/@/@/B/BCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   #8<<  max_age_secondsc                 F   | j         5  t          j                    }g }| j                                        D ]C\  }}|j        r7||j        z
                                  }||k    r|                    |           D|D ]
}| j        |= 	 d d d            d S # 1 swxY w Y   d S r    )r;   r   r   r8   itemsr   total_secondsappend)r   rX   r   	to_removedoc_idrB   ages          r   cleanup_old_tasksz*VectorizationTaskManager.cleanup_old_tasksi   s   Y 		' 		',..CI $
 0 0 2 2 1 1$ 1!22AACCC_,,!((000# ' 'Jv&&'		' 		' 		' 		' 		' 		' 		' 		' 		' 		' 		' 		' 		' 		' 		' 		' 		' 		's   B BBBr+   )rW   )r,   r-   r.   r   r/   r   rC   rG   rI   rK   r2   rN   rP   listrV   r`   r4   r   r   r6   r6   8   s>       % % % s # FW    /C /,=,D / / / /0s 0s 0 0 0 0V V V V VS     Ts T T T TDt D D D D
' 
' 
' 
' 
' 
' 
' 
'r   r6   r   c                  :    t           t                      a t           S r    )_task_managerr6   r4   r   r   get_task_managerrd   y   s    022r   )
r9   r   common_loggingr   r,   r?   r   r6   rc   rd   r4   r   r   <module>rf      s              % % % % % %	H		,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
^;' ;' ;' ;' ;' ;' ;' ;'| 2      r   