
    "iM                        S r SSKJr  SSKJrJrJr  SSKJrJ	r	  SSK
JrJr  SSKJrJr  SSKJrJr  SSKJrJrJr  SS	KJrJr  SS
KJr  SSKJrJrJr   " S S\5      r g)zOllama large language models.    )annotations)AsyncIteratorIteratorMapping)AnyLiteral)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseLLMLangSmithParams)GenerationChunk	LLMResult)AsyncClientClientOptions)PrivateAttrmodel_validator)Self   )merge_auth_headersparse_url_with_authvalidate_modelc                  \  ^  \ 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#'    0 rS$\S%'    0 rS$\S&'    0 rS$\S''    \" SS(9rS)\S*'    \" SS(9rS+\S,'     S<       S=S- jjr \!S>S. j5       r" S<     S?U 4S/ jjjr#\$" S0S19S@S2 j5       r% S<       SAS3 jjr& S<       SBS4 jjr'   SC           SDS5 jjr(   SC           SES6 jjr)  SF         SGS7 jjr*  SF         SHS8 jjr+  SF         SIS9 jjr,  SF         SJS: jjr-S;r.U =r/$ )K	OllamaLLM   u  Ollama large language models.

Setup:
    Install `langchain-ollama` and install/run the Ollama server locally:

    ```bash
    pip install -U langchain-ollama
    # Visit https://ollama.com/download to download and install Ollama
    # (Linux users): start the server with `ollama serve`
    ```

    Download a model to use:

    ```bash
    ollama pull llama3.1
    ```

Key init args — generation params:
    model: str
        Name of the Ollama model to use (e.g. `'llama4'`).
    temperature: float | None
        Sampling temperature. Higher values make output more creative.
    num_predict: int | None
        Maximum number of tokens to predict.
    top_k: int | None
        Limits the next token selection to the K most probable tokens.
    top_p: float | None
        Nucleus sampling parameter. Higher values lead to more diverse text.
    mirostat: int | None
        Enable Mirostat sampling for controlling perplexity.
    seed: int | None
        Random number seed for generation reproducibility.

Key init args — client params:
    base_url:
        Base URL where Ollama server is hosted.
    keep_alive:
        How long the model stays loaded into memory.
    format:
        Specify the format of the output.

See full list of supported init args and their descriptions in the params section.

Instantiate:
    ```python
    from langchain_ollama import OllamaLLM

    model = OllamaLLM(
        model="llama3.1",
        temperature=0.7,
        num_predict=256,
        # base_url="http://localhost:11434",
        # other params...
    )
    ```

Invoke:
    ```python
    input_text = "The meaning of life is "
    response = model.invoke(input_text)
    print(response)
    ```
    ```txt
    "a philosophical question that has been contemplated by humans for
    centuries..."
    ```

Stream:
    ```python
    for chunk in model.stream(input_text):
        print(chunk, end="")
    ```
    ```txt
    a philosophical question that has been contemplated by humans for
    centuries...
    ```

Async:
    ```python
    response = await model.ainvoke(input_text)

    # stream:
    # async for chunk in model.astream(input_text):
    #     print(chunk, end="")
    ```
strmodelNzbool | None	reasoningFboolvalidate_model_on_initz
int | Nonemirostatzfloat | Nonemirostat_etamirostat_taunum_ctxnum_gpu
num_threadnum_predictrepeat_last_nrepeat_penaltytemperatureseedlist[str] | Nonestoptfs_ztop_ktop_p zLiteral['', 'json']formatzint | str | None
keep_alivez
str | Nonebase_urlzdict | Noneclient_kwargsasync_client_kwargssync_client_kwargs)defaultzClient | None_clientzAsyncClient | None_async_clientc                   U R                   b  Ub  Sn[        U5      eU R                   b  U R                   nUR                  SU R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  Uc  U R                   OUU R                  U R                  U R                   S.5      nUUR                  SS5      UR                  SU R"                  5      UR                  SU R$                  5      UR                  SU R&                  5      [)        S0 UD6UR                  S	U R*                  5      S
.UE$ )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/   r0   streamTr   r   r2   r3   )promptr=   r   thinkr2   r<   r3    )r-   
ValueErrorpopr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r.   r/   r0   r   r   r2   r   r3   )selfr>   r-   kwargsmsgoptions_dicts         W/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/langchain_ollama/llms.py_generate_paramsOllamaLLM._generate_params  s@    99 T%5FCS/!99 99Dzz MM $ 1 1 $ 1 1<<<<"oo#//!%!3!3"&"5"5#//		%)\		t
, jj40ZZ4ZZT^^<jj4;;7.. **\4??C	
 	
 		
    c                    g)zReturn type of LLM.z
