ó
    �®žj¯  ã                   óŠ  • S SK r S SKJrJr  S SKJr  S SKJrJrJ	r	J
r
JrJr  S SKrS SKJrJrJrJrJr  S SKJr  S SKJr  S SKJrJrJr  S S	KJr  S S
KJ r   S SK!J"r"J#r#  S SK$J%r%   " S S\
5      r& " S S\5      r' " S S\5      r( " S S\'\(5      r)\" S\S9r* " S S\\\*   5      r+ " S S\+\   5      r, " S S\+\   5      r-g)é    N)ÚABCÚabstractmethod)ÚIterable)ÚAnyÚGenericÚOptionalÚProtocolÚTypeÚUnion)ÚBoundingBoxÚDocItemÚDoclingDocumentÚNodeItemÚPictureItem)ÚImage)ÚTypeVar)ÚItemAndImageEnrichmentElementÚPageÚVlmPrediction)ÚConversionResult)ÚBaseOptions)ÚInlineVlmOptionsÚTransformersPromptStyle)Úsettingsc                   ó@   • \ rS rSr\S\\   4S j5       rS\4S jrSr	g)ÚBaseModelWithOptionsé"   Úreturnc                 ó   • g ©N© )Úclss    ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/models/base_model.pyÚget_options_typeÚ%BaseModelWithOptions.get_options_type#   s   € Ø47ó    Úoptionsc                ó   • g r    r!   )Úselfr'   Úkwargss      r#   Ú__init__ÚBaseModelWithOptions.__init__&   s   € ¸3r&   r!   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úclassmethodr
   r   r$   r+   Ú__static_attributes__r!   r&   r#   r   r   "   s"   † ØØ7  kÑ!2Ó7ó Ø7à> ;×>r&   r   c                   ó@   • \ rS rSr\S\S\\   S\\   4S j5       rSr	g)ÚBasePageModelé)   Úconv_resÚ
page_batchr   c                 ó   • g r    r!   ©r)   r6   r7   s      r#   Ú__call__ÚBasePageModel.__call__*   ó   € ð 	r&   r!   N)
r-   r.   r/   r0   r   r   r   r   r:   r2   r!   r&   r#   r4   r4   )   s4   † ØðØ(ðØ6>¸t±nðà	�$‰óó ór&   r4   c                   ór   • \ rS rSrSr\S\\\\	R                  4      S\\\\   4   S\\   4S j5       rSrg)	ÚBaseVlmModelé1   zLBase class for Vision-Language Models that adds image processing capability.Úimage_batchÚpromptr   c                 ó   • g)aE  Process raw images without page metadata.

Args:
    image_batch: Iterable of PIL Images or numpy arrays
    prompt: Either:
        - str: Single prompt used for all images
        - list[str]: List of prompts (one per image, must match image count)

Raises:
    ValueError: If prompt list length doesn't match image count.
Nr!   )r)   r@   rA   s      r#   Úprocess_imagesÚBaseVlmModel.process_images4   ó   � r&   r!   N)r-   r.   r/   r0   Ú__doc__r   r   r   r   ÚnpÚndarrayÚstrÚlistr   rC   r2   r!   r&   r#   r>   r>   1   sX   † ÙVàðà˜e E¨2¯:©:Ð$5Ñ6Ñ7ðð �c˜4 ™9�nÑ%ðð 
�-Ñ	 ó	ó ór&   r>   c                   ó~   • \ rS rSr% Sr\\S'   \\S'   S\S\	4S jr
\S\S	\\   S\\   4S
 j5       rS\	S\	4S jrSrg)ÚBaseVlmPageModeléG   zÚBase implementation for VLM models that inherit from BasePageModel.

