+
    jHàj  ã                  óN  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIHtHt / RRbRRbRR	bR
RbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbt	R ]
R!&   RRR"RRRR	RRR
RRRRRRRRRRRRRRRR/tR ]
R#&   R$ R% ltR&RR'R(R)R(R*R/R+ R, lltR&RR*R-/R. R/ lltR0R1R2RR3R/R4 R5 lltR# )6uE  Shared mimeâ†”extension dispatch for inbound (downloaded) platform media.

Adapters historically hand-rolled divergent mimeâ†’extension maps on purpose (BlueBubbles
coerces ``image/heic`` to ``.jpg`` for vision tools; WhatsApp Cloud pins ``audio/ogg`` to
``.ogg`` for the STT extension whitelist). This module owns the agreed-upon union tables
plus lookup helpers taking per-adapter ``overrides`` (and ``use_defaults``/``use_mimetypes``
toggles) so each adapter's historical output stays byte-identical â€”
``tests/gateway/test_media_cache.py`` pins those outputs as the contract.
)ÚannotationsN)ÚMappingÚOptionalz
image/jpegú.jpgz	image/pngz.pngz	image/gifz.gifz
image/webpz.webpz	audio/oggú.oggzaudio/x-opus+oggz
audio/opusz
audio/mpegz.mp3z	audio/mp3z	audio/wavz.wavz	audio/mp4z.m4azaudio/x-m4az	audio/aacz.aacz	video/mp4z.mp4zapplication/pdfz.pdfzapplication/zipz.zipzdict[str, str]ÚDEFAULT_MIME_TO_EXTz.jpegÚDEFAULT_EXT_TO_MIMEc               ó    € V ^8„  d   QhRRRR/# )é   ÚmimeÚstrÚreturn© )Úformats   "ÚB/home/ubuntu/.hermes/hermes-agent/gateway/platforms/media_cache.pyÚ__annotate__r   '   s   € ÷ 6ñ 6˜#ð 6 #ñ 6ó    c                ó~   € T ;'       g    RP                  R4      ^ ,          P                  4       P                  4       # )z;Lowercase and strip any ``; charset=...`` style parameters.Ú Ú;)ÚsplitÚstripÚlower)r   s   &r   Ú_normalize_mimer   '   s0   € à�JˆJ�B×Ñ˜cÓ" 1Õ%×+Ñ+Ó-×3Ñ3Ó5Ð5r   Ú	overridesÚuse_defaultsTÚuse_mimetypesÚfallbackc               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R	/# )r
   r   r   r   úOptional[Mapping[str, str]]r   Úboolr   r   úOptional[str]r   r   )r   s   "r   r   r   ,   s;   € ÷ ñ �sð Ð*Eð Ø#ðØ;?ðà(ðà4Añr   c               ó  € \        V 4      pV'       g   V# V'       d   VP                  MRV'       d   \        P                  MRV'       d   \        P                  MR.pV F!  pV'       d	   V! V4      MRpV'       g   K  Vu # 	  V# )uµ   Resolve a mime type to a dotted extension: ``overrides`` â†’ ``DEFAULT_MIME_TO_EXT`` (if
``use_defaults``) â†’ ``mimetypes.guess_extension`` (if ``use_mimetypes``) â†’ ``fallback``.N)r   Úgetr   Ú	mimetypesÚguess_extension)	r   r   r   r   r   ÚprimaryÚstagesÚlookupÚexts	   &$$$$    r   Úext_for_mimer*   ,   sn   € ô
 ˜dÓ#€GßØˆß(ˆi�mŠm¨dß)5Ô!×%Ò%¸4ß+8Œi×'Ò'¸dðD€Fó ˆß!'‰f�WŒo¨Tˆß‰3ØŠJñ ð €Or   zapplication/octet-streamc               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   r)   r   r   r   r   r   r   )r   s   "r   r   r   >   s1   € ÷ Pñ P�cð PÐ)Dð PØðPØ@CñPr   c               óÂ   € T ;'       g    RP                  4       P                  4       pT;'       g    / P                  V4      ;'       g    \        P                  W24      # )uK   Inverse lookup: ``overrides`` â†’ ``DEFAULT_EXT_TO_MIME`` â†’ ``fallback``.r   )r   r   r#   r   )r)   r   r   Úkeys   &$$ r   Úmime_for_extr.   >   sL   € ð �9ˆ9�"×
