§
     ’Þj 9  ã                  ó(  — d dl mZ d dlZd dlmZ d dlm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	Zd
ZdZdZdZdZdZdZdZdZdZdZdZd\  ZZd	ZdZ dZ!dZ"dCd„Z#ed„ ¦   «         Z$dDd„Z%dEdFd%„Z&dGd'„Z'dEdHd/„Z(dId2„Z)dJdKd6„Z*dLedd7d8œdMdA„Z+g dB¢Z,dS )Né    )ÚannotationsN)Úcontextmanager)ÚAny)ÚImage)ÚQwen3_5ForCausalLM)Ú_prepare_multimodal_vllm_prompt)Ú!decode_video_frame_indices_ffmpegé   é
   i   i   i @  é€   é    é   i   é   é   )g      @r
   z¸Answer the user's question about the labeled visual inputs accurately and concisely. Inputs may be images or ordered frames from one or more videos. If the answer is uncertain, say so.Úprompt_enhancer_llm_modelÚ0prompt_enhancer_image_caption_vision_tower_modelÚreturnÚboolc                ó
  ‡‡‡— | �|�t          | j        t          ¦  «        sdS |j                             t
          ¦  «        | j        ust
          |j        vrdS ddlm} | 	                    | j        ¦  «        r|  
                    ¦   «         d uS t
          dz   Š|j        t
                   Št          ˆˆfd„|j        D ¦   «         ¦  «        r0t          d„ | j                             ¦   «         D ¦   «         ¦  «        sdS |  
                    ¦   «         j        }|j        j        }t%          |d¦  «        r||j        j        z  }t(          dz   Št+          ˆfd„|j                             ¦   «         D ¦   «         ¦  «        }||k    S )	NFr   )Úruntimeú/c              3  ót   •K  — | ]2}|                      ‰¦  «        ¯|t          ‰¦  «        d …         ‰v V — Œ3d S ©N)Ú
