
    	]j(                     F   d 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 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  e
       Z ej4                  e      Z e edd            Z e edd            Z e edd            Z  e edd            Z! e edd            Z" e edd            Z# e edd            Z$ e edd            Z% e edd            Z&dZ'dZ(dZ)dZ*dZ+dZ,d Z-d!Z. G d" d#e/      Z0 G d$ d%      Z1 G d& d'e0      Z2d( Z3y))zThis file and its contents are licensed under the Apache License 2.0. Please see the included NOTICE for copyright information and LICENSE for a copy of the license.
    N)flag_set)	load_func)get_git_version)ExportDataSerializer)settings)AnonymousUser)Count)HTTPAdapter)HTTPBasicAuth)get_envML_CONNECTION_TIMEOUT   ML_TIMEOUT_DEFAULTd   ML_TIMEOUT_TRAIN   ML_TIMEOUT_PREDICTML_TIMEOUT_HEALTHML_TIMEOUT_SETUP   ML_TIMEOUT_DUPLICATE_MODELML_TIMEOUT_DELETEML_TIMEOUT_TRAIN_JOB_STATUSpredicthealthvalidatesetupduplicate_modeldelete
job_statusversionsc                   d    e Zd ZdZddexs dz   iZ	 ddZd Zd Ze	d	        Z
d
 Zd Zd Zd Zy)BaseHTTPAPI   z
User-Agentzheartex/ Nc                 4   || _         |xs t        | _        |xs t        | _        |xs i | _        || _        |j                  d      |j                  d      f| _        |xs | j                  | _
        | j                         | j                         i| _        y )Nbasic_auth_userbasic_auth_pass)_urlTIMEOUT_DEFAULT_timeoutCONNECTION_TIMEOUT_connection_timeout_headers_auth_methodget_basic_authMAX_RETRIES_max_retries_session_keycreate_session	_sessions)selfurltimeoutconnection_timeoutmax_retriesheadersauth_methodkwargss           G/root/env/lib/python3.12/site-packages/label_studio/ml/api_connector.py__init__zBaseHTTPAPI.__init__4   s     	2?#5#K9K 2' #JJ'896::FW;XY';4+;+;++-t/B/B/DE    c                 Z   t        j                         }|j                  j                  | j                         |j                  j                  | j
                         |j                  dt        | j                               |j                  dt        | j                               |S )Nzhttp://)r;   zhttps://)	requestsSessionr<   updateHEADERSr.   mountr
   r3   )r7   sessions     r?   r5   zBaseHTTPAPI.create_sessionC   ss    ""$t||,t}}-i9J9J!KLj+$:K:K"LMrA   c                 *    t        j                         S N)osgetpidr7   s    r?   r4   zBaseHTTPAPI._session_keyK   s    yy{rA   c                     | j                         }|| j                  v r| j                  |   S | j                         }|| j                  |<   |S rJ   )r4   r6   r5   )r7   keyrH   s      r?   httpzBaseHTTPAPI.httpN   sL    !$.. >>#&&))+G")DNN3NrA   c                     d|vr| j                   | j                  f|d<   | j                  d   r%| j                  d   rt        | j                   |d<   y t	        |d   t
              st	        |d   t              r| j                   |d   f|d<   y y )Nr9   r   r   auth)r-   r+   r1   r   
isinstancefloatint)r7   r>   s     r?   _prepare_kwargszBaseHTTPAPI._prepare_kwargsX   s    F" $ 8 8$-- GF9A4#3#3A#6*D,<,<=F6N y)51Zy@QSV5W!%!9!96);L MF9 6XrA   c                 d    | j                  |        | j                  j                  |g|i |S rJ   )rV   rP   request)r7   methodargsr>   s       r?   rX   zBaseHTTPAPI.requestd   s1    V$ tyy  9$9&99rA   c                 .     | j                   dg|i |S )NGETrX   r7   rZ   r>   s      r?   r0   zBaseHTTPAPI.geth   s    t||E3D3F33rA   c                 .     | j                   dg|i |S )NPOSTr]   r^   s      r?   postzBaseHTTPAPI.postk   s    t||F4T4V44rA   )NNNNN)__name__
__module____qualname__r2   versionrF   r@   r5   r4   propertyrP   rV   rX   r0   ra    rA   r?   r#   r#   .   s\    KjGMr2G
 gkF  
