
    j8                     d   d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
 ddddZddhZd	d
hZddddZdddddddZdddddZdedefdZdededdfdZdefdZdeddfd Zd!eeef         d"edefd#Zd"edefd$Zd"edefd%Zd"ed&edefd'Zd(edefd)Zd"ed*edee         fd+Zd,ed*edefd-Zd"ed*edee         fd.Zd"ed&ed*edefd/Z d0edefd1Z!dAd3ee         d4e"dee         fd5Z#dee         fd6Z$dee         fd7Z%d0ed"edefd8Z&d0edefd9Z'defd:Z(d;d;dd;d<d"ed=ed>ed?edef
d@Z)dS )B    N)DEPLOYMENT_SLOTS_PATH	MODEL_DIRMODEL_REGISTRYget_deployment_slot_model_nameget_upload_model_defaultlist_upload_model_pathsresolve_model_pathu   本地上传默认模型u   数据库巡检通用模型u   数据库巡检专项模型)upload_defaultgeneralbczjz
yolo26n.ptz
yolo26s.ptbiaochezhajiev2.ptyolov8s-worldv2.pt	   启用中u	   已归档u	   已停用)activearchiveddisabledu   训练底模u	   预标注u   本地上传识别u   通用巡检u   专项巡检u   演示展示)training_base
auto_labelupload_inferencegeneral_inferencespecialized_inferencedemou   在用模型u   新发布模型   自定义模型)
foundation
production	publishedcustompathreturnc                    | rt           j                            |           si S 	 t          | dd          5 }t	          j        |          }d d d            n# 1 swxY w Y   t          |t                    r|S n# t          $ r i cY S w xY wi S )Nrutf-8encoding)	osr   isfileopenjsonload
isinstancedict	Exception)r   fhpayloads      R/home/longshao/multi-rider-rag/modules/training/services/model_registry_service.py_read_json_filer0   0   s     rw~~d++ 	$g... 	$"immG	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$gt$$ 	N	   			Is4   A; AA; AA; A A; ;B
	B
r.   c                     t          j        t           j                            |           d           t	          | dd          5 }t          j        ||dd           d d d            d S # 1 swxY w Y   d S )	NT)exist_okwr"   r#   F   )ensure_asciiindent)r%   makedirsr   dirnamer'   r(   dump)r   r.   r-   s      r/   _write_json_filer:   =   s    K%%5555	dC'	*	*	* =b	'2E!<<<<= = = = = = = = = = = = = = = = = =s   A,,A03A0c                      t          t                    } t          |                     d          t                    si | d<   |                     dd            | S )Nslots
updated_ts)r0   r   r*   getr+   
setdefaultr.   s    r/   _load_slot_registryrA   C   sS    344Ggkk'**D11 |T***N    c                     t          | pi           } t          t          j                              | d<   t          |                     d          t                     si | d<   t          t          |            d S )Nr=   r<   )r+   inttimer*   r>   r:   r   r@   s    r/   _save_slot_registryrF   K   sj    7=b!!G	,,GLgkk'**D11 *G44444rB   registry
model_namec                 T   t           j                            t          |pd                                                    }|sdS |                     |          }|r|S |                                }|                                 D ]!\  }}|                                |k    r|c S "dS N )r%   r   basenamestrstripr>   loweritems)rG   rH   normalized_name
model_pathnormalized_lowerregistered_nameregistered_paths          r/   _registered_model_pathrV   S   s    g&&s:+;'<'<'B'B'D'DEEO ro..J &,,..,4NN,<,< # #(  ""&666"""" 72rB   c                    t           j                            t          | pd                                                    }|s%t           j                            t          d          S t                      }t          ||          }|r't           j        	                    |          \  }}|dz   S t           j        	                    t           j                            t          |                    \  }}|dz   S )NrK   z
.meta.json)
r%   r   rL   rM   rN   joinr   r   rV   splitext)rH   rQ   rG   rR   stem_exts         r/   _model_meta_pathr\   c   s    g&&s:+;'<'<'B'B'D'DEEO 5w||I|444&((H'/BBJ #W%%j11
dl""!!"',,y/"J"JKKJD$,rB   c                 :    t          t          |                     S )N)r0   r\   )rH   s    r/   _load_model_metadatar^   r   s    +J77888rB   metadatac                     |                                  }|                    d          rdS |t          v rdS |t          v rdS dS )Nsource_job_idr   r   r   r   )rO   r>   FOUNDATION_MODEL_NAMESPRODUCTION_MODEL_NAMES)rH   r_   rO   s      r/   _model_categoryrd   v   sS    E||O$$ {&&&|&&&|8rB   	_categoryc                     dS )Nr    )re   s    r/   _default_lifecycle_for_categoryrh      s    8rB   categoryc                 x   | pd                                 }g }|dk    r|                    ddg           |dk    r|                    ddg           |dk    r|                    d           t                      }g }|D ]9}|t          v r.||vr*|                    |           |                    |           :|S )	NrK   r   r   r   r   r   r   r   )rO   extendappendsetMODEL_USAGE_LABELSadd)rH   ri   rO   usagesseenresultitems          r/   _default_usages_for_modelrt      s    2$$&&EF<5666$$$|%89:::$$$-...55DF    %%%$d*:*:HHTNNNMM$MrB   valuec                     t          | pd                                                                          }|t          v r|S t	          |          S rJ   )rM   rN   rO   MODEL_LIFECYCLE_LABELSrh   )ru   ri   	candidates      r/   _normalize_lifecyclery      sK    EKR  &&((..00I****8444rB   c                    | t          ||          S t          | t                    r d |                     d          D             }n1t          | t          t
          t          f          rd | D             }ng }t                      }g }|D ]<}|r|t          vs||v r|                    |           |	                    |           =|S )Nc                 Z    g | ](}|                                                                 )S rg   )rN   rO   .0parts     r/   
