§
    šŠtjV  ã                   ó  — d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlZd dlmZmZ d dlmZ d dlmZmZmZ d dlmZmZmZ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*m+Z+m,Z, d d
l-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z?  ej@        eA¦  «        ZBdZCdedeDfd„ZEdeeFef         defd„ZGdeeFef         dee         defd„ZHededeFdeFdedef
d„¦   «         ZI G d„ de¦  «        ZJdS )é    N)Úasynccontextmanager)ÚAnyÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚMappingÚOptionalÚSequenceÚTypeÚUnion)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLanguageModelInput)ÚBaseChatModelÚagenerate_from_streamÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageÚChatMessageChunkÚHumanMessageÚHumanMessageChunkÚSystemMessageÚSystemMessageChunkÚToolMessage)Úmake_invalid_tool_callÚparse_tool_call)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)ÚRunnable)ÚBaseTool)Úconvert_to_secret_strÚget_from_dict_or_envÚget_pydantic_field_names©Úconvert_to_openai_tool)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStrÚmodel_validator)Ú)_lc_invalid_tool_call_to_openai_tool_callÚ!_lc_tool_call_to_openai_tool_callz/https://api.baichuan-ai.com/v1/chat/completionsÚmessageÚreturnc                 ó8  — | j         }t          | t          ¦  «        r| j        |dœ}nòt          | t          ¦  «        rd|dœ}n×t          | t
          ¦  «        rTd|dœ}d| j        v r| j        d         |d<   n£| j        s| j        r&d„ | j        D ¦   «         d„ | j        D ¦   «         z   |d<   nnt          | t          ¦  «        r,d| j
        || j        p| j                             d¦  «        d	œ}n-t          | t          ¦  «        rd
