
    iV              	          d Z ddlmZmZmZ ddlmZmZmZm	Z	m
Z
mZ 	 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mZmZmZmZmZmZmZm Z  d
dl!m"Z" d
dl#m$Z$ d
dl%m&Z& ddl'm(Z( g dZ)g dZ*g dZ+dddede,de-de-fdZ.d
ddede,de/de/fdZ0dede,de	e,   fdZ1dede,de	e/   fdZ2e G d de             Z3e G d de             Z4y# e$ r dZY w xY w) z)Agent-specific configuration dataclasses.    )	dataclassfieldreplace)AnyDictIterableListMappingSequence)BaseExceptionGroupN)AgentInputMode)iter_model_provider_schemas)titleize)

BaseConfigConfigErrorConfigFieldSpec
EnumOptionoptional_booloptional_dictoptional_strrequire_mappingrequire_strextend_path   )MemoryAttachmentConfig)AgentSkillsConfig)ThinkingConfig)ToolingConfig)i  i  i  i  i  i  i  i  )RateLimitErrorAPITimeoutErrorAPIErrorAPIConnectionErrorServiceUnavailableErrorTimeoutErrorInternalServerErrorRemoteProtocolErrorTransportErrorConnectErrorConnectTimeout	ReadErrorReadTimeout)z
rate limitztemporarily unavailabletimeoutzserver disconnectedzconnection reset        )minimumvalue
field_pathr.   returnc                    t        | t        t        f      rt        |       }nt        d|      ||k  rt        d| |      |S )Nzexpected numbervalue must be >= )
isinstanceintfloatr   r/   r0   r.   coerceds       F/Users/bowang/.openclaw/workspace/ChatDev/entity/configs/node/agent.py_coerce_floatr:   :   sI    %#u&,+Z88-gY7DDN    c                    t        | t              rt        d|      t        | t              r| }nt        d|      ||k  rt        d| |      |S )Nzexpected integerr3   )r4   boolr   r5   r7   s       r9   _coerce_positive_intr>   D   sY    %,j99%,j99-gY7DDNr;   c                   | g S t        | t              rt        | t        t        f      rt	        d|      g }t        |       D ]F  \  }}t        |t              st	        d| d| d      |j                  |j                                H |S )Nzexpected list of strings[])r4   r   strbytesr   	enumerateappendstrip)r/   r0   resultidxitems        r9   _coerce_str_listrJ   P   s    }	eX&*US%L*I4jAAFu%	T$$8ZL#a:PQQdjjl# & Mr;   c                "   | g S t        | t              rt        | t        t        f      rt	        d|      g }t        |       D ]H  \  }}t        |t              st        |t              st	        d| d| d      |j                  |       J |S )Nzexpected list of integersr@   rA   )	r4   r   rB   rC   r   rD   r=   r5   rE   )r/   r0   intsrH   rI   s        r9   _coerce_int_listrM   ]   s    }	eX&*US%L*I5zBBDu%	TdD!D#)>9j\3%q;QRRD & Kr;   c                   >   e Zd ZU dZeed<   dZeed<   dZe	ed<   dZ
e	ed<    ed	 
      Zee   ed<    ed 
      Zee   ed<    ee
      Zee   ed<    ed 
      Zee   ed<    edddddd       edddddd       eddddddd       eddddddd       eddd dd!d"       edd#d$dd%d"       edd&d$dd'd"       edd(d$dd)d"      d*Zed+eeef   d,ed-d fd.       Zed-efd/       Zd0ed-efd1Zd0ed-ee   fd2Zd0ed-ed3z  fd4Zd0ed-e e   fd5Z!y3)6AgentRetryConfigTenabled   max_attempts      ?min_wait_seconds      @max_wait_secondsc                       t        t              S N)listDEFAULT_RETRYABLE_STATUS_CODES r;   r9   <lambda>zAgentRetryConfig.<lambda>p   s
    TJhEir;   default_factoryretry_on_status_codesc                  P    t         D  cg c]  } | j                          c} S c c} w rX   )!DEFAULT_RETRYABLE_EXCEPTION_TYPESlower)names    r9   r\   zAgentRetryConfig.<lambda>q   s8      cD  IE  cDZ^  cD  IE  IEs   #retry_on_exception_typesnon_retry_exception_typesc                       t        t              S rX   )rY   $DEFAULT_RETRYABLE_MESSAGE_SUBSTRINGSr[   r;   r9   r\   zAgentRetryConfig.<lambda>s   s
    NrIsr;   retry_on_error_substringszEnable Retryr=   Fz)Toggle automatic retry for provider calls)rc   display_name	type_hintrequireddefaultdescriptionzMax Attemptsr5   z9Maximum number of total attempts (initial call + retries)zMin Wait Secondsr6   z!Minimum backoff wait before retryrc   ri   rj   rk   rl   rm   advancezMax Wait Secondsz!Maximum backoff wait before retryzRetryable Status Codesz	list[int]z-HTTP status codes that should trigger a retry)rc   ri   rj   rk   rm   ro   zRetryable Exception Typesz	list[str]zDException class names (case-insensitive) that should trigger retrieszNon-Retryable Exception Typesz@Exception class names (case-insensitive) that should never retryzRetryable Message Substringsz=Substring matches within exception messages that enable retry)rP   rR   rT   rV   r_   rd   re   rh   datapathr1   c                ,   t        ||      }t        |d|d      }|d}t        |j                  dd      t	        |d            }t        |j                  dd      t	        |d      d	
      }t        |j                  dd      t	        |d      d	
      }||k  rt        dt	        |d            |j                  d      }|t        t              }	nt        |t	        |d            }	|j                  d      }
