
    h"                         d Z ddl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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mZ d	Zd
ZdededefdZ  e
ddd       G d de             Z!y)u   
Deprecated LiteLLM wrapper.

⭐  Use `pip install langchain-litellm` and import
   `from langchain_litellm import ChatLiteLLMRouter` instead.
    )AnyAsyncIteratorIteratorListMappingOptionalType)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)agenerate_from_streamgenerate_from_stream)AIMessageChunkBaseMessageBaseMessageChunk)ChatGenerationChatGenerationChunk
ChatResult)ChatLiteLLM_convert_delta_to_message_chunk_convert_dict_to_messagetoken_usagemodel_extrausageparamsreturnc                 H    t         | i}|d   }|D ]  }||vs||   ||<    |S )z%Get llm output from usage and params.metadata)token_usage_key_name)r   r   
llm_outputr   keys        m/var/www/html/aiagenthome/venv/lib/python3.12/site-packages/langchain_community/chat_models/litellm_router.pyget_llm_outputr#       s=    &.Jj!Hj &smJsO      z0.3.24z1.0z#langchain_litellm.ChatLiteLLMRouter)sinceremovalalternative_importc                       e Zd ZU dZeed<   dededdf fdZedefd       Z	deddfd	Z
d
eddfdZ	 	 	 ddee   deee      d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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e   dedefdZdeee      defdZdeeef   dedefdZ xZS )ChatLiteLLMRouteruA   DEPRECATED – use `langchain_litellm.ChatLiteLLMRouter` instead.routerkwargsr   Nc                6    t        |   dd|i| || _        y)zConstruct Chat LiteLLM Router.r*   N )super__init__r*   )selfr*   r+   	__class__s      r"   r/   zChatLiteLLMRouter.__init__6   s    11&1r$   c                      y)NLiteLLMRouterr-   )r0   s    r"   	_llm_typezChatLiteLLMRouter._llm_type;   s    r$   r   c                 D    d}||v r||   ||= |j                  di        y )Napi_baser   )
setdefault)r0   r   api_base_key_names      r"   _prepare_params_for_routerz,ChatLiteLLMRouter._prepare_params_for_router?   s6    &&62C+D+L() 	*b)r$   
model_namec                     | j                   j                  }|st        d      |D ]  }|d   |k(  s|| _         y t        d| d      )a  Set the default model to use for completion calls.

        Sets `self.model` to `model_name` if it is in the litellm router's
        (`self.router`) model list. This provides the default model to use
        for completion calls if no `model` kwarg is provided.
        zmodel_list is None or empty.r:   NzModel z not found in model_list.)r*   
model_list
ValueErrormodel)r0   r:   r<   entrys       r"   set_default_modelz#ChatLiteLLMRouter.set_default_modelH   sZ     [[++
;<<E\"j0'
   6*-FGHHr$   messagesstoprun_managerstreamc                 "   ||n| j                   }|r! | j                  |f||d|}t        |      S | j                  ||      \  }}	i |	|}	| j	                  |	        | j
                  j                  dd|i|	}
 | j                  |
fi |	S )N)rB   rC   rA   r-   )	streaming_streamr   _create_message_dictsr9   r*   
completion_create_chat_resultr0   rA   rB   rC   rD   r+   should_streamstream_itermessage_dictsr   responses              r"   	_generatezChatLiteLLMRouter._generateX   s     #)"4$..&$,,#@FK (44 $ : :8T Jv%F%f%''/)4;;)) 
"

 (t'';F;;r$   c              +     K   t         }| j                  ||      \  }}i ||ddi}| j                  |        | j                  j                  d	d|i|D ]q  }t        |d         dk(  r|d   d   d   }	t        |	|      }|j                  }t        |      }
