
    i                        d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ  e       ZdZd	ee   d
eee      fdZdefdZej+                  d       e	ddd       e	dd        e	d       e	d       e	dd        e	ddd      fdededee   dee   dee   dee   defd       Zej+                  d       e	d d!"       e	d#      fded$ed%ed&efd'       Zy)(    N)Path)ListOptional)	APIRouterHTTPExceptionQuery)StreamingResponse)get_websocket_manager)encode_file_to_data_urii  @valuereturnc                     | sy | j                  d      D cg c]  }|j                          }}|D cg c]  }|s|	 }}|xs d S c c}w c c}w )N,)splitstrip)r   partpartsfiltereds       D/Users/bowang/.openclaw/workspace/ChatDev/server/routes/artifacts.py
_split_csvr      sV    &+kk#&67&6dTZZ\&6E7!&/$H/t 8/s   AAA
session_idc                     t               }|j                  j                  |       }|st        dd      |j                  }|t        dd      ||fS )N  zSession not foundstatus_codedetailzArtifact stream not available)r
   session_storeget_sessionr   artifact_queue)r   managersessionqueues       r   _get_session_and_queuer#      sY    #%G##//
;G4GHH""E}4STTE>    z*/api/sessions/{session_id}/artifact-eventsg      9@g        g      N@)gele)r%   )gt      d   wait_secondsafterinclude_mimeinclude_extmax_sizelimitc           	      0  K   t        |       \  }}t        |      }	t        |      }
t        j                  |j                  ||	|
|||       d {   \  }}}|D cg c]  }|j                          c}|||j                  |xs dkD  d}|S 7 >c c}w w)N)r,   r-   r.   r/   r0   timeoutr   )eventsnext_cursor	timed_outhas_more)r#   r   asyncio	to_threadwait_for_eventsto_dictlast_sequence)r   r+   r,   r-   r.   r/   r0   r    r"   include_mime_listinclude_ext_listr3   r4   r5   eventpayloads                   r   poll_artifact_eventsr@   #   s      ,J7NGU"<0!+.+2+<+<&$, &"FK 177u5==?7"'';+;!<	G N!& 8s$   ABBBB4BBz2/api/sessions/{session_id}/artifacts/{artifact_id}metaz^(meta|stream)$)patternFartifact_idmodedownloadc           	      @  K   t        |       \  }}|j                  j                  |       }|j                  |      }|st	        dd      |j
                  }|dk(  r|j                  }	|	st	        dd      t        |	      }
|
j                         st	        dd      |j                  xs d}|rdnd	}d
| d|j                   di}t        |
j                  d      ||      S |j                  }|sb|j                  rV|j                  xs dt        k  r?t        |j                        }	|	j                         rt!        |	|j                  xs d      }||j                  |j                  |j                  |j"                  ||j                  |j$                  dS w)Nr   zArtifact not foundr   streamzArtifact content unavailablezArtifact file missingzapplication/octet-stream
attachmentinlinezContent-Dispositionz; filename=""rb)
media_typeheadersr   )rC   name	mime_typesizesha256data_uri
local_pathextra)r#   attachment_serviceget_attachment_storegetr   refrS   r   existsrO   rN   r	   openrR   rP   MAX_FILE_SIZEr   rQ   rT   )r   rC   rD   rE   r    _storerecordrX   rS   pathrL   dispositionrM   rR   s                  r   get_artifactra   D   sm     (
3JGQ&&;;JGEYY{#F4HII
**Cx^^
C8VWWJ{{}C8OPP]]@&@
&.lH([MchhZq*QR 4ZQXYY||HCHHMm+K#..)
.z3==;fLfgH"]]**nn	 	s   FF)r7   pathlibr   typingr   r   fastapir   r   r   fastapi.responsesr	   server.stater
   utils.attachmentsr   routerr[   strr   r#   rW   floatintr@   boolra    r$   r   <module>rn      sY     ! 3 3 / . 5	 hsm c(; s  89  6 !,"'+!&t#DQ/raC( C= 3-	
 # sm  :@ @A f&785\	''' ' 	' B'r$   