|dœ}nt          d| › �¦  «        ‚|S )N)ÚroleÚcontentÚuserÚ	assistantÚ
tool_callsc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )r2   ©Ú.0Útcs     úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/baichuan.pyú
<listcomp>z,_convert_message_to_dict.<locals>.<listcomp>V   s.   € ð *ð *ð *Ø:<Õ1°"Ñ5Ô5ð*ð *ð *ó    c                 ó,   — g | ]}t          |¦  «        ‘ŒS r<   )r1   r=   s     r@   rA   z,_convert_message_to_dict.<locals>.<listcomp>X   s0   € ð ð ð àõ :¸"Ñ=Ô=ðð ð rB   ÚtoolÚname)r6   Útool_call_idr7   rE   ÚsystemzGot unknown type )r7   Ú
isinstancer   r6   r   r   Úadditional_kwargsr:   Úinvalid_tool_callsr   rF   rE   Úgetr   Ú	TypeError)r3   r7   Úmessage_dicts      r@   Ú_convert_message_to_dictrN   I   sx  € àŒo€GÝ�'�;Ñ'Ô'ð 7Ø '¤¸ÐAÐAˆˆÝ	�G�\Ñ	*Ô	*ð 7Ø &°7Ð;Ð;ˆˆÝ	�G�YÑ	'Ô	'ð 7Ø +¸Ð@Ð@ˆØ˜7Ô4Ð4Ð4Ø)0Ô)BÀ<Ô)PˆL˜Ñ&Ð&àÔð 	 7Ô#=ð 	ð*ð *Ø@GÔ@Rð*ñ *ô *ðð à!Ô4ðñ ô ñ*ˆL˜Ñ&øõ 
�G�[Ñ	)Ô	)ð 7àØ#Ô0ØØ”LÐI GÔ$=×$AÒ$AÀ&Ñ$IÔ$Ið	
ð 
ˆˆõ 
�G�]Ñ	+Ô	+ð 7Ø (°WÐ=Ð=ˆˆåÐ5¨GÐ5Ð5Ñ6Ô6Ð6àÐrB   Ú_dictc           
      óˆ  — | d         }|                       dd¦  «        }|dk    rt          |¬¦  «        S |dk    r¦g }g }i }|                       d¦  «        x}rv||d<   |D ]n}	 |                     t          |d¬	¦  «        ¦  «         Œ(# t          $ r:}|                     t          |t          |¦  «        ¦  «        ¦  «         Y d }~Œgd }~ww xY wt          ||||¬
¦  «        S |dk    r6i }d| v r| d         |d<   t          ||                       d¦  «        |¬¦  «        S |dk    rt          |¬¦  «        S t          ||¬¦  «        S )Nr6   r7   Ú r8   ©r7   r9   r:   T)Ú	return_id)r7   rI   r:   rJ   rD   rE   rF   )r7   rF   rI   rG   ©r7   r6   )rK   r   Úappendr!   Ú	Exceptionr    Ústrr   r   r   r   )	rO   r6   r7   r:   rJ   rI   Úraw_tool_callsÚraw_tool_callÚes	            r@   Ú_convert_dict_to_messager[   l   s¾  € Ø�Œ=€DØ�iŠi˜	 2Ñ&Ô&€GØˆv‚~€~Ý GÐ,Ñ,Ô,Ð,Ø	�Ò	Ð	Øˆ
ØÐØÐà"ŸYšY |Ñ4Ô4Ð4ˆ>ð 	Ø.<Ð˜lÑ+Ø!/ð ð �ðØ×%Ò%¥o°mÈtÐ&TÑ&TÔ&TÑUÔUÐUÐUøÝ ð ð ð Ø&×-Ò-Ý.¨}½cÀ!¹f¼fÑEÔEñô ð ð ð ð ð ð øøøøðøøøõ
 ØØ/Ø!Ø1ð	
ñ 
ô 
ð 	
ð 
�ŠˆØÐØ�Uˆ?ˆ?Ø(-¨f¬Ð˜fÑ%ÝØØŸš >Ñ2Ô2Ø/ð
ñ 
ô 
ð 	
ð
 
�Ò	Ð	Ý WÐ-Ñ-Ô-Ð-å 7°Ð6Ñ6Ô6Ð6s   Á"$BÂ
CÂ0CÃCÚdefault_classc                 ót  — |                       d¦  «        }|                       d¦  «        pd}|dk    s|t          k    rt          |¬¦  «        S |dk    s|t          k    rt          |¬¦  «        S |dk    s|t          k    rt          |¬¦  «        S |s|t          k    rt	          ||¬¦  «        S  ||¬¦  «        S )	Nr6   r7   rQ   r8   rR   r9   rG   rT   )rK   r   r   r   r   )rO   r\   r6   r7   s       r@   Ú_convert_delta_to_message_chunkr^   •   sÖ   € ð �9Š9�VÑÔ€DØ�iŠi˜	Ñ"Ô"Ð( b€Gàˆv‚~€~˜Õ*;Ò;Ð;Ý ¨Ð1Ñ1Ô1Ð1Ø	�Ò	Ð	 µÒ ?Ð ?Ý gÐ.Ñ.Ô.Ð.Ø	�Ò	Ð	˜]Õ.@Ò@Ð@Ý!¨'Ð2Ñ2Ô2Ð2Ø	ð .�Õ"2Ò2Ð2Ý¨°dÐ;Ñ;Ô;Ð;àˆ} WÐ-Ñ-Ô-Ð-rB   ÚclientÚmethodÚurlÚkwargsc                ó¦   K  — ddl m}  | j        ||fi |¤Ž4 ƒd{V —†} ||¦  «        W V — ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )a  Async context manager for connecting to an SSE stream.

    Args:
        client: The httpx client.
        method: The HTTP method.
        url: The URL to connect to.
        kwargs: Additional keyword arguments to pass to the client.

    Yields:
        An EventSource object.
    r   )ÚEventSourceN)Ú	httpx_sserd   Ústream)r_   r`   ra   rb   rd   Úresponses         r@   Úaconnect_httpx_sserh   §   s
  è è € ð &Ð%Ð%Ð%Ð%Ð%àˆvŒ}˜V SÐ3Ð3¨FÐ3Ð3ð $ð $ð $ð $ð $ð $ð $°xØˆk˜(Ñ#Ô#Ð#Ð#Ð#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   žA Á 
A
ÁA
c                   ó&  ‡ — e Zd ZU dZedeeef         fd„¦   «         Zedefd„¦   «         Z	 e
ed¬¦  «        Zeed<   	  e
d¬	¦  «        Zeed
<   	 dZee         ed<   	 dZeed<   	 dZee         ed<   	  e
dd¬¦  «        Zeed<   	 dZeed<   	  e
d¬¦  «        Zee         ed<   	 dZeed<   	 dZeed<   	 dZeed<   	  e
e¬¦  «        Zeeef         ed<   	  ed¬ ¦  «        Z  e!d!¬"¦  «        e"d#eeef         defd$„¦   «         ¦   «         Z# e!d!¬"¦  «        e"d#edefd%„¦   «         ¦   «         Z$edeeef         fd&„¦   «         Z%	 	 d8d'e&e'         d(ee&e                  d)ee(         d*ede)f
d+„Z*	 	 d8d'e&e'         d(ee&e                  d)ee(         d*ede+e,         f
d,„Z-	 	 	 d9d'e&e'         d(ee&e                  d)ee.         d-ee         d*ede)fd.„Z/	 	 d8d'e&e'         d(ee&e                  d)ee.         d*ede0e,         f
d/„Z1d'e&e'         d*ede2j3        fd0„Z4d'e&e'         d*edeeef         fd1„Z5d*edeeef         fd2„Z6d3e7eef         de)fd4„Z8edefd5„¦   «         Z9d6e:e;eeef         e<e=         e>e?f                  d*ede@eAeBf         fˆ fd7„ZCˆ xZDS ):ÚChatBaichuanu£  Baichuan chat model integration.

    Setup:
        To use, you should have the environment variable``BAICHUAN_API_KEY`` set with
    your API KEY.

        .. code-block:: bash

            export BAICHUAN_API_KEY="your-api-key"

    Key init args â€” completion params:
        model: Optional[str]
            Name of Baichuan model to use.
        max_tokens: Optional[int]
            Max number of tokens to generate.
        streaming: Optional[bool]
            Whether to stream the results or not.
        temperature: Optional[float]
            Sampling temperature.
        top_p: Optional[float]
            What probability mass to use.
        top_k: Optional[int]
            What search sampling control to use.

    Key init args â€” client params:
        api_key: Optional[str]
            Baichuan API key. If not passed in will be read from env var BAICHUAN_API_KEY.
        base_url: Optional[str]
            Base URL for API requests.

    See full list of supported init args and their descriptions in the params section.

    Instantiate:
        .. code-block:: python

            from langchain_community.chat_models import ChatBaichuan

            chat = ChatBaichuan(
                api_key=api_key,
                model='Baichuan4',
                # temperature=...,
                # other params...
            )

    Invoke:
        .. code-block:: python

            messages = [
                ("system", "ä½ æ˜¯ä¸€å��ä¸“ä¸šçš„ç¿»è¯‘å®¶ï¼Œå�¯ä»¥å°†ç”¨æˆ·çš„ä¸­æ–‡ç¿»è¯‘ä¸ºè‹±æ–‡ã€‚"),
                ("human", "æˆ‘å–œæ¬¢ç¼–ç¨‹ã€‚"),
            ]
            chat.invoke(messages)

        .. code-block:: python

            AIMessage(
                content='I enjoy programming.',
                response_metadata={
                    'token_usage': {
                        'prompt_tokens': 93,
                        'completion_tokens': 5,
                        'total_tokens': 98
                    },
                    'model': 'Baichuan4'
                },
                id='run-944ff552-6a93-44cf-a861-4e4d849746f9-0'
            )

    Stream:
        .. code-block:: python

            for chunk in chat.stream(messages):
                print(chunk)

        .. code-block:: python

            content='I' id='run-f99fcd6f-dd31-46d5-be8f-0b6a22bf77d8'
            content=' enjoy programming.' id='run-f99fcd6f-dd31-46d5-be8f-0b6a22bf77d8

        .. code-block:: python

            stream = chat.stream(messages)
            full = next(stream)
            for chunk in stream:
                full += chunk
            full

        .. code-block:: python

            AIMessageChunk(
                content='I like programming.',
                id='run-74689970-dc31-461d-b729-3b6aa93508d2'
            )

    Async:
        .. code-block:: python

            await chat.ainvoke(messages)

            # stream
            # async for chunk in chat.astream(messages):
            #     print(chunk)

            # batch
            # await chat.abatch([messages])

        .. code-block:: python

            AIMessage(
                content='I enjoy programming.',
                response_metadata={
                    'token_usage': {
                        'prompt_tokens': 93,
                        'completion_tokens': 5,
                        'total_tokens': 98
                    },
                    'model': 'Baichuan4'
                },
                id='run-952509ed-9154-4ff9-b187-e616d7ddfbba-0'
            )
    Tool calling:

        .. code-block:: python
            class get_current_weather(BaseModel):
                '''Get current weather.'''

                location: str = Field('City or province, such as Shanghai')


            llm_with_tools = ChatBaichuan(model='Baichuan3-Turbo').bind_tools([get_current_weather])
            llm_with_tools.invoke('How is the weather today?')

        .. code-block:: python

            [{'name': 'get_current_weather',
            'args': {'location': 'New York'},
            'id': '3951017OF8doB0A',
            'type': 'tool_call'}]

    Response metadata
        .. code-block:: python

            ai_msg = chat.invoke(messages)
            ai_msg.response_metadata

        .. code-block:: python

            {
                'token_usage': {
                    'prompt_tokens': 93,
                    'completion_tokens': 5,
                    'total_tokens': 98
                },
                'model': 'Baichuan4'
            }

    r4   c                 ó
   — ddiS )NÚbaichuan_api_keyÚBAICHUAN_API_KEYr<   ©Úselfs    r@   Ú
lc_secretszChatBaichuan.lc_secrets[  s   € ð Ð 2ð
ð 	
rB   c                 ó   — dS )NTr<   rn   s    r@   Úlc_serializablezChatBaichuan.lc_serializablea  s   € àˆtrB   Úbase_url)ÚdefaultÚaliasÚbaichuan_api_baseÚapi_key)ru   rl   NÚbaichuan_secret_keyFÚ	streamingÚ
max_tokensé<   ÚtimeoutÚrequest_timeoutzBaichuan2-Turbo-192KÚmodelç333333Ó?)rt   Útemperatureé   Útop_kç333333ë?Útop_pÚwith_search_enhance)Údefault_factoryÚmodel_kwargsT)Úpopulate_by_nameÚbefore)ÚmodeÚvaluesc           
      ó¤  — t          | ¦  «        }|                     di ¦  «        }t          |¦  «        D ]Y}||v rt          d|› d�¦  «        ‚||vr<t                               d|› d|› d|› d�¦  «         |                     |¦  «        ||<   ŒZ|                     |                     ¦   «         ¦  «        }|rt          d|› d	�¦  «        ‚||d<   |S )
z>Build extra kwargs from additional params that were passed in.r‡   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r)   rK   ÚlistÚ
ValueErrorÚloggerÚwarningÚpopÚintersectionÚkeys)Úclsr‹   Úall_required_field_namesÚextraÚ
field_nameÚinvalid_model_kwargss         r@   Úbuild_extrazChatBaichuan.build_extra„  s4  € õ $<¸CÑ#@Ô#@Ð Ø—
’
˜>¨2Ñ.Ô.ˆÝ˜v™,œ,ð 		;ð 		;ˆJØ˜UÐ"Ð"Ý Ð!F¨*Ð!FÐ!FÐ!FÑGÔGÐGØÐ!9Ð9Ð9Ý—’ðN *ð Nð NØðNð Nà)3ðNð Nð Nñô ð ð
 %+§J¢J¨zÑ$:Ô$:��jÑ!øà7×DÒDÀUÇZÂZÁ\Ä\ÑRÔRÐØð 	ÝðTÐ2ð Tð Tð Tñô ð ð
 "'ˆˆ~ÑØˆrB   c                 ó€   — t          |ddt          ¦  «        |d<   t          t          |ddgd¦  «        ¦  «        |d<   |S )Nrv   ÚBAICHUAN_API_BASErl   rw   rm   )r(   ÚDEFAULT_API_BASEr'   )r”   r‹   s     r@   Úvalidate_environmentz!ChatBaichuan.validate_environmentŸ  s^   € õ ';ØØØÝñ	'
ô '
ˆÐ"Ñ#õ &;Ý ØØ# YÐ/Ø"ñô ñ&
ô &
ˆÐ!Ñ"ð ˆrB   c                 óf   — | j         | j        | j        | j        | j        | j        dœ}i |¥| j        ¥S )z4Get the default parameters for calling Baichuan API.)r~   r€   r„   r‚   rf   rz   )r~   r€   r„   r‚   ry   rz   r‡   )ro   Únormal_paramss     r@   Ú_default_paramszChatBaichuan._default_params±  sD   € ð ”ZØÔ+Ø”ZØ”ZØ”nØœ/ð
ð 
ˆð 6�-Ð5 4Ô#4Ð5Ð5rB   ÚmessagesÚstopÚrun_managerrb   c                 óø   — | j         r  | j        d|||dœ|¤Ž}t          |¦  «        S  | j        |fi |¤Ž}|j        dk    rt          d|› �¦  «        ‚|                     ¦   «         }|                      |¦  «        S )N)r¡   r¢   r£   éÈ   ú"Error from Baichuan api response: r<   )ry   Ú_streamr   Ú_chatÚstatus_coderŽ   ÚjsonÚ_create_chat_result)ro   r¡   r¢   r£   rb   Ústream_iterÚresrg   s           r@   Ú	_generatezChatBaichuan._generate¿  s¨   € ð Œ>ð 	5Ø&˜$œ,ð Ø!¨¸+ðð ØIOðð ˆKõ (¨Ñ4Ô4Ð4àˆdŒj˜Ð,Ð, VÐ,Ð,ˆØŒ?˜cÒ!Ð!ÝÐGÀ#ÐGÐGÑHÔHÐHØ—8’8‘:”:ˆØ×'Ò'¨Ñ1Ô1Ð1rB   c              +   ó˜  K  —  | j         |fddi|¤Ž}|j        dk    rt          d|› �¦  «        ‚t          }|                     ¦   «         D ]þ}|                     d¦  «                             d¦  «        }|                     dd¦  «        }t          |¦  «        dk    r|d         nd }|€Œ`|d	k    r d S t          j
        |¦  «        }	|	                     d
