
    j|                     N   d dl Z d dlmZmZ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mZ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$m%Z%m&Z&m'Z'm(Z(m)Z) d d
l*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3  ede4d          Z5de6fdZ7de8de9dz  fdZ:de8de9de9fdZ;de9de9fdZ<de9de9fdZ=de9de9fdZ>de9de9fdZ?de9de9fdZ@de9fdZAe5B                    d          d             ZCe5B                    d          d             ZDe5B                    d           d!             ZEe5B                    d"          d#             ZFe5G                    d$          d%e8fd&            ZHe5G                    d'          d(e8fd)            ZIe5G                    d*          d(e8fd+            ZJe5B                    d,          de8fd-            ZKe5B                    d.          de8fd/            ZLe5B                    d0          de8fd1            ZMe5B                    d2          de8d3e8fd4            ZNe5G                    d5          de8fd6            ZOe5B                    d7          d8             ZPe5B                    d9          de8fd:            ZQe5G                    d          d;             ZRe5B                    d<          de8fd=            ZSe5G                    d          d>             ZTe5G                    d?          de8fd@            ZUe5G                    dA          de8fdB            ZVe5B                    dC          de8fdD            ZWe5B                    dE          de8dFe8fdG            ZXe5G                    dE          de8dFe8fdH            ZYe5G                    dI          de8dFe8fdJ            ZZe5G                    dK          de8fdL            Z[e5G                    dM          de8fdN            Z\e5B                    dO          de8dFe8fdP            Z]dS )Q    N)	Blueprintjsonifyrender_templaterequest	send_fileurl_for)	MODEL_DIRget_upload_model_optionsloggerresolve_job)load_result_manifest)auto_annotate_dataset_assets)get_auto_annotate_job_snapshot list_auto_annotate_job_snapshotsstart_auto_annotate_job)attach_recent_assetscreate_datasetget_dataset_assetget_datasetimport_result_assets_to_datasetimport_zip_to_datasetload_asset_annotationlist_dataset_assetslist_datasetssave_asset_annotationsummarize_datasetsupdate_asset_review_status)get_model_registry_optionsget_model_slot_viewslist_managed_modelsrollback_model_slotset_model_slotupdate_model_metadata)build_train_job_reportfind_train_job_artifact_pathget_train_job_snapshotlist_train_job_snapshotspublish_train_job_beststart_train_job)get_request_ownerjob_matches_ownertrainz/train)
url_prefixreturnc                     t          | t                    r| S t          | t          t          f          r| dk    S t	          | pd                                                                          dv S )Nr    >   1onyestrue)
isinstanceboolintfloatstrstriplower)values    9/home/longshao/multi-rider-rag/modules/training/routes.py_parse_boolr?   2   si    % %#u&& zu{!!##))++/III    job_idc                      t          |           S Nr   rA   s    r>   _resolve_result_jobrE   :   s    vr@   
dataset_iditemc                    |                     d          pd}i d|                     d          d|                     d          d|                     d          d|                     d          dt          |                     d                    d|d|                     d          pdd	|                     d	d
          d|                     dd
          d|                     dd
          d|                     dd
          d|                     d          d|                     d          d|                     dd          d|                     dd          dt          |                     d                    d|                     d          t          d| |                     d                    |rt          d|          nddS )Nsource_job_idr1   idfilenameorigin_namesource_type
