
    Ng                     
   d dl Z d dlZd dlZd dlZd dlZd dlZd dl mZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZmZmZmZmZ d dlZd dlmZ ej        dk     r	d dlmZmZ nd dlmZmZ d d	lmZ 	  ej         d
          Z!n# ej"        $ r dZ!Y nw xY wd dl#Z#d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=  ed          Z> G d d          Z? G d de?          Z@ G d de?          ZAdeeeeeBef         e2f                           dee2         fdZCddeeeeeBef         e=ef                           dee=         fdZDdeeeBef                  dee	df         fdZEdeeB         deBfdZFdS )    N)PathLike)Path)sha256)
AnyCallableLiteralMappingOptionalSequenceTypeTypeVarUnionoverload)convert_function_to_tool)   	   )IteratorAsyncIterator)metadataollamaz0.0.0)ChatRequestChatResponseCreateRequestCopyRequestDeleteRequestEmbedRequestEmbedResponseEmbeddingsRequestEmbeddingsResponseGenerateRequestGenerateResponseImageListResponseMessageOptionsProcessResponseProgressResponsePullRequestPushRequestRequestErrorResponseErrorShowRequestShowResponseStatusResponseToolTc                   \    e Zd Z	 	 	 	 d	dee         dededeeeef                  ddf
dZdS )

BaseClientNThostfollow_redirectstimeoutheadersreturnc                 d    |dt          |pt          j        d                    ||d i |pi dddt           dt	          j                     dt	          j                                                     dt	          j                     d	                                D             d	|| _
        d
S )z
    Creates a httpx client. Default parameters are the same as those defined in httpx
    except for the following:
    - `follow_redirects`: True
    - `timeout`: None
    `kwargs` are passed to the httpx client.
    OLLAMA_HOSTc                 >    i | ]\  }}|                                 |S  )lower.0kvs      J/var/www/html/ai-engine/env/lib/python3.11/site-packages/ollama/_client.py
<dictcomp>z'BaseClient.__init__.<locals>.<dictcomp>b   s6       Aq 	
		1      zapplication/jsonzollama-python/z ( z	) Python/)zContent-TypeAcceptz
User-Agent)base_urlr4   r5   r6   Nr;   )_parse_hostosgetenv__version__platformmachinesystemr<   python_versionitems_client)selfclientr3   r4   r5   r6   kwargss          rA   __init__zBaseClient.__init__L   s
   " 6 4;29]#;#;<<' 
]
,& M  M  M8H8J8J  M  MX_M^M^MdMdMfMf  M  Mqy  rI  rK  rK  M  M	
 
 

 %''    	 DLLLrC   )NTNN)	__name__
__module____qualname__r
   strboolr   r	   rT   r;   rC   rA   r2   r2   K   s         !+/    3-  	 
   gc3h'(             rC   r2   c                       e Zd ZdCdee         ddf fdZd Zedddee	         d	e
d         de	fd
            Zedddee	         d	e
