
    dhNG                       S SK Jr  S SKrS SKJrJrJrJrJrJ	r	J
r
JrJrJr  S SKrS SKrS SKJr  S SKJrJr  S SKJr  S SKJr  S SKJrJr  S S	KJr      SS
 jr " S S\5      r  " S S\5      r!\" SSSS9 " S S\\!5      5       r"g)    )annotationsN)
AnyAsyncIteratorCallableDictIteratorListMappingOptionalTupleUnion)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseLanguageModel)BaseLLM)GenerationChunk	LLMResult)
ConfigDictc                    [         R                  " U 5      nUR                  S5      SL a  UOSn[        UR                  SS5      US9$ )z0Convert a stream response to a generation chunk.doneTNresponse )textgeneration_info)jsonloadsgetr   )stream_responseparsed_responser   s      W/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/ollama.py$_stream_response_to_generation_chunkr"      sK     jj1O)8)<)<V)D)LoRVO  R0/     c                      \ rS rSrSrSrg)OllamaEndpointNotFoundError)   z-Raised when the Ollama endpoint is not found. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r'   r#   r!   r%   r%   )   s    7r#   r%   c                     \ rS rSr% SrS\S'    SrS\S'    SrS\S	'    SrS
\S'    Sr	S
\S'    Sr
S\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS
\S'    SrS
\S'    SrS\S'    SrS
\S'    SrS\S'    SrS
\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS \S!'    SrS"\S#'    SrS$\S%'    \S/S& j5       r\S0S' j5       r  S1         S2S( jjr   S1         S3S) jjr! S4         S5S* jjr" S4         S6S+ jjr#   S7           S8S, jjr$   S7           S9S- jjr%S.r&g):_OllamaCommon-   zhttp://localhost:11434strbase_urlllama2modelNzOptional[int]mirostatzOptional[float]mirostat_etamirostat_taunum_ctxnum_gpu
num_threadnum_predictrepeat_last_nrepeat_penaltytemperatureOptional[List[str]]stoptfs_ztop_ktop_pzOptional[str]systemtemplateformattimeoutzOptional[Union[int, str]]
keep_alivezOptional[bool]rawzOptional[dict]headerszUnion[Callable, Tuple, None]authc                   U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S.U R                   U R"                  U R$                  U R&                  S.$ )z.Get the default parameters for calling Ollama.)r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r@   rA   rB   rC   )r4   rF   optionsrD   rE   rH   rI   )r4   rF   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r@   rA   rB   rC   rD   rE   rH   rI   selfs    r!   _default_params_OllamaCommon._default_params   s     ZZkk MM $ 1 1 $ 1 1<<<<"oo#//!%!3!3"&"5"5#//		  kk//88-
 	
r#   c                P    0 U R                   U R                  S.EU R                  E$ )zGet the identifying parameters.)r4   rF   )r4   rF   rP   rN   s    r!   _identifying_params!_OllamaCommon._identifying_params   s(     XDJJ$++>W$BVBVWWr#   c              +  n   #    XS.nU R                   " SUUU R                   S3S.UD6 S h  vN   g  N7fNpromptimagesz/api/generate)payloadr@   api_urlr'   )_create_streamr2   )rO   rX   r@   rY   kwargsrZ   s         r!   _create_generate_stream%_OllamaCommon._create_generate_stream   sJ      $6&& 
}}o]3
 	
 	
 	
s   +535c                  #    XS.nU R                   " SUUU R                   S3S.UD6  S h  vN nU7v   M   N
 g 7frV   )_acreate_streamr2   )rO   rX   r@   rY   r]   rZ   items          r!   _acreate_generate_stream&_OllamaCommon._acreate_generate_stream   sX      $6.. 
}}o]3
 	
 	$ J	 
