Ë
    ´Œjûw  ã                  óœ  — d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZ 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e0e+   e*e0d   e0d   f   Z1 G d„ dee2e1f   «      Z3y)!é    )Ú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                  ó8   — e Zd ZU dZded<   ded<   edd„«       Zy)ÚOpenAIAssistantFinishzuAgentFinish with run and thread metadata.

    Parameters:
        run_id: Run id.
        thread_id: Thread id.
    ÚstrÚrun_idÚ	thread_idc                 ó   — y©z]Check if the class is serializable by LangChain.

        Returns:
            False
        F© ©Úclss    úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/agents/openai_assistant/base.pyÚis_lc_serializablez(OpenAIAssistantFinish.is_lc_serializable,   ó   € ð ó    N©ÚreturnÚbool©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Úclassmethodr'   r#   r)   r&   r   r   !   s%   … ñð ƒKØƒNàòó ñr)   r   c                  óB   — e Zd ZU dZded<   ded<   ded<   edd„«       Zy)	ÚOpenAIAssistantActionz¹AgentAction 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                 ó   — yr"   r#   r$   s    r&   r'   z(OpenAIAssistantAction.is_lc_serializableC   r(   r)   Nr*   r-   r#   r)   r&   r5   r5   6   s+   … ñð ÓØƒKØƒNàòó ñr)   r5   c                 ó    — 	 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©r:   ÚeÚmsgs      r&   Ú_get_openai_clientrA   M   s\   € ð)Ûàˆv�}‰}‹ÐøÜò &ØRˆÜ˜#Ó AÐ%ûÜò )ð<ð 	ô ˜SÓ! qÐ(ûð)úó   ‚ —	A .®AºAÁAc                 ó    — 	 dd l }  | j                  «       S # t        $ r}d}t        |«      |‚d }~wt        $ r}d}t        |«      |‚d }~ww xY wr9   )r:   ÚAsyncOpenAIr<   r=   r>   s      r&   Ú_get_openai_async_clientrE   ]   s_   € ð)Ûà!ˆv×!Ñ!Ó#Ð#øÜò &ØRˆÜ˜#Ó AÐ%ûÜò )ð<ð 	ô ˜SÓ! qÐ(ûð)úrB   c                óD   — d}t        | t        «      xr d| v xr | d   |v S )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_toolrN   m   s8   € ð  CÐä�4œÓò 	7Ø�tˆ^ò	7à�&‰\Ð5Ð5ðr)   c                ó2   — 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".
    )rN   r   )rL   s    r&   Ú_get_assistants_toolrP   y   s   € ô # 4Ô(ØˆÜ! $Ó'Ð'r)   r   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¬«      d"d„«       Zeddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d#d„«       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d+d„Z	 	 	 	 d'd„Zd(d„Zd)d„Zd*d „Zd+d!„Zy),ÚOpenAIAssistantRunnablea®  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                ó‚   — | j                   €2dd l}| j                  j                  } |j                  |¬«      | _         | S )Nr   )Úapi_key)rU   r:   rT   r]   rD   )Úselfr:   r]   s      r&   Úvalidate_async_clientz-OpenAIAssistantRunnable.validate_async_clientç   s:   € à×ÑÐ$Ûà—k‘k×)Ñ)ˆGØ 2 × 2Ñ 2¸7Ô CˆDÔØˆr)   )rT   c          
     óÒ   — |xs
 t        «       }|j                  j                  j                  |||D �cg c]  }t	        |«      ‘Œ c}|¬«      } | d|j
                  |dœ|¤ŽS c c}w )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)rV   rT   r#   )rA   ÚbetaÚ