|
"t        D cg c]  }|j                          }}n5t        |
t	        |d            D cg c]  }|s|j                          }}t        |j                  d      t	        |d            D cg c]  }|s|j                          }}|j                  d      }|t        t              }n4t        |t	        |d            D cg c]  }|r|j                          }} | |||||	||||	      S c c}w c c}w c c}w c c}w )NrP   T)rl   rR   rQ   )r0   rT   rS   r-   )r0   r.   rV   rU   z,max_wait_seconds must be >= min_wait_secondsr_   rd   re   rh   )	rP   rR   rT   rV   r_   rd   re   rh   rq   )r   r   r>   getr   r:   r   rY   rZ   rM   ra   rb   rJ   rg   )clsrp   rq   mappingrP   rR   min_waitmax_waitstatus_codesretry_status_codesretry_types_rawrc   retry_typesr/   non_retry_typesretry_substrings_rawretry_substringss                    r9   	from_dictzAgentRetryConfig.from_dict   sw   !$-D$G?G+GKK,JWbcgiwWxy -?!ER]^bdvRw  BE  F -?!ER]^bdvRw  BE  FhLkZ^`rNstt{{#:;!%&D!E!1,;W[]tKu!v!++&@A"4UV4UD4::<4UKV6Fcnos  vP  dQ  7R  \  7RU  V[5;;=  7RK  \6Fw{{SnGo  }H  IM  Oj  }k  7l  v  7lU  pu5;;=  7l  v&{{+FG'#$HI .(*41LM E      %%%"4%0&5&6

 
	
' W \ v s$   H:HH>HHHc                 <    | j                   xr | j                  dkD  S )Nr   )rP   rR   )selfs    r9   	is_activezAgentRetryConfig.is_active   s    ||5 1 1A 55r;   excc           	         | j                   syg }| j                  |      D ]L  }|j                  || j                  |      | j	                  |      t        |      j                         f       N | j                  r,|D ]'  \  }}}t        fd| j                  D              s' y | j                  r,|D ]'  \  }}}t        fd| j                  D              s' y | j                  r|D ]  \  }}}}||| j                  v s y | j                  r/|D ]*  \  }}}st        fd| j                  D              s* y y)NFc              3   &   K   | ]  }|v  
 y wrX   r[   .0rc   namess     r9   	<genexpr>z0AgentRetryConfig.should_retry.<locals>.<genexpr>  s     P1Otu}1O   c              3   &   K   | ]  }|v  
 y wrX   r[   r   s     r9   r   z0AgentRetryConfig.should_retry.<locals>.<genexpr>  s     O1Ntu}1Nr   Tc              3   &   K   | ]  }|v  
 y wrX   r[   )r   substrmessages     r9   r   z0AgentRetryConfig.should_retry.<locals>.<genexpr>  s     "bCa6W#4Car   )r   _iter_exception_chainrE   _exception_name_set_extract_status_coderB   rb   re   anyrd   r_   rh   )r   r   chainerror_status_coder   r   s         @@r9   should_retryzAgentRetryConfig.should_retry   s?   ~~GI//4ELL,,U3--e4J$$&	 5 ))"'5!QP1O1OPP  #( (("'5!QO1N1NOO #( %%(-$1k1*{d>X>X/X ). ))$) 1as"b4CaCa"bb %* r;   c                    t               }|j                  j                         D ]c  }|j                  |j                  j                                |j                  |j                   d|j                   j                                e |S )N.)set	__class__mroadd__name__rb   
__module__)r   r   r   rt   s       r9   r   z$AgentRetryConfig._exception_name_set  si    %==$$&CIIcll((*+II(#,,8>>@A ' r;   Nc                     dD ]#  }t        ||d       }t        |t              s!|c S  t        |dd       }|(dD ]#  }t        ||d       }t        |t              s!|c S  y )N)r   http_statusstatus
statusCoderesponse)r   r   r   )getattrr4   r5   )r   r   attrr/   r   s        r9   r   z%AgentRetryConfig._extract_status_code  sm    JDCt,E%% K 3
D1?$5eS) L @ r;   c              #   $  K   t               }|g}|r|j                         }t        |      |v r |j                  t        |             | g }t	        |dd       }t	        |dd       }t        |t              r|j                  |       t        |t              r|j                  |       t        Ht        |t              r8t	        |dd       xs dD ]$  }t        |t              s|j                  |       & |j                  |       |ry y w)N	__cause____context__
exceptionsr[   )
r   popidr   r   r4   BaseExceptionrE   _BASE_EXCEPTION_GROUP_TYPEextend)	r   r   seenstackcurrentlinkedcausecontextexc_items	            r9   r   z&AgentRetryConfig._iter_exception_chain*  s     &)UiikG'{d"HHR[!M*,FG[$7Eg}d;G%/e$'=1g&)5*WNh:i 't D J JH!(M:h/ !K LL % s   C$D'&DD)"r   r   __qualname__rP   r=   __annotations__rR   r5   rT   r6   rV   r   r_   r	   rd   rB   rY   re   rh   r   FIELD_SPECSclassmethodr
   r   r   propertyr   r   r   r   r   r   r   r   r[   r;   r9   rO   rO   j   s"   GTL#!e!!e!',=i'j49j*/  AE  +Fd3i  F+0+FtCyF+0As+ttCyt #'C
 ('S
 ,#+;
 ,#+;
 "1(1!G"
 %4+4!^%
 &5,8!Z&
 &5,7!W&
wCKJ 0
WS#X. 0
 0
AS 0
 0
d 64 6 6# #$ #J} S  #* ! !8M;R !r;   rO   c                   `    e Zd ZU eed<   eed<   eed<   dZedz  ed<   dZedz  ed<    ee      Z	e
eef   ed<   dZedz  ed	<   ej                  Zeed
<    ee      Zee   ed<   dZedz  ed<    ee      Zee   ed<   dZedz  ed<    eddd      Zedz  ed<    eddd      Zedz  ed<   edeeef   dedd fd       Z e ddddd       e ddddd       e ddddd d!"       e dd#ddd$dd%&       e dd'ddd(dd)&       e dd*d+di d,d-       e dd.d/dd0ed1       e dd2d3dd4ed1       e dd5d6dd7ed1       e dd8d9dd:ed1       e d	d;d<dd=ed1      d>Z!ede
ee f   f fd?       Z"e#d@e de fdA       Z$e#dBee   defdC       Z%e#de&ee   e
ee
eef   f   f   fdD       Z' xZ(S )EAgentConfigproviderbase_urlrc   Nroleapi_keyr]   paramsretry
input_modetoolingthinkingmemoriesskillsF)rl   initreprtoken_trackernode_idrp   rq   r1   c                j   t        ||      }t        |d|      }t        |d|      }|j                  d      }t	        |t
              r!|j                         r|j                         }nt        dt        |d            t        |d|      }t        |d|      }	t        |d|      xs i }