is_labeledsource_asset_idwidthr   height
size_bytesconfidence_countmin_confidencemax_confidenceannotation_sourcereview_statuspendingis_reviewedreviewed_tsztrain.dataset_asset_file)rF   asset_idzjob.history_detail_pagerD   )	asset_urlsource_job_urlgetr7   r   )rF   rG   rI   s      r>   _serialize_assetr`   >   s   HH_--3MdhhtnnDHHZ(( 	txx.. 	txx..	
 	d488L1122 	 	488$566<" 	'1%% 	$((8Q'' 	dhh|Q// 	DHH%7;; 	$((#344 	$((#344 	TXX&92>> 	/9==  	tDHH]3344!" 	txx..#$ 7JY]YaYabfYgYghhhVck'";MRRRRik'   r@   c                     d |                                  D             fd|                     d          pg D             d<   S )Nc                 &    i | ]\  }}|d k    ||S )recent_assets ).0keyr=   s      r>   
<dictcomp>z&_serialize_dataset.<locals>.<dictcomp>X   s(    SSSjc5C?<R<RsE<R<R<Rr@   c                 <    g | ]}t          d          |          S rJ   r`   )re   assetdatasets     r>   
<listcomp>z&_serialize_dataset.<locals>.<listcomp>Y   s7           	..     r@   rc   )itemsr_   )rG   rl   s    @r>   _serialize_datasetro   W   sc    SSDJJLLSSSG       hh//52     GO Nr@   c                    i d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          d|                      dd	          d
|                      d
d	          d|                      dd	          dt          |                      d                    d|                      dd          d|                      dd          d|                      dd          d|                      dd          d|                      d          d|                      d          |                      d          t          d|                      d                    dS )NrJ   rF   dataset_namestatusmessage
base_model
preset_keyepochsr   imgsz
batch_sizeconfirmed_onlyrun_dirr1   log_pathmanifest_pathartifact_dir
created_tsstart_tsend_tsztrain.train_job_report_pagerD   )r   
report_urlr^   rG   s    r>   _serialize_train_jobr   `   s   dhhtnndhh|,, 	00 	$((8$$	
 	488I&& 	dhh|,, 	dhh|,, 	$((8Q'' 	'1%% 	dhh|Q// 	$txx(899:: 	488Ir** 	DHHZ,, 	/266 	44  	dhh|,,!" 	DHHZ((#$ ((8$$;DHHTNNSSS'   r@   c           	      *   i d|                      d          d|                      d|                      d                    d|                      d          d|                      d          d|                      d|                      dd                    d|                      dd          d	|                      d	d          d
|                      d
          pg d|                      d          pg d|                      dd          d|                      dd          d|                      d          d|                      dd          d|                      dd          d|                      dd          d|                      dd          dt          |                      d                    |                      d          pi |                      dd          |                      d          pg |                      d          pg dS )Nnamedisplay_namepathcategorycategory_labelr1   	lifecycleactivelifecycle_labelusagesusage_labelsnoterR   r   modified_tsrI   rF   rq   rt   ry   metricsmetadata_path	slot_refsslot_labels)r   r   r   r   r_   r7   r   s    r>   _serialize_managed_modelr   x   sA     &1A1ABB 	   	DHHZ((	
 	$((#3TXXj"5M5MNN 	TXXk844 	488$5r:: 	$((8$$* 	006B 	$$ 	dhh|Q// 	txx.. 	/266 	dhh|R00 	44  	dhh|R00!" 	$txx(899::#$ 88I&&,"/266XXk**0bxx..4"+   r@   c                 B   |                      d          |                      d          |                      dd          |                      dd          |                      d          |                      d          pg t          |                      d                    d	S )
Nslot_keylabelcurrent_modelr1   current_path
changed_tshistoryhas_override)r   r   r   r   r   r   r   r   r   s    r>   _serialize_model_slotr      s    HHZ(('""/26644hh|,,88I&&,"TXXn5566  r@   c                 t   i d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          d|                      dd          d	|                      d	d          d
|                      d
d          d|                      dd          dt          |                      d                    d|                      dd          d|                      dd          d|                      dd          d|                      dd          d|                      dd          d|                      d          |                      d          |                      d          dS )NrJ   rF   rq   rr   rs   	model_keyconf_threshr   rw   prompt_classesr1   class_mapping	overwritetotal	processedupdatedskipped_existingno_detectionr~   r   r   )r   r   r   r   s    r>   _serialize_auto_annotate_jobr      s   dhhtnndhh|,, 	00 	$((8$$	
 	488I&& 	TXXk** 	txxq11 	'1%% 	$((#3R88 	/266 	T$((;//00 	'1%% 	TXXk1-- 	488Iq)) 	DHH%7;;  	33!" 	dhh|,,#$ HHZ((((8$$'   r@   c                  r    t          t                                } dd | D             t          |           dS )NTc                 ,    g | ]}t          |          S rd   )ro   re   rG   s     r>   rm   z%_datasets_payload.<locals>.<listcomp>   s!    ===t$T**===r@   )okrn   summary)r   r   r   )rn   s    r>   _datasets_payloadr      sA     11E==u===%e,,  r@   z	/datasetsc                  8    t          t                                S rC   )r   r   rd   r@   r>   dataset_listr      s    $&&'''r@   z/jobsc                     t          t                    \  } }t          j                            dd          }	 t	          |          }n# t
          $ r d}Y nw xY wt          | ||          }t          dd |D             d          S )Nlimit20   r   Tc                 ,    g | ]}t          |          S rd   )r   r   s     r>   rm   z"train_job_list.<locals>.<listcomp>   s!    )W)W)W*>t*D*D)W)W)Wr@   r   rn   )r+   r   argsr_   r8   	Exceptionr(   r   	owner_keyowner_ip	limit_rawr   rn   s        r>   train_job_listr      s    +G44Ix  $//II   $YFFFE$)W)WQV)W)W)WXXYYY   A	 	AAz/model-registry-pagec                      t          dd t                      D             d t                      D             t                                S )Nz0modules/training/pages/train_model_registry.htmlc                 ,    g | ]}t          |          S rd   r   r   s     r>   rm   z-train_model_registry_page.<locals>.<listcomp>   s!    QQQ4(..QQQr@   c                 ,    g | ]}t          |          S rd   r   r   s     r>   rm   z-train_model_registry_page.<locals>.<listcomp>   s!    NNNt$T**NNNr@   )modelsslotsregistry_options)r   r!   r    r   rd   r@   r>   train_model_registry_pager      sU    :QQ;N;P;PQQQNN7K7M7MNNN355	   r@   z/modelsc                      t          dd t                      D             d t                      D             t                      d          S )NTc                 ,    g | ]}t          |          S rd   r   r   s     r>   rm   z-train_model_registry_data.<locals>.<listcomp>   !    XXX$/55XXXr@   c                 ,    g | ]}t          |          S rd   r   r   s     r>   rm   z-train_model_registry_data.<locals>.<listcomp>   s!    UUUd+D11UUUr@   )r   r   r   r   )r   r!   r    r   rd   r@   r>   train_model_registry_datar      sZ    XXBUBWBWXXXUU>R>T>TUUU : < <		
 	
  r@   z/models/<model_name>/metadata
model_namec                    t          j        d          pt           j        pi }|                    dd          pd                                }|                    dd          pd                                }|                    d          }|                    dd          pd                                }	 t          | ||||          }n# t          $ r t          d	d
d          dfcY S t          $ r+}t          d	t          |          d          dfcY d }~S d }~wt          $ r4}t          j        d| |           t          d	dd          dfcY d }~S d }~ww xY wt          dd|                    d          p|                    d           t          |          d t                      D             t                      d          S )NTsilentr   r1   r   r   r   )r   r   r   r   Fmodel not foundr   error    z&failed to update model metadata %s: %szfailed to update model metadata  u   模型元数据已更新：r   c                 ,    g | ]}t          |          S rd   r   r   s     r>   rm   z/train_model_metadata_update.<locals>.<listcomp>  r   r@   )r   rs   modelr   r   )r   get_jsonformr_   r;   r$   FileNotFoundErrorr   
ValueErrorr:   r   r   	exceptionr   r!   r   )r   payloadr   r   r   r   r   excs           r>   train_model_metadata_updater      s&   d+++Aw|ArGKK339r@@BBL["--3::<<I[[""FKK##)r0022DW%%
 
 
  G G Ge.?@@AA3FFFF > > >ec#hh7788#======= W W WA:sSSSe.OPPQQSVVVVVVVVW eUYY~5N5N5cRWR[R[\bRcRcee-e44XXBUBWBWXXX : < <	
 	
  s6   8C E-	E6 DEE))EEEz/model-slots/<slot_key>r   c                    t          j        d          pt           j        pi }|                    dd          pd                                }	 t          | |          }n# t          $ r t          ddd          dfcY S t          $ r+}t          dt          |          d          d	fcY d }~S d }~wt          $ r4}t          j        d
| |           t          ddd          dfcY d }~S d }~ww xY wt          d|                    d           d|                    d           t          |          d t                      D             d          S )NTr   r   r1   Fr   r   r   r   zfailed to set model slot %s: %szfailed to update model slotr   r   u    已切换为 r   c                 ,    g | ]}t          |          S rd   r   r   s     r>   rm   z(train_model_slot_set.<locals>.<listcomp>  r   r@   r   rs   slotr   )r   r   r   r_   r;   r#   r   r   r   r:   r   r   r   r   r!   )r   r   r   	slot_viewr   s        r>   train_model_slot_setr     s   d+++Aw|ArG++lB//52<<>>JS"8Z88		 G G Ge.?@@AA3FFFF > > >ec#hh7788#======= S S S:HcJJJe.KLLMMsRRRRRRRS #--00``	o@^@^``))44XXBUBWBWXXX		
 	
  s6   A   C0 	C0	 B/)C0/C0<)C+%C0+C0z /model-slots/<slot_key>/rollbackc                    	 t          |           }nt# t          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r4}t          j        d| |           t          ddd          dfcY d }~S d }~ww xY wt          d|                    d           d	|                    d
           t          |          d t                      D             d          S )NFr   r   z$failed to rollback model slot %s: %szfailed to rollback model slotr   Tr   u    已回滚到 r   c                 ,    g | ]}t          |          S rd   r   r   s     r>   rm   z-train_model_slot_rollback.<locals>.<listcomp>/  r   r@   r   )
r"   r   r   r:   r   r   r   r_   r   r!   )r   r   r   s      r>   train_model_slot_rollbackr      s/   U'11		 > > >ec#hh7788#======= U U U?3OOOe.MNNOOQTTTTTTTTU #--00``	o@^@^``))44XXBUBWBWXXX		
 	
  s+    
B ABB)A>8B>Bz/jobs/<job_id>c                     t          t                    \  }}t          |           }|t          |||          st	          ddd          dfS t	          dt          |          d          S NFjob not foundr   r   T)r   job)r+   r   r'   r,   r   r   rA   r   r   r   s       r>   train_job_detailr   4  sq    +G44Ix
 
(
(C
{+CHEE{eo>>??DD$';C'@'@AABBBr@   z/jobs/<job_id>/report-pagec                 n   t          t                    \  }}t          |           }|t          |||          sdS 	 t	          |           }n# t
          $ r Y dS w xY w|                    dg           D ]*}t          d| |                    d                    |d<   +t          d||t                    S )	Nr   r   imagestrain.train_job_artifact_filerK   rA   rK   urlz(modules/training/pages/train_report.html)reportr   	model_dir)
r+   r   r'   r,   r%   LookupErrorr_   r   r   r	   )rA   r   r   r   r   images         r>   train_job_report_pager   =  s    +G44Ix
 
(
(C
{+CHEE{##$'// $ $ $###$ Hb)) o o>vX]XaXablXmXmnnneEfZ]irsssss   A 
AAz/jobs/<job_id>/reportc                    t          t                    \  }}t          |           }|t          |||          st	          ddd          dfS 	 t          |           }n$# t          $ r t	          ddd          dfcY S w xY wg }|                    dg           D ]x}|                    |                    d          |                    d          |                    d          t          d	| |                    d          
          d           yt	          dt          |                    d          p|          |                    d          pi |                    d          pi |                    d          pi |                    d          pi |                    d          pg ||                    d          pi |                    d          pi d	d          S )NFr   r   r   r   rf   titlerK   r   r   )rf   r   rK   r   Tr   r   r   losses
assessmentr   pathspublish)	r   r   r   r  r  r   r   r  r  )r   r   )r+   r   r'   r,   r   r%   r   r_   appendr   r   )rA   r   r   r   r   image_itemsr   s          r>   train_job_report_datar  O  s   +G44Ix
 
(
(C
{+CHEE{eo>>??DDE'// E E Eeo>>??DDDDE KHb)) 
 
yy''7++!IIj11>vX]XaXablXmXmnnn	 	
 	
 	
 	
 +FJJu,=,=,DEE!::i006B!::i006B **X..4"$jj66<"!::i006B%G,,2!::i006B
 
	
 	
  s   A B ?B z#/jobs/<job_id>/artifacts/<filename>rK   c                     t          t                    \  }}t          |           }|t          |||          sdS 	 t	          | |          }n# t
          $ r Y dS t          $ r Y dS w xY wt          |          S )Nr   )zartifact not foundr   )r+   r   r'   r,   r&   r   r   r   )rA   rK   r   r   r   r   s         r>   train_job_artifact_filer	  x  s    +G44Ix
 
(
(C
{+CHEE{##)+FH== $ $ $### ) ) )((() T??s   A 
A(	A('A(z/jobs/<job_id>/publishc                 T   t          t                    \  }}t          |           }|t          |||          st	          ddd          dfS t          j        d          pt          j        pi }|                    dd          pd                                }	 t          | |	          }n# t          $ r t	          ddd          dfcY S t          $ r+}t	          dt          |          d          dfcY d }~S d }~wt          $ r+}t	          dt          |          d          d
fcY d }~S d }~wt          $ r4}t          j        d| |           t	          ddd          dfcY d }~S d }~ww xY wt	          dd|                    d           |t#                      d          S )NFr   r   r   Tr   target_namer1   )r  r   z'failed to publish best model for %s: %szpublish failedr   u$   best.pt 已发布到 model 目录：r   )r   rs   	publishedupload_models)r+   r   r'   r,   r   r   r   r_   r;   r)   r   r   r:   r   r   r   r   r
   )rA   r   r   r   r   r  r  r   s           r>   train_job_publishr    s   +G44Ix
 
(
(C
{+CHEE{eo>>??DDd+++Aw|ArG;;}b117R>>@@K
F*6{KKK		 E E Eeo>>??DDDD > > >ec#hh7788#======= > > >ec#hh7788#======= F F FBFCPPPe.>??@@#EEEEEEEF [immL>Y>Y[["577		
 	
  sH   B. .E1	E1 C=7E1=E1
 D0*E10E1=)E,&E1,E1z/auto-annotate-jobsc                     t          t                    \  } }t          j                            dd          }	 t	          |          }n# t
          $ r d}Y nw xY wt          | ||          }t          dd |D             d          S )Nr   r   r   r   Tc                 ,    g | ]}t          |          S rd   )r   r   s     r>   rm   z*auto_annotate_job_list.<locals>.<listcomp>  s"    )_)_)_QU*Ft*L*L)_)_)_r@   r   )r+   r   r   r_   r8   r   r   r   r   s        r>   auto_annotate_job_listr    s    +G44Ix  $//II   ,YNNNE$)_)_Y^)_)_)_``aaar   z/auto-annotate-jobs/<job_id>c                     t          t                    \  }}t          |           }|t          |||          st	          ddd          dfS t	          dt          |          d          S r   )r+   r   r   r,   r   r   r   s       r>   auto_annotate_job_detailr    sq    +G44Ix
(
0
0C
{+CHEE{eo>>??DD$'CC'H'HIIJJJr@   c                     t          t                    \  } }t          j        d          pt          j        pi }|                    dd          pd                                }|                    dd          pd                                }|                    dd          pd                                }t          |                    d                    }	 t          |                    d	d
          pd
          }t          |                    dd
          pd
          }t          |                    dd
          pd
          }	n$# t          $ r t          ddd          dfcY S w xY w|st          ddd          dfS |st          ddd          dfS 	 t          ||||||	| ||	  	        }
n# t          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r3}t          j        d|           t          ddd          dfcY d }~S d }~ww xY wt          ddt!          |
          d          dfS )NTr   rF   r1   rt   ru   quickry   rv   r   rw   rx   Fzinvalid train paramsr   r   zdataset_id is requiredzbase_model is required)ry   r   zfailed to create train job: %su   训练任务创建失败r   u   训练任务骨架已创建r   rs   r      )r+   r   r   r   r_   r;   r?   r8   r   r   r*   r   r:   r   r   r   r   )r   r   r   rF   rt   ru   ry   rv   rw   rx   r   r   s               r>   train_job_creater    s    +G44Ixd+++Aw|ArG++lB//52<<>>J++lB//52<<>>J++lG44?FFHHJ -=!>!>??NLW[[1--233GKK++0q11\155:;;

 L L Le.DEEFFKKKKL  Ne.FGGHH#MM Ne.FGGHH#MMP)

 

 

  > > >ec#hh7788#======= > > >ec#hh7788#======= P P P93???e.HIIJJCOOOOOOOP $+HQefiQjQjkkllnqqqsU   A/E E-,E-F6 6
I  G& I&I3 HII&(IIIz/datasets/<dataset_id>c           
      ,    	 t                     }t           d          }n8# t          $ r+}t          dt	          |          d          dfcY d }~S d }~ww xY wt          dt          i |d|d d         i           fd	|D             d
          S )Nr   r   Fr   r   Trc      c                 0    g | ]}t          |          S rd   rj   re   rG   rF   s     r>   rm   z"dataset_detail.<locals>.<listcomp>  s$    KKKT&z488KKKr@   )r   rl   rn   )r   r   r   r   r:   ro   )rF   rl   rn   r   s   `   r>   dataset_detailr    s    >j))#Jc::: > > >ec#hh7788#=======>)*QW*QouRaRy*Q*QRRKKKKUKKK	
 	
  s    $ 
