
    ,|h                        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mZmZ d dlm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"jF                  d      Z$d dl&Z&d dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?  ed      Z@ G d d      ZAdZB G d deA      ZC G d deA      ZDdeeee3ef         dee3   fdZEdeeeeeFef   e5f         dee5   fdZGd!deeeeeFef   e?ef         dee?   fdZHdeeeFe	f      deedf   fdZIdeeF   deFfd ZJy# e"jJ                  $ r dZ$Y w xY w)"    N)sha256)PathLike)Path)AnyCallableDictListLiteralMappingOptionalSequenceTypeTypeVarUnionoverload)JsonSchemaValue)convert_function_to_tool)   	   )AsyncIteratorIterator)metadataollamaz0.0.0)ChatRequestChatResponseCopyRequestCreateRequestDeleteRequestEmbeddingsRequestEmbeddingsResponseEmbedRequestEmbedResponseGenerateRequestGenerateResponseImageListResponseMessageOptionsProcessResponseProgressResponsePullRequestPushRequestResponseErrorShowRequestShowResponseStatusResponseToolTc                   H    e Zd Z	 	 	 	 ddee   dededeeeef      ddf
dZy)	
BaseClientNhostfollow_redirectstimeoutheadersreturnc                     |d
t        |xs t        j                  d            ||i |xs i dddt         dt	        j
                          dt	        j                         j                          dt	        j                          dj                         D ci c]  \  }}|j                         | c}}d|| _
        y	c c}}w )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_HOSTzapplication/jsonzollama-python/z ( z	) Python/)zContent-TypeAcceptz
User-Agent)base_urlr6   r7   r8   N )_parse_hostosgetenv__version__platformmachinesystemlowerpython_versionitems_client)	selfclientr5   r6   r7   r8   kwargskvs	            M/var/www/html/test/engine/venv/lib/python3.12/site-packages/ollama/_client.py__init__zBaseClient.__init__J   s    "  4;299]#;<'
]
,&(R8H8H8J7K1X__M^MdMdMfLggpqy  rI  rI  rK  qL  M	

 %'Aq 	
	1 	DL
s   C)NTNN)	__name__
__module____qualname__r   strboolr   r   rQ   r?       rP   r4   r4   I   sY     !+/  3-  	 
   gc3h'(   rW   r4   zxFailed to connect to Ollama. Please check that Ollama is downloaded, running and accessible. https://ollama.com/downloadc                       e Zd ZdDd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	 	 	 dEd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e
d   ef      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	 	 	 dEd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e
d   ef      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	 	 	 dFd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e
d   ef      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	 	 dGd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e
d   ef      deeeeef   ef      deeeef      defd#       Ze	 	 dGd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e
d   ef      deeeeef   ef      deeeef      dee   fd$       Z	 	 dGd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e
d   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	 	 	 	 	 dHd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	 	 	 	 dId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	 	 	 	 	 	 	 	 	 dJddded2ee   d3ee   d4ee%eef      d5ee%eef      dee   d6eeee&e   f      dee   d7eeeeef   ef      d!eeeeeef   ef         d	e
d   de"fd8       Z'e	 	 	 	 	 	 	 	 	 dJddded2ee   d3ee   d4ee%eef      d5ee%eef      dee   d6eeee&e   f      dee   d7eeeeef   ef      d!eeeeeef   ef         d	e
d   dee"   fd9       Z'	 	 	 	 	 	 	 	 	 dJddded2ee   d3ee   d4ee%eef      d5ee%eef      dee   d6eeee&e   f      dee   d7eeeeef   ef      d!eeeeeef   ef         d	edee"ee"   f   fd:Z'd;e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dAZ.dede/fdBZ0de1fdCZ2 xZ3S )KClientNr5   r9   c                 D    t        |   t        j                  |fi | y N)superrQ   httpxrY   rK   r5   rM   	__class__s      rP   rQ   zClient.__init__q   s    	GU\\4262rW   c                 D   	  | j                   j                  |i |}|j                          |S # t        j                  $ r:}t        |j                  j                  |j                  j                        d d }~wt        j                  $ r t        t              d w xY wr[   rJ   requestraise_for_statusr]   HTTPStatusErrorr-   responsetextstatus_codeConnectErrorConnectionErrorCONNECTION_ERROR_MESSAGErK   argsrM   res        rP   _request_rawzClient._request_rawt   s    @
$,,