assistantsÚcreaterP   Úid)	r%   rb   rc   rd   re   rT   ÚkwargsrL   Ú	assistants	            r&   Úcreate_assistantz(OpenAIAssistantRunnable.create_assistantð   ss   € ð2 Ò/Ô-Ó/ˆØ—K‘K×*Ñ*×1Ñ1ØØ%Ù:?Ó@¹%°$Ô'¨Õ-¸%Ñ@Øð	 2ó 
ˆ	ñ ÐF 	§¡°VÑF¸vÑFÐFùò As   ´A$c                ó"  — t        |«      }t        j                  |j                  d«      |j                  d«      |j                  d«      ¬«      }|j	                  t        | «      ||j                  d«      xs | j                  «       ¬«      }	 | j                  r`|j                  d«      rO| j                  |d   «      } | j                  j                  j                  j                  j                  di |¤Ž}nôd|vrNd	|d
   |j                  d«      |j                  d«      dœg|j                  d«      dœ}| j                  ||«      }n¢d|vrd| j                  j                  j                  j                  j!                  |d   |d
   d	|j                  d«      ¬«      }	| j#                  |«      }n: | j                  j                  j                  j                  j                  di |¤Ž}| j%                  |j&                  |j(                  «      }	 | j/                  |«      }|j1                  |«       |S # t*        $ r}
|j-                  |
«       ‚ d}
~
ww xY w# t*        $ r'}
|j-                  |
|j3                  «       ¬«       ‚ 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. 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©rb   Úintermediate_stepsr    ÚuserÚcontentÚmessage_metadataÚattachments)Úrolery   rp   r{   Úthread_metadata©Úmessagesrp   r   ©ry   r|   rp   N©rp   r#   )r   r   Ú	configureÚgetÚon_chain_startr   Úget_namerY   Ú_parse_intermediate_stepsrT   rf   ÚthreadsÚrunsÚsubmit_tool_outputsÚ_create_thread_and_runr   rh   Ú_create_runÚ_wait_for_runri   r    ÚBaseExceptionÚon_chain_errorÚ_get_responseÚon_chain_endrK   ©r^   ÚinputÚconfigrj   Úcallback_managerÚrun_managerÚtool_outputsÚrunÚthreadÚ_r?   Úresponses               r&   ÚinvokezOpenAIAssistantRunnable.invoke  sd  € ôN ˜vÓ&ˆÜ*×4Ñ4Ø"(§*¡*¨[Ó"9Ø#ŸZ™Z¨Ó/Ø!'§¡¨JÓ!7ô
Ðð
 '×5Ñ5Ü�$‹KØØ—‘˜JÓ'Ò:¨4¯=©=«?ð 6ó 
ˆð
%	à�}Š} §¡Ð+?Ô!@Ø#×=Ñ=ØÐ.Ñ/ó �ð H�d—k‘k×&Ñ&×.Ñ.×3Ñ3×GÑGÑWÈ,ÑW‘à EÑ)ð %+Ø',¨YÑ'7Ø(-¯	©	Ð2DÓ(EØ+0¯9©9°]Ó+Cñ	ð!ð !&§	¡	Ð*;Ó <ñ
�ð ×1Ñ1°%¸Ó@‘à Ñ&Ø—K‘K×$Ñ$×,Ñ,×5Ñ5×<Ñ<Ø˜+Ñ&Ø! )Ñ,ØØ"ŸY™YÐ'9Ó:ð	 =ó �ð ×&Ñ& uÓ-‘ð H�d—k‘k×&Ñ&×.Ñ.×3Ñ3×GÑGÑPÈ%ÑP�Ø×$Ñ$ S§V¡V¨S¯]©]Ó;ˆCð	Ø×)Ñ)¨#Ó.ˆHð
 ×$Ñ$ XÔ.ØˆOøô ò 	Ø×&Ñ& qÔ)Øûð	ûô
 ò 	Ø×&Ñ& q°3·8±8³:Ð&Ô>Øûð	ús1   ÂFH; ÈI È;	IÉIÉIÉ	JÉ'"J	Ê	J)rU   c             ‹  óð   K  — |xs
 t        «       }|D �cg c]  }t        |«      ‘Œ }}|j                  j                  j	                  ||||¬«      ƒ d{  –—† }	 | d|	j
                  |dœ|¤ŽS c c}w 7 Œ­w)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.
        ra   N)rV   rU   r#   )rE   rP   rf   rg   rh   ri   )