¦  «        D ]k}
t          |
                     d¦  «        |¦  «        }|j        }t          |¬¦  «        }|r)|                     t!          |j        ¦  «        |¬¦  «         |V — ŒlŒÿd S )Nrf   Tr¥   r¦   zutf-8z
zdata: é   z[DONE]ÚchoicesÚdelta©r3   ©Úchunk)r¨   r©   rŽ   r   Ú
iter_linesÚdecodeÚstripÚsplitÚlenrª   ÚloadsrK   r^   Ú	__class__r#   Úon_llm_new_tokenrW   r7   )ro   r¡   r¢   r£   rb   r­   Údefault_chunk_classrµ   Úpartsrg   ÚmÚcg_chunks               r@   r§   zChatBaichuan._streamÒ  sy  è è € ð ˆdŒj˜Ð9Ð9¨$Ð9°&Ð9Ð9ˆØŒ?˜cÒ!Ð!ÝÐGÀ#ÐGÐGÑHÔHÐHÝ6DÐØ—^’^Ñ%Ô%ð 	ð 	ˆEØ—L’L Ñ)Ô)×/Ò/°Ñ7Ô7ˆEØ—K’K ¨!Ñ,Ô,ˆEÝ # E¡
¤
¨Q¢ �E˜!”H�H°DˆEØˆ}ØØ˜Ò Ð Ø��Ý”z %Ñ(Ô(ˆHØ—\’\ )Ñ,Ô,ð ð �Ý7Ø—E’E˜'‘N”NÐ$7ñô �ð ',¤oÐ#Ý.°uÐ=Ñ=Ô=�Øð UØ×0Ò0µ°U´]Ñ1CÔ1CÈ8Ð0ÑTÔTÐTØ����ðð	ð 	rB   rf   c              ‹   óò  K  — |�|n| j         }|r& | j        |f||dœ|¤Ž}t          |¦  «        ƒ d {V —†S  | j        di |¤Ž} | j        |fi |¤Ž}	dd l}
|
                     || j        ¬¦  «        4 ƒd {V —†	 }|                     | j	        |	¬¦  «        ƒ d {V —†}| 
                    ¦   «          d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   |                      |                     ¦   «         ¦  «        S )N)r¢   r£   r   ©Úheadersr|   ©rª   r<   )ry   Ú_astreamr   Ú_create_headers_parametersÚ_create_payload_parametersÚhttpxÚAsyncClientr}   Úpostrv   Úraise_for_statusr«   rª   )ro   r¡   r¢   r£   rf   rb   Úshould_streamr¬   rÄ   ÚpayloadrÉ   r_   rg   s                r@   Ú