A AAAc                     t          j        d          pt           j        pi } |                     dd          pd                                }|                     dd          }|                     dd          pd                                }	 t          |||          }t                      }d|d<   |d	         |d
<   t          |          dfS # t          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r3}t          j        d|           t          ddd          dfcY d }~S d }~ww xY w)NTr   r   r1   class_namesnotesu   数据集已创建rs   rJ   rF   r  Fr   r   zfailed to create dataset: %su   创建数据集失败r   )r   r   r   r_   r;   r   r   r   r   r:   r   r   r   )r   r   r  r   rl   responser   s          r>   dataset_creater"    sq   d+++Aw|ArGKK##)r0022D++mR00K[["%%+2244E
M {E::$&&2!(x  #%% > > >ec#hh7788#======= M M M7===e.EFFGGLLLLLLLMs0   ?C 
D? C?9D??D?(D:4D?:D?z!/datasets/<dataset_id>/import-zipc                 j   t           j                            d          }	 t          | |          }t	                      }|                    d|d          d|d          d|d         |d         |d         | d           t          |          S # t          $ r+}t          d	t          |          d
          dfcY d }~S d }~wt          $ r+}t          d	t          |          d
          dfcY d }~S d }~wt          $ r4}t          j        d| |           t          d	dd
          dfcY d }~S d }~ww xY w)Nfile
   已导入 importedu    张图片，跳过 skippedu    项upload_name)rs   r&  r'  r(  rF   Fr   r   r   z(failed to import zip into dataset %s: %su   ZIP 导入失败r   )r   filesr_   r   r   updater   r   r:   r   r   r   r   )rF   upload_fileresultr!  r   s        r>   dataset_import_zipr-    s   -##F++KH&z;??$&&gz(:ggPVW`Paggg":.!),%m4( 	
 	
 	
 x    > > >ec#hh7788#======= > > >ec#hh7788#======= H H HCZQTUUUe.@AABBCGGGGGGGHsB   A,B 
