§
    ™Štj(y  ã                  ó´  — d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlmZ d dlmZ d dlmZmZmZ d dl m!Z!m"Z" erd dl#Z#d dl$m%Z% d dl&m'Z'  G d„ de¦  «        Z( G d„ de¦  «        Z)d$d„Z*d%d„Z+d&d„Z,d'd„Z-e.e)         e(z  e.d          z  e.d!         z  Z/ G d"„ d#ee0e/f         ¦  «        Z1dS )(é    )ÚannotationsN)ÚCallableÚSequence)ÚJSONDecodeError)Úsleep)ÚTYPE_CHECKINGÚAny)ÚAgentActionÚAgentFinish)ÚCallbackManager)Údumpd)ÚRunnableConfigÚRunnableSerializableÚensure_config)ÚBaseTool)Úconvert_to_openai_tool)Ú	BaseModelÚFieldÚmodel_validator)ÚSelfÚoverride)ÚThreadMessage)ÚRequiredActionFunctionToolCallc                  ó@   — e Zd ZU dZded<   ded<   ed	d„¦   «         ZdS )
ÚOpenAIAssistantFinishzoAgentFinish with run and thread metadata.

    Args:
        run_id: Run id.
        thread_id: Thread id.
    ÚstrÚrun_idÚ	thread_idÚreturnÚboolc                ó   — dS ©z]Check if the class is serializable by LangChain.

        Returns:
            False
        F© ©Úclss    úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_classic/agents/openai_assistant/base.pyÚis_lc_serializablez(OpenAIAssistantFinish.is_lc_serializable+   ó	   € ð ˆuó    N©r   r    ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Úclassmethodr'   r#   r)   r&   r   r       sR   € € € € € € ðð ð €K€K�KØ€N€N�Nàðð ð ñ „[ðð ð r)   r   c                  óJ   — e Zd ZU dZded<   ded<   ded<   ed
d„¦   «         Zd	S )ÚOpenAIAssistantActionz³AgentAction with info needed to submit custom tool output to existing run.

    Args:
        tool_call_id: Tool call id.
        run_id: Run id.
        thread_id: Thread id
    r   Útool_call_idr   r   r   r    c                ó   — dS r"   r#   r$   s    r&   r'   z(OpenAIAssistantAction.is_lc_serializableB   r(   r)   Nr*   r+   r#   r)   r&   r3   r3   5   s^   € € € € € € ðð ð ÐÐÑØ€K€K�KØ€N€N�Nàðð ð ñ „[ðð ð r)   r3   r   úopenai.OpenAIc                 ó°   — 	 dd l }  | j        ¦   «         S # t          $ r}d}t          |¦  «        |‚d }~wt          $ r}d}t          |¦  «        |‚d }~ww xY w©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©r9   ÚeÚmsgs      r&   Ú_get_openai_clientr@   L   s„   € ð)ØˆˆˆàˆvŒ}‰ŒÐøÝð &ð &ð &ØRˆÝ˜#ÑÔ AÐ%øøøøÝð )ð )ð )ð<ð 	õ ˜SÑ!Ô! qÐ(øøøøð)øøøó   ‚ •
AŸ1±A¾AÁAúopenai.AsyncOpenAIc                 ó°   — 	 dd l }  | j        ¦   «         S # t          $ r}d}t          |¦  «        |‚d }~wt          $ r}d}t          |¦  «        |‚d }~ww xY wr8   )r9   ÚAsyncOpenAIr;   r<   r=   s      r&   Ú_get_openai_async_clientrE   \   s‡   € ð)Øˆˆˆà!ˆvÔ!Ñ#Ô#Ð#øÝð &ð &ð &ØRˆÝ˜#ÑÔ AÐ%øøøøÝð )ð )ð )ð<ð 	õ ˜SÑ!Ô! qÐ(øøøøð)øøørA   Útoolú6dict[str, Any] | type[BaseModel] | Callable | BaseToolr    c                óL   — d}t          | t          ¦  «        od| v o	| d         |v S )z<Determine if tool corresponds to OpenAI Assistants built-in.)Úcode_interpreterÚfile_searchÚtype)Ú
isinstanceÚdict)rF   Úassistants_builtin_toolss     r&   Ú_is_assistants_builtin_toolrO   l   s;   € ð  CÐå�4�ÑÔð 	7Ø�tˆ^ð	7à�&Œ\Ð5Ð5ðr)   údict[str, Any]c                óB   — t          | ¦  «        r| S t          | ¦  «        S )z¨Convert a raw function/class to an OpenAI tool.

    Note that OpenAI assistants supports several built-in tools,
    such as "code_interpreter" and "file_search".
    )rO   r   )rF   s    r&   Ú_get_assistants_toolrR   x   s'   € õ # 4Ñ(Ô(ð ØˆÝ! $Ñ'Ô'Ð'r)   r   r   c                  ód  — e Zd ZU dZ ee¬¦  «        Zded<   	 dZded<   	 ded<   	 d	Z	d