ollama-llmr@   )rC   s    rG   	_llm_typeOllamaLLM._llm_type0  s     rJ   c                z   > [         TU ]  " SSU0UD6nUR                  SU R                  5      =n(       a  XCS'   U$ )z Get standard params for tracing.r-   r'   ls_max_tokensr@   )super_get_ls_paramsgetr'   )rC   r-   rD   params
max_tokens	__class__s        rG   rQ   OllamaLLM._get_ls_params5  sE     '<T<V<M43C3CDD:D&0?#rJ   after)modec                   U R                   =(       d    0 n[        U R                  5      u  p#[        X5        UnU R                  (       a  0 UEU R                  EnUnU R
                  (       a  0 UEU R
                  En[        SSU0UD6U l        [        SSU0UD6U l	        U R                  (       a   [        U R                  U R                  5        U $ )zSet clients to use for ollama.hostr@   )r5   r   r4   r   r7   r6   r   r9   r   r:   r    r   r   )rC   r5   cleaned_urlauth_headersr7   r6   s         rG   _set_clientsOllamaLLM._set_clients>  s     **0b$7$F!=7*""!R$6!R$:Q:Q!R+##"U%8"UD<T<T"UE;E2DE(QkQ=PQ&&4<<4rJ   c           	       #    U R                   (       aG  U R                   R                  " S0 U R                  " U4SU0UD6D6I S h  vN   S h  vN nU7v   M  g  N N
 g 7fNr-   r@   )r:   generaterH   )rC   r>   r-   rD   parts        rG   _acreate_generate_stream"OllamaLLM._acreate_generate_streamT  sm      $($6$6$?$? %''DTDVD%   d 
	   s6   AA"AA"A AA 
A"A  A"c           	   +     #    U R                   (       a8  U R                   R                  " S0 U R                  " U4SU0UD6D6 S h  vN   g g  N7fr`   )r9   ra   rH   )rC   r>   r-   rD   s       rG   _create_generate_stream!OllamaLLM._create_generate_stream`  sQ      <<||,, ''DTDVD   s   AAAAc                $  #    S nSnU R                   " X40 UD6  S h  vN n[        U[        5      (       a  M   UR                  S5      (       a  XxS   -  n[	        UR                  SS5      UR                  S5      SL a  [        U5      OS S9n	Uc  U	nOXi-  nU(       d  M  UR                  U	R                  U	US9I S h  vN   M   N N
 Uc  Sn
