Ë
    µŒjàM  ã            	       ó*  — d dl 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mZ d dl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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&m'Z' d d	l(m)Z)m*Z* d d
l+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 dZ3 e jh                  e5«      Z6dedee   defd„Z7dedee8ef   fd„Z9dedefd„Z:dedefd„Z;dee   dee   fd„Z<dejz                  ddfd„Z>dejz                  ddfd„Z? G d„ de«      Z@	 d!de@de	eeef      deegef   fd „ZAy)"é    N)ÚAnyÚAsyncContextManagerÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚOptionalÚTupleÚTypeÚUnionÚcast)ÚSSEError)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModelÚLangSmithParams)Úcreate_base_retry_decorator)
Ú	AIMessageÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageÚChatMessageChunkÚHumanMessageÚHumanMessageChunkÚSystemMessageÚSystemMessageChunk)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Úconvert_to_secret_strÚget_from_env)ÚAliasChoicesÚ
ConfigDictÚFieldÚ	SecretStrÚmodel_validator)ÚSelfz%https://clovastudio.stream.ntruss.comÚsseÚdefault_classÚreturnc                 ó¼  — | j                  «       }| j                  dk(  rt        |«      }t        d|¬«      S |j	                  d«      }|j	                  d«      }|j	                  d«      xs 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 )NÚresultÚ )ÚcontentÚresponse_metadataÚmessageÚroler0   Úuser)r0   Ú	assistantÚsystem)r0   r3   )ÚjsonÚeventÚ_sse_data_to_response_metadatar   Úgetr   r   r   )r*   r+   Ússe_datar1   r2   r3   r0   s          úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/naver.pyÚ_convert_chunk_to_message_chunkr=   5   sÕ   € ð �x‰x‹z€HØ
‡y�y�HÒÜ:¸8ÓDÐÜ bÐ<MÔNÐNà�l‰l˜9Ó%€GØ�;‰;�vÓ€DØ�k‰k˜)Ó$Ò*¨€GØˆv‚~˜Ô*;Ò;Ü ¨Ô1Ð1Ø	�Ò	 ´Ò ?Ü gÔ.Ð.Ø	�Ò	˜]Ô.@Ò@Ü!¨'Ô2Ð2Ù	�Ô"2Ò2Ü¨°dÔ;Ð;á WÔ-Ð-ó    r;   c                 ó‚   — i }d| v r| d   |d<   d| v r| d   |d<   d| v r| d   |d<   d| v r| d   |d<   d| v r| d   |d	<   |S )
NÚ
stopReasonÚstop_reasonÚinputLengthÚinput_lengthÚoutputLengthÚoutput_lengthÚseedÚaiFilterÚ	ai_filter© )r;   r1   s     r<   r9   r9   L   s†   € ØÐØ�xÑØ+3°LÑ+AÐ˜-Ñ(Ø˜Ñ Ø,4°]Ñ,CÐ˜.Ñ)Ø˜Ñ!Ø-5°nÑ-EÐ˜/Ñ*Ø�ÑØ$,¨VÑ$4Ð˜&Ñ!Ø�XÑØ)1°*Ñ)=Ð˜+Ñ&ØÐr>   r2   c                 ó”  — t        | t        «      r!t        | j                  | j                  ¬«      S t        | t
        «      rt        d| j                  ¬«      S t        | t        «      rt        d| j                  ¬«      S t        | t        «      rt        d| j                  ¬«      S t        j                  d«       t        d| › �«      ‚)N)r3   r0   r4   r6   r5   zmFunctionMessage, ToolMessage not yet supported (https://api.ncloud-docs.com/docs/clovastudio-chatcompletions)zGot unknown type )Ú
isinstancer   Údictr3   r0   r   r   r   ÚloggerÚwarningÚ
ValueError©r2   s    r<   Ú&_convert_message_to_naver_chat_messagerQ   [   s›   € ô �'œ;Ô'Ü˜Ÿ™¨w¯©Ô?Ð?Ü	�Gœ\Ô	*Ü˜¨¯©Ô9Ð9Ü	�Gœ]Ô	+Ü˜¨7¯?©?Ô;Ð;Ü	�GœYÔ	'Ü˜¨g¯o©oÔ>Ð>ä�‰ðMô	
ô Ð,¨W¨IÐ6Ó7Ð7r>   Ú_messagec                 ó  — | d   }|dv s
J d|› �«       ‚t        t        | d   «      }i }|dk(  rt        ||¬«      S |dk(  rt        ||¬«      S |dk(  rt	        ||¬«      S t
        j                  d	|«       t        d
|› �«      ‚)Nr3   )r5   r6   r4   z7Expected role to be 'assistant', 'system', 'user', got r0   r4   )r0   Úadditional_kwargsr6   r5   zGot unknown role %szGot unknown role )r   Ústrr   r   r   rM   rN   rO   )rR   r3   r0   rT   s       r<   Ú&_convert_naver_chat_message_to_messagerV   n   sÊ   € ð �FÑ€DØð ñ ð Hð 
AÀÀÐGó	Hð ô
 ”3˜ Ñ+Ó,€GØ Ðàˆv‚~ÜØØ/ô