ed<   	 dZ
ded<   	  ed¬¦  «        d8d„¦   «         Zeddœd9d„¦   «         Ze	 d:d;d"„¦   «         Zedd#œd<d%„¦   «         Ze	 d:d;d&„¦   «         Zd=d)„Zd>d+„Zd?d-„Zd@d/„ZdAd2„Zd=d3„Zd>d4„Zd?d5„Zd@d6„ZdAd7„ZdS )BÚOpenAIAssistantRunnablea	  Run an OpenAI Assistant.

    Example using OpenAI tools:
        ```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:
        ```python
        from langchain_experimental.openai_assistant import OpenAIAssistantRunnable
        from langchain_classic.agents import AgentExecutor
        from langchain_classic.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:
        ```python
        from langchain_experimental.openai_assistant import OpenAIAssistantRunnable
        from langchain_classic.agents import AgentExecutor
        from langchain_core.agents import AgentFinish
        from langchain_classic.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)Úmoder   r   c                ó`   — | j         €&dd l}| j        j        } |j        |¬¦  «        | _         | S )Nr   )Úapi_key)rW   r9   rV   r_   rD   )Úselfr9   r_   s      r&   Ú_validate_async_clientz.OpenAIAssistantRunnable._validate_async_clientö   s;   € àÔÐ$ØˆMˆMˆMà”kÔ)ˆGØ 2 Ô 2¸7Ð CÑ CÔ CˆDÔØˆr)   )rV   ÚnameÚinstructionsÚtoolsúSequence[BaseTool | dict]Úmodelú)openai.OpenAI | openai.AzureOpenAI | NoneÚkwargsc               óœ   — |pt          ¦   «         }|j        j                             ||d„ |D ¦   «         |¬¦  «        } | d|j        |dœ|¤ŽS )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.
        c                ó,   — g | ]}t          |¦  «        ‘ŒS r#   ©rR   ©Ú.0rF   s     r&   ú
<listcomp>z<OpenAIAssistantRunnable.create_assistant.<locals>.<listcomp>  s!   € Ð@Ð@Ð@°$Õ'¨Ñ-Ô-Ð@Ð@Ð@r)   ©rb   rc   rd   rf   )rX   rV   r#   )r@   ÚbetaÚ
assistantsÚcreateÚid)r%   rb   rc   rd   rf   rV   rh   Ú	assistants           r&   Úcreate_assistantz(OpenAIAssistantRunnable.create_assistantÿ   so   € ð2 Ð/Õ-Ñ/Ô/ˆØ”KÔ*×1Ò1ØØ%Ø@Ð@¸%Ð@Ñ@Ô@Øð	 2ñ 
ô 
ˆ	ð ˆsÐF 	¤°VÐFÐF¸vÐFÐFÐFr)   ÚinputrM   ÚconfigúRunnableConfig | NoneÚ
OutputTypec                óH  — t          |¦  «        }t          j        |                     d¦  «        |                     d¦  «        |                     d¦  «        ¬¦  «        }|                     t          | ¦  «        ||                     d¦  «        p|                      ¦   «         ¬¦  «        }	 | j        rR|                     d¦  «        r=|                      |d         ¦  «        } | j	        j
        j        j        j        di |¤Ž}nìd|vrad	|d
         |                     d¦  «        |                     d¦  «        dœg|                     d¦  «        dœ}|                      ||¦  «        }n‡d|vrb| j	        j
        j        j                             |d         |d
         d	|                     d¦  «        ¬¦  «        }	|                      |¦  «        }n! | j	        j
        j        j        j        di |¤Ž}|                      |j        |j        ¦  «        }n(# t*          $ r}
|                     |
¦  «         ‚ d}
~
ww xY w	 |                      |¦  «        }|                     |¦  «         |S # t*          $ r/}
|                     |
|                     ¦   «         ¬¦  «         ‚ d}
~
ww xY w)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.
            **kwargs: Additional arguments.

        Returns:
            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©rb   Úintermediate_stepsr   ÚuserÚcontentÚmessage_metadataÚattachments)Úroler†   r}   rˆ   Úthread_metadata©Úmessagesr}   r   ©r†   r‰   r}   N©r}   r#   )r   r   Ú	configureÚgetÚon_chain_startr   Úget_namer[   Ú_parse_intermediate_stepsrV   rp   ÚthreadsÚrunsÚsubmit_tool_outputsÚ_create_thread_and_runrŒ   rr   Ú_create_runÚ_wait_for_runrs   r   ÚBaseExceptionÚon_chain_errorÚ_get_responseÚon_chain_endrM   ©r`   rv   rw   rh   Úcallback_managerÚrun_managerÚtool_outputsÚrunÚthreadÚ_r>   Úresponses               r&   ÚinvokezOpenAIAssistantRunnable.invoke!  sÜ  € õN ˜vÑ&Ô&ˆÝ*Ô4Ø"(§*¢*¨[Ñ"9Ô"9Ø#ŸZšZ¨Ñ/Ô/Ø!'§¢¨JÑ!7Ô!7ð