_ageneratezChatBaichuan._agenerateð  sÙ  è è € ð #)Ð"4˜˜¸$¼.ˆØð 	<Ø'˜$œ-ØðØ#°ðð Ø@Fðð ˆKõ /¨{Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;à1�$Ô1Ð;Ð;°FÐ;Ð;ˆØ1�$Ô1°(ÐEÐE¸fÐEÐEˆàˆˆˆà×$Ò$Ø TÔ%9ð %ñ 
ô 
ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(àØ#Ÿ[š[¨Ô)?Àg˜[ÑNÔNÐNÐNÐNÐNÐNÐNˆHØ×%Ò%Ñ'Ô'Ð'ð		(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð
 ×'Ò'¨¯ª©¬Ñ8Ô8Ð8s   Á87CÃ
CÃCc                ó  K  —  | j         di |¤Ž} | j        |fddi|¤Ž}dd l}|                     || j        ¬¦  «        4 ƒd {V —†	 }t          |d| j        |¬¦  «        4 ƒd {V —†	 }	|	                     ¦   «         2 3 d {V —†}
t          j	        |
j
        ¦  «        }t          |d         ¦  «        dk    rŒ:|d         d         }t          |d         t          ¦  «        }|                     d	d ¦  «        }|�d	|ind }t          ||¬
