
    h?                     :   d dl Z d dlZd dlZd dlmZmZmZmZ d dlZd dl	Z	d dl
mZ d dlZd dlmZ d dlmZmZmZ d dlmZmZ d dlmZ d dlmZmZ  G d	 d
e      Z	 	 	 	 	 ddedededededee   dedeeeef      fdZ d Z!d Z"dee   dej0                  fdZ#y)    N)AnyListOptionalUnion)	BaseModel)verbose_logger)AsyncHTTPHandlerHTTPHandlerget_async_httpx_client)OllamaToolCallOllamaToolCallFunction)ChatCompletionAssistantToolCall)ModelResponseStreamingChoicesc                        e Zd Z fdZ xZS )OllamaErrorc                     || _         || _        t        j                  dd      | _        t        j
                  || j                        | _        t        | !  | j                         y )NPOSThttp://localhost:11434)methodurl)status_coderequest)	r   messagehttpxRequestr   Responseresponsesuper__init__)selfr   r   	__class__s      T/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/ollama_chat.pyr    zOllamaError.__init__   sO    &}}F8PQ;ULL	
    )__name__
__module____qualname__r    __classcell__)r"   s   @r#   r   r      s    
 
r$   r   model_responsemessagesoptional_paramsmodellogging_objapi_keyacompletionclientc
                    |j                  d      r|}
n| d}
t        j                  j                         }|j	                         D ]  \  }}||vs|||<    |j                  dd      }|j                  dd       }|j                  dd       }|j                  dd       }|j                  dd       }g }|D ]  }t        |t              r|j                  d	      }|j                  d
      t        |d
   t              rg }|d
   D ]x  }t        d.i |}|d   dk(  si }d|d   v rt        j                  |d   d         }t        t        |d   j                  d      xs d|            }|j!                  |       z ||d
<   |j!                  |        ||||d}|||d<   |||d<   |||d<   |j#                  d d |
|i |d       |du r+|du rt%        |
||| ||      }|S t'        |
||| |||      }|S |du rt)        |
|||      S d }|ddj+                  |      i}t        j,                  }|	t        |	t.              r|	}|j1                  |
||      }|j2                  dk7  r!t5        |j2                  |j6                        |j9                  |d|j6                  d |d       |j                         }d| j:                  d    _        |j                  dd      d!k(  r|t        j                  |d"   d#         }t        j>                  d d$tA        tC        jD                                |j                  d|      t        jF                  |j                  d|            ddd%g&      } | | j:                  d    _$        d
| j:                  d    _        n,t        j>                  d.i |d"   }!|!| j:                  d    _$        tK        tM        jL                               | _'        d'|z   | _(        |j                  d(t        jR                  |)            }"|j                  d*t        jR                  |d"   d#   +            }#tU        | d,t        jV                  |"|#|"|#z   -             | S )/Nz	/api/chatstreamFformat
keep_alivefunction_nametoolsT)exclude_none
tool_callstypefunction	argumentsname r<   r;   )r:   )r,   r*   optionsr2   )api_basecomplete_input_dictheadersr/   )inputr.   additional_args)r   r.   datar)   encodingr-   )r   r.   rE   r)   rF   r-   r5   )r   r.   rE   r-   Authorization	Bearer {})r   jsonrB      r   r   rB   r@   rC   r.   original_responserD   stopr   rI   r   contentcall_idr:   r9   rP   r8   ollama_chat/prompt_eval_countr*   
eval_count)textusageprompt_tokenscompletion_tokenstotal_tokens ),endswithlitellmOllamaChatConfig
get_configitemspop
isinstancer   
model_dumpgetlistr   rI   loadsr   r   appendpre_callollama_async_streamingollama_acompletionollama_completion_streamr3   module_level_clientr
   postr   r   rY   	post_callchoicesfinish_reasonMessagestruuiduuid4dumpsr   inttimecreatedr,   token_countersetattrUsage)$r)   r*   r+   r,   r-   r@   r.   r/   rF   r0   r   configkvr2   r3   r4   r5   r6   new_messagesm	new_toolstool
typed_toolr;   ollama_tool_callrE   r   rB   sync_clientresponse_jsonfunction_callr   _messager\   r]   s$                                       r#   get_ollama_responser   "   s    %
)$ %%002F1_$!"OA	    51F  40F $$\48J#''>M.ELy
 $/A55*z!L/4/P.0I,<DtD