ð 	
ð 
�Ò	ÜØØ/ô
ð 	
ð 
�Ò	ÜØØ/ô
ð 	
ô
 	�‰Ð,¨dÔ3ÜÐ,¨T¨FÐ3Ó4Ð4r>   Úevent_source_mgrc                óÎ  K  — | 4 ƒd{  –—† }t        |j                  «      ƒ d{  –—†  |j                  «       2 3 d{  –—† }|j                  «       }|j                  dk(  r'|j                  di «      dk(  r ddd«      ƒd{  –—†  y|j                  dk(  rt        |j                  ¬«      ‚|­–— Œz7 Œ«7 Œ�7 Œy7 Œ66 ddd«      ƒd{  –—†7   y# 1 ƒd{  –—†7  sw Y   yxY w­w)z$Iterate over the server-sent events.NÚsignalÚdataú[DONE]ÚerrorrP   )Ú_araise_on_errorÚresponseÚ	aiter_sser7   r8   r:   r   rZ   )rW   Úevent_sourcer*   Ú
event_datas       r<   Ú
_aiter_sserb   Ž   sº   è ø€ ÷  Ñ <Ü˜|×4Ñ4Ó5×5Ð5Ø%×/Ñ/Ô1÷ 	�#ØŸ™›ˆJØ�y‰y˜HÒ$¨¯©¸ÀÓ)CÀxÒ)OØ÷  ×Ðð �y‰y˜GÒ#Ü s§x¡xÔ0Ð0ØŒIð  øØ5øð	øð  øà1÷  ×××Óüs”   ‚C%‰B5ŠC%�C¦B7§C»B=¿B9Á B=Á6CÁ9C%ÂB;ÂC%Â
+CÂ5C%Â7CÂ9B=Â;C%Â=CÂ>C%Ã	CÃ
C%ÃC"ÃCÃC"ÃC%r^   c                 ó  — t         j                  j                  | j                  «      r^| j	                  «       j                  d«      }t        j                  d| j                  › d| j                  › d|› �| j                  | ¬«      ‚y)ú+Raise an error if the response is an error.úutf-8úError response ú while fetching ú: ©Úrequestr^   N)	ÚhttpxÚcodesÚis_errorÚstatus_codeÚreadÚdecodeÚHTTPStatusErrorÚurlrj   ©r^   Úerror_messages     r<   Ú_raise_on_errorru   �   s{   € ä‡{�{×Ñ˜H×0Ñ0Ô1Ø Ÿ™›×.Ñ.¨wÓ7ˆÜ×#Ñ#Ø˜h×2Ñ2Ð3ð 4Ø&Ÿl™l˜^¨2¨m¨_ð>à×$Ñ$Øô	
ð 	
ð 2r>   c              ƒ   ó.  K  — t         j                  j                  | j                  «      rf| j	                  «       ƒ d{  –—† j                  d«      }t        j                  d| j                  › d| j                  › d|› �| j                  | ¬«      ‚y7 ŒS­w)rd   Nre   rf   rg   rh   ri   )	rk   rl   rm   rn   Úareadrp   rq   rr   rj   rs   s     r<   r]   r]   ©   s†   è ø€ ä‡{�{×Ñ˜H×0Ñ0Ô1Ø'Ÿ~™~Ó/×/×7Ñ7¸Ó@ˆÜ×#Ñ#Ø˜h×2Ñ2Ð3ð 4Ø&Ÿl™l˜^¨2¨m¨_ð>à×$Ñ$Øô	
ð 	
ð 2Ø/ús   ‚=B¿BÁ ABc                   óv  ‡ — e Zd ZU dZ ed¬«      Zeej                     e	d<    ed¬«      Z
eej                     e	d<    ed edd«      d	¬
«      Zee	d<    edd¬«      Zee   e	d<    edd¬«      Zee	d<    edd¬«      Zee   e	d<   	  edd¬«      Zee   e	d<   	  edd¬«      Zee	d<   	  eddd¬«      Zee   e	d<    eddd¬«      Zee   e	d <    eddd!¬«      Zee   e	d"<    edd#d$¬«      Zee   e	d%<    edd&d'¬«      Zee   e	d(<    edd)¬«      Zeee      e	d*<    ed¬«      Zee   e	d+<    edd,d¬«      Z ee   e	d-<    edd.¬/«      Z!ee	d0<    ed1d2¬3«      Z"ee	d4<    e#d5d6¬7«      Z$e%d8e&ee'f   fd9„«       Z(e%d8e&ee'f   fd:„«       Z)e%d8e&eef   fd;„«       Z*e%d8efd<„«       Z+	 dRd)ee,e      d=e'd8e-fˆ fd>„Z.e%d8e&ee'f   fd?„«       Z/e%d8efd@„«       Z0 e1dA¬B«      d8e2fdC„«       Z3d8efdD„Z4dSdE„Z5d8e&ee'f   fdF„Z6dGe,e7   d)ee,e      d8e8e,e&   e&ee'f   f   fdH„Z9d=e'd8e'fdI„Z:	 dRdJee;   d=e'd8e'fdK„Z<dLe&d8e=fdM„Z>	 	 dTdGe,e7   d)ee,e      dJee?   d=e'd8e=f
dN„Z@	 	 dTdGe,e7   d)ee,e      dJee?   d=e'd8eAeB   f
dO„ZC	 	 dTdGe,e7   d)ee,e      dJee;   d=e'd8e=f
dP„ZD	 	 dTdGe,e7   d)ee,e      dJee;   d=e'd8eEeB   f
dQ„ZFˆ xZGS )UÚ
ChatClovaXaã  `NCP ClovaStudio` Chat Completion API.

    following environment variables set or passed in constructor in lower case:
    - ``NCP_CLOVASTUDIO_API_KEY``
    - ``NCP_APIGW_API_KEY``

    Example:
        .. code-block:: python

            from langchain_core.messages import HumanMessage

            from langchain_community import ChatClovaX

            model = ChatClovaX()
            model.invoke([HumanMessage(content="Come up with 10 names for a song about parrots.")])
    N)ÚdefaultÚclientÚasync_clientzHCX-003Ú
