
    h|!                     H   d dl 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
 d dlZd dlmZ d dlmZmZ 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mZmZ d dlm Z  d dl!m"Z"m#Z#  ejH                  e%      Z&d	ee'ef   d
efdZ(ded
e)fdZ*d	ee'ef   de
e   d
efdZ+ G d de      Z,y)    N)AnyDictIteratorListMappingOptionalType)CallbackManagerForLLMRun)BaseChatModelgenerate_from_stream)		AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkHumanMessageHumanMessageChunkSystemMessage)ChatGenerationChatGenerationChunk
ChatResult)get_pydantic_field_names)
ConfigDictmodel_validator_dictreturnc                     | d   }|dk(  rt        | d         S |dk(  r t        | j                  dd      xs d      S t        | d   |      S )Nroleusercontentr!   	assistant r!   r   )r   r   getr   )r   r   s     h/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/chat_models/llama_edge.py_convert_dict_to_messager(      sW    =Dv~E)$455		9b!9!?R@@5#3$??    messagec                 :   t        | t              r| j                  | j                  d}|S t        | t              rd| j                  d}|S t        | t
              rd| j                  d}|S t        | t              rd| j                  d}|S t        d|        )N)r   r!   systemr    r#   zGot unknown type )
isinstancer   r   r!   r   r   r   	TypeError)r*   message_dicts     r'   _convert_message_to_dictr0   (   s    ';' 'I  
G]	+ (W__E  
G\	* &7??C  
GY	' +H  +G9566r)   default_classc                     | j                  d      }| j                  d      xs d}|dk(  s	|t        k(  rt        |      S |dk(  s	|t        k(  rt        |      S |s	|t        k(  rt        ||      S  ||      S )Nr   r!   r$   r    r"   r#   r%   )r&   r   r   r   )r   r1   r   r!   s       r'   _convert_delta_to_message_chunkr3   8   s|     99VDii	"(bGv~*;; 11		 ?g..	"22d;;W--r)   c                   ~   e Zd ZU dZdZeed<   	 dZee	   ed<   	 dZ
e	ed<   	 dZeed	<   	  ed
      Z ed      edee	ef   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e   f
