
    dh3                       S SK Jr  S SKrS SKJrJrJrJrJrJ	r	J
r
JrJrJrJrJrJrJr  S SKJrJr  S SKJrJrJr  S SKJr  S SKJrJrJr  S SKJ r J!r!J"r"  S S	K#J$r$J%r%  S S
K&J'r'J(r(J)r)J*r*  S SK+J,r,  S SK-J.r.J/r/  S SK0J1r1  \(       a  S SK2J3r3J4r4  \Rj                  " \65      r7Sr8 " S S\95      r: " S S\'5      r;      SS jr< S     SS jjr= S         SS jjr> S         SS jjr? " S S\5      r@g)    )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                      \ rS rSrSrSrg)GPTRouterException4   zError with the `GPTRouter APIs` N)__name__
__module____qualname____firstlineno____doc____static_attributes__r-       b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/gpt_router.pyr+   r+   4   s    )r4   r+   c                  .    \ rS rSr% SrS\S'   S\S'   Srg)GPTRouterModel8   zGPTRouter model.strnameprovider_namer-   N)r.   r/   r0   r1   r2   __annotations__r3   r-   r4   r5   r7   r7   8   s    
Ir4   r7   c                    SSK JnJn  [        U 5       VVs/ sH+  u  pEU" UR                  UR
                  US-   U" S0 UD6S9PM-     snn$ s  snnf )z-
Return the body for the model router input.
r   )GenerationParamsModelGenerationRequest   )
model_namer;   orderprompt_paramsr-   )gpt_router.modelsr>   r?   	enumerater:   r;   )models_priority_listkwargsr>   r?   indexmodels         r5   get_ordered_generation_requestsrJ   ?   sb     K &&:; <LE 	zz--!)*4V4		
 <  s   1A	GPTRouterc                    SSK Jn  UR                  UR                  UR                  UR
                  /n[        X0R                  US9$ )Nr   )
exceptions)error_typesmax_retriesrun_manager)
gpt_routerrM   GPTRouterApiTimeoutErrorGPTRouterInternalServerErrorGPTRouterNotAvailableErrorGPTRouterTooManyRequestsErrorr   rO   )llmrP   rM   errorss       r5   _create_retry_decoratorrX   S   sL     & 	++//--00	F '[ r4   c                F   ^ ^ [        T US9nUSU U4S jj5       nU" S0 UD6$ )z*Use tenacity to retry the completion call.rP   c                 p   > [        T40 U D6nTR                  R                  UU R                  SS5      S9$ NstreamF)ordered_generation_requests	is_stream)rJ   clientgenerategetrG   r^   rV   rF   s     r5   _completion_with_retry5completion_with_retry.<locals>._completion_with_retryo   sH    &E '
$*'
# zz""(Cjj51 # 
 	
r4   rG   r   returnr   r-   rX   rV   rF   rP   rG   retry_decoratorrd   s   ``    r5   completion_with_retryrk   f   s3     .c{KO
 
 "+F++r4   c                b   ^ ^#    [        T US9nUSU U4S jj5       nU" S0 UD6I Sh  vN $  N7f)z0Use tenacity to retry the async completion call.rZ   c                    >#    [        T40 U D6nTR                  R                  UU R                  SS5      S9I S h  vN $  N7fr\   )rJ   r`   	ageneraterb   rc   s     r5   rd   6acompletion_with_retry.<locals>._completion_with_retry   sU     &E '
$*'
# ZZ))(Cjj51 * 
 
 	
 
