Ë
    uPêjÇ  ã            
       óN  — U d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	m
Z
 dZeed<   dZeed<   erd d	lmZ d
edz  defd„Zdededefd„Zdededeedz  edz  edz  f   fd„Zdedefd„Zdededz  ded
edz  def
d„Zdededz  ded
edz  def
d„Zdeeef   ded   fd„Zy)é    N)Údefaultdict)ÚTYPE_CHECKINGÚAnyÚFinalÚNoReturn)Úrequest_timeoutzhttps://platform.reducto.aiÚREDUCTO_API_BASEz
reducto://ÚREDUCTO_ID_PREFIX©ÚOCRPageÚapi_baseÚreturnc                 ó4   — | xs t         j                  d«      S )Nú/)r	   Úrstrip)r   s    ú`/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/reducto/common.pyÚ_normalize_api_baser      s   € ØÒ(Ô(×0Ñ0°Ó5Ð5ó    ÚmessageÚmodelc                 ó2   — dd l }|j                  | |d¬«      ‚)Nr   Úreducto)r   r   Úllm_provider)ÚlitellmÚBadRequestError)r   r   r   s      r   Ú_raise_bad_requestr      s&   € Ûà
×
!Ñ
!ØØØð "ó ð r   Ú
source_urlc                 ó6  — | j                  t        «      r| d d fS | j                  d«      s| j                  d«      rt        d|¬«       | j                  d«      st        d|¬«       	 | j                  dd«      \  }}d
vrt        d|¬«       |j                  d«      j                  d«      d   xs d}	 t        j                  d¬«      }d |fS # t        $ r t        d	|¬«       Y Œmw xY w# t        j                  t        f$ r t        d|¬«       Y ŒIw xY w)Nzhttp://zhttps://z}Reducto requires type='file' (auto-uploaded) or a reducto:// id. Plain http(s) URLs are not supported; upload the file first.)r   zdata:zNReducto requires a reducto:// id or a base64 data URI after OCR preprocessing.ú,é   z"Invalid Reducto data URI provided.z;base64z/Reducto only supports base64-encoded data URIs.ú;r   úapplication/octet-streamT)Úvalidatez(Invalid Reducto base64 payload provided.)
Ú
startswithr
   r   ÚsplitÚ
ValueErrorÚremoveprefixÚbase64Ú	b64decodeÚbinasciiÚError)r   r   ÚheaderÚencodedÚmimeÚ	raw_bytess         r   Úextract_file_id_or_bytesr0      s-  € ð ×ÑÔ.Ô/Ø˜4 Ð%Ð%à×Ñ˜YÔ'¨:×+@Ñ+@ÀÔ+LÜð LØõ	
ð
 × Ñ  Ô)ÜØ\Øõ	
ð
NØ$×*Ñ*¨3°Ó2‰ˆ�ð ˜ÑÜÐLÐTYÕZà×%Ñ% gÓ.×4Ñ4°SÓ9¸!Ñ<ÒZÐ@Z€DðTÜ!×+Ñ+¨G¸dÔCˆ	ð �˜DÐ Ð øô ò NÜÐ?Àu×MðNûô �N‰NœJÐ'ò TÜÐEÈU×SðTús$   Á)C Â7C/ ÃC,Ã+C,Ã/&DÄDÚresponsec                 ó
  — 	 | j                  «       }t        |t        «      r|xs i j                  d«      nd }t        |t        «      r|st        d|› �«      ‚|S # t        $ r}t        d| j                  › �«      |‚d }~ww xY w)Nz2Reducto /upload returned a non-JSON 200 response: Úfile_idz<Reducto /upload returned 200 without a file_id; got payload=)Újsonr&   ÚtextÚ
isinstanceÚdictÚgetÚstr)r1   ÚpayloadÚexcr3   s       r   Ú%_extract_file_id_from_upload_responser<   A   sŠ   € ðhØ!Ÿ™›ˆô 8BÀ'Ì4Ô7P�g’m ×(Ñ(¨Ô3ÐVZ€GÜ�gœsÔ#©7ÜÐWÐX_ÐW`ÐaÓbÐbØ€Nøô ò hÜÐMÈhÏmÉmÈ_Ð]Ó^ÐdgÐgûðhús   ‚A Á	BÁ$A=Á=Br/   r.   Úapi_keyc           	      óÔ   — dd l }|j                  j                  dj                  t	        |«      d«      dd|› �idd| |xs dfit
        ¬	«      }|j                  «        t        |«      S ©
