Ë
    S^(h2  ã                   ó|   — d dl Z d dl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  e	«       rd dlmZ  G d	„ d
e«      Zy)é    Né   )ÚAutoProcessor)ÚVisionEncoderDecoderModel)Úis_vision_availableé   )ÚPipelineTool)ÚImagec                   óh   ‡ — e Zd ZdZdZdZeZeZ	dddœdddœd	œZ
dZˆ fd
„Zdddefd„Zd„ Zd„ Zˆ xZS )ÚDocumentQuestionAnsweringToolz*naver-clova-ix/donut-base-finetuned-docvqaz}This is a tool that answers a question about an document (pdf). It returns a string that contains the answer to the question.Údocument_qaÚimagezWThe image containing the information. Can be a PIL Image or a string path to the image.)ÚtypeÚdescriptionÚstringzThe question in English)ÚdocumentÚquestionc                 óN   •— t        «       st        d«      ‚t        ‰| �  |i |¤Ž y )NzBPillow must be installed to use the DocumentQuestionAnsweringTool.)r   Ú
ValueErrorÚsuperÚ__init__)ÚselfÚargsÚkwargsÚ	__class__s      €úm/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/agents/document_question_answering.pyr   z&DocumentQuestionAnsweringTool.__init__0   s'   ø€ Ü"Ô$ÜÐaÓbÐbä‰Ñ˜$Ð) &Ó)ó    r   r	   r   c                 óœ  — d}|j                  d|«      }| j                  j                  |dd¬«      j                  }t	        |t
        «      r_t        j                  |«      j                  d«      }t        j                  |«      j                  ddd	«      }t        j                  |«      }| j                  |d¬
«      j                  }||dœS )Nz9<s_docvqa><s_question>{user_input}</s_question><s_answer>z{user_input}FÚpt)Úadd_special_tokensÚreturn_tensorsÚRGBr   r   r   )r    )Údecoder_input_idsÚpixel_values)ÚreplaceÚpre_processorÚ	tokenizerÚ	input_idsÚ
isinstanceÚstrr	   ÚopenÚconvertÚnpÚarrayÚ	transposeÚtorchÚ
from_numpyr#   )	r   r   r   Útask_promptÚpromptr"   ÚimgÚ	img_arrayr#   s	            r   Úencodez$DocumentQuestionAnsweringTool.encode6   sº   € ØQˆØ×$Ñ$ ^°XÓ>ˆØ ×.Ñ.×8Ñ8Ø u¸Tð 9ó 
ç
‰)ð 	ô �h¤Ô$Ü—*‘*˜XÓ&×.Ñ.¨uÓ5ˆCÜŸ™ ›×/Ñ/°°1°aÓ8ˆIÜ×'Ñ'¨	Ó2ˆHØ×)Ñ)¨(À4Ð)ÓH×UÑUˆà%6ÈÑUÐUr   c                 óØ  — | j                   j                  |d   j                  | j                  «      |d   j                  | j                  «      | j                   j                  j
                  j                  d| j                  j                  j                  | j                  j                  j                  dd| j                  j                  j                  ggd¬«
      j                  S )Nr#   r"   Tr   )	r"   Ú
max_lengthÚearly_stoppingÚpad_token_idÚeos_token_idÚ	use_cacheÚ	num_beamsÚbad_words_idsÚreturn_dict_in_generate)ÚmodelÚgenerateÚtoÚdeviceÚdecoderÚconfigÚmax_position_embeddingsr%   r&   r9   r:   Úunk_token_idÚ	sequences)r   Úinputss     r   Úforwardz%DocumentQuestionAnsweringTool.forwardD   s¾   € Ø�z‰z×"Ñ"Ø�>Ñ"×%Ñ% d§k¡kÓ2Ø$Ð%8Ñ9×<Ñ<¸T¿[¹[ÓIØ—z‘z×)Ñ)×0Ñ0×HÑHØØ×+Ñ+×5Ñ5×BÑBØ×+Ñ+×5Ñ5×BÑBØØØ ×.Ñ.×8Ñ8×EÑEÐFÐGØ$(ð #ó 
÷ ‰)ð	r   c                 óŒ  — | j                   j                  |«      d   }|j                  | j                   j                  j                  d«      }|j                  | j                   j                  j
                  d«      }t        j                  dd|d¬«      j                  «       }| j                   j                  |«      }|d   S )Nr   Ú z<.*?>r   )ÚcountÚanswer)
r%   Úbatch_decoder$   r&   Ú	eos_tokenÚ	pad_tokenÚreÚsubÚstripÚ
token2json)r   ÚoutputsÚsequences      r   Údecodez$DocumentQuestionAnsweringTool.decodeR   s£   € Ø×%Ñ%×2Ñ2°7Ó;¸AÑ>ˆØ×#Ñ# D×$6Ñ$6×$@Ñ$@×$JÑ$JÈBÓOˆØ×#Ñ# D×$6Ñ$6×$@Ñ$@×$JÑ$JÈBÓOˆÜ—6‘6˜( B¨¸Ô:×@Ñ@ÓBˆØ×%Ñ%×0Ñ0°Ó:ˆà˜Ñ!Ð!r   )Ú__name__Ú
__module__Ú__qualname__Údefault_checkpointr   Únamer   Úpre_processor_classr   Úmodel_classrH   Úoutput_typer   r)   r5   rI   rW   Ú__classcell__)r   s   @r   r   r       sl   ø„ ØEÐð R€KØ€DØ'ÐØ+€Kð Øtñ
ð &Ð6OÑPñ€Fð €Kô*ðV˜wð V°#ó Vòö"r   r   )rQ   Únumpyr,   r/   Úmodels.autor   Úmodels.vision_encoder_decoderr   Úutilsr   Útoolsr   ÚPILr	   r   © r   r   ú<module>rh      s3   ðó" 
ã Û å 'Ý EÝ 'Ý ñ ÔÝô9" Lõ 9"r   