s   (><:<><>c           	        U R                   b  Ub  [        S5      eU R                   b  U R                   nU R                  nU R                   H  nXd;   d  M
  XF   XV'   M     SU;   a	  US   US'   OC0 US   ESU0EUR                  5        VVs0 sH  u  pxXpR                  ;  d  M  Xx_M     snnEUS'   UR	                  S5      (       a  SUR	                  S/ 5      0UEn	O&UR	                  S5      UR	                  S/ 5      S.UEn	[
        R                  " USS	0[        U R                  [        5      (       a  U R                  O0 EU R                  U	S
U R                  S9n
SU
l        U
R                  S:w  aP  U
R                  S:X  a  [        SU R                   S35      eU
R                   n[        SU
R                   SU 35      eU
R#                  S
S9$ s  snnf )N2`stop` found in both the input and default params.rM   r@   messagesrX   rY   rW   Content-Typeapplication/jsonT)urlrJ   rK   r   streamrG   utf-8     zwOllama call failed with status code 404. Maybe your model is not found and you should pull the model with `ollama pull z`.$Ollama call failed with status code . Details: )decode_unicode)r@   
ValueErrorrP   itemsr   requestspost
isinstancerJ   dictrK   rG   encodingstatus_coder%   r4   r   
iter_lines)rO   r[   rZ   r@   r]   paramskeykvrequest_payloadr   optional_details               r!   r\   _OllamaCommon._create_stream   s    99 T%5QRRYY"99D%%''C}$k (  &y 1F9!#!! %+LLNTNDAa?S?S6S414NT!F9 ;;z"")7;;z2+FQ&QO "++h/!++h3 O
 == 2#-dllD#A#A4<<r  LL

 $3&##s*1GGKzzlRTV  #+-- :8;O;O:P Q!!0 13  ""$"77I Us   G%Gc           	      #    U R                   b  Ub  [        S5      eU R                   b  U R                   nU R                  nU R                   H  nXd;   d  M
  XF   XV'   M     SU;   a	  US   US'   OC0 US   ESU0EUR                  5        VVs0 sH  u  pxXpR                  ;  d  M  Xx_M     snnEUS'   UR	                  S5      (       a  SUR	                  S/ 5      0UEn	O&UR	                  S5      UR	                  S/ 5      S.UEn	[
        R                  " 5        IS h  vN n
U
R                  USS	0[        U R                  [        5      (       a  U R                  O0 EU R                  U	U R                  S
9 IS h  vN nUR                  S:w  aB  UR                  S:X  a  [        S5      eUR                  n[        SUR                   SU 35      eUR                     S h  vN nUR#                  S5      7v   M  s  snnf  N N N$
 S S S 5      IS h  vN    O! , IS h  vN  (       d  f       O= fS S S 5      IS h  vN    g ! , IS h  vN  (       d  f       g = f7f)Nrf   rM   r@   rg   rX   rY   rW   rh   ri   )rj   rJ   rK   r   rG   rm   rn   z(Ollama call failed with status code 404.ro   rp   rl   )r@   rr   rP   rs   r   aiohttpClientSessionru   rv   rJ   rw   rK   rG   statusr%   r   contentdecode)rO   r[   rZ   r@   r]   r{   r|   r}   r~   r   sessionr   r   lines                 r!   ra   _OllamaCommon._acreate_stream  sY     99 T%5QRRYY"99D%%''C}$k (  &y 1F9!#!! %+LLNTNDAa?S?S6S414NT!F9 ;;z"")7;;z2+FQ&QO "++h/!++h3 O ((**g||"$6'1$,,'E'Et||2 YY$ $ 	 	 ??c)#-9F  +3--(B8??BS T))8(9;  #+"2"2 /$++g..G U +	*/"2+	 	 	 	 	 	 +*****s   AI'6I'H'H-A4I'!H"I'%AI H
IAH!#H'H
(H+H!I'
IHH!IHI!H8	'H*(H8	4I;I'I	I'I$II$ I'c                    S nU R                   " X40 UD6 HD  nU(       d  M  [        U5      nUc  UnOXh-  nU(       d  M*  UR                  UR                  US9  MF     Uc  [	        S5      eU$ Nverbosez$No data received from Ollama stream.)r^   r"   on_llm_new_tokenr   rr   	rO   rX   r@   run_managerr   r]   final_chunkstream_respchunks	            r!   _stream_with_aggregation&_OllamaCommon._stream_with_aggregationT  s     2677OOK{<[I&"'K(K;00

 ' 1  P CDDr#   c                  #    S nU R                   " X40 UD6  S h  vN nU(       d  M  [        U5      nUc  UnOXh-  nU(       d  M0  UR                  UR                  US9I S h  vN   MT   NO N
 Uc  [	        S5      eU$ 7fr   )rc   r"   r   r   rr   r   s	            r!   _astream_with_aggregation'_OllamaCommon._astream_with_aggregationn  s      26!%!>!>v!Vv!V 	+{<[I&"'K(K;%66

 ' 7   	 "W CDDsB   BA0A,A0BBB%A.&B,A0.B0Br'   )returnzDict[str, Any])r   zMapping[str, Any]NN)
rX   r1   r@   r?   rY   r?   r]   r   r   Iterator[str])
rX   r1   r@   r?   rY   r?   r]   r   r   AsyncIterator[str])N)
r[   r1   rZ   r   r@   r?   r]   r   r   r   )
r[   r1   rZ   r   r@   r?   r]   r   r   r   )NNF)rX   r1   r@   r?   r   "Optional[CallbackManagerForLLMRun]r   boolr]   r   r   r   )rX   r1   r@   r?   r   'Optional[AsyncCallbackManagerForLLMRun]r   r   r]   r   r   r   )'r(   r)   r*   r+   r2   __annotations__r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   propertyrP   rS   r^   rc   r\   ra   r   r   r-   r'   r#   r!   r/   r/   -   s5   ,Hc,-E3"Hm"B %)L/(5
 %)L/(% "G]!$ "G]!+ !%J$N
 "&K%C $(M='= '+NO*, $(K'= !%D