model_nameÚmodelzNCP ClovaStudio chat model name)rz   Úvalidation_aliasÚdescriptionz*NCP Clova Studio chat model tuning task ID)rz   r€   Útask_idFz=false: use testapp, true: use service app on NCP Clova StudioÚservice_appÚapi_key)rz   ÚaliasÚncp_clovastudio_api_keyÚapigw_api_keyÚncp_apigw_api_keyr/   Úbase_urlg        g      ð?g      à?)ÚgtÚlerz   Útemperaturer   é€   )ÚgerŠ   rz   Útop_kgš™™™™™é?Útop_pé
   g      @Úrepeat_penaltyi   éd   Ú
max_tokensÚstopÚstop_beforeÚinclude_ai_filtersl   ÿÿ rF   éZ   )r‰   rz   Útimeouté   é   )r�   rz   Úmax_retriesTrI   )Úpopulate_by_nameÚprotected_namespacesr,   c           	      ó  — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  dœ}|j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}|S c c}}w )z/Get the default parameters for calling the API.)r‹   ÚtopKÚtopPÚrepeatPenaltyÚ	maxTokensÚ
stopBeforeÚincludeAiFiltersrF   )	r‹   rŽ   r�   r‘   r“   r•   r–   rF   Úitems)ÚselfÚdefaultsÚkÚvÚfiltereds        r<   Ú_default_paramszChatClovaX._default_paramsð   s�   € ð  ×+Ñ+Ø—J‘JØ—J‘JØ!×0Ñ0ØŸ™Ø×*Ñ*Ø $× 7Ñ 7Ø—I‘Iñ	
ˆð &.§^¡^Ô%5ÔGÑ%5™T˜Q ¸¹�A�q‘DÐ%5ˆÑGØˆùó Hs   Á/
BÁ:Bc                 óL   — | j                   | j                  d<   | j                  S )zGet the identifying parameters.r}   )r}   r«   ©r¦   s    r<   Ú_identifying_paramszChatClovaX._identifying_params   s$   € ð .2¯_©_ˆ×Ñ˜\Ñ*Ø×#Ñ#Ð#r>   c                 ó4   — | j                  «       sddiS dddœS )Nr…   ÚNCP_CLOVASTUDIO_API_KEYÚNCP_APIGW_API_KEY)r…   r‡   )Ú_is_new_api_keyr­   s    r<   Ú
lc_secretszChatClovaX.lc_secrets  s1   € à×#Ñ#Ô%à)Ð+Dðð ð
 ,EØ%8ñð r>   c                  ó   — y)zReturn type of chat model.z
