§
    šŠtj½G  ã                  óâ  — d Z ddlmZ ddlZ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 ddlm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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* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 erddl7m8Z8 ddl9m:Z:  ej;        e<¦  «        Z=dZ>dZ?dZ@ G d„ deA¦  «        ZBdAd„ZCdBd „ZDdCd%„ZE	 dDdEd+„ZF G d,„ d-ee3¦  «        ZGd.dd/œdFd6„ZH	 	 dGdHd@„ZIdS )IzWrapper around Prem's Chat API.é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚSequenceÚTupleÚTypeÚUnion)ÚCallbackManagerForLLMRun)ÚLanguageModelInput)ÚBaseChatModel)Úcreate_base_retry_decorator)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageÚChatMessageChunkÚHumanMessageÚHumanMessageChunkÚSystemMessageÚSystemMessageChunkÚToolMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)ÚRunnable)ÚBaseTool)Úget_from_dict_or_envÚpre_init©Úconvert_to_openai_tool)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStr)ÚChatCompletionResponseStream)ÚChatCompletionResponsezM
Given the set of tools you used and the response, provide the final answer

z
{json}
z3
tool id: {tool_id}
tool_response: {tool_response}
c                  ó   — e Zd ZdZdS )ÚChatPremAPIErrorzError with the `PremAI` API.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/premai.pyr.   r.   J   s   € € € € € Ø&Ð&Ð&Ð&r4   r.   ÚtextÚstrÚstopúOptional[List[str]]Úreturnc                ób   — |€| S |D ]'}|                       |¦  «        }|dk    r
| d|…         } Œ(| S )z0Truncates text at the earliest stop token found.Néÿÿÿÿ)Úfind)r6   r8   Ú
stop_tokenÚstop_token_idxs       r5   Ú_truncate_at_stop_tokensr@   N   sM   € ð
 €|Øˆàð )ð )ˆ
ØŸš :Ñ.Ô.ˆØ˜RÒÐØ˜˜˜Ô(ˆDøØ€Kr4   Úresponser,   r    c           
     óî  — | j         st          d¦  «        ‚g }| j         D �]}|j        j        }|€t          d|› d�¦  «        ‚t	          |j        j        pd|¬¦  «        }|€t          d|› �¦  «        ‚|dk    rR|j        d	         }|€g }nd
