Ë
    µŒj·3  ã                  óä  — d dl m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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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* d dl+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1 erd dl2m3Z3m4Z4  ejj                  e6«      Z7dZ8 G d„ de9«      Z: G d„ de'«      Z;	 	 	 	 	 	 dd„Z<	 d	 	 	 	 	 dd„Z=	 d	 	 	 	 	 	 	 	 	 dd„Z>	 d	 	 	 	 	 	 	 	 	 dd„Z? G d„ de«      Z@y)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚAsyncGeneratorÚAsyncIteratorÚCallableÚDictÚ	GeneratorÚIteratorÚListÚMappingÚOptionalÚTupleÚTypeÚUnion)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModelÚagenerate_from_streamÚgenerate_from_stream)Úcreate_base_retry_decorator)ÚAIMessageChunkÚBaseMessageÚBaseMessageChunk)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Úconvert_to_secret_strÚget_from_dict_or_env)Ú	BaseModelÚFieldÚ	SecretStrÚmodel_validator)ÚSelf)Úconvert_dict_to_messageÚconvert_message_to_dict)Ú_convert_delta_to_message_chunk)ÚChunkedGenerationResponseÚGenerationResponsez)https://gpt-router-preview.writesonic.comc                  ó   — e Zd ZdZy)ÚGPTRouterExceptionzError with the `GPTRouter APIs`N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    út/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/gpt_router.pyr+   r+   4   s   „ Ú)r1   r+   c                  ó&   — e Zd ZU dZded<   ded<   y)ÚGPTRouterModelzGPTRouter model.ÚstrÚnameÚprovider_nameN)r,   r-   r.   r/   Ú__annotations__r0   r1   r2   r4   r4   8   s   … Ùà
ƒIØÔr1   r4   c                ó¨   — ddl m}m} t        | «      D ��cg c].  \  }} ||j                  |j
                  |dz    |di |¤Ž¬«      ‘Œ0 c}}S c c}}w )z5
    Return the body for the model router input.
    r   )ÚGenerationParamsÚModelGenerationRequesté   )Ú
model_namer7   ÚorderÚprompt_paramsr0   )Úgpt_router.modelsr:   r;   Ú	enumerater6   r7   )Úmodels_priority_listÚkwargsr:   r;   ÚindexÚmodels         r2   Úget_ordered_generation_requestsrF   ?   sd   € ÷ Kô &Ð&:Ô;ôñ <‰LˆE�5ñ 	Ø—z‘zØ×-Ñ-Ø˜!‘)Ù*Ñ4¨VÑ4ö		
ð <òð ùó s   —3AÚ	GPTRouterc                óš   — ddl m} |j                  |j                  |j                  |j
                  g}t        || j                  |¬«      S )Nr   )Ú
