Ë
    ðìj¿(  ã                  ó°   — d Z ddlmZ ddl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  ej                  e«      Ze G d„ d	«      «       Z G d
„ de«      Zy)u?   LiteLLM integration â€” unified API for multiple LLM providers.é    )ÚannotationsN)ÚAsyncIteratorÚIterator)Ú	dataclass)ÚAny)Ú
ChatResultÚProviderABCÚProviderProtocolc                  óf   — e Zd ZU dZdZded<   dZded<   dZded<   d	Zd
ed<   dZ	ded<   dZ
ded<   y)ÚLiteLLMConfigz!Configuration for LiteLLM client.Nú
str | NoneÚapi_keyÚbase_urlé   ÚintÚmax_retriesg      N@ÚfloatÚtimeoutÚdefault_modelzdict[str, str] | NoneÚextra_headers)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   r   © ó    úM/home/oem/CyberBrain26-unified/src/cyberbrain26/model_layer/litellm_client.pyr   r      sB   … á+à€GˆZÓØ€HˆjÓØ€K�ÓØ€GˆUÓØ $€M�:Ó$Ø+/€MÐ(Ô/r   r   c                  ó6  — e Zd ZdZddd„Zdd„Zedd„«       Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z		 	 	 	 	 	 	 	 dd„Z
dd	„Zddddd
ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zddœ	 	 	 	 	 	 	 dd„Zdd„Zd d„Zy)!ÚLiteLLMClientzJLiteLLM-based model client providing unified access to multiple providers.Nc                óF   — |xs
 t        «       | _        d | _        d| _        y )NF)r   ÚconfigÚ_clientÚ_initialized)Úselfr"   s     r   Ú__init__zLiteLLMClient.__init__   s   € ØÒ/¤£ˆŒØ ˆŒØ"'ˆÕr   c                ó¨   — | j                   ry 	 dd l}|| _        d| _         t        j	                  d«       y # t
        $ r}t        d«      |‚d }~ww xY w)Nr   TzLiteLLM client initializedzHlitellm is required for LiteLLMClient. Install with: pip install litellm)r$   Úlitellmr#   ÚloggerÚinfoÚImportError)r%   r(   Úexcs      r   Ú_ensure_initializedz!LiteLLMClient._ensure_initialized"   sY   € Ø×ÒØð
	Ûà"ˆDŒLØ $ˆDÔÜ�K‰KÐ4Õ5øÜò 	Üð4óð ðûð	ús   �'7 ·	AÁ AÁAc                óª   — | j                  «        	 dd l}t        |j                  «       j	                  dg «      «      d d S # t
        $ r g d¢cY S w xY w)Nr   Ú	providersé2   )
ÚopenaiÚazureÚ	anthropicÚgoogleÚgeminiÚmistralÚgroqÚollamaÚcohereÚhuggingface)r-   r(   ÚlistÚLitellmConfigÚgetÚ	Exception)r%   r(   s     r   Úavailable_providersz!LiteLLMClient.available_providers1   sW   € à× Ñ Ô"ð	Ûä˜×-Ñ-Ó/×3Ñ3°KÀÓDÓEÀcÀrÐJÐJøÜò 	òò ð	ús   ’/A ÁAÁAc                óö  — | j                  «        dd l}|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  dd«      }	|j                  d«      }
||d	œ}|�||d<   |�||d<   |r||d<   |�||d<   | j                  j                  r| j                  j                  |d
<   | j                  j
                  r| j                  j
                  |d<   |