/
/ah   M!**//1::+A+ABL @454?@s   -0 B5A88'BFstreamclsrq   c                     y r[   r?   rK   rr   rq   rl   rM   s        rP   _requestzClient._request~   s     rW   Tc                     y r[   r?   rt   s        rP   ru   zClient._request   s     rW   c                     y r[   r?   rt   s        rP   ru   zClient._request   s     "rW   c          	      x     |r fd} |       S  di   j                   i j                         S )Nc               3     K    j                   j                  i 5 } 	 | j                          | j                         D ]?  }t        j                  |      }|j                  d      x}rt        |       di | A 	 d d d        y # t        j                  $ rT}|j
                  j                          t        |j
                  j                  |j
                  j                        d d }~ww xY w# 1 sw Y   y xY wwNerrorr?   )rJ   rq   rc   r]   rd   re   readr-   rf   rg   
iter_linesjsonloadsget	rm   rn   lineparterrrl   rr   rM   rK   s	        rP   innerzClient._request.<locals>.inner   s      T\\  $1&1 	QS 
 lln d::d#Dhhw''s'!#&&++		 	 && SJJOO

1G1GHdRS	 	s@   DC8BAC8	DC5!AC00C55C88D=Dr?   ro   r~   rK   rr   rq   rl   rM   r   s   `` `` rP   ru   zClient._request   s@      Wn;"""D3F388:;;rW    	rF   templatecontextrq   rawformatimagesoptions
keep_alivemodelpromptsuffixrF   r   r   r   r   r   r~   r   r   r   c       	              y r[   r?   rK   r   r   r   rF   r   r   rq   r   r   r   r   r   s                rP   generatezClient.generate   s      rW   c       	              y r[   r?   r   s                rP   r   zClient.generate   s      $'rW   c       	             | j                  t        ddt        |||||||||	|
rt        |
      D cg c]  }| c}nd||      j	                  d      |      S c c}w )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/generateNr   r   r   rF   r   r   rq   r   r   r   r   r   Texclude_noner~   rq   ru   r$   r#   _copy_images
model_dumprK   r   r   r   rF   r   r   rq   r   r   r   r   r   images                 rP   r   zClient.generate   sy    4 ==<B<#78%8 	

%%    9s   	A$toolsrq   r   r   r   messagesr   c                     y r[   r?   rK   r   r   r   rq   r   r   r   s           rP   chatzClient.chat  s     rW   c                     y r[   r?   r   s           rP   r   zClient.chat  s      #rW   c                    | j                  t        ddt        |t        |      D cg c]  }| c}t	        |      D 	cg c]  }	|	 c}	||||      j                  d      |      S c c}w c c}	w )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/chatr   r   r   rq   r   r   r   Tr   r   ru   r   r   _copy_messages_copy_toolsr   
rK   r   r   r   rq   r   r   r   messagetools
             rP   r   zClient.chat!  s{    X ==)7)ABg'B +E 23t3 	

%    C3s
   	A)	A.inputtruncatec                 p    | j                  t        ddt        |||||      j                  d            S Nr   z
/api/embed)r   r   r   r   r   Tr   r~   ru   r"   r!   r   rK   r   r   r   r   r   s         rP   embedzClient.embed]  sH     == 	

%   rW   c                 n    | j                  t        ddt        ||||      j                  d            S ))
    Deprecated in favor of `embed`.
    r   /api/embeddingsr   r   r   r   Tr   r   ru   r    r   r   rK   r   r   r   r   s        rP   
embeddingszClient.embeddingsr  sE     ==	
 	

%  
 
rW   insecurerq   r   c                     y r[   r?   rK   r   r   rq   s       rP   pullzClient.pull       rW   c                     y r[   r?   r   s       rP   r   zClient.pull       $'rW   c          
      n    | j                  t        ddt        |||      j                  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   rq   Tr   r   ru   r*   r+   r   r   s       rP   r   zClient.pull  E     == 	

%  
 
rW   c                     y r[   r?   r   s       rP   pushzClient.push  r   rW   c                     y r[   r?   r   s       rP   r   zClient.push  r   rW   c          
      n    | j                  t        ddt        |||      j                  d      |      S )r   r   	/api/pushr   Tr   r   ru   r*   r,   r   r   s       rP   r   zClient.push  r   rW   quantizefrom_filesadapterslicense
parametersc                     y r[   r?   rK   r   r   r   r   r   r   r   rF   r   r   rq   s               rP   createzClient.create  s     rW   c                     y r[   r?   r   s               rP   r   zClient.create  s     $'rW   c                ~    | j                  t        ddt        ||||||||||	|
      j                  d      |      S )r   r   /api/creater   rq   r   r   r   r   r   r   rF   r   r   Tr   r   ru   r*   r   r   r   s               rP   r   zClient.create  s]    ( == 	

%#   rW   pathc                 D   t               }t        |d      5 }	 |j                  d      }|sn|j                  |       &	 d d d        d|j	                          }t        |d      5 }| j                  dd| |       d d d        |S # 1 sw Y   JxY w# 1 sw Y   |S xY w)Nrb   sha256:r   /api/blobs/contentr   openr|   update	hexdigestro   )rK   r   	sha256sumrm   chunkdigests         rP   create_blobzClient.create_blob&  s    I	dD	  Qy!
	  	  y**,-.F	dD	 CQ
+fX 6BC M   C Ms   (B	'B	BBc                 0    | j                  t        dd      S NGETz	/api/tagsru   r&   rK   s    rP   listzClient.list6  s    == rW   c                     | j                  ddt        |      j                  d            }t        |j                  dk(  rd
      S d	
      S NDELETEz/api/deleter   Tr   r      successr{   statusro   r   r   r0   rg   rK   r   rm   s      rP   deletezClient.delete=  s^    

% 	 	A --3.Y 4; rW   sourcedestinationc                     | j                  ddt        ||      j                  d            }t        |j                  dk(  rd
      S d	
      S Nr   z	/api/copy)r  r  Tr   r   r   r  r{   r  ro   r   r   r0   rg   rK   r  r  rm   s       rP   copyzClient.copyI  sc     	

% 	 	A --3.Y 4; rW   c                 h    | j                  t        ddt        |      j                  d            S Nr   z	/api/showr   Tr   r   ru   r/   r.   r   rK   r   s     rP   showzClient.showV  s8    ==

%   rW   c                 0    | j                  t        dd      S Nr   z/api/psru   r)   r   s    rP   psz	Client.ps`  s    == rW   r[   r   r   r   r   NNr   Nr   r   NNNr   NNN	NNNNNNNNN)4rR   rS   rT   r   rU   rQ   ro   r   r   r2   r
   ru   r   rV   r   r   intr   bytesr   r   r(   floatr$   r   r'   r1   r   r   r   r"   r   r    r   r*   r   r   r   r	   r   r   r   r&   r   r0   r  r  r/   r  r)   r  __classcell__r_   s   @rP   rY   rY   p   s   38C= 3d 3@ 
 #		a EN	 	  
 !		a DM	 {  
 	"	a" 	" Q^" " 	<	a< 	< Q^<6  	 '+"DH48;?.2  	   hsm$ EN 
 U7:.?@A XeCJ/01 eGCH-w678 ucz*+  "  	' '+ DH48;?.2'' ' 	' ' ' hsm$' DM' 
' U7:.?@A' XeCJ/01' eGCH-w678' ucz*+'  !' '&   	- !"'+DH48;?.2-- SM- SM	- SM- sm- hsm$- - 
$- U7:.?@A- XeCJ/01- eGCH-w678- ucz*+- x(899:-^  FJ

 KO"DH;?.2

 xgc3h&7&@ ABC

 HU738#4dH#DEFG
 EN
 U7:.?@A
 eGCH-w678
 ucz*+
 
 
  FJ
#
 KO DH;?.2
#
# xgc3h&7&@ ABC
#
 HU738#4dH#DEFG
# DM
# U7:.?@A
# eGCH-w678
# ucz*+
# 
# 
# FJ:
 KODH;?.2:: xgc3h&7&@ ABC:
 HU738#4dH#DEFG: : U7:.?@A: 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   
  '' 	'
 DM'  !' '  	
  x(899:0 
 " 	
 EN   
  '' 	'
 DM'  !' '  	
  x(899:0  #&*)-"/3 >BFJ # sm C=	
 DcN# tCH~& sm eCcN+, SM wsCx0'9:; xgc3h&7&@ ABC EN     #&*)-"/3 >BFJ' !'' sm' C=	'
 DcN#' tCH~&' sm' eCcN+,' SM' wsCx0'9:;' xgc3h&7&@ ABC' DM'  !' '& #&*)-"/3 >BFJ& && sm& C=	&
 DcN#& tCH~&& sm& eCcN+,& SM& wsCx0'9:;& xgc3h&7&@ ABC& & x(899:&PeCI. 3  L 
# 
. 
 3 >   / rW   rY   c                       e Zd ZdDd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	 	 	 dEd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e
d   ef      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	 	 	 dEd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e
d   ef      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	 	 	 dFd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e
d   ef      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	 	 dGd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e
d   ef      deeeeef   ef      deeeef      defd#       Ze	 	 dGd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e
d   ef      deeeeef   ef      deeeef      dee   fd$       Z	 	 dGd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e
d   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	 	 	 	 	 dHd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	 	 	 	 dId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	 	 	 	 	 	 	 	 	 dJddded2ee   d3ee   d4ee%eef      d5ee%eef      dee   d6eeee&e   f      dee   d7eeeeef   ef      d!eeeeeef   ef         d	e
d   de"fd8       Z'e	 	 	 	 	 	 	 	 	 dJddded2ee   d3ee   d4ee%eef      d5ee%eef      dee   d6eeee&e   f      dee   d7eeeeef   ef      d!eeeeeef   ef         d	e
d   dee"   fd9       Z'	 	 	 	 	 	 	 	 	 dJddded2ee   d3ee   d4ee%eef      d5ee%eef      dee   d6eeee&e   f      dee   d7eeeeef   ef      d!eeeeeef   ef         d	edee"ee"   f   fd:Z'd;e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dAZ.dede/fdBZ0de1fdCZ2 xZ3S )KAsyncClientNr5   r9   c                 D    t        |   t        j                  |fi | y r[   )r\   rQ   r]   r#  r^   s      rP   rQ   zAsyncClient.__init__i  s    	GU&&77rW   c                 `  K   	  | j                   j                  |i | d {   }|j                          |S 7 # t        j                  $ r:}t        |j                  j                  |j                  j                        d d }~wt        j                  $ r t        t              d w xY wwr[   ra   rk   s        rP   ro   zAsyncClient._request_rawl  s     @$$$d5f5
5ah 6    M!**//1::+A+ABL @454?@s1   B.< :< B.< B+5B'B++B.Frp   rr   rq   c                   K   y wr[   r?   rt   s        rP   ru   zAsyncClient._requestv  s         Tc                   K   y wr[   r?   rt   s        rP   ru   zAsyncClient._request        r'  c                   K   y wr[   r?   rt   s        rP   ru   zAsyncClient._request  s      $'r'  c          	          K   |r fd} |       S  di   j                   i  d {   j                         S 7 w)Nc                 f  K    j                   j                  i 4 d {   } 	 | j                          | j                         2 3 d {   }t        j                  |      }|j                  d      x}rt        |       di | H7 m# t        j                  $ r]}|j
                  j                          d {  7   t        |j
                  j                  |j
                  j                        d d }~ww xY w7 6 d d d       d {  7   y # 1 d {  7  sw Y   y xY wwrz   )rJ   rq   rc   r]   rd   re   areadr-   rf   rg   aiter_linesr~   r   r   r   s	        rP   r   z#AsyncClient._request.<locals>.inner  s    &4<<&&77 	 	1S 
 MMO  D::d#Dhhw''s'!#&&++	 && S**""$$$

1G1GHdRSO	 	 	 	 	s   !D1BD1DBD
D	DD	A DD1D'C?C:C??DDD		D
D1DD1D."D%#D.*D1r?   r   r   s   `` `` rP   ru   zAsyncClient._request  sJ       WnC)))4:6::@@BCC:s   +AAAr   r   r   r   r   rF   r   r   r   r   r   r   r   r   c       	            K   y wr[   r?   r   s                rP   r   zAsyncClient.generate  s       r'  c       	            K   y wr[   r?   r   s                rP   r   zAsyncClient.generate  s       ),r'  c       	            K   | j                  t        ddt        |||||||||	|
rt        |
      D cg c]  }| c}nd||      j	                  d      |       d{   S c c}w 7 	w)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   Nr   Tr   r   r   r   s                 rP   r   zAsyncClient.generate  s     2 <B<#78%8 	

%%     9s   0A,	A%$%A, A*!
A,r   r   r   c                   K   y wr[   r?   r   s           rP   r   zAsyncClient.chat  s      r'  c                   K   y wr[   r?   r   s           rP   r   zAsyncClient.chat  s      %(r'  c                  K   | j                  t        ddt        |t        |      D cg c]  }| c}t	        |      D 	cg c]  }	|	 c}	||||      j                  d      |       d{   S c c}w c c}	w 7 w)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   r   Tr   r   Nr   r   s
             rP   r   zAsyncClient.chat  s     Z )7)ABg'B +E 23t3 	

%     C3s'   &A?	A3A? 	A8	%A?.A=/A?r   r   c                    K   | j                  t        ddt        |||||      j                  d             d {   S 7 wr   r   r   s         rP   r   zAsyncClient.embedU  sV       	

%     s   ;AAAc                    K   | j                  t        ddt        ||||      j                  d             d{   S 7 w)r   r   r   r   Tr   r   Nr   r   s        rP   r   zAsyncClient.embeddingsj  sS      	
 	

%  
 
 
 
   :AAAr   r   c                   K   y wr[   r?   r   s       rP   r   zAsyncClient.pull  r)  r'  c                   K   y wr[   r?   r   s       rP   r   zAsyncClient.pull        ),r'  c          
         K   | j                  t        ddt        |||      j                  d      |       d{   S 7 w)r   r   r   r   Tr   r   Nr   r   s       rP   r   zAsyncClient.pull  S       	

%  
 
 
 
r7  c                   K   y wr[   r?   r   s       rP   r   zAsyncClient.push  r)  r'  c                   K   y wr[   r?   r   s       rP   r   zAsyncClient.push  r:  r'  c          
         K   | j                  t        ddt        |||      j                  d      |       d{   S 7 w)r   r   r   r   Tr   r   Nr   r   s       rP   r   zAsyncClient.push  r<  r7  r   r   r   r   r   r   c                   K   y wr[   r?   r   s               rP   r   zAsyncClient.create  s      r'  c                   K   y wr[   r?   r   s               rP   r   zAsyncClient.create  s      ),r'  c                   K   | j                  t        ddt        ||||||||||	|
      j                  d      |       d{   S 7 w)r   r   r   r   Tr   r   Nr   r   s               rP   r   zAsyncClient.create  sk     *  	

%#     s   AAA	Ar   c                 2  K   t               }t        d      5 }	 |j                  d      }|sn|j                  |       &	 d d d        d|j	                          }fd}| j                  dd|  |              d {    |S # 1 sw Y   GxY w7 w)Nr   r   r   c                    K   t        d      5 } 	 | j                  d      }|sn| 	 d d d        y # 1 sw Y   y xY ww)Nr   r   )r   r|   )rm   r   r   s     rP   upload_bytesz-AsyncClient.create_blob.<locals>.upload_bytes*  sM     d q&&#%+	  	  s   A6	A?Ar   r   r   r   )rK   r   r   rm   r   r   rE  s    `     rP   r   zAsyncClient.create_blob  s     I	dD	  Qy!
	  	  y**,-.F 

Fk&$:LN

SSSM'   " Ts(   B(B	?BBB	BBc                 L   K   | j                  t        dd       d {   S 7 wr   r   r   s    rP   r   zAsyncClient.list6  s*           $"$c                    K   | j                  ddt        |      j                  d             d {   }t        |j                  dk(  rd
      S d	
      S 7 &wr   r  r  s      rP   r  zAsyncClient.delete=  sl     

%    	A --3.Y 4; 	s   2AA'Ar  r  c                    K   | j                  ddt        ||      j                  d             d {   }t        |j                  dk(  rd
      S d	
      S 7 &wr
  r  r  s       rP   r  zAsyncClient.copyI  sq      	

%    	A --3.Y 4; 	s   3AA'Ac                    K   | j                  t        ddt        |      j                  d             d {   S 7 wr  r  r  s     rP   r  zAsyncClient.showV  sF     

%     s   7A >A c                 L   K   | j                  t        dd       d {   S 7 wr  r  r   s    rP   r  zAsyncClient.ps`  s*        rG  r[   r  r  r  r  r  r  )4rR   rS   rT   r   rU   rQ   ro   r   r   r2   r
   ru   r   rV   r   r   r  r   r  r   r   r(   r  r$   r   r'   r1   r   r   r   r"   r   r    r   r*   r   r   r   r	   r   r   r   r&   r   r0   r  r  r/   r  r)   r  r   r!  s   @rP   r#  r#  h  s   88C= 8d 8@ 
 #		a EN	 	  
 !		a DM	 Q  
 	'	a' 	' Qa  !' ' 	D	aD 	D Qa  !D6  	 '+"DH48;?.2  	   hsm$ EN 
 U7:.?@A XeCJ/01 eGCH-w678 ucz*+  "  	, '+ DH48;?.2,, , 	, , , hsm$, DM, 
, U7:.?@A, XeCJ/01, eGCH-w678, ucz*+, %&, ,&   	, !"'+DH48;?.2,, SM, SM	, SM, sm, hsm$, , 
$, U7:.?@A, XeCJ/01, eGCH-w678, ucz*+, }-=>>?,\  FJ

 KO"DH;?.2

 xgc3h&7&@ ABC

 HU738#4dH#DEFG
 EN
 U7:.?@A
 eGCH-w678
 ucz*+
 
 
  FJ
(
 KO DH;?.2
(
( xgc3h&7&@ ABC
(
 HU738#4dH#DEFG
( DM
( U7:.?@A
( eGCH-w678
( ucz*+
( \"
( 
( FJ;
 KODH;?.2;; xgc3h&7&@ ABC;
 HU738#4dH#DEFG; ; U7:.?@A; 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   
  ,, 	,
 DM, %&, ,  	
  }-=>>?0 
 " 	
 EN   
  ,, 	,
 DM, %&, ,  	
  }-=>>?0  #&*)-"/3 >BFJ ! sm C=	
 DcN# tCH~& sm eCcN+, SM wsCx0'9:; xgc3h&7&@ ABC DM     #&*)-"/3 >BFJ, !,, sm, C=	,
 DcN#, tCH~&, sm, eCcN+,, SM, wsCx0'9:;, xgc3h&7&@ ABC, DM, %&, ,& #&*)-"/3 >BFJ' '' sm' C=	'
 DcN#' tCH~&' sm' eCcN+,' SM' wsCx0'9:;' xgc3h&7&@ ABC' ' }-=>>?'RE#t)$4  ., 
 
 
s   c l  rW   r#  r   r9   c              #   b   K   | xs g D ]"  }t        |t              r|nt        |       $ y w)N)value)
isinstancer%   )r   r   s     rP   r   r   h  s1     | DeeU+%U1CCDs   -/r   c              #     K   | xs g D ]g  }t        j                  t        |      j                         D ci c])  \  }}|s	||dk(  rt	        |      D cg c]  }| c}n|+ c}}}       i y c c}w c c}}}w w)Nr   )r'   model_validatedictrI   r   )r   r   rN   rO   r   s        rP   r   r   m  su     R g

 
 SWX_S`SfSfShnn41almq!x-l1o
.U5
.QFn 
.ns.   6B 
A9A9	A4A9&B 4A99B r   c              #   |   K   | xs g D ]/  }t        |      rt        |      nt        j                  |       1 y wr[   )callabler   r1   rP  )r   unprocessed_tools     rP   r   r   t  s@     +2 ~8@AQ8R
"#3
4X\XkXkl|X}}~s   :<sc                     t        | t              st        | t              r 	 t        |       x}j                         r|S 	 y y # t        $ r Y y w xY wr[   )rN  rU   r   exists	Exception)rU  ps     rP   _as_pathrZ  y  sT    3:a.
Aw,!			  
! 
  
		
s   A 	AAr5   c                    | xs dd}} | j                  d      \  }}}|sd| }}n|dk(  rd}n|dk(  rd}t        j                  j                  dj	                  ||g            }|j
                  xs d} |j                  xs |}	 t        t        j                  |       t        j                        rd	|  d
} |j                  j                  d      x}r| d|  d| d| S | d|  d| S # t        $ r Y ?w xY w)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[]/:)	partitionurllibparseurlsplitjoinhostnameportrN  	ipaddress
ip_addressIPv6Address
ValueErrorr   strip)r5   ri  scheme_hostportsplitr   s          rP   r@   r@     s   @ zr5$u-&!X	tHFDD
,,



FH+= >
?%		&;$		t$)&&t,i.C.CDa[d ZZc""T"XSavQtf--83tfAdV	$$ 
 s   3C, ,	C87C8r[   )Krj  r~   rA   rD   sysurllib.parserd  hashlibr   r   pathlibr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   pydantic.json_schemar   ollama._utilsr   version_infor   r   collections.abc	importlibr   versionrC   PackageNotFoundErrorr]   ollama._typesr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   rj   rY   r#  r   rU   r   r   rZ  r@   r?   rW   rP   <module>r     s     	  
        1 2f,,5    *+       6 CL! !H V uZ up}* }@D(5+<"=> D8E? D
XhuWS#X5F5O/P&QR W_`gWh ~xwsCx/@$/P)Q RS ~_ghl_m ~
sH}-. 5t3D W%hsm W% W%{" $$ +s   :E E10E1