
    7|h1                         d 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 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 ddlmZ  G d	 d
e      Zy)zOllama large language models.    )	AnyAsyncIteratorDictIteratorListLiteralMappingOptionalUnion)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseLLMLangSmithParams)GenerationChunk	LLMResult)AsyncClientClientOptions)PrivateAttrmodel_validator)Selfc                   r    e Zd ZU dZeed<   	 dZee   ed<   	 dZ	ee
   ed<   	 dZee
   ed<   	 dZee   ed<   	 dZee   ed<   	 dZee   ed	<   	 dZee   ed
<   	 dZee   ed<   	 dZee
   ed<   	 dZee
   ed<   	 dZeee      ed<   	 dZee
   ed<   	 dZee   ed<   	 dZee
   ed<   	 dZed   ed<   	 dZeeeef      ed<   	 dZee   ed<   	 i Zee   ed<   	  ed      Z e!ed<   	  ed      Z"e#ed<   	 	 d/dedeee      de$de%ee$f   fdZ&e'defd       Z(	 d/deee      de$de)f fd Z* e+d!"      de,fd#       Z-	 d/dedeee      de$de.ee/ee$f   ef      fd$Z0	 d/dedeee      de$de1ee/ee$f   ef      fd%Z2	 	 	 d0dedeee      d&ee3   d'e4de$de5fd(Z6	 	 	 d0dedeee      d&ee7   d'e4de$de5fd)Z8	 	 d1d*ee   deee      d&ee7   de$de9f
d+Z:	 	 d1d*ee   deee      d&ee3   de$de9f
d,Z;	 	 d1dedeee      d&ee7   de$de1e5   f
d-Z<	 	 d1dedeee      d&ee3   de$de.e5   f
d.Z= xZ>S )2	OllamaLLMa   OllamaLLM large language models.

    Example:
        .. code-block:: python

            from langchain_ollama import OllamaLLM

            model = OllamaLLM(model="llama3")
            model.invoke("Come up with 10 names for a song about parrots")
    modelNmirostatmirostat_etamirostat_taunum_ctxnum_gpu
num_threadnum_predictrepeat_last_nrepeat_penaltytemperaturestoptfs_ztop_ktop_p )r)   jsonformat
keep_alivebase_urlclient_kwargs)default_client_async_clientpromptkwargsreturnc                    | j                   |t        d      | j                   | j                   }|j                  d| j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  || j                   n|| j                  | j                  | j                  d      }||j                  dd      |j                  d| j                         |j                  d| j"                        t%        d
i ||j                  d| j&                        d	|}|S )Nz2`stop` found in both the input and default params.options)r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   streamTr   r+   r,   )r2   r7   r   r+   r6   r,    )r%   
ValueErrorpopr   r   r   r   r   r    r!   r"   r#   r$   r&   r'   r(   r   r+   r   r,   )selfr2   r%   r3   options_dictparamss         T/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_ollama/llms.py_generate_paramszOllamaLLM._generate_params   s(    99 T%5QRRYY"99Dzz MM $ 1 1 $ 1 1<<<<"oo#//!%!3!3"&"5"5#//%)\		t
* jj40ZZ4jj4;;7.. **\4??C
 
     c                      y)zReturn type of LLM.z
ollama-llmr8   )r;   s    r>   	_llm_typezOllamaLLM._llm_type   s     r@   c                 p    t        |   dd|i|}|j                  d| j                        x}r||d<   |S )z Get standard params for tracing.r%   r!   ls_max_tokensr8   )super_get_ls_paramsgetr!   )r;   r%   r3   r=   
max_tokens	__class__s        r>   rF   zOllamaLLM._get_ls_params   sG     '<T<V<M43C3CDD:D&0F?#r@   after)modec                     | j                   xs i }t        dd| j                  i|| _        t	        dd| j                  i|| _        | S )zSet clients to use for ollama.hostr8   )r.   r   r-   r0   r   r1   )r;   r.   s     r>   _set_clientszOllamaLLM._set_clients   sJ     **0bB4==BMB(MdmmM}Mr@   c           	        K    | j                   j                  di  | j                  |fd|i| d {   2 3 d {   }| 7 7 6 y wNr%   r8   )r1   generater?   )r;   r2   r%   r3   parts        r>   _acreate_generate_streamz"OllamaLLM._acreate_generate_stream   sf      !< 2 2 ; ; !
#d##F@@@!
 
 	 	$ J
 	 
