
    Ti                     |    d dl Z d dlmZmZmZ d dlmZ d dlmZmZ e G d d             Z	 G d d      Z
 e
       Zy)	    N)DictAnyOptional)	dataclass)datetime	timedeltac                   ^    e Zd ZU eed<   eed<   eed<   eeef   ed<   eed<   dZe	e
   ed<   y)ToolConfirmationRequesttool_call_id
session_id	tool_name	arguments
created_atN	confirmed)__name__
__module____qualname__str__annotations__r   r   r   r   r   bool     \/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/services/tool_confirmation_manager.pyr
   r
      s4    ONCH~ $Ix~$r   r
   c            
           e Zd ZdZd Zdedededeeef   def
dZ	defd	Z
dedefd
ZdedefdZdedee   fdZd Zy)ToolConfirmationManageru   工具确认管理器c                 4    i | _         t        d      | _        y )N   )minutes)pending_confirmationsr   confirmation_timeout)selfs    r   __init__z ToolConfirmationManager.__init__   s    IK"$-a$8!r   r   r   r   r   returnc                 n  K   t        ||||t        j                               }|| j                  |<   	 t	        j
                  | j                  |      | j                  j                                d{    |j                  du S 7 # t        j                  $ r | j                  |       Y yw xY ww)u*   请求工具确认，返回是否已确认)r   r   r   r   r   )timeoutNTF)r
   r   nowr   asynciowait_for_wait_for_confirmationr    total_secondsr   TimeoutErrorcancel_confirmation)r!   r   r   r   r   requests         r   request_confirmationz,ToolConfirmationManager.request_confirmation   s     )%!||~
 4;""<0		""++L911??A   $$,,	
 ## 	$$\2	s;   2B5AB 6B	7B B5	B $B2/B51B22B5c                    K   || j                   v rI| j                   |   }|j                  yt        j                  d       d{    || j                   v rHyy7 w)u   等待确认Ng?)r   r   r'   sleep)r!   r   r-   s      r   r)   z.ToolConfirmationManager._wait_for_confirmation0   sZ     d88800>G  ,--$$$	 d888 %s   AAAAAc                 J    || j                   v rd| j                   |   _        yy)u   确认工具调用TFr   r   r!   r   s     r   confirm_toolz$ToolConfirmationManager.confirm_tool8   s)    4555AED&&|4>r   c                 J    || j                   v rd| j                   |   _        yy)u   取消工具调用FTr2   r3   s     r   r,   z+ToolConfirmationManager.cancel_confirmation?   s)    4555AFD&&|4>r   c                 8    | j                   j                  |      S )u   获取待确认的请求)r   getr3   s     r   get_pending_requestz+ToolConfirmationManager.get_pending_requestF   s    ))--l;;r   c                     t        j                         }| j                  j                         D cg c]#  \  }}||j                  z
  | j
                  kD  r|% }}}|D ]  }| j                  |=  yc c}}w )u   清理过期的确认请求N)r   r&   r   itemsr   r    )r!   r&   r   r-   expired_idss        r   cleanup_expiredz'ToolConfirmationManager.cleanup_expiredJ   sz    lln6:6P6P6V6V6X
2\7W'''$*C*CC 
 
 ( 	9L**<8	9	
s   (A2N)r   r   r   __doc__r"   r   r   r   r   r.   r)   r4   r,   r   r
   r8   r<   r   r   r   r   r      s    9s  X[ hlmprumuhv { 0% %    < <AX8Y <9r   r   )r'   typingr   r   r   dataclassesr   r   r   r
   r   tool_confirmation_managerr   r   r   <module>rA      sE     & & ! ( % % %A9 A9J 45 r   