startswithÚlen)Ú.0ÚnameÚprefixÚ	preloadeds     €€ú;C:\Users\johnn\OneDrive\Documents\AI\shared\deepy\vision.pyú	<genexpr>z)can_keep_text_resident.<locals>.<genexpr>/   sL   øè è € ÐpÐp°4ÐX\×XgÒXgÐhnÑXoÔXoÐpˆt•C˜‘K”K�L�LÔ! YÐ.ÐpÐpÐpÐpÐpÐpó    c              3  ó$   K  — | ]}|j         V — Œd S r   )Úis_cuda)r   Ú	parameters     r    r!   z)can_keep_text_resident.<locals>.<genexpr>/   sS   è è € ð  |{ð  |{ð  S\ð  }Fô  }Nð  |{ð  |{ð  |{ð  |{ð  |{ð  |{r"   Úkv_cache_scalesc              3  ób   •K  — | ])\  }}|t           k    s|                     ‰¦  «        ¯%|V — Œ*d S r   )Ú_VISION_MODEL_IDr   )r   r   ÚsizeÚvision_prefixs      €r    r!   z)can_keep_text_resident.<locals>.<genexpr>6   sh   øè è € ð  Uð  U¡
  dÐY]ÕaqÒYqÐYqÐuy÷  vEò  vEð  FSñ  vTô  vTÐYq�tÐYqÐYqÐYqÐYqð  Uð  Ur"   )Ú
isinstanceÚmodelr   ÚmodelsÚgetÚ_TEXT_MODEL_IDÚactive_models_idsÚmmgpr   Údynamic_preloadÚ_get_live_llmÚpreloaded_blocks_per_modelÚallÚblocks_of_modulesÚ
parametersÚmodel_runnerÚkv_cacheÚnbytesÚhasattrr&   r(   ÚsumÚblocks_of_modules_sizesÚitems)	r   ÚmanagerÚmmgp_runtimeÚrunnerÚcache_bytesÚvision_bytesr   r   r*   s	         @@@r    Úcan_keep_text_residentrD   $   sã  øøø€ Ø€˜'˜/µ¸G¼MÕK]Ñ1^Ô1^˜/ØˆuØ„~×Ò�.Ñ)Ô)°´Ð>Ð>Å.ÐX_ÔXqÐBqÐBqØˆuØ,Ð,Ð,Ð,Ð,Ð,Ø×#Ò# G¤MÑ2Ô2ð 3à×$Ò$Ñ&Ô&¨dÐ2Ð2Ý˜cÑ!€FØÔ2µ>ÔB€IÝÐpÐpÐpÐpÐp¸7Ô;TÐpÑpÔpÑpÔpð Õx{ð  |{ð  |{ð  `gô  `m÷  `xò  `xñ  `zô  `zð  |{ñ  |{ô  |{ñ  y{ô  y{ð ØˆuØ×"Ò"Ñ$Ô$Ô1€FØ”/Ô(€KÝˆvÐ(Ñ)Ô)ð 5Ø�vÔ-Ô4Ñ4ˆÝ$ sÑ*€MÝð  Uð  Uð  Uð  U¨gÔ.M×.SÒ.SÑ.UÔ.Uð  Uñ  Uô  Uñ  Uô  U€Lð ˜,Ò&Ð&r"   c           	   #  ó&  ‡K  — ddl m} | j        }|                      ¦   «         }|j        }|j                             d¦  «        }‰j        }|j        j        }	|	j	        }
ˆfd„}	 |j
                             ¦   «          t          |_        ||_        i |¥t          g |                     t          g ¦  «        ¢t          ‘t          g |                     t          g ¦  «        ¢t          ‘i¥‰_        t                                |	d|j        ¦  «         |                      d¦  «         |V —  |¦   «          t                                |	d|
¦  «         |‰_        |j
                             ¦   «          ||_        |€|`n||_        |�|                      |¦  «         dS dS #  |¦   «          t                                |	d|
¦  «         |‰_        |j
                             ¦   «          ||_        |€|`n||_        |�|                      |¦  «         w w xY w)zGLend the assistant's cache memory to vision without moving its weights.r   )Ú_ASSISTANT_PREFILL_CHUNK_TOKENSÚ_prefill_chunk_tokensc                 ó(  •— t           ‰j        vrd S t          j                             ¦   «          t           dz   } ‰j        D ]_}|t           k    s|                     | ¦  «        r=‰                     t           |t           k    rd n|t          | ¦  «        d …         ¦  «         Œ`‰j         	                    t           ¦  «        }‰j         
                    |¦  «         ‰j         
                    |¦  «         t          j                             ¦   «          d S )Nr   )r(   r0   ÚtorchÚcudaÚsynchronizer6   r   Úgpu_unload_blocksr   ÚindexÚpopÚactive_modelsÚempty_cache)r   r   rM   r?   s      €r    Úunload_visionz*resident_inspection.<locals>.unload_visionI   s  ø€ Ý 7Ô#<Ð<Ð<ØˆFÝŒ
×ÒÑ Ô Ð å! CÑ'ˆØÔ-ð 	vð 	vˆDØÕ'Ò'Ð'¨4¯?ª?¸6Ñ+BÔ+BÐ'Ø×)Ò)Õ*:ÀDÕL\ÒD\ÐD\¸D¸DÐbfÕgjÐkqÑgrÔgrÐgsÐgsÔbtÑuÔuÐuøØÔ)×/Ò/Õ0@ÑAÔAˆØÔ!×%Ò% eÑ,Ô,Ð,ØÔ×!Ò! %Ñ(Ô(Ð(ÝŒ
×ÒÑ Ô Ð Ð Ð r"   Ú_input_embedding_modelzwInspection: keeping Qwen weights resident; lending assistant cache memory to vision (and Qwen blocks if it needs more).N)Ú/shared.prompt_enhancer.qwen35_assistant_runtimerF   r,   Úsnapshot_contextÚ#_prompt_enhancer_min_model_len_hintÚ__dict__r.   Úcotenants_mapÚlanguage_modelrR   Ú_prompt_enhancer_vllm_engineÚcloseÚVISION_MIN_MODEL_LENrG   r/   r(   ÚobjectÚ__setattr__Ú
token_embdÚ_logÚrestore_snapshot)r   Úcaption_modelr?   rF   r,   ÚsnapshotÚmin_model_lenÚprefill_chunk_tokensÚ	cotenantsÚadapterÚinput_embeddingrQ   s     `         r    Úresident_inspectionrh   <   sœ  øè è € ð `Ð_Ð_Ð_Ð_Ð_àŒM€EØ×'Ò'Ñ)Ô)€HØÔ=€MØ œ>×-Ò-Ð.EÑFÔFÐØÔ%€IØÔ!Ô0€GØÔ4€Oð!ð !ð !ð !ð !ð/ð 	Ô*×0Ò0Ñ2Ô2Ð2Ý4HˆÔ1Ø&EˆÔ#ð !@ 9ð  !@­nÐ>tÀ	ÇÂÍnÐ^`Ñ@aÔ@aÐ>tÕcsÐ>tõ  wGð  Ið  KT÷  KXò  KXõ  Yið  kmñ  Knô  Knð  Iõ  p~ð  Ið  !@ð  !@ˆÔå×Ò˜7Ð$<¸eÔ>NÑOÔOÐOØ�Šð  Oñ  	Pô  	Pð  	PØÐÐÐàˆ‰ŒˆÝ×Ò˜7Ð$<¸oÑNÔNÐNØ )ˆÔØÔ*×0Ò0Ñ2Ô2Ð2Ø4AˆÔ1ØÐ'ØÐ+Ð+à*>ˆEÔ'ØÐØ×$Ò$ XÑ.Ô.Ð.Ð.Ð.ð  Ðøð 	ˆ‰ŒˆÝ×Ò˜7Ð$<¸oÑNÔNÐNØ )ˆÔØÔ*×0Ò0Ñ2Ô2Ð2Ø4AˆÔ1ØÐ'ØÐ+Ð+à*>ˆEÔ'ØÐØ×$Ò$ XÑ.Ô.Ð.Ð.ð  øøøs   Á&CF ÆA3HÚbboxr   úlist[int] | Nonec                óô  — | €d S t          | t          t          f¦  «        rt          | ¦  «        dk    rt	          d¦  «        ‚	 d„ | D ¦   «         }t          d„ t          | |¦  «        D ¦   «         ¦  «        rt          ‚n/# t          t          t          f$ r}t	          d¦  «        |‚d }~ww xY w|\  }}}}t          d„ |D ¦   «         ¦  «        st	          d¦  «        ‚||k    s||k    rt	          d¦  «        ‚|S )Nr   z*bbox must be [x_min, y_min, x_max, y_max].c                ó,   — g | ]}t          |¦  «        ‘ŒS © ©Úint©r   Úvalues     r    ú
<listcomp>z-normalize_inspection_bbox.<locals>.<listcomp>v   s   € Ð/Ð/Ð/ •#�e‘*”*Ð/Ð/Ð/r"   c              3  ól   K  — | ]/\  }}t          |t          ¦  «        pt          |¦  «        |k    V — Œ0d S r   )r+   r   Úfloat)r   rq   Úparseds      r    r!   z,normalize_inspection_bbox.<locals>.<genexpr>w   s@   è è € ÐhÐhÁ]ÀUÈF�z˜%¥Ñ&Ô&Ð@­%°©,¬,¸&Ò*@ÐhÐhÐhÐhÐhÐhr"   z,bbox values must be integers from 0 to 1000.c              3  ó6   K  — | ]}d |cxk    odk    nc V — ŒdS )r   éè  Nrm   rp   s     r    r!   z,normalize_inspection_bbox.<locals>.<genexpr>|   s>   è è € Ð6Ð6 eˆq�EÐ!Ð!Ò!Ð!˜TÒ!Ð!Ð!Ð!Ð6Ð6Ð6Ð6Ð6Ð6r"   z�bbox=[x_min,y_min,x_max,y_max] uses integers 0..1000 relative to the full image; x_max must be greater than x_min and y_max greater than y_min.)
r+   ÚlistÚtupler   Ú
ValueErrorÚanyÚzipÚ	TypeErrorÚOverflowErrorr5   )ri   ÚvaluesÚexcÚx_minÚy_minÚx_maxÚy_maxs          r    Únormalize_inspection_bboxr…   p   s9  € Ø€|ØˆtÝ�d�T¥5˜MÑ*Ô*ð G­c°$©i¬i¸1ªn¨nÝÐEÑFÔFÐFðRØ/Ð/¨$Ð/Ñ/Ô/ˆÝÐhÐhÕVYÐZ^Ð`fÑVgÔVgÐhÑhÔhÑhÔhð 	ÝÐð	øå•z¥=Ð1ð Rð Rð RÝÐGÑHÔHÈcÐQøøøøðRøøøà!'Ñ€Eˆ5�%˜ÝÐ6Ð6¨vÐ6Ñ6Ô6Ñ6Ô6ð IÝÐGÑHÔHÐHØ�‚~€~˜ %š˜Ýð  kñ  lô  lð  	lØ€Ms   Á:A? Á?B+ÂB&Â&B+ÚimageÚmax_edgeú
int | NoneÚ
max_pixelsúImage.Imagec           
     ó4  — |                       d¦  «        }|�ò|\  }}}}|j        \  }	}
t          |	dz
  t          j        ||	z  dz  ¦  «        ¦  «        }t          |
dz
  t          j        ||
z  dz  ¦  «        ¦  «        }t          |dz   t          |	t          j        ||	z  dz  ¦  «        ¦  «        ¦  «        }t          |dz   t          |
t          j        ||
z  dz  ¦  «        ¦  «        ¦  «        }|                     ||||f¦  «        }|�É|j        |j	        z  t          |¦  «        k    r©t          j        t          |¦  «        |j        |j	        z  z  ¦  «        }|                     t          dt          j        |j        |z  ¦  «        ¦  «        t          dt          j        |j	        |z  ¦  «        ¦  «        ft          j        j        ¦  «        }nC|�A|                     t          |¦  «        t          |¦  «        ft          j        j        ¦  «         |S )NÚRGBé   rw   )Úconvertr)   ÚminÚmathÚfloorÚmaxÚceilÚcropÚwidthÚheightro   ÚsqrtÚresizer   Ú
ResamplingÚLANCZOSÚ	thumbnail)r†   r‡   r‰   ri   Úpreparedr�   r‚   rƒ   r„   r•   r–   ÚleftÚtopÚrightÚbottomÚscales                   r    Úprepare_inspection_imager¢   ƒ   sâ  € Ø�}Š}˜UÑ#Ô#€HØÐØ%)Ñ"ˆˆu�e˜UØ œ‰ˆˆvÝ�5˜1‘9�dœj¨°©¸Ñ)=Ñ>Ô>Ñ?Ô?ˆÝ�&˜1‘*�dœj¨°©¸$Ñ)>Ñ?Ô?Ñ@Ô@ˆÝ�D˜1‘H�c %­¬°5¸5±=À4Ñ3GÑ)HÔ)HÑIÔIÑJÔJˆÝ�S˜1‘W�c &­$¬)°E¸F±NÀTÑ4IÑ*JÔ*JÑKÔKÑLÔLˆØ—=’= $¨¨U°FÐ!;Ñ<Ô<ˆØÐ (¤.°8´?Ñ"BÅSÈÁ_Ä_Ò"TÐ"TÝ”	�#˜j™/œ/¨X¬^¸h¼oÑ-MÑNÑOÔOˆØ—?’?¥C¨­4¬:°h´nÀuÑ6LÑ+MÔ+MÑ$NÔ$NÕPSÐTUÕW[ÔWaÐbjÔbqÐtyÑbyÑWzÔWzÑP{ÔP{Ð#|õ  Dô  Oô  Wñ  Xô  XˆˆØ	Ð	Ø×Ò�C ™MœM­3¨x©=¬=Ð9½5Ô;KÔ;SÑTÔTÐTØ€Or"   ro   c                ó$   — t          | |¬¦  «        S )N)r‡   )r¢   )r†   r‡   s     r    Úresize_inspection_imager¤   •   s   € Ý# E°HÐ=Ñ=Ô=Ð=r"   ÚpathÚstrÚframe_indicesú	list[int]Úbboxesúlist[list[int] | None] | Noneúlist[Image.Image]c           
     óX  — |�/t          |¦  «        t          |¦  «        k    rt          d¦  «        ‚g }t          dt          |¦  «        t          ¦  «        D ]Ò}|||t          z   …         }t	          | |d¬¦  «        }t          |¦  «        t          |¦  «        k    r0t          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚t          |¦  «        D ]L\  }	}
|€d n
|||	z            }|                     t          t          j
        |
¦  «        |||¬¦  «        ¦  «         ŒMŒÓ|S )	Nz.Video frame bboxes must match the frame count.r   Únumpy)ÚbridgezVideo decoder returned z of z requested frames.)r‡   r‰   ri   )r   rz   ÚrangeÚVISION_VIDEO_DECODE_BATCH_SIZEr	   ÚRuntimeErrorÚ	enumerateÚappendr¢   r   Ú	fromarray)r¥   r§   r‡   r‰   r©   ÚimagesÚoffsetÚcurrent_indicesÚframesÚframe_indexÚframeri   s               r    Údecode_inspection_video_framesr»   ™   sO  € ØÐ�c &™kœk­S°Ñ-?Ô-?Ò?Ð?ÝÐIÑJÔJÐJØ€FÝ˜�3˜}Ñ-Ô-Õ/MÑNÔNð Að AˆØ'¨¨vÕ8VÑ/VÐ(VÔWˆÝ2°4¸ÐQXÐYÑYÔYˆÝˆv‰;Œ;�#˜oÑ.Ô.Ò.Ð.ÝÐr½¸V¹¼ÐrÐrÍ#ÈoÑJ^ÔJ^ÐrÐrÐrÑsÔsÐsÝ"+¨FÑ"3Ô"3ð 	Að 	AÑˆK˜Ø!˜>�4�4¨v°f¸{Ñ6JÔ/KˆDØ�MŠMÕ2µ5´?À5Ñ3IÔ3IÐT\ÐisÐz~ÐÑÔñ  Aô  Að  Að  Að	Að €Mr"   ÚremoteÚmid_res_samplingc                ó>   — | rt           nt          }|r
|t          z  n|S r   )ÚVISION_VIDEO_REMOTE_MAX_IMAGESÚVISION_VIDEO_MAX_IMAGESÚ#VISION_VIDEO_MID_RES_SAMPLE_DIVISOR)r¼   r½   Ú
base_counts      r    Úvideo_inspection_sample_countrÃ   ¨   s*   € Ø39ÐVÕ/Ð/Õ?V€JØ@PÐ`ˆ:Õ<Ñ<Ð<ÐV`Ð`r"   Ú	processorÚmax_pixels_per_imageútuple[dict[str, int], int, int]c           
     ó¾  — | j         }t          |j        ¦  «        }t          |j        ¦  «        |z  }t          |z  |z  }|€|nt          |t          |¦  «        ¦  «        }|€6t          t          |j                             d|¦  «        ¦  «        |¦  «        nt          ||z  |¦  «        }||dœ|t          t          t          j	        |||z  z  ¦  «        ¦  «        fS )NÚshortest_edge)rÈ   Úlongest_edge)
