
    iS                         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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#jH                  d      Z%d dl'Z'd dl(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?m@Z@mAZAmBZBmCZCmDZD  ed      ZE G d d      ZFdZG G d deF      ZH G d deF      ZIdeeee4ef         de e4   fdZJdeeeeeKef   e6f         de e6   fdZLd!deeeeeKef   e@ef         de e@   fdZMdeeeKe	f      deedf   fdZNdeeK   deKfd ZOy# e#jL                  $ 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WebFetchRequestWebFetchResponseWebSearchRequestWebSearchResponseTc                   L    e Zd Z	 d
dddddee   dededeeeef      ddf
d	Zy)
BaseClientNT)follow_redirectstimeoutheadershostr9   r:   r;   returnc                   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	                         | }}}t        j                  dd      }	|j                  d	      s
|	rd
|	 |d	<    |dt        |xs t        j                  d            |||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.
    zapplication/jsonzollama-python/z ( z	) Python/)zContent-TypeAcceptz
User-AgentNOLLAMA_API_KEYauthorizationBearer OLLAMA_HOST)base_urlr9   r:   r;    )__version__platformmachinesystemlowerpython_versionitemsosgetenvget_parse_host_client)
selfclientr<   r9   r:   r;   kwargskvapi_keys
             L/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/ollama/_client.py__init__zBaseClient.__init__O   s   (=b*$&{m2h6F6F6H5I8??K\KbKbKdJeenow  pG  pG  pI  oJ  K	
 		
!Q 
 ggil	G 	 ii($/G;;'G#*7)!4go 4;299]#;<'	
 	DL	s   4C8N)	__name__
__module____qualname__r   strboolr   r   rZ   rF       rY   r8   r8   N   s`     &
 "+/& 3-&
 & & gc3h'(& &ra   r8   zxFailed to connect to Ollama. Please check that Ollama is downloaded, running and accessible. https://ollama.com/downloadc            %       V    e Zd ZdNd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	 	 	 dOdddd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e   dee   dee   dedeee
d   ef      de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	 	 	 dOdddd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e   dee   dee   dedeee
d   ef      de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	 	 	 dPdddd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ee   dee   deee
d   ef      de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	 	 dQdddd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e
d&   f      dee   de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fd'       Ze	 	 dQdddd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e
d&   f      dee   de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   fd(       Z	 	 dQdddd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e
d&   f      dee   de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	 	 	 	 	 	 dRd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e   defd-Z 	 	 	 	 dSd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d0ed	e
d   de#fd1       Z$eddd/ded0ed	e
d   dee#   fd2       Z$ddd/ded0ed	edee#ee#   f   fd3Z$eddd/ded0ed	e
d   de#fd4       Z%eddd/ded0ed	e
d   dee#   fd5       Z%ddd/ded0ed	edee#ee#   f   fd6Z%e	 	 	 	 	 	 	 	 	 dTddded7ee   d8ee   d9ee&eef      d:ee&eef      dee   d;eeee'e   f      dee   d<eeeeef   ef      d$eeeeeef   ef         d	e
d   de#fd=       Z(e	 	 	 	 	 	 	 	 	 dTddded7ee   d8ee   d9ee&eef      d:ee&eef      dee   d;eeee'e   f      dee   d<eeeeef   ef      d$eeeeeef   ef         d	e
d   dee#   fd>       Z(	 	 	 	 	 	 	 	 	 dTddded7ee   d8ee   d9ee&eef      d:ee&eef      dee   d;eeee'e   f      dee   d<e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dAZ*de+fdBZ,dede-fdCZ.dDedEede-fdFZ/dede0fdGZ1de2fdHZ3dUdIedJede4fdKZ5dLede6fdMZ7 xZ8S )VClientNr<   r=   c                 D    t        |   t        j                  |fi | y r[   )superrZ   httpxrc   rS   r<   rU   	__class__s      rY   rZ   zClient.__init__|   s    	GU\\4262ra   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[   rR   requestraise_for_statusrf   HTTPStatusErrorr-   responsetextstatus_codeConnectErrorConnectionErrorCONNECTION_ERROR_MESSAGErS   argsrU   res        rY   _request_rawzClient._request_raw   s    @
$,,


/
/ah   M!**//1::+A+ABL @454?@s   -0 B5A88'BFstreamclsrz   c                     y r[   rF   rS   r{   rz   ru   rU   s        rY   _requestzClient._request   s     ra   Tc                     y r[   rF   r}   s        rY   r~   zClient._request   s     ra   c                     y r[   rF   r}   s        rY   r~   zClient._request   s     "ra   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errorrF   )rR   rz   rl   rf   rm   rn   readr-   ro   rp   
iter_linesjsonloadsrP   	rv   rw   lineparterrru   r{   rU   rS   s	        rY   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rF   rx   r   rS   r{   rz   ru   rU   r   s   `` `` rY   r~   zClient._request   s@      Wn;"""D3F388:;;ra    rJ   templatecontextrz   thinklogprobstop_logprobsrawformatimagesoptions
keep_alivemodelpromptsuffixrJ   r   r   r   r   r   r   r   r   r   r   r   r   c                     y r[   rF   rS   r   r   r   rJ   r   r   rz   r   r   r   r   r   r   r   r   s                   rY   generatezClient.generate   s    & ra   c                     y r[   rF   r   s                   rY   r   zClient.generate   s    & $'ra   c                    | j                  t        ddt        |||||||||	|
|||rt        t	        |            nd||      j                  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/generateNr   r   r   rJ   r   r   rz   r   r   r   r   r   r   r   r   Texclude_noner   rz   r~   r$   r#   list_copy_images
model_dumpr   s                   rY   r   zClient.generate   sw    : ==!-3tL()  	

%+   ra   toolsrz   r   r   r   r   r   r   messagesr   lowmediumhighc                     y r[   rF   rS   r   r   r   rz   r   r   r   r   r   r   s              rY   chatzClient.chat  s     ra   c                     y r[   rF   r   s              rY   r   zClient.chat.  s      #ra   c                    | j                  t        ddt        |t        t	        |            t        t        |            ||||||	|

      j                  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/chat
r   r   r   rz   r   r   r   r   r   r   Tr   r   r~   r   r   r   _copy_messages_copy_toolsr   r   s              rY   r   zClient.chat>  so    ^ ==nX./;u%&! 	

%!   ra   inputtruncate
dimensionsc                 r    | j                  t        ddt        ||||||      j                  d            S Nr   z
/api/embed)r   r   r   r   r   r   Tr   r   r~   r"   r!   r   rS   r   r   r   r   r   r   s          rY   embedzClient.embed  sK     == 	

%   ra   c                 n    | j                  t        ddt        ||||      j                  d            S ))
    Deprecated in favor of `embed`.
    r   /api/embeddingsr   r   r   r   Tr   r   r~   r    r   r   rS   r   r   r   r   s        rY   
embeddingszClient.embeddings  sE     ==	
 	

%  
 
ra   insecurerz   r   c                     y r[   rF   rS   r   r   rz   s       rY   pullzClient.pull       ra   c                     y r[   rF   r   s       rY   r   zClient.pull       $'ra   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   rz   Tr   r   r~   r*   r+   r   r   s       rY   r   zClient.pull  E     == 	

%  
 
ra   c                     y r[   rF   r   s       rY   pushzClient.push  r   ra   c                     y r[   rF   r   s       rY   r   zClient.push  r   ra   c          
      n    | j                  t        ddt        |||      j                  d      |      S )r   r   	/api/pushr   Tr   r   r~   r*   r,   r   r   s       rY   r   zClient.push  r   ra   quantizefrom_filesadapterslicense
parametersc                     y r[   rF   rS   r   r   r   r   r   r   r   rJ   r   r   rz   s               rY   createzClient.create  s     ra   c                     y r[   rF   r   s               rY   r   zClient.create  s     $'ra   c                ~    | j                  t        ddt        ||||||||||	|
      j                  d      |      S )r   r   /api/creater   rz   r   r   r   r   r   r   rJ   r   r   Tr   r   r~   r*   r   r   r   s               rY   r   zClient.create#  s]    ( == 	

%#   ra   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	hexdigestrx   )rS   r   	sha256sumrv   chunkdigests         rY   create_blobzClient.create_blobK  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r~   r&   rS   s    rY   r   zClient.list[  s    == ra   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rx   r   r   r0   rp   rS   r   rv   s      rY   deletezClient.deleteb  s^    

% 	 	A --3.Y 4; ra   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  rx   r   r   r0   rp   rS   r  r  rv   s       rY   copyzClient.copyn  sc     	

% 	 	A --3.Y 4; ra   c                 h    | j                  t        ddt        |      j                  d            S Nr   z	/api/showr	  Tr   r   r~   r/   r.   r   rS   r   s     rY   showzClient.show{  s8    ==

%   ra   c                 0    | j                  t        dd      S Nr  z/api/psr~   r)   r  s    rY   psz	Client.ps  s    == ra   querymax_resultsc           	          | j                   j                  j                  dd      j                  d      st	        d      | j                  t        ddt        ||      j                  d	      
      S )a%  
    Performs a web search

    Args:
      query: The query to search for
      max_results: The maximum number of results to return (default: 3)

    Returns:
      WebSearchResponse with the search results
    Raises:
      ValueError: If OLLAMA_API_KEY environment variable is not set
    rB   r   rC   zAAuthorization header with Bearer token is required for web searchr   !https://ollama.com/api/web_searchr!  r"  Tr   r   )	rR   r;   rP   
startswith
ValueErrorr~   r5   r4   r   rS   r!  r"  s      rY   
web_searchzClient.web_search  sp     <<##OR8CCINZ[[==) 	

%   ra   urlc                     | j                   j                  j                  dd      j                  d      st	        d      | j                  t        ddt        |      j                  d	      
      S )
    Fetches the content of a web page for the provided URL.

    Args:
      url: The URL to fetch

    Returns:
      WebFetchResponse with the fetched result
    rB   r   rC   z@Authorization header with Bearer token is required for web fetchr    https://ollama.com/api/web_fetchr*  Tr   r   )	rR   r;   rP   r&  r'  r~   r3   r2   r   rS   r*  s     rY   	web_fetchzClient.web_fetch  sk     <<##OR8CCINYZZ==(

%   ra   r[   r   r   r   r   NNr   Nr   r   NNNNr   NNN	NNNNNNNNNr   )9r\   r]   r^   r   r_   rZ   rx   r   r   r6   r
   r~   r   r`   r   r   intr   bytesr%   r   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   r5   r)  r3   r0  __classcell__rh   s   @rY   rc   rc   {   s   38C= 3d 3@ 
 #		a EN	 	  
 !		a DM	 {  
 	"	a" 	" Q^" " 	<	a< 	< Q^<6  	 '+" #"&DH;?;?.2#  	   hsm$ EN D> tn 3- 
 U7:.?@A XeC$5678  eGCH-w678!" ucz*+#$ % (  	' '+  #"&DH;?;?.2#'' ' 	' ' ' hsm$' DM' D>' tn' 3-' 
' U7:.?@A' XeC$5678'  eGCH-w678!'" ucz*+#'$  !%' ',   	3 !"'+ #"&DH;?;?.2#33 SM3 SM	3 SM3 sm3 hsm$3 3 D>3 tn3 3-3 
$3 U7:.?@A3 XeC$56783  eGCH-w678!3" ucz*+#3$ x(899:%3j  FJ
 KO"EI#"&DH;?.2 xgc3h&7&@ ABC
 HU738#4dH#DEFG EN E$(? @@AB tn 3- U7:.?@A eGCH-w678 ucz*+    FJ#
 KO EI#"&DH;?.2## xgc3h&7&@ ABC#
 HU738#4dH#DEFG# DM# E$(? @@AB# tn# 3-# U7:.?@A# eGCH-w678# ucz*+# # #" FJ@
 KOEI#"&DH;?.2@@ xgc3h&7&@ ABC@
 HU738#4dH#DEFG@ @ E$(? @@AB@ tn@ 3-@ U7:.?@A@ eGCH-w678@ ucz*+@ \8L112@H ')#;?.2 $ hsm#$ tn	
 eGCH-w678 ucz*+  2  ;?.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 >   / c  <M 43 #3 ra   rc   c            %           e Zd ZdNd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dOdededefdZdedefdZe	 	 	 dPdddd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eee
d   f      dee   dee   d ed!eee
d"   ef      d#e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	 	 	 dPdddd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eee
d   f      dee   dee   d ed!eee
d"   ef      d#e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	 	 	 dQdddd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ee
d   f      dee   dee   d ee   d!eee
d"   ef      d#e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	 	 dRdddd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e
d   f      dee   de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!fd,       Z"e	 	 dRdddd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e
d   f      dee   de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!   fd-       Z"	 	 dRdddd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e
d   f      dee   de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"	 	 	 	 	 	 dSded/eeee   f   d0ee   d$eeeeef   ef      d%eeeef      d1ee   de#fd2Z$	 	 	 	 dTdedee   d$eeeeef   ef      d%eeeef      de%f
d3Z&eddd4ded5ed	e
d   de'fd6       Z(eddd4ded5ed	e
d   dee'   fd7       Z(ddd4ded5ed	edee'ee'   f   fd8Z(eddd4ded5ed	e
d   de'fd9       Z)eddd4ded5ed	e
d   dee'   fd:       Z)ddd4ded5ed	edee'ee'   f   fd;Z)e	 	 	 	 	 	 	 	 	 dUddded<ee   d=ee   d>ee*eef      d?ee*eef      dee   d@eeee+e   f      dee   dAeeeeef   ef      d*eeeeeef   ef         d	e
d   de'fdB       Z,e	 	 	 	 	 	 	 	 	 dUddded<ee   d=ee   d>ee*eef      d?ee*eef      dee   d@eeee+e   f      dee   dAeeeeef   ef      d*eeeeeef   ef         d	e
d   dee'   fdC       Z,	 	 	 	 	 	 	 	 	 dUddded<ee   d=ee   d>ee*eef      d?ee*eef      dee   d@eeee+e   f      dee   dAe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dDZ,dEeee-f   defdFZ.de/fdGZ0dede1fdHZ2dIedJede1fdKZ3dede4fdLZ5de6fdMZ7 xZ8S )VAsyncClientNr<   r=   c                 D    t        |   t        j                  |fi | y r[   )re   rZ   rf   r>  rg   s      rY   rZ   zAsyncClient.__init__  s    	GU&&77ra   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[   rj   rt   s        rY   rx   zAsyncClient._request_raw  s     @$$$d5f5
5ah 6    M!**//1::+A+ABL @454?@s1   B.< :< B.< B+5B'B++B.Fry   r{   rz   c                   K   y wr[   rF   r}   s        rY   r~   zAsyncClient._request  s         Tc                   K   y wr[   rF   r}   s        rY   r~   zAsyncClient._request        rB  c                   K   y wr[   rF   r}   s        rY   r~   zAsyncClient._request  s      $'rB  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r   )rR   rz   rl   rf   rm   rn   areadr-   ro   rp   aiter_linesr   r   rP   r   s	        rY   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rF   r   r   s   `` `` rY   r~   zAsyncClient._request  sJ       WnC)))4:6::@@BCC:s   +AAAr!  r"  c           	         K   | j                  t        ddt        ||      j                  d             d{   S 7 w)z
    Performs a web search

    Args:
      query: The query to search for
      max_results: The maximum number of results to return (default: 3)

    Returns:
      WebSearchResponse with the search results
    r   r$  r%  Tr   r   N)r~   r5   r4   r   r(  s      rY   r)  zAsyncClient.web_search  sM      ) 	

%     s   8A?Ar*  c                    K   | j                  t        ddt        |      j                  d             d{   S 7 w)r,  r   r-  r.  Tr   r   N)r~   r3   r2   r   r/  s     rY   r0  zAsyncClient.web_fetch  sH      (

%        7A >A r   r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r   r   r   c                   K   y wr[   rF   r   s                   rY   r   zAsyncClient.generate)  s     & rB  c                   K   y wr[   rF   r   s                   rY   r   zAsyncClient.generate>  s     & ),rB  c                   K   | j                  t        ddt        |||||||||	|
|||rt        t	        |            nd||      j                  d      |       d{   S 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                   rY   r   zAsyncClient.generateS  s     8 !-3tL()  	

%+     s   AA%A#A%r   r   r   c                   K   y wr[   rF   r   s              rY   r   zAsyncClient.chat  s      rB  c                   K   y wr[   rF   r   s              rY   r   zAsyncClient.chat  s      %(rB  c                   K   | j                  t        ddt        |t        t	        |            t        t        |            ||||||	|

      j                  d      |       d{   S 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              rY   r   zAsyncClient.chat  s}     ` nX./;u%&! 	

%!     s   A%A.'A,(A.r   r   r   c                    K   | j                  t        ddt        ||||||      j                  d             d {   S 7 wr   r   r   s          rY   r   zAsyncClient.embed  sY       	

%     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        rY   r   zAsyncClient.embeddings  sS      	
 	

%  
 
 
 
   :AAAr   r   c                   K   y wr[   rF   r   s       rY   r   zAsyncClient.pull  rD  rB  c                   K   y wr[   rF   r   s       rY   r   zAsyncClient.pull         ),rB  c          
         K   | j                  t        ddt        |||      j                  d      |       d{   S 7 w)r   r   r   r   Tr   r   Nr   r   s       rY   r   zAsyncClient.pull)  S       	

%  
 
 
 
rU  c                   K   y wr[   rF   r   s       rY   r   zAsyncClient.pushA  rD  rB  c                   K   y wr[   rF   r   s       rY   r   zAsyncClient.pushJ  rX  rB  c          
         K   | j                  t        ddt        |||      j                  d      |       d{   S 7 w)r   r   r   r   Tr   r   Nr   r   s       rY   r   zAsyncClient.pushS  rZ  rU  r   r   r   r   r   r   c                   K   y wr[   rF   r   s               rY   r   zAsyncClient.createk  s      rB  c                   K   y wr[   rF   r   s               rY   r   zAsyncClient.create|  s      ),rB  c                   K   | j                  t        ddt        ||||||||||	|
      j                  d      |       d{   S 7 w)r   r   r   r   Tr   r   Nr   r   s               rY   r   zAsyncClient.create  sk     *  	

%#     s   AAA	Ar   c                   K   t               }t        j                  d       d {   4 d {   }	 |j                  d       d {   }|sn|j	                  |       .d d d       d {    d|j                          }fd}| j                  dd|  |              d {    |S 7 7 7 k7 H# 1 d {  7  sw Y   XxY w7 #w)Nr   r   r   c                    K   t        j                  d       d {   4 d {   } 	 | j                  d       d {   }|sn| "d d d       d {    y 7 A7 :7 "7 # 1 d {  7  sw Y   y xY ww)Nr   r   )anyio	open_filer   )rv   r   r   s     rY   upload_bytesz-AsyncClient.create_blob.<locals>.upload_bytes  sz     tT22  ay))%+	   2 )   sf   A<AA<A!A<A' A#A'A<A%A<!A<#A'%A<'A9-A0.A95A<r   r   r   )r   rc  rd  r   r   r   rx   )rS   r   r   rv   r   r   re  s    `     rY   r   zAsyncClient.create_blob  s     I__T400    AffY''
	     y**,-.F 

Fk&$:LN

SSSM' 1  '       " Tsr   $CB2CB4CB:
B6B:$C/B80;C+C,C4C6B:8C:C CCCc                 L   K   | j                  t        dd       d {   S 7 wr  r  r  s    rY   r   zAsyncClient.list  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      rY   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       rY   r  zAsyncClient.copy  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     rY   r  zAsyncClient.show  sF     

%     rL  c                 L   K   | j                  t        dd       d {   S 7 wr  r  r  s    rY   r   zAsyncClient.ps  s*        rg  r[   r7  r1  r2  r3  r4  r5  r6  )9r\   r]   r^   r   r_   rZ   rx   r   r   r6   r
   r~   r   r`   r   r8  r5   r)  r3   r0  r   r   r9  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   @rY   r>  r>    s   88C= 8d 8@ 
 #		a EN	 	  
 !		a DM	 Q  
 	'	a' 	' Qa  !' ' 	D	aD 	D Qa  !D6C c BS * )9 &  	 '+"EI#"&DH;?;?.2#  	   hsm$ EN E$(? @@AB tn 3- 
 U7:.?@A XeC$5678  eGCH-w678!" ucz*+#$ % (  	, '+ EI#"&DH;?;?.2#,, , 	, , , hsm$, DM, E$(? @@AB, tn, 3-, 
, U7:.?@A, XeC$5678,  eGCH-w678!," ucz*+#,$ %&%, ,,   	2 !"'+EI#"&DH;?;?.2#22 SM2 SM	2 SM2 sm2 hsm$2 2 E$(? @@AB2 tn2 3-2 
$2 U7:.?@A2 XeC$56782  eGCH-w678!2" ucz*+#2$ }-=>>?%2h  FJ
 KO"EI#"&DH;?.2 xgc3h&7&@ ABC
 HU738#4dH#DEFG EN E$(? @@AB tn 3- U7:.?@A eGCH-w678 ucz*+    FJ(
 KO EI#"&DH;?.2(( xgc3h&7&@ ABC(
 HU738#4dH#DEFG( DM( E$(? @@AB( tn( 3-( U7:.?@A( eGCH-w678( ucz*+( \"( (" FJA
 KOEI#"&DH;?.2AA xgc3h&7&@ ABCA
 HU738#4dH#DEFGA A E$(? @@ABA tnA 3-A U7:.?@AA eGCH-w678A ucz*+A \=667AJ ')#;?.2 $ hsm#$ tn	
 eGCH-w678 ucz*+  2  ;?.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 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' ' }-=>>?'RE#t)$4  ., 
 
 
s   c l  ra   r>  r   r=   c              #   b   K   | xs g D ]"  }t        |t              r|nt        |       $ y w)N)value)
isinstancer%   )r   images     rY   r   r     s1     | DeeU+%U1CCDs   -/r   c              #      K   | xs g D ]`  }t        j                  t        |      j                         D ci c]$  \  }}|s	||dk(  rt	        t        |            n|& c}}       b y c c}}w w)Nr   )r'   model_validatedictrM   r   r   )r   messagerV   rW   s       rY   r   r     sg     R g

 
 DHMDWDWDY_DAq]^q1=$|A
