
    @hw                       S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
JrJrJrJr  S SKJrJr  S SKJr  S S	KJr  S S
KJrJrJr  S SKJr  S SKJr  S SKJrJ r J!r!  S SK"J#r#J$r$  \
(       a  S SK%r%S SK&J'r'  S SK(J)r)   " S S\5      r* " S S\5      r+SS jr,SS jr-    SS jr.    S S jr/\\0\+   \*\0S   \0S   4   r1 " S S\\2\14   5      r3g)!    )annotationsN)Sequence)JSONDecodeError)sleep)TYPE_CHECKINGAnyCallableOptionalUnion)AgentActionAgentFinish)CallbackManager)dumpd)RunnableConfigRunnableSerializableensure_config)BaseTool)convert_to_openai_tool)	BaseModelFieldmodel_validator)Selfoverride)ThreadMessage)RequiredActionFunctionToolCallc                  B    \ rS rSr% SrS\S'   S\S'   \S	S j5       rSrg)
OpenAIAssistantFinish!   zeAgentFinish with run and thread metadata.

Parameters:
    run_id: Run id.
    thread_id: Thread id.
strrun_id	thread_idc                    gzECheck if the class is serializable by LangChain.

Returns:
    False
F clss    ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/agents/openai_assistant/base.pyis_lc_serializable(OpenAIAssistantFinish.is_lc_serializable,            r$   Nreturnbool	__name__
__module____qualname____firstlineno____doc____annotations__classmethodr(   __static_attributes__r$   r+   r'   r   r   !   s%     KN r+   r   c                  L    \ rS rSr% SrS\S'   S\S'   S\S'   \S
S j5       rSrg	)OpenAIAssistantAction6   zAgentAction with info needed to submit custom tool output to existing run.

Parameters:
    tool_call_id: Tool call id.
    run_id: Run id.
    thread_id: Thread id
r   tool_call_idr    r!   c                    gr#   r$   r%   s    r'   r(   (OpenAIAssistantAction.is_lc_serializableC   r*   r+   r$   Nr,   r/   r$   r+   r'   r9   r9   6   s+     KN r+   r9   c                      SS K n U R                  " 5       $ ! [         a  nSn[        U5      UeS nAf[         a  nSn[        U5      UeS nAff = fNr   zBUnable to import openai, please install with `pip install openai`.zuPlease make sure you are using a v1.1-compatible version of openai. You can install with `pip install "openai>=1.1"`.)openaiOpenAIImportErrorAttributeErrorr@   emsgs      r'   _get_openai_clientrG   M   sZ    )}} &R#A% )< 	 S!q()    
A/AA

Ac                      SS K n U R                  " 5       $ ! [         a  nSn[        U5      UeS nAf[         a  nSn[        U5      UeS nAff = fr?   )r@   AsyncOpenAIrB   rC   rD   s      r'   _get_openai_async_clientrK   ]   s]    )!!## &R#A% )< 	 S!q()rH   c                \    Sn[        U [        5      =(       a    SU ;   =(       a    U S   U;   $ )z<Determine if tool corresponds to OpenAI Assistants built-in.)code_interpreterfile_searchtype)
isinstancedict)toolassistants_builtin_toolss     r'   _is_assistants_builtin_toolrT   m   s8      C4 	7t^	7&\55r+   c                <    [        U 5      (       a  U $ [        U 5      $ )zConvert a raw function/class to an OpenAI tool.

Note that OpenAI assistants supports several built-in tools,
such as "code_interpreter" and "file_search".
)rT   r   )rR   s    r'   _get_assistants_toolrV   y   s     #4((!$''r+   r   r   c                     \ rS rSr% Sr\" \S9rS\S'    Sr	S\S'    S\S	'    S
r
S\S'    SrS\S'    \" SS9S#S j5       r\SS.             S$S jj5       r\ S%       S&S jj5       r\SS.             S'S jj5       r\ S%       S&S jj5       r    S(S jrS)S jrS*S jrS+S jrS,S jr    S(S jrS)S jrS*S  jrS+S! jrS,S" jrSrg)-OpenAIAssistantRunnable   a  Run an OpenAI Assistant.

