
    /Uim6                         d Z ddlmZmZmZ ddl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.    )AsyncIteratorIteratorMapping)AnyLiteral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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<   	 i Z ee   ed<   	 i Z!ee   ed<   	  e"d      Z#e$ed<   	  e"d      Z%e&ed<   	 	 d2dedeee      de'd eee'f   fd!Z(e)d efd"       Z*	 d2deee      de'd e+f fd#Z, e-d$%      d e.fd&       Z/	 d2dedeee      de'd e0ee1ee'f   ef      fd'Z2	 d2dedeee      de'd e3ee1ee'f   ef      fd(Z4	 	 	 d3dedeee      d)ee5   d*e6de'd e7fd+Z8	 	 	 d3dedeee      d)ee9   d*e6de'd e7fd,Z:	 	 d4d-ee   deee      d)ee9   de'd e;f
d.Z<	 	 d4d-ee   deee      d)ee5   de'd e;f
d/Z=	 	 d4dedeee      d)ee9   de'd e3e7   f
d0Z>	 	 d4dedeee      d)ee5   de'd e0e7   f
d1Z? xZ@S )5	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seedstoptfs_ztop_ktop_p )r(   jsonformat
keep_alivebase_urlclient_kwargsasync_client_kwargssync_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                  || 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&   r'   streamTr   r*   r+   )r3   r8   r   r*   r7   r+    )r$   
ValueErrorpopr   r   r   r   r   r   r   r    r!   r"   r#   r%   r&   r'   r   r*   r   r+   )selfr3   r$   r4   options_dictparamss         q/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/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-llmr9   )r<   s    r?   	_llm_typezOllamaLLM._llm_type   s     rA   c                 p    t        |   dd|i|}|j                  d| j                        x}r||d<   |S )z Get standard params for tracing.r$   r   ls_max_tokensr9   )super_get_ls_paramsgetr   )r<   r$   r4   r>   
max_tokens	__class__s        r?   rG   zOllamaLLM._get_ls_params   sG     '<T<V<M43C3CDD:D&0F?#rA   after)modec                    | j                   xs i }|}| j                  ri || j                  }|}| j                  ri || j                  }t        dd| j                  i|| _        t        dd| j                  i|| _        | S )zSet clients to use for ollama.hostr9   )r-   r/   r.   r   r,   r1   r   r2   )r<   r-   r/   r.   s       r?   _set_clientszOllamaLLM._set_clients   s     **0b*""!R$6!R$:Q:Q!R+##"U%8"UD<T<T"UG4==G4FG(SdmmS?RSrA   c           	        K    | j                   j                  di  | j                  |fd|i| d {   2 3 d {   }| 7 7 6 y wNr$   r9   )r2   generater@   )r<   r3   r$   r4   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rQ   )r1   rR   r@   )r<   r3   r$   r4   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)chunkrX   z$No data received from Ollama stream.)	rT   
isinstancestrr   rH   dicton_llm_new_tokenr^   r:   	r<   r3   r$   rW   rX   r4   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 rZ   )	rV   ra   rb   r   rH   rc   rd   r^   r:   re   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rA   promptsc                     g }|D ]5  } | j                   |f||| j                  d|}|j                  |g       7 t        |      S N)r$   rW   rX   )generations)rj   rX   appendr   r<   rk   r$   rW   r4   rn   r3   rf   s           r?   	_generatezOllamaLLM._generate0  sh      	.F7$77'	
 K }-	. [11rA   c                    K   g }|D ]=  } | j                   |f||| j                  d| d {   }|j                  |g       ? t        |      S 7 $wrm   )rh   rX   ro   r   rp   s           r?   
_ageneratezOllamaLLM._agenerateC  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Nr[   r(   r\   Tr]   )rX   )	rV   ra   rb   r   rH   rc   rd   r^   rX   r<   r3   r$   rW   r4   rg   r`   s          r?   _streamzOllamaLLM._streamV  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ru   )	rT   ra   rb   r   rH   rc   rd   r^   rX   rv   s          r?   _astreamzOllamaLLM._astreaml  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)A__name__
__module____qualname____doc__rb   __annotations__r   r   intr   floatr   r   r   r   r   r    r!   r"   r#   r$   listr%   r&   r'   r*   r   r+   r	   r,   r-   rc   r.   r/   r   r1   r   r2   r   r   r@   propertyrC   r   rG   r   r   rO   r   r   rT   r   rV   r
   boolr   rh   r   rj   r   rq   rs   rw   ry   __classcell__)rJ   s   @r?   r   r      s;   	 J"Hhsm"B %)L(5/(5
 %)L(5/(% "GXc]!$ "GXc]!+ !%J$N
 "&K#%C $(M8C='= '+NHUO*, $(K%'= D(3- !%D(49
$&!E8E?!M  E8C=0 "E8E?!C #%FGJ$:,0JsCx)0:"Hhsm"-$&M8D>& +-$,
 *,+
 "$/GV/ "-T!:M;: %)** tCy!* 	*
 
c3h*X 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! ;<	
  
	'rA   r   N)r}   collections.abcr   r   r   typingr   r   r   r	   langchain_core.callbacksr
   r   langchain_core.language_modelsr   r   langchain_core.outputsr   r   ollamar   r   r   pydanticr   r   typing_extensionsr   r   r9   rA   r?   <module>r      s@    # < <  D = / / 1 "j jrA   