s   :AAANrf   r-   rh   ri   s   ``    r5   acompletion_with_retryrp   |   s<      .c{KO
 
 (1&1111s   $/-/c                  N   \ rS rSr% Sr\" SSS9rS\S'   \" SS	9rS
\S'   \" SS9r	S\S'    Sr
S\S'    SrS\S'    \" \S9rS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S '   \" S!S"9\S3S# j5       5       r\" S$S"9S4S% j5       r\S5S& j5       r\S6S' j5       r\S7S( j5       r\S8S) j5       r\S8S* j5       r   S9           S:S+ jjr   S9           S;S, jjr      S<S- jr  S=         S>S. jjr  S=         S?S/ jjr       S@S0 jr!SAS1 jr"S2r#g)BrK      z_GPTRouter by Writesonic Inc.

For more information, see https://gpt-router.writesonic.com/docs
NT)defaultexcluder   r`   r@   )
min_lengthList[GPTRouterModel]rF    )rs   r9   gpt_router_api_basezOptional[SecretStr]gpt_router_api_keygffffff?floattemperature)default_factoryDict[str, Any]model_kwargs   intrO   Fbool	streamingn   
max_tokensbefore)modec                b    [        USS[        5      US'   [        [        USS5      5      US'   U$ )Nrx   GPT_ROUTER_API_BASEry   GPT_ROUTER_API_KEY)r   DEFAULT_API_BASE_URLr   )clsvaluess     r5   validate_environmentGPTRouter.validate_environment   sJ     )=!! 	)
$% (= $$(
#$ r4   afterc                     SSK Jn  U" U R                  U R
                  (       a  U R
                  R                  5       OS 5      nX l        U $ ! [         a    [        S5      ef = f)Nr   )GPTRouterClientzZCould not import GPTRouter python package. Please install it with `pip install GPTRouter`.)gpt_router.clientr   ImportErrorr+   rx   ry   get_secret_valuer`   )selfr   gpt_router_clients      r5   	post_initGPTRouter.post_init   sp    	9 ,$$&& ##446	
 (  	$B 	s   A A$c                
    SS0$ )Nry   r   r-   r   s    r5   
lc_secretsGPTRouter.lc_secrets   s    $&:;;r4   c                    g)NTr-   r   s    r5   lc_serializableGPTRouter.lc_serializable   s    r4   c                    g)zReturn type of chat model.zgpt-router-chatr-   r   s    r5   	_llm_typeGPTRouter._llm_type   s     !r4   c                :    0 SU R                   0EU R                  E$ )zGet the identifying parameters.rF   )rF   _default_paramsr   s    r5   _identifying_paramsGPTRouter._identifying_params   s-    
%t'@'@A
""
 	
r4   c                x    U R                   U R                  U R                  U R                  S.U R                  E$ )z5Get the default parameters for calling GPTRouter API.)r   r]   r   r{   )r   r   r   r{   r~   r   s    r5   r   GPTRouter._default_params   s<     //nn++	

 
 	
r4   c                   Ub  UOU R                   nU(       a   U R                  " U4X#S.UD6n[        U5      $ U R                  X5      u  p0 U	EUESS0En	[	        U 4UU R
                  US.U	D6n
U R                  U
5      $ N)stoprP   r]   FmessagesrF   rP   )r   _streamr   _create_message_dictsrk   rF   _create_chat_resultr   r   r   rP   r]   rG   should_streamstream_itermessage_dictsparamsresponses              r5   	_generateGPTRouter._generate   s     #)"4$..,,#@FK (44 $ : :8 J6F6f6h6(
"!%!:!:#	

 
 ''11r4   c                2  #    Ub  UOU R                   nU(       a(  U R                  " U4X#S.UD6n[        U5      I S h  vN $ U R                  X5      u  p0 U	EUESS0En	[	        U 4UU R
                  US.U	D6I S h  vN n
U R                  U
5      $  NT N7fr   )r   _astreamr   r   rp   rF   r   r   s              r5   
_agenerateGPTRouter._agenerate  s      #)"4$..--#@FK /{;;; $ : :8 J6F6f6h6/
"!%!:!:#	

 
 
 ''11 <
s!   <BB>B=B>BBc                    [        SUR                  SS5      0U5      nUR                  S5      nUb	  [        US9OS nUR                  n[	        X5S9nXb4$ )Ncontenttextrw   finish_reasonr   messagegeneration_info)r'   rb   dict	__class__r   )r   datadefault_chunk_classchunkr   r   	gen_chunks          r5   _create_chat_generation_chunk'GPTRouter._create_chat_generation_chunk'  sh     0,-/B
 11>1JD}-PT 	 $oo'W	--r4   c              +  j  #    U R                  X5      u  pV0 UEUESS0En[        n[        U 4UU R                  US.UD6nU Hl  n	U	R                  S:w  a  M  U R                  U	R                  U5      u  pU(       a.  UR                  U	R                  R                  U	R                  S9  U	v   Mn     g 7fNr]   Tr   update)tokenr   )