d         dee	         fd            Zedddee	         d	edee	ee	         f         fd            Zdddee	         d	edee	ee	         f         fdZe	 	 	 dDdddddddddd	dedededededeee                  d	e
d         dedee
d                  deeeeef                           deeeeef         ef                  deeeef                  defd            Ze	 	 	 dDdddddddddd	dedededededeee                  d	e
d         dedee
d                  deeeeef                           deeeeef         ef                  deeeef                  dee         fd            Z	 	 	 dEdddddddddd	dedee         dee         dee         dee         deee                  d	edee         dee
d                  deeeeef                           deeeeef         ef                  deeeef                  deeee         f         fdZe	 	 dFdddddd ded!eeeeeef         ef                           d"eeeeeef         eef                           d	e
d         dee
d                  deeeeef         ef                  deeeef                  defd#            Ze	 	 dFdddddd ded!eeeeeef         ef                           d"eeeeeef         eef                           d	e
d         dee
d                  deeeeef         ef                  deeeef                  dee         fd$            Z	 	 dFdddddd ded!eeeeeef         ef                           d"eeeeeef         eef                           d	edee
d                  deeeeef         ef                  deeeef                  deeee         f         fd%Z	 	 	 	 	 dGded&eeee         f         d'ee         deeeeef         ef                  deeeef                  defd(Z	 	 	 	 dHdedee         deeeeef         ef                  deeeef                  def
d)Z eddd*ded+ed	e
d         de!fd,            Z"eddd*ded+ed	e
d         dee!         fd-            Z"ddd*ded+ed	edee!ee!         f         fd.Z"eddd*ded+ed	e
d         de!fd/            Z#eddd*ded+ed	e
d         dee!         fd0            Z#ddd*ded+ed	edee!ee!         f         fd1Z#e	 	 dIddd2ded3eeee$f                  d4ee         d5ee         d	e
d         de!fd6            Z%e	 	 dIddd2ded3eeee$f                  d4ee         d5ee         d	e
d         dee!         fd7            Z%	 	 dIddd2ded3eeee$f                  d4ee         d5ee         d	edee!ee!         f         fd8Z%dCd4ed9ee&         defd:Z'd3eee&f         defd;Z(de)fd<Z*dede+fd=Z,d>ed?ede+fd@Z-dede.fdAZ/de0fdBZ1 xZ2S )JClientNr3   r7   c                 R     t                      j        t          j        |fi | d S N)superrT   httpxr[   rQ   r3   rS   	__class__s      rA   rT   zClient.__init__p   s,    EGGU\422622222rC   c                      | j         j        |i |}	 |                                 n<# t          j        $ r*}t          |j        j        |j        j                  d d }~ww xY w|S r]   	rP   requestraise_for_statusr_   HTTPStatusErrorr+   responsetextstatus_coderQ   argsrS   res        rA   _request_rawzClient._request_raws   s|    d-f--AM  M M M!*/1:+ABBLMHs   ) A"%AA"Fstreamclsrp   c                    d S r]   r;   rQ   rq   rp   rk   rS   s        rA   _requestzClient._request{   s	     #rC   Tc                    d S r]   r;   rs   s        rA   rt   zClient._request   s	     CrC   c                    d S r]   r;   rs   s        rA   rt   zClient._request   s	     "crC   c          	      |     |r fd} |            S  di   j         i                                 S )Nc               3     K    j         j        i 5 } 	 |                                  nU# t          j        $ rC}|j                                         t          |j        j        |j        j	                  d d }~ww xY w| 
                                D ]F}t          j        |          }|                    d          x}rt          |           di |V  G	 d d d            d S # 1 swxY w Y   d S Nerrorr;   )rP   rp   re   r_   rf   rg   readr+   rh   ri   
iter_linesjsonloadsget	rl   rm   lineparterrrk   rq   rS   rQ   s	        rA   innerzClient._request.<locals>.inner   s_      T\ $1&11 	QS    & S S SJOO
1GHHdRS llnn  d:d##Dhhw'''s '!#&&&#++++		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s1   C+-C+A?>A::A??AC++C/2C/r;   rn   r}   rQ   rq   rp   rk   rS   r   s   `` `` rA   rt   zClient._request   sz              UWWn3;;""D3F3388::;;;rC    	rM   templatecontextrp   rawformatimagesoptions
keep_alivemodelpromptsuffixrM   r   r   r   r   r   r}   r   r   r   c       	             d S r]   r;   rQ   r   r   r   rM   r   r   rp   r   r   r   r   r   s                rA   generatezClient.generate   s	      rC   c       	             d S r]   r;   r   s                rA   r   zClient.generate   s	      $'3rC   c       	             |                      t          ddt          |||||||||	|
rd |
D             nd||                              d          |          S )	a  
    Create a response using the requested model.

    Raises `RequestError` if a model is not provided.

    Raises `ResponseError` if the request could not be fulfilled.

    Returns `GenerateResponse` if `stream` is `False`, otherwise returns a `GenerateResponse` generator.
    POST/api/generatec                 .    g | ]}t          |           S )valuer"   r>   images     rA   
<listcomp>z#Client.generate.<locals>.<listcomp>   #    777uE"""777rC   Nr   r   r   rM   r   r   rp   r   r   r   r   r   Texclude_noner}   rp   rt   r!   r    
model_dumpr   s                rA   r   zClient.generate   s    4 ==;AK777777t   	

%%%    rC   toolsrp   r   r   r   messagesr   c                    d S r]   r;   rQ   r   r   r   rp   r   r   r   s           rA   chatzClient.chat  s	     SrC   c                    d S r]   r;   r   s           rA   r   zClient.chat  s	      #srC   c                    |                      t          ddt          |d t          |          D             d t	          |          D             ||||                              d          |          S )	a  
    Create a chat response using the requested model.

    Args:
      tools:
        A JSON schema as a dict, an Ollama Tool or a Python Function.
        Python functions need to follow Google style docstrings to be converted to an Ollama Tool.
        For more information, see: https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings
      stream: Whether to stream the response.
      format: The format of the response.

    Example:
      def add_two_numbers(a: int, b: int) -> int:
        '''
        Add two numbers together.

        Args:
          a: First number to add
          b: Second number to add

        Returns:
          int: The sum of a and b
        '''
        return a + b

      client.chat(model='llama3.2', tools=[add_two_numbers], messages=[...])

    Raises `RequestError` if a model is not provided.

    Raises `ResponseError` if the request could not be fulfilled.

    Returns `ChatResponse` if `stream` is `False`, otherwise returns a `ChatResponse` generator.
    r   	/api/chatc                     g | ]}|S r;   r;   r>   messages     rA   r   zClient.chat.<locals>.<listcomp>Q      BBBg'BBBrC   c                     g | ]}|S r;   r;   r>   tools     rA   r   zClient.chat.<locals>.<listcomp>R      333t333rC   r   r   r   rp   r   r   r   Tr   r   rt   r   r   _copy_messages_copy_toolsr   r   s           rA   r   zClient.chat  s    Z ==BB)A)ABBB33E 2 2333   	

