
    Ng1                         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dS )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                       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<   	 	 d0dedeee                  de$de%ee$f         fdZ&e'defd            Z(	 d0deee                  de$de)f fd Z* e+d!"          de,fd#            Z-	 d0dedeee                  de$de.ee/ee$f         ef                  fd$Z0	 d0dedeee                  de$de1ee/ee$f         ef                  fd%Z2	 	 	 d1dedeee                  d'ee3         d(e4de$de5fd)Z6	 	 	 d1dedeee                  d'ee7         d(e4de$de5fd*Z8	 	 d2d+ee         deee                  d'ee7         de$de9f
d,Z:	 	 d2d+ee         deee                  d'ee3         de$de9f
d-Z;	 	 d2dedeee                  d'ee7         de$de1e5         f
d.Z<	 	 d2dedeee                  d'ee3         de$de.e5         f
d/Z= xZ>S )3	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         }|                    d| j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        || j         n|| j        | j        | j        d          }||                    dd          |                    d| j                  |                    d| j                  t%          d
i ||                    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         Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_ollama/llms.py_generate_paramszOllamaLLM._generate_params   s     9 T%5QRRRY"9Dzz M $ 1 $ 1<<"o#/!%!3"&"5#/%)\		t 
 
* jj400ZZ44jj4;77.... **\4?CC
 
 
     c                     dS )zReturn type of LLM.z
ollama-llmr8   )r;   s    r>   	_llm_typezOllamaLLM._llm_type   s	     |r@   c                      t                      j        dd|i|}|                    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   sS     ('<<T<V<<M43CDDD: 	1&0F?#r@   after)modec                 x    | j         p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   sO     *0bBB4=BMBB(MMdmM}MMr@   c           	     r   K    | j         j        di  | j        |fd|i| d {V 2 3 d {V }|W V  6 d S Nr%   r8   )r1   generater?   )r;   r2   r%   r3   parts        r>   _acreate_generate_streamz"OllamaLLM._acreate_generate_stream   s       !< 2 ; !
 !
#d#F@@@@@!
 !
 
 
 
 
 
 
 	 	 	 	 	 	 	$ JJJJJ
 
 
s   6c           	   +   V   K    | j         j        di  | j        |fd|i|E d {V  d S rP   )r0   rQ   r?   )r;   r2   r%   r3   s       r>   _create_generate_streamz!OllamaLLM._create_generate_stream   sp       )4<( 
 
#d#F@@@@@
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r@   Frun_managerverbosec                 n  K   d } | j         ||fi |2 3 d {V }t          |t                    srt          d|v r|d         nd|                    d          du rt          |          nd           }||}n||z  }|r#|                    |j        ||           d {V  6 |t          d          |S 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!V!Vv!V!V 	 	 	 	 	 	 	+k3// '4>+4M4MZ00SU-8__V-D-D-L-L[)))RV   &"'KK5(K %66
# ' 7          "W$ CDDDs   B#c                 R   d } | j         ||fi |D ]}t          |t                    slt          d|v r|d         nd|                    d          du rt          |          nd           }||}n||z  }|r|                    |j        ||           |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OOOO 	 	Kk3// '4>+4M4MZ00SU-8__V-D-D-L-L[)))RV   &"'KK5(K 00
# ' 1   
 CDDDr@   promptsc                     g }|D ]/} | j         |f||| j        d|}|                    |g           0t          |          S N)r%   rV   rW   )generations)ri   rW   appendr   r;   rj   r%   rV   r3   rm   r2   re   s           r>   	_generatezOllamaLLM._generate  sz      	. 	.F7$7'	 
  K }----[1111r@   c                    K   g }|D ]5} | j         |f||| j        d| d {V }|                    |g           6t          |          S rl   )rg   rW   rn   r   ro   s           r>   
_ageneratezOllamaLLM._agenerate*  s        	. 	.F > >!'	! !
 ! !      K }----[1111r@   c              +   <  K    | j         ||fi |D ]}t          |t                    srt          |                    dd          |                    d          du rt          |          nd           }|r!|                    |j        | j                   |V  d S 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OOOO 	 	Kk3// '%//*b99-8__V-D-D-L-L[)))RV    00
 $ 1    	 	r@   c                V  K    | j         ||fi |2 3 d {V }t          |t                    syt          |                    dd          |                    d          du rt          |          nd           }|r'|                    |j        | j                   d {V  |W V  6 d S rt   )	rS   r`   ra   r   rG   rb   rc   r]   rW   ru   s          r>   _astreamzOllamaLLM._astreamS  s      "?!>vt!V!Vv!V!V 	 	 	 	 	 	 	+k3// '%//*b99-8__V-D-D-L-L[)))RV    %66
 $ 7           "W!V!Vs   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        	 	 JJJ"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00:"Hhsm"""-$&M8D>&&& "k$///GV/// "-T!:!:!:M;::: %)) )) tCy!) 	)
 
c3h) ) ) )V 3    X
 +/ T#Y':=	      _'"""d    #" %)	 		 tCy!	 		
 
uWS#X.34	5	 	 	 	 %)
 

 tCy!
 	

 
%S)3./	0
 
 
 
 %)?C  tCy! ;<	
   
   F %):>  tCy! 67	
   
   F %):>	2 2c2 tCy!2 67	2
 2 
2 2 2 2, %)?C	2 2c2 tCy!2 ;<	2
 2 
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      sZ   # #
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        D C C C C C C C = = = = = = = = / / / / / / / / / / 1 1 1 1 1 1 1 1 " " " " " "M M M M M M M M M Mr@   