ñ 
ô 
Ðð
 '×5Ò5Ý�$‰KŒKØØ—’˜JÑ'Ô'Ð:¨4¯=ª=©?¬?ð 6ñ 
ô 
ˆð
%	àŒ}ð Q §¢Ð+?Ñ!@Ô!@ð QØ#×=Ò=ØÐ.Ô/ñ ô  �ð H�d”kÔ&Ô.Ô3ÔGÐWÐWÈ,ÐWÐW��à EÐ)Ð)ð %+Ø',¨YÔ'7Ø(-¯	ª	Ð2DÑ(EÔ(EØ+0¯9ª9°]Ñ+CÔ+Cð	ð ð!ð !&§	¢	Ð*;Ñ <Ô <ð
ð 
�ð ×1Ò1°%¸Ñ@Ô@��à Ð&Ð&Ø”KÔ$Ô,Ô5×<Ò<Ø˜+Ô&Ø! )Ô,ØØ"ŸYšYÐ'9Ñ:Ô:ð	 =ñ ô �ð ×&Ò& uÑ-Ô-��ð H�d”kÔ&Ô.Ô3ÔGÐPÐPÈ%ÐPÐP�Ø×$Ò$ S¤V¨S¬]Ñ;Ô;ˆCˆCøÝð 	ð 	ð 	Ø×&Ò& qÑ)Ô)Ð)Øøøøøð	øøøð	à×)Ò)¨#Ñ.Ô.ˆHð
 ×$Ò$ XÑ.Ô.Ð.ØˆOøõ ð 	ð 	ð 	Ø×&Ò& q°3·8²8±:´:Ð&Ñ>Ô>Ð>Øøøøøð	øøøs1   Â-E%H È
H8ÈH3È3H8È<I( É(
J!É2*JÊJ!)rW   ú3openai.AsyncOpenAI | openai.AsyncAzureOpenAI | Nonec             ‹  ó°   K  — |pt          ¦   «         }d„ |D ¦   «         }|j        j                             ||||¬¦  «        ƒ d{V —†} | d|j        |dœ|¤ŽS )a5  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.
            **kwargs: Additional arguments.

        Returns:
            AsyncOpenAIAssistantRunnable configured to run using the created assistant.
        c                ó,   — g | ]}t          |¦  «        ‘ŒS r#   rk   rl   s     r&   rn   z=OpenAIAssistantRunnable.acreate_assistant.<locals>.<listcomp>�  s!   € ÐEÐEÐE°tÕ,¨TÑ2Ô2ÐEÐEÐEr)   ro   N)rX   rW   r#   )rE   rp   rq   rr   rs   )	r%   rb   rc   rd   rf   rW   rh   Úopenai_toolsrt   s	            r&   Úacreate_assistantz)OpenAIAssistantRunnable.acreate_assistantƒ  s—   è è € ð2 $ÐAÕ'?Ñ'AÔ'AˆØEÐE¸uÐEÑEÔEˆØ&Ô+Ô6×=Ò=ØØ%ØØð	 >ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆ	ð ˆsÐR 	¤¸<ÐRÐRÈ6ÐRÐRÐRr)   c              ‹  ón  K  — |pi }t          j        |                     d¦  «        |                     d¦  «        |                     d¦  «        ¬¦  «        }|                     t	          | ¦  «        ||                     d¦  «        p|                      ¦   «         ¬¦  «        }	 | j        r^|                     d¦  «        rI|                      |d         ¦  «        ƒ d{V —†} | j        j	        j
        j        j        di |¤Žƒ d{V —†}nðd	|vrSd
|d         |                     d¦  «        dœg|                     d¦  «        dœ}|                      ||¦  «        ƒ d{V —†}n™d|vrn| j        j	        j
        j                             |d	         |d         d
|                     d¦  «        ¬¦  «        ƒ d{V —†}	|                      |¦  «        ƒ d{V —†}n' | j        j	        j
        j        j        di |¤Žƒ d{V —†}|                      |j        |j        ¦  «        ƒ d{V —†}n(# t(          $ r}
|                     |
¦  «         ‚ d}
~
ww xY w	 |                      |¦  «        ƒ d{V —†}|                     |¦  «         |S # t(          $ r/}
|                     |
|                     ¦   «         ¬¦  «         ‚ d}
~
ww xY w)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.
            kwargs: Additional arguments.

        Returns:
            If self.as_agent, will return
                Union[List[OpenAIAssistantAction], OpenAIAssistantFinish].
                Otherwise, will return OpenAI types
                Union[List[ThreadMessage], List[RequiredActionFunctionToolCall]].
        r{   r|   r}   r~   r‚   rƒ   r„   Nr   r…   r†   r‡   )r‰   r†   r}   rŠ   r‹   r   r�   rŽ   r#   )r   r�   r�   r‘   r   r’   r[   Ú_aparse_intermediate_stepsrW   rp   r”   r•   r–   Ú_acreate_thread_and_runrŒ   rr   Ú_acreate_runÚ_await_for_runrs   r   rš   r›   Ú_aget_responser�   rM   rž   s               r&   ÚainvokezOpenAIAssistantRunnable.ainvoke¦  s¥  è è € ðL �˜2ˆÝ*Ô4Ø"(§*¢*¨[Ñ"9Ô"9Ø#ŸZšZ¨Ñ/Ô/Ø!'§¢¨JÑ!7Ô!7ð
