+
    iHàj)—  ã            2      óš	  a€ 0 t $ ^ RIHt ^ RIt^ RIt^ RIHtHtHt ^ RI	H	t	H
t
Ht ^ RIHt ^ RIHtHtHtHt ^ RIHtHtHt ^ RIHtHtHt ]P6                  ! ]4      t]! ^ 4      t]! R	4      tR
t RRRRRRRRRRRR/t!]! R4      t"Rt#R R lt$]Rß,          t%]Rà,          t&]! RR7       ! R R4      4       t']! RR7       ! R  R!4      4       t(]! RR7       ! R" R#4      4       t)]! RR7       ! R$ R%4      4       t*R& t+])! ]]]]RR'R(7      t,RáR)R/R* R+ lllt-R,t.R-t/R.t0Rât1Rãt2Rät3RR4R5R6RåR8RæR:Rç/3R]/R>Rè]1Ré]2R?RêRëRìRARíRBRî/3RRCR>RDRï/3R]/RHRIRð/3R]/RKRL]1RM]3/3RRNRORPRñRQRòRSRóRTRôRVRõRWRöRXR÷/3RRYRZRøRùR\Rú/3RR]R^R_Rû/3RR]R`RüRý/3RR]RaRbRþRcRÿ/3R]0RdReER RfERRgERRiERRjERRkER/3Rl].RmER]1/3Rl].RnRo]1Rp]3/3Rl].RqRr]2/3Rl].RsER]2RtRíRuERRvER	RwER
/3RxRRyRzER/3R|RRyRzER/3R}R~RR€ERR�ERR‚ERR\ERR[ERRƒERR„ERR…ERR†ERR‡ERRˆERERERR‰ERRŠERR‹ER/33t4RŒ]5R�&   / t6RŽ]5R�&   ]4 FN  w  t7t8t9t:]:Pw                  4        F2  w  t<t=]-! ]=R�]9R)]8/ t>]?! ]<]@4      '       d   ]<3M]< F
  tA]>]6]7]A3&   K  	  K4  	  KP  	  A4A7A8A9A:A<A=A>AA]-! RERFR;RGR‘R’R“]! R24      ]! R@4      ]! RJ4      ]! R/4      R”7      ]6ER&   ER F@  w	  tBtCtDtEtFtGtHtItJ]-! ]C]D]E]FR˜]B 2R™R“]! ]G4      ]! ]H4      ]! ]I4      ]! ]J4      R”7      ]6R]B3&   KB  	  ABACADAEAFAGAHAIAJR•]-! RšR›R<R@RœR�R“]! Rž4      ]! RŸ4      ]! Rh4      ]! R 4      R”7      R–]-! RhRšRRR0RœR¡R“]! R¢4      ]! R£4      ]! R{4      ]! R74      R”7      /tKR¤]5R¥&   ]-! RJRhR3]0RdR¦]! R14      ]! R§4      ]! RU4      R¨7	      ]6ER&   ]-! R=RER—]0RdR¦]! R94      ]! R04      R©7      ]6ER&   ER U UUu/ uF  w  rV  F  pV]-! VR�RªR)]/ R«2/ bK  	  K  	  uppp tLR¤]5R¬&   A.A/A0A1A2A3. R­ ER 4       OER NER!N F  w  t7tMtN]6]7]N3,          ]6]7]M3&   K  	  A7AMANR® R¯ ltOR° R± ltPR² R³ ltQRRRRR´RRxRxR|R|/tR0 ER"mtSRáRµ R¶ lltTER#tUER$tVR· R¸ ltWR¹ Rº ltXR» R¼ ltYR]YRl]X/tZR½ R¾ lt[R¿ RÀ lt\RÁ RÂ lt]RÃ RÄ lt^RÅ RÆ lt_RÇ RÈ lt`RÉ RÊ ltaRË RÌ ltbER%RÍ RÎ lltcER&tdER'teER(tfRÏRRÐR/RÑ RÒ lltgRÓ RÔ lthRÏRRÕRRÖR/R× RØ lltiER%RÙ RÚ lltjRÛ RÜ ltkRÝ RÞ ltlR# u uppp i ()  é    )ÚannotationsN)Ú	dataclassÚfieldsÚreplace)ÚdatetimeÚtimezoneÚUTC)ÚDecimal)ÚAnyÚDictÚLiteralÚOptional)Úfetch_endpoint_model_metadataÚfetch_model_metadataÚ"strip_codex_context_variant_suffix)Úbase_url_host_matchesÚbase_url_hostnameÚbase_url_originé@B z)https://inference-api.nousresearch.com/v1Úopenaiz
openai.comÚxaizx.aiÚ	anthropiczanthropic.comÚgooglezgoogleapis.comÚdeepseekzdeepseek.comÚxiaomizxiaomimimo.comú0.01z4subscription-included; no provider invoice for usagec               ó    € V ^8„  d   QhRRRR/# )é   Úamountr
   ÚreturnÚstr© )Úformats   "Ú8/home/ubuntu/.hermes/hermes-agent/agent/usage_pricing.pyÚ__annotate__r%   '   s   € ÷ ñ ˜gð ¨#ñ ó    c                ó`   € V \         8X  d   R# V \        8  d   RV R 2pVR8w  d   V# R# RV R 2# )ur  Cost display label: zero â†’ "$0.00"; sub-cent â†’ "~$0.0046" (4 dp, or
"~$<0.0001" when it rounds to 0.0000 so the label never reads as zero);
else "~$1.23". Shared by per-response labels and insights cost buckets.

This fixes #79220 where sub-cent per-turn costs on cheap models (DeepSeek, etc.) rendered as "$0.00"
despite amount_usd carrying full Decimal precision.
z$0.00z~$z.4fz~$0.0000z	~$<0.0001ú.2f)Ú_ZEROÚ_SUBCENT_THRESHOLD)r   Úlabels   & r$   Úformat_cost_labelr,   '   sH   € ð ”„ÙØÔ"Ô"Ø�V˜C�LÐ!ˆð
  Ô+ˆuÐ<°Ð<Ø��sˆ|ÐÐr&   ÚnoneT)Úfrozenc                  ó²   € ] tR t^At$ ^ tR]R&   ^ tR]R&   ^ tR]R&   ^ tR]R&   ^ t	R]R&   ^t