%%    rC   inputtruncatec                     |                      t          ddt          |||||                              d                    S Nr   z
/api/embed)r   r   r   r   r   Tr   r}   rt   r   r   r   rQ   r   r   r   r   r   s         rA   embedzClient.embed[  sZ     ==   	

%%    rC   c                     |                      t          ddt          ||||                              d                    S ))
    Deprecated in favor of `embed`.
    r   /api/embeddingsr   r   r   r   Tr   r   rt   r   r   r   rQ   r   r   r   r   s        rA   
embeddingszClient.embeddingsp  sW     ==	  
 	

%%  
 
 
rC   insecurerp   r   c                    d S r]   r;   rQ   r   r   rp   s       rA   pullzClient.pull  	     rC   c                    d S r]   r;   r   s       rA   r   zClient.pull  	     $'3rC   c          
          |                      t          ddt          |||                              d          |          S )
    Raises `ResponseError` if the request could not be fulfilled.

    Returns `ProgressResponse` if `stream` is `False`, otherwise returns a `ProgressResponse` generator.
    r   	/api/pullr   r   rp   Tr   r   rt   r'   r(   r   r   s       rA   r   zClient.pull  W     ==   	

%%  
 
 
rC   c                    d S r]   r;   r   s       rA   pushzClient.push  r   rC   c                    d S r]   r;   r   s       rA   r   zClient.push  r   rC   c          
          |                      t          ddt          |||                              d          |          S )r   r   	/api/pushr   Tr   r   rt   r'   r)   r   r   s       rA   r   zClient.push  r   rC   quantizerp   path	modelfiler   c                    d S r]   r;   rQ   r   r   r   r   rp   s         rA   createzClient.create  s	     rC   c                    d S r]   r;   r   s         rA   r   zClient.create  s	     $'3rC   c                   t          |          x}rC|                                r/|                     |                                |j                  }n'|r|                     |          }nt          d          |                     t          ddt          ||||          	                    d          |          S )	r   base%must provide either path or modelfiler   /api/creater   r   rp   r   Tr   r   
_as_pathexists_parse_modelfile	read_textparentr*   rt   r'   r   r   rQ   r   r   r   r   rp   realpaths          rA   r   zClient.create  s     TNN" B(9(9 B''(:(:(<(<8?'SSii	 B''	22ii@AAA==	  
 	

%%    rC   r   c                 L   |t          j                    n|}t          j                    }t          j        |          D ]}|                    d          \  }}}|                                dvrt          |d|           Dt          |                                                                          }|	                                r|n||z  }|
                                rd|                     |           d}t          ||d|           |                                S NrD   )FROMADAPTERr   )endfile@
r   cwdioStringIO	partitionupperprintstrip
expanduseris_absoluter   _create_blobgetvalue	rQ   r   r   outr   command_rk   r   s	            rA   r   zClient._parse_modelfile  s   48:::4D
+--CI&& 
- 
-,,gq$	 3	3	3d%%%%$**,,**,,d%%''8TTTD[d	 /.4$$T**...GTr,,,,,<<>>rC   c                    t                      }t          |d          5 }	 |                    d          }|sn|                    |           .	 d d d            n# 1 swxY w Y   d|                                 }t          |d          5 }|                     dd| |           d d d            n# 1 swxY w Y   |S )NrbT   sha256:r   z/api/blobs/sha256:contentr   openr{   update	hexdigestrn   )rQ   r   	sha256sumrl   chunkdigests         rA   r	  zClient._create_blob$  sd   I	dD		  Q y!! 	
	  	                              /y**,,..F	dD		 JQ
 =V = =qIIIJ J J J J J J J J J J J J J J Ms#   0AA #A B66B:=B:c                 :    |                      t          dd          S NGETz	/api/tagsrt   r#   rQ   s    rA   listzClient.list4  s!    ==  rC   c                     |                      ddt          |                              d                    }t          |j        dk    rdnd	
          S NDELETEz/api/deleter   Tr   r      successrz   statusrn   r   r   r.   ri   rQ   r   rl   s      rA   deletezClient.delete;  sr      