D2 B>8D2>D2 C1+D21D2>)D-'D2-D2z%/datasets/<dataset_id>/import-resultsc                    t          j        d          pt           j        pi }|                    dd          pd                                }|                    d          pg }|st          ddd          d	fS t          |t                    r|st          dd
d          d	fS t          |          }|t          ddd          dfS |                    d          }|rt          j
                            |          st          ddd          dfS 	 t          |          }nA# t          $ r4}t          j        d||           t          ddd          dfcY d }~S d }~ww xY wd |D             fd|                    dg           D             }|st          ddd          d	fS |                    d          pddk    rdnd}		 t!          | ||	|          }
t#                      }|                    d|
d          d|
d          d|
d         |
d         | |d           t          |          S # t&          $ r+}t          dt)          |          d          dfcY d }~S d }~wt*          $ r+}t          dt)          |          d          d	fcY d }~S d }~wt          $ r5}t          j        d | ||           t          dd!d          dfcY d }~S d }~ww xY w)"NTr   rA   r1   	asset_idsFzjob_id is requiredr   r   asset_ids is requiredr   r   result_manifest_pathzresult manifest not foundz-failed to load result manifest for job %s: %szfailed to read result manifestr   c                     h | ]e}t          |pd                                           %t          j                            t          |pd                                                     fS r1   r:   r;   osr   basename)re   r[   s     r>   	<setcomp>z)dataset_import_results.<locals>.<setcomp>?  sn       x~2$$&&
X^,,224455  r@   c                 B    g | ]}|                     d           v |S ri   )r_   )re   rG   selected_idss     r>   rm   z*dataset_import_results.<locals>.<listcomp>D  s8       88D>>\)) 	)))r@   rn   zno valid selected assets foundjob_typeoracleoracle_resultupload_resultr%  r&  u    张结果图，跳过 r'  u    张。)rs   r&  r'  rF   rA   z8failed to import results into dataset %s from job %s: %su   结果图导入失败)r   r   r   r_   r;   r   r6   listrE   r5  r   isfiler   r   r   r   r   r   r*  r   r:   r   )rF   r   rA   r/  r   r|   manifestr   selected_itemsrM   r,  r!  r9  s               @r>   dataset_import_resultsrB  &  s   d+++Aw|ArGkk(B''-24466FK((.BI Je.BCCDDcIIi&& Mi Me.EFFGGLL
f
%
%C
{eo>>??DDGG233M Q} = = Qe.IJJKKSPPV'66 V V VH&RUVVVe.NOOPPRUUUUUUUUV !  L
   LL"--  N
  Ve.NOOPPRUUU&)ggj&9&9&EX(%R%R//XgKM0^[Z`aa$&&mz(:mmSYZcSdmmm":.!),(  	
 	
 	
 x    > > >ec#hh7788#======= > > >ec#hh7788#======= M M MSU_agilmmme.EFFGGLLLLLLLMsa   D' '
E%1)E E% E%A(H5 5
K? I%K%K2 JKK%*KKKz/datasets/<dataset_id>/assetsc                      	 t           d          }n8# t          $ r+}t          dt          |          d          dfcY d }~S d }~ww xY wt          d fd|D             d          S )	N   r   Fr   r   Tc                 0    g | ]}t          |          S rd   rj   r  s     r>   rm   z&dataset_asset_list.<locals>.<listcomp>j  s%    )_)_)_QU*::t*L*L)_)_)_r@   r   )r   r   r   r:   )rF   rn   r   s   `  r>   dataset_asset_listrF  d  s    >#Jc::: > > >ec#hh7788#=======>$)_)_)_)_Y^)_)_)_``aaas    
A
 AA
A
z3/datasets/<dataset_id>/assets/<asset_id>/annotationr[   c                 "   	 t          | |          }nk# t          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r+}t          dt          |          d          dfcY d }~S d }~ww xY wt          dt          i |d         dg i          t          | |d                   |d	         |d
         |                    dd          |d         |                    dd          |                    d          d	          S )NFr   r   r   Trl   rc   rk   boxes
label_pathlabel_meta_pathr1   rN   rW   rX   rZ   )	r   rl   rk   rH  rI  rJ  rN   rW   rZ   )r   r   r   r:   r   ro   r`   r_   )rF   r[   r   r   s       r>   dataset_asset_annotationrK  m  sI   >'
H== > > >ec#hh7788#======= > > >ec#hh7788#=======>)*UWY-?*URT*U*UVV%j''2BCCW%!,/&{{+<bAA!,/$[[)DD";;}55
	
 
	
  s+    
A; AA;A; A60A;6A;c                    t          j        d          pi }	 t          | ||                    d          pg           }n# t          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r5}t          j
        d| ||           t          dd	d          d
fcY d }~S d }~ww xY wt          ddt          i |d         dg i          t          | |d                   |d         |d         |d         |                    dd          |                    d          d	          S )NTr   rH  Fr   r   r   z5failed to save annotation for dataset %s asset %s: %su   标注保存失败r   u   标注已保存rl   rc   rk   rI  rN   rW   rX   rZ   )	r   rs   rl   rk   rH  rI  rN   rW   rZ   )r   r   r   r_   r   r   r:   r   r   r   r   ro   r`   )rF   r[   r   savedr   s        r>   dataset_asset_annotation_saverN    s   d+++1rGJ%j(GKK<P<P<VTVWW > > >ec#hh7788#======= > > >ec#hh7788#======= J J JPR\^fhkllle.BCCDDcIIIIIIIJ ()*SU9-=*SPR*S*STT%j%.AA7^--"YY	BB 99]33
	
 
	
  sA   &A   
C%
 A0*C%0C%= B#C%#C%0*C C% C%z//datasets/<dataset_id>/assets/<asset_id>/reviewc                 "   t          j        d          pi }|                    dd          pd                                }	 t	          | ||          }n# t
          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r+}t          dt          |          d          dfcY d }~S d }~wt          $ r5}t          j        d	| ||           t          dd