„ |D ¦   «         }|                     t          |t          ||¬¦  «        ¬¦  «        ¦  «         Œ­|dk    r3|                     t          |t          |¬¦  «        ¬¦  «        ¦  «         Œæ|                     t          |t          ||¬¦  «        ¬¦  «        ¦  «         �Œ| j        �"t          |dd„ | j        D ¦   «         i¬¦  «        S t          |ddi¬¦  «        S )z4Converts a Prem API response into a LangChain resultz-ChatResponse must have at least one candidateNzChatResponse z must have a role.Ú )r6   r8   z"ChatResponse must have a content: Ú	assistantÚ
tool_callsc                óV   — g | ]&}|d          |d         d         |d         d         dœ‘Œ'S )ÚidÚfunctionÚnameÚ	arguments)rG   rI   Úargsr3   )Ú.0Ú	tool_calls     r5   ú
<listcomp>z'_response_to_result.<locals>.<listcomp>u   sR   € ð ð ð ð "ð	 (¨œoØ )¨*Ô 5°fÔ =Ø )¨*Ô 5°kÔ Bðð ðð ð r4   )ÚcontentrE   )r6   ÚmessageÚuser©rO   ©ÚrolerO   Údocument_chunksc                ó6   — g | ]}|                      ¦   «         ‘ŒS r3   )Úto_dict)rL   Úchunks     r5   rN   z'_response_to_result.<locals>.<listcomp>‘   s-   € ð $ð $ð $Ø(-�E—M’M‘O”Oð$ð $ð $r4   )ÚgenerationsÚ
llm_output)Úchoicesr.   rP   rT   r@   rO   Úappendr   r   r   r   rU   r    )rA   r8   rY   ÚchoicerT   rO   rE   Útoolss           r5   Ú_response_to_resultr_   ]   s  € ð Ôð PÝÐNÑOÔOÐOØ(*€KØÔ"ð %ñ %ˆØŒ~Ô"ˆØˆ<Ý"Ð#M°6Ð#MÐ#MÐ#MÑNÔNÐNõ +°´Ô0FÐ0LÈ"ÐSWÐXÑXÔXˆØˆ?Ý"Ð#QÈÐ#QÐ#QÑRÔRÐRà�;ÒÐØœ¨Ô5ˆJØÐ!Ø��ðð ð &0ðñ ô �ð ×ÒÝØ ­)¸GÐPUÐ*VÑ*VÔ*Vðñ ô ñô ð ð ð
 �VŠ^ˆ^Ø×ÒÝ Gµ\È'Ð5RÑ5RÔ5RÐSÑSÔSñô ð ð ð ×ÒÝØ ­+¸4ÈÐ*QÑ*QÔ*Qðñ ô ñô ð ñ ð ÔÐ+ÝØ#à!ð $ð $Ø19Ô1Ið$ñ $ô $ðð
ñ 
ô 
ð 	
õ  kÐ?PÐRVÐ>WÐXÑXÔXÐXr4   r+   Údefault_classúType[BaseMessageChunk]údTuple[Union[BaseMessageChunk, HumanMessageChunk, AIMessageChunk, SystemMessageChunk], Optional[str]]c                óÖ  — | j         d         j        }|                     dd¦  «        }|                     dd¦  «        }i }| j         d         j        }|dk    s|t          k    rt	          |¬¦  «        |fS |dk    s|t
          k    rt          ||¬¦  «        |fS |d	k    s|t          k    rt          |¬¦  «        |fS |s|t          k    rt          ||¬
¦  «        |fS  ||¬¦  «        |fS )z(Converts delta response to message chunkr   rT   rC   rO   rQ   rR   rD   )rO   Úadditional_kwargsÚsystem)rO   rT   )r[   ÚdeltaÚgetÚfinish_reasonr   r   r   r   )rA   r`   Ú_deltarT   rO   rd   Úfinish_reasonss          r5   Ú(_convert_delta_response_to_message_chunkrk   š   s  € ð Ô˜aÔ Ô&€FØ�:Š:�f˜bÑ!Ô!€DØ�jŠj˜ BÑ'Ô'€GØ ÐØ$,Ô$4°QÔ$7Ô$E€Nàˆv‚~€~˜Õ*;Ò;Ð;Ý ¨Ð1Ñ1Ô1°>ÐAÐAØ	�Ò	Ð	 µÒ ?Ð ?å 7Ð>OÐPÑPÔPØð
ð 	
ð 
�Ò	Ð	˜]Õ.@Ò@Ð@Ý!¨'Ð2Ñ2Ô2°NÐBÐBØ	ð >�Õ"2Ò2Ð2Ý¨°dÐ;Ñ;Ô;¸^ÐKÐKàˆ} WÐ-Ñ-Ô-¨~Ð=Ð=r4   Úinput_messagesúList[BaseMessage]Útemplate_idúOptional[str]ú*Tuple[Optional[str], List[Dict[str, Any]]]c                ó`  — d}g }| D �]°}t          |t          ¦  «        rt          |j        ¦  «        }Œ-t          |t          ¦  «        rœ|€+|                     dt          |j        ¦  «        dœ¦  «         Œoi }|j        �|j        dk    sJ t          dd¦  «        ¦   «         ‚t          |j        ¦  «        |t          |j        ¦  «        <   |                     d||dœ¦  «         ŒÞt          |t          ¦  «        r™|j	        �t          |j	        ¦  «        dk    r,|                     d	t          |j        ¦  «        dœ¦  «         �Œ>|j        |j        |j        |j	        d
œ}|                     d	t                               |¬¦  «        dœ¦  «         �ŒŒt          |t          ¦  «        r�Œ£t          d¦  «        ‚d}| D ]D}t          |t          ¦  «        r-|j        }|j        }	|t"                               ||	¬¦  «        z  }ŒE|dk    r$t$          }
|
|z  }
|                     d|
dœ¦  «         ||fS )zcConverts a list of LangChain Messages into a simple dict
    which is the message structure in PremNrQ   rS   rC   z9When using prompt template there should be id associated zwith each HumanMessage)rT   rn   Úparamsr   rD   )rG   rO   Úresponse_metadatarE   )ÚjsonzNo such role explicitly exists)Útool_idÚtool_response)Ú
