
    Xjf                         d dl m Z  d dl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mZ  ee          Z G d d	          Zd
S )    )datetime)
get_loggerlog_execution)Session)manager)DPOTask)SFTTask)TrainingConfigget_training_platformc                       e Zd ZdefdZ ee          defd            Z ee          defd            Z	dede
fdZ ee          dede
fd            Zd	S )
TrainingManagerdbc                     || _         d S )N)r   )selfr   s     O/lsinfo/ai/hellotax_ai/training_center/backend/app/services/training_manager.py__init__zTrainingManager.__init__   s        task_idc                   K   | j                             t                                        t          j        |k                                              }|s1t                              d| d           t          d| d          t          |j
                  }|j        pi }d|d<   t          |j        |j        pd|j        |j        |          }|                    |          }||_        d|_        t)          j                    |_        | j                                          t                              ||	                              d
           |S )Nz	SFT task 
 not foundTask sft	task_type namedescription
dataset_id
model_namehyperparametersrunningr   job_idzSFT training started)r   queryr	   filteridfirstloggerwarning
ValueErrorr   platformr    r
   r   r   r   r   create_training_jobplatform_job_idstatusr   utcnow
started_atcommitbindinfor   r   taskr+   r    configr#   s          r   start_sft_trainingz"TrainingManager.start_sft_training   J     w}}W%%,,WZ7-BCCIIKK 	:NN:w:::;;;8W888999(77.4"',$TYD<L<RPR_c_n{  |K  ]l  m  m  m--f55%"/++GF33889OPPPr   c                   K   | j                             t                                        t          j        |k                                              }|s1t                              d| d           t          d| d          t          |j
                  }|j        pi }d|d<   t          |j        |j        pd|j        |j        |          }|                    |          }||_        d|_        t)          j                    |_        | j                                          t                              ||	                              d
           |S )Nz	DPO task r   r   dpor   r   r   r!   r"   zDPO training started)r   r$   r   r%   r&   r'   r(   r)   r*   r   r+   r    r
   r   r   r   r   r,   r-   r.   r   r/   r0   r1   r2   r3   r4   s          r   start_dpo_trainingz"TrainingManager.start_dpo_training%   r8   r   r   c           	      t  K   |dk    rS| j                             t                                        t          j        |k                                              }nR| j                             t                                        t          j        |k                                              }|r|j        sd S t          |j	                  }|
                    |j                  }|j        |_        |j        |_        |j        |_        |j        dk    rLt          j                    |_        |                    |j                  }|j        |j        |j        d|_        | j                                          t/          j        t3          |          d||j        |j        |j        d           d {V  d S )Nr   	completed)model_idmetrics	artifactsstatus_update)typer   r.   progressmessage)r   r$   r	   r%   r&   r'   r   r-   r   r+   get_job_statusr.   rC   logsr   r/   completed_atget_job_resultr>   r?   r@   resultr1   
ws_manager	broadcaststrrD   )r   r   r   r5   r+   r.   rI   s          r   update_task_statusz"TrainingManager.update_task_status7   s     7==))00w1FGGMMOODD7==))00w1FGGMMOOD 	4/ 	F(77(()=>>mK	=K'' ( 1 1D,,T-ABBF'-6>`f`pqqDK"3w<</V]ioiv  EK  ET  ag  ao  2p  2p  q  q  	q  	q  	q  	q  	q  	q  	q  	q  	qr   c                   K   |dk    rS| j                             t                                        t          j        |k                                              }nR| j                             t                                        t          j        |k                                              }|r|j        sdS t          |j	                  }|
                    |j                  }|r d|_        | j                                          |S )Nr   F	cancelled)r   r$   r	   r%   r&   r'   r   r-   r   r+   
cancel_jobr.   r1   )r   r   r   r5   r+   successs         r   cancel_trainingzTrainingManager.cancel_trainingJ   s      7==))00w1FGGMMOODD7==))00w1FGGMMOOD 	4/ 	5(77%%d&:;; 	%DKGNNr   N)__name__
__module____qualname__r   r   r   r(   intr7   r;   rL   rM   rR    r   r   r   r      s        7     ]6    " ]6    "q q q q q q& ]6S S      r   r   N)r   common_loggingr   r   sqlalchemy.ormr   app.core.websocket_managerr   rJ   app.models.dpo_taskr   app.models.sft_taskr	   app.services.training_platformr
   r   rS   r(   r   rW   r   r   <module>r^      s          4 4 4 4 4 4 4 4 " " " " " " < < < < < < ' ' ' ' ' ' ' ' ' ' ' ' P P P P P P P P	H		I I I I I I I I I Ir   