
    h.                        d dl 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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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*m+Z+ d dl,m-Z- dedee   defdZ.dedefdZ/ eddd       G d de             Z0de1deegef   deegef   fdZ2ddde0de1dee   dedef
d Z3ddde0de1dee   dedef
d!Z4ddde0de1dee   dedef
d"Z5	 d$de0dee	eef      deegef   fd#Z6y)%    )	AnyAsyncIteratorCallableDictIteratorListOptionalTypeUnion)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseChatModel)create_base_retry_decorator)	AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkFunctionMessageFunctionMessageChunkHumanMessageHumanMessageChunkSystemMessageSystemMessageChunk)ChatGenerationChatGenerationChunk
ChatResult)convert_to_secret_str)get_from_dict_or_env)Field	SecretStrmodel_validatorconvert_message_to_dict_dictdefault_classreturnc                 h   | j                   }| j                  xs d}i }|dk(  s	|t        k(  rt        |      S |dk(  s	|t        k(  rt        ||      S |dk(  s	|t        k(  rt	        |      S |dk(  s	|t
        k(  rt        || j                        S |s	|t        k(  rt        ||	      S  ||      S )
z,Convert a delta response to a message chunk. usercontent	assistantr.   additional_kwargssystemfunctionr.   namer.   role)r7   r.   r   r   r   r   r5   r   )r'   r(   r7   r.   r1   s        g/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/chat_models/fireworks.py_convert_delta_to_message_chunkr9   *   s     ::Dmm!rG v~*;; 11		 ?gARSS		].@@!'22		}0DD#G%**EE	"22d;;W--    c                    | j                   }| j                  xs d}|dk(  rt        |      S |dk(  r| j                  }i }t        ||      S |dk(  rt	        |      S |dk(  rt        || j                        S t        ||	      S )
z%Convert a dict response to a message.r+   r,   r-   r/   r0   r2   r3   r4   r6   )r7   r.   r   r   r   r   r5   r   )r'   r7   r.   r1   s       r8   convert_dict_to_messager<   @   s    ::Dmm!rGv~G,,		--"$<MNN		W--		wUZZ@@766r:   z0.0.26z1.0z!langchain_fireworks.ChatFireworks)sinceremovalalternative_importc                   N   e Zd ZU dZ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d<   edeeef   fd       Zedefd       Zedee   fd       Z ed      ededefd              Zedefd       Z	 	 d#dee   deee      dee   dedef
dZ	 	 d#dee   deee      dee    dedef
dZ!deee	      de	fdZ"dedefdZ#dee   deeeef      fd Z$	 	 d#dee   deee      dee   dede%e&   f
d!Z'	 	 d#dee   deee      dee    dede(e&   f
d"Z)y)$ChatFireworkszFireworks Chat models.z*accounts/fireworks/models/llama-v2-7b-chatmodelc                  *    ddddj                         S )Ngffffff?i      )temperature
max_tokenstop_p)copy r:   r8   <lambda>zChatFireworks.<lambda>\   s    !
 $&	 r:   )default_factorymodel_kwargsNfireworks_api_key   max_retriesT	use_retryr)   c                 
    ddiS )NrM   FIREWORKS_API_KEYrI   selfs    r8   