isinstancer   r7   rO   r   r\   rG   Ú
ValueErrorr   rE   Úlenrs   Ú!INTERMEDIATE_TOOL_RESULT_TEMPLATEÚformatr   r.   Útool_call_idÚSINGLE_TOOL_PROMPT_TEMPLATEÚTOOL_PROMPT_HEADER)rl   rn   Úsystem_promptÚexamples_and_messagesÚ	input_msgrr   Úai_msg_to_jsonÚtool_promptru   Útool_resultÚprompts              r5   Ú_messages_to_prompt_dictr†   ¶   sÇ  € ð $(€MØ24Ðà#ð 5Eñ 5Eˆ	Ý�i¥Ñ/Ô/ð 4	EÝ 	Ô 1Ñ2Ô2ˆMˆMå˜	¥<Ñ0Ô0ð 1	EØÐ"Ø%×,Ò,à &Ý#& yÔ'8Ñ#9Ô#9ðð ñô ð ð ð *,�Ø!œÐ0°y´|ÀrÒ7IÐ7IÐ7IÍJØOØ,ñMô MÑ7IÔ7IÐJõ -0°	Ô0AÑ,BÔ,B�•s˜9œ<Ñ(Ô(Ñ)Ø%×,Ò,à &Ø'2Ø"(ðð ñô ð ð õ ˜	¥9Ñ-Ô-ð 	EØÔ#Ð+­s°9Ô3GÑ/HÔ/HÈAÒ/MÐ/MØ%×,Ò,à +Ý#& yÔ'8Ñ#9Ô#9ðð ñô ð ñ ð $œ,Ø(Ô0Ø)2Ô)DØ"+Ô"6ð	"ð "�ð &×,Ò,à +Ý#D×#KÒ#KØ!/ð $Lñ $ô $ðð ñô ð ñ õ ˜	¥;Ñ/Ô/ð 	EÙõ #Ð#CÑDÔDÐDð €KØ#ð ð ˆ	Ý�i¥Ñ-Ô-ð 	ØÔ,ˆGØ#Ô+ˆKØÕ6×=Ò=Ø¨{ð >ñ ô ñ ˆKøð �bÒÐÝ#ˆØ�+ÑˆØ×$Ò$¨fÀÐ%HÐ%HÑIÔIÐIàÐ/Ð/Ð/r4   c                  óÐ  ‡ — e Zd ZU dZded<   	  edd¬¦  «        Zded<   	  edd	¬¦  «        Zd
ed<   	 dZd
ed<   	  ed¬¦  «        Z	ded<   	 dZ
ded<   	  ed¬¦  «        Zded<   	  ed¬¦  «        Zded<   	 dZd
ed<   	 dZded<   	 dZded<   	 dZded<    eddd¬ ¦  «        Zed9d$„¦   «         Zed:d&„¦   «         Zed;d(„¦   «         Zd<d*„Z	 	 d=d>d2„Z	 	 d=d?d4„Zd@ˆ fd8„Zˆ xZS )AÚ
ChatPremAIzªPremAI Chat models.

    To use, you will need to have an API key. You can find your existing API Key
    or generate a new one here: https://app.premai.io/api_keys/
    ÚintÚ
project_idNÚapi_key)ÚdefaultÚaliaszOptional[SecretStr]Úpremai_api_keyÚ
model_namero   ÚmodelÚ
session_id)rŒ   zOptional[float]ÚtemperatureÚtop_pzOptional[int]Ú
max_tokensé   Úmax_retriesrC   r   zOptional[dict]ÚrepositoriesFúOptional[bool]Ú	streamingr   ÚclientTÚforbid)Úpopulate_by_nameÚarbitrary_types_allowedÚextraÚvaluesr   r:   c                ó  — 	 ddl m} n"# t          $ r}t          d¦  «        |‚d}~ww xY w	 t          |dd¦  «        } |t	          |t
          ¦  «        r|n|j        ¬¦  «        |d<   n"# t          $ r}t          d	¦  «        |‚d}~ww xY w|S )