<listcomp>z%_normalize_usages.<locals>.<listcomp>   s,    HHHdTZZ\\''))HHHrB   ,c                 x    g | ]7}t          |pd                                                                           8S )rK   )rM   rN   rO   r|   s     r/   r   z%_normalize_usages.<locals>.<listcomp>   s:    HHHS__**,,2244HHHrB   )
rt   r*   rM   splitlisttuplerm   rn   ro   rl   )rp   rH   ri   	raw_itemsrq   rr   rs   s          r/   _normalize_usagesr      s    ~(X>>>&# HHfll36G6GHHH			FT5#.	/	/ HHHHH			55DF   	t#555dMrB   c                    t          |pi           }t          |                    d          p|                                           p| |d<   t	          |                    d          |          |d<   t          |                    d          | |          |d<   t          |                    d          pd                                          |d<   |S )Ndisplay_name	lifecyclerp   noterK   )r+   rM   r>   rN   ry   r   )rH   r_   ri   	decorateds       r/   _decorate_model_metadatar      s    X^$$I #IMM.$A$A$OZ P P V V X X f\fIn1)--2L2LhWWIk+IMM(,C,CZQYZZIhIMM&117R88>>@@IfrB   slot_keyc                     | dk    rt                      S | t          v r,t          j                            t          |                     S dS )Nr
   rK   )r   r   r%   r   rL   r	   )r   s    r/   _current_model_name_for_slotr      sI    ###')))>!!w 28 < <===2rB   
   historylimitc           	      N   g }t                      }| D ]}t          |t                    st          j                            t          |                    d          pd                                                    }|so|	                                t          |                    d          pd          f}||v r|                    |           |                    |t          |                    d          pd          d           t          |          |k    r n|S )NrH   rK   
changed_tsr   rH   r   )rm   r*   r+   r%   r   rL   rM   r>   rN   rO   rD   ro   rl   len)r   r   rP   rq   entryrH   keys          r/   _trim_historyr      s$   E55D  %&& 	W%%c%))L*A*A*GR&H&H&N&N&P&PQQ
 	!!3uyy'>'>'C!#D#DE$;;(!%))L"9"9">Q?? 	
 	
 	
 u::E LrB   c                     t                      } i }t          D ]N}t          |          }|r;|                    |                                g                               |           Og }t          | t          j                  D ]}| |         }t          |          }t          ||          }t          |||          }	t          j        |          }