%% 	 	 	A -3..YYG   rC   sourcedestinationc                     |                      ddt          ||                              d                    }t          |j        dk    rdnd	
          S Nr   z	/api/copy)r-  r.  Tr   r   r&  r'  rz   r(  rn   r   r   r.   ri   rQ   r-  r.  rl   s       rA   copyzClient.copyG  sw       	

%% 	 	 	A -3..YYG   rC   c                     |                      t          ddt          |                              d                    S Nr   z	/api/showr%  Tr   r   rt   r-   r,   r   rQ   r   s     rA   showzClient.showT  sJ    ==  

%%    rC   c                 :    |                      t          dd          S Nr  z/api/psrt   r&   r   s    rA   psz	Client.ps^  s!    ==  rC   r]   r   r   r   r   NNr   Nr   r   NNNr   NNNNN)3rU   rV   rW   r
   rX   rT   rn   r   r   r0   r   rt   r   rY   r   r   intbytesr	   r   r%   floatr!   r   r$   r/   r   r   r   r   r   r   r   r'   r   r   r   r   r   r   r	  r#   r!  r.   r,  r3  r-   r8  r&   r<  __classcell__ra   s   @rA   r[   r[   o   s{       3 38C= 3d 3 3 3 3 3 3   
 #	  	a EN	 	   8 
 !	  	a DM	 {   8 
 	" " "	a" 	" Q^" " " 8" 	< < <	a< 	< Q^< < < <6  	 '+",048;?.2    	   hsm$ EN 
 WZ() XeCJ/01 eGCH-w678 ucz*+    8"  	' '+ ,048;?.2' ' '' ' 	' ' ' hsm$' DM' 
' WZ()' XeCJ/01' eGCH-w678' ucz*+'  !' ' ' 8'&   	- !"'+,048;?.2- - -- SM- SM	- SM- sm- hsm$- - 
$- WZ()- XeCJ/01- eGCH-w678- ucz*+- x(899:- - - -^  FJ

 KO",0;?.2
 
 

 xgc3h&7&@ ABC

 HU738#4dH#DEFG
 EN
 WZ()
 eGCH-w678
 ucz*+
 
 
 
 8
  FJ
#
 KO ,0;?.2
# 
# 
#
# xgc3h&7&@ ABC
#
 HU738#4dH#DEFG
# DM
# WZ()
# eGCH-w678
# ucz*+
# 
# 
# 
# 8
# FJ;
 KO,0;?.2; ; ;; xgc3h&7&@ ABC;
 HU738#4dH#DEFG; ; WZ(); eGCH-w678; ucz*+; \8L112; ; ; ;~ ')#;?.2  hsm#$ tn	
 eGCH-w678 ucz*+    .  ;?.2  SM eGCH-w678	
 ucz*+    , 
 "   	
 EN    8 
  ' ' '' 	'
 DM'  !' ' ' 8'    	
  x(899:   0 
 "   	
 EN    8 
  ' ' '' 	'
 DM'  !' ' ' 8'    	
  x(899:   0  ,0#	 #"   5h'
( }	 sm EN    8  ,0#	' # ' ' '' 5h'
(' }	' sm' DM'  !' ' ' 8' ,0#	  #       5h'
(  }	  sm    x(899:       D  8D> S    $uS$Y/ C     L    
# 
. 
 
 
 
 3 >         /        rC   r[   c                       e Zd ZdCdee         ddf fdZd Zedddee	         d	e
d         de	fd
            Zedddee	         d	e
d         dee	         fd            Zedddee	         d	edee	ee	         f         fd            Zdddee	         d	edee	ee	         f         fdZe	 	 	 dDdddddddddd	dedededededeee                  d	e
d         dedee
d                  deeeeef                           deeeeef         ef                  deeeef                  defd            Ze	 	 	 dDdddddddddd	dedededededeee                  d	e
d         dedee
d                  deeeeef                           deeeeef         ef                  deeeef                  dee         fd            Z	 	 	 dEdddddddddd	dedee         dee         dee         dee         deee                  d	edee         dee
d                  deeeeef                           deeeeef         ef                  deeeef                  deeee         f         fdZe	 	 dFdddddd ded!eeeeeef         ef                           d"eeeeeef         eef                           d	e
d         dee
d                  deeeeef         ef                  deeeef                  defd#            Ze	 	 dFdddddd ded!eeeeeef         ef                           d"eeeeeef         eef                           d	e
d         dee
d                  deeeeef         ef                  deeeef                  dee         fd$            Z	 	 dFdddddd ded!eeeeeef         ef                           d"eeeeeef         eef                           d	edee
d                  deeeeef         ef                  deeeef                  deeee         f         fd%Z	 	 	 	 	 dGded&eeee         f         d'ee         deeeeef         ef                  deeeef                  defd(Z	 	 	 	 dHdedee         deeeeef         ef                  deeeef                  def
d)Z eddd*ded+ed	e
d         de!fd,            Z"eddd*ded+ed	e
d         dee!         fd-            Z"ddd*ded+ed	edee!ee!         f         fd.Z"eddd*ded+ed	e
d         de!fd/            Z#eddd*ded+ed	e
d         dee!         fd0            Z#ddd*ded+ed	edee!ee!         f         fd1Z#e	 	 dIddd2ded3eeee$f                  d4ee         d5ee         d	e
d         de!fd6            Z%e	 	 dIddd2ded3eeee$f                  d4ee         d5ee         d	e
d         dee!         fd7            Z%	 	 dIddd2ded3eeee$f                  d4ee         d5ee         d	edee!ee!         f         fd8Z%dCd4ed9ee&         defd:Z'd3eee&f         defd;Z(de)fd<Z*dede+fd=Z,d>ed?ede+fd@Z-dede.fdAZ/de0fdBZ1 xZ2S )JAsyncClientNr3   r7   c                 R     t                      j        t          j        |fi | d S r]   )r^   rT   r_   rI  r`   s      rA   rT   zAsyncClient.__init__g  s-    EGGU&7777777rC   c                    K    | j         j        |i | d {V }	 |                                 n<# t          j        $ r*}t          |j        j        |j        j                  d d }~ww xY w|S r]   rc   rj   s        rA   rn   zAsyncClient._request_rawj  s      "dl"D3F33333333AM  M M M!*/1:+ABBLMHs   1 A* %A%%A*Fro   rq   rp   c                
   K   d S r]   r;   rs   s        rA   rt   zAsyncClient._requestr  s       #rC   Tc                
   K   d S r]   r;   rs   s        rA   rt   zAsyncClient._request{         rC   c                
   K   d S r]   r;   rs   s        rA   rt   zAsyncClient._request  s       $'3rC   c          	          K   |r fd} |            S  di   j         i  d {V                                 S )Nc                 .  K    j         j        i 4 d {V } 	 |                                  n[# t          j        $ rI}|j                                         d {V  t          |j        j        |j        j	                  d d }~ww xY w| 
                                2 3 d {V }t          j        |          }|                    d          x}rt          |           di |W V  M6 	 d d d           d {V  d S # 1 d {V swxY w Y   d S ry   )rP   rp   re   r_   rf   rg   areadr+   rh   ri   aiter_linesr}   r~   r   r   s	        rA   r   z#AsyncClient._request.<locals>.inner  s     &4<&777 	 	 	 	 	 	 	1S    & S S S*""$$$$$$$$$
1GHHdRS MMOO       D:d##Dhhw'''s '!#&&&#++++	 ,O	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s?   D3DBABBD"C/(AD
DDr;   r   r   s   `` `` rA   rt   zAsyncClient._request  s                UWWn3CC))4:6::::::::@@BBCCCrC   r   r   r   r   r   rM   r   r   r   r   r   r   r   r   c       	         
   K   d S r]   r;   r   s                rA   r   zAsyncClient.generate  s        rC   c       	         
   K   d S r]   r;   r   s                rA   r   zAsyncClient.generate  s        ),rC   c       	            K   |                      t          ddt          |||||||||	|
