
    OKi                      S r SSKJr  SSKrSSKJrJr  SSKJrJ	r	J
r
JrJrJrJrJr  SSKJr  SSKJrJrJrJr  SSKJr  SS	KJr  SS
KJrJr  SSKJr  SSK J!r!J"r"  SSK#J$r$J%r%  SSK&J'r'J(r(J)r)  SSK*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6  SSK7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@  SSKAJBrB  \ " S S\\3   5      5       rC\(       a  SSKDJErEJFrFJGrG  SSKHJIrIJJrJ  SSKKJLrL  SSKJMrM  SSKNJOrO  SSKPJQrQ  SSK#JRrR  SSK*JSrSJTrT  \F\0\-   \F\0\-   /\14   /\1\-  \.-  4   rU\F\0\-   \F\0\-   /\14   /\C4   rV\F\0\-   \F\0\-   /\E\1   4   /\E\1\-  \.-     4   rW\F\0\-   \F\0\-   /\E\1   4   /\E\C   4   rXSrYSR                  5       r[/ SQr\    S5S jr] S6     S7S  jjr^    S8S! jr_    S9S" jr`S6S:S# jjraS;S$ jrbS<S% jrc S6     S=S& jjrd      S>S' jre    S?S( jrf    S@S) jrg S6SS*SSSSSSSS+SSS,.                             SAS- jjjrh        SBS. jri    SCS/ jrj        SDS0 jrk      SES1 jrl          SFS2 jrm              SGS3 jrnS4/rog)Hz:Agent factory for creating agents with middleware support.    )annotationsN)	dataclassfield)TYPE_CHECKING	AnnotatedAnyGenericcastget_args
get_originget_type_hints)BaseChatModel)	AIMessage
AnyMessageSystemMessageToolMessage)BaseTool)RunnableCallable)ENDSTART)
StateGraph)ToolCallWithContextToolNode)CommandSend)NotRequiredRequired	TypedDict)AgentMiddleware
AgentStateContextTExtendedModelResponseJumpToModelRequestModelResponseOmitFromSchema	ResponseT	StateT_co_InputAgentState_OutputAgentState)	AutoStrategyMultipleStructuredOutputsErrorOutputToolBindingProviderStrategyProviderStrategyBindingResponseFormatStructuredOutputErrorStructuredOutputValidationErrorToolStrategy)init_chat_modelc                  <    \ rS rSr% SrS\S'    \" \S9rS\S'   Sr	g	)
_ComposedExtendedModelResponse8   zInternal result from composed ``wrap_model_call`` middleware.