lc_secretszChatFireworks.lc_secretsf   s    #%899r:   c                      y)NTrI   clss    r8   is_lc_serializablez ChatFireworks.is_lc_serializablej   s    r:   c                 
    g dS )z*Get the namespace of the langchain object.)	langchainchat_models	fireworksrI   rW   s    r8   get_lc_namespacezChatFireworks.get_lc_namespacen   s
     98r:   before)modevaluesc                     	 ddl }t        t        |dd            }|j	                         |j
                  _        |S # t        $ r}t        d      |d}~ww xY w)z%Validate that api key in environment.r   Nz`Could not import fireworks-ai python package. Please install it with `pip install fireworks-ai`.rM   rR   )fireworks.clientImportErrorr    r!   get_secret_valueclientapi_key)rX   ra   r]   erM   s        r8   validate_environmentz"ChatFireworks.validate_environments   sm    	# 2 )<>QR
 $5#E#E#G	   	E 	s   = 	AAAc                      y)zReturn type of llm.zfireworks-chatrI   rS   s    r8   	_llm_typezChatFireworks._llm_type   s      r:   messagesstoprun_managerkwargsc                     | j                  |      }| j                  |d| j                  |}t        | | j                  f||d|}| j                  |      S N)rB   rl   rn   rm   )_create_message_dictsrB   rL   completion_with_retryrP   _create_chat_resultrT   rl   rm   rn   ro   message_dictsparamsresponses           r8   	_generatezChatFireworks._generate   s     228< ZZ%
 
 	
 )NN
 $	

 
 ''11r:   c                    K   | j                  |      }| j                  |d| j                  |}t        | | j                  f||d| d {   }| j                  |      S 7 wrq   )rs   rB   rL   acompletion_with_retryrP   ru   rv   s           r8   
_ageneratezChatFireworks._agenerate   s      228<ZZ%
 
 	
 0$..
.9
HN
 
 ''11
s   AA&A$A&llm_outputsc                     |d   i S |d   S )Nr   rI   )rT   r~   s     r8   _combine_llm_outputsz"ChatFireworks._combine_llm_outputs   s    q>!I1~r:   ry   c                     g }|j                   D ]I  }t        |j                        }t        |t	        |j
                              }|j                  |       K d| j                  i}t        ||      S )Nfinish_reasonmessagegeneration_inforB   )generations
llm_output)	choicesr<   r   r   dictr   appendrB   r   )rT   ry   r   resr   genr   s          r8   ru   z!ChatFireworks._create_chat_result   sr    ## 	$C-ckk:G  $33D3D EC s#	$ tzz*
kjIIr:   c                 @    |D cg c]  }t        |       }}|S c c}w Nr%   )rT   rl   mrw   s       r8   rs   z#ChatFireworks._create_message_dicts   s*     >FF03FF Gs   c              +     K   | j                  |      }t        }| j                  |dd| j                  |}t	        | | j
                  f||d|D ]  }|j                  d   }	t        |	j                  |      }|	j                  }
|
t        |
      nd }|j                  }t        ||      }|r|j                  |j                  |       |  y w)NTrB   rl   streamrr   r   r   r   )chunk)rs   r   rB   rL   rt   rP   r   r9   deltar   r   	__class__r   on_llm_new_tokentextrT   rl   rm   rn   ro   rw   default_chunk_classrx   r   choicer   r   cg_chunks                r8   _streamzChatFireworks._stream   s      228<,ZZ%
 	

 
 +$..
.9
HN
 	E ]]1%F3FLLBUVE"00M5B5N=1TX  #(//*H ,,X]](,KN	s   CCc                  K   | j                  |      }t        }| j                  |dd| j                  |}t	        | | j
                  f||d| d {   2 3 d {   }|j                  d   }	t        |	j                  |      }|	j                  }
|
t        |
      nd }|j                  }t        ||      }|r%|j                  |j                  |       d {    | 7 7 7 6 y w)NTr   rr   r   r   r   )tokenr   )rs   r   rB   rL    acompletion_with_retry_streamingrP   r   r9   r   r   r   r   r   r   r   r   s                r8   _astreamzChatFireworks._astream   s     228<,ZZ%
 	

 
 "B$.."
.9"
HN"
 
 	 	% ]]1%F3FLLBUVE"00M5B5N=1TX  #(//*H !2282TTTN
 	 U
sI   AC2C*C2C0C,C0"A=C2C. C2,C0.C20C2)NN)*__name__
__module____qualname____doc__rB   str__annotations__r"   rL   r   rM   r	   r#   rO   intrP   boolpropertyr   rU   classmethodrY   r   r^   r$   r   ri   rk   r   r   r   rz   r   r}   r   ru   rs   r   r   r   r   r   rI   r:   r8   rA   rA   R   s    !=E3=L$  .2x	*1KIt:DcN : : 4   9c 9 9 (#$ 3   $  3     %):>	2{#2 tCy!2 67	2
 2 