rd |
D             nd||                              d          |           d{V S )	a(  
    Create a response using the requested model.

    Raises `RequestError` if a model is not provided.

    Raises `ResponseError` if the request could not be fulfilled.

    Returns `GenerateResponse` if `stream` is `False`, otherwise returns an asynchronous `GenerateResponse` generator.
    r   r   c                 .    g | ]}t          |           S r   r   r   s     rA   r   z(AsyncClient.generate.<locals>.<listcomp>  r   rC   Nr   Tr   r   r   r   s                rA   r   zAsyncClient.generate  s      2 ;AK777777t   	

%%%          rC   r   r   r   c                
   K   d S r]   r;   r   s           rA   r   zAsyncClient.chat  s       SrC   c                
   K   d S r]   r;   r   s           rA   r   zAsyncClient.chat  s       %(CrC   c                   K   |                      t          ddt          |d t          |          D             d t	          |          D             ||||                              d          |           d	{V S )
a  
    Create a chat response using the requested model.

    Args:
      tools:
        A JSON schema as a dict, an Ollama Tool or a Python Function.
        Python functions need to follow Google style docstrings to be converted to an Ollama Tool.
        For more information, see: https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings
      stream: Whether to stream the response.
      format: The format of the response.

    Example:
      def add_two_numbers(a: int, b: int) -> int:
        '''
        Add two numbers together.

        Args:
          a: First number to add
          b: Second number to add

        Returns:
          int: The sum of a and b
        '''
        return a + b

      await client.chat(model='llama3.2', tools=[add_two_numbers], messages=[...])

    Raises `RequestError` if a model is not provided.

    Raises `ResponseError` if the request could not be fulfilled.

    Returns `ChatResponse` if `stream` is `False`, otherwise returns an asynchronous `ChatResponse` generator.
    r   r   c                     g | ]}|S r;   r;   r   s     rA   r   z$AsyncClient.chat.<locals>.<listcomp>G  r   rC   c                     g | ]}|S r;   r;   r   s     rA   r   z$AsyncClient.chat.<locals>.<listcomp>H  r   rC   r   Tr   r   Nr   r   s           rA   r   zAsyncClient.chat  s      Z BB)A)ABBB33E 2 2333   	