d          dfcY d }~S d }~ww xY wt          ddt          i |d         dg i          t          | |d                   |d         |d         |                    dd          |d         |                    dd          |                    d          d
          S )NTr   rW   rX   Fr   r   r   z:failed to update review status for dataset %s asset %s: %su   复核状态保存失败r   u   复核状态已更新rl   rc   rk   rH  rI  rJ  r1   rN   rZ   )
r   rs   rl   rk   rH  rI  rJ  rN   rW   rZ   )r   r   r_   r;   r   r   r   r:   r   r   r   r   ro   r`   )rF   r[   r   rW   rM  r   s         r>   dataset_asset_review_updaterP    s   d+++1rG[[)<<I	PPRRMP*:xOO > > >ec#hh7788#======= > > >ec#hh7788#======= P P PUWackmpqqqe.HIIJJCOOOOOOOP .)*SU9-=*SPR*S*STT%j%.AA7^-$yy):B??-"YY	BB 99]33	
 	
  sB   A 
C: B?C:C: B82C:8C:*C5/C:5C:z$/datasets/<dataset_id>/auto-annotatec                 ~    t          j        d          pi }|                    d          pg }|                    dd          pd                                }|                    d          }|                    d          }t	          |                    d                    }t          |t                    r|st          d	d
d          dfS |st          d	dd          dfS 	 t          |                    dd          pd          }t          |                    dd          pd          }n$# t          $ r t          d	dd          dfcY S w xY w	 t           d |D             ||||||          }	n# t          $ r+}
t          d	t          |
          d          dfcY d }
~
S d }
~
wt          $ r+}
t          d	t          |
          d          dfcY d }
~
S d }
~
wt          $ r4}
t          j        d |
           t          d	dd          dfcY d }
~
S d }
~
ww xY wd|	d          d|	d          d}|	d         r|d|	d          d z  }|	d!         r|d"|	d!          d z  }t          d|t#          i |	d#         d$g i          |	d         |	d         |	d         |	d!          fd%|	d&         D             d'          S )(NTr   r/  r   r1   r   r   r   Fr0  r   r   model_key is requiredr         ?rw     invalid auto annotate paramsc                     g | ]S}t          |pd                                           %t          j                            t          |pd                     TS r3  r4  r   s     r>   rm   z)dataset_auto_annotate.<locals>.<listcomp>  sS    jjjTRUVZV`^`RaRaRgRgRiRijrw''DJB88jjjr@   )rF   r/  r   r   rw   prompt_valueclass_mapping_valuer   r   z&failed to auto annotate dataset %s: %su   预标注失败r   u
   已处理 r   u    张，生成 r   u    张预标注r   u   ，跳过已标注 u    张r   u   ，无命中 rl   rc   c                 j    g | ]/}t          |d                    |d         |d         |d         d0S )rk   rH  rN   rI  )rk   rH  rN   rI  rj   r  s     r>   rm   z)dataset_auto_annotate.<locals>.<listcomp>  sZ         .j$w-HH!']"&|"4"&|"4	   r@   rn   )r   rs   rl   r   r   r   r   rn   )r   r   r_   r;   r7   r6   r>  r   r9   r8   r   r   r   r:   r   r   r   ro   )rF   r   r/  r   rW  r   r   r   rw   r,  r   rs   s   `           r>   dataset_auto_annotaterZ    s   d+++1rGK((.BI["--3::<<I;;/00LKK00MW[[--..Ii&& Mi Me.EFFGGLL Me.EFFGGLLTGKKt<<DEEGKK--455 T T Te.LMMNNPSSSSSTG-!jjYjjj#% -	
 	
 	
  > > >ec#hh7788#======= > > >ec#hh7788#======= G G GA:sSSSe.?@@AA3FFFFFFFG _6+.^^fY>O^^^G ! JI0B)CIIIIn @?6.#9????)*TVI->*TQS*T*TUU,i( &'9 :">2    #7O  	
 	
  sU   (A
D3 3EE!E: :
H F*$H*H7 GHH*)HHHz)/datasets/<dataset_id>/auto-annotate-jobsc                    t          t                    \  }}t          j        d          pi }|                    d          pg }|                    dd          pd                                }|                    d          }|                    d          }t          |                    d                    }t          |t                    r|st          d	d
d          dfS |st          d	dd          dfS 	 t          |                    dd          pd          }	t          |                    dd          pd          }
n$# t          $ r t          d	dd          dfcY S w xY wd |D             }|st          d	d
d          dfS 	 t          | |||	|
|pd|pd|||
  
        }n# t          $ r+}t          d	t          |          d          dfcY d }~S d }~wt          $ r+}t          d	t          |          d          dfcY d }~S d }~wt          $ r4}t!          j        d| |           t          d	dd          dfcY d }~S d }~ww xY wt          ddt%          |          d          dfS )NTr   r/  r   r1   r   r   r   Fr0  r   r   rR  r   rS  rw   rT  rU  c                     g | ]S}t          |pd                                           %t          j                            t          |pd                     TS r3  r4  r   s     r>   rm   z4dataset_auto_annotate_job_create.<locals>.<listcomp>  sP    dddtCPTPZXZOOLaLaLcLcd!!#djb//22dddr@   )