¦  «        }|r"|                     |j        |¬¦  «        ƒ d {V —† |W V — |� nŒÀ6 	 d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )Nrf   Tr   rÃ   ÚPOSTrÅ   r±   r²   Úfinish_reason)r3   Úgeneration_infor´   r<   )rÇ   rÈ   rÉ   rÊ   r}   rh   rv   Ú	aiter_sserª   r»   Údatarº   r^   r   rK   r#   r½   Útext)ro   r¡   r¢   r£   rb   rÄ   rÎ   rÉ   r_   Úevent_sourceÚsserµ   ÚchoicerÒ   rÓ   s                  r@   rÆ   zChatBaichuan._astream  s.  è è € ð 2�$Ô1Ð;Ð;°FÐ;Ð;ˆØ1�$Ô1°(ÐRÐRÀ4ÐRÈ6ÐRÐRˆØˆˆˆà×$Ò$Ø TÔ%9ð %ñ 
ô 
ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	àÝ)Ø˜ Ô 6¸Wðñ ô ð ð ð ð ð ð ð ð àØ!-×!7Ò!7Ñ!9Ô!9ð ð ð ð ð ð ð ˜#Ý œJ s¤xÑ0Ô0�EÝ˜5 Ô+Ñ,Ô,°Ò1Ð1Ø Ø" 9Ô-¨aÔ0�FÝ;Ø˜wœ­ñô �Eð %+§J¢J¨ÀÑ$EÔ$E�Mð )Ð4ð )¨-Ð8Ð8à!ð $õ
 0Ø %°ðñ ô �Eð #ð TØ)×:Ò:¸5¼:ÈUÐ:ÑSÔSÐSÐSÐSÐSÐSÐSÐSØ�K�K�K�KØ$Ð0Ø˜ð 1ð+ ":Ð!9ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	sC   ÁE4Á'EÁ<D<ÂB;EÄ>E4Å