r   r   rk   rF   eventr   r   on_llm_new_tokenr   r   
r   r   r   rP   rG   r   r   r   generator_responser   s
             r5   r   GPTRouter._stream5  s      !% : :8 J5F5f5h56D2
"!%!:!:#	

 
 (E{{h&)-)K)K

/*&E ,,--//u}} -  K (s   B1B3c                 #    U R                  X5      u  pV0 UEUESS0En[        n[        U 4UU R                  US.UD6nUI S h  vN   S h  vN n	U	R                  S:w  a  M  U R                  U	R                  U5      u  pU(       a6  UR                  U	R                  R                  U	R                  S9I S h  vN   U	7v   M}   N Nz N
 g 7fr   )
r   r   rp   rF   r   r   r   r   r   r   r   s
             r5   r   GPTRouter._astreamV  s      !% : :8 J5F5f5h56D3
"!%!:!:#	

 
 "433 	%{{h&)-)K)K

/*&E !22--//u}} 3    K 4 	 4sI   ACCC
CC	CA)C;C<C	CCCc                    U R                   nUb  SU;   a  [        S5      eX#S'   U Vs/ sH  n[        U5      PM     nnXS4$ s  snf )Nr   z2`stop` found in both the input and default params.)r   
ValueErrorr&   )r   r   r   r   mr   s         r5   r   GPTRouter._create_message_dictsw  sY     %% !UVV!6N=EFX03XF$$ Gs   Ac                    / nUR                    HG  n[        SUR                  S.5      n[        U[	        UR
                  S9S9nUR                  U5        MI     UR                  UR                  S.n[        X&S9$ )N	assistant)roler   r   r   )token_usagerI   )generations
llm_output)
choicesr%   r   r   r   r   appendmetarI   r   )r   r   r   resr   genr   s          r5   r   GPTRouter._create_chat_result  s|    ##C-'"xxG ! $33D3D EC s# $ &.]]X^^L
kIIr4   )r`   )r   r	   rg   r   )rg   r$   )rg   zDict[str, str])rg   r   )rg   r9   )rg   r}   )NNN)r   List[BaseMessage]r   Optional[List[str]]rP   "Optional[CallbackManagerForLLMRun]r]   Optional[bool]rG   r   rg   r   )r   r   r   r   rP   'Optional[AsyncCallbackManagerForLLMRun]r]   r   rG   r   rg   r   )r   zMapping[str, Any]r   zType[BaseMessageChunk]rg   z2Tuple[ChatGenerationChunk, Type[BaseMessageChunk]])NN)
r   r   r   r   rP   r   rG   r   rg   zIterator[ChatGenerationChunk])
r   r   r   r   rP   r   rG   r   rg   z"AsyncIterator[ChatGenerationChunk])r   r   r   r   rg   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])r   r)   rg   r   )$r.   r/   r0   r1   r2   r!   r`   r<   rF   rx   ry   r{   r   r~   rO   r   r   r   r#   classmethodr   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r3   r-   r4   r5   rK   rK      s   
 d3FC316!1D.D$R00..2+2&K+#(#>L.>VK<It/AsJAJ(#  $" '" #( < <   ! ! 
 
 
 
 %):>!%2#2 "2 8	2
 2 2 
2: %)?C!%2#2 "2 =	2
 2 2 
24.%.<R.	;." %):>	# " 8	
  
'H %)?C	# " =	
  
,B	%)	%1D	%	4	%Jr4   )rF   rv   rG   r   rg   r   )N)rV   rK   rP   zHOptional[Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]]rg   zCallable[[Any], Any])
rV   rK   rF   rv   rP   r   rG   r   rg   zKUnion[GenerationResponse, Generator[ChunkedGenerationResponse, None, None]])
rV   rK   rF   rv   rP   r   rG   r   rg   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'   rD   r(   r)   	getLoggerr.   loggerr   	Exceptionr+   r7   rJ   rX   rk   rp   rK   r-   r4   r5   <module>r      sS   "    " 
 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r4   