Provides a default __call__ implementation that extracts images from pages,
processes them using process_images, and attaches results back to pages.
Úvlm_optionsÚ	processorÚpager   c                 ó¶   •  U R                   R                  UR                  US9$ ! [         a(    U R                   R                  UR                  5      s $ f = f)aL  Build prompt with backward compatibility for user overrides.

Tries to call build_prompt with _internal_page parameter (for layout-aware
pipelines). Falls back to basic call if user override doesn't accept it.

Args:
    page: The full Page object with layout predictions and parsed_page.

Returns:
    The formatted prompt string.
)Ú_internal_page)rN   Úbuild_promptÚparsed_pageÚ	TypeError)r)   rP   s     r#   Ú_build_prompt_safeÚ#BaseVlmPageModel._build_prompt_safeR   sY   € ð	CØ×#Ñ#×0Ñ0°×1AÑ1AÐRVÐ0ÐWÐWøÜó 	Cà×#Ñ#×0Ñ0°×1AÑ1AÓBÒBð	Cús   ‚#& ¦/AÁAr6   r7   c                 ó   • g)zAExtract images from pages, process them, and attach results back.Nr!   r9   s      r#   r:   ÚBaseVlmPageModel.__call__d   rE   r&   Úuser_promptc           	      óÐ  • [         R                  " [        5      nU R                  R                  [
        R                  :X  a  U$ U R                  R                  [
        R                  :X  a  gU R                  R                  S:X  aO  UR                  S5        SnSnSnU SU U U 3nUR                  SU R                  R                   S	U 35        U$ U R                  R                  [
        R                  :X  a)  S
SS0SUS./S./nU R                  R                  USS9nU$ [        SU R                  R                   SSR                  S [
         5       5       S35      e)zFormulate a prompt for the VLM.Ú z#microsoft/Phi-4-multimodal-instructz"Using specialized prompt for Phi-4z<|user|>z<|assistant|>z<|end|>z<|image_1|>zprompt for z: ÚuserÚtypeÚimageÚtext)r^   r`   )ÚroleÚcontentT)Úadd_generation_promptzUnknown prompt style `z`. Valid values are z, c              3   ó8   #   • U  H  oR                   v •  M     g 7fr    )Úvalue)Ú.0Úss     r#   Ú	<genexpr>Ú4BaseVlmPageModel.formulate_prompt.<locals>.<genexpr>Ž   s#   é € ð  oYò  AXÐ{|×ovÖovò  AXùs   ‚Ú.)ÚloggingÚ	getLoggerr-   rN   Útransformers_prompt_styler   ÚRAWÚNONEÚrepo_idÚdebugÚCHATrO   Úapply_chat_templateÚRuntimeErrorÚjoin)r)   rZ   Ú_logÚuser_prompt_prefixÚassistant_promptÚprompt_suffixrA   Úmessagess           r#   Úformulate_promptÚ!BaseVlmPageModel.formulate_promptj   s�  € ä× Ò ¤Ó*ˆà×Ñ×5Ñ5Ô9P×9TÑ9TÓTØÐØ×Ñ×7Ñ7Ô;R×;WÑ;WÓWØØ×Ñ×%Ñ%Ð)NÓNØ�J‰JÐ;Ô<à!+ÐØ.ÐØ%ˆMà*Ð+¨;°{°mÀMÀ?ÐScÐRdÐeˆFØ�J‰J˜ T×%5Ñ%5×%=Ñ%=Ð$>¸bÀÀÐIÔJàˆMà×Ñ×7Ñ7Ô;R×;WÑ;WÓWð #à Ð)Ø!'°Ñ=ð ñðˆHð —^‘^×7Ñ7Ø°ð 8ð ˆFð ˆMäØ$ T×%5Ñ%5×%OÑ%OÐ$PÐPdÐei×enÑenñ  oYõ  AXó  oYó  fYð  eZð  Z[ð  \ó
ð 	
r&   r!   N)r-   r.   r/   r0   rF   r   Ú__annotations__r   r   rI   rV   r   r   r   r:   r{   r2   r!   r&   r#   rL   rL   G   sv   ‡ ñð "Ó!ØƒNðC tð C°ô Cð$ ðPØ(ðPØ6>¸t±nðPà	�$‰óPó ðPð
%
¨Cð %
°C÷ %
r&   rL   ÚEnrichElementT)Údefaultc                   ó¾   • \ rS rSr% \R
                  R                  r\\S'   \	S\
S\S\4S j5       r\	S\S\S\\   4S j5       r\	S\
S	\\   S\\   4S
 j5       rSrg)ÚGenericEnrichmentModelé•   Úelements_batch_sizeÚdocÚelementr   c                 ó   • g r    r!   )r)   r„   r…   s      r#   Úis_processableÚ%GenericEnrichmentModel.is_processable˜   s   € àr&   r6   c                 ó   • g r    r!   ©r)   r6   r…   s      r#   Úprepare_elementÚ&GenericEnrichmentModel.prepare_elementœ   r<   r&   Úelement_batchc                 ó   • g r    r!   )r)   r„   r�   s      r#   r:   ÚGenericEnrichmentModel.__call__¢   r<   r&   r!   N)r-   r.   r/   r0   r   Úperfrƒ   Úintr}   r   r   r   Úboolr‡   r   r   r~   r‹   r   r:   r2   r!   r&   r#   r�   r�   •   s¥   ‡ Ø'Ÿ}™}×@Ñ@Ð˜Ó@àð /ð ¸Hð Èó ó ðð ðØ(ðØ3;ðà	�.Ñ	!óó ðð
 ðØ"ðØ3;¸NÑ3Kðà	�(Ñ	óó ór&   r�   c                   ó0   • \ rS rSrS\S\S\\   4S jrSrg)ÚBaseEnrichmentModelé©   r6   r…   r   c                 óF   • U R                  UR                  US9(       a  U$ g )N©r„   r…   )r‡   ÚdocumentrŠ   s      r#   r‹   Ú#BaseEnrichmentModel.prepare_elementª   s%   € ð ×Ñ 8×#4Ñ#4¸gÐÖFØˆNØr&   r!   N)	r-   r.   r/   r0   r   r   r   r‹   r2   r!   r&   r#   r”   r”   ©   s$   † ðØ(ðØ3;ðà	�(Ñ	÷r&   r”   c                   óJ   • \ rS rSr% \\S'   Sr\\S'   S\S\S\	\
   4S jrS	rg
)ÚBaseItemAndImageEnrichmentModelé²   Úimages_scaleg        Úexpansion_factorr6   r…   r   c                 óì  • U R                  UR                  US9(       d  g [        U[        5      (       d   e[        U[        5      (       aR  UR                  UR                  5      nUb	  [        X#S9$ [        UR                  5      S:X  d  UR                  (       d  g UR                  S   nUR                  nUR                  U R                  U R                  5      nUR                  UR                  S   R                  -
  nUR                  U   R                  U R                  US9nUc=  [        U[        5      (       a(  UR                  UR                  5      nUb	  [        X#S9$ g [        X(S9$ )Nr—   )Úitemr_   r   )ÚscaleÚcropbox)r‡   r˜   Ú
isinstancer   r   Ú	get_imager   ÚlenÚprovÚpagesÚbboxÚexpand_by_scalerž   Úpage_nor�   )	r)   r6   r…   Úembedded_imÚelement_provr¨   Úexpanded_bboxÚpage_ixÚcropped_images	            r#   r‹   Ú/BaseItemAndImageEnrichmentModel.prepare_element¸   sS  € ð ×"Ñ" x×'8Ñ'8À'Ð"ÖJØä˜'¤7×+Ñ+Ð+Ð+ô �gœ{×+Ñ+Ø!×+Ñ+¨H×,=Ñ,=Ó>ˆKØÑ&Ü4¸'ÑUÐUÜ�W—\‘\Ó" aÓ'¨x¯~¯~Øð —|‘| A‘ˆØ× Ñ ˆØ×,Ñ,Ø×!Ñ! 4×#8Ñ#8ó
ˆð ×&Ñ&¨¯©¸Ñ):×)BÑ)BÑBˆØ Ÿ™ wÑ/×9Ñ9Ø×#Ñ#¨]ð :ð 
ˆð
 Ñ ¤Z°¼×%EÑ%EØ!×+Ñ+¨H×,=Ñ,=Ó>ˆKØÑ&Ü4¸'ÑUÐUàô -°'ÑOÐOr&   r!   N)r-   r.   r/   r0   Úfloatr}   rž   r   r   r   r   r‹   r2   r!   r&   r#   r›   r›   ²   s<   ‡ ð ÓØ!Ð�eÓ!ð%PØ(ð%PØ3;ð%Pà	Ð/Ñ	0÷%Pr&   r›   ).rk   Úabcr   r   Úcollections.abcr   Útypingr   r   r   r	   r
   r   ÚnumpyrG   Údocling_core.types.docr   r   r   r   r   Ú	PIL.Imager   Útyping_extensionsr   Údocling.datamodel.base_modelsr   r   r   Údocling.datamodel.documentr   Ú"docling.datamodel.pipeline_optionsr   Ú,docling.datamodel.pipeline_options_vlm_modelr   r   Údocling.datamodel.settingsr   r   r4   r>   rL   r~   r�   r”   r›   r!   r&   r#   Ú<module>r¾      sÅ   ðó ß #Ý $ß @× @ã ÷õ õ Ý %÷ñ õ
 8Ý :÷õ 0ô?˜8ô ?ô�Cô ô�3ô ô,H
�} lô H
ñV Ð)°8Ñ<€ô˜S '¨.Ñ"9ô ô(Ð0°Ñ:ô ô+PØÐ8Ñ9õ+Pr&   