ñ 
ô 
Ðð
 '×5Ò5Ý�$‰KŒKØØ—’˜JÑ'Ô'Ð:¨4¯=ª=©?¬?ð 6ñ 
ô 
ˆð
(	àŒ}ð " §¢Ð+?Ñ!@Ô!@ð "Ø%)×%DÒ%DØÐ.Ô/ñ&ô &ð  ð  ð  ð  ð  ð  �ð T˜DÔ-Ô2Ô:Ô?ÔSð ð Ø"ðð ð ð ð ð ð ð ��ð  EÐ)Ð)ð %+Ø',¨YÔ'7Ø(-¯	ª	Ð2DÑ(EÔ(Eðð ð!ð !&§	¢	Ð*;Ñ <Ô <ð	ð 	�ð !×8Ò8¸ÀÑGÔGÐGÐGÐGÐGÐGÐG��à Ð&Ð&ØÔ+Ô0Ô8ÔA×HÒHØ˜+Ô&Ø! )Ô,ØØ"ŸYšYÐ'9Ñ:Ô:ð	 Iñ ô ð ð ð ð ð ð �ð !×-Ò-¨eÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4��ð T˜DÔ-Ô2Ô:Ô?ÔSð ð Øðð ð ð ð ð ð ð �ð ×+Ò+¨C¬F°C´MÑBÔBÐBÐBÐBÐBÐBÐBˆCˆCøÝð 	ð 	ð 	Ø×&Ò& qÑ)Ô)Ð)Øøøøøð	øøøð	à!×0Ò0°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5ˆHð
 ×$Ò$ XÑ.Ô.Ð.ØˆOøõ ð 	ð 	ð 	Ø×&Ò& q°3·8²8±:´:Ð&Ñ>Ô>Ð>Øøøøøð	øøøs1   Â$E;H  È 
IÈ*I É IÉ	I; É;
J4Ê*J/Ê/J4r„   ú'list[tuple[OpenAIAssistantAction, str]]c                óö   ‡— |d         \  }}|                       |j        |j        ¦  «        }t          ¦   «         Š|j        rd„ |j        j        j        D ¦   «         Šˆfd„|D ¦   «         }||j        |j        dœS )Néÿÿÿÿc                ó   — h | ]	}|j         ’Œ
S r#   ©rs   ©rm   Útcs     r&   ú	<setcomp>zDOpenAIAssistantRunnable._parse_intermediate_steps.<locals>.<setcomp>  ó'   € ð &ð &ð &Ø�”ð&ð &ð &r)   c                óV   •— g | ]%\  }}|j         ‰v ¯t          |¦  «        |j         d œ‘Œ&S ©)Úoutputr4   ©r4   r   ©rm   Úactionr¾   Úrequired_tool_call_idss      €r&   rn   zEOpenAIAssistantRunnable._parse_intermediate_steps.<locals>.<listcomp>  óG   ø€ ð 
ð 
ð 
á�˜ØÔ"Ð&<Ð<Ð<õ ˜6‘{”{°FÔ4GÐHÐHà<Ð<Ð<r)   ©r¡   r   r   ©r™   r   r   ÚsetÚrequired_actionr–   Ú
tool_calls©r`   r„   Úlast_actionr¤   r¢   r¡   rÂ   s         @r&   r“   z1OpenAIAssistantRunnable._parse_intermediate_steps
  s³   ø€ ð ,¨BÔ/‰ˆ�QØ× Ò  Ô!3°[Ô5JÑKÔKˆÝ!$¡¤ÐØÔð 	ð&ð &Ø #Ô 3Ô GÔ Rð&ñ &ô &Ð"ð
ð 
ð 
ð 
à"4ð
ñ 
ô 
ˆð )Ø!Ô(Ø$Ô.ð
ð 
ð 	
r)   Ú
input_dictc                óœ   — d„ |                      ¦   «         D ¦   «         } | j        j        j        j        j        |d         fd| j        i|¤ŽS )Nc                ó"   — i | ]\  }}|d v ¯	||“ŒS ©)
rc   rf   rd   Úadditional_instructionsÚparallel_tool_callsÚtop_pÚtemperatureÚmax_completion_tokensÚmax_prompt_tokensÚrun_metadatar#   ©rm   ÚkÚvs      r&   ú
<dictcomp>z7OpenAIAssistantRunnable._create_run.<locals>.<dictcomp>!  ó@   € ð 
ð 
ð 
á��1Øððð ð ˆqðð ð r)   r   rX   )ÚitemsrV   rp   r”   r•   rr   rX   ©r`   rË   Úparamss      r&   r˜   z#OpenAIAssistantRunnable._create_run   sr   € ð
ð 
à"×(Ò(Ñ*Ô*ð
ñ 
ô 
ˆð" 4ˆtŒ{ÔÔ'Ô,Ô3Ø�{Ô#ð
ð 
àÔ*ð
ð ð
ð 
ð 	
r)   r£   c                ó†   — d„ |                      ¦   «         D ¦   «         } | j        j        j        j        d| j        |dœ|¤ŽS )Nc                ó"   — i | ]\  }}|d v ¯	||“ŒS ©)	rc   rf   rd   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   r#   rÖ   s      r&   rÙ   zBOpenAIAssistantRunnable._create_thread_and_run.<locals>.<dictcomp>9  ó@   € ð 
ð 
ð 
á��1Øð
ðð ð ˆqðð ð r)   ©rX   r£   r#   )rÛ   rV   rp   r”   Úcreate_and_runrX   ©r`   rË   r£   rÝ   s       r&   r—   z.OpenAIAssistantRunnable._create_thread_and_run8  sj   € ð
ð 
à"×(Ò(Ñ*Ô*ð
ñ 
ô 
ˆð  7ˆtŒ{ÔÔ'Ô6ð 
ØÔ*Øð
ð 
ð ð
ð 
ð 	
r)   r¢   c                ó  ‡‡‡— ‰j         dk    �r@dd lŠt          ‰j        j                             d¦  «        d         ¦  «        }t          ‰j        j                             d¦  «        d         ¦  «        }|dk    p|dk    o|dk    Š| j        j        j        j	         
                    ‰j        d¬¦  «        }ˆfd„|D ¦   «         }| j        s|S d	„ |D ¦   «         }d