R]R&   RtR	]R
&   ]R R l4       t]R R l4       tR R ltRtR# )ÚCanonicalUsageÚintÚinput_tokensÚoutput_tokensÚcache_read_tokensÚcache_write_tokensÚreasoning_tokensÚrequest_countNzOptional[dict[str, Any]]Ú	raw_usagec               ó   € V ^8„  d   QhRR/# ©r   r    r1   r"   )r#   s   "r$   r%   ÚCanonicalUsage.__annotate__L   s   € ÷ Tñ T˜sñ Tr&   c                	ó^   € V P                   V P                  ,           V P                  ,           # ©N)r2   r4   r5   ©Úselfs   &r$   Úprompt_tokensÚCanonicalUsage.prompt_tokensK   s$   € à× Ñ  4×#9Ñ#9Õ9¸D×<SÑ<SÕSÐSr&   c               ó   € V ^8„  d   QhRR/# r:   r"   )r#   s   "r$   r%   r;   P   s   € ÷ 7ñ 7˜cñ 7r&   c                	ó<   € V P                   V P                  ,           # r=   )r@   r3   r>   s   &r$   Útotal_tokensÚCanonicalUsage.total_tokensO   s   € à×!Ñ! D×$6Ñ$6Õ6Ð6r&   c               ó    € V ^8„  d   QhRRRR/# )r   Úotherr0   r    r"   )r#   s   "r$   r%   r;   S   s   € ÷ 	ñ 	˜^ð 	°ñ 	r&   c                ó(  € \        V\        4      '       g   \        # \        R/ \        \        4       Uu/ uFO  q"P                  R8w  g   K  VP                  \        WP                  4      \        WP                  4      ,           bKQ  	  upB # u upi )zœSum two usage buckets. ``raw_usage`` (single-response detail) is
dropped; ``request_count`` adds so callers see how many API calls a
combined figure covers.r8   r"   )Ú
isinstancer0   ÚNotImplementedr   ÚnameÚgetattr)r?   rG   Úfs   && r$   Ú__add__ÚCanonicalUsage.__add__S   sz   € ô ˜%¤×0Ò0Ü!Ð!Üñ äœNÔ+ó!
á+�¯v©v¸Ñ/Dô CˆA�F‰F”G˜D§&¡&Ó)¬G°E¿6¹6Ó,BÕBÒBÙ+ñ!
ñ ð 	ùò !
s   µBÁ>Br"   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r2   Ú__annotations__r3   r4   r5   r6   r7   r8   Úpropertyr@   rD   rN   Ú__static_attributes__r"   r&   r$   r0   r0   A   s~   ‡ à€L�#ÓØ€M�3ÓØÐ�sÓØÐ˜ÓØÐ�cÓØ€M�3ÓØ*.€IÐ'Ó.àôTó ðTð ô7ó ð7÷	ñ 	r&   r0   c                  óH   € ] tR t^_t$ R]R&   R]R&   RtR]R&   RtR]R&   RtR	# )
ÚBillingRouter!   ÚproviderÚmodelÚ Úbase_urlÚunknownÚbilling_moder"   N)rP   rQ   rR   rS   rT   r\   r^   rV   r"   r&   r$   rX   rX   _   s    ‡ àƒMØƒJØ€HˆcÓØ!€L�#×!r&   rX   c                  óÜ   € ] tR t^gt$ RtR]R&   RtR]R&   RtR]R&   RtR]R&   Rt	R]R&   Rt
R	]R
&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR# )ÚPricingEntryNúOptional[Decimal]Úinput_cost_per_millionÚoutput_cost_per_millionÚcache_read_cost_per_millionÚcache_write_cost_per_millionÚrequest_costr-   Ú
CostSourceÚsourceúOptional[str]Ú
source_urlÚpricing_versionúOptional[datetime]Ú
fetched_atzOptional[int]Útier_threshold_tokensÚinput_cost_per_million_aboveÚoutput_cost_per_million_aboveÚ!cache_read_cost_per_million_aboveÚ"cache_write_cost_per_million_abover"   )rP   rQ   rR   rS   rb   rT   rc   rd   re   rf   rh   rj   rk   rm   rn   ro   rp   rq   rr   rV   r"   r&   r$   r`   r`   g   s£   ‡ à04ÐÐ-Ó4Ø15ÐÐ.Ó5Ø59ÐÐ!2Ó9Ø6:Ð Ð"3Ó:Ø&*€LÐ#Ó*Ø€FˆJÓØ $€J�Ó$Ø%)€O�]Ó)Ø%)€JÐ"Ó)ð
 ,0Ð˜=Ó/Ø6:Ð Ð"3Ó:Ø7;Ð!Ð#4Ó;Ø;?Ð%Ð'8Ó?Ø<@Ð&Ð(9×@r&   r`   c                  ój   € ] tR t^}t$ R]R&   R]R&   R]R&   R]R&   R	tR
]R&   R	tR]R&   RtR]R&   RtR	# )Ú
CostResultra   Ú
amount_usdÚ
CostStatusÚstatusrg   rh   r!   r+   Nrl   rm   ri   rk   útuple[str, ...]Únotesr"   )	rP   rQ   rR   rS   rT   rm   rk   ry   rV   r"   r&   r$   rt   rt   }   s8   ‡ à!Ó!ØÓØÓØƒJØ%)€JÐ"Ó)Ø%)€O�]Ó)Ø€Eˆ?×r&   rt   c                 ó6   € \         P                  ! \        4      # r=   )r   Únowr	   r"   r&   r$   Ú<lambda>r|   ˆ   s   € ”8—<’<¤Ô$r&   úincluded-route)rb   rc   rd   re   rh   rk   Úurlc               ó8   € V ^8„  d   QhRRRRRRRRRRRRR	R
RR/# )r   Úinpr!   ÚoutÚ
cache_readri   Úcache_writeÚversionr~   Útiersr   r    r`   r"   )r#   s   "r$   r%   r%   �   sN   € ÷ 
ñ 
Ø	ð
Øð
Ø$1ð
ØGTð
àð
à$ð
à69ð
ð ñ
r&   c               ó”   € \        R
R\        V 4      R\        V4      RVe   \        V4      MRRVe   \        V4      MRRRRVR	V/VB # )zHBuild an official-docs snapshot entry from per-million USD rate strings.rb   rc   rd   Nre   rh   Úofficial_docs_snapshotrj   rk   r"   )r`   r
   )r€   r�   r‚   rƒ   r„   r~   r…   s   &&&&$$,r$   Ú_snaprˆ   �   s‚   € ô
 ñ Ü& s›|ðÜELÈSÃ\ðà;EÒ;Q¤G¨JÔ$7ÐW[ðð >IÒ=T¤W¨[Ô%9ÐZ^ðð (ð	ð 58ð	ð JQð	ð UZñ	ð r&   z'https://aws.amazon.com/bedrock/pricing/z8https://platform.claude.com/docs/en/about-claude/pricingzhttps://ai.google.dev/pricingú25.00ú15.00ú4.00ú20.00ú0.20z0https://openai.com/index/previewing-gpt-5-6-sol/zopenai-gpt-5.6-2026-07úgpt-5.6-solú30.00úgpt-5.6-terraú2.50úgpt-5.6-lunaú1.00ú6.00ú1.25zanthropic-pricing-2026-05zclaude-haiku-4-5ú75.00zclaude-3-5-haiku-20241022zclaude-3-haiku-20240307z4https://openrouter.ai/anthropic/claude-opus-4.8-fastzclaude-opus-4-8-fastú10.00ú50.00ú12.50zanthropic-pricing-2026-06-introzclaude-sonnet-5ú2.00zanthropic-pricing-2026-09úclaude-opus-5úclaude-opus-5-5zhttps://openai.com/api/pricing/zopenai-pricing-2026-03-16zgpt-4ozgpt-4o-miniú0.60zgpt-4.1zgpt-4.1-miniú0.40zgpt-4.1-nanoÚo3zo3-miniz1https://api-docs.deepseek.com/quick_start/pricingzdeepseek-pricing-2026-09-10údeepseek-v4-flashzdeepseek-v4-proz-https://ai.google.dev/gemini-api/docs/pricingzgoogle-pricing-2026-10-13zgemini-4-argonzgoogle-pricing-2026-09-02zgoogle-pricing-2026-07-28zgemini-3.6-flashzgemini-3.5-flash-litezgoogle-pricing-2026-07-07zgemini-3.5-flashúgemini-3.1-flash-litezgemini-3-pro-previewú12.00zgemini-3-flash-previewzgemini-2.5-flashzgemini-2.0-flashÚbedrockzanthropic-list-2026-07zanthropic-list-2026-09zanthropic.claude-opus-5zanthropic.claude-opus-5-5zbedrock-pricing-2026-06zanthropic.claude-sonnet-5zbedrock-pricing-2026-04zanthropic.claude-haiku-4-5zamazon.nova-prozamazon.nova-litezamazon.nova-microÚminimaxzminimax-pricing-2026-04zminimax-m2.7ú1.20ú
minimax-cnÚ	fireworksz,https://docs.fireworks.ai/serverless/pricingzfireworks-pricing-2026-07z	kimi-k2p6zkimi-k2p7-codezglm-5p2zqwen3p7-plusz
minimax-m3zgpt-oss-120bzgpt-oss-20bzglm-5p1zminimax-m2p7zkimi-k2p7-code-fastzglm-5p2-fastzglm-5p1-fastz0tuple[tuple[str, Optional[str], str, dict], ...]Ú
_SNAPSHOTSz#dict[tuple[str, str], PricingEntry]Ú_OFFICIAL_DOCS_PRICINGr„   z9https://developers.openai.com/api/docs/models/gpt-6-astrazopenai-gpt-6-astra-2026-09i€& )r~   r„   rn   ro   rp   rq   rr   úgpt-6-astraúgpt-6.1-solú0.125z.https://developers.openai.com/api/docs/models/zopenai-gpt-6-tiers-2026-09z60.00z300.00zGhttps://developers.openai.com/api/docs/pricing?latest-pricing=ultrafastzopenai-ultrafast-2026-09z120.00z450.00z150.00zopenai-ultrafast-2026-10-08z24.00z90.00zdict[str, PricingEntry]Ú_OPENAI_ULTRAFAST_PRICINGi@ z18.00)r~   r„   rn   ro   rp   rq   )r~   r„   rn   ro   rp   zanthropic-fast-mode-2026-09z#fast-mode-pricingÚ_ANTHROPIC_FAST_MODE_PRICINGc              #  óH   "  € T F  pR F  pRV RV 2V3x € K  	  K  	  R# 5i)Úpror   Ú-N)r°   Ú900kr"   )Ú.0ÚmÚsuffixs   &  r$   Ú	<genexpr>r¶   g  s5   é € ð &Ùjˆ1Û$ˆ6ð �A�3�a˜�x� !Õ$á$ñ %Ûjùs   ‚ "c               ó    € V ^8„  d   QhRRRR/# )r   Úvaluer   r    ra   r"   )r#   s   "r$   r%   r%   q  s   € ÷ ñ �sð Ð0ñ r&   c                ó\   €  V f   R # \        \        V 4      4      #   \         d     R # i ; ir=   )r
   r!   Ú	Exception)r¸   s   &r$   Ú_to_decimalr»   q  s1   € ðØ’}ˆtÐ=¬'´#°e³*Ó*=Ð=øÜô Úðús   ‚ ˆ œ+ª+c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úobjr   Úpathr!   r    r1   r"   )r#   s   "r$   r%   r%   x  s!   € ÷ ñ �cð  #ð ¨#ñ r&   c                óö   € V FB  pV '       g    ^ # \        V \        4      '       d   V P                  V^ 4      M\        W^ 4      p KD  	   \	        ^ \        T ;'       g    ^ 4      4      #   \         d     ^ # i ; i)zýNon-negative int at ``obj.path[0].path[1]...``; 0 if any hop is falsy or
non-numeric. Hops read dicts and attribute objects alike (the Responses API
returns either); negative counters from providers are clamped so they cannot
corrupt session accounting.)rI   ÚdictÚgetrL   Úmaxr1   rº   )r½   r¾   Úhops   &* r$   Ú_usage_fieldrÄ   x  sf   € ó
 ˆßÚÜ!+¨C´×!6Ò!6ˆc�g‰g�c˜1Œo¼GÀCÈaÓ<PŠñ ðÜ�1”c˜#Ÿ(˜( “mÓ$Ð$øÜô Úðús   Á