r|j                  |
«       t        j                  d|t        |«      «       |	r| j                  ||«      S  |j                  di |¤Ž}|j                  d   j                  j                  xs dS )Nr   ÚtemperatureÚ
max_tokensÚtoolsÚtool_choiceÚstreamFÚextra©ÚmodelÚmessagesÚapi_baser   z#LiteLLM chat: model=%s, messages=%dÚ r   )r-   r(   r=   r"   r   r   Úupdater)   r*   ÚlenÚ_stream_chatÚ
completionÚchoicesÚmessageÚcontent)r%   rH   rI   Úkwargsr(   rA   rB   rC   rD   rE   rF   ÚparamsÚresponses                r   ÚchatzLiteLLMClient.chatF   si  € ð 	× Ñ Ô"Ûà—j‘j Ó/ˆØ—Z‘Z Ó-ˆ
Ø—
‘
˜7Ó#ˆØ—j‘j Ó/ˆØ—‘˜H eÓ,ˆØ—
‘
˜7Ó#ˆð Ø ñ"
ˆð Ð"Ø$/ˆF�=Ñ!ØÐ!Ø#-ˆF�<Ñ ÙØ#ˆF�7‰OØÐ"Ø$/ˆF�=Ñ!Ø�;‰;×ÒØ!%§¡×!5Ñ!5ˆF�:ÑØ�;‰;×ÒØ $§¡× 3Ñ 3ˆF�9ÑÙØ�M‰M˜%Ô ä�‰Ð9¸5Ä#ÀhÃ-ÔPáØ×$Ñ$ W¨fÓ5Ð5à%�7×%Ñ%Ñ/¨Ñ/ˆØ×Ñ Ñ"×*Ñ*×2Ñ2Ò8°bÐ8r   c              #  óF  K  —  |j                   j                  di |¤ŽD ]y  }t        |dd«      t        |d|d   «      t        |dg «      D �cg c]A  }t        t        |dd «      dd«      t        t        |dd «      dd«      d	œt        |d
d «      dœ‘ŒC c}dœ–— Œ{ y c c}w ­w)NÚidrK   rH   rP   ÚdeltarR   ÚroleÚ	assistant©rR   rZ   Úfinish_reason©rY   r]   ©rX   rH   rP   r   )Ú	streamingrO   Úgetattr)r%   Úlitellm_modulerT   ÚchunkÚcs        r   rN   zLiteLLMClient._stream_chatq   sÂ   è ø€ ð 9�^×-Ñ-×8Ñ8ÑB¸6ÑBò 	ˆEä˜e T¨2Ó.Ü  ¨°¸±ÓAô % U¨I°rÓ:öð ô (/Ü '¨¨7°DÓ 9¸9Àbó(ô %,Ü '¨¨7°DÓ 9¸6À;ó%ñ	"ô *1°°OÀTÓ)Jó
òñó ñ	ùòùs   ‚A
B!ÁAB
ÂB!c                ó¨  — | j                  «        dd l}|j                  d«      }||dœ}| j                  j                  r| j                  j                  |d<   |r|j                  |«       t        j                  d|t        |«      «        |j                  di |¤Ž}t        |dg «      D �cg c]  }t        |d«      rt        |«      ‘Œ c}S c c}w )	Nr   rF   ©rH   ÚinputrJ   z!LiteLLM embed: model=%s, texts=%dÚdataÚ	embeddingr   )r-   r(   r=   r"   r   rL   r)   r*   rM   ri   ra   Úhasattrr;   )	r%   rH   ÚtextsrS   r(   rF   rT   rU   ri   s	            r   ÚembedzLiteLLMClient.embedˆ   sÅ   € ð 	× Ñ Ô"Ûà—
‘
˜7Ó#ˆð Øñ"
ˆð �;‰;×ÒØ!%§¡×!5Ñ!5ˆF�:ÑÙØ�M‰M˜%Ô ä�‰Ð7¸ÄÀEÃ
ÔKà$�7×$Ñ$Ñ. vÑ.ˆô % X¨v°rÓ:ö
àÜ�y +Ô.ô ��Oò
ð 	
ùò 
s   Â.Cc                óà   — | j                  «        	 dd l}t        |j                  «      d d D �cg c]  }d|i‘Œ c}S c c}w # t        $ r!}t
        j                  d|«       Y d }~g S d }~ww xY w)Nr   éÈ   rH   z&Failed to list models from LiteLLM: %s)r-   r(   r;   Ú
model_listr>   r)   Úwarning)r%   r(   Únamer,   s       r   Úlist_modelszLiteLLMClient.list_models¥   sj   € Ø× Ñ Ô"ð	JÛä04°W×5GÑ5GÓ0HÈÈ#Ð0NÖO¨�W˜d’OÒOÐOùÒOøÜò 	JÜ�N‰NÐCÀS×IÐIØˆ	ûð	Jús%   ’A °>»A ¾A Á	A-ÁA(Á(A-F)rA   rB   rC   rD   rE   rF   c          	   ƒ  ó~   K  — |r| j                  |||||||«      S | j                  |||||||«      ƒ d {  –—† S 7 Œ­w©N)Ú_astream_chatÚ_achat_nonstream)	r%   rH   rI   rA   rB   rC   rD   rE   rF   s	            r   ÚachatzLiteLLMClient.achat¯   s]   è ø€ ñ Ø×%Ñ%Ø�x ¨jØ�{ Eóð ð ×*Ñ*Ø�8˜[¨*Ø�; ó
÷ 
ð 	
ð 
ús   ‚4=¶;·=c               ó¼  K  — | j                  «        dd l}||dœ}	|�||	d<   |�||	d<   |r||	d<   |�||	d<   | j                  j                  r| j                  j                  |	d<   | j                  j                  r| j                  j                  |	d<   |r|	j                  |«       t        j                  d	|«        |j                  di |	¤Ž2 3 d {  –—† }
t        |
d
d«      t        |
d|	d   «      t        |
dg «      D �cg c]A  }t        t        |dd «      dd«      t        t        |dd «      dd«      dœt        |dd «      dœ‘ŒC c}dœ­–— Œ‚7 Œ}c c}w 6 y ­w)Nr   rG   rA   rB   rC   rD   rJ   r   úLiteLLM async chat: model=%srX   rK   rH   rP   rY   rR   rZ   r[   r\   r]   r^   r_   r   )
r-   r(   r"   r   r   rL   r)   r*   Úacompletionra   )r%   rH   rI   rA   rB   rC   rD   rF   r(   rT   rc   rd   s               r   ru   zLiteLLMClient._astream_chatÅ   s‚  è ø€ ð 	× Ñ Ô"Ûð Ø ñ"
ˆð Ð"Ø$/ˆF�=Ñ!ØÐ!Ø#-ˆF�<Ñ ÙØ#ˆF�7‰OØÐ"Ø$/ˆF�=Ñ!Ø�;‰;×ÒØ!%§¡×!5Ñ!5ˆF�:ÑØ�;‰;×ÒØ $§¡× 3Ñ 3ˆF�9ÑÙØ�M‰M˜%Ô ä�‰Ð2°EÔ:à.˜7×.Ñ.Ñ8°Ñ8÷ 	ð 	�%ä˜e T¨2Ó.Ü  ¨°¸±ÓAô % U¨I°rÓ:öð ô (/Ü '¨¨7°DÓ 9¸9Àbó(ô %,Ü '¨¨7°DÓ 9¸6À;ó%ñ	"ô *1°°OÀTÓ)Jó
òñô ð	úòñ	 9ùs7   ‚CEÃEÃEÃEÃ+EÄAE
Å
	EÅEÅEc              ƒ  ó  K  — | j                  «        dd l}||dœ}	|�||	d<   |�||	d<   |r||	d<   |�||	d<   | j                  j                  r| j                  j                  |	d<   | j                  j                  r| j                  j                  |	d<   |r|	j                  |«       t        j                  d	|«        |j                  di |	¤Žƒ d {  –—† }