%%          rC   r   r   c                    K   |                      t          ddt          |||||                              d                     d {V S r   r   r   s         rA   r   zAsyncClient.embedQ  s|          	

%%          rC   c                    K   |                      t          ddt          ||||                              d                     d{V S )r   r   r   r   Tr   r   Nr   r   s        rA   r   zAsyncClient.embeddingsf  sy       	  
 	

%%  
 
 
 
 
 
 
 
 
rC   r   r   c                
   K   d S r]   r;   r   s       rA   r   zAsyncClient.pull|  rN  rC   c                
   K   d S r]   r;   r   s       rA   r   zAsyncClient.pull         ),rC   c          
         K   |                      t          ddt          |||                              d          |           d{V S )r   r   r   r   Tr   r   Nr   r   s       rA   r   zAsyncClient.pull  y          	

%%  
 
 
 
 
 
 
 
 
rC   c                
   K   d S r]   r;   r   s       rA   r   zAsyncClient.push  rN  rC   c                
   K   d S r]   r;   r   s       rA   r   zAsyncClient.push  ra  rC   c          
         K   |                      t          ddt          |||                              d          |           d{V S )r   r   r   r   Tr   r   Nr   r   s       rA   r   zAsyncClient.push  rc  rC   r   r   r   r   c                
   K   d S r]   r;   r   s         rA   r   zAsyncClient.create  s       rC   c                
   K   d S r]   r;   r   s         rA   r   zAsyncClient.create  s       ),rC   c                  K   t          |          x}rI|                                r5|                     |                                |j                   d{V }n-|r|                     |           d{V }nt          d          |                     t          ddt          ||||          	                    d          |	           d{V S )
r   r   Nr   r   r   r   Tr   r   r   r   s          rA   r   zAsyncClient.create  s      TNN" B(9(9 B--h.@.@.B.B-YYYYYYYYii	 B--i88888888ii@AAA	  
 	

%%          rC   r   c                 \  K   |t          j                    n|}t          j                    }t          j        |          D ]}|                    d          \  }}}|                                dvrt          |d|           Dt          |                                                                          }|	                                r|n||z  }|
                                rd|                     |           d {V  d}t          ||d|           |                                S r   r   r  s	            rA   r   zAsyncClient._parse_modelfile  s(     48:::4D
+--CI&& 
- 
-,,gq$	 3	3	3d%%%%$**,,**,,d%%''8TTTD[d	 54**400000000444GTr,,,,,<<>>rC   c                 b  K   t                      }t          d          5 }	 |                    d          }|sn|                    |           .	 d d d            n# 1 swxY w Y   d|                                 }fd}|                     dd|  |                       d {V  |S )	Nr  Tr  r  c                    K   t          d          5 } 	 |                     d          }|sn|W V  	 d d d            d S # 1 swxY w Y   d S )Nr  Tr  )r  r{   )rl   r  r   s     rA   upload_bytesz.AsyncClient._create_blob.<locals>.upload_bytes%  s      d q	&&##% ++++		 	                 s    AA	Ar   z/api/blobs/r  r  )rQ   r   r  rl   r  r  rm  s    `     rA   r	  zAsyncClient._create_blob  s(     I	dD		  Q y!! 	
	  	                              /y**,,..F     

F$:&$:$:LLNN

S
SSSSSSSSMs   0AA#&A#c                 J   K   |                      t          dd           d {V S r  r  r   s    rA   r!  zAsyncClient.list1  sC              rC   c                    K   |                      ddt          |                              d                     d {V }t          |j        dk    rdnd	
          S r#  r*  r+  s      rA   r,  zAsyncClient.delete8  s        