$&!E?!M  E=0 "E?!C !FM D"Hm"U FM 7!G]!(,0J)0	_ C"G^"
 *.D
&-T 
 
6 X X %)&*	

 "
 $	

 
 

$ %)&*	 " $	
  
( %)	<8<8 <8 "	<8
 <8 
<8D %)	;/;/ ;/ "	;/
 ;/ 
;/@ %):> " 8	
   
: %)?C " =	
   
 r#   r/   z0.3.1z1.0.0zlangchain_ollama.OllamaLLM)sinceremovalalternative_importc                     ^  \ rS rSrSr\" SS9r\SS j5       r   S           SU 4S jjjr	   S           SU 4S jjjr
  S         SS jjr  S         SS	 jjrS
rU =r$ )Ollamai  zOllama locally runs large language models.
To use, follow the instructions at https://ollama.ai/.
Example:
    .. code-block:: python
        from langchain_community.llms import Ollama
        ollama = Ollama(model="llama2")
forbid)extrac                    g)zReturn type of llm.z
ollama-llmr'   rN   s    r!   	_llm_typeOllama._llm_type  s     r#   c           	        > / nU H5  n[         T	U ]  " U4UUUU R                  S.UD6nUR                  U/5        M7     [	        US9$ )  Call out to Ollama's generate endpoint.
Args:
    prompt: The prompt to pass into the model.
    stop: Optional list of stop words to use when generating.
Returns:
    The string generated by the model.
Example:
    .. code-block:: python
        response = ollama("Tell me a joke.")
r@   rY   r   r   generations)superr   r   appendr   
rO   promptsr@   rY   r   r]   r   rX   r   	__class__s
            r!   	_generateOllama._generate  sd    & F':' K }-  [11r#   c           	        >#    / nU H=  n[         T	U ]  " U4UUUU R                  S.UD6I Sh  vN nUR                  U/5        M?     [	        US9$  N#7f)r   r   Nr   )r   r   r   r   r   r   s
            r!   
_agenerateOllama._agenerate  sq     & F % A!'! ! K }-  [11s   +AA$Ac              +     #    U R                   " X40 UD6 HF  nU(       d  M  [        U5      nU(       a$  UR                  UR                  U R                  S9  Uv   MH     g 7fNr   )r^   r"   r   r   r   rO   rX   r@   r   r]   r   r   s          r!   _streamOllama._stream  s\       77OOK{<[I00

 $ 1   Ps
   A!?A!c                  #    U R                   " X40 UD6  S h  vN nU(       d  M  [        U5      nU(       a,  UR                  UR                  U R                  S9I S h  vN   U7v   MW   NR N
 g 7fr   )rc   r"   r   r   r   r   s          r!   _astreamOllama._astream  su      "&!>!>v!Vv!V 	+{<[I%66

 $ 7    		 "Ws<   A3A1A-A1A39A3!A/"A3-A1/A31A3r'   )r   r1   )NNN)r   z	List[str]r@   r?   rY   r?   r   r   r]   r   r   r   r   )
rX   r1   r@   r?   r   r   r]   r   r   zIterator[GenerationChunk])
rX   r1   r@   r?   r   r   r]   r   r   zAsyncIterator[GenerationChunk])r(   r)   r*   r+   r,   r   model_configr   r   r   r   r   r   r-   __classcell__)r   s   @r!   r   r     sJ    L   %)&*:>22 "2 $	2
 82 2 
2 2F %)&*:>22 "2 $	2
 82 2 
2 2F %):>	 " 8	
  
#( %)?C	 " =	
  
( r#   r   )r   r1   r   r   )#
__future__r   r   typingr   r   r   r   r   r	   r
   r   r   r   r   rt   langchain_core._api.deprecationr   langchain_core.callbacksr   r   langchain_core.language_modelsr   #langchain_core.language_models.llmsr   langchain_core.outputsr   r   pydanticr   r"   	Exceptionr%   r/   r   r'   r#   r!   <module>r      s    "      6 = 7 = 8) 8Y% Yx
 
3
rWm r
rr#   