chat-naverrI   r­   s    r<   Ú	_llm_typezChatClovaX._llm_type  s   € ð r>   Úkwargsc                 ó4   •— t        ‰| �  dd|i|¤Ž}d|d<   |S )z,Get the parameters used to invoke the model.r”   ÚnaverÚls_providerrI   )ÚsuperÚ_get_ls_params)r¦   r”   r¶   ÚparamsÚ	__class__s       €r<   r»   zChatClovaX._get_ls_params  s+   ø€ ô ‘Ñ'Ñ<¨TÐ<°VÑ<ˆØ 'ˆˆ}ÑØˆr>   c                 ó   — | j                   S )z'Get the parameters used for the client.)r«   r­   s    r<   Ú_client_paramszChatClovaX._client_params  s   € ð ×#Ñ#Ð#r>   c                 ó´   — | j                   rdnd}| j                  r| j                  › d|› d| j                  › d�S | j                  › d|› d| j                  › �S )zGET chat completion api urlÚ
serviceappÚtestappÚ/z
/v1/tasks/z/chat-completionsz/v1/chat-completions/)r‚   r�   rˆ   r}   )r¦   Úapp_types     r<   Ú_api_urlzChatClovaX._api_url$  sa   € ð $(×#3Ò#3‘<¸ˆà�<Š<à—=‘=�/  8 *¨J°t·|±|°nÐDUÐVðð —m‘m�_ A h ZÐ/DÀTÇ_Á_ÐDUÐVÐVr>   Úafter)Úmodec                 óH  — | j                   s| j                  st        d«      ‚| j                  st	        t        dd«      «      | _        | j                  «       s| j                  «        | j                  st        ddt        «      | _        | j                  s?t        j                  | j                  | j                  «       | j                  ¬«      | _
        | j                  s?t        j                   | j                  | j                  «       | j                  ¬«      | _        | S )Nz6either model_name or task_id must be assigned a value.r…   r°   rˆ   ÚNCP_CLOVASTUDIO_API_BASE_URL)rˆ   Úheadersr˜   )r}   r�   rO   r…   r"   r#   r²   Ú_init_fields_on_old_api_keyrˆ   Ú_DEFAULT_BASE_URLr{   rk   ÚClientÚdefault_headersr˜   r|   ÚAsyncClientr­   s    r<   Úvalidate_model_afterzChatClovaX.validate_model_after0  så   € à—’ 4§<¢<ÜÐUÓVÐVà×+Ò+Ü+@ÜÐ6Ð8QÓRó,ˆDÔ(ð ×#Ñ#Ô%Ø×,Ñ,Ô.à�}Š}Ü(ØÐ:Ô<MóˆDŒMð �{Š{ÜŸ,™,ØŸ™Ø×,Ñ,Ó.ØŸ™ôˆDŒKð × Ò Ü %× 1Ñ 1ØŸ™Ø×,Ñ,Ó.ØŸ™ô!ˆDÔð ˆr>   c                 ón   — | j                   r)| j                   j                  «       j                  d«      S y)Nznv-F)r…   Úget_secret_valueÚ
