§
    šŠtjƒ_  ã                  ó>  — d dl mZ d dlmZmZmZmZmZmZ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 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  erd dl!Z!d dl"m#Z# d dl$m%Z& dd„Z'd d„Z(d!d„Z)d"d„Z*d#d„Z+ e¦   «          G d„ de¦  «        ¦   «         Z,dS )$é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚOptionalÚSequenceÚTypeÚUnion)ÚOpenAIAssistantRunnableÚ
OutputType)Úbeta)ÚCallbackManager)Údumpd)ÚRunnableConfigÚensure_config)ÚBaseTool)Úconvert_to_openai_tool)Ú	BaseModelÚFieldÚmodel_validator)ÚSelfN)ÚNotGiven)ÚToolResourcesÚreturnúopenai.OpenAIc                 ó°   — 	 ddl }  | j        ddi¬¦  «        S # t          $ r}t          d¦  «        |‚d}~wt          $ r}t          d¦  «        |‚d}~ww xY w)zÛGet the OpenAI client.

    Returns:
        openai.OpenAI: OpenAI client

    Raises:
        ImportError: If `openai` is not installed.
        AttributeError: If the installed `openai` version is not compatible.
    r   NúOpenAI-Betaúassistants=v2©Údefault_headersúBUnable to import openai, please install with `pip install openai`.úwPlease make sure you are using a v1.23-compatible version of openai. You can install with `pip install "openai>=1.23"`.)ÚopenaiÚOpenAIÚImportErrorÚAttributeError©r$   Úes     ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/agents/openai_assistant/base.pyÚ_get_openai_clientr+   !   s•   € ðØˆˆˆàˆvŒ}¨m¸_Ð-MÐNÑNÔNÐNøÝð ð ð ÝØPñ
ô 
àð	øøøøõ ð ð ð Ýð=ñ
ô 
ð ð	øøøøðøøøó   ‚ ™
A£3³AÁ AÁAúopenai.AsyncOpenAIc                 ó°   — 	 ddl }  | j        ddi¬¦  «        S # t          $ r}t          d¦  «        |‚d}~wt          $ r}t          d¦  «        |‚d}~ww xY w)zìGet the async OpenAI client.

    Returns:
        openai.AsyncOpenAI: Async OpenAI client

    Raises:
        ImportError: If `openai` is not installed.
        AttributeError: If the installed `openai` version is not compatible.
    r   Nr   r   r    r"   r#   )r$   ÚAsyncOpenAIr&   r'   r(   s     r*   Ú_get_openai_async_clientr0   :   s–   € ðØˆˆˆà!ˆvÔ!°=À/Ð2RÐSÑSÔSÐSøÝð ð ð ÝØPñ
ô 
àð	øøøøõ ð ð ð Ýð=ñ
ô 
ð ð	øøøøðøøør,   Úfile_idsÚlistc                óP   — g }| D ] }|                      |ddiddigdœ¦  «         Œ!|S )a  Convert file_ids into attachments
    File search and Code interpreter will be turned on by default.

    Args:
        file_ids (list): List of file_ids that need to be converted into attachments.

    Returns:
        list: List of attachments converted from file_ids.
    ÚtypeÚfile_searchÚcode_interpreter)Úfile_idÚtools)Úappend)r1   ÚattachmentsÚids      r*   Ú"_convert_file_ids_into_attachmentsr<   S   s]   € ð €KØð 
ð 
ˆØ×ÒàØ! =Ð1°FÐ<NÐ3OÐPðð ñ	
ô 	
ð 	
ð 	
ð Ðó    Útoolú:Union[Dict[str, Any], Type[BaseModel], Callable, BaseTool]Úboolc                óL   — d}t          | t          ¦  «        od| v o	| d         |v S )aM  Determine if tool corresponds to OpenAI Assistants built-in.

    Args:
        tool (Union[Dict[str, Any], Type[BaseModel], Callable, BaseTool]):
            Tool that needs to be determined.

    Returns:
        A boolean response of true or false indicating if the tool corresponds to
            OpenAI Assistants built-in.
    )r6   Ú	retrievalr5   r4   )Ú