E	ÅE4ÅE	ÅE4Å4
E>ÆE>c                 ó�   —  | j         |fi |¤Ž}| j        } | j        di |¤Ž}t          j        || j        ||| j        ¬¦  «        }|S )N)ra   r|   rÄ   rª   rf   r<   )rÈ   rv   rÇ   ÚrequestsrË   r}   ry   )ro   r¡   rb   rÎ   ra   rÄ   r­   s          r@   r¨   zChatBaichuan._chat4  sm   € Ø1�$Ô1°(ÐEÐE¸fÐEÐEˆØÔ$ˆØ1�$Ô1Ð;Ð;°FÐ;Ð;ˆåŒmØØÔ(ØØØ”>ð
ñ 
ô 
ˆð ˆ
rB   c           	      óx  — i | j         ¥|¥}|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     d¦  «        }|                     dd	¦  «        }|                     d
d	¦  «        }	|                     dg ¦  «        }
|d„ |D ¦   «         |||||	|
dœ}|S )Nr€   r   r‚   r�   r„   rƒ   r~   r…   Frf   Útoolsc                 ó,   — g | ]}t          |¦  «        ‘ŒS r<   )rN   )r>   rÀ   s     r@   rA   z;ChatBaichuan._create_payload_parameters.<locals>.<listcomp>P  s!   € ÐGÐGÐG¸Õ1°!Ñ4Ô4ÐGÐGÐGrB   )r~   r¡   r‚   r„   r€   r…   rf   rÝ   )r    r‘   )ro   r¡   rb   Ú
parametersr€   r‚   r„   r~   r…   rf   rÝ   rÎ   s               r@   rÈ   z'ChatBaichuan._create_payload_parametersB  sÖ   € ð 8˜Ô,Ð7°Ð7ˆ
Ø —n’n ]°CÑ8Ô8ˆØ—’˜w¨Ñ*Ô*ˆØ—’˜w¨Ñ-Ô-ˆØ—’˜wÑ'Ô'ˆØ(ŸnšnÐ-BÀEÑJÔJÐØ—’ ¨%Ñ0Ô0ˆØ—’˜w¨Ñ+Ô+ˆð ØGÐG¸hÐGÑGÔGØØØ&Ø#6ØØð	
ð 	
ˆð ˆrB   c                 ó    — i | j         ¥|¥}|                     di ¦  «        }d}| j        r| j                             ¦   «         }dd|› �dœ|¥}|S )NrÄ   rQ   zapplication/jsonzBearer )zContent-TypeÚAuthorization)r    r‘   rl   Úget_secret_value)ro   rb   rß   Údefault_headersrw   rÄ   s         r@   rÇ   z'ChatBaichuan._create_headers_parameters[  sx   € Ø7˜Ô,Ð7°Ð7ˆ
Ø$Ÿ.š.¨°BÑ7Ô7ˆØˆØÔ ð 	?ØÔ+×<Ò<Ñ>Ô>ˆGð /Ø0 wÐ0Ð0ð
ð 
ð ð
ˆð
 ˆrB   rg   c                 óÖ   — g }|d         D ]<}t          |d         ¦  «        }t          |¬¦  «        }|                     |¦  «         Œ=|d         }|| j        dœ}t	          ||¬¦  «        S )Nr±   r3   r³   Úusage)Útoken_usager~   )ÚgenerationsÚ