N:45rA   r#   c                   8    e Zd ZdZddZed        Zed        Zy)MLApiResultz8
    Class for storing the result of ML API request
    Nc                 h    || _         || _        |i n|| _        |i n|| _        || _        || _        y rJ   r8   rX   responser<   typestatus_code)r7   r8   rX   rl   r<   rm   rn   s          r?   r@   zMLApiResult.__init__t   s:    &.H$_r'	&rA   c                      | j                   dk(  S Nerror)rm   rM   s    r?   is_errorzMLApiResult.is_error|   s    yyG##rA   c                 8    | j                   j                  d      S rp   )rl   r0   rM   s    r?   error_messagezMLApiResult.error_message   s    }}  ))rA   )r%   r%   NNok   )rb   rc   rd   __doc__r@   rf   rr   rt   rg   rA   r?   ri   ri   o   s4    ' $ $ * *rA   ri   c                   z     e Zd ZdZ fdZd ZddZd ZddZddZ	ddZ
d	 Zd
 ZddZd Zd Zd Zd Z xZS )MLApiz$
    Class for ML API connector
    c                 :    t        t        | 
  di | d| _        y )N
   rg   )superry   r@   _validate_request_timeout)r7   r>   	__class__s     r?   r@   zMLApi.__init__   s    eT#-f-)+&rA   c                 t    | j                   }|d   dk7  r|dz  }t        j                  j                  ||      S )N/)r)   urllibparseurljoin)r7   
url_suffixr8   s      r?   _get_urlzMLApi._get_url   s6    iir7c>3JC||##C44rA   c           	         |dv sJ | j                  |      }|xs i }t        | j                  j                        }d }		 |dk(  r | j                  |||d|}	n | j
                  |d|i|}	|	j                          |	j                  }	 |	j                         }	t        |||	||
      S # t        j                  j                  $ r8}
t        |
      }|	|	j                  nd}t        ||d|i|d|      cY d }
~
S d }
~
ww xY w# t        $ r1}
t        ||t        |
      |	j                  d|d|	      cY d }
~
S d }
~
ww xY w)N)r`   r\   r`   )r8   jsonr8   r   rq   )rn   )rq   rl   rk   )r8   rX   rl   r<   rn   )r   dictrP   r<   ra   r0   raise_for_statusrC   
exceptionsRequestExceptionstrrn   ri   r   
ValueErrorcontent)r7   r   rX   verboserY   rZ   r>   r8   r<   rl   eerror_stringrn   s                r?   _requestzMLApi._request   sV   (((mmJ'-Rtyy(()		q$499T7LVL#488d==f=%%'
 **
	}}H sGhPWepqq# ""33 	qq6L2:2F(..AKsGg|-Dgwdopp	q  	#&q6x7G7GH' 	s<    ?B, D ,D	-C<6D<D	D>&D93D>9D>c                 j    t        |j                  j                               }|j                   d| S )N.)rU   
created_at	timestampid)r7   projecttime_ids      r?   _create_project_uidzMLApi._create_project_uid   s0    g((2245**Qwi((rA   c                 :   t               }t        d|      rId t        t        j                  d         |      j
                  d}| j                  d|dt              S |j                  j                  t        d	      
      j                  d      }t        |d      j
                  }t        j                  t        |       d       || j!                  |      |j"                  |j$                  |j&                  dd}| j                  d|dt              S )N>ff_back_dev_1417_start_training_mlbackend_webhooks_250122_longSTART_TRAININGr   )instance)actionr   webhookFr   r9   annotations)num_annotationsr   )num_annotations__gtT)manyz< tasks with annotations are sent to ML backend for training.)loginpassword)r   r   label_configparamstrain)r   r   r   r   WEBHOOK_SERIALIZERSdatar   TIMEOUT_PREDICTtasksannotater	   filterr   loggerdebuglenr   r   task_data_logintask_data_password)r7   r   use_ground_truthuserrX   r   	tasks_sers          r?   r   zMLApi.train   s    TVZ[*M9X%A%A)%LMW^_ddG ==GUO=\\ MM**5;O*PWWlmWnE,U>CCILLC	N++ghi(33G< ' 4 4$+$;$;IcIcd	G =='5/=ZZrA   c                 v    || j                  |      |j                  |j                  |j                  |dd}|S )N)r   r   context)r   r   r   r   )r   r   r   r   r7   r   r   r   rX   s        r?   _prep_prediction_reqzMLApi._prep_prediction_req   sD    //8#00 00#66"		
 rA   c                 d    | j                  |||      }| j                  t        |dt              S )N)r   Fr   )r   r   PREDICT_URLr   r   s        r?   make_predictionszMLApi.make_predictions   s0    ++E7G+L}}['5/}ZZrA   c                 :    | j                  t        dt              S )Nr\   )rY   r9   )r   
HEALTH_URLTIMEOUT_HEALTHrM   s    r?   r   zMLApi.health   s    }}Z~}NNrA   c                 J    | j                  t        d|i| j                        S )NconfigrX   r9   )r   VALIDATE_URLr}   )r7   r   s     r?   r   zMLApi.validate   s"    }}\Hf3EtOmOm}nnrA   c           	         | j                  t        | j                  |      |j                  t        j
                  rt        j
                  ndt        j                  z   |j                  j                  j                  |dt              S )Nzhttp://localhost:)r   schemahostnameaccess_tokenextra_paramsr   )r   	SETUP_URLr   r   r   HOSTNAMEINTERNAL_PORT
