o
    "i                     @   s  d Z ddlmZmZmZmZmZ ddlmZ ddl	m
Z
 ddlZddlmZmZ ddlmZmZmZ ddlmZmZ dd	lmZmZmZmZ dd
lmZ ddlmZ ddlm Z  edgdZ!e!j"de
e dddeeeedfde#de#dedefddZ$e!j"dedeeeedfde#dededefddZ%e!j&dedeeeedfdededefddZ'e!j(dedeeeedfde#dedededef
d d!Z)e!*deeeedfde#dededefd"d#Z+e!&d$eeeedfde#d%edededef
d&d'Z,e!"d(eeeedfde#dededefd)d*Z-e!"d+eeeedfde#dededefd,d-Z.e!&d.eeeedfde#dededefd/d0Z/dS )1z
DPO Task API
    )	APIRouterDependsHTTPExceptionRequestBackgroundTasks)Session)ListN)DPOTaskUser)DPOTaskResponseDPOTaskCreateDPOTaskUpdate)get_dbget_current_user)require_readrequire_createrequire_updaterequire_delete)get_translator)TrainingManager)sync_training_status	dpo_tasks)tags/)response_modeld   skiplimitdbcurrent_userc                 C   s4   | ttjdktj|jk| | }|S )zGet all DPO tasksF)queryr	   filter
is_deleted	tenant_idoffsetr   all)r   r   r   r   tasks r'   F/lsinfo/ai/hellotax_ai/training_center/backend/app/api/v1/dpo_tasks.pyget_dpo_tasks   s   

r)   z
/{task_id}task_idrequestc                 C   sN   t |}|ttj| ktjdktj|jk }|s%td|	dd|S )zGet a specific DPO taskF  dpo_task.not_foundstatus_codedetail)
r   r    r	   r!   idr"   r#   firstr   tr*   r+   r   r   r3   taskr'   r'   r(   get_dpo_task#   s   

r6   task_inc                 C   s@   t di |  |j|jd}|| |  || |S )zCreate a new DPO task)r#   
created_byNr'   )r	   
model_dumpr#   r1   addcommitrefresh)r7   r   r   r5   r'   r'   r(   create_dpo_task6   s   


r=   c           	      C   s   t |}|ttj| ktjdktj|jk }|s%td|	dd|j
dd D ]
\}}t||| q-|  || |S )zUpdate a DPO taskFr,   r-   r.   T)exclude_unset)r   r    r	   r!   r1   r"   r#   r2   r   r3   r9   itemssetattrr;   r<   )	r*   r7   r+   r   r   r3   r5   fieldvaluer'   r'   r(   update_dpo_taskH   s   	


rC   c                 C   sf   t |}|ttj| ktjdktj|jk }|s%td|	ddd|_|
  d|	diS )zDelete a DPO taskFr,   r-   r.   Tmessagezdpo_task.deleted)r   r    r	   r!   r1   r"   r#   r2   r   r3   r;   r4   r'   r'   r(   delete_dpo_taskb   s   

rE   z/{task_id}/startbackground_tasksc           	         sx   t |}|ttj| ktj|jk }|s"td|ddt	|}|
| I dH }tt|| d |ddS )zStart DPO trainingr,   r-   r.   NdpozTraining started)job_idrD   )r   r    r	   r!   r1   r#   r2   r   r3   r   start_dpo_trainingasynciocreate_taskr   )	r*   rF   r+   r   r   r3   r5   managerrH   r'   r'   r(   rI   x   s   	


rI   z/{task_id}/statusc                 C   sX   t |}|ttj| ktj|jk }|s!td|dd|j	|j
|j|jdS )zGet DPO training statusr,   r-   r.   )statusprogresslogserror_message)r   r    r	   r!   r1   r#   r2   r   r3   rM   rN   rO   rP   r4   r'   r'   r(   get_dpo_training_status   s   

rQ   z/{task_id}/logsc                 C   sP   t |}|ttj| ktj|jk }|s!td|ddd|j	p&diS )zGet DPO training logsr,   r-   r.   rO    )
r   r    r	   r!   r1   r#   r2   r   r3   rO   r4   r'   r'   r(   get_dpo_training_logs   s   

rS   z/{task_id}/cancelc                    st   t |}|ttj| ktj|jk }|s"td|ddt	|}|
| dI dH }||r6ddS ddS )	zCancel DPO trainingr,   r-   r.   rG   NzTraining cancelledzFailed to cancel)successrD   )r   r    r	   r!   r1   r#   r2   r   r3   r   cancel_training)r*   r+   r   r   r3   r5   rL   rT   r'   r'   r(   cancel_dpo_training   s   

rV   )0__doc__fastapir   r   r   r   r   sqlalchemy.ormr   typingr   rJ   
app.modelsr	   r
   app.schemas.dpo_taskr   r   r   app.api.depsr   r   app.api.permissionsr   r   r   r   app.core.i18nr   app.services.training_managerr   app.services.training_syncr   routergetintr)   r6   postr=   putrC   deleterE   rI   rQ   rS   rV   r'   r'   r'   r(   <module>   s    