llm_output)r[   r"   rU   r~   r$   )ro   rg   rç   Úcr3   Úgenræ   rè   s           r@   r«   z ChatBaichuan._create_chat_resulti  s   € ØˆØ˜)Ô$ð 	$ð 	$ˆAÝ.¨q°¬|Ñ<Ô<ˆGÝ ¨Ð1Ñ1Ô1ˆCØ×Ò˜sÑ#Ô#Ð#Ð#à˜wÔ'ˆØ%0¸4¼:ÐFÐFˆ
Ý k¸jÐIÑIÔIÐIrB   c                 ó   — dS )Nzbaichuan-chatr<   rn   s    r@   Ú	_llm_typezChatBaichuan._llm_typet  s   € àˆrB   rÝ   c                 óR   •— d„ |D ¦   «         } t          ¦   «         j        dd|i|¤ŽS )aÿ  Bind tool-like objects to this chat model.

        Args:
            tools: A list of tool definitions to bind to this chat model.
                Can be a dictionary, pydantic model, callable, or BaseTool.
                Pydantic
                models, callables, and BaseTools will be automatically converted to
                their schema dictionary representation.
            **kwargs: Any additional parameters to pass to the
                :class:`~langchain.runnable.Runnable` constructor.
        c                 ó,   — g | ]}t          |¦  «        ‘ŒS r<   r*   )r>   rD   s     r@   rA   z+ChatBaichuan.bind_tools.<locals>.<listcomp>‰  s!   € ÐJÐJÐJ¸DÕ1°$Ñ7Ô7ÐJÐJÐJrB   rÝ   r<   )ÚsuperÚbind)ro   rÝ   rb   Úformatted_toolsr¼   s       €r@   Ú
bind_toolszChatBaichuan.bind_toolsx  s:   ø€ ð" KÐJÀEÐJÑJÔJˆØ�u‰wŒwŒ|Ð<Ð< /Ð<°VÐ<Ð<Ð<rB   )NN)NNN)EÚ__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   rW   rp   Úboolrr   r.   rœ   rv   Ú__annotations__rl   r/   rx   r   ry   rz   Úintr}   r~   r€   Úfloatr‚   r„   r…   Údictr‡   r   r-   Úmodel_configr0   Úclassmethodr™   r�   r    r	   r   r   r$   r®   r   r#   r§   r   rÏ   r   rÆ   rÛ   ÚResponser¨   rÈ   rÇ   r
   r«   rì   r   r   r   r,   r   r&   r%   r   r   rò   Ú__classcell__)r¼   s   @r@   rj   rj   ¼   s©  ø€ € € € € € ð\ð \ð| ð