exceptions)Úerror_typesÚmax_retriesÚrun_manager)Ú
gpt_routerrI   ÚGPTRouterApiTimeoutErrorÚGPTRouterInternalServerErrorÚGPTRouterNotAvailableErrorÚGPTRouterTooManyRequestsErrorr   rK   )ÚllmrL   rI   Úerrorss       r2   Ú_create_retry_decoratorrT   S   sN   € õ &ð 	×+Ñ+Ø×/Ñ/Ø×-Ñ-Ø×0Ñ0ð	€Fô 'Ø¨¯©À[ôð r1   c                óH   ‡ ‡— t        ‰ |¬«      }|dˆ ˆfd„«       } |di |¤ŽS )z*Use tenacity to retry the completion call.©rL   c                 óv   •— t        ‰fi | ¤Ž}‰j                  j                  || j                  dd«      ¬«      S ©NÚstreamF)Úordered_generation_requestsÚ	is_stream)rF   ÚclientÚgenerateÚget©rC   rZ   rR   rB   s     €€r2   Ú_completion_with_retryz5completion_with_retry.<locals>._completion_with_retryo   sH   ø€ ä&EØ ñ'
Ø$*ñ'
Ð#ð �z‰z×"Ñ"Ø(CØ—j‘j ¨5Ó1ð #ó 
ð 	
r1   ©rC   r   Úreturnr   r0   ©rT   ©rR   rB   rL   rC   Úretry_decoratorr`   s   ``    r2   Úcompletion_with_retryrf   f   s3   ù€ ô .¨c¸{ÔK€Oàõ
ó ð
ñ "Ñ+ FÑ+Ð+r1   c              ‹  ód   ‡ ‡K  — t        ‰ |¬«      }|dˆ ˆfd„«       } |di |¤Žƒ d{  –—† S 7 Œ­w)z0Use tenacity to retry the async completion call.rV   c               ›  ó’   •K  — t        ‰fi | ¤Ž}‰j                  j                  || j                  dd«      ¬«      ƒ d {  –—† S 7 Œ­wrX   )rF   r\   Ú	agenerater^   r_   s     €€r2   r`   z6acompletion_with_retry.<locals>._completion_with_retry†   sV   øè ø€ ä&EØ ñ'
Ø$*ñ'
Ð#ð —Z‘Z×)Ñ)Ø(CØ—j‘j ¨5Ó1ð *ó 
÷ 
ð 	
ð 
ús   ƒ=AÁ AÁANra   r0   rc   rd   s   ``    r2   Úacompletion_with_retryrj   |   s=   ùè ø€ ô .¨c¸{ÔK€Oàõ
ó ð
ñ (Ñ1¨&Ñ1×1Ð1Ð1ús   „%0©.ª0c                  óF  — e Zd ZU dZ 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<   	  ee¬«      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 ¬!«      ed1d"„«       «       Z ed#¬!«      d2d$„«       Zed3d%„«       Zed4d&„«       Zed5d'„«       Zed6d(„«       Zed6d)„«       Z	 	 	 d7	 	 	 	 	 	 	 	 	 	 	 d8d*„Z	 	 	 d7	 	 	 	 	 	 	 	 	 	 	 d9d+„Z	 	 	 	 	 	 d:d,„Z	 	 d;	 	 	 	 	 	 	 	 	 d<d-„Z	 	 d;	 	 	 	 	 	 	 	 	 d=d.„Z	 	 	 	 	 	 d>d/„Z d?d0„Z!y)@rG   zgGPTRouter by Writesonic Inc.

    For more information, see https://gpt-router.writesonic.com/docs
    NT)ÚdefaultÚexcluder   r\   r<   )Ú
min_lengthúList[GPTRouterModel]rB   Ú )rl   r5   Úgpt_router_api_basezOptional[SecretStr]Úgpt_router_api_keygffffffæ?ÚfloatÚtemperature)Údefault_factoryúDict[str, Any]Úmodel_kwargsé   ÚintrK   FÚboolÚ	streamingÚné   Ú
max_tokensÚbefore)Úmodec                ób   — t        |ddt        «      |d<   t        t        |dd«      «      |d<   |S )Nrq   ÚGPT_ROUTER_API_BASErr   ÚGPT_ROUTER_API_KEY)r   ÚDEFAULT_API_BASE_URLr   )ÚclsÚvaluess     r2   Úvalidate_environmentzGPTRouter.validate_environment«   sJ   € ô )=ØØ!Ø!Ü ó	)
ˆÐ$Ñ%ô (=Ü ØØ$Ø$óó(
ˆÐ#Ñ$ð ˆr1   Úafterc                óÄ   — 	 ddl m}  || j                  | j
                  r| j
                  j                  «       nd «      }|| _        | S # t        $ r t        d«      ‚w xY w)Nr   )ÚGPTRouterClientzZCould not import GPTRouter python package. Please install it with `pip install GPTRouter`.)Úgpt_router.clientrŠ   ÚImportErrorr+   rq   rr   Úget_secret_valuer\   )ÚselfrŠ   Úgpt_router_clients      r2   Ú	post_initzGPTRouter.post_init¾   sr   € ð	Ý9ñ ,Ø×$Ñ$à×&Ò&ð ×#Ñ#×4Ñ4Ô6àó	
Ðð (ˆŒàˆøô ò 	Ü$ðBóð ð	ús   ‚A
 Á
Ac                ó
   — ddiS )Nrr   rƒ   r0   ©rŽ   s    r2   Ú
lc_secretszGPTRouter.lc_secretsÓ   s   € à$Ð&:Ð;Ð;r1   c                 ó   — y)NTr0   r’   s    r2   Úlc_serializablezGPTRouter.lc_serializable×   s   € àr1   c                 ó   — y)zReturn type of chat model.zgpt-router-chatr0   r’   s    r2   Ú	_llm_typezGPTRouter._llm_typeÛ   s   € ð !r1   c                ó:   — i d| j                   i¥| j                  ¥S )zGet the identifying parameters.rB   )rB   Ú_default_paramsr’   s    r2   Ú_identifying_paramszGPTRouter._identifying_paramsà   s-   € ð
Ø% t×'@Ñ'@ÐAð
à×"Ñ"ð
ð 	
r1   c                óx   — | j                   | j                  | j                  | j                  dœ| j                  ¥S )z5Get the default parameters for calling GPTRouter API.)r~   rY   r|   rt   )r~   r{   r|   rt   rw   r’   s    r2   r™   zGPTRouter._default_paramsè   s<   € ð Ÿ/™/Ø—n‘nØ—‘Ø×+Ñ+ñ	
ð
 ×Ñð
ð 	
r1   c                óü   — |�|n| j                   }|r! | j                  |f||dœ|¤Ž}t        |«      S | j                  ||«      \  }}	i |	¥|¥ddi¥}	t	        | f|| j
                  |dœ|	¤Ž}