startswithr­   s    r<   r²   zChatClovaX._is_new_api_keyR  s.   € Ø×'Ò'Ø×/Ñ/×@Ñ@ÓB×MÑMÈeÓTÐTàr>   c                 óT   — | j                   st        t        ddd«      «      | _         y y )Nr‡   r±   r/   )r‡   r"   r#   r­   s    r<   rË   z&ChatClovaX._init_fields_on_old_api_keyX  s+   € Ø×%Ò%Ü%:ÜÐ0Ð2EÀrÓJó&ˆDÕ"ð &r>   c                 ó   — dddœ}| j                   r| j                   j                  «       nd }| j                  «       r
d|› �|d<   |S |r||d<   | j                  r| j                  j                  «       nd }|r||d<   |S )Nzapplication/json)zContent-TypeÚAcceptzBearer ÚAuthorizationzX-NCP-CLOVASTUDIO-API-KEYzX-NCP-APIGW-API-KEY)r…   rÒ   r²   r‡   )r¦   rÊ   Úclovastudio_api_keyr†   s       r<   rÎ   zChatClovaX.default_headers^  sª   € à.Ø(ñ
ˆð ×+Ò+ð ×(Ñ(×9Ñ9Ô;àð 	ð ×ÑÔ!à)0Ð1DÐ0EÐ'FˆG�OÑ$ð ˆñ #Ø7J�Ð3Ñ4ð ×)Ò)ð ×&Ñ&×7Ñ7Ô9àð ñ
 Ø1>�Ð-Ñ.àˆr>   Úmessagesc                 ór   — | j                   }|�	d|v r||d<   |D �cg c]  }t        |«      ‘Œ }}||fS c c}w )Nr£   )r¿   rQ   )r¦   rÙ   r”   r¼   ÚmÚmessage_dictss         r<   Ú_create_message_dictsz ChatClovaX._create_message_dicts|  sQ   € ð ×$Ñ$ˆØÐ °Ñ 6Ø#'ˆF�<Ñ áLTÓUÉHÀqÔ?ÀÕBÈHˆÐUØ˜fÐ$Ð$ùò Vs   œ4c                 ó$  ‡ ‡‡‡— ddl m}mŠ d‰vrd‰d<   ‰d   }t        t        j
                  ‰ j                  «      Š|rdt        |   fˆˆˆˆ fd„} |«       S ‰j                  ‰ j                  ‰¬«      }t        |«       |j                  «       S )Nr   )ÚServerSentEventÚconnect_sseÚstreamFr,   c               3   óˆ  •K  —  ‰‰d‰j                   ‰¬«      5 } t        | j                  «       | j                  «       D ]i  }|j	                  «       }|j
                  dk(  r|j                  di «      dk(  r
 d d d «       y |j
                  dk(  rt        |j                  ¬«      ‚|–— Œk 	 d d d «       y # 1 sw Y   y xY w­w)NÚPOST©r7   rY   rZ   r[   r\   rP   )	rÅ   ru   r^   Úiter_sser7   r8   r:   r   rZ   )r`   r*   ra   r{   rà   r¶   r¦   s      €€€€r<   rå   z3ChatClovaX._completion_with_retry.<locals>.iter_sse“  s¨   øè ø€ Ù Ø˜F D§M¡M¸õà!Ü# L×$9Ñ$9Ô:Ø+×4Ñ4Ö6˜Ø%(§X¡X£Z˜
àŸI™I¨Ò1Ø *§¡¨v°rÓ :¸hÒ Fà"÷ð ð Ÿ9™9¨Ò/Ü"*°3·8±8Ô"<Ð<Ø!›	ñ  7÷	÷ ñ üs)   ƒCšAB6Á8	CÂ+B6Â-	CÂ6B?Â;C©rr   r7   )Ú	httpx_sserß   rà   r   rk   rÍ   r{   r   ÚpostrÅ   ru   r7   )r¦   r¶   rß   rá   rå   r^   r{   rà   s   ``    @@r<   Ú_completion_with_retryz!ChatClovaX._completion_with_retry†  s‡   û€ ÷	
ð
 ˜6Ñ!Ø$ˆF�8Ñà˜Ñ!ˆÜ”e—l‘l D§K¡KÓ0ˆÙð"œh Ñ7÷ "ð "ñ  “:Ðà—{‘{ t§}¡}¸6�{ÓBˆHÜ˜HÔ%Ø—=‘=“?Ð"r>   Úrun_managerc              ‹   óŠ   ‡ ‡K  — ddl mŠ 	 t        ‰ |¬«      }|dt        dt        fˆˆ fd„«       } |di |¤Žƒ d {  –—† S 7 Œ­w)Nr   )Úaconnect_sse)rê   r¶   r,   c               ›   óN  •K  — d| vrd| d<   | d   }t        t        j                  ‰j                  «      }|r! ‰|d‰j                  | ¬«      }t        |«      S |j                  ‰j                  | ¬«      ƒ d {  –—† }t        |«      ƒ d {  –—†  |j                  «       S 7 Œ'7 Œ­w)Nrá   Frã   rä   ræ   )	r   rk   rÏ   r|   rÅ   rb   rè   r]   r7   )r¶   rá   r|   r`   r^   rì   r¦   s        €€r<   ré   zBChatClovaX._acompletion_with_retry.<locals>._completion_with_retry³  s¢   øè ø€ à˜vÑ%Ø#(��xÑ Ø˜HÑ%ˆFÜ¤× 1Ñ 1°4×3DÑ3DÓEˆLÙÙ+Ø  &¨$¯-©-¸fô �ô " ,Ó/Ð/à!-×!2Ñ!2°t·}±}È6Ð!2Ó!R×R�Ü& xÓ0×0Ð0Ø—}‘}“Ð&ð SøØ0ús$   ƒA6B%Á9B!Á:B%ÂB#ÂB%Â#B%rI   )rç   rì   Ú_create_retry_decoratorr   )r¦   rê   r¶   Úretry_decoratorré   rì   s   `    @r<   Ú_acompletion_with_retryz"ChatClovaX._acompletion_with_retry©  sQ   ùè ø€ õ
 	+à>Ü1°$ÀKÔPˆà	ð	'´3ð 	'¼3õ 	'ó 
ð	'ñ ,Ñ5¨fÑ5×5Ð5Ð5ús   „8A¼A½Ar^   c                 ó  — g }|j                  di «      }|j                  di «      }t        |«      }t        |t        «      rJ|j                  d«      |j                  d«      |j                  d«      |j                  d«      z   dœ|_        t        |¬«      }|j                  |«       |j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d	«      d
œ}t        ||¬«      S )Nr.   r2   rB   rD   )Úinput_tokensÚoutput_tokensÚtotal_tokensrP   r@   rF   rG   )rA   rC   rE   rF   rH   )ÚgenerationsÚ
llm_output)r:   rV   rK   r   Úusage_metadatar   Úappendr!   )r¦   r^   rõ   r.   Úmsgr2   Úgenrö   s           r<   Ú_create_chat_resultzChatClovaX._create_chat_resultÅ  sê   € ØˆØ—‘˜h¨Ó+ˆØ�j‰j˜ BÓ'ˆÜ8¸Ó=ˆä�gœyÔ)à &§
¡
¨=Ó 9Ø!'§¡¨NÓ!;Ø &§
¡
¨=Ó 9¸F¿J¹JÀ~Ó<VÑ Vñ&ˆGÔ"ô Øô
ˆð 	×Ñ˜3Ôð "Ÿ:™: lÓ3Ø"ŸJ™J }Ó5Ø#ŸZ™Z¨Ó7Ø—J‘J˜vÓ&ØŸ™ JÓ/ñ
ˆ
ô  k¸jÔIÐIr>   c                 ó‚   — | j                  ||«      \  }}i |¥|¥} | j                  dd|i|¤Ž}| j                  |«      S )NrÙ   rI   )rÝ   ré   rû   ©r¦   rÙ   r”   rê   r¶   rÜ   r¼   r^   s           r<   Ú	_generatezChatClovaX._generateà  sU   € ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ%�FÐ%˜fÐ%ˆà.�4×.Ñ.ÑP¸ÐPÈÑPˆà×'Ñ'¨Ó1Ð1r>   c              +   ó4  K  — | j                  ||«      \  }}i |¥|¥ddi¥}t        } | j                  d||dœ|¤ŽD ]W  }t        ||«      }	|	j                  }t        |	¬«      }
|r+|j                  t        t        |	j                  «      |
¬«       |
–— ŒY y ­w©Nrá   T©rÙ   rê   rP   )ÚtokenÚchunkrI   )
rÝ   r   ré   r=   r½   r    Úon_llm_new_tokenr   rU   r0   )r¦   rÙ   r”   rê   r¶   rÜ   r¼   Údefault_chunk_classr*   Ú	new_chunkÚ	gen_chunks              r<   Ú_streamzChatClovaX._streamî  s¸   è ø€ ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆä6DÐØ.�4×.Ñ.ð 
Ø"°ñ
Ø?Eô
ˆCô 8¸Ð=PÓQˆIØ"+×"5Ñ"5ÐÜ+°IÔ>ˆIáØ×,Ñ,Üœs I×$5Ñ$5Ó6¸ið -ô ð ‹Oñ
ùs   ‚BBc              ‹   ó    K  — | j                  ||«      \  }}i |¥|¥} | j                  d||dœ|¤Žƒ d {  –—† }| j                  |«      S 7 Œ­w)Nr  rI   )rÝ   rð   rû   rý   s           r<   Ú
_ageneratezChatClovaX._agenerate  so   è ø€ ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ%�FÐ%˜fÐ%ˆà5˜×5Ñ5ð 
Ø"°ñ
Ø?Eñ
÷ 
ˆð ×'Ñ'¨Ó1Ð1ð	
ús   ‚4A¶A·Ac                ón  K  — | j                  ||«      \  }}i |¥|¥ddi¥}t        } | j                  d||dœ|¤Žƒ d {  –—† 2 3 d {  –—† }t        ||«      }	|	j                  }t        |	¬«      }
|r3|j                  t        t        |	j                  «      |
¬«      ƒ d {  –—†  |
­–— Œh7 Œl7 Œe7 Œ6 y ­wr   )
rÝ   r   rð   r=   r½   r    r  r   rU   r0   )r¦   rÙ   r”   rê   r¶   rÜ   r¼   r  r  r  r  s              r<   Ú_astreamzChatClovaX._astream  sã   è ø€ ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆä6DÐØ!= ×!=Ñ!=ð "
Ø"°ñ"
Ø?Eñ"
÷ 
ð 
÷ 	�%ô 8¸Ð?RÓSˆIØ"+×"5Ñ"5ÐÜ+°IÔ>ˆIáØ!×2Ñ2Üœs I×$5Ñ$5Ó6¸ið 3ó ÷ ð ð ŒOð
øð 	øðøñ
ùsH   ‚>B5Á B-ÁB5ÁB3Á	B/Á
B3ÁAB5Â"B1Â#B5Â/B3Â1B5Â3B5©N)r,   N)NN)HÚ__name__Ú
__module__Ú__qualname__Ú__doc__r&   r{   r
   rk   rÍ   Ú__annotations__r|   rÏ   r$   r}   rU   r�   r‚   Úboolr…   r'   r‡   rˆ   r‹   ÚfloatrŽ   Úintr�   r‘   r“   r•   Úlistr–   rF   r˜   r›   r%   Úmodel_configÚpropertyr   r   r«   r®   r³   rµ   r	   r   r»   r¿   rÅ   r(   r)   rÐ   r²   rË   rÎ   r   r   rÝ   ré   r   rð   r!   rû   r   rþ   r   r    r  r
  r   r  Ú__classcell__)r½   s   @r<   ry   ry   µ   sä  ø… ññ" &+°4Ô%8€FˆH�U—\‘\Ñ"Ó8Ù05¸dÔ0C€L�(˜5×,Ñ,Ñ-ÓCáØÙ% l°GÓ<Ø5ô€J�ó ñ
 #ØÐ"Nô€GˆX�c‰]ó ñ ØØSô€K�ó ñ
 49ÀÈYÔ3WÐ˜X iÑ0ÓWØXá-2¸4ÀÔ-WÐ�x 	Ñ*ÓWØRá "¨JÔ7€HˆcÓ7ðñ $)¨C°CÀÔ#E€K�˜%‘ÓEÙ  A¨#°qÔ9€Eˆ8�C‰=Ó9Ù" a¨C¸Ô=€Eˆ8�E‰?Ó=Ù&+¨s°rÀ3Ô&G€N�H˜U‘OÓGÙ %¨¨t¸SÔ A€J�˜‘ÓAÙ',°TÀÔ'H€K�˜$˜s™)Ñ$ÓHÙ).°uÔ)=Ð˜ ™Ó=Ù 1¨¸QÔ?€Dˆ(�3‰-Ó?á˜A rÔ*€GˆSÓ*Ù ¨1Ô-€K�Ó-á¨tÈ"ÔM€Làð  c¨3 h¡ò ó ðð ð$ T¨#¨s¨(¡^ò $ó ð$ð
 ð	˜D  c ™Nò 	ó ð	ð ð˜3ò ó ðð
 +/ñØ˜T #™YÑ'ðØ:=ðà	õð ð$  S¨# X¡ò $ó ð$ð ð	W˜#ò 	Wó ð	Wñ ˜'Ô"ð dò ó #ððB ó óð  c¨3 h¡ó ð<%Ø˜[Ñ)ð%Ø19¸$¸s¹)Ñ1Dð%à	ˆt�D‰z˜4  S ™>Ð)Ñ	*ó%ð!#¨sð !#°só !#ðJ @Dñ6àÐ;Ñ<ð6ð ð6ð 
ó	6ð8J¨Dð J°Zó Jð< %)Ø:>ñ	2à�{Ñ#ð2ð �t˜C‘yÑ!ð2ð Ð6Ñ7ð	2ð
 ð2ð 
ó2ð" %)Ø:>ñ	à�{Ñ#ðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð 
Ð%Ñ	&óð8 %)Ø?Cñ	2à�{Ñ#ð2ð �t˜C‘yÑ!ð2ð Ð;Ñ<ð	2ð
 ð2ð 
ó2ð& %)Ø?Cñ	à�{Ñ#ðð �t˜C‘yÑ!ðð Ð;Ñ<ð	ð
 ðð 
Ð*Ñ	+÷r>   ry   Úllmrê   c                 ór   — t         j                  t         j                  g}t        || j                  |¬«      S )zFReturns a tenacity retry decorator, preconfigured to handle exceptions)Úerror_typesr›   rê   )rk   ÚRequestErrorÚStreamErrorr   r›   )r  rê   Úerrorss      r<   rî   rî   1  s2   € ô × Ñ ¤%×"3Ñ"3Ð4€FÜ&Ø¨¯©À[ôð r>   r  )BÚloggingÚtypingr   r   r   r   r   r   r	   r
   r   r   r   r   rk   rç   r   Úlangchain_core.callbacksr   r   Ú*langchain_core.language_models.chat_modelsr   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.messagesr   r   r   r   r   r   r   r   r   r   Úlangchain_core.outputsr   r    r!   Úlangchain_core.utilsr"   r#   Úpydanticr$   r%   r&   r'   r(   Útyping_extensionsr)   rÌ   Ú	getLoggerr  rM   r=   rU   r9   rQ   rV   rb   ÚResponseru   r]   ry   rî   rI   r>   r<   Ú<module>r,     s|  ðÛ ÷÷ ÷ ó ó Ý ÷÷ VÝ K÷÷ ÷ ÷ SÑ Rß D÷õ õ #à;Ð à	ˆ×	Ñ	˜8Ó	$€ð.Ø	ð.Ø!Ð"2Ñ3ð.àó.ð.¨Tð °d¸3À¸8±nó ð8Øð8à	ó8ð&5Øð5àó5ð@Ø)¨#Ñ.ðà�4Ñóð	
˜eŸn™nð 	
°ó 	
ð	
 U§^¡^ð 	
¸ó 	
ôy�ô yð@ 	ñ	Ø	ðàØÐ+Ð-EÐEÑFñðð
 ˆsˆe�SˆjÑôr>   