
    $j                     v    d Z ddlZddlZddlZddlmZ ddlmZ  ej        e	          Z
 G d de          ZdS )z!Markitdown parser implementation.    N)Path   )
FileParserc                   h    e Zd ZdZd ZdededefdZdededefdZdded	edz  de	fd
Z
defdZdS )MarkitdownParsera  
    Markitdown file parser.

    Uses Microsoft's markitdown library to convert various file formats
    to markdown including PDF, Office docs, images (via OCR), audio, HTML.

    Supported formats:
    - PDF (.pdf)
    - Word (.docx, .doc)
    - PowerPoint (.pptx, .ppt)
    - Excel (.xlsx, .xls)
    - Images (.jpg, .jpeg, .png) - with OCR
    - HTML (.html, .htm)
    - Text (.txt, .md)
    - Audio (.mp3, .wav) - with transcription
    c                 v    	 ddl m}  |            | _        dS # t          $ r}t          d          |d}~ww xY w)zInitialize markitdown parser.r   )
MarkItDownzUmarkitdown package is required for file parsing. Install with: pip install markitdownN)
markitdownr	   _markitdownImportError)selfr	   es      o/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/hindsight_api/engine/parsers/markitdown.py__init__zMarkitdownParser.__init__   sd    	------)z||D 	 	 	g 	s    
838	file_datafilenamereturnc                 r   K   t          j                    }|                    d| j        ||           d{V S )z(Parse file to markdown using markitdown.N)asyncioget_event_looprun_in_executor_convert_sync)r   r   r   loops       r   convertzMarkitdownParser.convert+   sE       %''))$0BIxXXXXXXXXX    c                    t          j        t          |          j        d          5 }|                    |           |j        }ddd           n# 1 swxY w Y   	 | j                            |          }|r|j        st          d| d          |j        	 t          |          
                                 S # t          $ r Y S w xY w# t          $ r;}t                              d| d|            t          d| d	|           |d}~ww xY w# 	 t          |          
                                 w # t          $ r Y w w xY wxY w)
z*Synchronous parsing (runs in thread pool).F)suffixdeleteNzNo content extracted from ''zMarkitdown parsing failed for z: zFailed to parse 'z': )tempfileNamedTemporaryFiler   r   writenamer   r   text_contentRuntimeErrorunlink	Exceptionloggererror)r   r   r   tmptmp_pathresultr   s          r   r   zMarkitdownParser._convert_sync1   s    (X0EeTTT 	 X[IIi   xH	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 	%--h77F N!4 N"#L#L#L#LMMM&X%%''''     	L 	L 	LLLI(IIaIIJJJC8CCCCDD!K	LX%%''''   sk   AAA<C !B==
C
	C

D6DDD E	!D98E	9
EE	EE	Ncontent_typec                 ^    h d}t          |          j                                        }||v S )z,Check if markitdown supports this file type.>   .md.csv.doc.htm.jpg.mp3.pdf.png.ppt.txt.wav.xls.docx.html.jpeg.pptx.xlsx)r   r   lower)r   r   r-   supported_extensionsexts        r   supportszMarkitdownParser.supportsL   s<     
  
  
2 8nn#))++***r   c                     dS )zGet parser name.r
    )r   s    r   r#   zMarkitdownParser.namek   s    |r   )N)__name__
__module____qualname____doc__r   bytesstrr   r   boolrC   r#   rE   r   r   r   r      s         "
 
 
Yu Y Y Y Y Y Yu      6+ + +C$J +$ + + + +>c      r   r   )rI   r   loggingr    pathlibr   baser   	getLoggerrF   r(   r   rE   r   r   <module>rQ      s    ' '               		8	$	$` ` ` ` `z ` ` ` ` `r   