| j                  |
«      S ©N)ÚstoprL   rY   F©ÚmessagesrB   rL   )r{   Ú_streamr   Ú_create_message_dictsrf   rB   Ú_create_chat_result©rŽ   r    rž   rL   rY   rC   Úshould_streamÚstream_iterÚmessage_dictsÚparamsÚresponses              r2   Ú	_generatezGPTRouter._generateó   s´   € ð #)Ð"4™¸$¿.¹.ˆÙØ&˜$Ÿ,™,ØðØ#°ñØ@FñˆKô (¨Ó4Ð4à $× :Ñ :¸8ÀTÓ JÑˆ�vØ6�FÐ6˜fÐ6 h°Ñ6ˆÜ(Øð
à"Ø!%×!:Ñ!:Ø#ñ	
ð
 ñ
ˆð ×'Ñ'¨Ó1Ð1r1   c              ‹  ó,  K  — |�|n| j                   }|r) | j                  |f||dœ|¤Ž}t        |«      ƒ d {  –—† S | j                  ||«      \  }}	i |	¥|¥ddi¥}	t	        | f|| j
                  |dœ|	¤Žƒ d {  –—† }
| j                  |
«      S 7 ŒV7 Œ­wr�   )r{   Ú_astreamr   r¢   rj   rB   r£   r¤   s              r2   Ú
_ageneratezGPTRouter._agenerate  sË   è ø€ ð #)Ð"4™¸$¿.¹.ˆÙØ'˜$Ÿ-™-ØðØ#°ñØ@FñˆKô /¨{Ó;×;Ð;à $× :Ñ :¸8ÀTÓ JÑˆ�vØ6�FÐ6˜fÐ6 h°Ñ6ˆÜ/Øð
à"Ø!%×!:Ñ!:Ø#ñ	
ð
 ñ
÷ 
ˆð ×'Ñ'¨Ó1Ð1ð <øð
ús"   ‚7B¹BºA BÁ:BÁ;BÂBc                óº   — t        d|j                  dd«      i|«      }|j                  d«      }|�t        |¬«      nd }|j                  }t	        ||¬«      }||fS )NÚcontentÚtextrp   Úfinish_reason©r±   ©ÚmessageÚgeneration_info)r'   r^   ÚdictÚ	__class__r   )rŽ   ÚdataÚdefault_chunk_classÚchunkr±   rµ   Ú	gen_chunks          r2   Ú_create_chat_generation_chunkz'GPTRouter._create_chat_generation_chunk'  sm   € ô 0Ø˜Ÿ™ ¨Ó,Ð-Ð/Bó
ˆð Ÿ™ Ó1ˆà1>Ð1JŒD˜}Õ-ÐPTð 	ð $Ÿo™oÐÜ'°ÀÔWˆ	ØÐ-Ð-Ð-r1   c              +  ób  K  — | j                  ||«      \  }}i |¥|¥ddi¥}t        }t        | f|| j                  |dœ|¤Ž}|D ]g  }	|	j                  dk7  rŒ| j                  |	j                  |«      \  }	}|r0|j                  t        |	j                  j                  «      |	¬«       |	–— Œi y ­w©NrY   TrŸ   Úupdate)Útokenrº   )r¢   r   rf   rB   Úeventr¼   r¸   Úon_llm_new_tokenr5   r´   r¯   ©
rŽ   r    rž   rL   rC   r§   r¨   r¹   Úgenerator_responserº   s
             r2   r¡   zGPTRouter._stream5  sÕ   è ø€ ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆä6DÐÜ2Øð