r%   rb   rc   rd   re   rU   rj   rL   Úopenai_toolsrk   s
             r&   Úacreate_assistantz)OpenAIAssistantRunnable.acreate_assistants  sˆ   è ø€ ð4 $ÒAÔ'?Ó'AˆÙ?DÓE¹u°tÔ,¨TÕ2¸uˆÐEØ&×+Ñ+×6Ñ6×=Ñ=ØØ%ØØð	 >ó 
÷ 
ˆ	ñ ÐR 	§¡¸<ÑRÈ6ÑRÐRùò Fð
ús   ‚A6•A/§.A6ÁA4ÁA6c              ‹  ó”  K  — |xs i }t        j                  |j                  d«      |j                  d«      |j                  d«      ¬«      }|j                  t	        | «      ||j                  d«      xs | j                  «       ¬«      }	 | j                  rq|j                  d«      r`| j                  |d   «      ƒ d{  –—† } | j                  j                  j                  j                  j                  di |¤Žƒ d{  –—† }�nd	|vrFd
|d   |j                  d«      dœg|j                  d«      dœ}| j                  ||«      ƒ d{  –—† }nºd|vrt| j                  j                  j                  j                  j                  |d	   |d   d
|j                  d«      ¬«      ƒ d{  –—† }	| j!                  |«      ƒ d{  –—† }nB | j                  j                  j                  j                  j                  di |¤Žƒ d{  –—† }| j#                  |j$                  |j&                  «      ƒ d{  –—† }	 | j-                  |«      }|j/                  |«       |S 7 �Œ 7 �Œa7 �Œ7 Œ¼7 Œ¥7 Œd7 Œ8# t(        $ r}
|j+                  |
«       ‚ d}
~
ww xY w# t(        $ r'}
|j+                  |
|j1                  «       ¬«       ‚ d}
~
ww xY w­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. 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]].
        rn   ro   rp   rq   ru   rv   rw   Nr    rx   ry   rz   )r|   ry   rp   r}   r~   r   r€   r�   r#   )r   r‚   rƒ   r„   r   r…   rY   Ú_aparse_intermediate_stepsrU   rf   r‡   rˆ   r‰   Ú_acreate_thread_and_runr   rh   Ú_acreate_runÚ_await_for_runri   r    r�   rŽ   r�   r�   rK   r‘   s               r&   ÚainvokezOpenAIAssistantRunnable.ainvoke—  s¶  è ø€ ðN ’˜2ˆÜ*×4Ñ4Ø"(§*¡*¨[Ó"9Ø#ŸZ™Z¨Ó/Ø!'§¡¨JÓ!7ô
Ðð
 '×5Ñ5Ü�$‹KØØ—‘˜JÓ'Ò:¨4¯=©=«?ð 6ó 
ˆð
(	à�}Š} §¡Ð+?Ô!@Ø%)×%DÑ%DØÐ.Ñ/ó&÷  �ð T˜D×-Ñ-×2Ñ2×:Ñ:×?Ñ?×SÑSñ Ø"ñ÷ ’ð  EÑ)ð %+Ø',¨YÑ'7Ø(-¯	©	Ð2DÓ(Eñð!ð !&§	¡	Ð*;Ó <ñ	�ð !×8Ñ8¸ÀÓG×G‘à Ñ&Ø×+Ñ+×0Ñ0×8Ñ8×AÑA×HÑHØ˜+Ñ&Ø! )Ñ,ØØ"ŸY™YÐ'9Ó:ð	 Ió ÷ �ð !×-Ñ-¨eÓ4×4‘ð T˜D×-Ñ-×2Ñ2×:Ñ:×?Ñ?×SÑSñ Øñ÷ �ð ×+Ñ+¨C¯F©F°C·M±MÓB×BˆCð	Ø×)Ñ)¨#Ó.ˆHð
 ×$Ñ$ XÔ.ØˆOð[ ùðùð Hùðøð 5øðøð CùÜò 	Ø×&Ñ& qÔ)Øûð	ûô
 ò 	Ø×&Ñ& q°3·8±8³:Ð&Ô>Øûð	üsÊ   ‚B
KÂ4I2 ÃI!ÃAI2 ÄI$ÄA
I2 ÅI'ÅAI2 Æ-I*Æ.I2 ÇI,ÇAI2 È	I.È
-I2 È7I0È8I2 È=J ÉKÉ!I2 É$I2 É'I2 É*I2 É,I2 É.I2 É0I2 É2	JÉ;JÊJÊKÊ	KÊ"K Ë KËKc                ó²  — |d   \  }}| j                  |j                  |j                  «      }t        «       }|j                  r7|j                  j
                  j                  D �ch c]  }|j                  ’Œ }}|D ��cg c]+  \  }}|j                  |v rt        |«      |j                  dœ‘Œ- }	}}|	|j                  |j                  dœS c c}w c c}}w ©Néÿÿÿÿ)Úoutputr6   )r–   r   r    ©
rŒ   r   r    ÚsetÚrequired_actionr‰   Ú
tool_callsri   r6   r   ©
r^   rw   Úlast_actionÚlast_outputr—   Úrequired_tool_call_idsÚtcÚactionr¨   r–   s
             r&   r†   z1OpenAIAssistantRunnable._parse_intermediate_stepsû  sä   € ð $6°bÑ#9Ñ ˆ�[Ø× Ñ  ×!3Ñ!3°[×5JÑ5JÓKˆÜ!$£ÐØ×Òà #× 3Ñ 3× GÑ G× RÒ Ró&Ù R˜"�—“Ð Rð #ð &ñ
 #5ô
á"4‘�˜Ø×"Ñ"Ð&<Ñ<ô ˜6“{°F×4GÑ4GÓHØ"4ð 	ñ 
ð )Ø!×(Ñ(Ø$×.Ñ.ñ
ð 	
ùò&ùó
s   Á'CÂ0Cc                óð   — |j                  «       D ��ci c]  \  }}|dv r||“Œ }}} | j                  j                  j                  j                  j
                  |d   fd| j                  i|¤ŽS c c}}w ©N)
rc   re   rd   Úadditional_instructionsÚparallel_tool_callsÚtop_pÚtemperatureÚmax_completion_tokensÚmax_prompt_tokensÚrun_metadatar    rV   )ÚitemsrT   rf   r‡   rˆ   rh   rV   ©r^   Ú
input_dictÚkÚvÚparamss        r&   r‹   z#OpenAIAssistantRunnable._create_run  s”   € ð #×(Ñ(Ô*ô
á*‘��1Øðñð ˆq‰DØ*ð 	ñ 
ð" 4ˆt�{‰{×Ñ×'Ñ'×,Ñ,×3Ñ3Ø�{Ñ#ñ
à×*Ñ*ð
ð ñ
ð 	
ùó#
s   ”A2c                óÖ   — |j                  «       D ��ci c]  \  }}|dv r||“Œ }}} | j                  j                  j                  j                  d| j
                  |dœ|¤ŽS c c}}w ©N)	rc   re   rd   r¶   r·   r¸   r¹   rº   r»   )rV   r˜   r#   )r¼   rT   rf   r‡   Úcreate_and_runrV   ©r^   r¾   r˜   r¿   rÀ   rÁ   s         r&   rŠ   z.OpenAIAssistantRunnable._create_thread_and_run)  s‰   € ð #×(Ñ(Ô*ô
á*‘��1Øð
ñð ˆq‰DØ*ð 	ñ 
ð  7ˆt�{‰{×Ñ×'Ñ'×6Ñ6ð 
Ø×*Ñ*Øñ
ð ñ
ð 	
ùó!
s   ”A%c                ód  ‡‡— |j                   dk(  �r¢dd lŠt        ‰j                  j                  j                  d«      d   «      }t        ‰j                  j                  j                  d«      d   «      }|dkD  xs |dk(  xr |dk\  Š| j                  j                  j                  j                  j                  |j                  d¬«      }|D �cg c]  }|j                  |j                  k(  sŒ|‘Œ  }}| j                  s|S |D ��cg c]  }|j                  D ]  }|‘Œ Œ }}}|D ��	cg c]  }|j                   D ]  }	|	‘Œ Œ }
}}	t#        ˆˆfd„|D «       «      rd	j%                  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.                  }	 t1        j2                  |j4                  d¬«      }t=        |«      dk(  r	d|v r|d   }|j?                  tA        |j8                  ||j                  d|j                  |j                  ¬«      «       Œ‘ |S t1        jB                  |jE                  «       d¬«      }d|j                   › d|› �}t;        |«      ‚c c}w c c}}w c c}	}w # t6        $ r-}d|j4                  › d|j8                  › �}t;        |«      |‚d }~ww xY w)NÚ	completedr   Ú.é   é   Úasc©Úorderc              3  óò   •K  — | ]n  }‰r4t        |‰j                  j                  j                  j                  «      n3t        |‰j                  j                  j                  j
                  «      –— Œp y ­w©N©rJ   Útypesrf   r‡   ÚTextContentBlockÚMessageContentText©Ú.0ry   r:   Úversion_gte_1_14s     €€r&   Ú	<genexpr>z8OpenAIAssistantRunnable._get_response.<locals>.<genexpr>Y  óh   øè ø€ ð 
ñ  &�Gñ (ô ˜w¨¯©×(9Ñ(9×(AÑ(A×(RÑ(RÔSä#ØØŸ™×)Ñ)×1Ñ1×DÑDóóñ  &ùó   ƒA4A7Ú
c              3  óH   K  — | ]  }|j                   j                  –— Œ y ­wrÏ   ©ÚtextÚvalue©rÕ   ry   s     r&   r×   z8OpenAIAssistantRunnable._get_response.<locals>.<genexpr>d  ó   è ø€ Ð"LÁV¸' 7§<¡<×#5Õ#5ÁVùó   ‚ ")r¨   r    r   r{   Ú ©Úreturn_valuesÚlogr   r    Úrequires_actionF©Ústrictú*Received invalid JSON function arguments: ú for function Ú__arg1©rL   Ú
tool_inputr6   rå   r   r    é   ©ÚindentúUnexpected run status: ú. Full run info:

)#Ústatusr:   ÚintÚversionÚVERSIONÚsplitrT   rf   r‡   r   Úlistr    r   ri   rY   ry   r{   ÚallÚjoinr   r«   r‰   r¬   ÚfunctionÚjsonÚloadsÚ	argumentsr   rb   Ú
ValueErrorÚlenÚappendr5   ÚdumpsrK   )r^   r—   Úmajor_versionÚminor_versionr   r@   Únew_messagesÚmsg_contentÚanswerÚ
attachmentr{   ÚactionsÚ	tool_callrû   Úargsr?   Úrun_infor:   rÖ   s                    @@r&   r�   z%OpenAIAssistantRunnable._get_response@  s   ù€ ð �:‰:˜Ó$Ûä §¡× 6Ñ 6× <Ñ <¸SÓ AÀ!Ñ DÓEˆMÜ §¡× 6Ñ 6× <Ñ <¸SÓ AÀ!Ñ DÓEˆMØ -°Ñ 1ò  Ø Ñ"Ò: }¸Ñ':ð ð —{‘{×'Ñ'×/Ñ/×8Ñ8×=Ñ=Ø—‘Øð >ó ˆHñ ,4ÓL©8 C°s·z±zÀSÇVÁVÓ7KšC¨8ˆLÐLØ—=’=Ø#Ð#á'3ôÙ'3 ÀsÇ{Ä{¸’À{� |ð ñ ñ '3ôÙ&2˜sÀSÇ_Ä_°z’
À_�
 lð ñ ô ô 
ñ  &ó
ô 
ð Ÿ™Ñ"LÁVÓ"LÓL�Ü(à$Ø!$§¡Ø!Ÿf™fØ#.ñ	ð Ø—v‘vØŸ-™-ô
ð 
ð �:‰:Ð*Ò*Ø—=’=Ø×*Ñ*×>Ñ>×IÑIÐIØˆGØ ×0Ñ0×DÑD×OÔO�	Ø$×-Ñ-�ð1ÜŸ:™: h×&8Ñ&8ÀÔG�Dô �t“9 ’> h°$Ñ&6Ø ™>�DØ—‘Ü)Ø%Ÿ]™]Ø#'Ø%.§\¡\ØØ"Ÿv™vØ"%§-¡-ôõ	ð Pð, ˆNÜ—:‘:˜cŸh™h›j°Ô3ˆØ'¨¯
©
 |Ð3GÈÀzÐRˆÜ˜‹oÐùò{ MùóùóøôD 'ò 1àDØ#×-Ñ-Ð.¨n¸X¿]¹]¸OðMð ô % S›/¨qÐ0ûð1ús0   ÃK(Ã4K(ÄK-Ä/K3È"!K9Ë9	L/Ì(L*Ì*L/c                óÚ   — d}|rf| j                   j                  j                  j                  j	                  ||¬«      }|j
                  dv }|rt        | j                  dz  «       |rŒfS ©NT)r    )Úin_progressÚqueuediè  )rT   rf   r‡   rˆ   Úretrieveró   r   rX   ©r^   r   r    r  r—   s        r&   rŒ   z%OpenAIAssistantRunnable._wait_for_run�  sf   € ØˆÙØ—+‘+×"Ñ"×*Ñ*×/Ñ/×8Ñ8¸È9Ð8ÓUˆCØŸ*™*Ð(AÐAˆKÙÜ�d×)Ñ)¨DÑ0Ô1ò	 ð
 ˆ
r)   c              ƒ  óº  K  — |d   \  }}| j                  |j                  |j                  «      }t        «       }|j                  r7|j                  j
                  j                  D �ch c]  }|j                  ’Œ }}|D ��cg c]+  \  }}|j                  |v rt        |«      |j                  dœ‘Œ- }	}}|	|j                  |j                  dœS c c}w c c}}w ­wr¦   r©   r­   s
             r&   r    z2OpenAIAssistantRunnable._aparse_intermediate_steps˜  sè   è ø€ ð $6°bÑ#9Ñ ˆ�[Ø× Ñ  ×!3Ñ!3°[×5JÑ5JÓKˆÜ!$£ÐØ×Òà #× 3Ñ 3× GÑ G× RÒ Ró&Ù R˜"�—“Ð Rð #ð &ñ
 #5ô
á"4‘�˜Ø×"Ñ"Ð&<Ñ<ô ˜6“{°F×4GÑ4GÓHØ"4ð 	ñ 
ð )Ø!×(Ñ(Ø$×.Ñ.ñ
ð 	
ùò&ùó
ùs   ‚A'CÁ)CÁ<CÂ0CÂ3(Cc              ƒ  ó  K  — |j                  «       D ��ci c]  \  }}|dv r||“Œ }}} | j                  j                  j                  j                  j
                  |d   fd| j                  i|¤Žƒ d {  –—† S c c}}w 7 Œ
­wr´   )r¼   rU   rf   r‡   rˆ   rh   rV   r½   s        r&   r¢   z$OpenAIAssistantRunnable._acreate_run®  s¥   è ø€ ð #×(Ñ(Ô*ô
á*‘��1Øðñð ˆq‰DØ*ð 	ñ 
ð" @�T×&Ñ&×+Ñ+×3Ñ3×8Ñ8×?Ñ?Ø�{Ñ#ñ
à×*Ñ*ð
ð ñ
÷ 
ð 	
ùó#
ð"
ús   ‚B–A<§ABÁ7BÁ8Bc              ƒ  óò   K  — |j                  «       D ��ci c]  \  }}|dv r||“Œ }}} | j                  j                  j                  j                  d| j
                  |dœ|¤Žƒ d {  –—† S c c}}w 7 Œ
­wrÃ   )r¼   rU   rf   r‡   rÄ   rV   rÅ   s         r&   r¡   z/OpenAIAssistantRunnable._acreate_thread_and_runÆ  sš   è ø€ ð #×(Ñ(Ô*ô
á*‘��1Øð
ñð ˆq‰DØ*ð 	ñ 
ð  C�T×&Ñ&×+Ñ+×3Ñ3×BÑBð 
Ø×*Ñ*Øñ
ð ñ
÷ 
ð 	
ùó!
ð 
ús   ‚A7–A/§AA7Á*A5Á+A7c              ƒ  ó0  ‡‡K  — |j                   dk(  �r‡dd lŠt        ‰j                  j                  j                  d«      d   «      }t        ‰j                  j                  j                  d«      d   «      }|dkD  xs |dk(  xr |dk\  Š| j                  j                  j                  j                  j                  |j                  d¬«      ƒ d {  –—† }|D �cg c]  }|j                  |j                  k(  sŒ|‘Œ  }}| j                  s|S |D ��cg c]  }|j                  D ]  }|‘Œ Œ }}}t!        ˆˆfd„|D «       «      rd	j#                  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/        j0                  |j2                  d¬«      }t;        |«      dk(  r	d|v r|d   }|	j=                  t?        |j6                  ||
j                  d|j                  |j                  ¬«      «       Œ‘ |	S t/        j@                  |jC                  «       d¬«      }d|j                   › d|› �}t9        |«      ‚7 �Œùc c}w c c}}w # t4        $ r-}d|j2                  › d|j6                  › �}t9        |«      |‚d }~ww xY w­w)NrÇ   r   rÈ   rÉ   rÊ   rË   rÌ   c              3  óò   •K  — | ]n  }‰r4t        |‰j                  j                  j                  j                  «      n3t        |‰j                  j                  j                  j
                  «      –— Œp y ­wrÏ   rÐ   rÔ   s     €€r&   r×   z9OpenAIAssistantRunnable._aget_response.<locals>.<genexpr>ó  rØ   rÙ   rÚ   c              3  óH   K  — | ]  }|j                   j                  –— Œ y ­w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ó   r:   rô   rõ   rö   r÷   rU   rf   r‡   r   rø   r    r   ri   rY   ry   rù   rú   r   r«   r‰   r¬   rû   rü   rý   rþ   r   rb   rÿ   r   r  r5   r  rK   )r^   r—   r  r  r   r@   r  r  r  r	  r
  rû   r  r?   r  r:   rÖ   s                  @@r&   Ú_aget_responsez&OpenAIAssistantRunnable._aget_responseÝ  sÞ  ùè ø€ ð �:‰:˜Ó$Ûä §¡× 6Ñ 6× <Ñ <¸SÓ AÀ!Ñ DÓEˆMÜ §¡× 6Ñ 6× <Ñ <¸SÓ AÀ!Ñ DÓEˆMØ -°Ñ 1ò  Ø Ñ"Ò: }¸Ñ':ð ð "×.Ñ.×3Ñ3×;Ñ;×DÑD×IÑIØ—‘Øð Jó ÷ ˆHñ ,4ÓL©8 C°s·z±zÀSÇVÁVÓ7KšC¨8ˆLÐLØ—=’=Ø#Ð#á'3ôÙ'3 ÀsÇ{Ä{¸’À{� |ð ñ ô ô 
ñ  &ó
ô 
ð Ÿ™Ñ"LÁVÓ"LÓL�Ü(à$Ø!$§¡Ø!Ÿf™fñð
 Ø—v‘vØŸ-™-ô	ð 	ð �:‰:Ð*Ò*Ø—=’=Ø×*Ñ*×>Ñ>×IÑIÐIØˆGØ ×0Ñ0×DÑD×OÔO�	Ø$×-Ñ-�ð1ÜŸ:™: h×&8Ñ&8ÀÔG�Dô �t“9 ’> h°$Ñ&6Ø ™>�DØ—‘Ü)Ø%Ÿ]™]Ø#'Ø%.§\¡\ØØ"Ÿv™vØ"%§-¡-ôõ	ð Pð, ˆNÜ—:‘:˜cŸh™h›j°Ô3ˆØ'¨¯
©
 |Ð3GÈÀzÐRˆÜ˜‹oÐð{ûò MùóøôB 'ò 1àDØ#×-Ñ-Ð.¨n¸X¿]¹]¸OðMð ô % S›/¨qÐ0ûð1üs\   „CLÃKÃLÃKÃ>KÄLÄKÄ1CLÈ	!KÈ*B&LËLË	LË&(LÌLÌLc              ƒ  ó  K  — d}|r€| j                   j                  j                  j                  j	                  ||¬«      ƒ d {  –—† }|j
                  dv }|r*t        j                  | j                  dz  «      ƒ d {  –—†  |rŒ€S 7 ŒC7 Œ­wr  )	rU   rf   r‡   rˆ   r  ró   Úasyncior   rX   r  s        r&   r£   z&OpenAIAssistantRunnable._await_for_run(  s�   è ø€ ØˆÙØ×)Ñ)×.Ñ.×6Ñ6×;Ñ;×DÑDØØ#ð Eó ÷ ˆCð Ÿ*™*Ð(AÐAˆKÙÜ—m‘m D×$7Ñ$7¸$Ñ$>Ó?×?Ð?ò ð ˆ
ðøð @ús*   ‚ABÁB	Á9BÁ?BÂ BÂBÂB)r+   r   )rb   r   rc   r   rd   úSequence[Union[BaseTool, dict]]re   r   rT   z2Optional[Union[openai.OpenAI, openai.AzureOpenAI]]rj   r   r+   rR   rÏ   )r’   rK   r“   zOptional[RunnableConfig]rj   r   r+   Ú
OutputType)rb   r   rc   r   rd   r  re   r   rU   z<Optional[Union[openai.AsyncOpenAI, openai.AsyncAzureOpenAI]]rj   r   r+   rR   )rw   z'list[tuple[OpenAIAssistantAction, str]]r+   rK   )r¾   rK   r+   r   )r¾   rK   r˜   rK   r+   r   )r—   r   r+   r   )r   r   r    r   r+   r   )r.   r/   r0   r1   r   rA   rT   r2   rU   rX   rY   r   r_   r3   rl   r   r›   rž   r¤   r†   r‹   rŠ   r�   rŒ   r    r¢   r¡   r  r£   r#   r)   r&   rR   rR   Ž   s  … ñKñZ Ð(:Ô;€FˆCÓ;Ø'Ø€L�#ÓØ-ØÓØØ#€N�EÓ#Ø;Ø€HˆdÓØ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)   rR   )r+   zopenai.OpenAI)r+   zopenai.AsyncOpenAI)rL   ú:Union[dict[str, Any], type[BaseModel], Callable, BaseTool]r+   r,   )rL   r  r+   zdict[str, Any])4Ú
__future__r   r  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   r5   rA   rE   rN   rP   rø   r  rK   rR   r#   r)   r&   Ú<module>r-     sâ   ðÝ "ã Û Ý $Ý  Ý ÷õ ÷ ;Ý 4Ý %ß XÑ XÝ )Ý Hß 6Ñ 6ß ,áÛÝ7õô
˜Kô ô*˜Kô ó.)ó )ð 	Ø
Dð	à	ó	ð
(Ø
Dð
(àó
(ð ØÐ	ÑØØˆÑØÐ	)Ñ*ð,ñ€
ôd
Ð2°4¸Ð3CÑDõ d
r)   