Ñ
Ó
×
#Ñ
#Ó
%€CØ�OˆO˜× Ñ  Ó%×OÐOÔ)<×)@Ñ)@ÀÓ)OÐOr   Úfilename_hintr   Ú	kind_hintÚext_overridesc               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R/# )r
   ÚdataÚbytesr   r   r/   r0   r!   r1   r   r   r   )r   s   "r   r   r   E   s9   € ÷ 5ñ 5˜Eð 5¨ð 5Àð 5Ø!.ð5à%@ð5àLOñ5r   c               óÌ  € ^ RI HpHpHp \	        V4      pTp	V	f5   VP                  R4      '       d   RMVP                  R4      '       d   RMRp	V	R8X  d    \        W„RR7      ;'       g    Rp
V! W
4      # V	R8X  d    \        W„R	R7      ;'       g    R	p
V! W
4      # TpV'       g9   \        W„R
R7      p
R\        P                  ! 4       P                  R,           V
 2pV! W4      # )aM  Cache downloaded media bytes and return the local file path.

Picks the image / audio / document cache primitive by mime class (or explicit ``kind_hint``
``"image"``/``"audio"``/``"document"``). ``filename_hint`` names document files (else a
generated name with the resolved extension); ``ext_overrides`` feeds :func:`ext_for_mime`.
)Úcache_audio_from_bytesÚcache_document_from_bytesÚcache_image_from_byteszimage/Úimagezaudio/ÚaudioÚdocumentr   )r   r   r   z.binÚfile_:Né   N)
Úgateway.platforms.baser6   r7   r8   r   Ú
startswithr*   ÚuuidÚuuid4Úhex)r3   r   r/   r0   r1   r6   r7   r8   r&   Úkindr)   Úfilenames   &&$$$       r   Úcache_media_bytesrE   E   sÞ   € ÷Sñ Sä˜dÓ#€GØ€DØ‚|Ø"×-Ñ-¨h×7Ò7‘Ø '× 2Ñ 2°8× <Ò <‘WÀ*ð 	àˆw„Ü˜7ÀfÔM×WÐWÐQWˆÙ% dÓ0Ð0Øˆw„Ü˜7ÀfÔM×WÐWÐQWˆÙ% dÓ0Ð0Ø€HßÜ˜7ÀfÔMˆØœ4Ÿ:š:›<×+Ñ+¨BÕ/Ð0°°Ð6ˆÙ$ TÓ4Ð4r   )Ú__conditional_annotations__Ú__doc__Ú
__future__r   r$   r@   Útypingr   r   r   Ú__annotations__r   r   r*   r.   rE   )rF   s   @r   Ú<module>rK      sˆ  øðôõ #ã Û ß $ð'Ø�&ð'Ø% vð'Ø/:¸Fð'ØDPÐRYð'à�ð'à+¨Vð'à5AÀ6ð'ð �&ð'ð & vð'ð 0;¸Fð'ð �ð	'ð '¨ð	'ð 1<¸Vð	'ð
 �ð'ð
 +¨Fð'ð
 5FÀvð'Ð �^ó ð ˆL˜' <°¸ÀfÈkØˆ\˜6 ;°¸ÀfÈkØ
ˆK˜ ¨f°kÀ6ÐK\Ø
Ðð	'Ð �^ó õ6ð
Èð Ø&*ðØBFðà+/÷ð$PÀtð PØ!;÷Pð5Àbð 5Ø15ð5àCG÷5ñ 5r   