[        U
5      eU(       a*  UR                  (       a  XvR                  S'   U$ SU0Ul	        U$ 7f	Nr1   thinkingresponsedoneTtextgeneration_info)chunkverbosez$No data received from Ollama stream.)
rc   
isinstancer   rR   r   dicton_llm_new_tokenrn   rA   ro   rC   r>   r-   run_managerrq   rD   final_chunkthinking_contentstream_resprp   rE   s              rG   _astream_with_aggregation#OllamaLLM._astream_with_aggregationk  s,     !%!>!>v!Vv!V 	+k3//??:..$J(??$'$R8-8__V-D-L[)RV &"'K(K;%66

# ' 7   	 "W( 8CS/!**:J++J7  0:;K.L+sD   DCCCDA%D#DC
DC
DADc                   S nSnU R                   " X40 UD6 H  n[        U[        5      (       a  M  UR                  S5      (       a  XxS   -  n[	        UR                  SS5      UR                  S5      SL a  [        U5      OS S9n	Uc  U	nOXi-  nU(       d  M  UR                  U	R                  U	US9  M     Uc  Sn
[        U
5      eU(       a*  UR                  (       a  XvR                  S'   U$ SU0Ul	        U$ ri   )
rf   rr   r   rR   r   rs   rt   rn   rA   ro   ru   s              rG   _stream_with_aggregation"OllamaLLM._stream_with_aggregation  s    77OOKk3//??:..$J(??$'$R8-8__V-D-L[)RV &"'K(K;00

# ' 1  P( 8CS/!**:J++J7  0:;K.L+rJ   c                    / nU H6  nU R                   " U4UUU R                  S.UD6nUR                  U/5        M8     [        US9$ N)r-   rv   rq   )generations)r}   rq   appendr   rC   promptsr-   rv   rD   r   r>   rw   s           rG   	_generateOllamaLLM._generate  sa     F77'	
 K }-  [11rJ   c                   #    / nU H>  nU R                   " U4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   )rz   rq   r   r   r   s           rG   
_agenerateOllamaLLM._agenerate  sn      F $ > >!'	!
 ! K }-  [11s   ,AA$Ac              +    #    UR                  SU R                  5      nU R                  " X40 UD6 H  n[        U[        5      (       a  M  0 nU(       a  UR                  S5      =n(       a  XS'   [        UR                  SS5      SU R                  0UEUR                  S5      SL a  [        U5      O0 ES	9n	U(       a$  UR                  U	R                  U R                  S
9  U	v   M     g 7fNr   rj   reasoning_contentrk   r1   finish_reasonrl   Trm   )rq   )rR   r   rf   rr   r   r   r-   rs   rt   rn   rq   
rC   r>   r-   rv   rD   r   ry   additional_kwargsrx   rp   s
             rG   _streamOllamaLLM._stream  s      JJ{DNN;	77OOKk3//$&!kooj6Q"Q"2"Q=M&9:'%//*b9'%+% 2=1HD1PD-VX	%	 00

 $ 1  + Ps   AC.B"C.c                 #    UR                  SU R                  5      nU R                  " X40 UD6  S h  vN n[        U[        5      (       a  M   0 nU(       a  UR                  S5      =n(       a  XS'   [        UR                  SS5      SU R                  0UEUR                  S5      SL a  [        U5      O0 ES	9n	U(       a,  UR                  U	R                  U R                  S
9I S h  vN   U	7v   M   N N
 g 7fr   )rR   r   rc   rr   r   r   r-   rs   rt   rn   rq   r   s
             rG   _astreamOllamaLLM._astream  s      JJ{DNN;	!%!>!>v!Vv!V 	+k3//$&!kooj6Q"Q"2"Q=M&9:'%//*b9'%+% 2=1HD1PD-VX	%	 %66

 $ 7    +	"# "Ws>   0D C>C:C>D BD .C</D :C><D >D )r:   r9   )N)r>   r   r-   r,   rD   r   returnzdict[str, Any])r   r   )r-   r,   rD   r   r   r   )r   r   )r>   r   r-   r,   rD   r   r   z&AsyncIterator[Mapping[str, Any] | str])r>   r   r-   r,   rD   r   r   z!Iterator[Mapping[str, Any] | str])NNF)r>   r   r-   r,   rv   $AsyncCallbackManagerForLLMRun | Nonerq   r   rD   r   r   r   )r>   r   r-   r,   rv   CallbackManagerForLLMRun | Nonerq   r   rD   r   r   r   )NN)
r   	list[str]r-   r,   rv   r   rD   r   r   r   )
r   r   r-   r,   rv   r   rD   r   r   r   )
r>   r   r-   r,   rv   r   rD   r   r   zIterator[GenerationChunk])
r>   r   r-   r,   rv   r   rD   r   r   zAsyncIterator[GenerationChunk])0__name__
__module____qualname____firstlineno____doc____annotations__r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r-   r.   r/   r0   r2   r3   r4   r5   r6   r7   r   r9   r:   rH   propertyrL   rQ   r   r]   rc   rf   rz   r}   r   r   r   r   __static_attributes____classcell__)rU   s   @rG   r   r      s6   Un J!I{!A $)D(
  HjJ "&L,%7
 "&L,%' GZ% GZ- "J
!N
 #K"I !%M:$E $(NL'. !%K$? D* "D
!&E<O E:2 E<E #%F$>#'J ':Hj* "$M;# (*) ')( )6G]60(3D(AM%A6
 "&*
*
 *
 	*

 
*
X  
 (,$7:	  '" #0 "&

 
 	

 
0
 "&		 	 		
 
+	 "&<@(( ( :	(
 ( ( 
(Z "&7;(( ( 5	(
 ( ( 
(Z "&7;	22 2 5	2
 2 
2, "&<@	22 2 :	2
 2 
2, "&7;	  5	
  
#D "&<@	  :	
  
( rJ   r   N)!r   
__future__r   collections.abcr   r   r   typingr   r   langchain_core.callbacksr	   r
   langchain_core.language_modelsr   r   langchain_core.outputsr   r   ollamar   r   r   pydanticr   r   typing_extensionsr   _utilsr   r   r   r   r@   rJ   rG   <module>r      sB    # " < <  D = / / 1 " K KL LrJ   