Úimage_processorro   Ú
merge_sizeÚ
patch_sizeÚ"VISION_MAX_VISUAL_TOKENS_PER_IMAGEr�   r)   r.   r�   r“   )rÄ   rÅ   rÊ   rË   Ú
token_edgeÚtoken_budget_pixelsr‰   Ú
min_pixelss           r    Ú_inspection_image_sizerÑ   ­   s0  € ØÔ/€OÝ�_Ô/Ñ0Ô0€JÝ�_Ô/Ñ0Ô0°:Ñ=€JÝ<¸zÑIÈJÑVÐØ(<Ð(DÐ$Ð$Í#ÐNaÕcfÐg{Ñc|Ôc|ÑJ}ÔJ}€JØ`tÐ`|••S˜Ô-×1Ò1°/À:ÑNÔNÑOÔOÐQ[Ñ\Ô\Ð\õ  CFð  GQð  T^ñ  G^ð  `jñ  Ckô  Ck€JØ'¸ÐDÐDÀjÕRUÕVxÕz~ô  {Dð  EOð  S]ð  `jñ  Sjñ  Ekñ  {lô  {lñ  Smô  Smð  mð  mr"   F)Ú
max_imagesrÅ   Úresidentra   ÚquestionÚsystem_promptú
str | NoneÚimage_labelsúlist[str] | NonerÒ   rÓ   c          	     ó   ‡‡— t          |pd¦  «                             ¦   «         }t          |¦  «        dk    rt          d¦  «        ‚t	          |t
          t          f¦  «        rt          |¦  «        n|g}	dt          |	¦  «        cxk    rt          |¦  «        k    s"n t          dt          |¦  «        › d�¦  «        ‚|�/t          |¦  «        t          |	¦  «        k    rt          d¦  «        ‚g }