|
j                  d   j                  j                  xs d
S 7 Œ+­w)Nr   rG   rA   rB   rC   rD   rJ   r   ry   rK   r   )r-   r(   r"   r   r   rL   r)   r*   rz   rP   rQ   rR   )r%   rH   rI   rA   rB   rC   rD   rF   r(   rT   rU   s              r   rv   zLiteLLMClient._achat_nonstreamû   s  è ø€ ð 	× Ñ Ô"Ûð Ø ñ"
ˆð Ð"Ø$/ˆF�=Ñ!ØÐ!Ø#-ˆF�<Ñ ÙØ#ˆF�7‰OØÐ"Ø$/ˆF�=Ñ!Ø�;‰;×ÒØ!%§¡×!5Ñ!5ˆF�:ÑØ�;‰;×ÒØ $§¡× 3Ñ 3ˆF�9ÑÙØ�M‰M˜%Ô ä�‰Ð2°EÔ:à,˜×,Ñ,Ñ6¨vÑ6×6ˆØ×Ñ Ñ"×*Ñ*×2Ñ2Ò8°bÐ8ð 7ús   ‚CDÃD Ã,D)rF   c             ƒ  óŽ  K  — | j                  «        dd l}||dœ}| j                  j                  r| j                  j                  |d<   |r|j	                  |«       t
        j                  d|«        |j                  di |¤Žƒ d {  –—† }t        |dg «      D �cg c]  }t        |d«      rt        |«      ‘Œ c}S 7 Œ4c c}w ­w)Nr   rf   rJ   zLiteLLM async embed: model=%srh   ri   r   )r-   r(   r"   r   rL   r)   r*   Ú
aembeddingra   rj   r;   )r%   rH   rk   rF   r(   rT   rU   ri   s           r   ÚaembedzLiteLLMClient.aembed   s½   è ø€ ð 	× Ñ Ô"Ûð Øñ"
ˆð �;‰;×ÒØ!%§¡×!5Ñ!5ˆF�:ÑÙØ�M‰M˜%Ô ä�‰Ð3°UÔ;à+˜×+Ñ+Ñ5¨fÑ5×5ˆô % X¨v°rÓ:ö
àÜ�y +Ô.ô ��Oò
ð 	
ð 6úò
ùs$   ‚BCÂ	B>Â
CÂC Â;CÃ Cc                óD   — 	 | j                  «        y# t        $ r Y yw xY w)NTF)r-   r>   )r%   s    r   Úis_availablezLiteLLMClient.is_available<  s(   € ð	Ø×$Ñ$Ô&ØøÜò 	Ùð	ús   ‚ “	žc                ó¨   — 	 | j                  «        ddt        | j                  «       «      dœS # t        $ r}ddt	        |«      dœcY d }~S d }~ww xY w)NTr(   )ÚhealthyÚproviderÚmodels_availableF)r‚   rƒ   Úerror)r-   rM   rr   r>   Ústr)r%   r,   s     r   Úhealth_checkzLiteLLMClient.health_checkC  sZ   € ð	PØ×$Ñ$Ô&àØ%Ü$'¨×(8Ñ(8Ó(:Ó$;ñð øô
 ò 	PØ$°)ÄcÈ#ÃhÑOÕOûð	Pús   ‚,/ ¯	A¸AÁAÁArt   )r"   zLiteLLMConfig | NoneÚreturnÚNone)rˆ   r‰   )rˆ   ú	list[str])rH   r†   rI   úlist[dict[str, str]]rS   r   rˆ   r   )rb   r   rT   údict[str, Any]rˆ   zIterator[dict[str, Any]])rH   r†   rk   rŠ   rS   r   rˆ   úlist[list[float]])rˆ   zlist[dict[str, Any]])rH   r†   rI   r‹   rA   úfloat | NonerB   ú