à"Ø!%×!:Ñ!:Ø#ñ	
ð
 ñ
Ðó (ˆEØ�{‰{˜hÒ&Øà)-×)KÑ)KØ—
‘
Ð/ó*Ñ&ˆEÐ&ñ Ø×,Ñ,Ü˜eŸm™m×3Ñ3Ó4¸Eð -ô ð ‹Kñ (ùs   ‚B-B/c               óœ  K  — | j                  ||«      \  }}i |¥|¥ddi¥}t        }t        | f|| j                  |dœ|¤Ž}|ƒ d {  –—† 2 3 d {  –—† }	|	j                  dk7  rŒ| j                  |	j                  |«      \  }	}|r8|j                  t        |	j                  j                  «      |	¬«      ƒ d {  –—†  |	­–— Œx7 Œ|7 Œu7 Œ6 y ­wr¾   )r¢   r   rj   rB   rÁ   r¼   r¸   rÂ   r5   r´   r¯   rÃ   s
             r2   r¬   zGPTRouter._astreamV  sü   è ø€ ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆä6DÐÜ3Øð
à"Ø!%×!:Ñ!:Ø#ñ	
ð
 ñ
Ðð "4×3Ð3÷ 	�%Ø�{‰{˜hÒ&Øà)-×)KÑ)KØ—
‘
Ð/ó*Ñ&ˆEÐ&ñ Ø!×2Ñ2Ü˜eŸm™m×3Ñ3Ó4¸Eð 3ó ÷ ð ð ŒKð 4øð 	øðøñ 4ùsI   ‚ACÁCÁCÁC
ÁCÁC
ÁA%CÂ9CÂ:CÃC
ÃCÃ
Cc                óˆ   — | j                   }|�d|v rt        d«      ‚||d<   |D �cg c]  }t        |«      ‘Œ }}||fS c c}w )Nrž   z2`stop` found in both the input and default params.)r™   Ú
ValueErrorr&   )rŽ   r    rž   r¨   Úmr§   s         r2   r¢   zGPTRouter._create_message_dictsw  s]   € ð ×%Ñ%ˆØÐØ˜ÑÜ Ð!UÓVÐVØ!ˆF�6‰NÙ=EÓF¹X¸Ô0°Õ3¸XˆÐFØ˜fÐ$Ð$ùò Gs   §?c                ó  — g }|j                   D ]L  }t        d|j                  dœ«      }t        |t	        |j
                  ¬«      ¬«      }|j                  |«       ŒN |j                  |j                  dœ}t        ||¬«      S )NÚ	assistant)Úroler¯   r²   r³   )Útoken_usagerE   )ÚgenerationsÚ
