
    g\                        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Zd dlZd dl	m
Z
 d dlmZ ddlmZmZmZmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlm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'  ejP                  e)      Z* e!        ejV                  Z,dejZ                  de.dej^                  ejZ                  gejZ                  f   ddfdZ0d"dZ1de.de.dejZ                  fdZ2de.dejZ                  fdZ3d Z4dejj                  e.   dejj                  e.   fdZ6 G d dee      Z7 G d d ee      Z8dejj                  e.   fd!Z9y)#    N)ThreadPoolExecutor)	Tokenizer)DetokenizeResponse)TokenizeResponse   )EmbedResponseEmbedInputTypeEmbeddingTypeEmbedRequestTruncate)
BaseCohereAsyncBaseCohereOMIT)embed_batch_size)RequestOptions)ClientEnvironment)
CacheMixin)
tokenizers)run_overrides)wait
async_waitmerge_embed_responsesSyncSdkUtilsAsyncSdkUtilsobjmethod_namecheck_fnreturnc                    t        | |      dt        j                  dt        j                  dt        j                  ffd}dt        j                  dt        j                  dt        j                  ffd}|}t        j                        r|}j
                  |_        j                  |_        t        | ||       y )Nargskwargsr   c                  $     | i |  | i |S N r   r    r   methods     B/var/www/openai/venv/lib/python3.12/site-packages/cohere/client.py_wrappedzvalidate_args.<locals>._wrapped!   s     $!&!t&v&&    c                  @   K    | i |  | i | d {   S 7 wr"   r#   r$   s     r&   _async_wrappedz%validate_args.<locals>._async_wrapped%   s*     $!&!T,V,,,,s   )getattrtypingAnyasyncioiscoroutinefunction__name____doc__setattr)r   r   r   r'   r*   wrappedr%   s     `   @r&   validate_argsr4      s    S+&F'

 'fjj 'VZZ '-FJJ -&** - -
 G""6* GnnGOCg&r(   c                  @    |j                  d      du rt        d      y )NstreamTzcSince python sdk cohere==5.0.0, you must now use chat_stream(...) instead of chat(stream=True, ...))get
ValueError)r   r    s     r&   throw_if_stream_is_truer9   3   s(    zz(t#q
 	
 $r(   fn_namenew_fn_namec                       fd}|S )z4
    This method is moved. Please update usage.
    c                  (    t        d d d      )N-Since python sdk cohere==5.0.0, the function z(...) has been moved to zi(...). Please update your code. Issues may be filed in https://github.com/cohere-ai/cohere-python/issues.r8   )r   r    r:   r;   s     r&   fnzmoved_function.<locals>.fn?   s-    ;G9D\]h\i jq r
 	
r(   r#   )r:   r;   r@   s   `` r&   moved_functionrA   :   s    

 Ir(   c                       fd}|S )z9
    This method is deprecated. Please update usage.
    c                  "    t        d d      )Nr>   z}(...) has been deprecated. Please update your code. Issues may be filed in https://github.com/cohere-ai/cohere-python/issues.r?   )r   r    r:   s     r&   r@   zdeprecated_function.<locals>.fnM   s$    ;G9 Eq r
 	
r(   r#   )r:   r@   s   ` r&   deprecated_functionrD   H   s    

 Ir(   c                     dt         dt        j                  t         t        j                  f   dt        ffd fd} fd}|}t        j                         r|} j                  |_         j                  |_        |S )Ndeprecated_kwargr    r   c                 ^    d| v r%| j                  dd      \  }}||v r |||         S | |v S )N.r   )split)rF   r    keyrestcheck_kwargs       r&   rL   z1experimental_kwarg_decorator.<locals>.check_kwargZ   sE    ""(..sA6ICf}"4556))r(   c                  X     |      rt         j                  d d        | i |S NzThe `z` parameter is an experimental feature and may change in future releases.