t          |pt          ¦  «                             ¦   «         }t          |¦  «        dk    r|
 	                    d|d	œ¦  «         g }t          |	¦  «        D ]\\  }}|�=| 	                    d
t          ||         ¦  «                             ¦   «         dœ¦  «         | 	                    d|dœ¦  «         Œ]| 	                    d
|dœ¦  «         |
 	                    d|d	œ¦  «         |                     |
ddd¬¦  «        }t          ||¬¦  «        \  }ŠŠ ||g|	dddd|i¬¦  «        }|                     d¦  «        }t          |d¦  «        r|                     ¦   «         n|}|� t          |¦  «        t          |	¦  «        k    rt!          d¦  «        ‚t#          ˆˆfd„|D ¦   «         ¦  «        rt!          d¦  «        ‚d }|�r-|                     d¦  «        }g }t&          ‰z  ‰z  }dx}x}}t)          j        ¦   «         5  t          |¦  «        D ]}\  }}t-          j        |¦  «        }|r]||z   |k    rT| j                             ||||z   …         |||…         d¬¦  «        }|                     |j        ¦  «         ~|||z   d}}}||z  }Œ~| j                             ||||z   …         ||d …         d¬¦  «        }|                     |j        ¦  «         ~d d d ¦  «         n# 1 swxY w Y   t9          | ||¬¦  «        S )NÚ r   zVision question is empty.r�   z)Vision inspection requires between 1 and z images.z/Vision input labels must match the image count.Úsystem)ÚroleÚcontentÚtext)ÚtyperÞ   r†   )rß   r†   ÚuserFT)ÚtokenizeÚadd_generation_promptÚenable_thinking)rÅ   Úptr)   )rÞ   rµ   Úreturn_tensorsÚpaddingÚreturn_mm_token_type_idsÚimages_kwargsÚimage_grid_thwÚtolistz9Vision processor returned an unexpected image grid count.c              3  ó®   •K  — | ]O}t          |d          ¦  «        t          |d         ¦  «        z  t          |d         ¦  «        z  ‰‰z  z  ‰k    V — ŒPdS )r   r�   r   Nrn   )r   ÚgridÚmax_visual_tokensrË   s     €€r    r!   z.build_image_question_prompt.<locals>.<genexpr>Ù   s\   øè è € Ð
Ð
Ðko�3ˆt�AŒw‰<Œ<�#˜d 1œg™,œ,Ñ&­¨T°!¬W©¬Ñ5¸*ÀzÑ:QÑRÐUfÒfÐ
Ð
Ð
Ð
Ð
Ð
r"   z;Vision processor exceeded the per-image visual token limit.Úpixel_values)Úreturn_dict)Úimage_features)r¦   Ústripr   rz   r+   rx   ry   ro   ÚVISION_QA_SYSTEM_PROMPTr³   r²   Úapply_chat_templaterÑ   r.   r;   rê   r±   r{   rN   rÍ   rI   Úinference_moder�   Úprodr,   Úget_image_featuresÚextendÚpooler_outputr   )ra   rÄ   r†   rÔ   rÕ   r×   rÒ   rÅ   rÓ   rµ   ÚmessagesrÝ   rM   Úcurrent_imagerÞ   Ú
image_sizeÚmodel_inputsré   Úimage_gridsrð   rî   Úpatch_limitÚfirst_imageÚfirst_patchÚbatch_patchesrì   Úpatch_countÚoutputrí   rË   s                               @@r    Úbuild_image_question_promptr  ·   sï  øø€ Ý�8�>˜rÑ"Ô"×(Ò(Ñ*Ô*€HÝ
ˆ8�}„}˜ÒÐÝÐ4Ñ5Ô5Ð5Ý& u­tµU¨mÑ<Ô<ÐI�T�%‰[Œ[ˆ[À5À'€FØ•�F‘”Ð.Ð.Ò.Ð.�s :™œÒ.Ð.Ð.Ð.ÝÐ^ÅSÈÁ_Ä_Ð^Ð^Ð^Ñ_Ô_Ð_ØÐ¥C¨Ñ$5Ô$5½¸V¹¼Ò$DÐ$DÝÐJÑKÔKÐKØ€HÝ˜Ð@Õ)@ÑAÔA×GÒGÑIÔI€MÝ
ˆ=ÑÔ˜AÒÐØ�Š °mÐDÐDÑEÔEÐEØ€GÝ )¨&Ñ 1Ô 1ð Bð BÑˆˆ}ØÐ#Ø�NŠN FµC¸ÀUÔ8KÑ4LÔ4L×4RÒ4RÑ4TÔ4TÐUÐUÑVÔVÐVØ�Š °-Ð@Ð@ÑAÔAÐAÐAØ‡N‚N˜F¨HÐ5Ð5Ñ6Ô6Ð6Ø‡O‚O˜V°Ð8Ð8Ñ9Ô9Ð9Ø×(Ò(¨¸EÐY]ÐotÐ(ÑuÔu€DÝ0FÀyÐg{Ð0|Ñ0|Ô0|Ñ-€J�
Ð-Ø�9ØˆVØØØØ!%Ø˜zÐ*ðñ ô €Lð "×%Ò%Ð&6Ñ7Ô7€NÝ-4°^ÀXÑ-NÔ-NÐb�.×'Ò'Ñ)Ô)Ð)ÐTb€KØÐ�c +Ñ.Ô.µ#°f±+´+Ò=Ð=ÝÐVÑWÔWÐWÝ
Ð
Ð
Ð
Ð
Ð
Ðs~Ð
Ñ
Ô
ÑÔð ZÝÐXÑYÔYÐYØ€NØñ ð $×'Ò'¨Ñ7Ô7ˆØˆÝ8¸:ÑEÈ
ÑRˆØ45Ð5ˆÐ5�k MÝÔ!Ñ#Ô#ð 	ð 	Ý(¨Ñ5Ô5ð -ð -‘��tÝ"œi¨™oœo�Ø ð d ]°[Ñ%@À;Ò%NÐ%NØ*Ô0×CÒCÀLÐQ\Ð]hÐkxÑ]xÐQxÔDyð  |Jð  KVð  W\ð  K\ô  |]ð  koÐCñ  pô  p�FØ"×)Ò)¨&Ô*>Ñ?Ô?Ð?ØØ>CÀ[ÐS`ÑE`Ðbc¨m �KØ Ñ,��Ø"Ô(×;Ò;¸LÈÐU`ÐcpÑUpÐIpÔ<qð  tBð  CNð  COð  COô  tPð  ^bÐ;ñ  cô  cˆFØ×!Ò! &Ô"6Ñ7Ô7Ð7Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ +¨=¸,ÐWeÐfÑfÔfÐfs   Ë>CO#Ï#O'Ï*O')ÚVISION_ANSWER_MAX_NEW_TOKENSÚVISION_MAX_IMAGESrÍ   rò   ÚVISION_REMOTE_MAX_IMAGESÚVISION_REMOTE_MAX_IMAGE_EDGEÚVISION_VIDEO_MAX_IMAGE_EDGErÀ   Ú#VISION_VIDEO_MAX_SAMPLES_PER_SECONDÚ+VISION_VIDEO_SHORT_RANGE_SAMPLES_PER_SECONDÚ VISION_VIDEO_SHORT_RANGE_SECONDSÚ#VISION_VIDEO_MID_RES_MAX_IMAGE_EDGErÁ   r¿   r  r»   r…   r¢   r¤   rÃ   )r   r   )ri   r   r   rj   )NNN)
r†   r   r‡   rˆ   r‰   rˆ   ri   rj   r   rŠ   )r†   r   r‡   ro   r   rŠ   )r¥   r¦   r§   r¨   r‡   rˆ   r‰   rˆ   r©   rª   r   r«   )r¼   r   r½   r   r   ro   r   )rÄ   r   rÅ   rˆ   r   rÆ   )NN)ra   r   rÄ   r   r†   r   rÔ   r¦   rÕ   rÖ   r×   rØ   rÒ   ro   rÅ   rˆ   rÓ   r   )-Ú
__future__r   r�   Ú
contextlibr   Útypingr   rI   ÚPILr   Ú&shared.llm_engines.lmgp.models.qwen3_5r   Ú shared.prompt_enhancer.qwen35_vlr   Úshared.utils.video_decoder	   r  r  rÍ   r  Ú"VISION_LOCAL_ANSWER_MAX_NEW_TOKENSr[   r  rÀ   r¿   r	  r  rÁ   r
  r  r  r°   rò   r/   r(   rD   rh   r…   r¢   r¤   r»   rÃ   rÑ   r  Ú__all__rm   r"   r    ú<module>r     s   ðà "Ð "Ð "Ð "Ð "Ð "à €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à EÐ EÐ EÐ EÐ EÐ EØ LÐ LÐ LÐ LÐ LÐ LØ GÐ GÐ GÐ GÐ GÐ Gð Ð ØÐ Ø%)Ð "Ø#Ð Ø%)Ð "ØÐ Ø#Ð ØÐ Ø!$Ð Ø!Ð Ø&)Ð #Ø&'Ð #Ø&'Ð #ØPVÑ MÐ  Ð"MØ!"Ð ð UÐ Ø,€ØEÐ ð'ð 'ð 'ð 'ð0 ð0/ð 0/ñ „ð0/ðfð ð ð ð&ð ð ð ð ð$>ð >ð >ð >ðð ð ð ð ðað að að að
mð mð mð mð mð8gð  ~Oð  txð  KPð 8gð 8gð 8gð 8gð 8gð 8gðvð ð €€€r"   