Example using OpenAI tools:
    .. code-block:: python

        from langchain_experimental.openai_assistant import OpenAIAssistantRunnable

        interpreter_assistant = OpenAIAssistantRunnable.create_assistant(
            name="langchain assistant",
            instructions="You are a personal math tutor. Write and run code to answer math questions.",
            tools=[{"type": "code_interpreter"}],
            model="gpt-4-1106-preview"
        )
        output = interpreter_assistant.invoke({"content": "What's 10 - 4 raised to the 2.7"})

Example using custom tools and AgentExecutor:
    .. code-block:: python

        from langchain_experimental.openai_assistant import OpenAIAssistantRunnable
        from langchain.agents import AgentExecutor
        from langchain.tools import E2BDataAnalysisTool


        tools = [E2BDataAnalysisTool(api_key="...")]
        agent = OpenAIAssistantRunnable.create_assistant(
            name="langchain assistant e2b tool",
            instructions="You are a personal math tutor. Write and run code to answer math questions.",
            tools=tools,
            model="gpt-4-1106-preview",
            as_agent=True
        )

        agent_executor = AgentExecutor(agent=agent, tools=tools)
        agent_executor.invoke({"content": "What's 10 - 4 raised to the 2.7"})


Example using custom tools and custom execution:
    .. code-block:: python

        from langchain_experimental.openai_assistant import OpenAIAssistantRunnable
        from langchain.agents import AgentExecutor
        from langchain_core.agents import AgentFinish
        from langchain.tools import E2BDataAnalysisTool


        tools = [E2BDataAnalysisTool(api_key="...")]
        agent = OpenAIAssistantRunnable.create_assistant(
            name="langchain assistant e2b tool",
            instructions="You are a personal math tutor. Write and run code to answer math questions.",
            tools=tools,
            model="gpt-4-1106-preview",
            as_agent=True
        )

        def execute_agent(agent, tools, input):
            tool_map = {tool.name: tool for tool in tools}
            response = agent.invoke(input)
            while not isinstance(response, AgentFinish):
                tool_outputs = []
                for action in response:
                    tool_output = tool_map[action.tool].invoke(action.tool_input)
                    tool_outputs.append({"output": tool_output, "tool_call_id": action.tool_call_id})
                response = agent.invoke(
                    {
                        "tool_outputs": tool_outputs,
                        "run_id": action.run_id,
                        "thread_id": action.thread_id
                    }
                )

            return response

        response = execute_agent(agent, tools, {"content": "What's 10 - 4 raised to the 2.7"})
        next_response = execute_agent(agent, tools, {"content": "now add 17.241", "thread_id": response.thread_id})

)default_factoryr   clientNasync_clientr   assistant_idg     @@floatcheck_every_msFr.   as_agentafter)modec                ~    U R                   c/  SS KnU R                  R                  nUR                  " US9U l         U $ )Nr   )api_key)r\   r@   r[   rd   rJ   )selfr@   rd   s      r'   validate_async_client-OpenAIAssistantRunnable.validate_async_client   s8    $kk))G & 2 27 CDr+   )r[   c          
         U=(       d
    [        5       nUR                  R                  R                  UUU Vs/ sH  n[	        U5      PM     snUS9nU " SUR
                  US.UD6$ s  snf )a  Create an OpenAI Assistant and instantiate the Runnable.

Args:
    name: Assistant name.
    instructions: Assistant instructions.
    tools: Assistant tools. Can be passed in OpenAI format or as BaseTools.
    model: Assistant model to use.
    client: OpenAI or AzureOpenAI client.
        Will create a default OpenAI client if not specified.
    kwargs: Additional arguments.

Returns:
    OpenAIAssistantRunnable configured to run using the created assistant.
nameinstructionstoolsmodel)r]   r[   r$   )rG   beta
assistantscreaterV   id)	r&   rj   rk   rl   rm   r[   kwargsrR   	assistants	            r'   create_assistant(OpenAIAssistantRunnable.create_assistant   ss    2 /-/KK**11%:?@%$'-%@	 2 
	 F	VFvFF As   A(c                2   [        U5      n[        R                  " UR                  S5      UR                  S5      UR                  S5      S9nUR	                  [        U 5      UUR                  S5      =(       d    U R                  5       S9n U R                  (       ae  UR                  S5      (       aO  U R                  US   5      nU R                  R                  R                  R                  R                  " S0 UD6nOSU;  aM  S	US
   UR                  S5      UR                  S5      S./UR                  S5      S.nU R                  X5      nOSU;  aa  U R                  R                  R                  R                  R!                  US   US
   S	UR                  S5      S9n	U R#                  U5      nO:U R                  R                  R                  R                  R                  " S0 UD6nU R%                  UR&                  UR(                  5      n U R/                  U5      nUR1                  U5        U$ ! [*         a  n
UR-                  U
5        e Sn
A
ff = f! [*         a#  n
UR-                  XR3                  5       S9  e Sn
A
ff = f)a  Invoke assistant.

Args:
    input: Runnable input dict that can have:
        content: User message when starting a new run.
        thread_id: Existing thread to use.
        run_id: Existing run to use. Should only be supplied when providing
            the tool output for a required action after an initial invocation.
        message_metadata: Metadata to associate with new message.
        thread_metadata: Metadata to associate with new thread. Only relevant
            when new thread being created.
        instructions: Additional run instructions.
        model: Override Assistant model for this run.
        tools: Override Assistant tools for this run.
        parallel_tool_calls: Allow Assistant to set parallel_tool_calls
            for this run.
        top_p: Override Assistant top_p for this run.
        temperature: Override Assistant temperature for this run.
        max_completion_tokens: Allow setting max_completion_tokens for this run.
        max_prompt_tokens: Allow setting max_prompt_tokens for this run.
        run_metadata: Metadata to associate with new run.
        attachments: A list of files attached to the message, and the
            tools they should be added to.
    config: Runnable config. Defaults to None.

Return:
    If self.as_agent, will return
        Union[List[OpenAIAssistantAction], OpenAIAssistantFinish].
        Otherwise, will return OpenAI types
        Union[List[ThreadMessage], List[RequiredActionFunctionToolCall]].
	callbackstagsmetadatainheritable_callbacksinheritable_tagsinheritable_metadatarun_namerj   intermediate_stepsr!   usercontentmessage_metadataattachments)roler   ry   r   thread_metadatamessagesry   r    r   r   ry   Nry   r$   )r   r   	configuregeton_chain_startr   get_namer`   _parse_intermediate_stepsr[   rn   threadsrunssubmit_tool_outputs_create_thread_and_runr   rp   _create_run_wait_for_runrq   r!   BaseExceptionon_chain_error_get_responseon_chain_endrQ   re   inputconfigrr   callback_managerrun_managertool_outputsrunthread_rE   responses               r'   invokeOpenAIAssistantRunnable.invoke  s]   N v&*44"(**["9#ZZ/!'J!7

 '55$KJ':4==? 6 

%	}}+?!@!@#==./  kk&&..33GGW,WE) %+',Y'7(-		2D(E+099]+C	! !&		*; <
 11%@&KK$$,,55<<+&!),"YY'9:	 =  &&u- kk&&..33GGP%P$$SVVS]];C	))#.H
 $$X.O  	&&q)	
  	&&q88:&>	s1   FI !I) 
I&I!!I&)
J3JJ)r\   c                  #    U=(       d
    [        5       nU Vs/ sH  n[        U5      PM     nnUR                  R                  R	                  UUUUS9I Sh  vN n	U " SU	R
                  US.UD6$ s  snf  N7f)a  Async create an AsyncOpenAI Assistant and instantiate the Runnable.

Args:
    name: Assistant name.
    instructions: Assistant instructions.
    tools: Assistant tools. Can be passed in OpenAI format or as BaseTools.
    model: Assistant model to use.
    async_client: AsyncOpenAI client.
        Will create default async_client if not specified.

Returns:
    AsyncOpenAIAssistantRunnable configured to run using the created assistant.
ri   N)r]   r\   r$   )rK   rV   rn   ro   rp   rq   )
r&   rj   rk   rl   rm   r\   rr   rR   openai_toolsrs   s
             r'   acreate_assistant)OpenAIAssistantRunnable.acreate_assistants  s     4 $A'?'A?DEut,T2uE&++66==%	 > 
 
	 R	<R6RR F
s   A:A3+A:A8A:c                  #    U=(       d    0 n[         R                  " UR                  S5      UR                  S5      UR                  S5      S9nUR                  [	        U 5      UUR                  S5      =(       d    U R                  5       S9n U R                  (       av  UR                  S5      (       a`  U R                  US   5      I Sh  vN nU R                  R                  R                  R                  R                  " S0 UD6I Sh  vN nGOS	U;  aE  S
US   UR                  S5      S./UR                  S5      S.nU R                  X5      I Sh  vN nOSU;  aq  U R                  R                  R                  R                  R                  US	   US   S
UR                  S5      S9I Sh  vN n	U R!                  U5      I Sh  vN nOBU R                  R                  R                  R                  R                  " S0 UD6I Sh  vN nU R#                  UR$                  UR&                  5      I Sh  vN n U R-                  U5      nUR/                  U5        U$  GN GNa GN N N Nd N8! [(         a  n
UR+                  U
5        e Sn
A
ff = f! [(         a#  n
UR+                  XR1                  5       S9  e Sn
A
ff = f7f)a  Async invoke assistant.

Args:
    input: Runnable input dict that can have:
        content: User message when starting a new run.
        thread_id: Existing thread to use.
        run_id: Existing run to use. Should only be supplied when providing
            the tool output for a required action after an initial invocation.
        message_metadata: Metadata to associate with a new message.
        thread_metadata: Metadata to associate with new thread. Only relevant
            when a new thread is created.
        instructions: Overrides the instructions of the assistant.
        additional_instructions: Appends additional instructions.
        model: Override Assistant model for this run.
        tools: Override Assistant tools for this run.
        parallel_tool_calls: Allow Assistant to set parallel_tool_calls
            for this run.
        top_p: Override Assistant top_p for this run.
        temperature: Override Assistant temperature for this run.
        max_completion_tokens: Allow setting max_completion_tokens for this run.
        max_prompt_tokens: Allow setting max_prompt_tokens for this run.
        run_metadata: Metadata to associate with new run.
    config: Runnable config. Defaults to None.
    kwargs: Additional arguments.

Return:
    If self.as_agent, will return
        Union[List[OpenAIAssistantAction], OpenAIAssistantFinish].
        Otherwise, will return OpenAI types
        Union[List[ThreadMessage], List[RequiredActionFunctionToolCall]].
rw   rx   ry   rz   r~   r   r   Nr!   r   r   r   )r   r   ry   r   r   r    r   r   r$   )r   r   r   r   r   r   r`   _aparse_intermediate_stepsr\   rn   r   r   r   _acreate_thread_and_runr   rp   _acreate_run_await_for_runrq   r!   r   r   r   r   rQ   r   s               r'   ainvokeOpenAIAssistantRunnable.ainvoke  s    N 2*44"(**["9#ZZ/!'J!7

 '55$KJ':4==? 6 

(	}}+?!@!@%)%D%D./&   !--22::??SS "  E) %+',Y'7(-		2D(E! !&		*; <	 !88GG&++0088AAHH+&!),"YY'9:	 I   !--e44 !--22::??SS   ++CFFCMMBBC	))#.H
 $$X.O[  H 5 C 	&&q)	
  	&&q88:&>	s   BK>J I0AJ I3AJ I6AJ <I9=J I;AJ I=-J I?J J% K0J 3J 6J 9J ;J =J ?J 
J"JJ""K%
K/KKKc                   US   u  p#U R                  UR                  UR                  5      n[        5       nUR                  (       a8  UR                  R
                  R                   Vs1 sH  ofR                  iM     nnU VVs/ sH/  u  pxUR                  U;   d  M  [        U5      UR                  S.PM1     n	nnU	UR                  UR                  S.$ s  snf s  snnf N)outputr;   )r   r    r!   
r   r    r!   setrequired_actionr   
tool_callsrq   r;   r   
re   r   last_actionlast_outputr   required_tool_call_idstcactionr   r   s
             r'   r   1OpenAIAssistantRunnable._parse_intermediate_steps  s     $6b#9   !3!3[5J5JK!$ # 3 3 G G R R& R" R # &
 #5
"4""&<< Is6{F4G4GH"4 	 
 )!(($..
 	
&
s   +CCCc                    UR                  5        VVs0 sH  u  p#US;   d  M  X#_M     nnnU R                  R                  R                  R                  R
                  " US   4SU R                  0UD6$ s  snnf N)
rk   rm   rl   additional_instructionsparallel_tool_callstop_ptemperaturemax_completion_tokensmax_prompt_tokensrun_metadatar!   r]   )itemsr[   rn   r   r   rp   r]   re   
input_dictkvparamss        r'   r   #OpenAIAssistantRunnable._create_run  s     #((*
* AD* 	 
" {{'',,33{#
**
 
 	
#
s
   A6A6c                    UR                  5        VVs0 sH  u  p4US;   d  M  X4_M     nnnU R                  R                  R                  R                  " SU R
                  US.UD6$ s  snnf N)	rk   rm   rl   r   r   r   r   r   r   )r]   r   r$   )r   r[   rn   r   create_and_runr]   re   r   r   r   r   r   s         r'   r   .OpenAIAssistantRunnable._create_thread_and_run)  s     #((*
*
 AD* 	 
  {{''66 
**
 
 	
!
s
   A)A)c                  ^^ UR                   S:X  Ga  SS Km[        TR                  R                  R                  S5      S   5      n[        TR                  R                  R                  S5      S   5      nUS:  =(       d    US:H  =(       a    US:  mU R                  R                  R                  R                  R                  UR                  SS9nU Vs/ sH   oUR                  UR                  :X  d  M  UPM"     nnU R                  (       d  U$ U VVs/ sH  oUR                   H  owPM     M     nnnU VV	s/ sH  oUR                    H  oPM     M     n
nn	[#        UU4S jU 5       5      (       a  S	R%                  S
 U 5       5      n['        UUR                  UR                  U
S.SUR                  UR                  S9$ UR                   S:X  a  U R                  (       d   UR(                  R*                  R,                  $ / nUR(                  R*                  R,                   H  nUR.                  n [0        R2                  " UR4                  SS9n[=        U5      S:X  a  SU;   a  US   nUR?                  [A        UR8                  UUR                  SUR                  UR                  S95        M     U$ [0        RB                  " URE                  5       SS9nSUR                    SU 3n[;        U5      es  snf s  snnf s  sn	nf ! [6         a-  nSUR4                   SUR8                   3n[;        U5      UeS nAff = f)N	completedr   .      ascorderc              3     >#    U Ht  nT(       a4  [        UTR                  R                  R                  R                  5      O3[        UTR                  R                  R                  R
                  5      v   Mv     g 7fNrP   typesrn   r   TextContentBlockMessageContentText.0r   r@   version_gte_1_14s     r'   	<genexpr>8OpenAIAssistantRunnable._get_response.<locals>.<genexpr>Y  g      
  &G ( w(9(9(A(A(R(RS#))11DD  &   A;A>
c              3  J   #    U H  oR                   R                  v   M     g 7fr   textvaluer   r   s     r'   r   r   d       "LV'<<#5#5V   !#)r   r!   r    r    return_valueslogr    r!   requires_actionFstrict*Received invalid JSON function arguments:  for function __arg1rR   
tool_inputr;   r   r    r!      indentUnexpected run status: . Full run info:

)#statusr@   intversionVERSIONsplitr[   rn   r   r   listr!   r    rq   r`   r   r   alljoinr   r   r   r   functionjsonloads	argumentsr   rj   
ValueErrorlenappendr9   dumpsrQ   )re   r   major_versionminor_versionr   rF   new_messagesmsg_contentanswer
attachmentr   actions	tool_callr  argsrE   run_infor@   r   s                    @@r'   r   %OpenAIAssistantRunnable._get_response@  s    ::$ 6 6 < <S A! DEM 6 6 < <S A! DEM - 1  ":}':  {{''//88== > H ,4L8CzzSVV7KC8LL==##'3'3{{{|   '3&2s__z
_
l    
  &
 
 
 "LV"LL($!$!ff#.	 vv--
 
 ::**==**>>IIIG 00DDOO	$--1::h&8&8GD t9>h$&6>D)%]]#'%.\\"vv"%--	 P, N::chhj3'

