
    ]i	                        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
  ed      Z G d d	e      Z G d
 de      Zej                  d      defd       Zej                  d      defd       Zej                  d      defd       Zy)    )	APIRouterHTTPExceptionStreamingResponse)	BaseModel)Optional)TaskManagerz/api/v1/tasks)prefixc                   `    e Zd ZU eed<   eed<   eed<   ee   ed<   eed<   eed<   ee   ed<   y)	TaskStatusResponsetask_idstatusprogresscurrent_stage
created_at
updated_atcompleted_atN)__name__
__module____qualname__str__annotations__intr        9/home/jang/Projects/ai-researcher/src/api/routes/tasks.pyr   r      s/    LKMC= OO3-r   r   c                   B    e Zd ZU eed<   eed<   ee   ed<   ee   ed<   y)TaskResultResponser   r   resulterrorN)r   r   r   r   r   r   dictr   r   r   r   r      s     LKTND>r   r   z
/{task_id}r   c           
        K   t               }|j                  |        d {   }|st        dd      t        |j                  |j
                  |j
                  dk(  rdnd|j
                  |j                  r|j                  j                         nd|j                  r|j                  j                         nd|j                  r|j                  j                               S d       S 7 ˭w)	N  Task not foundstatus_codedetail	completedd   r    )r   r   r   r   r   r   r   )
r	   get_taskr   r   idr   r   	isoformatr   r   r   task_managertasks      r   get_task_statusr1      s     =L&&w//D4DEE{{{2kk26//4??,,.r26//4??,,.r6:6G6GT&&002  NR  0s   C/C-CC/z/{task_id}/resultc                 r  K   t               }|j                  |        d {   }|st        dd      |j                  dk(  r-t	        |j
                  |j                  d |j                        S t	        |j
                  |j                  d|j
                   ddd	d
|j
                   dd       S 7 w)Nr#   r$   r%   failed)r   r   r   r    msg_textu   任务结果)typer5   trace_)
message_idcontenttrace_id)r	   r+   r   r   r   r,   r    r.   s      r   get_task_resultr;   -   s     =L&&w//D4DEE{{h!$''$++dZ^ZdZdee{{ $TWWI.FTb;csyz~  {B  {B  zC  rD  E	  0s   B7B5BB7z/{task_id}/streamc                 :    K    fd}t         |       d      S w)Nc                    K   dd l } dd l}dddddddd	i d
g}|D ]9  }d|d    d|j                  |       d | j                  d       d {    ; y 7 w)Nr   started   )r6   r   estimated_secondsr   
processing2   )r6   stager   r(   )r6   r   r   zevent: r6   z
data: z

g?)asynciojsondumpssleep)rD   rE   eventseventr   s       r   event_generatorz-stream_task_progress.<locals>.event_generator?   s{     7K,BG WC

  	%EE&M?(4::e3D2ETJJ--$$$	%$s   AAAAztext/event-stream)
media_typer   )r   rJ   s   ` r   stream_task_progressrL   =   s     
% _.;NOOs   N)fastapir   r   fastapi.responsesr   pydanticr   typingr   src.core.task_managerr	   routerr   r   getr   r1   r;   rL   r   r   r   <module>rT      s    , /   -	/	*     L3     3  !  P P !Pr   