zFValidate that the package is installed and that the API token is validr   )ÚPremzQCould not import Prem Python package.Please install it with: `pip install premai`NrŽ   ÚPREMAI_API_KEY)r‹   rš   z,Your API Key is incorrect. Please try again.)	Úpremair¡   ÚImportErrorr#   rw   r7   Ú_secret_valueÚ	Exceptionrx   )ÚclsrŸ   r¡   ÚerrorrŽ   s        r5   Úvalidate_environmentsz ChatPremAI.validate_environmentsF  sí   € ð	Ø#Ð#Ð#Ð#Ð#Ð#Ð#øÝð 	ð 	ð 	Ýð?ñô ð ðøøøøð	øøøð
	XÝ4HØÐ(Ð*:ñ5ô 5ˆNð  $˜tå˜n­cÑ2Ô2ð2˜˜à#Ô1ð ñ  ô  ˆF�8ÑÐøõ
 ð 	Xð 	Xð 	XÝÐKÑLÔLÐRWÐWøøøøð	Xøøøàˆs'   ‚	 ‰
(“#£(¬<A) Á)
BÁ3BÂBr7   c                ó   — dS )Nr£   r3   ©Úselfs    r5   Ú	_llm_typezChatPremAI._llm_type^  s   € àˆxr4   úDict[str, Any]c                óD   — | j         | j        | j        | j        | j        dœS )N©r�   r   r’   r”   r—   r°   r«   s    r5   Ú_default_paramszChatPremAI._default_paramsb  s/   € ð ”ZØ!Ô/ØÔ+Øœ/Ø Ô-ð
ð 
ð 	
r4   Úkwargsc                ó¢  — g d¢}g }|D ]3}||v r-t          j        d|› d�¦  «         |                     |¦  «         Œ4|D ]}|                     |¦  «         Œi | j        ¥|¥}t          | j                             ¦   «         ¦  «        D ]F}|                     |¦  «        �|                     |¦  «        dk    r|                     |d ¦  «         ŒG|S )N)r“   Úfrequency_penaltyÚpresence_penaltyÚ
logit_biasr8   ÚseedzWARNING: Parameter z is not supported in kwargs.rC   )ÚwarningsÚwarnr\   Úpopr±   ÚlistÚkeysrg   )r¬   r²   Úkwargs_to_ignoreÚkeys_to_removeÚkeyÚ
all_kwargss         r5   Ú_get_all_kwargszChatPremAI._get_all_kwargsl  s  € ð
ð 
ð 
Ðð ˆàð 	+ð 	+ˆCØÐ&Ð&Ð&Ý”ÐU°CÐUÐUÐUÑVÔVÐVØ×%Ò% cÑ*Ô*Ð*øà!ð 	ð 	ˆCØ�JŠJ�s‰OŒOˆOˆOà7˜Ô,Ð7°Ð7ˆ
Ý˜Ô,×1Ò1Ñ3Ô3Ñ4Ô4ð 	*ð 	*ˆCØ�~Š~˜cÑ"Ô"Ð*¨j¯nªn¸SÑ.AÔ.AÀRÒ.GÐ.GØ—’˜s DÑ)Ô)Ð)øØÐr4   Úmessagesrm   r8   r9   Úrun_managerú"Optional[CallbackManagerForLLMRun]r    c                óè   — d|v rt          ||d         ¬¦  «        \  }}nt          |¦  «        \  }}|�|dk    r||d<    | j        di |¤Ž}t          | f| j        |d|dœ|¤Ž}t	          ||¬¦  «        S )	Nrn   ©rn   rC   r   F©rŠ   rÂ   ÚstreamrÃ   )rA   r8   r3   )r†   rÁ   Úchat_with_retryrŠ   r_   )	r¬   rÂ   r8   rÃ   r²   r   Úmessages_to_passrÀ   rA   s	            r5   Ú	_generatezChatPremAI._generate…  sÇ   € ð ˜FÐ"Ð"Ý.FØ f¨]Ô&;ð/ñ /ô /Ñ+ˆMÐ+Ð+õ /GÀxÑ.PÔ.PÑ+ˆMÐ+àÐ$¨¸"Ò)<Ð)<Ø&3ˆF�?Ñ#à)�TÔ)Ð3Ð3¨FÐ3Ð3ˆ
Ý"Øð
à”Ø%ØØ#ð
ð 
ð ð
ð 
ˆõ #¨H¸4Ð@Ñ@Ô@Ð@r4   úIterator[ChatGenerationChunk]c              +  ó  K  — d|v rt          ||d         ¬¦  «        \  }}nt          |¦  «        \  }}|�t                               d¦  «         d|vr|�|dk    r||d<    | j        di |¤Ž}t          }t          | f| j        |d|dœ|¤ŽD ]u}		 t          |	|¬¦  «        \  }
}|�t          |¬	¦  «        nd }t          |
|¬
¦  «        }|r| 
                    |j        |¬¦  «         |V — Œ_# t          $ r
}Y d }~Œnd }~ww xY wd S )Nrn   rÆ   z,stop is not supported in langchain streamingr   rC   TrÇ   )rA   r`   )rh   )rP   Úgeneration_info)rX   r3   )r†   ÚloggerÚwarningrÁ   r   rÉ   rŠ   rk   Údictr   Úon_llm_new_tokenr6   r¦   )r¬   rÂ   r8   rÃ   r²   r   rÊ   rÀ   Údefault_chunk_classÚstreamed_responserX   rh   rÎ   Úcg_chunkÚ_s                  r5   Ú_streamzChatPremAI._stream¢  s²  è è € ð ˜FÐ"Ð"Ý.FØ f¨]Ô&;ð/ñ /ô /Ñ+ˆMÐ+Ð+õ /GÀxÑ.PÔ.PÑ+ˆMÐ+àÐÝ�NŠNÐIÑJÔJÐJà &Ð(Ð(ØÐ(¨]¸bÒ-@Ð-@Ø*7��Ñ'à)�TÔ)Ð3Ð3¨FÐ3Ð3ˆ
å,Ðå!0Øð"
à”Ø%ØØ#ð"
ð "
ð ð"
ð "
ð 	ð 	ÐðÝ'OØ.Ð>Qð(ñ (ô (Ñ$��}ð
 %Ð0õ  }Ð5Ñ5Ô5Ð5àð  õ
 /Ø!°?ðñ ô �ð ð PØ×0Ò0°´ÀhÐ0ÑOÔOÐOØ����øÝð ð ð Ø����øøøøðøøøð/	ð 	s   ÂAC+Ã+
C?Ã:C?r^   úDSequence[Union[Dict[str, Any], Type[BaseModel], Callable, BaseTool]]ú'Runnable[LanguageModelInput, AIMessage]c                óR   •— d„ |D ¦   «         } t          ¦   «         j        dd|i|¤ŽS )Nc                ó,   — g | ]}t          |¦  «        ‘ŒS r3   r%   )rL   Útools     r5   rN   z)ChatPremAI.bind_tools.<locals>.<listcomp>Ú  s!   € ÐJÐJÐJ¸DÕ1°$Ñ7Ô7ÐJÐJÐJr4   r^   r3   )ÚsuperÚbind)r¬   r^   r²   Úformatted_toolsÚ	__class__s       €r5   Ú
bind_toolszChatPremAI.bind_toolsÕ  s:   ø€ ð
 KÐJÀEÐJÑJÔJˆØ�u‰wŒwŒ|Ð<Ð< /Ð<°VÐ<Ð<Ð<r4   )rŸ   r   r:   r   )r:   r7   )r:   r®   )r²   r   r:   r®   )NN)
rÂ   rm   r8   r9   rÃ   rÄ   r²   r   r:   r    )
rÂ   rm   r8   r9   rÃ   rÄ   r²   r   r:   rÌ   )r^   rØ   r²   r   r:   rÙ   )r/   r0   r1   r2   Ú__annotations__r)   rŽ   r�   r‘   r’   r“   r”   r–   r   r—   r™   rš   r(   Úmodel_configr$   r©   Úpropertyr­   r±   rÁ   rË   r×   rá   Ú__classcell__)rà   s   @r5   rˆ   rˆ     sd  ø€ € € € € € ðð ð €O€O�OðLà*/¨%¸ÀIÐ*NÑ*NÔ*N€NÐNÐNÐNÑNØGà ˜5¨°\ÐBÑBÔB€EÐBÐBÐBÑBð/ð
 !%€JÐ$Ð$Ð$Ñ$ØKà#( 5°Ð#6Ñ#6Ô#6€KÐ6Ð6Ð6Ñ6Ø<à!€EÐ!Ð!Ð!Ñ!ðð !& ¨dÐ 3Ñ 3Ô 3€JÐ3Ð3Ð3Ñ3à2à�u QÐ'Ñ'Ô'€KÐ'Ð'Ð'Ñ'Ø/à#%€MÐ%Ð%Ð%Ñ%ðð $(€LÐ'Ð'Ð'Ñ'ðð !&€IÐ%Ð%Ð%Ñ%Ø1à€FÐÐÐÑà�:ØØ $Øðñ ô €Lð ðð ð ñ „Xðð. ðð ð ñ „Xðð ð
ð 
ð 
ñ „Xð
ðð ð ð ð8 %)Ø:>ð	Að Að Að Að Að@ %)Ø:>ð	1ð 1ð 1ð 1ð 1ðf=ð =ð =ð =ð =ð =ð =ð =ð =ð =r4   rˆ   r•   ©r–   rÃ   Úllmr–   r‰   rÃ   ú)Optional[Union[CallbackManagerForLLMRun]]úCallable[[Any], Any]c               ó¶  — ddl }|j        j        j        |j        j        j        |j        j        j        |j        j        j	        |j        j
        j        |j        j        j        |j        j        j        |j        j        j        |j        j        j        |j        j        j        |j        j        j        |j        j        j        g}t5          |||¬¦  «        }|S )z/Create a retry decorator for PremAI API errors.r   N)Úerror_typesr–   rÃ   )Úpremai.modelsÚmodelsÚapi_response_validation_errorÚAPIResponseValidationErrorÚconflict_errorÚConflictErrorÚmodel_not_found_errorÚModelNotFoundErrorÚpermission_denied_errorÚPermissionDeniedErrorÚprovider_api_connection_errorÚProviderAPIConnectionErrorÚprovider_api_status_errorÚProviderAPIStatusErrorÚprovider_api_timeout_errorÚProviderAPITimeoutErrorÚprovider_internal_server_errorÚProviderInternalServerErrorÚprovider_not_found_errorÚProviderNotFoundErrorÚrate_limit_errorÚRateLimitErrorÚunprocessable_entity_errorÚUnprocessableEntityErrorÚvalidation_errorÚValidationErrorr   )rç   r–   rÃ   r£   ÚerrorsÚ	decorators         r5   Úcreate_prem_retry_decoratorr  Þ  sÂ   € ð ÐÐÐð 	ŒÔ3ÔNØŒÔ$Ô2ØŒÔ+Ô>ØŒÔ-ÔCØŒÔ3ÔNØŒÔ/ÔFØŒÔ0ÔHØŒÔ4ÔPØŒÔ.ÔDØŒÔ&Ô5ØŒÔ0ÔIØŒÔ&Ô6ð€Fõ ,Ø¨Àðñ ô €Ið Ðr4   FrŠ   rÂ   ú
List[dict]rÈ   ÚboolrÄ   r²   r   c                ój   ‡ — t          ‰ ‰ j        |¬¦  «        }|	 ddˆ fd„¦   «         } |d|||dœ|¤ŽS )z+Using tenacity for retry in completion callræ   FrŠ   r‰   rÂ   r	  rÈ   r˜   r²   r   r:   c                óH   •—  ‰j         j        j        j        d| ||dœ|¤Ž}|S )N©rŠ   rÂ   rÈ   r3   )rš   ÚchatÚcompletionsÚcreate)rŠ   rÂ   rÈ   r²   rA   rç   s        €r5   Ú_completion_with_retryz/chat_with_retry.<locals>._completion_with_retry	  sD   ø€ ð 6�3”:”?Ô.Ô5ð 
Ø!ØØð
ð 
ð ð	
ð 
ˆð ˆr4   r  )F)
rŠ   r‰   rÂ   r	  rÈ   r˜   r²   r   r:   r   r3   )r  r–   )rç   rŠ   rÂ   rÈ   rÃ   r²   Úretry_decoratorr  s   `       r5   rÉ   rÉ   ü  sŠ   ø€ õ 2Ø˜œ°kðñ ô €Oð ð "'ðð ð ð ð ð ñ „_ðð "Ð!ð ØØØðð ð ð	ð ð r4   )r6   r7   r8   r9   r:   r7   )rA   r,   r8   r9   r:   r    )rA   r+   r`   ra   r:   rb   )N)rl   rm   rn   ro   r:   rp   )rç   rˆ   r–   r‰   rÃ   rè   r:   ré   )FN)rç   rˆ   rŠ   r‰   rÂ   r	  rÈ   r
  rÃ   rÄ   r²   r   r:   r   )Jr2   Ú
__future__r   Úloggingr¸   Útypingr   r   r   r   r   r	   r
   r   r   r   r   Úlangchain_core.callbacksr   Úlangchain_core.language_modelsr   Ú*langchain_core.language_models.chat_modelsr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.messagesr   r   r   r   r   r   r   r   r   r   r   Úlangchain_core.outputsr   r   r    Úlangchain_core.runnablesr!   Úlangchain_core.toolsr"   Úlangchain_core.utilsr#   r$   Ú%langchain_core.utils.function_callingr&   Úpydanticr'   r(   r)   r*   Ú6premai.api.chat_completions.v1_chat_completions_creater+   Ú&premai.models.chat_completion_responser,   Ú	getLoggerr/   rÏ   r~   rz   r}   r¦   r.   r@   r_   rk   r†   rˆ   r  rÉ   r3   r4   r5   ú<module>r$     s²  ðØ %Ð %à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =Ø DÐ DÐ DÐ DÐ DÐ DØ KÐ KÐ KÐ KÐ KÐ Kðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ -Ð -Ð -Ð -Ð -Ð -Ø )Ð )Ð )Ð )Ð )Ð )Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø HÐ HÐ HÐ HÐ HÐ Hðð ð ð ð ð ð ð ð ð ð ð ð ð Nðð ð ð ð ð ð NÐMÐMÐMÐMÐMà	ˆÔ	˜8Ñ	$Ô	$€ðÐ ð%Ð !ðÐ ð'ð 'ð 'ð 'ð '�yñ 'ô 'ð 'ðð ð ð ð:Yð :Yð :Yð :Yðz>ð >ð >ð >ð< "&ðO0ð O0ð O0ð O0ð O0ðdS=ð S=ð S=ð S=ð S=� 	ñ S=ô S=ð S=ðr Ø=Að	ð ð ð ð ð ðD Ø6:ð!ð !ð !ð !ð !ð !ð !r4   