t        |d|      }t        j                  }|r(	 t        |j                         j                               }g }d
|v rw|d
   r|d
   }t	        |t              st        dt        |d
            t        |      D ]9  \  }}|j!                  t#        j$                  |t        |d| d                   ; d }d|v r)|d   $t'        j$                  |d   t        |d            }g }d|v rw|d   r|d   }t	        |t              st        dt        |d            t        |      D ]9  \  }}|j!                  t)        j$                  |t        |d| d                   ; d }d|v r)|d   $t*        j%                  |d   t        |d            }d }d|v r)|d   $t-        j$                  |d   t        |d            } | |||||	|
|||||||      S # t        $ r}t        d	t        |d            |d }~ww xY w)Nr   r   rc   z%model.name must be a non-empty stringr   r   r   r   z/model.input_mode must be 'prompt' or 'messages'r   ztooling must be a listztooling[rA   )rq   r   r   zmemories must be a listz	memories[r   r   )r   r   rc   r   r   r   r   r   r   r   r   r   rq   )r   r   r   rs   r4   rB   rF   r   r   r   r   MESSAGESrb   
ValueErrorrY   rD   rE   r   r   r   r   rO   r   )rt   rp   rq   ru   r   r   
name_value
model_namer   r   r   raw_input_moder   r   tooling_cfgraw_toolingrH   rI   thinking_cfgmemories_cfgraw_memories	retry_cfg
skills_cfgs                          r9   r   zAgentConfig.from_dictU  s   !$-w
D9T:[[(
j#&:+;+;+=#))+JE{SWY_G`aaGVT2w	48w$7=2%g|TB#,,
+N,@,@,B,H,H,JK
 ,.GI$6$B!),Kk40"#;[y=YZZ&{3	T""!++D{48TWSXXYIZ7[\ 4
  WZ%8%D)33GJ4GkZ^`jNklL57 WZ%8%D":.LlD1!";[z=Z[[&|4	T##*44TDT]^a]bbcRd@ef 5
 	g''"2">(22773C+VZ\cJd2eI
w78#4#@*44WX5F[Y]_gMhiJ!!!
 	
M  !El3 s   
'J 	J2J--J2z
Model NamerB   TzSpecific model name e.g. gpt-4o)rc   ri   rj   rk   rm   zSystem PrompttextzModel system promptzModel Providerz`Name of a registered provider (openai, gemini, etc.) that selects the underlying client adapter.openai)rc   ri   rj   rk   rm   rl   zBase URLzSOverride the provider's default endpoint; leave empty to use the built-in base URL.z${BASE_URL})rc   ri   rj   rk   rm   ro   rl   zAPI KeyzwCredential consumed by the provider client; reference an env var such as ${API_KEY} that matches the selected provider.z
${API_KEY}zCall Parameterszdict[str, Any]z*Call parameters (temperature, top_p, etc.)rn   zTool Configurationzlist[ToolingConfig]zBound tool configuration list)rc   ri   rj   rk   rm   childro   zThinking Configurationr   zThinking process configurationzMemory Attachmentszlist[MemoryAttachmentConfig]zAssociated memory referenceszAgent Skillsr   zEAgent Skills allowlist and built-in skill activation/file-read tools.zRetry PolicyrO   z%Automatic retry policy for this model)rc   r   r   r   r   r   r   r   r   r   r   c                 v    t         |          }|j                  d      }|r| j                  |      }||d<   |S )Nr   )superfield_specsrs   _apply_provider_enum)rt   specsprovider_spec	enum_specr   s       r9   r   zAgentConfig.field_specs
  s@    #%		*-00?I )E*r;   r   c           
      t   t         j                         \  }}|s| S g }|D ]a  }|j                  |      xs i }|j                  d      xs t        |      }|j	                  t        |||j                  d                   c | j                  }|r||vrt         j                  |      }t        | |||      S )Nlabelsummary)r/   r   rm   )enumenum_optionsrl   )	r   _provider_registry_snapshotrs   r   rE   r   rl   _preferred_provider_defaultr   )r   provider_namesmetadatar   rc   metar   default_values           r9   r   z AgentConfig._apply_provider_enum  s    #.#J#J#L   )+"D<<%+DHHW%7$E $ 3 # &--^ C'CCNSM%!	
 	