„ |D ¦   «         }t          ˆˆfd„|D ¦   «         ¦  «        rd                     d„ |D ¦   «         ¦  «        }t          |‰j        ‰j        |dœd‰j        ‰j        ¬¦  «        S ‰j         dk    rã| j        s‰j        j        j        S g }‰j        j        j        D ]µ}	|	j        }
	 t+          j        |
j        d¬¦  «        }n4# t0          $ r'}d|
j        › d|
j        › �}t5          |¦  «        |‚d }~ww xY wt7          |¦  «        dk    rd|v r|d         }|                     t;          |
j        ||	j        d‰j        ‰j        ¬¦  «        ¦  «         Œ¶|S t+          j        ‰                     ¦   «         d¬¦  «        }d‰j         › d|› �}t5          |¦  «        ‚)NÚ	completedr   ú.é   é   Úasc©Úorderc                ó4   •— g | ]}|j         ‰j        k    ¯|‘ŒS r#   ©r   rs   ©rm   r?   r¢   s     €r&   rn   z9OpenAIAssistantRunnable._get_response.<locals>.<listcomp>_  ó'   ø€ ÐLÐLÐL C°s´zÀSÄVÒ7KÐ7K˜CÐ7KÐ7KÐ7Kr)   c                ó&   — g | ]}|j         D ]}|‘ŒŒS r#   ©r†   ©rm   r?   Úmsg_contents      r&   rn   z9OpenAIAssistantRunnable._get_response.<locals>.<listcomp>b  ó;   € ð ð ð Ø #ÀsÄ{ðð Ø8C�ðð ð ð r)   c                ó&   — g | ]}|j         D ]}|‘ŒŒS r#   )rˆ   )rm   r?   Ú
attachments      r&   rn   z9OpenAIAssistantRunnable._get_response.<locals>.<listcomp>e  s;   € ð ð ð Ø"ÀSÄ_ðð Ø7A�
ðð ð ð r)   c              3  ó¬   •K  — | ]N}‰r$t          |‰j        j        j        j        ¦  «        n#t          |‰j        j        j        j        ¦  «        V — ŒOd S ©N©rL   Útypesrp   r”   ÚTextContentBlockÚMessageContentText©rm   r†   r9   Úversion_gte_1_14s     €€r&   ú	<genexpr>z8OpenAIAssistantRunnable._get_response.<locals>.<genexpr>h  óv   øè è € ð 
ð 
ð ð (ð•J˜w¨¬Ô(9Ô(AÔ(RÑSÔSÐSå#ØØœÔ)Ô1ÔDñô ð	
ð 
ð 
ð 
ð 
ð 
r)   ú
c              3  ó.   K  — | ]}|j         j        V — Œd S rù   ©ÚtextÚvalue©rm   r†   s     r&   r   z8OpenAIAssistantRunnable._get_response.<locals>.<genexpr>s  ó'   è è € Ð"LÐ"L¸' 7¤<Ô#5Ð"LÐ"LÐ"LÐ"LÐ"LÐ"Lr)   )r¾   r   r   rˆ   Ú ©Úreturn_valuesÚlogr   r   Úrequires_actionF©Ústrictú*Received invalid JSON function arguments: ú for function Ú__arg1©rF   Ú
tool_inputr4   r  r   r   é   ©ÚindentúUnexpected run status: ú. Full run info:

) Ústatusr9   ÚintÚversionÚVERSIONÚsplitrV   rp   r”   rŒ   Úlistr   r[   ÚallÚjoinr   rs   rÇ   r–   rÈ   ÚfunctionÚjsonÚloadsÚ	argumentsr   rb   Ú
ValueErrorÚlenÚappendr3   ÚdumpsrM   )r`   r¢   Úmajor_versionÚminor_versionrŒ   Únew_messagesÚanswerrˆ   ÚactionsÚ	tool_callr"  Úargsr>   r?   Úrun_infor9   rÿ   s    `             @@r&   rœ   z%OpenAIAssistantRunnable._get_responseO  sA  øøø€ ð Œ:˜Ò$Ñ$ØˆMˆMˆMå ¤Ô 6× <Ò <¸SÑ AÔ AÀ!Ô DÑEÔEˆMÝ ¤Ô 6× <Ò <¸SÑ AÔ AÀ!Ô DÑEÔEˆMØ -°Ò 1ð  Ø Ò"Ð: }¸Ò':ð ð ”{Ô'Ô/Ô8×=Ò=Ø”Øð >ñ ô ˆHð MÐLÐLÐL¨8ÐLÑLÔLˆLØ”=ð $Ø#Ð#ðð Ø'3ðñ ô ˆFðð Ø&2ðñ ô ˆKõ ð 
ð 
ð 
ð 
ð 
ð  &ð
ñ 
ô 
ñ 
ô 
ð Mð ŸšÐ"LÐ"LÀVÐ"LÑ"LÔ"LÑLÔL�Ý(à$Ø!$¤Ø!œfØ#.ð	ð ð Ø”vØœ-ð
ñ 
ô 
ð 
ð Œ:Ð*Ò*Ð*Ø”=ð JØÔ*Ô>ÔIÐIØˆGØ Ô0ÔDÔOð ð �	Ø$Ô-�ð1Ýœ: hÔ&8ÀÐGÑGÔG�D�DøÝ&ð 1ð 1ð 1ðMØ#Ô-ðMð MØ=E¼]ðMð Mð õ % S™/œ/¨qÐ0øøøøð1øøøõ �t‘9”9 ’>�> h°$Ð&6Ð&6Ø œ>�DØ—’Ý)Ø%œ]Ø#'Ø%.¤\ØØ"œvØ"%¤-ðñ ô ñ	ô 	ð 	ð 	ð ˆNÝ”:˜cŸhšh™jœj°Ð3Ñ3Ô3ˆØR¨¬
ÐRÐRÈÐRÐRˆÝ˜‰oŒoÐs   ÆF,Æ,
GÆ6"GÇGr   r   c                ó¬   — d}|rO| j         j        j        j                             ||¬¦  «        }|j        dv }|rt          | j        dz  ¦  «         |°O|S ©NT)r   )Úin_progressÚqueuediè  )rV   rp   r”   r•   Úretriever  r   rZ   ©r`   r   r   r4  r¢   s        r&   r™   z%OpenAIAssistantRunnable._wait_for_runž  sn   € ØˆØð 	2Ø”+Ô"Ô*Ô/×8Ò8¸È9Ð8ÑUÔUˆCØœ*Ð(AÐAˆKØð 2Ý�dÔ)¨DÑ0Ñ1Ô1Ð1ð	 ð 	2ð
 ˆ