A) Á
A) Á)A8Á7A8c               ó$   € V ^8„  d   QhRRRRRR/# )r   r½   r   Úpathsrx   r    r1   r"   )r#   s   "r$   r%   r%   ‡  s&   € ÷ Sñ S˜ð S _ð S¸ñ Sr&   c                ó>   a € \        R V 3R lV 4        4       ^ 4      # )z?First non-zero ``_usage_field`` across candidate paths, else 0.c              3  ó8   "  € T F  q'       g   K  Vx € K  	  R # 5ir=   r"   )r³   Úvs   & r$   r¶   Ú!_first_nonzero.<locals>.<genexpr>‰  s   é € ÐNÑH�qËA—’ÓHùs   ‚	�
c              3  ó>   <"  € T F  p\        S.VO5!  x € K  	  R # 5ir=   )rÄ   )r³   r¾   r½   s   & €r$   r¶   rÊ   ‰  s   øé € ÐHÁ%¸$œ\¨#Ð5°×5Ð5Ã%ùó   ƒ©Únext)r½   rÆ   s   f*r$   Ú_first_nonzerorÏ   ‡  s   ø€ äÑNÔHÁ%ÔHÓNÐPQÓRÐRr&   z
openai-apic               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Ú
model_namer!   rY   ri   r\   r    rX   r"   )r#   s   "r$   r%   r%   –  s2   € ÷ )@ñ )@Øð)@Ø,ð)@Ø?Lð)@àñ)@r&   c                óJ  a€ T;'       g    R P                  4       P                  4       pT;'       g    R P                  4       P                  4       pT ;'       g    R P                  4       pV'       g'   RV9   d    VP                  R^4      w  rgVR9   d   TpTpT;'       g    R oVP                  R4      R,          pR V3R llp	VR8X  d   \        RVSRR7      # VR	8X  g   V	! R
4      '       d   \        R	VSRR7      # VR8X  g   V	! R4      '       d   \        RYR;'       g    \        RR7      # \
        P                  V4      p