Nr   z{}{}z/uploadÚAuthorizationzBearer ÚfileÚdocumentr"   )ÚurlÚheadersÚfilesÚtimeout)r   Úmodule_level_clientÚpostÚformatr   r   Úraise_for_statusr<   ©r/   r.   r=   r   r   r1   s         r   Úupload_bytes_syncrL   L   sv   € ó à×1Ñ1×6Ñ6Ø�M‰MÔ-¨hÓ7¸ÓCØ  G¨G¨9Ð"5Ð6Ø˜
 I¨tÒ/QÐ7QÐRÐSÜð	 7ó €Hð ×ÑÔÜ0°Ó:Ð:r   c           	   ƒ   óð   K  — dd l }|j                  j                  dj                  t	        |«      d«      dd|› �idd| |xs dfit
        ¬	«      ƒ d {  –—† }|j                  «        t        |«      S 7 Œ­wr?   )r   Úmodule_level_aclientrH   rI   r   r   rJ   r<   rK   s         r   Úupload_bytes_asyncrO   ^   s„   è ø€ ó à#×8Ñ8×=Ñ=Ø�M‰MÔ-¨hÓ7¸ÓCØ  G¨G¨9Ð"5Ð6Ø˜
 I¨tÒ/QÐ7QÐRÐSÜð	 >ó ÷ €Hð ×ÑÔÜ0°Ó:Ð:ðús   ‚AA6ÁA4Á A6Úresultr   c                 ó”  — ddl m} | j                  dg «      xs g }t        t        «      }|D ]d  }|j                  dg «      xs g D ]I  }|j                  d«      xs i j                  d«      }|€Œ*	 t        |«      }||   j                  |«       ŒK Œf |s*dj                  d„ |D «       «      }|d	k(  rg S  |d|¬
«      gS g }	t        |j                  «       «      D ]T  \  }}
dj                  d„ |
D «       «      }t        |dz
  d«      } |||¬
«      }t        |d|
«       |	j                  |«       ŒV |	S # t        t        f$ r Y Œÿw xY w)Nr   r   ÚchunksÚblocksÚbboxÚpagez

c              3   ód   K  — | ](  }|j                  d «      sŒ|j                  d d«      –— Œ* y­w©ÚcontentÚ N©r8   )Ú.0Úchunks     r   ú	<genexpr>z+build_pages_from_reducto.<locals>.<genexpr>‚   s*   è ø€ Ò.tÈEÐ_d×_hÑ_hÐirÕ_s¨u¯y©y¸ÀB×/GÑ.tùó   ‚0™0rY   )ÚindexÚmarkdownc              3   ód   K  — | ](  }|j                  d «      sŒ|j                  d d«      –— Œ* y­wrW   rZ   )r[   Úblocks     r   r]   z+build_pages_from_reducto.<locals>.<genexpr>‰   s'   è ø€ Òd¸EÈuÏyÉyÐYbÕOc˜uŸy™y¨°B×7Ñdùr^   r    )Ú(litellm.llms.base_llm.ocr.transformationr   r8   r   ÚlistÚintÚ	TypeErrorr&   ÚappendÚjoinÚsortedÚitemsÚmaxÚsetattr)rP   r   rR   Úblocks_by_pager\   rb   Úpage_noÚnormalized_pageÚfallback_markdownÚpagesrS   r`   Ú
page_indexrU   s                 r   Úbuild_pages_from_reductors   p   sh  € Ý@à—J‘J˜x¨Ó,Ò2°€FÜ=HÌÓ=N€Nàò 	:ˆØ—Y‘Y˜x¨Ó,Ò2°ò 	:ˆEØ—y‘y Ó(Ò.¨B×3Ñ3°FÓ;ˆGØˆØðÜ"% g£,�ð ˜?Ñ+×2Ñ2°5Õ9ñ	:ð	:ñ Ø#)§;¡;Ñ.tÐU[Ô.tÓ#tÐØ Ò"ØˆIÙ˜aÐ*;Ô<Ð=Ð=à"$€EÜ! .×"6Ñ"6Ó"8Ó9ò 
‰ˆ�Ø—;‘;ÑdÀVÔdÓdˆÜ˜ 1™ aÓ(ˆ
ÙØØô
ˆô 	��h Ô'Ø�‰�TÕð
ð €Løô- œzÐ*ò Ùðús   Á2D5Ä5EÅE)r(   r*   Úcollectionsr   Útypingr   r   r   r   Úlitellm.constantsr   r	   Ú__annotations__r
   rc   r   r9   r   r   ÚtupleÚbytesr0   r<   rL   rO   r7   rd   rs   © r   r   ú<module>r{      sD  ðÜ Û Ý #ß 6Ó 6å -à7Ð �%Ó 7Ø'Ð �5Ó 'áÝ@ð6 #¨¡*ð 6°ó 6ð ð ¨Cð °Hó ð!!Øð!!àð!!ð ˆ3�‰:�u˜t‘| S¨4¡ZÐ/Ñ0ó!!ðH°Cð ¸Có ð;Øð;à
�‰*ð;ð ð;ð �D‰jð	;ð
 	ó;ð$;Øð;à
�‰*ð;ð ð;ð �D‰jð	;ð
 	ó;ð$# T¨#¨s¨(¡^ð #¸¸Y¹ô #r   