26 %)?C	2{#2 tCy!2 ;<	2
 2 
2&Xd^0D  

JC 
JJ 
J[)	d38n	 %):>	{# tCy! 67	
  
%	&H %)?C	{# tCy! ;<	
  
*	+r:   rA   	condition	decoratorc                 h     dt         t        gt        f   dt         t        gt        f   f fd}|S )zDefine conditional decorator.

    Args:
        condition: The condition.
        decorator: The decorator.

    Returns:
        The decorated function.
    funcr)   c                     r |       S | S r   rI   )r   r   r   s    r8   actual_decoratorz/conditional_decorator.<locals>.actual_decorator  s    T?"r:   )r   r   )r   r   r   s   `` r8   conditional_decoratorr     s4    xs
3 #8L 
 r:   Nrn   llmrP   rn   ro   c                x    ddl t        | |      }t        ||      dt        dt        ffd       } |di |S )*Use tenacity to retry the completion call.r   Nr   ro   r)   c                  P     j                   j                  j                  di | S )r   rI   )rf   ChatCompletioncreatero   r]   s    r8   _completion_with_retryz5completion_with_retry.<locals>._completion_with_retry/  s.     6y..55 

 	
r:   rI   rc   _create_retry_decoratorr   r   r   rP   rn   ro   retry_decoratorr   r]   s         @r8   rt   rt   #  sK     -c{KO9o6
 
 
 7
 "+F++r:   c                   K   ddl t        | |      }t        ||      dt        dt        ffd       } |di | d{   S 7 w)z0Use tenacity to retry the async completion call.r   Nr   ro   r)   c                  l   K    j                   j                  j                  di |  d {   S 7 wNrI   rf   r   acreater   s    r8   r   z6acompletion_with_retry.<locals>._completion_with_retryE  s:     <Y%%44<< 

 
 	
 
s   *424rI   r   r   s         @r8   r|   r|   9  U      -c{KO9o6
s 
s 
 7

 (1&1111   >AAAc                   K   ddl t        | |      }t        ||      dt        dt        ffd       } |di | d{   S 7 w)z8Use tenacity to retry the completion call for streaming.r   Nr   ro   r)   c                  X   K    j                   j                  j                  di | S wr   r   r   s    r8   r   z@acompletion_with_retry_streaming.<locals>._completion_with_retryZ  s0     6y..66 

 	
s   '*rI   r   r   s         @r8   r   r   N  r   r   c                 6   ddl }|j                  j                  j                  |j                  j                  j                  |j                  j                  j
                  |j                  j                  j                  g}t        || j                  |      S )zDefine retry mechanism.r   N)error_typesrO   rn   )	rc   rf   errorRateLimitErrorInternalServerErrorBadGatewayErrorServiceUnavailableErrorr   rO   )r   rn   r]   errorss       r8   r   r   c  s~      	--22..66	F '[ r:   r   )7typingr   r   r   r   r   r   r	   r
   r   langchain_core._api.deprecationr   langchain_core.callbacksr   r   *langchain_core.language_models.chat_modelsr   #langchain_core.language_models.llmsr   langchain_core.messagesr   r   r   r   r   r   r   r   r   r   r   r   langchain_core.outputsr   r   r   langchain_core.utilsr    langchain_core.utils.envr!   pydanticr"   r#   r$   #langchain_community.adapters.openair&   r9   r<   rA   r   r   rt   r|   r   r   rI   r:   r8   <module>r      s  
 
 
 7 E K    S R 6 9 6 6 G..#$45..,73 7; 7$ 
:
tM t
tn (# 4seSj2 7;	,	,, 23	,
 , 	,4 <@	2	22 78	2
 2 	22 <@	2	22 78	2
 2 	22 			+-EEF
 seSjr:   