o
    "i$                     @   s^   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 G dd dZd	S )
    )datetime)Session)SFTTask)DPOTask)get_training_platformTrainingConfig)managerc                   @   sZ   e Zd ZdefddZdefddZdefddZded	efd
dZ	ded	efddZ
dS )TrainingManagerdbc                 C   s
   || _ d S )N)r
   )selfr
    r   O/lsinfo/ai/hellotax_ai/training_center/backend/app/services/training_manager.py__init__
   s   
zTrainingManager.__init__task_idc                       | j ttj|k }|std| dt|j}|j	p"i }d|d< t
|j|jp.d|j|j|d}||}||_d|_t |_| j   |S )NTask 
 not foundsft	task_type namedescription
dataset_id
model_namehyperparametersrunning)r
   queryr   filteridfirst
ValueErrorr   platformr   r   r   r   r   r   create_training_jobplatform_job_idstatusr   utcnow
started_atcommitr   r   taskr"   r   configjob_idr   r   r   start_sft_training   (   




z"TrainingManager.start_sft_trainingc                    r   )Nr   r   dpor   r   r   r   )r
   r   r   r   r   r    r!   r   r"   r   r   r   r   r   r   r#   r$   r%   r   r&   r'   r(   r)   r   r   r   start_dpo_training%   r.   z"TrainingManager.start_dpo_trainingr   c              	      s   |dkr| j ttj|k }n| j ttj|k }|r'|js)d S t|j	}|
|j}|j|_|j|_|j|_|jdkrZt |_||j}|j|j|jd|_| j   tt|d||j|j|jdI d H  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%   r7   logsr   r&   completed_atget_job_resultr2   r3   r4   resultr(   
ws_manager	broadcaststrr8   )r   r   r   r*   r"   r%   r=   r   r   r   update_task_status=   s4   





z"TrainingManager.update_task_statusc                    s   |dkr| j ttj|k }n| 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%   r(   )r   r   r   r*   r"   successr   r   r   cancel_training`   s   


zTrainingManager.cancel_trainingN)__name__
__module____qualname__r   r   intr-   r0   r@   rA   rE   r   r   r   r   r	   	   s    #r	   N)r   sqlalchemy.ormr   app.models.sft_taskr   app.models.dpo_taskr   app.services.training_platformr   r   app.core.websocket_managerr   r>   r	   r   r   r   r   <module>   s    