dZdee   dedej:                  fdZdee	ef   defdZ e!de	fd       Z"y)LlamaEdgeChatServicezChat with LLMs via `llama-api-server`

    For the information about `llama-api-server`, visit https://github.com/second-state/LlamaEdge
    <   request_timeoutNservice_urlNAmodelF	streamingT)populate_by_namebefore)modevaluesr   c           
      `   t        |       }|j                  di       }t        |      D ]M  }||v rt        d| d      ||vst        j                  d| d| d| d       |j                  |      ||<   O |j                  |j                               }|rt        d| d	      ||d<   |S )
z>Build extra kwargs from additional params that were passed in.model_kwargszFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r   r&   list
ValueErrorloggerwarningpopintersectionkeys)clsr?   all_required_field_namesextra
field_nameinvalid_model_kwargss         r'   build_extraz LlamaEdgeChatService.build_extra[   s     $<C#@ 

>2.v, 		;JU" 6*5E!FGG!99!* .L !))34JN
 %+JJz$:j!		;  8DDUZZ\R23 4S T 
 "'~r)   messagesstoprun_managerkwargsc                 ,   | j                   r! | j                  d|||d|}t        |      S  | j                  |fi |}|j                  dk7  r%t        d|j                   d|j                         |j                         }| j                  |      S )N)rO   rP   rQ      zError code: z
, reason:  )	r;   _streamr   _chatstatus_coderC   reasonjson_create_chat_result)selfrO   rP   rQ   rR   stream_iterresresponses           r'   	_generatezLlamaEdgeChatService._generatev   s     >>&$,, !+IOK (44djj,V,??c!|COO+<JszzlSTT88:''11r)   c           
   +     K    | j                   |fi |}t        }d}|j                         D ]  }g }	|r|j                  d      }
t	        j
                  ||
      D cg c]  }|j                          }}dt        |      z  g|z   }t        t        |      dz
        D ]L  }t        j                  |
||   t        |      z   ||dz      t        |      z          }|	j                  |       N |	D ]  }t        |t              s|j                         }t        |d         dk(  r5|d   d   }t        |d   |      }|j                  d      |j                  d      d	k(  r 8|j                  d      }|t        |
      nd }|j                   }t#        ||      }|r|j%                  |j&                  |       |   y c c}w w)Nz!"object":"chat.completion.chunk"}zutf-8   choicesr   deltafinish_reasonrP   )rf   )r*   generation_info)chunk)rW   r   
iter_linesdecoderefinditerstartlenrangerZ   loadsappendr-   dictr3   r&   	__class__r   on_llm_new_tokentext)r\   rO   rP   rQ   rR   r^   default_chunk_class	substringlinechunksjson_stringm	positionsirh   choicerf   rg   cg_chunks                      r'   rV   zLlamaEdgeChatService._stream   s     djj,V,,7	NN$ -	DF"kk'2 13I{0ST1QWWYT	T#i.01I=	s9~12 )A JJ#%aL3y>9Ia!e<L!)n=-E MM%()   !%.!JJLEuY'(A-y)!,77O%8 JJ/;

?3v= &

? ; %0 }5  
 ',oo#.!? 00h0O7%-	 Us   AGG	6EGc                    | j                   .t        j                  j                         }d|_        d|_        |S | j                    d}| j                  r2| j                  |D cg c]  }t        |       c}| j                  d}n&| j                  |D cg c]  }t        |       c}d}t        j                  || j                  dddt        j                  |            }|S c c}w c c}w )	Ni  z8The IP address or port of the chat service is incorrect.z/v1/chat/completions)r:   rO   stream)r:   rO   zapplication/json)acceptzContent-Type)urltimeoutheadersdata)r8   requestsmodelsResponserX   rY   r;   r:   r0   postr7   rZ   dumps)r\   rO   rR   r^   r8   r{   payloads          r'   rW   zLlamaEdgeChatService._chat   s    #//**,C!COSCJJ))**>?>>BJKQ5a8K..G BJKQ5a8KG
 mm((, 2 G$
 
' L Ls   %C)C.r_   c                     t        |d   d   j                  d            }t        |      g}|d   }|| j                  d}t	        ||      S )Nrd   r   r*   )r*   usage)token_usager:   )generations
llm_output)r(   r&   r   r:   r   )r\   r_   r*   r   r   r   s         r'   r[   z(LlamaEdgeChatService._create_chat_result   sS    *8I+>q+A+E+Ei+PQ%g67w'%04::F
kjIIr)   c                      y)Nz	wasm-chatrU   )r\   s    r'   	_llm_typezLlamaEdgeChatService._llm_type   s    r)   )NN)#__name__
__module____qualname____doc__r7   int__annotations__r8   r   strr:   r;   boolr   model_configr   classmethodr   r   rN   r   r   r
   r   r`   r   r   rV   r   r   rW   r   r[   propertyr   rU   r)   r'   r5   r5   H   s   
 OS0!%K#%!E3&It/L (#c3h C   $8 %):>	2{#2 tCy!2 67	2
 2 
22 %):>	8{#8 tCy!8 67	8
 8 
%	&8td;/ 3 8CTCT BJGCH,= J* J 3  r)   r5   )-rZ   loggingrk   typingr   r   r   r   r   r   r	   r   langchain_core.callbacksr
   *langchain_core.language_models.chat_modelsr   r   langchain_core.messagesr   r   r   r   r   r   r   r   r   langchain_core.outputsr   r   r   langchain_core.utilsr   pydanticr   r   	getLoggerr   rD   r   r(   rr   r0   r3   r5   rU   r)   r'   <module>r      s      	 E E E  =
 
 
 S R 9 0			8	$@GCH$5 @+ @k d  .38.-12B-C.. i= ir)   