˜D  c œNð 
ð 
ð 
ñ „Xð
ð
 ð ð ð ð ñ „Xðð #˜UÐ+;À:ÐNÑNÔNÐ�sÐNÐNÑNØ#Ø"' %¨iÐ"8Ñ"8Ô"8Ð�iÐ8Ð8Ñ8ØØ/3Ð˜ )Ô,Ð3Ð3Ñ3ØUØ€IˆtÐÐÑØ/Ø $€J�˜”Ð$Ð$Ñ$Ø/Ø ˜5¨°9Ð=Ñ=Ô=€O�SÐ=Ð=Ñ=Ø0Ø'€Eˆ3Ð'Ð'Ñ'ð/à#( 5°Ð#5Ñ#5Ô#5€K�˜%”Ð5Ð5Ñ5Ø+Ø€Eˆ3€N€N�NØ.Ø€Eˆ5ÐÐÑØ'Ø %Ð˜Ð%Ð%Ñ%ð8à#( 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>ØQà�:Øðñ ô €Lð €_˜(Ð#Ñ#Ô#Øð  c¨3 h¤ð °Cð ð ð ñ „[ñ $Ô#ðð2 €_˜(Ð#Ñ#Ô#Øð¨$ð °3ð ð ð ñ „[ñ $Ô#ðð  ð6  c¨3 h¤ð 6ð 6ð 6ñ „Xð6ð  %)Ø:>ð	2ð 2à�{Ô#ð2ð �t˜C”yÔ!ð2ð Ð6Ô7ð	2ð
 ð2ð 
ð2ð 2ð 2ð 2ð, %)Ø:>ð	ð à�{Ô#ðð �t˜C”yÔ!ðð Ð6Ô7ð	ð
 ðð 
Ð%Ô	&ðð ð ð ðB %)Ø?CØ!%ð9ð 9à�{Ô#ð9ð �t˜C”yÔ!ð9ð Ð;Ô<ð	9ð
 ˜”ð9ð ð9ð 
ð9ð 9ð 9ð 9ð< %)Ø?Cð	'ð 'à�{Ô#ð'ð �t˜C”yÔ!ð'ð Ð;Ô<ð	'ð
 ð'ð 
Ð*Ô	+ð'ð 'ð 'ð 'ðR˜d ;Ô/ð ¸3ð À8ÔCTð ð ð ð ðØ˜[Ô)ðØ58ðà	ˆc�3ˆhŒðð ð ð ð2°3ð ¸4ÀÀSÀ¼>ð ð ð ð ð	J¨G°C¸°HÔ,=ð 	JÀ*ð 	Jð 	Jð 	Jð 	Jð ð˜3ð ð ð ñ „Xðð=à˜˜d 3¨ 8œn¨d°9¬o¸xÈÐQÔRÔSð=ð ð=ð 
Ð$ iÐ/Ô	0ð	=ð =ð =ð =ð =ð =ð =ð =ð =ð =rB   rj   )Krª   ÚloggingÚ
contextlibr   Útypingr   r   r   r   r   r	   r
   r   r   r   r   rÛ   Úlangchain_core.callbacksr   r   Úlangchain_core.language_modelsr   Ú*langchain_core.language_models.chat_modelsr   r   r   Úlangchain_core.messagesr   r   r   r   r   r   r   r   r   r   r   Ú*langchain_core.output_parsers.openai_toolsr    r!   Úlangchain_core.outputsr"   r#   r$   Úlangchain_core.runnablesr%   Úlangchain_core.toolsr&   Úlangchain_core.utilsr'   r(   r)   Ú%langchain_core.utils.function_callingr+   Úpydanticr,   r-   r.   r/   r0   Ú(langchain_community.chat_models.llamacppr1   r2   Ú	getLoggerró   r�   rœ   rü   rN   rW   r[   r^   rh   rj   r<   rB   r@   ú<module>r     só  ðØ €€€Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€ðð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ -Ð -Ð -Ð -Ð -Ð -Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð
 IÐ HÐ HÐ HÐ HÐ Hðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð
 
ˆÔ	˜8Ñ	$Ô	$€àDÐ ð  kð  °dð  ð  ð  ð  ðF&7 G¨C°¨HÔ$5ð &7¸+ð &7ð &7ð &7ð &7ðR.Ø�3˜�8Ôð.Ø-1Ð2BÔ-Cð.àð.ð .ð .ð .ð$ ð$Øð$Øð$Ø#&ð$Ø25ð$àð$ð $ð $ñ Ôð$ð(N=ð N=ð N=ð N=ð N=�=ñ N=ô N=ð N=ð N=ð N=rB   