%%     	 	 	 	 	 	A -3..YYG   rC   r-  r.  c                    K   |                      ddt          ||                              d                     d {V }t          |j        dk    rdnd	
          S r0  r1  r2  s       rA   r3  zAsyncClient.copyD  s         	

%%     	 	 	 	 	 	A -3..YYG   rC   c                    K   |                      t          ddt          |                              d                     d {V S r5  r6  r7  s     rA   r8  zAsyncClient.showQ  sl        

%%          rC   c                 J   K   |                      t          dd           d {V S r:  r;  r   s    rA   r<  zAsyncClient.ps[  sC              rC   r]   r=  r>  r?  r@  rA  rB  )3rU   rV   rW   r
   rX   rT   rn   r   r   r0   r   rt   r   rY   r   r   rC  rD  r	   r   r%   rE  r!   r   r$   r/   r   r   r   r   r   r   r   r'   r   r   r   r   r   r   r	  r#   r!  r.   r,  r3  r-   r8  r&   r<  rF  rG  s   @rA   rI  rI  f  s       8 88C= 8d 8 8 8 8 8 8   
 #	  	a EN	 	   8 
 !	  	a DM	 Q   8 
 	' ' '	a' 	' Qa  !' ' ' 8' 	D D D	aD 	D Qa  !D D D D6  	 '+",048;?.2    	   hsm$ EN 
 WZ() XeCJ/01 eGCH-w678 ucz*+    8"  	, '+ ,048;?.2, , ,, , 	, , , hsm$, DM, 
, WZ(), XeCJ/01, eGCH-w678, ucz*+, %&, , , 8,&   	, !"'+,048;?.2, , ,, SM, SM	, SM, sm, hsm$, , 
$, WZ(), XeCJ/01, eGCH-w678, ucz*+, }-=>>?, , , ,\  FJ

 KO",0;?.2
 
 

 xgc3h&7&@ ABC

 HU738#4dH#DEFG
 EN
 WZ()
 eGCH-w678
 ucz*+
 
 
 
 8
  FJ