To suppress this warning, set `log_warning_experimental_features=False` when initializing the client.loggerwarningr   r    rL   rF   funcs     r&   r'   z.experimental_kwarg_decorator.<locals>._wrappeda   sA    '0NN() *x x T$V$$r(   c                  t   K    |      rt         j                  d d        | i | d {   S 7 wrN   rO   rR   s     r&   r*   z4experimental_kwarg_decorator.<locals>._async_wrappedi   sK     '0NN() *x x 4*6****s   .868)	strr,   Dictr-   boolr.   r/   r0   r1   )rS   rF   r'   r*   wraprL   s   ``   @r&   experimental_kwarg_decoratorrY   X   sn    *c *6;;sFJJ3O *TX *%+ D""4(MMDM<<DLKr(   base_urlc                 @    | d| v sd| v r| j                  dd      S | S y )Nz
cohere.comz	cohere.aiz/v1 )replace)rZ   s    r&   fix_base_urlr^   {   s2    8#{h'>##E2..r(   c                       e Zd ZU eed<   	 d\ ej                  d      ej                  ddd ed      ddde	j                  e	j                  ee	j                  g ef   f      de	j                  e   d	ed
e	j                  e   de	j                  e   de	j                  ej                      dedefdZ e       Zd Zd ZeZeeeeeedddde	j                  e	j2                  e      de	j                  e	j2                  e      de	j                  e   de	j                  e   de	j                  e	j2                  e      de	j                  e   de	j                  e   de	j                  e   defdZ	  e d      Z!e"ed<    e d      Z#e"ed<    e d      Z$e"ed<    e d       Z%e"ed <    e d!      Z&e"ed!<    e d"      Z'e"ed"<    e d#      Z(e"ed#<    e d$      Z)e"ed$<    e d%      Z*e"ed%<    e+d&d'      Z,e"ed&<    e+d(d)      Z-e"ed(<    e+d*d+      Z.e"ed*<    e+d,d-      Z/e"ed,<    e+d.d/      Z0e"ed.<    e+d0d1      Z1e"ed0<    e d2      Z2e"ed2<    e d3      Z3e"ed3<    e d4      Z4e"ed4<    e d5      Z5e"ed5<    e d6      Z6e"ed6<    e d7      Z7e"ed7<    e+d8d9      Z8e"ed8<    e+d:d;      Z9e"ed:<    e+d<d=      Z:e"ed<<    e+d>d?      Z;e"ed><    e+d@d1      Z<e"ed@<    e dA      Z=e"edA<    e dB      Z>e"edB<    e dC      Z?e"edC<    e dD      Z@e"edD<    e dE      ZAe"edE<    e dF      ZBe"edF<    e dG      ZCe"edG<    e dH      ZDe"edH<    e+dIdJ      ZEe"edI<    e+dKdL      ZFe"edK<    e+dMdN      ZGe"edM<    e+dOdP      ZHe"edO<    e+dQdR      ZIe"edQ<    e+dSdT      ZJe"edS<   dddUdVedede	j                  e   dWedeKf
 fdXZLdddUdYe	j2                  eM   dede	j                  e   dWe	j                  e   deNf
 fdZZOdedePfd[ZQ xZRS )]Client	_executorN
CO_API_URL@   TrZ   environmentclient_nametimeouthttpx_clientthread_pool_executor!log_warning_experimental_featuresapi_keyrZ   re   rf   rg   rh   ri   rj   c          	         |
t               }t        |      }|| _        t        j                  | ||||||       t        | dt               |r7t        | j                  d      | _        t        | j                  d      | _	        y y N)rZ   re   rf   tokenrg   rh   chatzresponse_format.schema)
_get_api_key_from_environmentr^   ra   r   __init__r4   r9   rY   ro   chat_stream	selfrk   rZ   re   rf   rg   rh   ri   rj   s	            r&   rq   zClient.__init__   s     ?35G)-##%	
 	dF$;<,4TYY@XYDI;D<L<LNfgD -r(   c                     | S r"   r#   rt   s    r&   	__enter__zClient.__enter__   s    r(   c                 `    | j                   j                  j                  j                          y r"   )_client_wrapperrh   closert   exc_type	exc_value	tracebacks       r&   __exit__zClient.__exit__   s     ))66<<>r(   textsimagesmodel
input_typeembedding_typestruncaterequest_optionsbatchingr   r   r   r   r   r   r   r   r   c          
      j    |du s|t         urt        j                   ||      S |t         ur||ng }	t        dt	        |	      t
              D 
cg c]  }
|	|
|
t
        z     }}
 j                  j                   fd|      D cg c]  }| }}t        |      S c c}
