
    j/                     F   U d dl Z d dlZd dlmZmZ d dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZ dZ	 d dlmZ d dlmZ d dlmZ d dlmZ n%# e$ rZdZdZdZdZ ee          ZY dZ[ndZ[ww xY wi Zeee f         e!d	<   i Z"eeej#        f         e!d
<    ej#                    Z$d#dZ% e%              ej&                    Z'e'j(        )                    ddi           da*da+dedefdZ,d#dZ-d#dZ.d#dZ/d#dZ0de1e         fdZ2de1e         dz  ddfdZ3defdZ4	 d$dede5e6dz  e7dz  edz  f         fdZ8	 d%de1ej                 de9deee7                  d e7dede1e         dz  de1e:         fd!Z;	 d%de1ej                 dede9d e7de1e         dz  de1e1e                  fd"Z<dS )&    N)OptionalSet)Image)CLIP_VIT_B32_PATHMOBILECLIP_TS_PATHMOBILECLIP2_TS_PATHTORCH_NUM_THREADSloggermodel_supports_text_promptresolve_model_path)YOLO)block)head)	downloads_MODEL_CACHE_MODEL_LOCKSreturnc            	         t           dk    rd S 	 dd l} |                     t                      t          | d          r6|                     t          dt          dt                                          t          j        dt                      d S # t          $ r }t          j
        d|           Y d }~d S d }~wt          $ r }t          j        d|           Y d }~d S d }~ww xY w)Nr   set_num_interop_threads      z Configured torch CPU threads: %sz*torch CPU thread configuration skipped: %sz)failed to configure torch CPU threads: %s)r	   torchset_num_threadshasattrr   maxminr
   infoRuntimeErrordebug	Exceptionwarning)r   excs     @/home/longshao/multi-rider-rag/shared/inference/infer_service.py_configure_torch_threadsr$   &   s   A
I/0005344 	M))#aQ8I1J1J*K*KLLL68IJJJJJ H H HA3GGGGGGGGG I I IBCHHHHHHHHHIs$   A>B 
C!B44C!CC!z
User-Agentz9Mozilla/5.0 (Windows NT 10.0; Win64; x64) Python/requestsF	model_keyc                     t           j                            t           j                            t	          |                               S N)ospathnormcaseabspathr   )r%   s    r#   _model_cache_keyr,   A   s/    7BGOO,>y,I,IJJKKK    c                     t           dS ddddd} |                                 D ]f\  }}t          t           |          r|D ]H}t          t           |d          }|.t	          t           ||           t          j        d||            nIgdS )zEProvide aliases for legacy class names embedded in older model files.N)	Segment26YOLOESegmentSegment)r/   r1   )YOLOEDetectDetect)r3   )YOLOESegment26YOLOSegment26YOLOEDetect26YOLODetect261Applied ultralytics compatibility alias: %s -> %s)ultralytics_headitemsr   getattrsetattrr
   r   	alias_mapmissing_name
candidates	candidatetargets        r#   _patch_ultralytics_head_compatrC   E   s     C12#	 I %.OO$5$5   j#\22 	# 		 		I-y$??F!(,???G   
  " r-   c                     t           dS ddi} |                                 D ]f\  }}t          t           |          r|D ]H}t          t           |d          }|.t	          t           ||           t          j        d||            nIgdS )zEProvide aliases for legacy block names embedded in older model files.NProto26)Protor8   )ultralytics_blockr:   r   r;   r<   r
   r   r=   s        r#   _patch_ultralytics_block_compatrH   `   s      	:I %.OO$5$5   j$l33 	# 		 		I.	4@@F!)<@@@G   
  " r-   c                      t           t          rdS t           j        t          t          dfd} | t           _        dadS )zJResolve MobileCLIP TorchScript assets from local files before downloading.N)zmobileclip_blt.tszmobileclip2_b.tsc                    t           j                            t          |                     }                    |          }|r6t           j                            |          rt          j        d|           |S  | g|R i |S )Nz Using local text-model asset: %s)r(   r)   basenamestrgetisfiler
   r   )fileargskwargs
asset_name
local_pathlocal_assetsoriginal_attempt_download_assets        r#   %_attempt_download_asset_offline_firstzQ_patch_ultralytics_asset_downloads.<locals>._attempt_download_asset_offline_first   s    W%%c$ii00
!%%j11
 	"'..44 	K:JGGG..tEdEEEfEEEr-   T)ultralytics_downloads_DOWNLOAD_PATCHEDattempt_download_assetr   r   )rV   rT   rU   s    @@r#   "_patch_ultralytics_asset_downloadsrZ   x   sn     $(9$&;&R#// L
F F F F F F 4Y0r-   c                      t           rdS 	 ddl} n# t          $ r Y dS w xY w| j        t          t          dfd}|| _        da dS )zXResolve OpenAI CLIP weights from local files before falling back to user cache/download.Nr   )zViT-B/32zViT-B-32.ptc                 L   t          |           }                    |          p1                    t          j                            |                    }|r@t          j                            |          r!t          j        d|            |g|R i |S  | g|R i |S )NzUsing local CLIP asset: %s)rL   rM   r(   r)   rK   rN   r
   r   )namerP   rQ   rR   rS   rT   original_loads        r#   _load_offline_firstz8_patch_clip_asset_downloads.<locals>._load_offline_first   s    YY