V
fB   V\        9   g   V	! R4      '       g   V	! R4      '       d   Rp
MVR8X  g   V	! R4      '       d   Rp
V
'       d7   V
R8X  d"   S'       d   V	! R4      '       d   \        V4      p\        W¨SRR7      # VR9   g   V'       d*   \        V4      R9   d   \        T;'       g    RVSRR7      # \        T;'       g    RV'       d   TMR SRR7      # )r[   Ú/r   r   c               ó    € V ^8„  d   QhRRRR/# )r   rK   r!   r    Úboolr"   )r#   s   "r$   r%   Ú+resolve_billing_route.<locals>.__annotate__§  s   € ÷ 0ñ 0�3ð 0˜4ñ 0r&   c                ó   <€ \        SV 4      # r=   )r   )rK   r~   s   &€r$   ÚhostÚ#resolve_billing_route.<locals>.host§  s   ø€ Ü$ S¨$Ó/Ð/r&   zopenai-codexÚsubscription_included)rY   rZ   r\   r^   Ú
openrouterzopenrouter.aiÚofficial_models_apiÚnouszinference-api.nousresearch.comzaiplatform.googleapis.comz!generativelanguage.googleapis.comr§   zapi.fireworks.aizapi.openai.comr‡   Úcustomr]   >   r   r   r   éÿÿÿÿ>   ÚlocalrÞ   )Ú	localhostz	127.0.0.1)
ÚstripÚlowerÚsplitrX   Ú_NOUS_DEFAULT_BASE_URLÚ_SNAPSHOT_PROVIDER_ALIASESrÁ   Ú_GOOGLE_PROVIDER_NAMESr   r   )rÑ   rY   r\   Úprovider_nameÚbaserZ   Úinferred_providerÚ
bare_modelÚbarerØ   Úsnapshot_providerr~   s   &&&        @r$   Úresolve_billing_routerî   –  s  ø€ ð —^�^ ×*Ñ*Ó,×2Ñ2Ó4€MØ�NˆN˜×!Ñ!Ó#×)Ñ)Ó+€DØ×Ð˜2×$Ñ$Ó&€Eß˜S Eœ\Ø(-¯©°C¸Ó(;Ñ%ÐØÐ AÔAØ-ˆMØˆEà
�.ˆ.�b€Cð �;‰;�sÓ˜BÕ€D÷0ð 0ð ˜Ô&Ü ^¸5È3Ð]tÔuÐuØ˜Ô$©¨_×(=Ò(=Ü \¸ÈÐ[pÔqÐqØ˜Ô¡$Ð'G×"HÒ"HÜ V°5×CeÐCeÔOeð  uJô  Kð  	KÜ2×6Ñ6°}ÓEÐØÒ àÔ3Ô3ÙÐ/×0Ò0±DÐ9\×4]Ò4]à (ÑØ˜kÔ)©TÐ2D×-EÒ-EØ +ÐßØ Ô(·#¹Ð>N×9OÒ9OÜ5°dÓ;ˆDÜÐ%6ÈSÐ_wÔxÐxØÐ+Ô+·Ô9JÈ4Ó9PÐTnÔ9nÜ ]×%>Ð%>°hÀeÐVYÐhqÔrÐrÜ ×!;Ð!;°)Ï5Á4ÐVXÐcfÐu~ÔÐr&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rK   r!   Úprefixesrx   r    r"   )r#   s   "r$   r%   r%   Ç  s&   € ÷ Oñ O˜ð O ð O¸3ñ Or&   c                ó0   a € \        V 3R lV 4       S 4      # )zMDrop the first matching prefix (at most one), else return ``name`` unchanged.c              3  ór   <"  € T F,  pSP                  V4      '       g   K  S\        V4      R  x € K.  	  R # 5ir=   )Ú
startswithÚlen)r³   ÚprK   s   & €r$   r¶   Ú _strip_prefix.<locals>.<genexpr>É  s(   øé € ÐG© 1°D·O±OÀA×4F”�”c˜!“f�g•«ùs   ƒ7¡7rÍ   )rK   rð   s   f&r$   Ú_strip_prefixr÷   Ç  s   ø€ äÔG©ÓGÈÓNÐNr&   c               ó    € V ^8„  d   QhRRRR/# ©r   rZ   r!   r    r"   )r#   s   "r$   r%   r%   Ì  s   € ÷ ñ ¨ð °ñ r&   c                óÔ   € \         P                  ! RR\        V P                  4       P	                  4       \
        4      4      p\         F  p\         P                  ! VRV4      pK  	  V# )uÈ   Bare foundation-model id: strip the cross-region inference-profile scope
(``us.``/``global.``/...), map dotted versions (``4.7`` â†’ ``4-7``), then
strip the trailing date/revision/profile components.ú(\d+)\.(\d+)ú\1-\2r[   )ÚreÚsubr÷   rã   râ   Ú_BEDROCK_REGION_PREFIXESÚ_BEDROCK_TRAILERS)rZ   rK   Úpatterns   &  r$   Ú_normalize_bedrock_model_namer  Ì  sN   € ô �6Š6�/ 8¬]¸5¿;¹;»=×;NÑ;NÓ;PÔRjÓ-kÓl€Dß$ˆÜ�vŠv�g˜r 4Ó(Šñ %à€Kr&   c               ó    € V ^8„  d   QhRRRR/# rù   r"   )r#   s   "r$   r%   r%   Ö  s   € ÷ dñ d¨3ð d°3ñ dr&   c                ó~   € \         P                  ! RR\        V P                  4       P	                  4       R4      4      # )uE   Strip an ``anthropic/`` prefix and map dotted versions (4.7 â†’ 4-7).rû   rü   )z
anthropic/)rý   rþ   r÷   rã   râ   )rZ   s   &r$   Ú_normalize_anthropic_model_namer  Ö  s,   € ä�6Š6�/ 8¬]¸5¿;¹;»=×;NÑ;NÓ;PÐRaÓ-bÓcÐcr&   c               ó    € V ^8„  d   QhRRRR/# ©r   ÚrouterX   r    úOptional[PricingEntry]r"   )r#   s   "r$   r%   r%   à  s   € ÷ eñ e¨ð eÐ:Pñ er&   c                ó@  € V P                   P                  4       p\        P                  V P                  V34      pV'       d   V# \
        P                  V P                  4      pV'       d	   V! V4      MTpWA8w  d"   \        P                  V P                  V34      # R # r=   )rZ   rã   r©   rÁ   rY   Ú_MODEL_NORMALIZERS)r  rZ   ÚentryÚ	normalizeÚ