Unlike ``ExtendedModelResponse`` (user-facing, single command), this holds the
full list of commands accumulated across all middleware layers during
composition.
zModelResponse[ResponseT]model_response)default_factorylist[Command[Any]]commands N)
__name__
__module____qualname____firstlineno____doc____annotations__r   listr;   __static_attributes__r<       Z/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/langchain/agents/factory.pyr6   r6   8   s%     -,(#(#>H >TrE   r6   )	AwaitableCallableSequence)RunnableRunnableConfig)	BaseCache)CompiledStateGraph)Runtime)	BaseStore)Checkpointer)ToolCallRequestToolCallWrapperz)Error: {error}
 Please fix your mistakes.a  
Middleware added tools that the agent doesn't know how to execute.

Unknown tools: {unknown_tool_names}
Registered tools: {available_tool_names}

This happens when middleware modifies `request.tools` in `wrap_model_call` to include
tools that weren't passed to `create_agent()`.

How to fix this:

Option 1: Register tools at agent creation (recommended for most cases)
    Pass the tools to `create_agent(tools=[...])` or set them on `middleware.tools`.
    This makes tools available for every agent invocation.

Option 2: Handle dynamic tools in middleware (for tools created at runtime)
    Implement `wrap_tool_call` to execute tools that are added dynamically:

    class MyMiddleware(AgentMiddleware):
        def wrap_tool_call(self, request, handler):
            if request.tool_call["name"] == "dynamic_tool":
                # Execute the dynamic tool yourself or override with tool instance
                return handler(request.override(tool=my_dynamic_tool))
            return handler(request)
)grokzgpt-5zgpt-4.1zgpt-4ozgpt-osszo3-prozo3-minic                    [        U [        5      (       a  [        U /SS9$ [        U [        5      (       a  U R                  $ U $ )zNormalize middleware return value to ModelResponse.

At inner composition boundaries, ``ExtendedModelResponse`` is unwrapped to its
underlying ``ModelResponse`` so that inner middleware always sees ``ModelResponse``
from the handler.
Nresultstructured_response)
isinstancer   r%   r"   r8   )rV   s    rF   _normalize_to_model_responserY      s?     &)$$VH$GG&/00$$$MrE   c                z   SU R                   0nU R                  b  U R                  US'   U=(       d    /  H]  nUR                  (       a  Sn[        U5      eUR                  (       a  Sn[        U5      eUR
                  (       d  MR  Sn[        U5      e   [        US9/nUR                  U=(       d    / 5        U$ )a  Build a list of Commands from a model response and middleware commands.

The first Command contains the model response state (messages and optional
structured_response). Middleware commands are appended as-is.

Args:
    model_response: The model response containing messages and optional
        structured output.
    middleware_commands: Commands accumulated from middleware layers during
        composition (inner-first ordering).

Returns:
    List of ``Command`` objects ready to be returned from a model node.
messagesrW   zCommand goto is not yet supported in wrap_model_call middleware. Use the jump_to state field with before_model/after_model hooks instead.zBCommand resume is not yet supported in wrap_model_call middleware.zACommand graph is not yet supported in wrap_model_call middleware.)update)rV   rW   gotoNotImplementedErrorresumegraphr   extend)r8   middleware_commandsstatecmdmsgr;   s         rF   _build_commandsrf      s    $ ()>)>?E))5'5'I'I#$"(b(88[  &c**::VC%c**999UC%c** ) %,5$9#:HOO'-2.OrE   c                   ^^ U (       d  g S	     S
S jjm[        U 5      S:X  a  U S   m      SUU4S jjnU$       SU4S jjnU" U S   U S   5      n[        U SS 5       H  nU" XC5      nM     U$ )a  Compose multiple ``wrap_model_call`` handlers into single middleware stack.

Composes handlers so first in list becomes outermost layer. Each handler receives a
handler callback to execute inner layers. Commands from each layer are accumulated
into a list (inner-first, then outer) without merging.

Args:
    handlers: List of handlers.

        First handler wraps all others.

Returns:
    Composed handler returning ``_ComposedExtendedModelResponse``,
    or ``None`` if handlers empty.
Nc                `   [        U=(       d    / 5      n[        U [        5      (       a(  UR                  U R                  5        U R
                  nOU[        U [        5      (       a5  U R
                  nU R                  b  UR                  U R                  5        O[        U 5      n[        X2S9$ z?Normalize any handler result to _ComposedExtendedModelResponse.)r8   r;   
rC   rX   r6   ra   r;   r8   r"   commandappendrY   rV   extra_commandsr;   r8   s       rF   _to_composed_result7_chain_model_call_handlers.<locals>._to_composed_result       
 (,N,@b'Af<==OOFOO,#22N 566#22N~~)/9&AN-^__rE      r   c                    > T" T" X5      5      $ Nr<   requesthandlerro   single_handlers     rF   normalized_single5_chain_model_call_handlers.<locals>.normalized_single   s     '~g'GHHrE   c                ,   >^ ^       SUUU 4S jjnU$ )z-Compose two handlers where outer wraps inner.c                P   >^^ / mSUUU4S jjnT" X5      nT" UT=(       d    S S9$ )Nc                V  > TR                  5         T" U T5      n[        U[        5      (       a'  TR                  UR                  5        UR
                  $ [        U[        5      (       a4  UR                  b  TR                  UR                  5        UR
                  $ [        U5      $ rt   
clearrX   r6   ra   r;   r8   r"   rk   rl   rY   reqinner_resultaccumulated_commandsrw   inners     rF   inner_handlerX_chain_model_call_handlers.<locals>.compose_two.<locals>.composed.<locals>.inner_handler  s    $**,$S'2l,JKK(//0E0EF'666l,ABB#++7,33L4H4HI'6663LAArE   rn   r   ModelRequest[ContextT]returnr%   r<   rv   rw   r   outer_resultr   ro   r   outers    `  @rF   composedA_chain_model_call_handlers.<locals>.compose_two.<locals>.composed  s;    
 8: B B !8L&3;t rE   rv   r   rw   z1Callable[[ModelRequest[ContextT]], ModelResponse]r   r6   r<   r   r   r   ro   s   `` rF   compose_two/_chain_model_call_handlers.<locals>.compose_two   s.    	+	F	 ,	 	4 rE   rt   rV   zRModelResponse | AIMessage | ExtendedModelResponse | _ComposedExtendedModelResponsern   list[Command[Any]] | Noner   r6   r   )r   A_ModelCallHandler[ContextT] | _ComposedModelCallHandler[ContextT]r   r   r   z#_ComposedModelCallHandler[ContextT]lenreversedhandlersry   r   composed_handlerhro   rx   s        @@rF   _chain_model_call_handlersr      s    $  59`b`1` 
(`$ 8}!!	I+	IF	I ,	I 	I !  P P  
- F #8B<">hsm$&q; % rE   c                   ^^ U (       d  g S	     S
S jjm[        U 5      S:X  a  U S   m      SUU4S jjnU$       SU4S jjnU" U S   U S   5      n[        U SS 5       H  nU" XC5      nM     U$ )a  Compose multiple async ``wrap_model_call`` handlers into single middleware stack.

Commands from each layer are accumulated into a list (inner-first, then outer)
without merging.

Args:
    handlers: List of async handlers.

        First handler wraps all others.

Returns:
    Composed async handler returning ``_ComposedExtendedModelResponse``,
    or ``None`` if handlers empty.
Nc                `   [        U=(       d    / 5      n[        U [        5      (       a(  UR                  U R                  5        U R
                  nOU[        U [        5      (       a5  U R
                  nU R                  b  UR                  U R                  5        O[        U 5      n[        X2S9$ ri   rj   rm   s       rF   ro   =_chain_async_model_call_handlers.<locals>._to_composed_result<  rq   rE   rr   r   c                <   >#    T" T" X5      I S h  vN 5      $  N7frt   r<   ru   s     rF   ry   ;_chain_async_model_call_handlers.<locals>.normalized_singleQ  s      '^G-M'MNN'Ms   	c                ,   >^ ^       SUUU 4S jjnU$ )z3Compose two async handlers where outer wraps inner.c                l   >^^#    / mSUUU4S jjnT" X5      I S h  vN nT" UT=(       d    S S9$  N7f)Nc                r  >#    TR                  5         T" U T5      I S h  vN n[        U[        5      (       a'  TR                  UR                  5        UR
                  $ [        U[        5      (       a4  UR                  b  TR                  UR                  5        UR
                  $ [        U5      $  N7frt   r~   r   s     rF   r   ^_chain_async_model_call_handlers.<locals>.compose_two.<locals>.composed.<locals>.inner_handlerf  s     $**,%*3%88l,JKK(//0E0EF'666l,ABB#++7,33L4H4HI'6663LAA  9s   B7B5BB7r   r   r<   r   s    `  @rF   r   G_chain_async_model_call_handlers.<locals>.compose_two.<locals>.composed_  sF     
 8: B B "'w!>>L&3;t  ?s   424rv   r   rw   z<Callable[[ModelRequest[ContextT]], Awaitable[ModelResponse]]r   r6   r<   r   s   `` rF   r   5_chain_async_model_call_handlers.<locals>.compose_twoY  s.    	+	Q	 ,	 	4 rE   r   r   rt   r   r   )r   K_AsyncModelCallHandler[ContextT] | _ComposedAsyncModelCallHandler[ContextT]r   r   r   z(_ComposedAsyncModelCallHandler[ContextT]r   r   s        @@rF    _chain_async_model_call_handlersr   (  s    "  59`b`1` 
(`$ 8}!!	O+	OQ	O ,	O 	O !  Z Z  
2 F #8B<">hsm$&q; % rE   c                   0 nU  Hy  n[        USS9nUR                  5        HX  u  pgSnU(       a=  [        U5      n	U	 H,  n
[        U
[        5      (       d  M  [        X5      SL d  M*  Sn  O   U(       a  MT  XsU'   MZ     M{     [        X5      $ )aI  Resolve schema by merging schemas and optionally respecting `OmitFromSchema` annotations.

Args:
    schemas: List of schema types to merge
    schema_name: Name for the generated `TypedDict`
    omit_flag: If specified, omit fields with this flag set (`'input'` or
        `'output'`)

Returns:
    Merged schema as `TypedDict`
T)include_extrasF)r   items_extract_metadatarX   r&   getattrr   )schemasschema_name	omit_flagall_annotationsschemahints
field_name
field_typeshould_omitmetadatametas              rF   _resolve_schemar     s     Ovd;&+kkm"JK,Z8$D!$77GD<TX\<\&* %
 ;.8
+ '4 " [22rE   c                    [        U 5      [        [        1;   a:  [        U 5      S   n[        U5      [        L a  [        [        U5      SS 5      $  / $ [        U 5      [        L a  [        [        U 5      SS 5      $ / $ )z_Extract metadata from a field type, handling `Required`/`NotRequired` and `Annotated` wrappers.r   rr   N)r   r   r   r   r   rC   )type_
inner_types     rF   r   r     s~     %X{33e_Q'
j!Y.,QR011 / I 
E	i	'HUOAB'((IrE   c                R   [        [        US5      n[        [        SU 3S5      n[        U R                  US5      nU(       a!  XBLa  [        US5      (       a  UR                  $ [        U R                  SU 3S5      nU(       a!  XSLa  [        US5      (       a  UR                  $ / $ )a  Get the `can_jump_to` list from either sync or async hook methods.

Args:
    middleware: The middleware instance to inspect.
    hook_name: The name of the hook (`'before_model'` or `'after_model'`).

Returns:
    List of jump destinations, or empty list if not configured.
Na__can_jump_to__)r   r   	__class__hasattrr   )
middleware	hook_namebase_sync_methodbase_async_methodsync_methodasync_methods         rF   _get_can_jump_tor     s     	4@1YK$G *..	4@K/K!233*** ://1YK$GL1L"344+++IrE   c                  ^ Sm[        U [        5      (       a  U mO[        U [        5      (       a  [        U SS5      =(       d!    [        U SS5      =(       d    [        U SS5      mU R                  nUbG  UR                  S5      (       a1  U(       a)  [        T[        5      (       a  STR                  5       ;   d  gT(       a  [        U4S	 j[         5       5      $ S
$ )a|  Check if a model supports provider-specific structured output.

Args:
    model: Model name string or `BaseChatModel` instance.
    tools: Optional list of tools provided to the agent.

        Needed because some models don't support structured output together with tool calling.

Returns:
    `True` if the model supports provider-specific structured output, `False` otherwise.
N
model_namemodelmodel_id structured_outputgeminiTc              3  H   >#    U  H  oTR                  5       ;   v   M     g 7frt   )lower).0partr   s     rF   	<genexpr>._supports_provider_strategy.<locals>.<genexpr>  s     Z3Y4J$$&&3Ys   "F)	rX   strr   r   profilegetr   any&FALLBACK_MODELS_WITH_STRUCTURED_OUTPUT)r   toolsmodel_profiler   s      @rF   _supports_provider_strategyr     s     "J%
	E=	)	)E<. .ugt,.uj"- 	
 %!!"566 z*c::x:K[K[K]?]  	Z3YZZ rE   c                0  ^  [        U[        5      (       d  gUR                  nUSL a  gUSL a  S[        R	                  [        T 5      S94$ [        U[
        5      (       a  SU4$ [        U[        5      (       aE  [        U[        5      (       a/  [        T U5      (       a  S[        R	                  [        T 5      S94$ g[        U[        5      (       a9  [        U 4S jU 5       5      (       a  S[        R	                  [        T 5      S94$ gSU" T 5      4$ )zOHandle structured output error.

Returns `(should_retry, retry_tool_message)`.
)Fr   FT)errorc              3  <   >#    U  H  n[        TU5      v   M     g 7frt   )rX   )r   exc_type	exceptions     rF   r   2_handle_structured_output_error.<locals>.<genexpr>  s     M}8z)X..}s   )rX   r3   handle_errors STRUCTURED_OUTPUT_ERROR_TEMPLATEformatr   type
issubclass	Exceptiontupler   )r   response_formatr   s   `  rF   _handle_structured_output_errorr     s     o|44#11M5<<3y><RRR-%%]""-&&mY//Jy-4X4X9@@s9~@VVV-''M}MMM9@@s9~@VVVy)))rE   c                    U (       d  g[        U 5      S:X  a  U S   $ SS jnU S   n[        U SS 5       H  nU" X25      nM     U$ )aj  Compose wrappers into middleware stack (first = outermost).

Args:
    wrappers: Wrappers in middleware order.

Returns:
    Composed wrapper, or `None` if empty.

Example:
    ```python
    wrapper = _chain_tool_call_wrappers([auth, cache, retry])
    # Request flows: auth -> cache -> retry -> tool
    # Response flows: tool -> retry -> cache -> auth
    ```
Nrr   r   c                (   ^ ^       SUU 4S jjnU$ )z-Compose two wrappers where outer wraps inner.c                (   >^ SUU4S jjnT" X5      $ )Nc                   > T" U T5      $ rt   r<   r   executer   s    rF   
call_innerT_chain_tool_call_wrappers.<locals>.compose_two.<locals>.composed.<locals>.call_inner=  s    S'**rE   r   rQ   r   ToolMessage | Command[Any]r<   rv   r   r   r   r   s    ` rF   r   @_chain_tool_call_wrappers.<locals>.compose_two.<locals>.composed8  s    
+ + --rE   )rv   rQ   r   z7Callable[[ToolCallRequest], ToolMessage | Command[Any]]r   r   r<   r   r   r   s   `` rF   r   ._chain_tool_call_wrappers.<locals>.compose_two5  s.    		.$		.L		. (		. 		. rE   r   )r   rR   r   rR   r   rR   r   wrappersr   rV   wrappers       rF   _chain_tool_call_wrappersr    sV    $ 
8}{" b\FHSbM*W- + MrE   c                    U (       d  g[        U 5      S:X  a  U S   $       SS jnU S   n[        U SS 5       H  nU" X25      nM     U$ )zCompose async wrappers into middleware stack (first = outermost).

Args:
    wrappers: Async wrappers in middleware order.

Returns:
    Composed async wrapper, or `None` if empty.
Nrr   r   c                (   ^ ^       SUU 4S jjnU$ )z3Compose two async wrappers where outer wraps inner.c                D   >^#    SUU4S jjnT" X5      I S h  vN $  N7f)Nc                2   >#    T" U T5      I S h  vN $  N7frt   r<   r   s    rF   r   Z_chain_async_tool_call_wrappers.<locals>.compose_two.<locals>.composed.<locals>.call_inner}  s     "30000s   r   r<   r   s    ` rF   r   F_chain_async_tool_call_wrappers.<locals>.compose_two.<locals>.composedx  s#     
1 1 w3333s     )rv   rQ   r   zBCallable[[ToolCallRequest], Awaitable[ToolMessage | Command[Any]]]r   r   r<   r   s   `` rF   r   4_chain_async_tool_call_wrappers.<locals>.compose_twoi  s.    		4$		4W		4 (		4 		4 rE   r   )r   Callable[[ToolCallRequest, Callable[[ToolCallRequest], Awaitable[ToolMessage | Command[Any]]]], Awaitable[ToolMessage | Command[Any]]]r   r  r   r  r   r  s       rF   _chain_async_tool_call_wrappersr  M  st    , 
8}{



: b\FHSbM*W- + MrE   r<   F)system_promptr   r   state_schemacontext_schemacheckpointerstoreinterrupt_beforeinterrupt_afterdebugnamecachec               8  ^ ^^A^B^C^D^E^F^G^H^I^J^K^L^M^N [        T [        5      (       a  [        T 5      m SmJUb!  [        U[        5      (       a  UmJO	[        US9mJUc  / nUc  SmHO?[        U[        [
        45      (       a  UmHO![        U[        5      (       a  UmHO	[        US9mHSmL[        TH[        5      (       a  [	        THR                  S9mLO[        TH[        5      (       a  THmL0 mITL(       aB  TLR                   H2  n[        R                  " U5      nUTIUR                  R                  '   M4     U VVs/ s H  n[        US/ 5        H  nUPM     M     nnnU Vs/ s HU  nUR                  R                  [         R                  Ld)  UR                  R"                  [         R"                  Ld  MS  UPMW     nnSmNU(       a'  U Vs/ s H  nUR                  PM     nn[%        U5      mNU Vs/ s HU  nUR                  R"                  [         R"                  Ld)  UR                  R                  [         R                  Ld  MS  UPMW     nnSmFU(       a'  U Vs/ s H  nUR"                  PM     nn['        U5      mFSmKU Vs/ s H  n[        U[(        5      (       d  M  UPM     nnU Vs/ s H  n[        U[(        5      (       a  M  UPM     nnUU-   nU(       d  TN(       d  TF(       a  [+        UTNTFS9OSmKTK(       a'  [-        TKR.                  R1                  5       5      U-   mGO[-        U5      mG[3        U Vs1 s H  nUR                  iM     sn5      [3        U5      :w  a  Sn[5        U5      eU Vs/ s HU  nUR                  R6                  [         R6                  Ld)  UR                  R8                  [         R8                  Ld  MS  UPMW     nnU Vs/ s HU  nUR                  R:                  [         R:                  Ld)  UR                  R<                  [         R<                  Ld  MS  UPMW     nnU Vs/ s HU  nUR                  R>                  [         R>                  Ld)  UR                  R@                  [         R@                  Ld  MS  UPMW     nnU Vs/ s HU  nUR                  RB                  [         RB                  Ld)  UR                  RD                  [         RD                  Ld  MS  UPMW     nnU Vs/ s HU  nUR                  RF                  [         RF                  Ld)  UR                  RH                  [         RH                  Ld  MS  UPMW     nnU Vs/ s HU  nUR                  RH                  [         RH                  Ld)  UR                  RF                  [         RF                  Ld  MS  UPMW     n nSmMU(       a'  U Vs/ s H  nURF                  PM     n!n[K        U!5      mMSmEU (       a'  U  Vs/ s H  nURH                  PM     n"n[M        U"5      mEU Vs1 s H  nURN                  iM     n#nUb  UO[P        n$U#RS                  U$5        [U        U#SS5      n%[U        U#SS	5      n&[U        U#S
S5      n'[W        U%U&U'US9n(      S,UI4S jjmD    S-UFUHUIUKULUN4S jjmCS.UCUDU4S jjmBS/UBUGUHU UJUM4S jjn)S.UCUDU4S jjmAS/UAUEUGUHU UJ4S jjn*U(RY                  S[[        U)U*SS95        TKb  U(RY                  STK5        U GH  nUR                  R6                  [         R6                  Ld'  UR                  R8                  [         R8                  La  UR                  R6                  [         R6                  La  UR6                  OSn+UR                  R8                  [         R8                  La  UR8                  OSn,[[        U+U,SS9n-U(RY                  UR                   S3U-U%S9  UR                  R:                  [         R:                  Ld'  UR                  R<                  [         R<                  La  UR                  R:                  [         R:                  La  UR:                  OSn.UR                  R<                  [         R<                  La  UR<                  OSn/[[        U.U/SS9n0U(RY                  UR                   S3U0U%S9  UR                  R>                  [         R>                  Ld'  UR                  R@                  [         R@                  La  UR                  R>                  [         R>                  La  UR>                  OSn1UR                  R@                  [         R@                  La  UR@                  OSn2[[        U1U2SS9n3U(RY                  UR                   S3U3U%S9  UR                  RB                  [         RB                  Ld*  UR                  RD                  [         RD                  Ld  GM  UR                  RB                  [         RB                  La  URB                  OSn4UR                  RD                  [         RD                  La  URD                  OSn5[[        U4U5SS9n6U(RY                  UR                   S3U6U%S9  GM     U(       a  US   R                   S3n7OU(       a  US   R                   S3n7OSn7U(       a  US   R                   S3n8OSn8U(       a  US   R                   S3n9OSn9U(       a  US   R                   S3n:O[\        n:U(R_                  [`        U75        TKb  U8/n;[c        S TKR.                  R1                  5        5       5      (       d  TI(       a  U;Re                  U:5        U(Rg                  S[[        [i        TKU8TIU:S9SS9U;5        SU:/n<U(       d  U9S:w  a  U<Re                  U85        U(Rg                  U9[[        [k        U8TIU:S9SS9U<5        Oy[3        TI5      S:  a&  U(Rg                  U9[[        [m        U8U:S 9SS9U8U:/5        ODU9S:X  a  U(R_                  U9U:5        O+[o        U(US   R                   S3U:U8U:[q        US   S!5      S"9  U(       a}  [r        Rt                  " U5       H8  u  n=n>[o        U(U=R                   S3U>R                   S3U8U:[q        U=S#5      S"9  M:     [o        U(US   R                   S3U8U8U:[q        US   S#5      S"9  U(       a}  [r        Rt                  " U5       H8  u  n=n>[o        U(U=R                   S3U>R                   S3U8U:[q        U=S$5      S"9  M:     [o        U(US   R                   S3SU8U:[q        US   S$5      S"9  U(       a  U(R_                  SUS   R                   S35        [w        [3        U5      S%-
  SS5       HB  n?UU?   n=UU?S%-
     n>[o        U(U=R                   S3U>R                   S3U8U:[q        U=S!5      S"9  MD     U(       a  [w        [3        U5      S%-
  SS5       HB  n?UU?   n=UU?S%-
     n>[o        U(U=R                   S3U>R                   S3U8U:[q        U=S&5      S"9  MD     [o        U(US   R                   S3[\        U8U:[q        US   S&5      S"9  S'S(0n@T(       a  S)T0W@S*'   U(Ry                  UUU	U
UTUS+9R{                  W@5      $ s  snnf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )0a  Creates an agent graph that calls tools in a loop until a stopping condition is met.

For more details on using `create_agent`,
visit the [Agents](https://docs.langchain.com/oss/python/langchain/agents) docs.

Args:
    model: The language model for the agent.

        Can be a string identifier (e.g., `"openai:gpt-4"`) or a direct chat model
        instance (e.g., [`ChatOpenAI`][langchain_openai.ChatOpenAI] or other another
        [LangChain chat model](https://docs.langchain.com/oss/python/integrations/chat)).

        For a full list of supported model strings, see
        [`init_chat_model`][langchain.chat_models.init_chat_model(model_provider)].

        !!! tip ""

            See the [Models](https://docs.langchain.com/oss/python/langchain/models)
            docs for more information.
    tools: A list of tools, `dict`, or `Callable`.

        If `None` or an empty list, the agent will consist of a model node without a
        tool calling loop.


        !!! tip ""

            See the [Tools](https://docs.langchain.com/oss/python/langchain/tools)
            docs for more information.
    system_prompt: An optional system prompt for the LLM.

        Can be a `str` (which will be converted to a `SystemMessage`) or a
        `SystemMessage` instance directly. The system message is added to the
        beginning of the message list when calling the model.
    middleware: A sequence of middleware instances to apply to the agent.

        Middleware can intercept and modify agent behavior at various stages.

        !!! tip ""

            See the [Middleware](https://docs.langchain.com/oss/python/langchain/middleware)
            docs for more information.
    response_format: An optional configuration for structured responses.

        Can be a `ToolStrategy`, `ProviderStrategy`, or a Pydantic model class.

        If provided, the agent will handle structured output during the
        conversation flow.

        Raw schemas will be wrapped in an appropriate strategy based on model
        capabilities.

        !!! tip ""

            See the [Structured output](https://docs.langchain.com/oss/python/langchain/structured-output)
            docs for more information.
    state_schema: An optional `TypedDict` schema that extends `AgentState`.

        When provided, this schema is used instead of `AgentState` as the base
        schema for merging with middleware state schemas. This allows users to
        add custom state fields without needing to create custom middleware.

        Generally, it's recommended to use `state_schema` extensions via middleware
        to keep relevant extensions scoped to corresponding hooks / tools.
    context_schema: An optional schema for runtime context.
    checkpointer: An optional checkpoint saver object.

        Used for persisting the state of the graph (e.g., as chat memory) for a
        single thread (e.g., a single conversation).
    store: An optional store object.

        Used for persisting data across multiple threads (e.g., multiple
        conversations / users).
    interrupt_before: An optional list of node names to interrupt before.

        Useful if you want to add a user confirmation or other interrupt
        before taking an action.
    interrupt_after: An optional list of node names to interrupt after.

        Useful if you want to return directly or run additional processing
        on an output.
    debug: Whether to enable verbose logging for graph execution.

        When enabled, prints detailed information about each node execution, state
        updates, and transitions during agent runtime. Useful for debugging
        middleware behavior and understanding agent execution flow.
    name: An optional name for the `CompiledStateGraph`.

        This name will be automatically used when adding the agent graph to
        another graph as a subgraph node - particularly useful for building
        multi-agent systems.
    cache: An optional `BaseCache` instance to enable caching of graph execution.

Returns:
    A compiled `StateGraph` that can be used for chat interactions.

Raises:
    AssertionError: If duplicate middleware instances are provided.

The agent node calls the language model with the messages list (after applying
the system prompt). If the resulting [`AIMessage`][langchain.messages.AIMessage]
contains `tool_calls`, the graph will then call the tools. The tools node executes
the tools and adds the responses to the messages list as
[`ToolMessage`][langchain.messages.ToolMessage] objects. The agent node then calls
the language model again. The process repeats until no more `tool_calls` are present
in the response. The agent then returns the full list of messages.

Example:
    ```python
    from langchain.agents import create_agent


    def check_weather(location: str) -> str:
        '''Return the weather forecast for the specified location.'''
        return f"It's always sunny in {location}"


    graph = create_agent(
        model="anthropic:claude-sonnet-4-5-20250929",
        tools=[check_weather],
        system_prompt="You are a helpful assistant",
    )
    inputs = {"messages": [{"role": "user", "content": "what is the weather in sf"}]}
    for chunk in graph.stream(inputs, stream_mode="updates"):
        print(chunk)
    ```
N)contentr   r   )r   wrap_tool_callawrap_tool_callz-Please remove duplicate middleware instances.StateSchemaInputSchemainputOutputSchemaoutput)r  input_schemaoutput_schemar  c           	     d  > [        U[        5      (       aN  U R                  (       d8  [        R                  " UR
                  5      n UR                  U 5      nU /US.$ SU /0$ [        U[        5      (       Ga  [        U [        5      (       a  U R                  (       a  U R                   Vs/ s H  owS   T;   d  M  UPM     nnU(       a  Sn	[        U5      S:  a]  U Vs/ s H  owS   PM	     n
n[        X5      n	[        X5      u  pU(       d  U	eU Vs/ s H  n[!        UUS   US   S	9PM     nnSU /UQ0$ US
   n TUS      nUR                  US   5      nUR"                  =(       d    SU 3nU [!        UUS   US   S	9/US.$ SU /0$ ! [         a4  n[        UR
                  R                  SS5      n[        XTU 5      nXdeSnAff = fs  snf s  snf s  snf ! [         aD  n[        US   X@5      n	[        X5      u  pU(       d  XeSU [!        UUS   US   S	9/0s SnA$ SnAff = f)zHandle model output including structured responses.

Args:
    output: The AI message output from the model.
    effective_response_format: The actual strategy used (may differ from initial
        if auto-detected).
)r[   rW   r=   r   Nr[   r  rr   id)r  tool_call_idr  r   argszReturning structured response: )rX   r.   
tool_callsr/   from_schema_specschema_specparser   r   r   r2   r3   r   r   r,   r   r   tool_message_content)r!  effective_response_formatprovider_strategy_bindingrW   excr   validation_errortcstructured_tool_callsr   
tool_namesshould_retryerror_messagetool_messages	tool_callstructured_tool_bindingr,  structured_output_toolss                    rF   _handle_model_output*create_agent.<locals>._handle_model_output  s    /1ABB$$,C,T,T-99-)	^*C*I*I&*Q' *0I\]])) 0,??69--!! $..%.rV*@W2W. " % %:>	,-17L!M7LV*7LJ!M >z RI2Q!3/L (' #8% #8B $$1)+D!#F
 #8 " % '(@-(@AA 2!4	%.EiPVFW.X+*A*G*G	RXHY*Z' 2FF S<=P<QR ) #'(<-6t_%.v%6% 0C
 
< VH%%i ! 4")1==DDjRc#K (G{Y_'`$*34 % "N%@ !  ?	&@QSV _I2Q!3/L ('0 #"'(5-6t_%.v%6%	 	sO   	F /G?G#GGA	G! 
G/G

G!
H/+9H*$H/*H/c                z  > T=(       d    Tn0 nT(       a  TR                   R                  5       nU(       d  / nU R                   H^  n[        U[        5      (       a  M  [        U[
        5      (       d  M1  UR                  U;  d  MC  UR                  UR                  5        M`     U(       a8  [        UR                  5       5      n[        R                  UUS9n[        U5      eU R                  nUb)  [        U[        [        [         45      (       d	  [        US9n[        U[        5      (       aV  [#        U R$                  U R                  S9(       a  [!        UR&                  S9nO!UTL a  Tb  TnO[        UR&                  S9nOUn[)        U R                  5      n	[        U[        5      (       a:  TR+                  5        V
s/ s H  oR,                  PM     nn
U	R/                  U5        [        U[         5      (       a=  UR1                  5       nU R$                  R2                  " U	4SS0UDU R4                  D6U4$ [        U[        5      (       a~  UR6                   H.  nUR                  T;  d  M  SUR                   S3n[        U5      e   T(       a  S	OU R8                  nU R$                  R2                  " U	4S
U0U R4                  D6U4$ U	(       a5  U R$                  R2                  " U	4S
U R8                  0U R4                  D6S4$ U R$                  R:                  " S0 U R4                  D6S4$ s  sn
f )a  Get the model with appropriate tool bindings.

Performs auto-detection of strategy if needed based on model capabilities.

Args:
    request: The model request containing model, tools, and response format.

Returns:
    Tuple of `(bound_model, effective_response_format)` where
    `effective_response_format` is the actual strategy used (may differ from
    initial if auto-detected).

Raises:
    ValueError: If middleware returned unknown client-side tool names.
    ValueError: If `ToolStrategy` specifies tools not declared upfront.
)unknown_tool_namesavailable_tool_namesNr  )r   strictTzToolStrategy specifies tool 'zP' which wasn't declared in the original response format when creating the agent.r   tool_choicer<   )tools_by_namecopyr   rX   dictr   r  rl   sortedkeysDYNAMIC_TOOL_ERROR_TEMPLATEr   
ValueErrorr   r+   r3   r.   r   r   r   rC   valuestoolra   to_model_kwargs
bind_toolsmodel_settingsschema_specsr@  bind)rv   has_wrap_tool_callavailable_tools_by_namer=  tr>  re   r   r-  final_toolsinfostructured_toolskwargsr1  r@  awrap_tool_call_wrapperinitial_response_formatr9  	tool_nodetool_strategy_for_setupwrap_tool_call_wrappers                  rF   _get_bound_model&create_agent.<locals>._get_bound_modelC  s&   , 4N7N #%&/&=&=&B&B&D# "!#]]a&&a**qvv=T/T&--aff5 # "'-.E.J.J.L'M$188'9)= 9  !o% =D<S<S&zlL:JK0
 0
 +/BO o|44*7==N,<ODZDZ,[) $;;@W@c -D),8@V@V,W) )8%
 7==)/>>6M6T6T6VW6Vd		6VW/0 /1ABB.>>@F(((,06:A:P:P *	  />> 0<<77"997y AC C 
 %S/) = $;%@S@SK((-8<C<R<R *	  ((-4-@-@DKDZDZ 	  }}!!;G$:$:;TAA_  Xs   L8c                   > T" U 5      u  pU R                   nU R                  (       a  U R                  /UQnUR                  U5      nT
(       a  T
Ul        T	" XB5      nUS   nUR	                  S5      n[        UUS9$ )zExecute model and return response.

This is the core model execution logic wrapped by `wrap_model_call` handlers.

Raises any exceptions that occur during model invocation.
r[   rW   rU   )r[   system_messageinvoker  r   r%   rv   model_r-  r[   r!  handled_outputmessages_listrW   r[  r:  r  s           rF   _execute_model_sync)create_agent.<locals>._execute_model_sync  s     -=W,E)##!!..::Hx(FK .fP&z2,001FG  3
 	
rE   c                   > [        TTT	TU S   SU US9nT
c  T" U5      n[        U5      $ T
" UT5      n[        UR                  UR                  5      $ )zASync model request handler with sequential middleware processing.r[   Nr   r   r^  r   r[   r@  rc   runtimer$   rf   r8   r;   )rc   rh  rv   r8   rV   rd  default_toolsrW  r   r^  wrap_model_call_handlers        rF   
model_node create_agent.<locals>.model_node  sk    )3:&	
 #*09N">22(2EFv44fooFFrE   c                  >#    T" U 5      u  pU R                   nU R                  (       a  U R                  /UQnUR                  U5      I Sh  vN nT
(       a  T
Ul        T	" XB5      nUS   nUR	                  S5      n[        UUS9$  N:7f)zExecute model asynchronously and return response.

This is the core async model execution logic wrapped by `wrap_model_call`
handlers.

Raises any exceptions that occur during model invocation.
Nr[   rW   rU   )r[   r^  ainvoker  r   r%   r`  s           rF   _execute_model_async*create_agent.<locals>._execute_model_async  s      -=W,E)##!!..::H~~h//FK .fP&z2,001FG  3
 	
 0s   ABB	;Bc                   >#    [        T	TT
TU S   SU US9nTc  T" U5      I Sh  vN n[        U5      $ T" UT5      I Sh  vN n[        UR                  UR                  5      $  N@ N&7f)zBAsync model request handler with sequential middleware processing.r[   Nrg  ri  )rc   rh  rv   r8   rV   rp  awrap_model_call_handlerrj  rW  r   r^  s        rF   amodel_node!create_agent.<locals>.amodel_node  s     )3:&	
 $+#7#@@N">22/9MNNv44fooFF	 A Os!   "A*A&A*A(%A*(A*r   Ftracez.before_agent)r"  z.before_modelz.after_modelz.after_agentr   r   c              3  8   #    U  H  oR                   v   M     g 7frt   )return_direct)r   rI  s     rF   r   create_agent.<locals>.<genexpr>  s     P/Ot""/Os   )rX  model_destinationr9  end_destination)r{  r9  r|  r{  r|  after_model)r  default_destinationr{  r|  can_jump_tobefore_agentbefore_modelrr   after_agentrecursion_limiti'  lc_agent_namer   )r  r  r  r  r  r  r  )r!  r   r-  zResponseFormat[Any] | Noner   dict[str, Any])rv   r   r   z5tuple[Runnable[Any, Any], ResponseFormat[Any] | None])rv   r   r   r%   )rc   zAgentState[Any]rh  zRuntime[ContextT]r   r:   )>rX   r   r4   r   r3   r.   r+   r   rM  r-   r)  rI  r  r   r   r  r   r  r  r  rC  r   rC   rA  rH  r   AssertionErrorr  abefore_agentr  abefore_modelr~  aafter_modelr  aafter_agentwrap_model_callawrap_model_callr   r   r  r    addr   r   add_noder   r   add_edger   r   rl   add_conditional_edges_make_tools_to_model_edge_make_model_to_tools_edge_make_model_to_model_edge_add_middleware_edger   	itertoolspairwiserangecompilewith_config)Or   r   r  r   r   r  r  r  r  r  r  r  r  r  response_schemastructured_tool_infomrQ  middleware_toolsmiddleware_w_wrap_tool_callr  middleware_w_awrap_tool_callasync_wrappersbuilt_in_toolsregular_toolsavailable_toolsre   middleware_w_before_agentmiddleware_w_before_modelmiddleware_w_after_modelmiddleware_w_after_agentmiddleware_w_wrap_model_callmiddleware_w_awrap_model_callsync_handlersasync_handlersstate_schemas
base_stateresolved_state_schemar"  r#  r`   rl  rt  sync_before_agentasync_before_agentbefore_agent_nodesync_beforeasync_beforebefore_node
sync_afterasync_after
after_nodesync_after_agentasync_after_agentafter_agent_node
entry_nodeloop_entry_nodeloop_exit_node	exit_nodetools_to_model_destinationsmodel_to_tools_destinationsm1m2idxconfigrp  rd  r[  r:  rs  rV  rj  rW  r9  r^  rX  rY  rk  rZ  sO   `           `                                                    @@@@@@@@@@@@@@rF   create_agentr    s   f %& ,0N m]33*N*=AN } "&	Ol4D%E	F	F"1	O\	2	2"1 #/o"F 9=)<88".6M6T6T"U	+\	:	:"9AC6CCO#4#E#Eo#V FZ#$8$=$=$B$BC  D $.O:awq'27N!7N:O #A;;%%_-K-KK;;&&o.M.MM 	
   # "".IJ.IA$$.IJ!:8!D $A;;&&o.M.MM;;%%_-K-KK 	
 ! $ ##5QR5Q!++5QR"A."Q "&I!&>A*Q*=aN> %A1Z4-@QMA '6O 48O 	!13	
   Y44;;=>O^, J'JqAFFJ'(C
O;=S!! !A;;##?+G+GG;;$$O,I,II 	
  ! !A;;##?+G+GG;;$$O,I,II 	
  !  A;;""/*E*EE;;##?+G+GG 	
     A;;""/*E*EE;;##?+G+GG 	
    $A;;&&o.M.MM;;''/O/OO 	
 ! $ %A;;''/O/OO;;&&o.M.MM 	
 " % ##4PQ4Pq**4PQ"<]"K  $$6ST6S!,,6ST#CN#S 8BC
1
MC!-!9zJj!+M=$O"=-IL#M>8LM
 	*!#%		 
f&f&6Pf&	f&PB'B	>B BB
 
6G G(
 
8G G* 
NN7,ZERS w	* KK$$O,H,HH{{((0M0MM ;;++?3O3OO   ;;,,O4Q4QQ  
 !11BDV^c dNN66(-(*;J_  
 KK$$O,H,HH{{((0M0MM ;;++?3O3OO   ;;,,O4Q4QQ  
 +;ERKNN66(-(+DY  
 KK##?+F+FF{{''/K/KK ;;**/2M2MM   ;;++?3O3OO  
 **kOJNNaffX\2JMbNc KK##?+F+FF{{''/K/KK ;;**/2M2MM   ;;++?3O3OO  
  00@BS[`aNN66(,')9H]  _ h !1!499:-H
	"1!499:-H

 !6q9>>?}M!  4Q7<<=\J   /3889F			NN5*% (7&7#Py/F/F/M/M/OPPP&'..y9##)'&5,C$-	  (	
( (/	&:#n7'..?##)&5,C$-
  (	
 
$	%	)##)&5$-  i(
	
 
7	"~y1 	,Q/445\B )-%()A!)DmT	
 !(()BCFB y.')wwi}$="1 ),R@ D 	-b1667}E /-%()B2)FW	
 !(()BCFB y.')wwi}$="1 ),R@ D 	-b1667}E '-%()B2)FW	
  w#;B#?#D#D"E\ RS56:ArBC)#.B)#'2B y-')wwi|$<"1 ),R? C  56:ArBC)#.B)#'2B y-')wwi|$<"1 ),R? C 	,Q/445\B #-%()A!)DmT	
 08F-t4z==!)'   k&_ P
# K$ S ?A6 (!!  $% R U  Ds   3!{A{1{{-A{{{{ { *{%{%8{*3A{/	{/A{4+{47A{9{9A{>/{>;A||A|3||8||c               2    U S:X  a  U$ U S:X  a  U$ U S:X  a  gg )Nr   endr   r<   )jump_tor{  r|  s      rF   _resolve_jumpr  G  s.     '  %'rE   c                   [        [        U 5      S-
  SS5       H[  n[        X   [        5      (       d  M  [	        SX   5      nXS-   S  Vs/ s H  n[        U[
        5      (       d  M  UPM     nnX$4s  $    S/ 4$ s  snf )a  Return the last AI message and any subsequent tool messages.

Args:
    messages: List of messages to search through.

Returns:
    A tuple of (last_ai_message, tool_messages). If no AIMessage is found,
    returns (None, []). Callers must handle the None case appropriately.
rr   r   r   N)r  r   rX   r   r
   r   )r[   ilast_ai_messager  r6  s        rF    _fetch_last_ai_and_tool_messagesr  V  s     3x=1$b"-hk9--";<O(0Q(9X(91Z;=WQ(9MX"11	 . 8O Ys   A=*A=c                (   ^ ^^     SUU U4S jjnU$ )Nc                  > U R                  S5      =n(       a  [        UT
T	S9$ [        U S   5      u  p#Uc  T	$ U Vs/ s H  oDR                  PM     nn[	        UR
                  5      S:X  a  T	$ UR
                   Vs/ s H  nUS   U;  d  M  US   T;  d  M  UPM     nnU(       a&  U Vs/ s H  n[        S[        SUU S	95      PM     sn$ S
U ;   a  T	$ T
$ s  snf s  snf s  snf )Nr  r}  r[   r   r%  r  r   tool_call_with_context)__typer7  rc   rW   )r   r  r  r&  r   r(  r   r   )rc   r  r  r6  r  tool_message_idscpending_tool_callsr7  r|  r{  r9  s            rF   model_to_tools1_make_model_to_tools_edge.<locals>.model_to_toolsq  s9    ii	**7* "3 /  *J%PZJ[)\& """4ABMqNNMB ))*a/"" %//
/w.. 34V9D[3[ / 	 
  "4
 "4I '7"+# "4
 
 !E)"" ! C C

s   C>CCC-C#rc   r  r   zstr | list[Send] | Noner<   )r{  r9  r|  r  s   ``` rF   r  r  k  s&    2!2!	 2! 2!h rE   c                $   ^ ^     SUU 4S jjnU$ )Nc                ^   > U R                  S5      =n(       a  [        UTTS9$ SU ;   a  T$ T$ )Nr  r}  rW   )r   r  )rc   r  r|  r{  s     rF   model_to_model1_make_model_to_model_edge.<locals>.model_to_model  sG     ii	**7* "3 /  !E)"" ! rE   r  r<   )r{  r|  r  s   `` rF   r  r    s%    
!!	 ! !& rE   c                $   ^ ^^^ SUUUU 4S jjnU$ )Nc                  > [        U S   5      u  pUc  T$ UR                   Vs/ s H  o3S   TR                  ;   d  M  UPM     nnU(       a  [        U4S jU 5       5      (       a  T$ [	        U4S jU 5       5      (       a  T$ T$ s  snf )Nr[   r  c              3  \   >#    U  H!  nTR                   US       R                  v   M#     g7f)r  N)rA  ry  )r   r  rX  s     rF   r   D_make_tools_to_model_edge.<locals>.tools_to_model.<locals>.<genexpr>  s*      *
F\I##AfI.<<F\s   ),c              3  @   >#    U  H  oR                   T;   v   M     g 7frt   )r  )r   rQ  r9  s     rF   r   r    s     H-Qvv00-s   )r  r(  rA  allr   )	rc   r  r6  r  client_side_tool_callsr|  r{  r9  rX  s	        rF   tools_to_model1_make_tools_to_model_edge.<locals>.tools_to_model  s    )I%PZJ[)\& "$$
 '11"
1!vY)BYBY5YA1 	 "
 "c *
F\*
 '
 '
 #" H-HHH""
 ! "
s
   BB)rc   r  r   
str | Noner<   )rX  r{  r9  r|  r  s   ```` rF   r  r    s    ! !4 rE   c               $  ^^^ U(       at  SUUU4S jjnT/nSU;   a  UR                  T5        SU;   a  UR                  S5        SU;   a  UT:w  a  UR                  T5        U R                  U[        USS9U5        gU R                  UT5        g)	a  Add an edge to the graph for a middleware node.

Args:
    graph: The graph to add the edge to.
    name: The name of the middleware node.
    default_destination: The default destination for the edge.
    model_destination: The destination for the edge to the model.
    end_destination: The destination for the edge to the end.
    can_jump_to: The conditionally jumpable destinations for the edge.
c                J   > [        U R                  S5      TTS9=(       d    T$ )Nr  r}  )r  r   )rc   r  r|  r{  s    rF   	jump_edge'_add_middleware_edge.<locals>.jump_edge  s,    IIi(&7$3 '
 'rE   r  r   r   Frv  N)rc   r  r   r   )rl   r  r   r  )r`   r  r  r{  r|  r  r  destinationss     ```   rF   r  r    s    * 	 	 ,,K0k!(k!d.?&? 12##D*:9E*RT`a 	t01rE   r  )rV   z1ModelResponse | AIMessage | ExtendedModelResponser   r%   rt   )r8   r%   rb   r   r   r:   )r   z%Sequence[_ModelCallHandler[ContextT]]r   z*_ComposedModelCallHandler[ContextT] | None)r   z*Sequence[_AsyncModelCallHandler[ContextT]]r   z/_ComposedAsyncModelCallHandler[ContextT] | None)r   z	set[type]r   r   r   r  r   r   )r   r   r   z	list[Any])r   zAgentMiddleware[Any, Any]r   r   r   zlist[JumpTo])r   str | BaseChatModelr   z&list[BaseTool | dict[str, Any]] | Noner   bool)r   r   r   zResponseFormat[Any]r   ztuple[bool, str])r  zSequence[ToolCallWrapper]r   zToolCallWrapper | None)r  zSequence[Callable[[ToolCallRequest, Callable[[ToolCallRequest], Awaitable[ToolMessage | Command[Any]]]], Awaitable[ToolMessage | Command[Any]]]]r   zCallable[[ToolCallRequest, Callable[[ToolCallRequest], Awaitable[ToolMessage | Command[Any]]]], Awaitable[ToolMessage | Command[Any]]] | None)r   r  r   z?Sequence[BaseTool | Callable[..., Any] | dict[str, Any]] | Noner  zstr | SystemMessage | Noner   z.Sequence[AgentMiddleware[StateT_co, ContextT]]r   zCResponseFormat[ResponseT] | type[ResponseT] | dict[str, Any] | Noner  z"type[AgentState[ResponseT]] | Noner  ztype[ContextT] | Noner  zCheckpointer | Noner  zBaseStore | Noner  list[str] | Noner  r  r  r  r  r  r  zBaseCache[Any] | Noner   zcCompiledStateGraph[AgentState[ResponseT], ContextT, _InputAgentState, _OutputAgentState[ResponseT]])r  zJumpTo | Noner{  r   r|  r   r   r  )r[   zlist[AnyMessage]r   z*tuple[AIMessage | None, list[ToolMessage]])r{  r   r9  !dict[str, OutputToolBinding[Any]]r|  r   r   3Callable[[dict[str, Any]], str | list[Send] | None])r{  r   r|  r   r   r  )
rX  r   r{  r   r9  r  r|  r   r   z&Callable[[dict[str, Any]], str | None])r`   z[StateGraph[AgentState[ResponseT], ContextT, _InputAgentState, _OutputAgentState[ResponseT]]r  r   r  r   r{  r   r|  r   r  zlist[JumpTo] | Noner   None)prA   
__future__r   r  dataclassesr   r   typingr   r   r   r	   r
   r   r   r   *langchain_core.language_models.chat_modelsr   langchain_core.messagesr   r   r   r   langchain_core.toolsr   langgraph._internal._runnabler   langgraph.constantsr   r   langgraph.graph.stater   langgraph.prebuilt.tool_noder   r   langgraph.typesr   r   typing_extensionsr   r   r   !langchain.agents.middleware.typesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   "langchain.agents.structured_outputr+   r,   r-   r.   r/   r0   r1   r2   r3   langchain.chat_modelsr4   r6   collections.abcrG   rH   rI   langchain_core.runnablesrJ   rK   langgraph.cache.baserL   rM   langgraph.runtimerN   langgraph.store.baserO   rP   rQ   rR   _ModelCallHandler_ComposedModelCallHandler_AsyncModelCallHandler_ComposedAsyncModelCallHandlerr   striprF  r   rY   rf   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  __all__r<   rE   rF   <module>r     s   @ "  (	 	 	 E U U ) : * , F ) > >   
 
 
 2 UWY%7 U U ==A.8).,R 	h	<+A*BM*Q!RS	!$99	;
 !)	h	<+A*BM*Q!RS&	(!
 &	h	<+A*BImD\*\!]^-)+.CCD	F
 &.	h	<+A*BImD\*\!]^01	3&" $P  0 
EG1 4
* &=$ 6:'!'2' 'TY3Y/YxX8X4Xv3D H QU%%'M%	%P**(* *<-'--`===D NRw 15AC[_7;,0(,")-(,#'wwJw .	w
 ?w Yw 5w *w &w w 'w &w w w !w !wt  	
 /*:: ?: 	:
 9:z  9	6!! ! ?	!
 ! ,!H-2-2
 -2 -2 -2 -2 %-2 
-2b rE   