Files
marker_api/__pycache__/app.cpython-314.pyc
T

175 lines
28 KiB
Plaintext
Raw Normal View History

+
ô[!jVVãóRa0t$^RIHt^RIt^RIt^RIt^RIt^RIt^RIt^RI t ^RI
H t H t H
t
^RIt^RIHtHtHtHt^RIt^RIHt^RIHt^RIHt^RIHt^R IHt^R
I H!t"]PFPIR R 4t%]PFPIR
R4t&]PFPIRR4PO4R<9t(]PFPIRR4t)]PFPIRR4t*Rs+R],R&]-!4t.R=Ft/].Pa]!]/44K ]1!].Uu0uFqPeR4kK up4t3]PFPIRR4t4]PFPIRR4PO4R<9t5]PFPIRR4t6]PFPIRR4t7]PFPIRR4t8Rt9R R!lt:R"R#lt;R$R%lt<R&R'lt=]=!4t>]?R(8XEd]9!4]!4s+]@!]PFPIR)R*44tA]PFPIR+R,4tB]C!R>4]C!R-4]C!R.]% 24]C!R/]& 24]C!R0]( 24]C!R1]);'gR2 24]C!R3]* 24]C!R4]B R5]A 24]C!R6R7P‰]34 24]C!R>4]>P]B]A]PFPIR8R94R8HR:R;7R#R#uupi)?é)Ú annotationsN)ÚAnyÚDictÚOptional)ÚFlaskÚjsonifyÚrequestÚResponse)Ú ConfigParser)Ú PdfConverter)Úcreate_model_dict)Útext_from_rendered)Úload_extensions)ÚsettingsÚ OLLAMA_HOSTzhttp://10.0.1.127:11434ÚDEESEEK_OCR_MODELz deepseek-ocrÚ AMD_COMPUTEÚfalseÚ TORCH_DEVICEÚÚ MODEL_DTYPEÚfloat32zOptional[Dict[str, Any]]Ú _marker_dictÚ LLM_SERVICEz$marker.services.ollama.OllamaServiceÚUSE_LLMÚOPENAI_BASE_URLÚOPENAI_API_KEYÚ OPENAI_MODELcó‚\'dF\'g:R\PR&R\PR&R\PR&\R8XdR\PR&\PP R4;p'd)V\PR&V\PR&R#R#) z9Apply AMD GPU / environment overrides before torch loads.ÚcudarÚTORCH_DEVICE_MODELz9.0.6ÚHSA_OVERRIDE_GFX_VERSIONÚbfloat16rN)rrÚosÚenvironrÚget)Útorch_device_overrides Ú%/home/oval/Projects/marker-api/app.pyÚ_configure_envr+0sˆçƒ{Ÿ<<Ø%+Œ
"Ø+1Œ
Ð(Ø18Œ
Ð Ø$.Œ
!Ü "§
¡
§¡¨~Ó >ÐÖ>Ø%:Œ
"Ø+@Œ
ÐcóV^8„dQhRR/#)éÚreturnúDict[str, Any]©)Úformats"r*Ú __annotate__r3=s÷ñ˜ñr,có2\f \4s\#)N)rr
r1r,r*Úget_model_dictr5=säÒÜ Ü Ðr,có V^8„dQhRRRR/#)r.Úextrarr/r0r1)r2s"r*r3r3Ds÷0˜0 0r,c óò/pVP4Fwr#VfK W1V&K VPRR4VPRR4VPRR4VPRR4VPRR4VPR R4VPR
\P4VPR \4VPR \
4\
V4pVP4#)
output_formatÚmarkdownÚ force_ocrFÚpaginate_outputÚ
page_rangeÚdisable_multiprocessingTÚdisable_image_extractionÚ
output_dirÚ llm_serviceÚuse_llm)ÚitemsÚ
setdefaultÚmarker_settingsÚ
OUTPUT_DIRÚDEFAULT_LLM_SERVICEÚDEFAULT_USE_LLMr Úgenerate_config_dict)r7ÚoptsÚ
config_parsers, r*Ú
build_optionsrNDØ€DØ
ˆØ Œ=Ø‹Gñð
 ‡OOO ‡OOK Ô‡O% ‡OOL ‡O-¨tÔ‡OÔ‡OOL¤/×"<Ñ"<Ô‡OOMÔ#6Ô‡OOÔ  Ó&€MØ × /r,có(V^8„dQhRRRRRRRR/#) r.Ú raw_bytesÚbytesÚfilenameÚstrrJrr/Údictr1)r2s"r*r3r3Ys(÷.ñ. .°3ð.Àð.Èñ.r,c