normalizeds   &    r$   Ú_lookup_official_docs_pricingr  à  s}   € Ø�K‰K×ÑÓ€EÜ"×&Ñ&¨¯©¸Ð'>Ó?€EßØˆÜ"×&Ñ& u§~¡~Ó6€Iß%.‘˜5Ô!°E€JØGQÔGZÔ!×%Ñ% u§~¡~°zÐ&BÓCÐdÐ`dÐdr&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úusager0   Úresponser   r    r"   )r#   s   "r$   r%   r%   ê  s&   € ÷ gñ g Nð g¸cð gÀnñ gr&   c                óþ   € \        VRR4      p\        V\        4      '       d   VP                  4       '       g   V # \	        T / V P
                  ;'       g    / CRVP                  4       P                  4       /CR7      # )z¸``usage`` with the response's served ``service_tier`` folded into ``raw_usage``. OpenAI reports
the tier on the response, not inside ``usage``, and pricing reads it from ``raw_usage``.Úservice_tierN)r8   )rL   rI   r!   râ   r   r8   rã   )r  r  Útiers   && r$   Úwith_served_service_tierr  ê  sg   € ô �8˜^¨TÓ2€DÜ�dœC× Ò ¨¯
©
¯ªØˆÜ�5Ð$e¨¯©×(=Ð(=¸2Ð$eÀÐPT×PZÑPZÓP\×PbÑPbÓPdÑ$eÔfÐfr&   c               ó    € V ^8„  d   QhRRRR/# )r   r  r0   r    ri   r"   )r#   s   "r$   r%   r%   ó  s   € ÷ ^ñ ^˜~ð ^°-ñ ^r&   c                ó|   € \        V P                  \        4      '       d   V P                  P                  R 4      # R# )r  N©rI   r8   rÀ   rÁ   ©r  s   &r$   Ú_served_openai_tierr  ó  s-   € Ü2<¸U¿_¹_Ìd×2SÒ2Sˆ5�?‰?×Ñ˜~Ó.Ð]ÐY]Ð]r&   c               ó    € V ^8„  d   QhRRRR/# )r   r  r0   r    rÕ   r"   )r#   s   "r$   r%   r%   ÷  s   € ÷ Xñ X˜ð X¨4ñ Xr&   c                ó‚   € \        V P                  \        4      ;'       d    V P                  P                  R4      R8H  # )zMAnthropic names the speed that served a fast-mode request in ``usage.speed``.ÚspeedÚfastr  r  s   &r$   Ú_served_fastr   ÷  s0   € ä�e—o‘o¤tÓ,×WÐW°·±×1DÑ1DÀWÓ1MÐQWÑ1WÐWr&   c               ó    € V ^8„  d   QhRRRR/# )r   rZ   r!   r    r	  r"   )r#   s   "r$   r%   r%   ü  s   € ÷ /ñ / cð /Ð.Dñ /r&   c                ó˜   € V P                  4       p\        P                  V4      ;'       g    \        P                  \        V4      4      # r=   )rã   r®   rÁ   r  )rZ   rK   s   & r$   Ú_anthropic_fast_mode_entryr#  ü  s@   € Ø�;‰;‹=€DÜ'×+Ñ+¨DÓ1÷ /ð /Ô5Q×5UÑ5UÜ'¨Ó-ó6/ð /r&   c               ó    € V ^8„  d   QhRRRR/# r  r"   )r#   s   "r$   r%   r%     s   € ÷ ñ  \ð Ð6Lñ r&   c                óD   € \        \        4       V P                  R RR7      # )z>https://openrouter.ai/docs/api/api-reference/models/get-modelszopenrouter-models-api©rj   rk   )Ú_pricing_entry_from_metadatar   rZ   )r  s   &r$   Ú_openrouter_pricing_entryr(    s!   € Ü'ÜÓ §¡ØSØ/ôð r&   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   Úmetadatazdict[str, dict[str, Any]]Úmodel_idr!   rj   rk   r    r	  r"   )r#   s   "r$   r%   r%   
  s4   € ÷ ñ Ø'ðØ36ðØGJðØ]`ðàñr&   c               ó.  a€ W9  d   R # W,          P                  R4      ;'       g    / oR V3R llpV! R4      pV! R4      p\        SP                  R4      4      pVf   Vf   Vf   R # \        WVV! RRR	4      V! R
RR4      VRVV\        4       R7	      # )NÚpricingc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úkeyr!   Úaliasesr    ra   r"   )r#   s   "r$   r%   Ú2_pricing_entry_from_metadata.<locals>.__annotate__  s"   € ÷ ?ñ ?˜ð ?¨ð ?Ð0Añ ?r&   c                óª   <€ SP                  V 4      pV F  pT;'       g    SP                  V4      pK   	  \        V4      pVf   R # V\        ,          # r=   )rÁ   r»   Ú_ONE_MILLION)r/  r0  ÚrawÚaliasr¸   r-  s   &*   €r$   Úper_millionÚ1_pricing_entry_from_metadata.<locals>.per_million  sO   ø€ Ø�k‰k˜#ÓˆÛˆEØ×+Ð+˜Ÿ™ UÓ+ŠCñ ä˜CÓ ˆØ’}ˆtÐ>¨%´,Õ*>Ð>r&   ÚpromptÚ
completionÚrequestr‚   Úcached_promptÚinput_cache_readrƒ   Úcache_creationÚinput_cache_writeÚprovider_models_api)	rb   rc   rd   re   rf   rh   rj   rk   rm   )rÁ   r»   r`   Ú_UTC_NOW)	r*  r+  rj   rk   r6  r8  r9  r:  r-  s	   &&$$    @r$   r'  r'  
  s§   ø€ ð ÔÙØÕ ×$Ñ$ YÓ/×5Ð5°2€G÷?ð ?ñ ˜Ó"€FÙ˜\Ó*€JÜ˜'Ÿ+™+ iÓ0Ó1€GØ‚~˜*Ò,°²ÙÜØ%Ù$/°¸oÐOaÓ$bÙ%0°Ð@PÐReÓ%fØÐ%:ÀzØ'´H³Jôð r&   c               ó    € V ^8„  d   QhRRRR/# r  r"   )r#   s   "r$   r%   r%   '  s   € ÷ ñ  \ð Ð6Lñ r&   c                ót  € \         P                  V P                  4      pV'       d   V P                  '       g   R# V P                  '       dG   \        V P                  4      w  r#pW$3R8w  g%   W18X  g!   VP                  RV,           4      '       g   R# ^ RIHp V! V P                  V P                  4      pVe   VP                  4       '       g   R# \        \        VP                  4      \        VP                  4      \        VP                  4      \        VP                  4      RRR\!        4       R7      # )	zXmodels.dev list price for a direct first-party route (see ``_MODELS_DEV_DIRECT_HOSTS``).NÚ.)Úget_model_infor?  zhttps://models.devz
models.dev)rb   rc   rd   re   rh   rj   rk   rm   )Úhttpsi»  )Ú_MODELS_DEV_DIRECT_HOSTSrÁ   rY   rZ   r\   r   ÚendswithÚagent.models_devrD  Úhas_cost_datar`   r»   Ú
cost_inputÚcost_outputÚcost_cache_readÚcost_cache_writer@  )r  ÚdomainÚschemerØ   ÚportrD  Ú
model_infos   &      r$   Ú_models_dev_pricing_entryrR  '  sç   € ä%×)Ñ)¨%¯.©.Ó9€Fß˜ŸŸ˜ÙØ‡~‡~€~Ü,¨U¯^©^Ó<Ñˆ�dØˆ>˜^Ô+°D´NÀdÇmÁmÐTWÐZ`ÕT`×FaÒFaÙÝ/á §¡°·±Ó<€JØÒ ×!9Ñ!9×!;Ò!;ÙÜÜ*¨:×+@Ñ+@ÓAÜ +¨J×,BÑ,BÓ CÜ$/°
×0JÑ0JÓ$KÜ%0°×1LÑ1LÓ%MØ$Ð1EÐWcÜ“:ôð r&   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rÑ   r!   rY   ri   r\   Úapi_keyr    r	  r"   )r#   s   "r$   r%   r%   ?  s6   € ÷ ,ñ ,Øð,Ø,ð,Ø?Lð,àð,ð ñ,r&   c                ó¢  € \        WVR 7      pVP                  R8X  d   \        # VP                  R8X  d   \	        V4      # \        V4      pV'       d   V# VP                  '       d_   \        \        VP                  T;'       g    RR7      VP                  VP                  P                  R4       R2RR7      pV'       d   V# \        V4      # )	©rY   r\   rÚ   rÛ   r[   )rT  rÓ   z/modelszopenai-compatible-models-apir&  )rî   r^   Ú_INCLUDED_ENTRYrY   r(  r  r\   r'  r   rZ   ÚrstriprR  )rÑ   rY   r\   rT  r  Úbundled_entryr  s   &&&&   r$   Úget_pricing_entryrZ  ?  s±   € ô " *È(ÔS€EØ×ÑÐ4Ô4ÜÐØ‡~�~˜Ô%Ü(¨Ó/Ð/ä1°%Ó8€MßØÐØ‡~‡~€~Ü,Ü)¨%¯.©.À'Ç-À-ÈRÔPÐRW×R]ÑR]ØŸ.™.×/Ñ/°Ó4Ð5°WÐ=Ø:ô
ˆ÷
 ØˆLÜ$ UÓ+Ð+r&   rY   Úapi_modec               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úresponse_usager   rY   ri   r[  r    r0   r"   )r#   s   "r$   r%   r%   r  s,   € ÷ 5ñ 5Øð5Ø&3ð5ØFSð5àñ5r&   c               ó¸  a€ V '       g   \        4       # T;'       g    RP                  4       P                  4       pT;'       g    RP                  4       P                  4       pV oVR8X  g   VR8X  d   \        pMVR8X  d   \        pM\
        pV3R lV 4       w  rgr‰V\        J d   TM\        ^ Wh,
          V	,
          4      p
\        SR
R4      pVR9   d    VR8X  d   \        P                  RW4W§W‰4       \        Y§TY›\        S\        4      '       d   \        S4      R	7      # \        \        SRR4      4      '       d   SP                  4       R	7      # RR	7      # )z}Normalize raw API response usage into canonical token buckets (Anthropic,
Codex Responses, or OpenAI Chat Completions shape).r[   Úanthropic_messagesr   Úcodex_responsesc              3  ó>   <"  € T F  p\        S.VO5!  x € K  	  R # 5ir=   )rÏ   )r³   rÆ   Úus   & €r$   r¶   Ú"normalize_usage.<locals>.<genexpr>„  s"   øé € ð JÙ/4 eŒ�qÐ!˜5×!Ð!«uùrÌ   u  cache_observability provider=%s mode=%s input_tokens=%s output_tokens=%s cache_read_tokens=%s cache_write_tokens=%s (note: on MiniMax-M3 cache_read carries a +128 constant floor and is not a reliable hit signal â€” track input_tokens drops across calls instead)Ú
model_dumpN)r2   r3   r4   r5   r6   r8   )Úoutput_tokens_detailsr6   )Úcompletion_tokens_detailsr6   >   r¤   r¦   )r0   râ   rã   Ú_ANTHROPIC_USAGE_SHAPEÚ_CODEX_USAGE_SHAPEÚ_CHAT_USAGE_SHAPErÂ   rÏ   ÚloggerÚdebugrI   rÀ   ÚcallablerL   rd  )r]  rY   r[  rè   ÚmodeÚshapeÚprompt_totalr3   r4   r5   r2   r6   rb  s   &$$         @r$   Únormalize_usagerp  r  sb  ø€ ÷
 ÜÓÐà—^�^ ×*Ñ*Ó,×2Ñ2Ó4€MØ�NˆN˜×!Ñ!Ó#×)Ñ)Ó+€DØ€AàÐ#Ô# }¸Ô'CÜ&‰Ø	Ð"Ô	"Ü"‰ä!ˆôJÙ/4óJÑF€LÐ!2ð
 $)Ô,BÓ#B‘<ÌØ	ˆ<Õ+Ð.@Õ@óI€Lô &Ø	Ð8Ð:kóÐð Ð1Ô1°dÐ>RÔ6RÜ�‰ð*ð
  Øô	