!%%j11c\5E5EbgFVFVWaFbFb5c5c
 	>"'..44 	>K4jAAA ==d===f===}T3D333F333r-   T)_CLIP_PATCHEDclipr    loadr   )ra   r_   rT   r^   s     @@r#   _patch_clip_asset_downloadsrc      s          IM%( L
4 4 4 4 4 4 $DIMMMs    
  c                      t           t                    r fdt                     D             S t           t          t          f          rd  D             S g S )Nc                 :    g | ]}t          |                   S  rL   ).0indexnamess     r#   
<listcomp>z$_normalize_names.<locals>.<listcomp>   s%    ===eE%L!!===r-   c                 ,    g | ]}t          |          S rf   rg   rh   items     r#   rk   z$_normalize_names.<locals>.<listcomp>   s    ,,,dD		,,,r-   )
isinstancedictsortedlisttuple)rj   s   `r#   _normalize_namesrt      sd    % >====ve}}====%$'' -,,e,,,,Ir-   prompt_classesc           	      r   t          t          | dd                    }|s2t          t          t          | dg                               }|| _        t          |p|          }|sd S t          t          | dd                    }||k    r+|                     t          |                     || _        d S d S )N_codex_default_classesrf   rj   _codex_active_classes)rs   r;   rt   rw   set_classesrr   rx   )modelru   default_classesdesired_classesactive_classess        r#   _ensure_general_prompt_stater~      s    GE+CRHHIIO 7 01L1L M MNN'6$N=o>>O 75*A2FFGGN(($//000&5### )(r-   c           
         t          |           }t          5  t                              |          }||cd d d            S t          t          dt          pd           t                       t                       t                       t                       t          |           }t          j                            |          st          d|           t	          |          }t!          |           r9t#          t%          t'          |dg                               }||_        ||_        |t          |<   t,                              |t1          j                               |cd d d            S # 1 swxY w Y   d S )Nzultralytics import failed: z%not installed or missing dependencieszmodel file not found: rj   )r,   _CACHE_LOCKr   rM   r   r   ULTR_ERRrZ   rc   rC   rH   r   r(   r)   existsFileNotFoundErrorr   rs   rt   r;   rw   rx   r   
setdefault	threadingLock)r%   	cache_keyrz   
model_pathr{   s        r#   	get_modelr      s    ++I	    ++       
 <ch.a:acc   	+,,,#%%%&(((')))'	22
w~~j)) 	K#$IZ$I$IJJJZ  %i00 	:#$4WUGR5P5P$Q$QRRO+:E(*9E'"'Y	9>+;+;<<<7                 s   E5D&E55E9<E9      urlc                    	 t                               | |d          }|j        }t          |d          r|j                            d          nd }d|cxk    rdk     rn n
|j        ||fS d ||fS # t          j        $ r8}	 d |j        |j        j        nd d fcY d }~S # t          $ r Y Y d }~dS w xY wd }~wt          $ r Y dS w xY w)NT)timeoutstreamheaderszContent-Type   i,  )NNN)
sessionrM   status_coder   r   contentrequests	HTTPErrorresponser    )r   r   respcodecontent_typer"   s         r#   download_image_with_statusr      s/    {{3{==;B4;S;S]t|''777Y]$<|33T<'' $ $ $	$S\5M11SWY]]]]]]]] 	$ 	$ 	$#######	$       sB   A)A1 ,A1 1CBC
B0(B3/B00B33CCimagesconf_threshallowed_classesimgszc                 B   t                               t          |          t          j                              }|5  t          |          rt          ||           |                    | t          d          |d          }d d d            n# 1 swxY w Y   g }	|D ]}
	 |
j	        }||j
        |	                    d           )|j
                                        }et          |d          rU|j        Nd |j                                        D             }t          fdt!          ||          D                       }nt          fd|D                       }|	                    |           # t"          $ r |	                    d           Y w xY w|	S )N      ?Fconfr   verboseclsc                 ,    g | ]}t          |          S rf   )intrm   s     r#   rk   z"_predict_batch.<locals>.<listcomp>  s    EEE$CIIEEEr-   c              3   L   K   | ]\  }}t          |          k    o|v V  d S r'   float)rh   r   cls_idr   r   s      r#   	<genexpr>z!_predict_batch.<locals>.<genexpr>  sP        $f $KK;.L6_3L     r-   c              3   >   K   | ]}t          |          k    V  d S r'   r   )rh   r   r   s     r#   r   z!_predict_batch.<locals>.<genexpr>  s.      LL$5;;+5LLLLLLr-   )r   r   r,   r   r   r   r~   predictr   boxesr   appendtolistr   r   anyzipr    )r   rz   r   r   r   r%   ru   
model_lockresultsoutputresultr   	conf_listcls_listkeeps     ``           r#   _predict_batchr      s'    (()9))D)DinFVFVWWJ	 a a%i00 	@(???--Sd-C-C5Z_-``	a a a a a a a a a a a a a a a F ! !	!LE}
 2e$$$
))++I*wue/D/D*I^EE%)2B2B2D2DEEE     (+Ix(@(@    
 LLLL)LLLLLMM$ 	! 	! 	!MM%     	!Ms+   ABBB#%E:	B0E::FFc                    | sg S g }| D ]K}|j         dk    r)|                    |                    d                     6|                    |           Lt          |          }t                              t          |          t          j                              }|5  t          |          r<t          ||           t          dt          t          |          d                    }	nt          dt          |                    }	|                    ||	|d          }
d d d            n# 1 swxY w Y   g }|
D ]}g }t          |dd           }t          |dd           pt          |dd           pi }||j        |                    |           Y	 |j                                        }|j        |j                                        ndgt'          |          z  }|j        |j                                        nd	gt'          |          z  }n%# t*          $ r |                    |           Y w xY wt-          |||          D ][\  }}}	 t/          |          }d
 |d d         D             \  }}}}n# t*          $ r Y =w xY wt          |          t          |          k     rbd}t1          |t2                    r$t5          |                    |d                    }nNt1          |t8          t:          f          r2d	|cxk    rt'          |          k     rn nt5          ||                   }|                    ||t=          t          |          d          t=          |d          t=          |d          t=          |d          t=          |d          d           ]|                    |           |S )NRGBgMbP?r   Fr   r   rj   g        r   c                 ,    g | ]}t          |          S rf   r   )rh   values     r#   rk   z-predict_image_boxes_batch.<locals>.<listcomp>P  s    !G!G!G5%,,!G!G!Gr-       r   )class_index
class_name
confidencex1y1x2y2)moder   convertr   r   r   r,   r   r   r   r~   r   r   r   r   r;   xyxyr   r   lenr   r    r   r   ro   rp   rL   rM   rr   rs   round)r   r%   r   r   ru   prepared_imagesimagerz   r   predict_confr   outputsr   r:   r   rj   	xyxy_listr   r   coords
conf_value	cls_valuer   r   r   r   r   r   s                               r#   predict_image_boxes_batchr      s?     	)+O * *:""5==#7#78888""5))))i  E(()9))D)DinFVFVWWJ	 ` `%i00 	:(???uc%*<*<d&C&CDDLLueK&8&899L--l%Y^-__` ` ` ` ` ` ` ` ` ` ` ` ` ` ` !#G + +....U'%$2O2OUSU=EJ.NN5!!!	
))++I/4z/E
))+++C5SVW`SaSaKaI-2Y-Buy'')))cR[nnH\HH 	 	 	NN5!!!H	 .1Ix-P-P 	 	)FJ	!)nn!G!GF2A2J!G!G!GBBB   Z  5#5#555J%&& 5 ;!;!;<<

ED%=11 5a;6S6S6S6SU6S6S6S6S6S {!344
LL#.","'j(9(91"="=A,,A,,A,,A,, 
 
 
 
 	uNs8   BD--D14D1A?HH87H8(I==
J
	J
)r   N)r   r'   )=r(   r   typingr   r   r   PILr   shared.config.configr   r   r   r	   r
   r   r   r   ultralyticsr   ultralytics.nn.modulesr   rG   r   r9   ultralytics.utilsr   rW   r    r"   rL   r   rp   object__annotations__r   r   r   r$   Sessionr   r   updaterX   r`   r,   rC   rH   rZ   rc   rr   rt   r~   r   rs   bytesr   r   r   boolr   r   rf   r-   r#   <module>r      s&   					                                             
      AAAAAA??????DDDDDDD   D s3xxHHHHHH #%d3; $ $ $*,d3	&' , , ,inI I I I      
(


   NO    L L L L L L   6   0   0   :tCy    6S	D8H 6T 6 6 6 6     D    	 
54<tS4Z/0       4 (,$ $$ $ c#h'	$
 $ $ I$$ 
$Z$ $ $ $X (,I III I 	I
 I$I 
$t*I I I I I Is   A
 
A,A''A,