isinstanceÚdict)r>   Úassistants_builtin_toolss     r*   Ú_is_assistants_builtin_toolrF   h   s;   € ð  PÐå�4�ÑÔð 	7Ø�tˆ^ð	7à�&Œ\Ð5Ð5ðr=   úDict[str, Any]c                óB   — t          | ¦  «        r| S t          | ¦  «        S )a¨  Convert a raw function/class to an OpenAI tool.

    Note that OpenAI assistants supports several built-in tools,
    such as "code_interpreter" and "retrieval."

    Args:
        tool (Union[Dict[str, Any], Type[BaseModel], Callable, BaseTool]):
            Tools or functions that need to be converted to OpenAI tools.

    Returns:
        Dict[str, Any]: A dictionary of tools that are converted into OpenAI tools.
    )rF   r   )r>   s    r*   Ú_get_assistants_toolrI   }   s'   € õ # 4Ñ(Ô(ð ,Øˆå% dÑ+Ô+Ð+r=   c                  ó  — 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¬¦  «        d3d„¦   «         Zei ddddœd4d#„¦   «         Z	 d5d6d)„Zeddd*œd7d,„¦   «         Z	 d5d6d-„Zd8d.„Zd9d0„Zd8d1„Zd9d2„ZdS ):ÚOpenAIAssistantV2Runnablea  Run an OpenAI Assistant.

    Attributes:
        client (Any): OpenAI or AzureOpenAI client.
        async_client (Any): Async OpenAI or AzureOpenAI client.
        assistant_id (str): OpenAI assistant ID.
        check_every_ms (float): Frequency to check progress in milliseconds.
        as_agent (bool): Whether to use the assistant as a LangChain agent.

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

            from langchain_classic.agents.openai_assistant import OpenAIAssistantV2Runnable

            assistant = OpenAIAssistantV2Runnable.create_assistant(
                name="math 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 = assistant.invoke({"content": "What's 10 - 4 raised to the 2.7"})

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

            from langchain_classic.agents.openai_assistant import OpenAIAssistantV2Runnable
            from langchain_classic.agents import AgentExecutor
            from langchain_classic.tools import E2BDataAnalysisTool


            tools = [E2BDataAnalysisTool(api_key="...")]
            agent = OpenAIAssistantV2Runnable.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": "Analyze the data..."})

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

            from langchain_classic.agents.openai_assistant import OpenAIAssistantV2Runnable
            from langchain_classic.agents import AgentExecutor
            from langchain_core.agents import AgentFinish
            from langchain_classic.tools import E2BDataAnalysisTool


            tools = [E2BDataAnalysisTool(api_key="...")]
            agent = OpenAIAssistantV2Runnable.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_clientÚstrÚassistant_idg     @�@ÚfloatÚcheck_every_msFr@   Úas_agentÚafter)Úmoder   r   c                ó`   — | j         €&ddl}| j        j        } |j        |¬¦  «        | _         | S )z?Validate that the async client is set, otherwise initialize it.Nr   )Úapi_key)rN   r$   rM   rW   r/   )Úselfr$   rW   s      r*   Úvalidate_async_clientz/OpenAIAssistantV2Runnable.validate_async_clientò   s=   € ð ÔÐ$ØˆMˆMˆMà”kÔ)ˆGØ 2 Ô 2¸7Ð CÑ CÔ CˆDÔØˆr=   )Úmodel_kwargsrM   Útool_resourcesÚ
extra_bodyÚnameÚinstructionsr8   úSequence[Union[BaseTool, dict]]ÚmodelrZ   údict[str, float]ú2Optional[Union[openai.OpenAI, openai.AzureOpenAI]]r[   ú7Optional[Union[AssistantToolResources, dict, NotGiven]]r\   úOptional[object]Úkwargsr   c          
     ó¦   — |pt          ¦   «         }|€ddlm}
 |
} |j        j        j        d||d„ |D ¦   «         |||dœ|¤Ž} | d|j        |dœ|	¤ŽS )aø  Create an OpenAI Assistant and instantiate the Runnable.

        Args:
            name (str): Assistant name.
            instructions (str): Assistant instructions.
            tools (Sequence[Union[BaseTool, dict]]): Assistant tools. Can be passed
                in OpenAI format or as BaseTools.
            tool_resources (Optional[Union[AssistantToolResources, dict, NotGiven]]):
                Assistant tool resources. Can be passed in OpenAI format.
            model (str): Assistant model to use.
            client (Optional[Union[openai.OpenAI, openai.AzureOpenAI]]): OpenAI or
                AzureOpenAI client. Will create default OpenAI client (Assistant v2)
                if not specified.
            model_kwargs: Additional model arguments. Only available for temperature
                and top_p parameters.
            extra_body: Additional body parameters to be passed to the assistant.

        Returns:
            OpenAIAssistantRunnable: The configured assistant runnable.
        Nr   ©Ú	NOT_GIVENc                ó,   — g | ]}t          |¦  «        ‘ŒS © ©rI   ©Ú.0r>   s     r*   ú
<listcomp>z>OpenAIAssistantV2Runnable.create_assistant.<locals>.<listcomp>&  s!   € Ð@Ð@Ð@°$Õ'¨Ñ-Ô-Ð@Ð@Ð@r=   )r]   r^   r8   r[   r`   r\   )rP   rM   rj   )r+   Úopenai._typesrh   r   Ú
assistantsÚcreater;   )Úclsr]   r^   r8   r`   rZ   rM   r[   r\   re   rh   Ú	assistants               r*   Úcreate_assistantz*OpenAIAssistantV2Runnable.create_assistantü   s¡   € ðD Ð/Õ-Ñ/Ô/ˆØÐ!Ø/Ð/Ð/Ð/Ð/Ð/à&ˆNØ1�F”KÔ*Ô1ð 
ØØ%Ø@Ð@¸%Ð@Ñ@Ô@Ø)ØØ!ð
ð 
ð ð
ð 
ˆ	ð ˆsÐF 	¤°VÐFÐF¸vÐFÐFÐFr=   ÚinputrD   ÚconfigúOptional[RunnableConfig]r   c           	     ó   — t          |¦  «        }t          j        |                     d¦  «        |                     d¦  «        |                     d¦  «        ¬¦  «        }|                     t          | ¦  «        ||                     d¦  «        p|                      ¦   «         ¬¦  «        }t          |                     dg ¦  «        ¦  «        }|                     dg ¦  «        |z   }	 | j        rR|                     d	¦  «        r=|  	                    |d	         ¦  «        } | j
        j        j        j        j        di |¤Ž}	nÚd
|vrNd|d         ||                     d¦  «        dœg|                     d¦  «        dœ}
|                      ||
¦  «        }	nˆd|vrc| 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,          $ r0}|                     ||	                     ¦   «         ¬¦  «         |‚d}~ww xY w)a(  Invoke the assistant.

        Args:
            input (dict): 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.
                file_ids: (deprecated) File ids to include in new run. Use
                    'attachments' instead
                attachments: Assistant files to include in new run. (v2 API).
                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.
                tool_resources: Override Assistant tool resources for this run (v2 API).
                run_metadata: Metadata to associate with new run.
            config (Optional[RunnableConfig]): Configuration for the run.

        Returns:
            OutputType: If self.as_agent, will return
                Union[List[OpenAIAssistantAction], OpenAIAssistantFinish]. Otherwise,
                will return OpenAI types
                Union[List[ThreadMessage], List[RequiredActionFunctionToolCall]].

        Raises:
            BaseException: If an error occurs during the invocation.
        Ú	callbacksÚtagsÚmetadata©Úinheritable_callbacksÚinheritable_tagsÚinheritable_metadataÚrun_name©r]   r1   r:   Úintermediate_stepsÚ	thread_idÚuserÚcontentÚmessage_metadata©Úroler…   r:   r{   Úthread_metadata©Úmessagesr{   Úrun_id©r…   rˆ   r:   r{   N©r{   rj   )r   r   Ú	configureÚgetÚon_chain_startr   Úget_namer<   rS   Ú_parse_intermediate_stepsrM   r   ÚthreadsÚrunsÚsubmit_tool_outputsÚ_create_thread_and_runr‹   rq   Ú_create_runÚ_wait_for_runr;   rƒ   ÚBaseExceptionÚon_chain_errorÚ_get_responseÚon_chain_endrD   ©rX   ru   rv   re   Úcallback_managerÚrun_managerÚfilesr:   Útool_outputsÚrunÚthreadÚ_r)   Úresponses                 r*   Úinvokez OpenAIAssistantV2Runnable.invoke.  s
  € õB ˜vÑ&Ô&ˆÝ*Ô4Ø"(§*¢*¨[Ñ"9Ô"9Ø#ŸZšZ¨Ñ/Ô/Ø!'§¢¨JÑ!7Ô!7ð
ñ 
ô 
Ðð
 '×5Ò5Ý�$‰KŒK˜ V§Z¢Z°
Ñ%;Ô%;Ð%N¸t¿}º}¹¼ð 6ñ 
ô 
ˆõ 3°6·:²:¸jÈ"Ñ3MÔ3MÑNÔNˆØ—j’j °Ñ3Ô3°eÑ;ˆð&	àŒ}ð  Q §¢Ð+?Ñ!@Ô!@ð  QØ#×=Ò=ØÐ.Ô/ñ ô  �ð H�d”kÔ&Ô.Ô3ÔGÐWÐWÈ,ÐWÐW��à EÐ)Ð)ð %+Ø',¨YÔ'7Ø+6Ø(-¯	ª	Ð2DÑ(EÔ(Eð	ð ð!ð !&§	¢	Ð*;Ñ <Ô <ð
ð 
�ð ×1Ò1°%¸Ñ@Ô@��à Ð&Ð&Ø”KÔ$Ô,Ô5×<Ò<Ø˜+Ô&Ø! )Ô,ØØ +Ø"ŸYšYÐ'9Ñ:Ô:ð =ñ ô �ð ×&Ò& uÑ-Ô-��ð H�d”kÔ&Ô.Ô3ÔGÐPÐPÈ%ÐPÐP�Ø×$Ò$ S¤V¨S¬]Ñ;Ô;ˆCˆCøÝð 	ð 	ð 	Ø×&Ò& qÑ)Ô)Ð)ØˆGøøøøð	øøøð	Ø×)Ò)¨#Ñ.Ô.ˆHð
 ×$Ò$ XÑ.Ô.Ð.ØˆOøõ ð 	ð 	ð 	Ø×&Ò& q°3·8²8±:´:Ð&Ñ>Ô>Ð>ØˆGøøøøð	øøøs1   Ã)EH= È=
I#ÉIÉI#É'J Ê
KÊ+KËK)rN   r[   ú<Optional[Union[openai.AsyncOpenAI, openai.AsyncAzureOpenAI]]c             ‹  óÆ   K  — |pt          ¦   «         }|€ddlm} |}d„ |D ¦   «         }	|j        j                             |||	||¬¦  «        ƒ d{V —†}
 | d|
j        |dœ|¤ŽS )a  Create an AsyncOpenAI Assistant and instantiate the Runnable.

        Args:
            name (str): Assistant name.
            instructions (str): Assistant instructions.
            tools (Sequence[Union[BaseTool, dict]]): Assistant tools. Can be passed
                in OpenAI format or as BaseTools.
            tool_resources (Optional[Union[AssistantToolResources, dict, NotGiven]]):
                Assistant tool resources. Can be passed in OpenAI format.
            model (str): Assistant model to use.
            async_client (Optional[Union[openai.OpenAI, openai.AzureOpenAI]]): OpenAI or
            AzureOpenAI async client. Will create default async_client if not specified.

        Returns:
            AsyncOpenAIAssistantRunnable: The configured assistant runnable.
        Nr   rg   c                ó,   — g | ]}t          |¦  «        ‘ŒS rj   rk   rl   s     r*   rn   z?OpenAIAssistantV2Runnable.acreate_assistant.<locals>.<listcomp>¯  s!   € ÐEÐEÐE°tÕ,¨TÑ2Ô2ÐEÐEÐEr=   )r]   r^   r8   r[   r`   )rP   rN   rj   )r0   ro   rh   r   rp   rq   r;   )rr   r]   r^   r8   r`   rN   r[   re   rh   Úopenai_toolsrs   s              r*   Úacreate_assistantz+OpenAIAssistantV2Runnable.acreate_assistantŒ  s·   è è € ð< $ÐAÕ'?Ñ'AÔ'AˆØÐ!Ø/Ð/Ð/Ð/Ð/Ð/à&ˆNØEÐE¸uÐEÑEÔEˆà&Ô+Ô6×=Ò=ØØ%ØØ)Øð >ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆ	ð ˆsÐR 	¤¸<ÐRÐRÈ6ÐRÐRÐRr=   c           	   ‹  óÖ  K  — |pi }t          j        |                     d¦  «        |                     d¦  «        |                     d¦  «        ¬¦  «        }|                     t	          | ¦  «        ||                     d¦  «        p|                      ¦   «         ¬¦  «        }t          |                     dg ¦  «        ¦  «        }|                     dg ¦  «        |z   }	 | j        rX|                     d	¦  «        rC|                      |d	         ¦  «        } | j	        j
        j        j        j        di |¤Žƒ d
{V —†}	nòd|vrTd|d         ||                     d¦  «        dœg|                     d¦  «        dœ}
|                      ||
¦  «        ƒ d
{V —†}	nšd|vro| 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	 |                      |	¦  «        }|                     |¦  «         |S # t*          $ r0}|                     ||	                     ¦   «         ¬¦  «         |‚d
}~ww xY w)a*  Async invoke assistant.

        Args:
            input (dict): 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.
                file_ids: (deprecated) File ids to include in new run. Use
                    'attachments' instead
                attachments: Assistant files to include in new run. (v2 API).
                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.
                tool_resources: Override Assistant tool resources for this run (v2 API).
                run_metadata: Metadata to associate with new run.
            config (Optional[RunnableConfig]): Configuration for the run.

        Returns:
            OutputType: If self.as_agent, will return
                Union[List[OpenAIAssistantAction], OpenAIAssistantFinish]. Otherwise,
                will return OpenAI types
                Union[List[ThreadMessage], List[RequiredActionFunctionToolCall]].

        Raises:
            BaseException: If an error occurs during the invocation.
        ry   rz   r{   r|   r€   r�   r1   r:   r‚   Nrƒ   r„   r…   r†   r‡   r‰   rŠ   rŒ   r�   rŽ   rj   )r   r�   r�   r‘   r   r’   r<   rS   r“   rN   r   r”   r•   r–   Ú_acreate_thread_and_runr‹   rq   Ú_acreate_runÚ_await_for_runr;   rƒ   rš   r›   rœ   r�   rD   rž   s                 r*   Úainvokez!OpenAIAssistantV2Runnable.ainvokeº  s²  è è € ðB �˜2ˆÝ*Ô4Ø"(§*¢*¨[Ñ"9Ô"9Ø#ŸZšZ¨Ñ/Ô/Ø!'§¢¨JÑ!7Ô!7ð
ñ 
ô 
Ðð
 '×5Ò5Ý�$‰KŒK˜ V§Z¢Z°
Ñ%;Ô%;Ð%N¸t¿}º}¹¼ð 6ñ 
ô 
ˆõ 3°6·:²:¸jÈ"Ñ3MÔ3MÑNÔNˆØ—j’j °Ñ3Ô3°eÑ;ˆð*	àŒ}ð $ §¢Ð+?Ñ!@Ô!@ð $Ø#×=Ò=ØÐ.Ô/ñ ô  �ð T˜DÔ-Ô2Ô:Ô?ÔSð ð Ø"ðð ð ð ð ð ð ð ��ð  EÐ)Ð)ð %+Ø',¨YÔ'7Ø+6Ø(-¯	ª	Ð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Ñ)Ô)Ð)ØˆGøøøøð	øøøð	Ø×)Ò)¨#Ñ.Ô.ˆHð
 ×$Ò$ XÑ.Ô.Ð.ØˆOøõ ð 	ð 	ð 	Ø×&Ò& q°3·8²8±:´:Ð&Ñ>Ô>Ð>ØˆGøøøøð	øøøs1   Ã E7I É
I>É"I9É9I>ÊJ. Ê.
K(Ê8+K#Ë#K(c                ó¦   ‡— dŠˆfd„|                      ¦   «         D ¦   «         } | j        j        j        j        j        |d         fd| j        i|¤ŽS )z¸Create a new run within an existing thread.

        Args:
            input (dict): The input data for the new run.

        Returns:
            Any: The created run object.
        )r^   r`   r8   r[   Úrun_metadataÚtruncation_strategyÚmax_prompt_tokensc                ó$   •— i | ]\  }}|‰v ¯	||“ŒS rj   rj   )rm   ÚkÚvÚallowed_assistant_paramss      €r*   ú