f%3 "I"j&<<$(JJz*/Ek/R$S	'5!7!+J!7!;!;F!C!Ir&/"($ $$%56 ( (AlOA+ 0  "	D XW'\#'&	
  	 dT>--!'H$  *-!'+H 	4'W4[
 	
 #G"K$6$6w$?@--Kj=   H
 s"h&:&:HMMRR "-- 
	   MMOM /5N1+xx"'M,E

=#;I#FG// "#djjl"3!45 - 1 1&- H%)ZZ)--k=I&! '	
 -4q!)2>q!/??>]9%=>,4q!) -N)E1N!%%&97;P;PZb;cdM%))g++y1I)1TU '/&)::	
 r$   c           
   #   8  K   |  |dt         j                  dd}|ddj                  |      i|d<   t        j                  di |5 }	 |j
                  dk7  r%t        |j
                  |j                               t        j                  |j                         |d	   d
|      }|j                  dd      dk(  r*g }|D ]k  }|j                  d   }	t        |	t              s#t        |	d      s0t        |	j                  d      sG|j                  |	j                  j                          m dj#                  |      }
t%        j&                  |
      }t         j(                  j+                  d dt-        t/        j0                                |d   t%        j2                  |d         dddg      }|d   }||j                  d   _        d|j                  d   _        | n|D ]  }|  d d d        y # t6        $ r}|d }~ww xY w# 1 sw Y   y xY ww)Nr   T)r   rI   r   timeoutfollow_redirectsrG   rH   rB   rJ   rK   r,   ollama_chatcompletion_streamr,   custom_llm_providerr-   r3   r=   rI   r   deltarP   rQ   r<   r;   r>   r:   rR   rT   r8   r_   )ra   request_timeoutr3   r   r2   r   r   
iter_linesCustomStreamWrapperrh   rs   rf   r   hasattrr   rk   rP   joinrI   rj   utilsDeltarv   rw   rx   ry   rt   	Exception)r   r.   rE   r-   _requestr   streamwrappercontent_chunkschunkchunk_choiceresponse_contentr   r   r)   transformed_chunkes                   r#   ro   ro      s$    ** H .0B0B70KL		!	! 2X1	##s*! ( 4 4h>Q>Q>S  $77"*"5"5"77m$1'	M xx"%/!#*E#(==#3L"<1AB#L':#L$6$6	B&--l.@.@.H.HI + $&77>#:  $

+; <++  %*#djjl*;)<"=(5f(=-1ZZk8R-S) %/	  ,  "0!227&&q)/:F&&q)7$$)6%++ *7_2 2b  	G	c2 2sP   AHH	BG;$G;1G;C*G;2	H;	HHHHHHc                ^  K   	 t        t        j                  j                        }|j                  }|  |dt        j
                  d}|ddj                  |      i|d<    |j                  di |4 d {   }	|	j                  dk7  r!t        |	j                  |	j                        t        j                  |	j                         |d	   d
|      }
|j                  dd      dk(  rt        |
       d {   }|j                  d   }t!        |t"              r=t%        |d      r1t%        |j&                  d      r|j&                  j(                  xs d}nd}g }|