s0   3AA	AAAAAAAc           	   +   ~   K    | j                   j                  di  | j                  |fd|i|E d {    y 7 wrP   )r0   rQ   r?   )r;   r2   r%   r3   s       r>   _create_generate_streamz!OllamaLLM._create_generate_stream   sE      )4<<(( 
#d##F@@@
 	
 	
s   3=;=run_managerverbosec                 b  K   d } | j                   ||fi |2 3 d {   }t        |t              rt        d|v r|d   nd|j	                  d      du rt        |      nd       }||}n||z  }|s[|j                  |j                  ||       d {    7 }7 6 |t        d      |S wNresponser)   doneTtextgeneration_info)chunkrW   z$No data received from Ollama stream.)	rS   
isinstancestrr   rG   dicton_llm_new_tokenr]   r9   	r;   r2   r%   rV   rW   r3   final_chunkstream_respr_   s	            r>   _astream_with_aggregationz#OllamaLLM._astream_with_aggregation   s      !>!>!>vt!Vv!V 	 	+k3/'4>+4MZ0SU-8__V-D-L[)RV &"'K5(K%66

# ' 7   	 "W$ CDDsC   B/BBBB/A B/4!B/BB/BB/B/c                 6   d } | j                   ||fi |D ]r  }t        |t              rt        d|v r|d   nd|j	                  d      du rt        |      nd       }||}n||z  }|sU|j                  |j                  ||       t |t        d      |S rY   )	rU   r`   ra   r   rG   rb   rc   r]   r9   rd   s	            r>   _stream_with_aggregationz"OllamaLLM._stream_with_aggregation   s     7477OO 	Kk3/'4>+4MZ0SU-8__V-D-L[)RV &"'K5(K00

# ' 1 	$ CDDr@   promptsc                     g }|D ]5  } | j                   |f||| j                  d|}|j                  |g       7 t        |      S N)r%   rV   rW   )generations)ri   rW   appendr   r;   rj   r%   rV   r3   rm   r2   re   s           r>   	_generatezOllamaLLM._generate  sh      	.F7$77'	
 K }-	. [11r@   c                    K   g }|D ]=  } | j                   |f||| j                  d| d {   }|j                  |g       ? t        |      S 7 $wrl   )rg   rW   rn   r   ro   s           r>   
_ageneratezOllamaLLM._agenerate*  sv       	.F > > >!'	!
 ! K }-	. [11s   ,AA%Ac              +   0  K    | j                   ||fi |D ]{  }t        |t              rt        |j	                  dd      |j	                  d      du rt        |      nd       }|r'|j                  |j                  | j                         | } y wNrZ   r)   r[   Tr\   )rW   )	rU   r`   ra   r   rG   rb   rc   r]   rW   r;   r2   r%   rV   r3   rf   r_   s          r>   _streamzOllamaLLM._stream=  s      8477OO 	Kk3/'%//*b9-8__V-D-L[)RV 00

 $ 1  	s   (BA+Bc                V  K    | j                   ||fi |2 3 d {   }t        |t              rt        |j	                  dd      |j	                  d      du rt        |      nd       }|r/|j                  |j                  | j                         d {    | 7 7 6 y wrt   )	rS   r`   ra   r   rG   rb   rc   r]   rW   ru   s          r>   _astreamzOllamaLLM._astreamS  s      "?!>!>vt!Vv!V 	 	+k3/'%//*b9-8__V-D-L[)RV %66

 $ 7    	 "Ws=   B)B'B#B'B)A'B)B%
B)#B'%B)'B))N)NNF)NN)?__name__
__module____qualname____doc__ra   __annotations__r   r
   intr   floatr   r   r   r    r!   r"   r#   r$   r%   r   r&   r'   r(   r+   r   r,   r   r-   r.   rb   r   r0   r   r1   r   r   r   r?   propertyrB   r   rF   r   r   rN   r   r	   rS   r   rU   r   boolr   rg   r   ri   r   rp   rr   rv   rx   __classcell__)rI   s   @r>   r   r      s   	 J"Hhsm"B %)L(5/(5
 %)L(5/(% "GXc]!$ "GXc]!+ !%J$N
 "&K#%C $(M8C='= '+NHUO*, $(K%'= !%D(49
$&!E8E?!M  E8C=0 "E8E?!C #%FGJ$:,0JsCx)0:"Hhsm"-$&M8D>& "$/GV/ "-T!:M;: %))) tCy!) 	)
 
c3h)V 3  
 +/T#Y':=	 '"d  # %)		 tCy!	 		
 
uWS#X.34	5	 %)

 tCy!
 	

 
%S)3./	0
 %)?C tCy! ;<	
   
F %):> tCy! 67	
   
F %):>	2c2 tCy!2 67	2
 2 
2, %)?C	2c2 tCy!2 ;<	2
 2 
2, %):>	 tCy! 67	
  
/	"2 %)?C	 tCy! ;<	
  
	'r@   r   N)r|   typingr   r   r   r   r   r   r	   r
   r   langchain_core.callbacksr   r   langchain_core.language_modelsr   r   langchain_core.outputsr   r   ollamar   r   r   pydanticr   r   typing_extensionsr   r   r8   r@   r>   <module>r      s?    #
 
 
 D = / / 1 "M Mr@   