(
 KO ,0;?.2
( 
( 
(
( xgc3h&7&@ ABC
(
 HU738#4dH#DEFG
( DM
( WZ()
( eGCH-w678
( ucz*+
( \"
( 
( 
( 8
( FJ;
 KO,0;?.2; ; ;; xgc3h&7&@ ABC;
 HU738#4dH#DEFG; ; WZ(); eGCH-w678; ucz*+; \=667; ; ; ;~ ')#;?.2  hsm#$ tn	
 eGCH-w678 ucz*+    .  ;?.2  SM eGCH-w678	
 ucz*+    , 
 "   	
 EN    8 
  , , ,, 	,
 DM, %&, , , 8,    	
  }-=>>?   0 
 "   	
 EN    8 
  , , ,, 	,
 DM, %&, , , 8,    	
  }-=>>?   0  ,0#	 #"   5h'
( }	 sm EN    8  ,0#	, # , , ,, 5h'
(, }	, sm, DM, %&, , , 8, ,0#	  #       5h'
(  }	  sm    }-=>>?       D c $ SV    $U39%5 #    .,    
 
 
 
 
 
s      c l            rC   rI  r   r7   c              #      K   | pg D ]A}t          j        d t          |                                          D                       V  Bd S )Nc                 B    i | ]\  }}|||d k    rd |D             n|S )r   c                 .    g | ]}t          |           S r   r   r   s     rA   r   z-_copy_messages.<locals>.<dictcomp>.<listcomp>f  s#    
-
-
-%5u
-
-
-rC   r;   r=   s      rA   rB   z"_copy_messages.<locals>.<dictcomp>f  s@    mmm$!Qklmqh
-
-1
-
-
-
-AmmmrC   )r$   model_validatedictrO   )r   r   s     rA   r   r   c  sn      R  g

 mmRVW^R_R_ReReRgRgmmm      rC   r   c              #      K   | pg D ]6}t          |          rt          |          nt          j        |          V  7d S r]   )callabler   r/   rv  )r   unprocessed_tools     rA   r   r   j  sa      +2 ~ ~8@AQ8R8R
}
"#3
4
4
4X\Xkl|X}X}}}}}~ ~rC   sc                     t          | t                    st          | t                    r7	 t          |           x}                                r|S n# t          $ r Y nw xY wd S r]   )
isinstancerX   r   r   	Exception)r{  ps     rA   r   r   o  sw    3 
:a.. 

Aww,!			 	   
 
 
	c
	s   $A 
AAr3   c                    | pdd}} |                      d          \  }}}|sd| }}n|dk    rd}n|dk    rd}t          j                            d                    ||g                    }|j        pd} |j        p|}	 t          t          j	        |           t          j
                  rd	|  d
} n# t          $ r Y nw xY w|j                            d          x}r| d|  d| d| S | d|  d| S )a  
  >>> _parse_host(None)
  'http://127.0.0.1:11434'
  >>> _parse_host('')
  'http://127.0.0.1:11434'
  >>> _parse_host('1.2.3.4')
  'http://1.2.3.4:11434'
  >>> _parse_host(':56789')
  'http://127.0.0.1:56789'
  >>> _parse_host('1.2.3.4:56789')
  'http://1.2.3.4:56789'
  >>> _parse_host('http://1.2.3.4')
  'http://1.2.3.4:80'
  >>> _parse_host('https://1.2.3.4')
  'https://1.2.3.4:443'
  >>> _parse_host('https://1.2.3.4:56789')
  'https://1.2.3.4:56789'
  >>> _parse_host('example.com')
  'http://example.com:11434'
  >>> _parse_host('example.com:56789')
  'http://example.com:56789'
  >>> _parse_host('http://example.com')
  'http://example.com:80'
  >>> _parse_host('https://example.com')
  'https://example.com:443'
  >>> _parse_host('https://example.com:56789')
  'https://example.com:56789'
  >>> _parse_host('example.com/')
  'http://example.com:11434'
  >>> _parse_host('example.com:56789/')
  'http://example.com:56789'
  >>> _parse_host('example.com/path')
  'http://example.com:11434/path'
  >>> _parse_host('example.com:56789/path')
  'http://example.com:56789/path'
  >>> _parse_host('https://example.com:56789/path')
  'https://example.com:56789/path'
  >>> _parse_host('example.com:56789/path/')
  'http://example.com:56789/path'
  >>> _parse_host('[0001:002:003:0004::1]')
  'http://[0001:002:003:0004::1]:11434'
  >>> _parse_host('[0001:002:003:0004::1]:56789')
  'http://[0001:002:003:0004::1]:56789'
  >>> _parse_host('http://[0001:002:003:0004::1]')
  'http://[0001:002:003:0004::1]:80'
  >>> _parse_host('https://[0001:002:003:0004::1]')
  'https://[0001:002:003:0004::1]:443'
  >>> _parse_host('https://[0001:002:003:0004::1]:56789')
  'https://[0001:002:003:0004::1]:56789'
  >>> _parse_host('[0001:002:003:0004::1]/')
  'http://[0001:002:003:0004::1]:11434'
  >>> _parse_host('[0001:002:003:0004::1]:56789/')
  'http://[0001:002:003:0004::1]:56789'
  >>> _parse_host('[0001:002:003:0004::1]/path')
  'http://[0001:002:003:0004::1]:11434/path'
  >>> _parse_host('[0001:002:003:0004::1]:56789/path')
  'http://[0001:002:003:0004::1]:56789/path'
  >>> _parse_host('https://[0001:002:003:0004::1]:56789/path')
  'https://[0001:002:003:0004::1]:56789/path'
  >>> _parse_host('[0001:002:003:0004::1]:56789/path/')
  'http://[0001:002:003:0004::1]:56789/path'
  r   i,  z://httpP   httpsi  z	127.0.0.1[]/:)r  urllibparseurlsplitjoinhostnameportr}  	ipaddress
ip_addressIPv6Address
ValueErrorr   r  )r3   r  schemer  hostportsplitr   s          rA   rG   rG   y  sO   @ zr5$u--&!X	 tHFFDDD
,



FH+= > >
?
?%		&;$		t$)&t,,i.CDD [[[d	   C Zc"""T .------t---	$	$t	$	$d	$	$$s   ?2B2 2
B?>B?r]   )GrH   r  r}   rK   r  urllib.parser  r   pathlibr   hashlibr   typingr   r   r   r	   r
   r   r   r   r   r   sysollama._utilsr   version_infor   r   collections.abc	importlibr   versionrJ   PackageNotFoundErrorr_   ollama._typesr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r2   r[   rI  rX   r   r   r   rG   r;   rC   rA   <module>r     sc   				 				                                                    


 3 2 2 2 2 2f,,,,,,,,,55555555        **++$   +++                                                      : GCLL! ! ! ! ! ! ! !Ht t t t tZ t t tnz z z z z* z z zzXhuWS#X5F5O/P&QR W_`gWh    ~ ~xwsCx/@$/P)Q RS ~_ghl_m ~ ~ ~ ~
sH}-. 5t3D    W%hsm W% W% W% W% W% W% W%s   0B BB