2 3 d {   }|j                  d   }t!        |t"              s)t%        |d      s6t%        |j&                  d      sM|j+                  |j&                  j(                         s|
2 3 d {   }| 7 m7 7 6 |dj-                  |      z   }t/        j0                  |      }t        j2                  j5                  d dt7        t9        j:                                |j                  d|j                  dd             t/        j<                  |d         dddg      }|}||j                  d   _        d|j                  d   _        | n7 6 d d d       d {  7   y # 1 d {  7  sw Y   y xY w# t@        $ r4}tC        jD                  dj                  t7        |                   |d }~ww xY ww)N)llm_providerr   )r   rI   r   r   rG   rH   rB   rJ   rK   r,   r   r   r3   r=   rI   r   r   rP   rQ   r<   r:   r;   r>   rR   rT   r8   z(LiteLLM.ollama(): Exception occured - {}r_   )#r   ra   LlmProvidersOLLAMAr0   r   r3   r2   r   r   rY   r   aiter_linesrh   anextrs   rf   r   r   r   rP   rk   r   rI   rj   r   r   rv   rw   rx   ry   rt   r   r   	exception)r   r.   rE   r)   rF   r-   _async_http_clientr0   r   r   r   first_chunkr   first_chunk_contentr   r   r   r   r   r   r   s                        r#   rm   rm     s    N3 --44
 $**U..	
 #2K4F4Fw4O"PHY 6==,8, <	, <	,##s*! ( 4 4hmm  $77"*"6"6"87m$1'	M xx"%/$)-$88*2215|-=>g6 2 2I>*6*<*<*D*D*J'*,'!##0 J J%#(==#3L"<1AB#L':#L$6$6	B&--l.@.@.H.HI0 0= , ,+++y<	,  9J= $79P#P  $

+; <++  %*#djjl*;)<"=(5(9(9$*M,=,=j$,O)" .2ZZk8R-S	) %/	  ,  "-27&&q)/:F&&q)7$$,}w<	, <	, <	, <	, <	,z    6==c!fE	
 	s   L-A4K- 8G%9K- <A>K:G(;A&K!G,%G*&G,) K
KK.(KKKKK%K- (K*G,,CKKKK- KK- L-K*K!K*&K- )L-*K- -	L*6/L%%L**L-c                   K   d|d<   	 t        j                  t        j                        }t        j                  |      4 d {   }|  |d}	|ddj                  |      i|	d<    |j                  d&i |	 d {   }
|
j                  d	k7  r/|
j                          d {   }t        |
j                  |
      |
j                          d {   }|j                  |d|d | d       d|j                  d   _        |j                  dd      dk(  r|t        j                  |d   d         }t        j                   d dt#        t%        j&                                |j                  d|      t        j(                  |j                  d|            dddg      }||j                  d   _        d|j                  d   _        n,t        j                   d&i |d   }||j                  d   _        t-        t/        j.                               |_        d|d   z   |_        |j                  dt        j4                  |d                }|j                  d!t        j4                  |d   d   d"#            }t7        |d$t        j8                  ||||z   %             |cd d d       d {    S 7 t7 ?7 7 7 # 1 d {  7  sw Y   y xY w# t:        $ r}|d }~ww xY ww)'NFr2   )total)r   )r   rI   rG   rH   rB   rJ   rK   r=   rL   rM   rO   r   r3   rI   r   rP   rQ   r<   r;   r>   r:   rR   rT   r8   rU   r,   rV   r*   rW   rX   T)rY   count_response_tokensrZ   r[   r_   )aiohttpClientTimeoutra   r   ClientSessionr3   rq   statusrY   r   rI   rr   rs   rt   rh   rj   ru   rv   rw   rx   ry   r   rz   r{   r|   r,   r}   r~   r   r   )r   r.   rE   r)   rF   r-   r5   r   sessionr   resprY   r   r   r   r   r\   r]   r   s                      r#   rn   rn   c  s     DNJ''g.E.EF((9 F	" F	"WH "'68J8J78S&T#%111D{{c!!YY[(!dkk4HH"&))+-M !!"/# #!	 "  7=N""1%3xx"%/M4M $

=+CI+N O!//  %*#djjl*;)<"=(5(9(9&-(P-1ZZ$1$5$5k=$Q.") %/	  5<&&q)1:F&&q)7"??F]9-EF4<&&q)1%(%5N"#1DM#AN )--.A7CXCXbfgqbrCstM - 1 1%%&y1)<TX! "/&7!.1B!B "MF	" F	" F	" 2 ) .F	" F	" F	" F	"N  s   K1>K J;K 4K	?J> &K	&K'.K	KGK	)K 5K6K :K1;K >K	K	K	K 	KKKK K1K 	K.'K))K..K1)r   NFNN)$rI   r{   rw   typingr   r   r   r   r   r   pydanticr   ra   r   &litellm.llms.custom_httpx.http_handlerr	   r
   r   litellm.types.llms.ollamar   r   litellm.types.llms.openair   litellm.types.utilsr   r   r   r   ri   dictrv   boolr   ro   rm   rn   r_   r$   r#   <module>r      s       - -     " 
 M E ?
) 
$ &!=Ak!kk k 	k
 k c]k k U;(889:k\<~QhTc]T ))	Tr$   