llm_output)
Úchoicesr%   r°   r   r¶   r±   ÚappendÚmetarE   r   )rŽ   r©   rÍ   Úresr´   ÚgenrÎ   s          r2   r£   zGPTRouter._create_chat_result‚  s~   € ØˆØ×#Ô#ˆCÜ-à'Ø"Ÿx™xñóˆGô !ØÜ $°3×3DÑ3DÔ EôˆCð ×Ñ˜sÕ#ð $ð &.§]¡]¸X¿^¹^ÑLˆ
Ü k¸jÔIÐIr1   )r†   r	   rb   r   )rb   r$   )rb   zDict[str, str])rb   rz   )rb   r5   )rb   rv   )NNN)r    úList[BaseMessage]rž   úOptional[List[str]]rL   ú"Optional[CallbackManagerForLLMRun]rY   úOptional[bool]rC   r   rb   r   )r    rÔ   rž   rÕ   rL   ú'Optional[AsyncCallbackManagerForLLMRun]rY   r×   rC   r   rb   r   )r¸   zMapping[str, Any]r¹   zType[BaseMessageChunk]rb   z2Tuple[ChatGenerationChunk, Type[BaseMessageChunk]])NN)
r    rÔ   rž   rÕ   rL   rÖ   rC   r   rb   zIterator[ChatGenerationChunk])
r    rÔ   rž   rÕ   rL   rØ   rC   r   rb   z"AsyncIterator[ChatGenerationChunk])r    rÔ   rž   rÕ   rb   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])r©   r)   rb   r   )"r,   r-   r.   r/   r!   r\   r8   rB   rq   rr   rt   r¶   rw   rK   r{   r|   r~   r#   Úclassmethodr‡   r�   Úpropertyr“   r•   r—   rš   r™   rª   r­   r¼   r¡   r¬   r¢   r£   r0   r1   r2   rG   rG   “   sˆ  … ññ
  ¨dÔ3€FˆCÓ3Ù16À!Ô1DÐÐ.ÓDÙ$¨RÔ0Ð˜Ó0Ø.Ø.2ÐÐ+Ó2Ø&Ø€K�ÓØ+Ù#(¸Ô#>€L�.Ó>ØVØ€K�ÓØ<Ø€IˆtÓØ/Ø€A€sƒJØAØ€J�Óá˜(Ô#Øòó ó $ðñ" ˜'Ô"òó #ðð( ò<ó ð<ð òó ðð ò!ó ð!ð ò
ó ð
ð ò
ó ð
ð %)Ø:>Ø!%ð2à#ð2ð "ð2ð 8ð	2ð
 ð2ð ð2ð 
ó2ð: %)Ø?CØ!%ð2à#ð2ð "ð2ð =ð	2ð
 ð2ð ð2ð 
ó2ð4.Ø%ð.Ø<Rð.à	;ó.ð" %)Ø:>ð	à#ðð "ðð 8ð	ð
 ðð 
'óðH %)Ø?Cð	à#ðð "ðð =ð	ð
 ðð 
,óðB	%Ø)ð	%Ø1Dð	%à	4ó	%ôJr1   )rB   ro   rC   r   rb   r   )N)rR   rG   rL   zHOptional[Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]]rb   zCallable[[Any], Any])
rR   rG   rB   ro   rL   rÖ   rC   r   rb   zKUnion[GenerationResponse, Generator[ChunkedGenerationResponse, None, None]])
rR   rG   rB   ro   rL   rØ   rC   r   rb   zJUnion[GenerationResponse, AsyncGenerator[ChunkedGenerationResponse, None]])AÚ
__future__r   ÚloggingÚtypingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Úlangchain_core.callbacksr   r   Ú*langchain_core.language_models.chat_modelsr   r   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.messagesr   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.utilsr   r   Úpydanticr    r!   r"   r#   Útyping_extensionsr$   Ú#langchain_community.adapters.openair%   r&   Ú&langchain_community.chat_models.openair'   r@   r(   r)   Ú	getLoggerr,   Úloggerr„   Ú	Exceptionr+   r4   rF   rT   rf   rj   rG   r0   r1   r2   Ú<module>rë      sU  ðÝ "ã ÷÷ ÷ ÷ ÷"÷ñ õ
 Lß QÑ Qß RÑ Rß Lß AÓ AÝ "÷õ SáßOð 
ˆ×	Ñ	˜8Ó	$€àBÐ ô*˜ô *ô�Yô ðØ.ðØ:=ðà	óð0 	ð	Ø	ðððð
 óð, 7;ð,Ø	ð,à.ð,ð 4ð,ð ð	,ð
 Qó,ð2 <@ð2Ø	ð2à.ð2ð 9ð2ð ð	2ð
 Pó2ô.~J�õ ~Jr1   