r;   r   c                     d| v ry| d   S )Nr   r   r[   )r   s    r9   r   z'AgentConfig._preferred_provider_default0  s    ~%a  r;   c                      t               } t        | j                               }i }| j                         D ]1  \  }}|j                  |j
                  d|j                  xs i ||<   3 ||fS )N)r   r   )r   rY   keysitemsr   r   r   )r   r   r   rc   specs        r9   r   z'AgentConfig._provider_registry_snapshot6  sk    +-UZZ\".0++-JD$<< ==&BHTN ( hr;   ))r   r   r   rB   r   r   r   r   dictr   r   r   r   rO   r   r   r   rY   r   r	   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   staticmethodr   r   tupler   __classcell__)r   s   @r9   r   r   B  s   MM
ID#*GS4Z"48FDcN8%)Ed")!/!8!8J8#(#>GT- >&*Hnt#*-24-HHd)*H'+F$+ !&dU KM3:K5uEGS4ZEF
WS#X. F
 F
 F
 F
R  %9
  (-
 $)z
 $#m!
 #" R 
 "*&D
( #-+7
 $1&8 
 $-46(
 "')_#
 !'(?"
CjKX Do!56   
O 
 
 
8 !DI !# ! !
 
tCy$sDcN?R:S/S)T 
 
r;   r   )5__doc__dataclassesr   r   r   typingr   r   r   r	   r
   r   builtinsr   r   ImportErrorentity.enumsr   schema_registryr   
utils.strsr   entity.configs.baser   r   r   r   r   r   r   r   r   r   memoryr   r   r   r   r   entity.configs.node.toolingr   rZ   ra   rg   rB   r6   r:   r5   r>   rJ   rM   rO   r   r[   r;   r9   <module>r     s>   / 1 1 ? ?&I ( 7    + % $ 5 "J % !( $ DG  S 5 5  IJ 	 	C 	# 	c 	
C 
 
S	 

C 
 
S	 
 T!z T! T!n ~* ~ ~w	  &!%&s   C CC