int | NonerC   úlist[dict[str, Any]] | NonerD   r   rE   ÚboolrF   údict[str, Any] | Nonerˆ   z#str | AsyncIterator[dict[str, Any]])rH   r†   rI   r‹   rA   rŽ   rB   r�   rC   r�   rD   r   rF   r’   rˆ   zAsyncIterator[dict[str, Any]])rH   r†   rI   r‹   rA   rŽ   rB   r�   rC   r�   rD   r   rF   r’   rˆ   r†   )rH   r†   rk   rŠ   rF   r’   rˆ   r�   )rˆ   r‘   )rˆ   rŒ   )r   r   r   r   r&   r-   Úpropertyr?   rV   rN   rl   rr   rw   ru   rv   r~   r€   r‡   r   r   r   r    r       sð  „ ÙTô(ó
ð òó ðð()9àð)9ð 'ð)9ð ð	)9ð
 
ó)9ðVØ!ðØ+9ðà	!óð.
àð
ð ð
ð ð	
ð
 
ó
ó:ð %)Ø!%Ø-1Ø"&ØØ'+ñ
àð
ð 'ð
ð
 "ð
ð ð
ð +ð
ð  ð
ð ð
ð %ð
ð 
-ó
ð,4àð4ð 'ð4ð "ð	4ð
 ð4ð +ð4ð  ð4ð %ð4ð 
'ó4ðl#9àð#9ð 'ð#9ð "ð	#9ð
 ð#9ð +ð#9ð  ð#9ð %ð#9ð 
ó#9ðT (,ñ
àð
ð ð
ð
 %ð
ð 
ó
ó8ô	Pr   r    )r   Ú
__future__r   ÚloggingÚcollections.abcr   r   Údataclassesr   Útypingr   Ú+cyberbrain26.model_layer.provider_interfacer   r	   r
   Ú	getLoggerr   r)   r   r    r   r   r   ú<module>r›      sX   ðÙ Eå "ã ß 3Ý !Ý ß aÑ aà	ˆ×	Ñ	˜8Ó	$€ð ÷0ð 0ó ð0ôrP�Kõ rPr   