<dictcomp>z9OpenAIAssistantV2Runnable._create_run.<locals>.<dictcomp>.  s*   ø€ ÐRÐRÐR™4˜1˜a°AÐ9QÐ4QÐ4Q�!�QÐ4QÐ4QÐ4Qr=   rƒ   rP   )ÚitemsrM   r   r”   r•   rq   rP   )rX   ru   Úparamsr¹   s      @r*   r˜   z%OpenAIAssistantV2Runnable._create_run  ss   ø€ ð$
Ð ð SÐRÐRÐR 5§;¢;¡=¤=ÐRÑRÔRˆØ3ˆtŒ{ÔÔ'Ô,Ô3Ø�+Ôð
ð 
àÔ*ð
ð ð
ð 
ð 	
r=   r¤   c                óÂ   — d„ |                      ¦   «         D ¦   «         }|                     d¦  «        x}r||d<    | j        j        j        j        d| j        |dœ|¤Ž}|S )zßCreate a new thread and run.

        Args:
            input (dict): The input data for the run.
            thread (dict): The thread data to create.

        Returns:
            Any: The created thread and run.
        c                ó"   — i | ]\  }}|d v ¯	||“ŒS ©)r^   r`   r8   r³   rj   ©rm   r·   r¸   s      r*   rº   zDOpenAIAssistantV2Runnable._create_thread_and_run.<locals>.<dictcomp>?  ó4   € ð 