w c c}w )NFr   r   r   r   r   r   r   r   c           	      <    t        j                  |       S )Nr   r   r   r   r   r   )r   embed)
text_batchr   r   r   r   rt   r   s    r&   <lambda>zClient.embed.<locals>.<lambda>   s%    :#3#3$)$3%$3$r(   )	r   r   r   rangelenr   ra   mapr   )rt   r   r   r   r   r   r   r   r   textsarritexts_batchesresponse	responsess   `  `````      r&   r   zClient.embed   s     ud 2##% /! /	 	 493DIZ%`bEJ1cRZm]mEnoEn!a*:&:;Eno !NN..  
  	 
  %Y//% p
s   B+	B0check_api_keyloglikelihoodbatch_generatecodebookbatch_tokenizebatch_detokenizedetect_languagegenerate_feedbackgenerate_preference_feedbackcreate_dataset.datasets.createget_dataset.datasets.getlist_datasets.datasets.listdelete_dataset.datasets.deleteget_dataset_usage.datasets.get_usagewait_for_dataset.wait_check_response_requestcreate_cluster_jobget_cluster_joblist_cluster_jobswait_for_cluster_jobcreate_embed_job.embed_jobs.createlist_embed_jobs.embed_jobs.listget_embed_job.embed_jobs.getcancel_embed_job.embed_jobs.cancelwait_for_embed_jobcreate_custom_modelwait_for_custom_model_upload_dataset_create_signed_urlget_custom_modelget_custom_model_by_nameget_custom_model_metricslist_custom_modelscreate_connector.connectors.createupdate_connector.connectors.updateget_connector.connectors.getlist_connectors.connectors.listdelete_connector.connectors.deleteoauth_authorize_connector.connectors.o_auth_authorizer   offlinetextr   c                    |xs i }|r&	 t        j                  | ||      }t        |g       S t
        |   |||      S # t        $ r  |j	                  di       |d<   d|d   d<   Y :w xY w)N)r   r   tokenstoken_stringsadditional_headersoffline_tokenizer_failedsdk-api-warning-messager   r   r   )local_tokenizerslocal_tokenizer   	Exceptionr7   supertokenizert   r   r   r   r   optsr   	__class__s          r&   r   zClient.tokenize  s      /4"c)88DPUV'vRHH
 wTMM	  c-1XX6JB-O)*Hb)*+DEcs   $A &A+*A+r   c                    |xs i }|r%	 t        j                  | ||      }t        |      S t
        |   |||      S # t        $ r  |j	                  di       |d<   d|d   d<   Y :w xY wN)r   r   )r   r   r   r   )r   r   r   )r   local_detokenizer   r   r7   r   