ô Ø!ÐRcØ-Ü'¨¬4×0Ò0”$�q“'ôð ô JRÔRYÐZ[Ð]iÐkoÓRp×IqÒIq°q·|±|³~ôð ð x|ôð r&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rh   rg   ry   r!   r    rt   r"   )r#   s   "r$   r%   r%   ª  s&   € ÷ bñ b˜*ð b¨cð b°jñ br&   c                ó"   € \        R RV RVR7      # )Nr]   zn/a)ru   rw   rh   r+   ry   )rt   )rh   ry   s   &*r$   Ú_unknown_costrs  ª  s   € Ü ¨iÀÈeÐ[`ÔaÐar&   r\   rT  c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   rÑ   r!   r  r0   rY   ri   r\   rT  r    rt   r"   )r#   s   "r$   r%   r%   ®  sF   € ÷ @ñ @Øð@Ø*ð@Ø9Fð@àð@à-:ð@ð ñ@r&   c               ó†  € ^ RI Hp T! T;'       g    R4      pV'       d   VP                  W4      MRpVe   V# \        WVR7      pVP                  R8X  d   \        \        RRRR\        3R	7      # \        WW4R
7      p	VP                  R8X  d;   \        V4      '       d*   \        VP                  4      p	V	'       g   \        RR4      # VP                  R8X  dD   \        V4      R8X  d4   \        P!                  VP                  4      p	V	'       g   \        RR4      # V	'       g   \        R4      # V	P"                  RJ;'       d    VP$                  V	P"                  8„  p
\        pVP&                  V	P(                  V	P*                  R3VP,                  V	P.                  V	P0                  R3VP2                  V	P4                  V	P6                  R3VP8                  V	P:                  V	P<                  R33 F_  w  rÍrïV
'       d   Ve   TpVf$   V'       d   \        V	P>                  .VO5!  u # K;  V\A        V4      V,          \B        ,          ,          pKa  	  V	PD                  e@   VPF                  '       d.   V\A        VPF                  4      V	PD                  ,          ,          p. pRp\I        V4      pV	P>                  R8X  d%   V\        8X  d   RpRpVPK                  \        4       VP                  R8X  d   VPK                  R4       \        VVV	P>                  VV	PL                  V	PN                  \Q        V4      R7      # )r   )Úget_provider_profiler[   NrV  rÚ   Úincludedr-   r}   )ru   rw   rh   r+   rk   ry   ©rY   r\   rT  r   r‡   z'fast-mode pricing unavailable for modelr   Ú	ultrafastz'ultrafast pricing unavailable for modelÚ	estimatedrÛ   zBOpenRouter cost is estimated from the models API until reconciled.)ru   rw   rh   r+   rm   rk   ry   r"   )z(cache-read pricing unavailable for route)z)cache-write pricing unavailable for route))Ú	providersrv  Úget_usage_costrî   r^   rt   r)   Ú_INCLUDED_NOTErZ  rY   r   r#  rZ   rs  r  r­   rÁ   rn   r@   r2   rb   ro   r3   rc   rp   r4   rd   rq   r5   re   rr   rh   r
   r3  rf   r7   r,   Úappendrm   rk   Útuple)rÑ   r  rY   r\   rT  rv  ÚprofileÚreportedr  r  Úabover   ÚtokensÚrateÚ