created_by
auth_tokenrO   TIMEOUT_SETUP)r7   r   r   r>   s       r?   r   zMLApi.setup   st    }}33G<!..191B1BH--I\_g_u_uIu ' 2 2 = = A A , "  

 
	
rA   c                 |    | j                  t        | j                  |      | j                  |      dt              S )N)project_srcproject_dstr   )r   DUPLICATE_URLr   TIMEOUT_DUPLICATE_MODEL)r7   r   r   s      r?   r   zMLApi.duplicate_model   sA    }}#77D#77D ,  
 	
rA   c                 \    | j                  t        d| j                  |      it              S )Nr   r   )r   
DELETE_URLr   TIMEOUT_DELETEr7   r   s     r?   r   zMLApi.delete   s0    }}D,D,DW,M NXf  
 	
rA   c                 R    | j                  t        d|j                  it              S )Njobr   )r   JOB_STATUS_URLjob_idTIMEOUT_TRAIN_JOB_STATUS)r7   	train_jobs     r?   get_train_job_statuszMLApi.get_train_job_status  s#    }}^eY=M=M5NXp}qqrA   c                 ^    | j                  t        d| j                  |      it        d      S )Nr   r\   )rX   r9   rY   )r   VERSIONS_URLr   r   r   s     r?   get_versionszMLApi.get_versions  s3    }}9d.F.Fw.O"PZgpu  
 	
rA   )NTr`   )FrJ   )rb   rc   rd   rw   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r~   s   @r?   ry   ry      sU    ,5r@)[0[Oo



r
rA   ry   c                     | j                   y | j                   j                  y t        | j                   j                  j                  | j                   j                  j                        S )N)r8   r9   )ml_backend_active_connection
ml_backendry   r8   r9   )r   s    r?   
get_ml_apir     s]    ++3++66>00;;??44??GG rA   )4rw   loggingrK   r   rC   core.feature_flagsr   core.utils.commonr   core.versionr   data_export.serializersr   django.confr   django.contrib.auth.modelsr   django.db.modelsr	   requests.adaptersr
   requests.authr   label_studio.core.utils.paramsr   re   	getLoggerrb   r   rT   r,   r*   TIMEOUT_TRAINr   r   r   r   r   r   r   r   r   r   r   r   r   r   objectr#   ri   ry   r   rg   rA   r?   <module>r      sH    	   ' ' ( 8   4 " ) ' 2

			8	$7#:A>?  4c:;g0"56 4c:;w2A67g0!45(Da HI w2A67 )F!JK  
	!
>5& >5B* *,E
K E
PrA   