ð 
ð 
á��1ØÐFÐFÐFð ˆqàFÐFÐFr=   r[   ©rP   r¤   rj   )r»   r�   rM   r   r”   Úcreate_and_runrP   ©rX   ru   r¤   r¼   r[   r£   s         r*   r—   z0OpenAIAssistantV2Runnable._create_thread_and_run5  s�   € ð
ð 
àŸš™œð
ñ 
ô 
ˆð
 #ŸYšYÐ'7Ñ8Ô8Ð8ˆ>ð 	6Ø'5ˆFÐ#Ñ$Ø5ˆdŒkÔÔ&Ô5ð 
ØÔ*Øð
ð 
ð ð
ð 
ˆð
 ˆ
r=   c              ƒ  ó¬   K  — d„ |                      ¦   «         D ¦   «         } | j        j        j        j        j        |d         fd| j        i|¤Žƒ d{V —†S )zÇAsynchronously create a new run within an existing thread.

        Args:
            input (dict): The input data for the new run.

        Returns:
            Any: The created run object.
        c                ó"   — i | ]\  }}|d v ¯	||“ŒS ))r^   r`   r8   r[   r³   rj   rÀ   s      r*   rº   z:OpenAIAssistantV2Runnable._acreate_run.<locals>.<dictcomp>V  s4   € ð 