rate_aboveÚnotery   rw   r+   s   &&$$$              r$   Úestimate_usage_costr‡  ®  sÉ  € õ /Ù" 8§> >¨rÓ2€Gß<Cˆw×%Ñ% jÔ8È€HØÒØˆÜ! *È(ÔS€EØ×ÑÐ4Ô4ÜÜ Z¸ÀjØ,´^Ð4Eô
ð 	
ô
 ˜jÀhÔ`€EØ‡~�~˜Ô$¬°e×)<Ò)<Ü*¨5¯;©;Ó7ˆßÜ Ð!9Ð;dÓeÐeØ‡~�~˜Ô!Ô&9¸%Ó&@ÀKÔ&OÜ)×-Ñ-¨e¯k©kÓ:ˆßÜ Ð!9Ð;dÓeÐeßÜ˜VÓ$Ð$ð ×'Ñ'¨tÐ3×iÐi¸×8KÑ8KÈe×NiÑNiÑ8i€EÜ€Fà	×	Ñ	˜U×9Ñ9¸5×;]Ñ;]Ð_aÐbØ	×	Ñ	˜e×;Ñ;¸U×=`Ñ=`ÐbdÐeØ	×	 Ñ	  %×"CÑ"CÀU×ElÑElØ	6ð	8à	×	!Ñ	! 5×#EÑ#EÀu×GoÑGoØ	7ð	9ó+Ñ&ˆ�j÷ �ZÒ+ØˆDØŠ<ßÜ$ U§\¡\Ð9°DÓ9Ò9ÙØ”'˜&“/ DÕ(¬<Õ7Õ7Šñ+ð ×ÑÒ%¨%×*=×*=Ð*=Ø”'˜%×-Ñ-Ó.°×1CÑ1CÕCÕCˆà€EØ$€FÜ˜fÓ%€EØ‡|�|�vÔ &¬E¤/ØˆØˆØ�‰”^Ô$à‡~�~˜Ô%Ø�‰ÐYÔZäØ &°·±ÀUØ×#Ñ#°U×5JÑ5JÔRWÐX]ÓR^ôð r&   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rÑ   r!   rY   ri   r\   rT  r    rÕ   r"   )r#   s   "r$   r%   r%   ñ  s=   € ÷ lñ lØðlØ,ðlØ?Lðlàðlð 
ñlr&   c                ó    € \        WW#R7      RJ# )zQTrue if pricing data exists for this model+route (direct lookup, no dummy usage).rx  N)rZ  )rÑ   rY   r\   rT  s   &&&&r$   Úhas_known_pricingrŠ  ñ  s   € ô
 ˜ZÀXÔ_ÐgkÐkÐkr&   c               ó    € V ^8„  d   QhRRRR/# )r   ÚsecondsÚfloatr    r!   r"   )r#   s   "r$   r%   r%   ù  s   € ÷ 
 ñ 
  Uð 
 ¨sñ 
 r&   c                óô   € V ^<8  d   V R R2# V ^<,          pV^<8  d   VR R2# V^<,          pV^8  d:   \        V^<,          4      pV'       d   \        V4       RV R2# \        V4       R2# V^,          R R2# )é<   ú.0fÚsr´   zh Úhú.1fÚd)r1   )rŒ  ÚminutesÚhoursÚremaining_mins   &   r$   Úformat_duration_compactr˜  ù  s“   € Ø�„|Ø˜#�˜aÐ Ð Ø˜�l€GØ�„|Ø˜#�˜aÐ Ð Ø�b�L€EØˆr„zÜ˜G b�LÓ)ˆß4A”#�e“*�˜R ˜¨aÐ0ÐWÌ#ÈeË*ÈÐUVÐGWÐWØ�b�j˜Ð˜QÐÐr&   c               ó    € V ^8„  d   QhRRRR/# )r   r¸   r1   r    r!   r"   )r#   s   "r$   r%   r%     s   € ÷ #ñ # cð #¨cñ #r&   c                óJ  a€ \        \        V 4      4      oSR 8  d   \        \        V 4      4      # V ^ 8  d   RMRp\        V3R lR	 4       4      w  r#SV,          pV^
8  d   VR MV^d8  d   VR MVR pRV9   d!   VP	                  R4      P	                  R4      pV V V 2# )
éè  r±   r[   c              3  ó@   <"  € T F  w  rSV8¼  g   K  W3x € K  	  R # 5ir=   r"   )r³   ÚtÚsfxÚ	abs_values   &  €r$   r¶   Ú-format_token_count_compact.<locals>.<genexpr>  s"   øé € Ð}Ñ4j©&¨!ÐnwÐ{|Ñn|œX˜a�XÓ4jùs   ƒ“r(   r“  r�  rC  Ú0))i Êš;ÚB)r   ÚM)r›  ÚK)Úabsr1   r!   rÎ   rX  )r¸   ÚsignÚ	thresholdrµ   ÚscaledÚtextrŸ  s   &     @r$   Úformat_token_count_compactrª    s¨   ø€ Ü”C˜“J“€IØ�5ÔÜ”3�u“:‹Ðà˜!”)‰3 €DÜÔ}Ñ4jÓ}Ó}Ñ€IØ˜Õ"€FØ$ rœkˆf�S‰\À&È3Ä,°&¸±ÐW]Ð^aÐVb€DØ
ˆd„{Ø�{‰{˜3Ó×&Ñ& sÓ+ˆØˆV�D�6˜&˜Ð"Ð"r&   )Úactualrz  rw  r]   )Úprovider_cost_apiÚprovider_generation_apir?  r‡   Úuser_overrideÚcustom_contractr-   )NN)ú5.00r‰   ú0.50ú6.25)ú3.00rŠ   ú0.30ú3.75)r‹   rŒ   r�   r°  )r°  r�   r±  r²  )r‘   rŠ   ú0.25z3.125)r“   r”   ú0.10r•   )úclaude-opus-4-8zclaude-opus-4-7zclaude-opus-4-7-20250507zclaude-opus-4-6zclaude-opus-4-6-20250414zclaude-opus-4-5)zclaude-sonnet-4-6zclaude-sonnet-4-6-20250414zclaude-sonnet-4-5zclaude-sonnet-4-20250514zclaude-3-5-sonnet-20241022)r“   r°  r·  r•   )zclaude-opus-4-20250514zclaude-3-opus-20240229)rŠ   r–   ú1.50z18.75)ú0.80r‹   ú0.08r“   )r¶  r•   ú0.03r´  ©r—   r˜   r“   r™   )rš   r—   r�   r‘   )r‘   r—   r•   )ú0.15r�   ú0.075)rš   ú8.00r±  )rž   ú1.60r·  )r·  rž   ú0.025)r—   ú40.00r‘   )z1.10ú4.40z0.55)zdeepseek-flashr    zdeepseek-chatzdeepseek-reasoner)r¾  r�   z0.003)z0.66z1.98z0.022)rš   r—   r·  )zgemini-3.8-flashzgemini-3.7-flash)ú0.75rµ  r¿  )r¹  z7.50r¾  )r´  r‘   r¼  )r¹  z9.00r¾  )r¶  r¹  rÂ  )rš   r¢   r�   )r±  r³  z0.05)r¾  r�   z0.015)r·  rž   r   )zanthropic.claude-opus-4-8zanthropic.claude-opus-4-7zanthropic.claude-opus-4-6)zanthropic.claude-sonnet-4-6zanthropic.claude-sonnet-4-5)rº  z3.20)ú0.06z0.24)ú0.035ú0.14)r´  r¥   )ú0.95r‹   z0.16)rÉ  r‹   z0.19)ú1.40rÄ  rÈ  )z1.74z3.48z0.145)rÈ  z0.28z0.028)rž   rÁ  r»  )r´  r¥   rÆ  )z0.07r´  rÇ  )rÊ  rÄ  z0.26)zkimi-k2p6-fastzkimi-k2p6-turbo)rš   rÀ  r´  )z1.90rÀ  z0.38)z2.10z6.60z0.21)z2.80z8.80z0.52)r   rª   ))	ú	gpt-6-solrš   r—   r�   r‘   r‹   rŠ   rž   r°  )	r«   rš   r—   r·  r‘   r‹   rŠ   r�   r°  )	ú
gpt-6-lunar·  r±  r   r¬   r�   rÅ  z0.02r¶  )r   úgemini-3.1-pro)r   zgemini-2.5-pro)))r¸  r›   r½  ))rœ   )rÀ  rÃ  rž   r—   )rŽ   r�   r’   rË  rÌ  r«   )r   zgemini-3.1-pro-previewrÍ  )r   zgemini-3.1-flash-lite-previewr¡   >   Úgeminir   Úvertexú	vertex-aiúgoogle-geminiúgoogle-vertexúgoogle-ai-studio)zglobal.zus.zeu.zapac.zap.zau.zjp.zca.zsa.zme.zaf.)z:\d+$z-v\d+$z-\d{8}$)NNN)©©r2   ©©r3   )©Úcache_read_input_tokens)©Úcache_creation_input_tokens)rÔ  rÖ  ))Úinput_tokens_detailsÚcached_tokens))rÜ  r5   )rÜ  Úcache_creation_tokens)))r@   rÕ  ))Úcompletion_tokensr×  ))Úprompt_tokens_detailsrÝ  rØ  )Úprompt_cache_hit_tokens)rÝ  ))rà  r5   )rà  rÛ  rÚ  )r5   )mÚ__conditional_annotations__Ú
__future__r   Úloggingrý   Údataclassesr   r   r   r   r   r	   Údecimalr
   Útypingr   r   r   r   Úagent.model_metadatar   r   r   Úutilsr   r   r   Ú	getLoggerrP   rj  r)   r3  rå   rF  r*   r}  r,   rv   rg   r0   rX   r`   rt   r@  rW  rˆ   Ú_BEDROCK_URLÚ_ANTHROPIC_URLÚ_GOOGLE_URLÚ_OPUSÚ_SONNETÚ	_OPUS_5_5r¨   rT   r©   Ú	_providerÚ_urlÚ_versionÚ_rowsÚitemsÚ_modelsÚ_ratesÚ_entryrI   r!   Ú_modelÚ_slugÚ_inpÚ_outÚ_readÚ_writeÚ
