
    %j                     ~    d dl mZmZmZ d dlZd dlZddlmZ ddlm	Z	m
Z
 ddlmZ dd	gZg d
Z G d de	          ZdS )    )BinaryIOAnyUnionN   )exiftool_metadata   )DocumentConverterDocumentConverterResult)
StreamInfoz
image/jpegz	image/png)z.jpgz.jpegz.pngc            	       l    e Zd ZdZdedededefdZdededede	fdZ
dd	dedededef         fd
ZdS )ImageConverterz
    Converts images to markdown via extraction of metadata (if `exiftool` is installed), and description via a multimodal LLM (if an llm_client is configured).
    file_streamstream_infokwargsreturnc                     |j         pd                                }|j        pd                                }|t          v rdS t          D ]}|                    |          r dS dS )N TF)mimetypelower	extensionACCEPTED_FILE_EXTENSIONSACCEPTED_MIME_TYPE_PREFIXES
startswith)selfr   r   r   r   r   prefixs          n/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/markitdown/converters/_image_converter.pyacceptszImageConverter.accepts   s      (.B5577 *0b7799	00041 	 	F""6** tt u    c           	         d}t          ||                    d                    }|rdD ]}||v r|| d||          dz  }|                    d          }|                    d          }|N|L|                     |||||                    d	          
          }	|	|d|	                                z   dz   z  }t	          |          S )Nr   exiftool_path)r    )
	ImageSizeTitleCaptionDescriptionKeywordsArtistAuthorDateTimeOriginal
CreateDateGPSPositionz: 

llm_client	llm_model
llm_prompt)clientmodelpromptz
# Description:
)markdown)r   get_get_llm_descriptionstripr
   )
r   r   r   r   
md_contentmetadatafr,   r-   llm_descriptions
             r   convertzImageConverter.convert'   s    
 %vzz/'B'B
 
 
  	: : : ==Q"9"9(1+"9"9"99J ZZ--
JJ{++	!i&;"77!zz,// 8  O *2_5J5J5L5LLtSS
&
 
 
 	
r   N)r1   c                   ||                                 dk    rd}|j        }|s!t          j        d|j        pdz             \  }}|sd}|                                }	 t          j        |                                          	                    d          }	n-# t          $ r }
Y d }
~
|                    |           d S d }
~
ww xY w	 |                    |           n# |                    |           w xY wd| d|	 }dd	|d
dd|idgdg}|j        j                            ||          }|j        d         j        j        S )Nr   z(Write a detailed caption for this image._dummyzapplication/octet-streamzutf-8zdata:z;base64,usertext)typer>   	image_urlurl)r?   r@   )rolecontent)r0   messagesr   )r5   r   	mimetypes
guess_typer   tellbase64	b64encodereaddecode	ExceptionseekchatcompletionscreatechoicesmessagerC   )r   r   r   r/   r0   r1   content_type_cur_posbase64_imageedata_urirD   responses                 r   r4   z#ImageConverter._get_llm_descriptionW   s    >V\\^^r11?F #+ 	'2K17R8 OL!  	65L ""$$	&!+K,<,<,>,>??FFwOOLL 	 	 	444W%%%%%	  W%%%%KW%%%% @<????
 #V44 +!8&  
  ;*111QQ"*22s*    9B C 
C$C ?CC C5)__name__
__module____qualname____doc__r   r   r   boolr   r
   r:   r   strr4    r   r   r   r      s            	
 
   $.
.
  .
 	.

 
!.
 .
 .
 .
n 33 33 3333  33 
tSy	33 33 33 33 33 33r   r   )typingr   r   r   rH   rE   	_exiftoolr   _base_converterr	   r
   _stream_infor   r   r   r   r`   r   r   <module>re      s    ' ' ' ' ' ' ' ' ' '      ( ( ( ( ( ( H H H H H H H H % % % % % %  
 544 z3 z3 z3 z3 z3& z3 z3 z3 z3 z3r   