|	                    d          pi }t          |          }|                    i d|d|	                    d          p|d|d|dt                              |d          d	|	                    d	          pd
dt                               |	                    d	          pd
d          d|	                    d          pg dd |	                    d          pg D             d|	                    d          pdd|
j        dt%          |
j                  d|	                    dd          d|	                    dd          d|	                    dd          d|	                    dd          dt)          |	                    d                    |                    d          pd|                    d          pd|                    d          pd|                    d          pddt          j                            |          r|nd|                    |                                g           d |                    |                                g           D             d           |S ) N)r   summarynamer   r   ri   category_labelr   r   r   lifecycle_labelr   rp   usage_labelsc                 :    g | ]}|t           v t           |         S rg   )rn   )r}   rs   s     r/   r   z'list_managed_models.<locals>.<listcomp>   s3     ! ! !111 't,111rB   r   rK   
size_bytesmodified_tsra   
dataset_iddataset_name
base_modelconfirmed_onlyzmetrics/precision(B)zmetrics/recall(B)zmetrics/mAP50(B)zmetrics/mAP50-95(B))	precisionrecallmAP50mAP50_95c                 D    g | ]}t                               ||          S rg   )DEPLOYMENT_SLOT_LABELSr>   )r}   r   s     r/   r   z'list_managed_models.<locals>.<listcomp>
  s8            +..xBB     rB   )metricsmetadata_path	slot_refsslot_labels)r   r   r   r?   rO   rl   sortedrM   r^   rd   r   r%   statr>   r\   MODEL_CATEGORY_LABELSrw   st_sizerD   st_mtimeboolr   r&   )rG   slot_assignmentsr   current_namerP   rH   rR   raw_metadatari   r_   r   r   r   s                r/   list_managed_modelsr      s   &((H* S S3H== 	S''(:(:(<(<bAAHHRRREX39555 ,
 ,

j)
+J77":|<<+JhOOwz"",,y))/R(44"
"^ < < J
" 
" H	"
 !"7";";HFW"X"X" X\\+66B(" "#9#=#=hll;>W>W>c[cep#q#q" (,,x006B"  ! !!)h!7!7!=2! ! !" V,,2" dl"  s4=11!""  or!B!B#"$ hll<<<%"& ^R @ @'"( hll<<<)"* !$x||4D'E'E"F"F+". ")-C!D!D!J%kk*=>>D"$[[);<<B ',A B B Hb	  35'..2O2O!WUW-11*2B2B2D2DbII   $4$8$89I9I9K9KR$P$P     =" " "$	
 $	
 $	
 $	
J LrB   c                     t                      } t                      }g }t                                          D ]\  }}|                     d          pi                     |          pi }t          |          }d}|rt          ||          }t          t          |                    d          pg                     }|	                    ||||rt          j                            |          nd|                    d          r$t          |                    d          pd          nd |t          t          |                    d           |S )Nr<   rK   r   r   r   )r   labelcurrent_modelcurrent_pathr   r   has_override)rA   r   r   rP   r>   r   rV   r   r   rl   r%   r   abspathrD   r   r   )	slot_registryrG   viewsr   r   
slot_stater   r   r   s	            r/   get_model_slot_viewsr     sS   '))M&((HE17799 
 
%#''006B;;HEEK
3H== 	J1(LIILZ^^I%>%>%D" E EFF$!-AM U = = =SUHRWcHdHdnc*..">">"C!DDDjn" $%CH%M%M N N 
	
 
	
 
	
 
	
 LrB   c                     t           pd                                            t          vrt          d          t          j                            t          |pd                                                    }|st          d          t                      }||vrt          d          t                      }|
                    di           }|
                     i           }t                     }t          t          j                              }|                                |                                k    rt||d<   ||d<   t          t!          |                    d          pg                     |d<   t%          |           t'           fd	t)                      D                       S t!          |                    d          pg           }	|r|	                    d