|3GzRo{ MD ' 1D#--.nX]]OM  %S/q01s0   L=LLL?L
M(MMc                    SnU(       an  U R                   R                  R                  R                  R	                  XS9nUR
                  S;   nU(       a  [        U R                  S-  5        U(       a  Mn  W$ NT)r!   )in_progressqueuedi  )r[   rn   r   r   retriever  r   r_   re   r    r!   r   r   s        r'   r   %OpenAIAssistantRunnable._wait_for_run  sf    ++""**//888UC**(AAKd))D01	 k
 
r+   c                  #    US   u  p#U R                  UR                  UR                  5      n[        5       nUR                  (       a8  UR                  R
                  R                   Vs1 sH  ofR                  iM     nnU VVs/ sH/  u  pxUR                  U;   d  M  [        U5      UR                  S.PM1     n	nnU	UR                  UR                  S.$ s  snf s  snnf 7fr   r   r   s
             r'   r   2OpenAIAssistantRunnable._aparse_intermediate_steps  s      $6b#9   !3!3[5J5JK!$ # 3 3 G G R R& R" R # &
 #5
"4""&<< Is6{F4G4GH"4 	 
 )!(($..
 	
&
s$   A+C%-CC%C!C=(C%c                  #    UR                  5        VVs0 sH  u  p#US;   d  M  X#_M     nnnU R                  R                  R                  R                  R
                  " US   4SU R                  0UD6I S h  vN $ s  snnf  N
7fr   )r   r\   rn   r   r   rp   r]   r   s        r'   r   $OpenAIAssistantRunnable._acreate_run  s      #((*
* AD* 	 
" &&++3388??{#
**
 
 
 	
#
"
s!   BB B AB;B<Bc                   #    UR                  5        VVs0 sH  u  p4US;   d  M  X4_M     nnnU R                  R                  R                  R                  " SU R
                  US.UD6I S h  vN $ s  snnf  N
7fr   )r   r\   rn   r   r   r]   r   s         r'   r   /OpenAIAssistantRunnable._acreate_thread_and_run  s      #((*
*
 AD* 	 
  &&++33BB 
**
 
 
 	
!
 
s!   A;A3A3AA;.A9/A;c                d  ^^#    UR                   S:X  Ga  SS Km[        TR                  R                  R                  S5      S   5      n[        TR                  R                  R                  S5      S   5      nUS:  =(       d    US:H  =(       a    US:  mU R                  R                  R                  R                  R                  UR                  SS9I S h  vN nU Vs/ sH   oUR                  UR                  :X  d  M  UPM"     nnU R                  (       d  U$ U VVs/ sH  oUR                   H  owPM     M     nnn[!        UU4S jU 5       5      (       a  S	R#                  S
 U 5       5      n[%        UUR                  UR                  S.SUR                  UR                  S9$ UR                   S:X  a  U R                  (       d   UR&                  R(                  R*                  $ / n	UR&                  R(                  R*                   H  n
U
R,                  n [.        R0                  " UR2                  SS9n[;        U5      S:X  a  SU;   a  US   nU	R=                  [?        UR6                  UU
R                  SUR                  UR                  S95        M     U	$ [.        R@                  " URC                  5       SS9nSUR                    SU 3n[9        U5      e GN
s  snf s  snnf ! [4         a-  nSUR2                   SUR6                   3n[9        U5      UeS nAff = f7f)Nr   r   r   r   r   r   r   c              3     >#    U Ht  nT(       a4  [        UTR                  R                  R                  R                  5      O3[        UTR                  R                  R                  R
                  5      v   Mv     g 7fr   r   r   s     r'   r   9OpenAIAssistantRunnable._aget_response.<locals>.<genexpr>  r   r   r   c              3  J   #    U H  oR                   R                  v   M     g 7fr   r   r   s     r'   r   r-    r   r   )r   r!   r    r   r   r   Fr   r   r   r   r   r   r   r  r  )"r  r@   r  r  r  r  r\   rn   r   r   r  r!   r    rq   r`   r   r	  r
  r   r   r   r   r  r  r  r  r   rj   r  r  r  r9   r  rQ   )re   r   r  r  r   rF   r  r  r  r  r  r  r  rE   r  r@   r   s                  @@r'   _aget_response&OpenAIAssistantRunnable._aget_response  s     ::$ 6 6 < <S A! DEM 6 6 < <S A! DEM - 1  ":}':  "..33;;DDII J  H ,4L8CzzSVV7KC8LL==##'3'3{{{|    
  &
 
 
 "LV"LL($!$!ff
 vv--	 	 ::**==**>>IIIG 00DDOO	$--1::h&8&8GD t9>h$&6>D)%]]#'%.\\"vv"%--	 P, N::chhj3'

|3GzRo{ MB ' 1D#--.nX]]OM  %S/q01s\   CL0K(L0'K+K+L0'K0C L0$K6B&L0+L06
L- (L((L--L0c                <  #    SnU(       a  U R                   R                  R                  R                  R	                  UUS9I S h  vN nUR
                  S;   nU(       a+  [        R                  " U R                  S-  5      I S h  vN   U(       a  M  W$  NP N7fr  )	r\   rn   r   r   r"  r  asyncior   r_   r#  s        r'   r   &OpenAIAssistantRunnable._await_for_run(  s     ))..66;;DD# E  C **(AAKmmD$7$7$$>??? k 
 @s+   ABBA BB	BBB)r-   r   )rj   r   rk   r   rl   Sequence[Union[BaseTool, dict]]rm   r   r[   z2Optional[Union[openai.OpenAI, openai.AzureOpenAI]]rr   r   r-   rX   r   )r   rQ   r   zOptional[RunnableConfig]rr   r   r-   
OutputType)rj   r   rk   r   rl   r4  rm   r   r\   z<Optional[Union[openai.AsyncOpenAI, openai.AsyncAzureOpenAI]]rr   r   r-   rX   )r   z'list[tuple[OpenAIAssistantAction, str]]r-   rQ   )r   rQ   r-   r   )r   rQ   r   rQ   r-   r   )r   r   r-   r   )r    r   r!   r   r-   r   )r0   r1   r2   r3   r4   r   rG   r[   r5   r\   r_   r`   r   rf   r6   rt   r   r   r   r   r   r   r   r   r   r   r   r   r/  r   r7   r$   r+   r'   rX   rX      s   KZ (:;FC;'L#-#NE#;HdF'" #  FJGG G /	G
 G CG G 
!G GB  ,0^^ )^ 	^
 
^ ^@  !S!S !S /	!S
 !S
!S !S 
!!S !SF  ,0aa )a 	a
 
a aF
C
 

,
0
.M^
C
 

,
0
.IV
r+   rX   )r-   zopenai.OpenAI)r-   zopenai.AsyncOpenAI)rR   :Union[dict[str, Any], type[BaseModel], Callable, BaseTool]r-   r.   )rR   r6  r-   zdict[str, Any])4
__future__r   r2  r  collections.abcr   r   timer   typingr   r   r	   r
   r   langchain_core.agentsr   r   langchain_core.callbacksr   langchain_core.loadr   langchain_core.runnablesr   r   r   langchain_core.toolsr   %langchain_core.utils.function_callingr   pydanticr   r   r   typing_extensionsr   r   r@   openai.types.beta.threadsr   <openai.types.beta.threads.required_action_function_tool_callr   r   r9   rG   rK   rT   rV   r  r5  rQ   rX   r$   r+   r'   <module>rE     s    "   $     ; 4 % X X ) H 6 6 ,7
K *K .) ) 	
D			
(
D
(
( 		)*,
d
243CD d
r+   