_inp_aboveÚ
_out_aboveÚ_read_aboveÚ_write_abover­   r®   Ú_aliasÚ
_canonicalr»   rÄ   rÏ   ræ   rç   rî   rÿ   r   r÷   r  r  r  r  r  r  r   r#  r(  r'  rR  rZ  rg  rh  ri  rp  rs  r‡  rŠ  r˜  rª  )rö  r÷  rù  râ  s   000@r$   Ú<module>r     sŠ  øðß "Ð "ã Û 	ß 2Ñ 2ß ,Ñ ,Ý ß /Ó /ç xÑ xß KÑ Kà	×	Ò	˜8Ó	$€á�‹
€Ù�wÓ€ØDÐ ð ˆl˜E 6¨;¸ÈÐScØ� Ð*:ðÐ ñ ˜V“_Ð ð H€õð& ÐAÕB€
Øð0õ€
ñ �$Ô÷ð ó ðñ: �$Ô÷"ð "ó ð"ñ �$Ô÷Að Aó ðAñ* �$Ô÷ ð  ó ð ñ %€ÙØ ¸%Ð]bØ!&¨vÐGWô€ñ
à'+÷
ð 
ð" 9€ØK€Ø-€Ø)€Ø
+€Ø-€	ð
 ÐAÐC[ØÐ8¸/ÐKmØÐ8ð^ð ð
 �.Ð"=ð	8Ø9>ð	'Ø(/ØÐ<Ø<Ð>aØ#Ð%EØ!Ð#Cð	@ð 	ð ÐHÐJeØÐ Cðhð ð
 �.Ð"CØÐ<ðFð ð �.Ð"=Ø˜Ø˜9ð@ð ð Ð0Ð2MØÐ+¨]Ð<UØÐ+¨^Ð=UØÐ1°4Ð9SØÐ+ð	Pð ð ÐDÐFcØUÐWpØÐ4ðfð ð
 Ð>Ð@[ØÐ3ð^ð ð Ð>Ð@[Ø0Ð2Kð^ð ð Ð>Ð@[ØÐ4Ð6MÐOgð^ð ð ˆ{Ð7ØÑ4Ð6MÑOhØÑ 9Ð;SÑUmØÑ5Ð7IÑKcð:ð ð �Ð6Ù_Ðafð9ð ð �Ð6Ø! 5Ð*EÀyð9ð ð �Ð7Ð:UÐW^Ð9_Ð`Ø�Ð7ÙFÈØ$Ð&FØÑ+Ð-?ÑAQÐSfÑhyð:ð ð
 �Ð/°.ÑBRÐ1SÐTØ�4Ð2°^ÑEUÐ4VÐWð
 Ð@ÐB]ØÑ-Ð/?ÑAYØÑ+Ð->Ñ@YØÑ6¸ÑH`ØÑ.°Ñ@YØÑ0°)Ñ=UØÑ0Ù-Ñ/GØÑ7¸ÑIaØÑ0ð
`ð 
ðc\@€
Ð<ó \ð| ?AÐ Ð;Ó @Û(2Ñ$€Iˆt�X˜uØ Ÿ;™;ž=‰ˆ�Ù˜Ð;¨Ð;°dÑ;ˆÙ%/°¸×%=Ò%=˜‘zÀ7ÒJˆFØ:@Ð" I¨vÐ#6Ó7ó Kó )ñ )3ð
 �	˜4 ¨5°'¸6À6È6ñ
 5:ØˆW�f˜gØCØ(Ø!Ù!(¨Ó!1Ù")¨'Ó"2Ù&-¨f£oÙ'.¨wÓ'7ô	5Ð Ñ0Ñ 1ô\ÑW€Eˆ4��u˜f j°*¸kÈ<ñ 16Øˆd�E˜6Ø<¸U¸GÐDØ,Ø%Ù%,¨ZÓ%8Ù&-¨jÓ&9Ù*1°+Ó*>Ù+2°<Ó+@ô	1Ð˜H eÐ,Ó-ñ\ð  
ˆ4��u˜f j°*¸kÈ<ð ‘5Ø�˜6 7ØUØ*Ø%Ù%,¨XÓ%6Ù&-¨hÓ&7Ù*1°'Ó*:Ù+2°8Ó+<ô	ð ‘5Ø�˜& 'ØUØ-Ø%Ù%,¨WÓ%5Ù&-¨gÓ&6Ù*1°&«/Ù+2°7Ó+;ô	ð6Ð Ð2ó ñ2 8=Ø
ˆG�V Ð6QØ!ÁÈÃÙ")¨'Ó"2ÑV]Ð^dÓVeô8Ð Ñ3Ñ 4ñ
 8=Ø
ˆG�W +Ð7RØ!ÁÈÃÙ")¨'Ó"2ô8Ð Ñ3Ñ 4òõ9ñ‰ˆó ˆð ‰E�6ÐlÐ#@ÐlÈÐHXÐXjÐFkÑlÒlñ
 ñ ñó9Ð Ð5ó ð �. +¨u°g¸yð&ñ&Újó&ð&ñ ;ð	&ñ
 Ió&Ñ!€Iˆv�zð 3IÈ)ÐU_ÐI`Õ2aÐ˜I vÐ.Ó/ñ&ð ˆv�zõõõSð �˜h¨°,ÀÈ)ÐU^Ð`lÐnzðÐ ó
 {Ð ÷)@ñX oÐ á5Ð õOõ
õdð "Ð#BÀIÐOlÐmÐ õeõgõ^õXõ
/õõõ:÷0,ð ,ñ4Ð ñ
Ð ñÐ ð5Ø6:ð5ØVZ÷5õpbð@ØIMð@à"ð@à=A÷@÷Flð lõ
 ÷#ùô_9s   Î""S