detokenizert   r   r   r   r   r   r   r   s          r&   r   zClient.detokenize%  s      /4"c'88USYZ)t44 w!ud!SS  c-1XX6JB-O)*Hb)*+DEcs   #A &A*)A*c                .    t        j                  | |      S )K
        Returns a Hugging Face tokenizer from a given model name.
        )r   get_hf_tokenizerrt   r   s     r&   fetch_tokenizerzClient.fetch_tokenizer<  s      00u==r(   r"   )Sr0   
__module____qualname__r   __annotations__osgetenvr   
PRODUCTIONr,   OptionalUnionrU   Callablefloathttpxr`   rW   rq   r   utilsrw   r   r   r   Sequencer	   r
   r   r   r   r   rD   r   Neverr   r   r   r   r   r   r   r   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   intr   r   r   r   __classcell__r   s   @r&   r`   r`      sl   !! QU h *3<)@):)E)E,0*.6:3Eb3I26 hc6??2s73K.K!LM h //#&	 h
 ' h __S) h ' h ooell3 h 1 h ,0 hD NE? D
 8<8<&*6:KO:>;?*.,0 vs34,0  45	,0
 s#,0 OON3,0  )GH,0 //"67,0  8,0 //$',0 
,0\ /?M5?.?M5?/0@ANEA)*5He5/0@ANEA12DEeE01BCOUC23FGuG*=>\*] %]*+;=OPNEP'GKG)/;KLM5L*+;=OPNEP-.ACXYuY,-?IeI01BCOUC)*5He5 34H II01BCOUC23FGuG"56L"M%M,-?AUVeV+,=?QROUR)/;LMM5M,-?AUVeV ./CW MM!45J!KK#67N#O5O01BCOUC 34H II12DEeE&9:T&UeU&9:T&UeU 34H II,-?AUVeV,-?AUVeV)/;LMM5M+,=?QROUR,-?AUVeV'56QSq'rur <@N N 	N
  8N N 
N6 <@)-T $T 	T
  8T &T 
T.> >	 >r(   r`   c                       e Zd ZU eed<   	 d\ ej                  d      ej                  ddd ed      ddde	j                  e	j                  ee	j                  g ef   f      de	j                  e   d	ed
e	j                  e   de	j                  e   de	j                  ej                      dedefdZ e       Zd Zd ZeZeeeeeedddde	j                  e	j4                  e      de	j                  e	j4                  e      de	j                  e   de	j                  e   de	j                  e	j4                  e      de	j                  e   de	j                  e   de	j                  e   defdZ 	  e!d      Z"e#ed<    e!d      Z$e#ed<    e!d      Z%e#ed<    e!d       Z&e#ed <    e!d!      Z'e#ed!<    e!d"      Z(e#ed"<    e!d#      Z)e#ed#<    e!d$      Z*e#ed$<    e!d%      Z+e#ed%<    e,d&d'      Z-e#ed&<    e,d(d)      Z.e#ed(<    e,d*d+      Z/e#ed*<    e,d,d-      Z0e#ed,<    e,d.d/      Z1e#ed.<    e,d0d1      Z2e#ed0<    e!d2      Z3e#ed2<    e!d3      Z4e#ed3<    e!d4      Z5e#ed4<    e!d5      Z6e#ed5<    e!d6      Z7e#ed6<    e!d7      Z8e#ed7<    e,d8d9      Z9e#ed8<    e,d:d;      Z:e#ed:<    e,d<d=      Z;e#ed<<    e,d>d?      Z<e#ed><    e,d@d1      Z=e#ed@<    e!dA      Z>e#edA<    e!dB      Z?e#edB<    e!dC      Z@e#edC<    e!dD      ZAe#edD<    e!dE      ZBe#edE<    e!dF      ZCe#edF<    e!dG      ZDe#edG<    e!dH      ZEe#edH<    e,dIdJ      ZFe#edI<    e,dKdL      ZGe#edK<    e,dMdN      ZHe#edM<    e,dOdP      ZIe#edO<    e,dQdR      ZJe#edQ<    e,dSdT      ZKe#edS<   dddUdVedede	j                  e   dWe	j                  e   deLf
 fdXZMdddUdYe	j4                  eN   dede	j                  e   dWe	j                  e   deOf
 fdZZPdedeQfd[ZR xZSS )]AsyncClientra   Nrb   rc   Trd   rk   rZ   re   rf   rg   rh   ri   rj   c          	         |
t               }t        |      }|| _        t        j                  | ||||||       t        | dt               |r7t        | j                  d      | _        t        | j                  d      | _	        y y rm   )
rp   r^   ra   r   rq   r4   r9   rY   ro   rr   rs   s	            r&   rq   zAsyncClient.__init__F  s     ?35G)-  ##%	
 	dF$;<,4TYY@XYDI;D<L<LNfgD -r(   c                    K   | S wr"   r#   rv   s    r&   
__aenter__zAsyncClient.__aenter__l  s     s   c                 |   K   | j                   j                  j                  j                          d {    y 7 wr"   )ry   rh   acloser{   s       r&   	__aexit__zAsyncClient.__aexit__o  s*     ""//<<CCEEEs   2<:<r   r   r   r   r   r   r   r   r   r   c                  K   |du s|t         ur%t        j                  | |||||||       d {   S |t         ur||ng }	t        dt	        |	      t
              D 
cg c]  }
|	|
|
t
        z     }}