ð 
ð 
á��1ØÐXÐXÐXð ˆqàXÐXÐXr=   rƒ   rP   N)r»   rN   r   r”   r•   rq   rP   )rX   ru   r¼   s      r*   r¯   z&OpenAIAssistantV2Runnable._acreate_runM  s’   è è € ð
ð 
àŸš™œð
ñ 
ô 
ˆð
 @�TÔ&Ô+Ô3Ô8Ô?Ø�+Ôð
ð 
àÔ*ð
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r=   c              ƒ  óÒ   K  — d„ |                      ¦   «         D ¦   «         }|                     d¦  «        x}r||d<    | j        j        j        j        d| j        |dœ|¤Žƒ d{V —†}|S )zýAsynchronously create a new thread and run simultaneously.

        Args:
            input (dict): The input data for the run.
            thread (dict): The thread data to create.

        Returns:
            Any: The created thread and run.
        c                ó"   — i | ]\  }}|d v ¯	||“ŒS r¿   rj   rÀ   s      r*   rº   zEOpenAIAssistantV2Runnable._acreate_thread_and_run.<locals>.<dictcomp>k  rÁ   r=   r[   rÂ   Nrj   )r»   r�   rN   r   r”   rÃ   rP   rÄ   s         r*   r®   z1OpenAIAssistantV2Runnable._acreate_thread_and_runa  s²   è è € ð