rF   r/  r   r   rw   r   r   r   r   r   r   z5failed to create auto annotate job for dataset %s: %su!   批量预标注任务创建失败r   u   批量预标注任务已创建r  r  )r+   r   r   r_   r;   r7   r6   r>  r   r9   r8   r   r   r   r:   r   r   r   r   )rF   r   r   r   r/  r   rW  r   r   r   rw   r   r   s                r>    dataset_auto_annotate_job_creater]    s'   +G44Ixd+++1rGK((.BI["--3::<<I;;/00LKK00MW[[--..Ii&& Mi Me.EFFGGLL Me.EFFGGLLTGKKt<<DEEGKK--455 T T Te.LMMNNPSSSSST edydddI Me.EFFGGLLY%!#'-2'-2
 
 
  > > >ec#hh7788#======= > > >ec#hh7788#======= Y Y YPR\^abbbe.QRRSSUXXXXXXXXY $+KTpqtTuTuvvwwy|||sU   >A
E	 	E*)E*F. .
I8 GII+ HII)IIIz(/datasets/<dataset_id>/assets/<asset_id>c                    	 t          | t          j                            |                    }n# t          $ r Y dS w xY w|                    d          }|r.t          j                            |          rt          |          S dS )N)zdataset not foundr   	file_path)zasset not foundr   )r   r5  r   r6  r   r_   r?  r   )rF   r[   rG   r   s       r>   dataset_asset_filer`  0  s    ( RW-=-=h-G-GHH ( ( ('''( 88K  D t$$ !!s   -0 
>>)^r5  flaskr   r   r   r   r   r   shared.config.configr	   r
   r   shared.job_lookupr   /modules.detection.services.result_store_servicer   /modules.training.services.auto_annotate_servicer   4modules.training.services.auto_annotate_task_servicer   r   r   )modules.training.services.dataset_servicer   r   r   r   r   r   r   r   r   r   r   r   0modules.training.services.model_registry_servicer   r    r!   r"   r#   r$   ,modules.training.services.train_task_servicer%   r&   r'   r(   r)   r*   shared.ownership.ownershipr+   r,   __name__train_bpr7   r?   r:   dictrE   r`   ro   r   r   r   r   r   r_   r   r   r   r   postr   r   r   r   r   r  r	  r  r  r  r  r  r"  r-  rB  rF  rK  rN  rP  rZ  r]  r`  rd   r@   r>   <module>ro     s   				 R R R R R R R R R R R R R R R R L L L L L L L L L L ) ) ) ) ) ) P P P P P P X X X X X X         
                                                          L K K K K K K K 9Wh8<<<J$ J J J J t     D T    2T d    t     04 D    4	 	 	 	 	 	t     04     
k( ( ( 
gZ Z Z 
$%%  &% 
i   
.//C    0/B 
())3    *). 
122    32& 
CS C C C  C 
*++t# t t t ,+t" 
%&&%# % % % '&%P 
344C 3    54  
'((c    )(< 
#$$b b %$b 
,--KS K K K .-K 
w(r (r (rV 
&''s    (' 
{M M M& 
233H3 H H H 43H0 
677:Ms :M :M :M 87:Mz 
-..b3 b b b /.b 
CDD     ED, 
DEEc S    FE4 
@AAC 3    BA8 
566?c ? ? ? 76?D 
:;;-} -} -} -} <;-}` 
899	"3 	"# 	" 	" 	" :9	" 	" 	"r@   