r)   c              ƒ  óú   ‡K  — |d         \  }}|                       |j        |j        ¦  «        }t          ¦   «         Š|j        rd„ |j        j        j        D ¦   «         Šˆfd„|D ¦   «         }||j        |j        dœS )Nrµ   c                ó   — h | ]	}|j         ’Œ
S r#   r·   r¸   s     r&   rº   zEOpenAIAssistantRunnable._aparse_intermediate_steps.<locals>.<setcomp>¯  r»   r)   c                óV   •— g | ]%\  }}|j         ‰v ¯t          |¦  «        |j         d œ‘Œ&S r½   r¿   rÀ   s      €r&   rn   zFOpenAIAssistantRunnable._aparse_intermediate_steps.<locals>.<listcomp>²  rÃ   r)   rÄ   rÅ   rÉ   s         @r&   r­   z2OpenAIAssistantRunnable._aparse_intermediate_steps§  s·   øè è € ð ,¨BÔ/‰ˆ�QØ× Ò  Ô!3°[Ô5JÑKÔKˆÝ!$¡¤ÐØÔð 	ð&ð &Ø #Ô 3Ô GÔ Rð&ñ &ô &Ð"ð
ð 
ð 
ð 
à"4ð
ñ 
ô 
ˆð )Ø!Ô(Ø$Ô.ð
ð 
ð 	
r)   c              ƒ  ó¬   K  — d„ |                      ¦   «         D ¦   «         } | j        j        j        j        j        |d         fd| j        i|¤Žƒ d {V —†S )Nc                ó"   — i | ]\  }}|d v ¯	||“ŒS rÎ   r#   rÖ   s      r&   rÙ   z8OpenAIAssistantRunnable._acreate_run.<locals>.<dictcomp>¾  rÚ   r)   r   rX   )rÛ   rW   rp   r”   r•   rr   rX   rÜ   s      r&   r¯   z$OpenAIAssistantRunnable._acreate_run½  s–   è è € ð
ð 
à"×(Ò(Ñ*Ô*ð
ñ 
ô 
ˆð" @�TÔ&Ô+Ô3Ô8Ô?Ø�{Ô#ð
ð 
àÔ*ð
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r)   c              ƒ  ó–   K  — d„ |                      ¦   «         D ¦   «         } | j        j        j        j        d| j        |dœ|¤Žƒ d {V —†S )Nc                ó"   — i | ]\  }}|d v ¯	||“ŒS rà   r#   rÖ   s      r&   rÙ   zCOpenAIAssistantRunnable._acreate_thread_and_run.<locals>.<dictcomp>Ö  rá   r)   râ   r#   )rÛ   rW   rp   r”   rã   rX   rä   s       r&   r®   z/OpenAIAssistantRunnable._acreate_thread_and_runÕ  sŽ   è è € ð
ð 
à"×(Ò(Ñ*Ô*ð
ñ 
ô 
ˆð  C�TÔ&Ô+Ô3ÔBð 
ØÔ*Øð
ð 
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r)   c              ƒ  óú  ‡‡‡K  — ‰j         dk    �r9dd lŠt          ‰j        j                             d¦  «        d         ¦  «        }t          ‰j        j                             d¦  «        d         ¦  «        }|dk    p|dk    o|dk    Š| j        j        j        j	         
                    ‰j        d¬¦  «        ƒ d {V —†}ˆfd„|D ¦   «         }| j        s|S d	„ |D ¦   «         }t          ˆˆfd