ð 
àŸš™œð
ñ 
ô 
ˆð
 #ŸYšYÐ'7Ñ8Ô8Ð8ˆ>ð 	6Ø'5ˆFÐ#Ñ$ØA�DÔ%Ô*Ô2ÔAð 
ØÔ*Øð
ð 
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 ˆ
r=   )r   r   )r]   rO   r^   rO   r8   r_   r`   rO   rZ   ra   rM   rb   r[   rc   r\   rd   re   r   r   r   )N)ru   rD   rv   rw   re   r   r   r   )r]   rO   r^   rO   r8   r_   r`   rO   rN   r¨   r[   rc   re   r   r   r   )ru   rD   r   r   )ru   rD   r¤   rD   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   rM   Ú__annotations__rN   rR   rS   r   rY   Úclassmethodrt   r§   r¬   r±   r˜   r—   r¯   r®   rj   r=   r*   rK   rK   ’   sÐ  € € € € € € ðQð Qðf �%Ð(:Ð;Ñ;Ô;€FÐ;Ð;Ð;Ñ;Ø'Ø€LÐÐÐÑØ-ØÐÐÑØØ#€NÐ#Ð#Ð#Ñ#ØEØ€HÐÐÐÑØFà€_˜'Ð"Ñ"Ô"ðð ð ñ #Ô"ðð ð *,ØEIØRVØ'+ð/Gð /Gð /Gð /Gð /Gñ „[ð/Gðd ?Cð\ð \ð \ð \ð \ð| ð ØRVð+Sð +Sð +Sð +Sð +Sñ „[ð+Sð\ ?Cð`ð `ð `ð `ð `ðD
ð 
ð 
ð 
ð2ð ð ð ð0
ð 
ð 
ð 
ð(ð ð ð ð ð r=   rK   )r   r   )r   r-   )r1   r2   r   r2   )r>   r?   r   r@   )r>   r?   r   rG   )-Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   Ú.langchain_classic.agents.openai_assistant.baser   r   Úlangchain_core._apir   Úlangchain_core.callbacksr   Úlangchain_core.loadr   Úlangchain_core.runnablesr   r   Úlangchain_core.toolsr   Ú%langchain_core.utils.function_callingr   Úpydanticr   r   r   Útyping_extensionsr   r$   ro   r   Úopenai.types.beta.assistantr   ÚAssistantToolResourcesr+   r0   r<   rF   rI   rK   rj   r=   r*   ú<module>rÜ      s2  ðØ "Ð "Ð "Ð "Ð "Ð "ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð %Ð $Ð $Ð $Ð $Ð $Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø %Ð %Ð %Ð %Ð %Ð %Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ )Ð )Ð )Ð )Ð )Ð )Ø HÐ HÐ HÐ HÐ HÐ HØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø "Ð "Ð "Ð "Ð "Ð "àð TØ€M€M€MØ&Ð&Ð&Ð&Ð&Ð&ØSÐSÐSÐSÐSÐSðð ð ð ð2ð ð ð ð2ð ð ð ð*ð ð ð ð*,ð ,ð ,ð ,ð* €�„ðdð dð dð dð dÐ 7ñ dô dñ „ðdð dð dr=   