t        j                  t        j                  t           t        j                  |D cg c]  }t        j                  | ||||||        c}  d {         }t        |      S 7 c c}
w c c}w 7 w)NFr   r   r   )r   r   r   r   r   r   r,   castListr   r.   gatherr   )rt   r   r   r   r   r   r   r   r   r   r   r   r   r   s                 r&   r   zAsyncClient.embedt  s     ud 2(..% /! /	 	 	 493DIZ%`bEJ1cRZm]mEnoEn!a*:&:;EnoKKKK&.. '4 '4
 $))(##-(7!)(7 '4 
	$ %Y//A	 p
s9   -C7C).C7C+1:C7+#C0C7C5
C7+C7r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                  K   |xs i }|r.	 t        j                  | ||       d {   }t        |g       S t
        |   |||       d {   S 7 +# t        $ r  |j	                  di       |d<   d|d   d<   Y Dw xY w7 2w)N)r   r   r   r   r   r   r   )r   async_local_tokenizer   r   r7   r   r   r   s          r&   r   zAsyncClient.tokenize  s       /4"c/DDTQV]abb'vRHH
 W%4ud%SSS c c-1XX6JB-O)*Hb)*+DEc TsC   	BA AA BBBA &A?<B>A??Br   c                
  K   |xs i }|r-	 t        j                  | ||       d {   }t        |      S t
        |   |||       d {   S 7 *# t        $ r  |j	                  di       |d<   d|d   d<   Y Dw xY w7 2wr   )r   async_local_detokenizer   r   r7   r   r   r   s          r&   r   zAsyncClient.detokenize  s       /4"c-DDTQV_eff)t44
 W'vUTX'YYY g c-1XX6JB-O)*Hb)*+DEc ZsC   	BA AA BBBA &A>;B=A>>Bc                J   K   t        j                  | |       d{   S 7 w)r   N)r   async_get_hf_tokenizerr   s     r&   r   zAsyncClient.fetch_tokenizer  s!      &<<T5IIIIs   #!#r"   )Tr0   r   r   r   r   r   r   r   r   r,   r   r   rU   r   r   r   r   rW   rq   r   r   r  r  r   r   r   r   r	   r
   r   r   r   r   rD   r   r   r   r   r   r   r   r   r   r   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r&   r   r   C  s{   !! QU h *3<)@):)E)E,0*.;?3Eb3I26 hc6??2s73K.K!LM h //#&	 h
 ' h __S) h ' h ooe&7&78 h 1 h ,0 hD OEF D
 8<8<&*6:KO:>;?*..0 vs34.0  45	.0
 s#.0 OON3.0  )GH.0 //"67.0  8.0 //$'.0 
.0` /?M5?.?M5?/0@ANEA)*5He5/0@ANEA12DEeE01BCOUC23FGuG*=>\*] %]*+;=OPNEP'GKG)/;KLM5L*+;=OPNEP-.ACXYuY,-?IeI01BCOUC)*5He5 34H II01BCOUC23FGuG"56L"M%M,-?AUVeV+,=?QROUR)/;LMM5M,-?AUVeV ./CW MM!45J!KK#67N#O5O01BCOUC 34H II12DEeE&9:T&UeU&9:T&UeU 34H II,-?AUVeV,-?AUVeV)/;LMM5M+,=?QROUR,-?AUVeV'56QSq'rur <@)-T T 	T
  8T &T 
T4 <@)-Z $Z 	Z
  8Z &Z 
Z*Jc Ji Jr(   r   c                  T    t        j                  dt        j                  d            S )z
    Retrieves the Cohere API key from specific environment variables.
    CO_API_KEY is preferred (and documented) COHERE_API_KEY is accepted (but not documented).
    
CO_API_KEYCOHERE_API_KEY)r   r   r#   r(   r&   rp   rp     s    
 99\299-=#>??r(   )r   N):r.   r   r,   concurrent.futuresr   r   r   loggingr    cohere.types.detokenize_responser   cohere.types.tokenize_responser   r\   r   r	   r
   r   base_clientr   r   r   configr   corer   re   r   manually_maintained.cacher   manually_maintainedr   	overridesr   r   r   r   r   r   r   	getLoggerr0   rP   NoReturnr   r-   rU   r   r4   r9   rA   rD   rY   r   r^   r`   r   rp   r#   r(   r&   <module>r     sJ    	  1     ? ; P P : : $   * 1 ? $ W W			8	$  	'vzz ' 'vPVPZPZ|]c]g]gOg?h 'mq '*
C c fjj     F6??3/ FOOC4H }>Z }>@|J/: |J~@vs'; @r(   