„|D ¦   «         ¦  «        rd                     d„ |D ¦   «         ¦  «        }t          |‰j        ‰j        dœd‰j        ‰j        ¬¦  «        S ‰j         dk    rã| j        s‰j        j        j        S g }‰j        j        j        D ]µ}|j        }		 t+          j        |	j        d¬¦  «        }
n4# t0          $ r'}d|	j        › d|	j        › �}t5          |¦  «        |‚d }~ww xY wt7          |
¦  «        dk    rd|
v r|
d         }
|                     t;          |	j        |
|j        d‰j        ‰j        ¬¦  «        ¦  «         Œ¶|S t+          j        ‰                     ¦   «         d¬¦  «        }d‰j         › d|› �}t5          |¦  «        ‚)Nræ   r   rç   rè   ré   rê   rë   c                ó4   •— g | ]}|j         ‰j        k    ¯|‘ŒS r#   rî   rï   s     €r&   rn   z:OpenAIAssistantRunnable._aget_response.<locals>.<listcomp>ü  rð   r)   c                ó&   — g | ]}|j         D ]}|‘ŒŒS r#   rò   ró   s      r&   rn   z:OpenAIAssistantRunnable._aget_response.<locals>.<listcomp>ÿ  rõ   r)   c              3  ó¬   •K  — | ]N}‰r$t          |‰j        j        j        j        ¦  «        n#t          |‰j        j        j        j        ¦  «        V — ŒOd S rù   rú   rþ   s     €€r&   r   z9OpenAIAssistantRunnable._aget_response.<locals>.<genexpr>  r  r)   r  c              3  ó.   K  — | ]}|j         j        V — Œd S rù   r  r  s     r&   r   z9OpenAIAssistantRunnable._aget_response.<locals>.<genexpr>  r  r)   )r¾   r   r   r	  r
  r  Fr  r  r  r  r  r  r  r  r  ) r  r9   r  r  r  r  rW   rp   r”   rŒ   r  r   r[   r   r!  r   rs   rÇ   r–   rÈ   r"  r#  r$  r%  r   rb   r&  r'  r(  r3   r)  rM   )r`   r¢   r*  r+  rŒ   r,  r-  r.  r/  r"  r0  r>   r?   r1  r9   rÿ   s    `            @@r&   r±   z&OpenAIAssistantRunnable._aget_responseì  sD  øøøè è € ð Œ:˜Ò$Ñ$ØˆMˆMˆMå ¤Ô 6× <Ò <¸SÑ AÔ AÀ!Ô DÑEÔEˆMÝ ¤Ô 6× <Ò <¸SÑ AÔ AÀ!Ô DÑEÔEˆMØ -°Ò 1ð  Ø Ò"Ð: }¸Ò':ð ð "Ô.Ô3Ô;ÔD×IÒIØ”Øð Jñ ô ð ð ð ð ð ð ˆHð MÐLÐLÐL¨8ÐLÑLÔLˆLØ”=ð $Ø#Ð#ðð Ø'3ðñ ô ˆFõ ð 
ð 
ð 
ð 
ð 
ð  &ð
ñ 
ô 
ñ 
ô 
ð Mð ŸšÐ"LÐ"LÀVÐ"LÑ"LÔ"LÑLÔL�Ý(à$Ø!$¤Ø!œfðð ð
 Ø”vØœ-ð	ñ 	ô 	ð 	ð Œ:Ð*Ò*Ð*Ø”=ð JØÔ*Ô>ÔIÐIØˆGØ Ô0ÔDÔOð ð �	Ø$Ô-�ð1Ýœ: hÔ&8ÀÐGÑGÔG�D�DøÝ&ð 1ð 1ð 1ðMØ#Ô-ðMð MØ=E¼]ðMð Mð õ % S™/œ/¨qÐ0øøøøð1øøøõ �t‘9”9 ’>�> h°$Ð&6Ð&6Ø œ>�DØ—’Ý)Ø%œ]Ø#'Ø%.¤\ØØ"œvØ"%¤-ðñ ô ñ	ô 	ð 	ð 	ð ˆNÝ”:˜cŸhšh™jœj°Ð3Ñ3Ô3ˆØR¨¬
ÐRÐRÈÐRÐRˆÝ˜‰oŒoÐs   ÆF'Æ'
GÆ1"GÇGc              ƒ  óÒ   K  — d}|r`| j         j        j        j                             ||¬¦  «        ƒ d {V —†}|j        dv }|r"t          j        | j        dz  ¦  «        ƒ d {V —† |°`|S r3  )	rW   rp   r”   r•   r6  r  Úasyncior   rZ   r7  s        r&   r°   z&OpenAIAssistantRunnable._await_for_run7  s³   è è € ØˆØð 	@ØÔ)Ô.Ô6Ô;×DÒDØØ#ð Eñ ô ð ð ð ð ð ð ˆCð œ*Ð(AÐAˆKØð @Ý”m DÔ$7¸$Ñ$>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ð ð 	@ð ˆ
r)   )r   r   )rb   r   rc   r   rd   re   rf   r   rV   rg   rh   r	   r   rT   rù   )rv   rM   rw   rx   rh   r	   r   ry   )rb   r   rc   r   rd   re   rf   r   rW   r§   rh   r	   r   rT   )r„   r³   r   rM   )rË   rM   r   r	   )rË   rM   r£   rM   r   r	   )r¢   r	   r   r	   )r   r   r   r   r   r	   )r,   r-   r.   r/   r   r@   rV   r0   rW   rZ   r[   r   ra   r1   ru   r   r¦   r«   r²   r“   r˜   r—   rœ   r™   r­   r¯   r®   r±   r°   r#   r)   r&   rT   rT   �   s_  € € € € € € ð[ð [ðz �%Ð(:Ð;Ñ;Ô;€FÐ;Ð;Ð;Ñ;Ø+Ø€LÐÐÐÑØ1ØÐÐÑØØ#€NÐ#Ð#Ð#Ñ#Ø;Ø€HÐÐÐÑØHà€_˜'Ð"Ñ"Ô"ðð ð ñ #Ô"ðð ð =AðGð Gð Gð Gð Gñ „[ðGðB ð )-ð_ð _ð _ð _ñ „Xð_ðB ð MQð Sð  Sð  Sð  Sð  Sñ „[ð SðD ð )-ðað að að añ „XðaðF
ð 
ð 
ð 
ð,
ð 
ð 
ð 
ð0
ð 
ð 
ð 
ð.Mð Mð Mð Mð^ð ð ð ð
ð 
ð 
ð 
ð,
ð 
ð 
ð 
ð0
ð 
ð 
ð 
ð.Ið Ið Ið IðV
ð 
ð 
ð 
ð 
ð 
r)   rT   )r   r6   )r   rB   )rF   rG   r   r    )rF   rG   r   rP   )2Ú
__future__r   rE  r#  Úcollections.abcr   r   r   Útimer   Útypingr   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   r9   Úopenai.types.beta.threadsr   Ú<openai.types.beta.threads.required_action_function_tool_callr   r   r3   r@   rE   rO   rR   r  ry   rM   rT   r#   r)   r&   ú<module>rT     s²  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð
 ;Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø %Ð %Ð %Ð %Ð %Ð %Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ )Ð )Ð )Ð )Ð )Ð )Ø HÐ HÐ HÐ HÐ HÐ HØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,àð Ø€M€M€Mðð ð ð ð ð ðð ð ð ð ð ð
ð ð ð ð ˜Kñ ô ð ð*ð ð ð ð ˜Kñ ô ð ð.)ð )ð )ð )ð )ð )ð )ð )ð 	ð 	ð 	ð 	ð
(ð 
(ð 
(ð 
(ð 	Ð	ÔØñà
ˆ?Ôñð Ð+Ô,ñ-ð ðt
ð t
ð t
ð t
ð t
Ð2°4¸Ð3CÔDñ t
ô t
ð t
ð t
ð t
r)   