|r( |j                  t        |j                        fd|
i| |
 s y w
NrD   TrA   choicesr   delta)messagechunkr-   )r   rH   r9   r*   rI   lenr   r1   r   on_llm_new_tokenstrcontentr0   rA   rB   rC   r+   default_chunk_classrN   r   rV   rT   cg_chunks              r"   rG   zChatLiteLLMRouter._streamq   s      7E $ : :8T Jv5F5f5h5''/+T[[++M]MfME5#$))$Q'0E3E;NOE"'//*59H,,,&.6:@ N Ns   C
Cc                  K   t         }| j                  ||      \  }}i ||ddi}| j                  |        | j                  j                  d	d|i| d {   2 3 d {   }t        |d         dk(  r|d   d   d   }	t        |	|      }|j                  }t        |      }
|r0 |j                  t        |j                        fd|
i| d {    |
 7 7 7 6 y wrR   )r   rH   r9   r*   acompletionrW   r   r1   r   rX   rY   rZ   r[   s              r"   _astreamzChatLiteLLMRouter._astream   s"     7E $ : :8T Jv5F5f5h5''/!8!8!8 "
""
&,"
 
 
 	% 5#$))$Q'0E3E;NOE"'//*59H2k22&.6:@   N
 	
sI   AC)C!C)C'#C#$C''A/C)C%C)#C'%C)'C)c                 R  K   ||n| j                   }|r) | j                  d|||d|}t        |       d {   S | j                  ||      \  }}	i |	|}	| j	                  |	        | j
                  j                  dd|i|	 d {   }
 | j                  |
fi |	S 7 i7 w)N)rA   rB   rC   rA   r-   )rF   r`   r   rH   r9   r*   r_   rJ   rK   s              r"   
_ageneratezChatLiteLLMRouter._agenerate   s      #)"4$..'$-- !+IOK /{;;; $ : :8T Jv%F%f%''/000 
"

 
 (t'';F;; <
s"   7B'B#AB'B%B'%B'llm_outputsc                    i }d }|D ]b  }||d   }|B|j                         j                         D ]!  \  }}||v r||   ||xx   |z  cc<   |||<   # |R|j                  d      }d || j                  d}|r||d<   |S )Nr   system_fingerprint)r   r:   )
model_dumpitemsgetr>   )	r0   rc   overall_token_usagere   outputr   kvcombineds	            r"   _combine_llm_outputsz&ChatLiteLLMRouter._combine_llm_outputs   s    $&!!F~ /K&'224::<DAq//4G4J4V+A.!3.12+A.	 =
 ")%+ZZ0D%E" " $7djjQ-?H)*r$   rO   c           	         ddl m} g }|d   D ]G  }t        |d         }t        |t	        |j                  d                  }|j                  |       I |j                  d |dd	            }t        |fi |}	t        ||	
      S )Nr   )UsagerS   rU   finish_reason)rq   )rU   generation_infor   )prompt_tokenstotal_tokens)generationsr    )	litellm.utilsrp   r   r   dictrh   appendr#   r   )
r0   rO   r   rp   ru   resrU   genr   r    s
             r"   rJ   z%ChatLiteLLMRouter._create_chat_result   s     	(I&C.s9~>G  $377?3K LC s# ' ll7EPQ,RS#K:6:
kjIIr$   )NNN)NN)__name__
__module____qualname____doc__r   __annotations__r/   propertyrY   r4   r9   r@   r   r   r   r   boolr   rP   r   r   rG   r   r   r`   rb   rw   rn   r   rJ   __classcell__)r1   s   @r"   r)   r)   ,   s$    LK#   
 3  * * *IC ID I& %):>!%<{#< tCy!< 67	<
 < < 
<8 %):>	{# tCy! 67	
  
%	&8 %)?C	{# tCy! ;<	
  
*	+< %)?C!%<{#< tCy!< ;<	<
 < < 
<8Xd^0D  ,JS)J58J	Jr$   r)   N)"r~   typingr   r   r   r   r   r   r	   langchain_core._api.deprecationr
    langchain_core.callbacks.managerr   r   *langchain_core.language_models.chat_modelsr   r   langchain_core.messagesr   r   r   langchain_core.outputsr   r   r   'langchain_community.chat_models.litellmr   r   r   r   model_extra_key_namerw   r#   r)   r-   r$   r"   <module>r      s    O N N 6 R Q R R  % $ 	# 	 	 	 
<
uJ uJ
uJr$   