||d           t          |	          |d<   ||d<   ||d<   t%          |           t'           fdt)                      D                       S )NrK   unsupported slotmodel_name is requiredmodel not foundr<   rH   r   r   c              3   4   K   | ]}|d          k    |V  dS r   Nrg   r}   rs   r   s     r/   	<genexpr>z!set_model_slot.<locals>.<genexpr>D  s3      \\TtJ?OS[?[?[D?[?[?[?[\\rB   r   r   c              3   4   K   | ]}|d          k    |V  dS r   rg   r   s     r/   r   z!set_model_slot.<locals>.<genexpr>M  2      XX4
;Kx;W;W;W;W;W;WXXrB   )rM   rN   r   
ValueErrorr%   r   rL   r   FileNotFoundErrorrA   r?   r   rD   rE   rO   r   r   r>   rF   nextr   insert)
r   rH   rQ   	availabler.   r<   r   r   nowr   s
   `         r/   set_model_slotr   ,  s6   8>r""((**H---+,,,g&&s:+;'<'<'B'B'D'DEEO 31222'))Ii'' 1222!##Gw++E!!(B//J/99L
dikk

C446666#2
< #&
<  -d:>>)3L3L3RPR.S.S T T
9G$$$\\\\%9%;%;\\\\\\:>>),,233G KqSIIJJJ)'22Jy.J|"J|   XXXX!5!7!7XXXXXXrB   c           	          t           pd                                            t          vrt          d          t	                      }|                    di           }|                     i           }t          |                    d          pg           }t                      }d}g }|D ]}t          j
                            t          |pi                     d          pd                                                    }	|	sZ|s|	|v r|	}c|                    |	t          |pi                     d          pd          d           |st          d	          t                     }
t          t          j                              }|
r|                    d|
|d           ||d<   ||d<   t#          |          |d<   t%          |           t'           fd
t)                      D                       S )NrK   r   r<   r   rH   r   r   r   zno rollback version availablec              3   4   K   | ]}|d          k    |V  dS r   rg   r   s     r/   r   z&rollback_model_slot.<locals>.<genexpr>r  r   rB   )rM   rN   r   r   rA   r?   r   r>   r   r%   r   rL   rl   rD   r   rE   r   r   rF   r   r   )r   r.   r<   r   r   r   target_name	remainingr   rH   r   r   s   `           r/   rollback_model_slotr   P  s   8>r""((**H---+,,,!##Gw++E!!(B//J:>>),,233G'))IKI n nW%%c5;B*;*;L*I*I*OR&P&P&V&V&X&XYY
 	 	zY66$K
#u{PRFWFWXdFeFeFjijBkBkllmmmm :8999/99L
dikk

C M<sKKLLL*J|"J|))44Jy   XXXX!5!7!7XXXXXXrB   c                      d t                                           D             d t                                          D             dS )Nc                     g | ]
\  }}||d S )ru   r   rg   r}   r   ru   s      r/   r   z.get_model_registry_options.<locals>.<listcomp>w  s$    nnnee<<nnnrB   c                     g | ]
\  }}||d S r   rg   r   s      r/   r   z.get_model_registry_options.<locals>.<listcomp>x  s$    fffZS%C%88fffrB   )lifecycle_optionsusage_options)rw   rP   rn   rg   rB   r/   get_model_registry_optionsr   u  sM    nnOeOkOkOmOmnnnffK]KcKcKeKefff  rB   rK   )r   r   rp   r   r   r   r   c                   t           j                            t          | pd                                                    }|st          d          t                      }||vrt          d          t          |          }t          ||          }t          |          }	|p|                                p||	d<   t          ||          |	d<   t          |||          |	d<   t          |pd                                          |	d<   t          t          |          |	           t                      D ]}
|
                    d          |k    r|
c S  t#          d          )	NrK   r   r   r   r   rp   r   r   )r%   r   rL   rM   rN   r   r   r   r^   rd   r+   ry   r   r:   r\   r   r>   LookupError)rH   r   r   rp   r   rQ   r   currentri   r.   rs   s              r/   update_model_metadatar   |  s^   g&&s:+;'<'<'B'B'D'DEEO 31222'))Ii'' 1222"?33G88H7mmG+>EEGGZ?GN/	8DDGK)&/8LLGH$*"oo++--GFO%o66@@@#%%  88F..KKK /
'
(
((rB   )r   )*r(   r%   rE   shared.config.configr   r   r   r   r   r   r	   r   rb   rc   rw   rn   r   rM   r+   r0   r:   rA   rF   rV   r\   r^   rd   rh   r   rt   ry   r   r   r   rD   r   r   r   r   r   r   r   rg   rB   r/   <module>r      se    				                   1,)   '5 .0DE     $,'+   ! "	  
# 
$ 
 
 
 
=3 = =$ = = = =T    5 5$ 5 5 5 5T#s(^            9S 9T 9 9 9 9 t     s s    #  c    $5 5s 5s 5 5 5 5#  c    &   PT    3 3     4: c 4:    06T$Z 6 6 6 6rd4j    2!YS !Yc !Yd !Y !Y !Y !YH"Y# "Y$ "Y "Y "Y "YJD     CEWYbftv ) ) )c )C )QT )nq ){ ) ) ) ) ) )rB   