ól\P!RRV9d!RVPR^4R,,MRR7pVPV4VP 4VP
p\
R/VBpRVR&\4p\VP4UUu/uF
wrxVfK WxbK upp4p \VVV P4V P4V P4R7p
V
!V4p \V 4wrÍpTP 4\&P(P+TP
4'd!\&P,!TP
4/p\.P0pTP4Fdwpp\2P4!4pTP7TTR 7\8P:!TP=44P?R 4TT&Kf R
TPARR4RT RTRR\C49dT PDR R/#/R R/#uuppi \dp\ P"!4R RR
\%T4/uRp?TP 4\&P(P+TP
4'd"\&P,!TP
4##Rp?ii;i TP 4\&P(P+TP
4'd"\&P,!TP
4ii;i)z;Convert in-memory file bytes to markdown (or other format).Frr)ÚdeleteÚsuffixTÚ disable_tqdmN)ÚconfigÚ
artifact_dictÚprocessor_listÚrendererrAÚsuccessÚerror)r2zutf-8r2r9r:ÚoutputÚ
images_b64ÚmetadataÚrenderedéÿÿÿÿr1)#ÚtempfileÚNamedTemporaryFileÚrsplitÚwriteÚcloseÚnamerNr5r rCr Úget_processorsÚ get_rendererÚget_llm_servicerÚ ExceptionÚ tracebackÚ print_excrSr&ÚpathÚexistsÚremoverEÚOUTPUT_IMAGE_FORMATÚioÚBytesIOÚsaveÚbase64Ú b64encodeÚgetvalueÚdecoder(Údirra)rPrRrJÚtmpÚfilepathÚ config_dictÚ
model_dictrKrLÚparsedÚ converterrbÚtextÚimagesÚexcÚencoded_imagesÚimg_fmtÚimgÚbufs&&, r*Úconvert_file_bytesrŠYsô ×
%¨UÐ`cÐgoÔ`o¸ÇÁÐQTÐVWÓAXÐY[ÕA\Ö;\ÐuwÔ
x€Cð Ø Ø ‰ Œ Ø—8‘8ˆä+ +ˆ Ø&*ˆ %ˆ
ܰ·
±
´ Ô ©¨Àœt˜qšt± Òä ØØ×× 
ˆ ñ˜Ü,¨XÓ6‰ˆð ‰ Œ Ü
7‰7>‰>˜#Ÿ(™(× IŠIc—h à%'€NÜ×1€GØ—,‘,–.‰ˆˆ3ÜjŠj‹lˆØ ˜WˆÔ"×,¨S¯\©\«^Ó<×CÀGÓLˆñ $—(‘(˜?¨JÓ¨´s³uÔ)<H×  ððCEØ  ðùó7Oøô ô×ÒÔØ˜5 '¬3¨s«8Ð ‰ Œ Ü
7‰7>‰>˜#Ÿ(™(× IŠIc—h‘hÕ ð $ûð 5ûð ‰ Œ Ü
7‰7>‰>˜#Ÿ(™(× IŠIc—h ð $úsKÁAH5Â H/
Â-H/
Â3AH5È/H5È5 KÉ#K É#KÉ$KË KËKËA"L3cóV^8„dQhRR/#)r.r/rr1)r2s"r*r3r3Šs÷CñCCr,có(a\\4pRoVPR4V3Rl4pVPR4R4pVPRR.R7R4pVPR R.R7R
4pVPR R.R7R 4pV#)
ad<html><head><title>marker-api</title>
<style>body{font-family:sans-serif;max-width:900px;margin:40px auto;padding:0 20px}
pre{background:#f4f4f4;padding:12px;border-radius:4px;overflow-x:auto}
table{border-collapse:collapse;width:100%;margin:16px 0}th,td{border:1px solid #ccc;padding:8px;text-align:left}
th{background:#f0f0f0}</style></head><body>
<h1>marker-api</h1>
<p>Convert PDFs, EPUBs, DOCX, XLSX, PPTX, HTML, and images to Markdown.</p>
<h2>Endpoints</h2>
<table>
<tr><th>Endpoint</th><th>Method</th><th>Description</th></tr>
<tr><td>/</td><td>GET</td><td>This documentation page</td></tr>
<tr><td>/health</td><td>GET</td><td>Health check with configuration</td></tr>
<tr><td>/marker</td><td>POST</td><td>Convert a file (sync, returns result)</td></tr>
<tr><td>/v1/conversions</td><td>POST</td><td>Convert a file (async-style, returns directly)</td></tr>
<tr><td>/v1/files/convert</td><td>POST</td><td>Convert a file via JSON body with base64</td></tr>
</table>
<h2>POST /marker <small>(multipart/form-data)</small></h2>
<pre><code>curl -X POST http://localhost:8000/marker \
-F "file=@document.pdf" \
-F "force_ocr=false" \
-F "page_range=0,5-10" \
-F "output_format=markdown"</code></pre>
<p>Returns the converted content directly as a file download.</p>
<h2>POST /marker <small>(application/json)</small></h2>
<pre><code>curl -X POST http://localhost:8000/marker \
-H "Content-Type: application/json" \
-d '{
"file_b64": "base64-encoded-file-content",
"filename": "document.pdf",
"output_format": "markdown",
"force_ocr": false
}'</code></pre>
<h2>POST /v1/files/convert <small>(application/json)</small></h2>
<pre><code>curl -X POST http://localhost:8000/v1/files/convert \
-H "Content-Type: application/json" \
-d '{
"file_b64": "base64-encoded-file-content",
"filename": "document.pdf",
"output_format": "json",
"page_range": "0,5-10"
}'</code></pre>
<h3>Options</h3>
<table>
<tr><th>Parameter</th><th>Type</th><th>Default</th><th>Description</th></tr>
<tr><td><b>file</b> / <b>file_b64</b></td><td>file / string</td><td><b>required</b></td><td>The file to convert</td></tr>
<tr><td>force_ocr</td><td>bool</td><td>false</td><td>Force OCR on all pages</td></tr>
<tr><td>paginate_output</td><td>bool</td><td>false</td><td>Separate pages with horizontal rules</td></tr>
<tr><td>output_format</td><td>string</td><td>markdown</td><td>markdown, json, html, chunks</td></tr>
<tr><td>page_range</td><td>string</td><td>all</td><td>Comma-separated page numbers/ranges: "0,5-10"</td></tr>
<tr><td>disable_image_extraction</td><td>bool</td><td>false</td><td>Disable extraction of embedded images</td></tr>
<tr><td>processors</td><td>string</td><td>auto</td><td>Comma-separated full module paths</td></tr>
<tr><td>config_json</td><td>string</td><td>none</td><td>Path to JSON file with additional config</td></tr>
<tr><td>converter_cls</td><td>string</td><td>auto-detected</td><td>Full module path of converter class</td></tr>
<tr><td>use_llm</td><td>bool</td><td>false</td><td>Use an LLM to improve accuracy (requires LLM service)</td></tr>
<tr><td>llm_service</td><td>string</td><td>marker.services.<br>ollama.OllamaService</td><td>LLM service class path: gemini, vertex, claude, openai, azure_openai, ollama</td></tr>
<tr><td>block_correction_prompt</td><td>string</td><td>none</td><td>Custom prompt for LLM block correction</td></tr>
<tr><td>redo_inline_math</td><td>bool</td><td>false</td><td>Re-process inline math with LLM</td></tr>
<tr><td>strip_existing_ocr</td><td>bool</td><td>false</td><td>Remove all existing OCR text and re-OCR</td></tr>
<tr><td>debug</td><td>bool</td><td>false</td><td>Enable debug mode with additional logging</td></tr>
</table>
<h3>Supported Formats</h3>
<p><code>{formats}</code></p>
<h3>Environment Variables</h3>
<table>
<tr><th>Variable</th><th>Default</th><th>Description</th></tr>
<tr><td>OLLAMA_HOST</td><td>http://10.0.1.127:11434</td><td>Ollama instance for OCR fallback</td></tr>
<tr><td>DEESEEK_OCR_MODEL</td><td>deepseek-ocr</td><td>OCR model name in Ollama</td></tr>
<tr><td>AMD_COMPUTE</td><td>false</td><td>Enable AMD ROCm GPU compute (set to "true")</td></tr>
<tr><td>TORCH_DEVICE</td><td>auto</td><td>PyTorch device: rocm, cuda, cpu</td></tr>
<tr><td>MODEL_DTYPE</td><td>float32</td><td>Model dtype: float32, bfloat16</td></tr>
<tr><td>PORT</td><td>8000</td><td>Listening port</td></tr>
<tr><td>HOST</td><td>0.0.0.0</td><td>Listening host</td></tr>
<tr><td>LLM_SERVICE</td><td>marker.services.ollama.OllamaService</td><td>Default LLM service class for use_llm</td></tr>
<tr><td>USE_LLM</td><td>false</td><td>Default use_llm flag (true/false)</td></tr>
<tr><td>OPENAI_BASE_URL</td><td></td><td>Base URL for OpenAI-compatible LLM service</td></tr>
<tr><td>OPENAI_API_KEY</td><td></td><td>API key for OpenAI-compatible LLM service</td></tr>
<tr><td>OPENAI_MODEL</td><td></td><td>Model name for OpenAI-compatible LLM service</td></tr>
</table>
</body></html>Ú/cóR<SPRP\4R7pV#)ú, )Úformats)r2ÚjoinÚSUPPORTED_DISPLAY)ÚbodyÚ HTML_DOCSs €r*ÚdocsÚcreate_app.<locals>.docsäs%ø€à×Ѩ¯ © Ô2CÓ(DÐÓEˆØˆ r,z/healthcó@\;'g)\\R4'd\PMRp\ RRR\ R\R\RTR \R
R R \R
\R\;'gRR\;'gR/ 4# \dRpLdi;i)r#ÚautoÚunknownÚstatusÚokÚollamaÚ ocr_modelÚ amd_computeÚ torch_deviceÚsupported_formatsÚproviderÚflaskÚdefault_llm_serviceÚdefault_use_llmÚopenai_base_urlNÚ openai_model)rÚhasattrrEr#rmrrrrrrGrHÚDEFAULT_OPENAI_BASE_URLÚDEFAULT_OPENAI_MODEL)Údevices r*ÚhealthÚcreate_app.<locals>.healthéð ÜHðHÌGÔTcÐey×LzÒLz¤o×&HÒ&HðAGˆØ  ”kØ Ô œ;Ø ˜FØ Ô!2Ø ˜Ø !Ô#6Ø œØ Ô6×>¸ Ô0×8°Dð 
ó  ð øôô ØŠFð ús B
)B
Â
BÂBz/markerÚPOST)Úmethodscó$ R\P9E\PR,pVP;'gRpVP4p\PP RR4pR\PP R4R\PP RR4P
4R8HR\PP RR4P
4R8HRVR\PP RR4P
4R8HR \PP R 4R
\PP R
4R \PP R 4R \PP R R4P
4R8HR
\PP R
4R\PP R4R\PP RR4P
4R8HR\PP RR4P
4R8HR\PP RR4P
4R8H/p\W!3/VBpVR,'g\V4R3#VR8Xd3\VR,RRRVPR^4^, R2/R7#\V4#\P'Edx\P!4pRV9gVP R4'g\RR/4R3#\P!VR,4pVP RR4pRVP R4RVP RR 4RVP RR 4RVRVP RR 4R VP R 4R
VP R
4R VP R 4R VP R R 4R
VP R
4RVP R4RVP RR 4RVP RR 4RVP RR 4/p\W&R,3/VBp\V4#\RR!/4R3#)"Úfiler9r:r=r<rÚtruer;r?Ú
processorsÚ config_jsonÚ
converter_clsrBrAÚblock_correction_promptÚredo_inline_mathÚstrip_existing_ocrÚdebugr]éôr_z
text/plainzContent-Dispositionzattachment; filename="rz.md")ÚmimetypeÚheadersÚfile_b64rRr^ú0JSON body must include 'file_b64' and 'filename'éFzBNo file provided. Use multipart/form-data or JSON with 'file_b64'.)r ÚfilesrRÚreadÚformr(ÚlowerrŠrr