a7_ _s   5A3
A-A- A3r   c              #   |   K   | xs g D ]/  }t        |      rt        |      nt        j                  |       1 y wr[   )callabler   r1   rq  )r   unprocessed_tools     rY   r   r     s@     +2 ~8@AQ8R
"#3
4X\XkXkl|X}}~s   :<sc                     t        | t        t        f      r 	 t        |       x}j                         r|S 	 y y # t        $ r Y y w xY wr[   )rn  r_   r   exists	Exception)rw  ps     rY   _as_pathr|    sO    C;
Aw,!			  
! 
  
		
s   8 	AAr<   c                    | xs dd}} | j                  d      \  }}}|sd| }}n|dk(  rd}n|dk(  rd}t        j                  j                  | d|       }|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hostnameportrn  	ipaddress
ip_addressIPv6Addressr'  r   strip)r<   r  scheme_hostportsplitr   s          rY   rQ   rQ     s   @ zr5$u-&!X	tHFDD
,,

6(#hZ 8
9%		&;$		t$)&&t,i.C.CDa[d ZZc""T"XSavQtf--83tfAdV	$$ 
 s   93C   	C,+C,r[   )Pr  r   rN   rH   sysurllib.parser  hashlibr   r   pathlibr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   rc  pydantic.json_schemar   ollama._utilsr   version_infor   r   collections.abc	importlibr   versionrG   PackageNotFoundErrorrf   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   r3   r4   r5   r6   r8   rs   rc   r>  r   r_   r   r   r|  rQ   rF   ra   rY   <module>r     s     	  
         0 2f,,5    *+        > CL' 'T V Z D* D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%g' $$ +s   >E) )E=<E=