
    ީ^j                    6   U d dl mZ d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZmZ d dlmZ d	d	d
Z ed          Z ed          ZdZed         Zed         Z ed           G d d                      Z ed           G d d                      Z ed           G d d                      Z ed           G d d                      Zd Zi d e ed           ed           ed           ed          d d!d"#          d$ e ed%           ed&           ed'           ed(          d d!d"#          d) e ed*           ed+           ed,           ed-          d d!d"#          d. e ed           ed/           ed           ed          d d0d1#          d2 e ed3           ed4           ed*           ed5          d d6d1#          d7 e ed8           ed3           ed9           ed%          d d0d:#          d; e ed           ed/           ed           ed          d d0d1#          d< e ed           ed/           ed           ed          d d0d1#          d= e ed           ed/           ed           ed          d d0d1#          d> e ed           ed/           ed           ed          d d0d1#          d? e ed@           ed&           edA           edB          d d0d1#          dC e ed@           ed&           edA           edB          d d0d1#          dD e ed           ed/           ed           ed          d d0d1#          dE e ed@           ed&           edA           edB          d d0d1#          dF e ed*           ed           ed,           ed-          d d0d1#          dG e ed&           edH           edI           edJ          d d0d1#          dK e ed@           ed&           edA           edB          d d0d1#          i dL e ed%           ed3           ed-          d dMdNO          dP e edQ           edR           edS          d dMdNO          dT e ed8           edU           ed          d dMdNO          dV e edW           edX           ed,          d dMdNO          dY e ed,           edW           edZ          d dMdNO          d[ e ed3           ed\           ed%          d dMdNO          d] e ed^           ed_           ed`          d dMdNO          da e ed@           ed&           edA           edB          d d0d1#          db e edc           edd           ede           ed*          d d0d1#          df e ed&           edH           edI           edJ          d d0d1#          dg e ed'           ed-           edh           edA          d d0d1#          di e edj           edk           edl          d dmdnO          do e edj           edk           edl          d dmdnO          dp e edq           edr           eds          d dmdnO          dt e edj           edk           edl          d dmdnO          du e ed-           ed3          d dvdwx          dy e edQ           edR          d dvdwx          i dz e ed,           edW          d dvdwx          d{ e ed           ed/           ed           ed          d d|d}#          d~ e ed           ed/           ed           ed          d d|d}#          d e ed           ed/           ed           ed          d d|d}#          d e ed@           ed&           edA           edB          d d|d#          d e ed@           ed&           edA           edB          d d|d#          d e ed@           ed&           edA           edB          d d|d#          d e edc           edd           ede           ed*          d d|d#          d e edc           ed          d d|dx          d e ed           ed          d d|dx          d e ed           edj          d d|dx          d e edA           ed          d d          d e edA           ed          d d          d e ed           edd           ed          d ddO          d e ed           edd           ed          d ddO          d e ed           ed_           edj          d ddO          d e ed           ed           ed          d ddO           e edj           edk           ed          d ddO           e edW           edX           ede          d ddO           e edA           ed           ed          d ddO           e edQ           edR           ed          d ddO           e ed           edA           ed          d ddO           e ed           ed_           ed          d ddO           e edA           ed           ed          d ddO           e ed8           edU           edA          d ddO           e ed8           edU           edA          d ddO           e ed           edU           ed          d ddO           e ed           ed           ed          d ddO           e ed           ed           ed          d ddO          dZded<   dD ]Z ede f         ede  df<   [ ddZ!ddZ"	 	 dddZ#ddZ$ddZ%ddÄZ&ddĄZ'ddʄZ(	 	 	 ddd̄Z)ddd͜ddЄZ*ddddќddӄZ+	 	 	 dddՄZ,dd؄Z-ddلZ.dS )    )annotationsN)	dataclass)datetimetimezone)Decimal)AnyDictLiteralOptional)fetch_endpoint_model_metadatafetch_model_metadata)base_url_host_matchesg        )inputoutput01000000z)https://inference-api.nousresearch.com/v1)actual	estimatedincludedunknown)provider_cost_apiprovider_generation_apiprovider_models_apiofficial_docs_snapshotuser_overridecustom_contractnoneT)frozenc                      e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded	<   d
Z
ded<   edd            Zedd            ZddZd
S )CanonicalUsager   intinput_tokensoutput_tokenscache_read_tokenscache_write_tokensreasoning_tokens   request_countNzOptional[dict[str, Any]]	raw_usagereturnc                0    | j         | j        z   | j        z   S N)r"   r$   r%   selfs    5/home/ice/.hermes/hermes-agent/agent/usage_pricing.pyprompt_tokenszCanonicalUsage.prompt_tokens(   s     4#99D<SSS    c                     | j         | j        z   S r,   )r0   r#   r-   s    r/   total_tokenszCanonicalUsage.total_tokens,   s    !D$666r1   other'CanonicalUsage'c           	        t          |t                    st          S t          | j        |j        z   | j        |j        z   | j        |j        z   | j        |j        z   | j        |j        z   | j        |j        z   d          S )u0  Sum two usage buckets (e.g. MoA advisor fan-out + aggregator).

        ``raw_usage`` is dropped on the sum — it describes a single API
        response and cannot be meaningfully merged. ``request_count`` adds so
        callers can see how many underlying API calls a combined figure covers.
        N)r"   r#   r$   r%   r&   r(   r)   )	
isinstancer    NotImplementedr"   r#   r$   r%   r&   r(   )r.   r4   s     r/   __add__zCanonicalUsage.__add__0   s     %00 	"!!*U-??,u/BB"4u7NN#69QQ!2U5KK,u/BB
 
 
 	
r1   )r*   r!   )r4   r5   r*   r5   )__name__
__module____qualname__r"   __annotations__r#   r$   r%   r&   r(   r)   propertyr0   r3   r9    r1   r/   r    r       s         LMM*.I....T T T XT 7 7 7 X7
 
 
 
 
 
r1   r    c                  @    e Zd ZU ded<   ded<   dZded<   dZded<   dS )	BillingRoutestrprovidermodel base_urlr   billing_modeN)r:   r;   r<   r=   rF   rG   r?   r1   r/   rA   rA   D   sF         MMMJJJH!L!!!!!!r1   rA   c                      e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	d	ed
<   dZ
ded<   dZded<   dZded<   dS )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_at)r:   r;   r<   rK   r=   rL   rM   rN   rO   rQ   rS   rT   rV   r?   r1   r/   rI   rI   L   s         0444441555555999996: ::::&*L****F $J$$$$%)O))))%)J))))))r1   rI   c                  b    e Zd ZU ded<   ded<   ded<   ded<   d	Zd
ed<   d	Zded<   dZded<   d	S )
CostResultrJ   
amount_usd
CostStatusstatusrP   rQ   rB   labelNrU   rV   rR   rT   r?   ztuple[str, ...]notes)r:   r;   r<   r=   rV   rT   r]   r?   r1   r/   rX   rX   Y   sr         !!!!JJJ%)J))))%)O))))Er1   rX   c                 >    t          j        t          j                  S r,   )r   nowr   utcr?   r1   r/   <lambda>ra   d   s    8<-- r1   )openaigpt-5.6-solz5.00z30.00z0.50z6.25r   z0https://openai.com/index/previewing-gpt-5-6-sol/zopenai-gpt-5.6-2026-07)rK   rL   rM   rN   rQ   rS   rT   )rb   gpt-5.6-terraz2.50z15.00z0.25z3.125)rb   gpt-5.6-lunaz1.00z6.00z0.10z1.25)	anthropiczclaude-opus-4-8z25.00z8https://platform.claude.com/docs/en/about-claude/pricingzanthropic-pricing-2026-05)rf   zclaude-opus-4-8-fastz10.00z50.00z12.50z4https://openrouter.ai/anthropic/claude-opus-4.8-fast)rf   zclaude-sonnet-5z2.00z0.20zanthropic-pricing-2026-06-intro)rf   zclaude-opus-4-7)rf   zclaude-opus-4-7-20250507)rf   zclaude-opus-4-6)rf   zclaude-opus-4-6-20250414)rf   zclaude-sonnet-4-6z3.00z0.30z3.75)rf   zclaude-sonnet-4-6-20250414)rf   zclaude-opus-4-5)rf   zclaude-sonnet-4-5)rf   zclaude-haiku-4-5)rf   zclaude-opus-4-20250514z75.00z1.50z18.75)rf   zclaude-sonnet-4-20250514)rb   zgpt-4ozhttps://openai.com/api/pricing/zopenai-pricing-2026-03-16)rK   rL   rM   rQ   rS   rT   )rb   zgpt-4o-miniz0.15z0.60z0.075)rb   zgpt-4.1z8.00)rb   zgpt-4.1-miniz0.40z1.60)rb   zgpt-4.1-nanoz0.025)rb   o3z40.00)rb   zo3-miniz1.10z4.40z0.55)rf   zclaude-3-5-sonnet-20241022)rf   zclaude-3-5-haiku-20241022z0.80z4.00z0.08)rf   zclaude-3-opus-20240229)rf   zclaude-3-haiku-20240307z0.03)deepseekzdeepseek-chatz0.14z0.28z0.0028z1https://api-docs.deepseek.com/quick_start/pricingzdeepseek-pricing-2026-07)rh   zdeepseek-reasoner)rh   deepseek-v4-proz0.435z0.87z0.003625)rh   deepseek-v4-flash)googlezgemini-2.5-prozhttps://ai.google.dev/pricingzgoogle-pricing-2026-03-16)rK   rL   rQ   rS   rT   )rk   zgemini-2.5-flash)rk   zgemini-2.0-flash)bedrockzanthropic.claude-opus-4-8z'https://aws.amazon.com/bedrock/pricing/zanthropic-list-2026-07)rl   zanthropic.claude-opus-4-7)rl   zanthropic.claude-opus-4-6)rl   zanthropic.claude-sonnet-5zbedrock-pricing-2026-06)rl   zanthropic.claude-sonnet-4-6zbedrock-pricing-2026-04)rl   zanthropic.claude-sonnet-4-5)rl   zanthropic.claude-haiku-4-5)rl   zamazon.nova-proz3.20)rl   zamazon.nova-litez0.06z0.24)rl   zamazon.nova-microz0.035)minimaxminimax-m2.7z1.20zminimax-pricing-2026-04)rK   rL   rQ   rT   )
minimax-cnrn   )	fireworksz	kimi-k2p6z0.95z0.16z,https://docs.fireworks.ai/serverless/pricingzfireworks-pricing-2026-07)rp   zkimi-k2p7-codez0.19)rp   zglm-5p2z1.40)rp   ri   z1.74z3.48z0.145z0.028z0.015z0.07z0.26z1.90z0.38z2.10z6.60z0.21z2.80z8.80z0.52))rp   rj   )rp   zqwen3p7-plus)rp   z
minimax-m3)rp   zgpt-oss-120b)rp   zgpt-oss-20b)rp   zglm-5p1)rp   zminimax-m2p7)rp   zkimi-k2p6-fast)rp   zkimi-k2p6-turbo)rp   zkimi-k2p7-code-fast)rp   zglm-5p2-fast)rp   zglm-5p1-fastz#Dict[tuple[str, str], PricingEntry]_OFFICIAL_DOCS_PRICING)rc   rd   re   rb   z-provaluer   r*   rJ   c                f    | d S 	 t          t          |                     S # t          $ r Y d S w xY wr,   )r   rB   	Exceptionrr   s    r/   _to_decimalrv   r  sG    }ts5zz"""   tts   " 
00r!   c                H    	 t          | pd          S # t          $ r Y dS w xY w)Nr   )r!   rt   ru   s    r/   _to_intrx   {  s9    5:A   qqs    
!!
model_namerB   rC   rR   rF   c                   |pd                                                                 }|pd                                                                 }| pd                                 }|s%d|v r!|                    dd          \  }}|dv r|}|}|dk    rt          d||pdd          S |dk    st	          |pdd	          rt          d||pdd
          S |dk    st	          |pdd          rt          d||pt
          d
          S |dk    r.t          d|                    d          d         |pdd          S |dv r.t          d|                    d          d         |pdd          S |dv r.t          ||                    d          d         |pdd          S |dk    st	          |pdd          r.t          d|                    d          d         |pdd          S |dk    st	          |pdd          r/t          d|                    dd          d         |pdd          S |dv s|rd|v rt          |pd||pdd          S t          |pd|r|                    d          d         nd|pdd          S )NrE   /r'   >   rk   rb   rf   zopenai-codexsubscription_included)rC   rD   rF   rG   
openrouterzopenrouter.aiofficial_models_apinouszinference-api.nousresearch.comrf   r   >   
openai-apirb   rb   >   rm   ro   vertexzaiplatform.googleapis.comgeminirp   zapi.fireworks.ai>   localcustom	localhostr   r   )striplowersplitrA   r   _NOUS_DEFAULT_BASE_URLrsplit)ry   rC   rF   provider_namebaserD   inferred_provider
bare_models           r/   resolve_billing_router     s   
 ^**,,2244MN!!##))++D2$$&&E SE\\(-C(;(;%: AAA-ME&&^58>WYh  A  A  A  	A$$(=hn"o(^(^$\UWf{||||"7BHh"i"iV58CeOe  uJ  K  K  K  	K##[C8H8H8LW_Wece  uM  N  N  N  	N
 000XU[[5E5Eb5IT\Tb`b  rJ  K  K  K  	K111]%++c:J:J2:NYaYgeg  wO  P  P  P  	P   $9(.bJe$f$f XU[[5E5Eb5IT\Tb`b  rJ  K  K  K  	K##'<X^M_'`'`# [S!8L8LR8P[c[igi  yQ  R  R  R  	R++++9L9L]%>heV^Vdbds|}}}}!;)[`Ch5;;sCSCSTVCWCWfhs{  tB  @B  QZ  [  [  [  [r1   rD   c                h   |                                                                  }dD ]0}|                    |          r|t          |          d         } n1t	          j        dd|          }t	          j        dd|          }t	          j        dd|          }t	          j        dd|          }|S )	u  Normalize a Bedrock model id to its bare foundation-model form.

    Bedrock cross-region inference profiles prefix the foundation model id
    with a region scope (``us.`` / ``global.`` / ``eu.`` / ``apac.`` / ``au.``
    / ...), e.g. ``us.anthropic.claude-opus-4-7`` or
    ``au.anthropic.claude-sonnet-4-5-20250929-v1:0``.  The pricing table is
    keyed on the bare ``anthropic.claude-*`` id, so the prefix must be
    stripped before the lookup or every cross-region session prices as
    unknown.  Note Asia-Pacific uses ``apac.`` (a bare ``ap.`` never matches
    an ``apac.*`` id) and Australia/New Zealand use ``au.``.  Also normalizes
    dot-notation version numbers (``4.7`` → ``4-7``) and the documented
    trailing date, revision, and profile components (``-20250514-v1:0``).
    )zglobal.zus.zeu.zapac.zap.zau.zjp.zca.zsa.zme.zaf.N(\d+)\.(\d+)\1-\2z:\d+$rE   z-v\d+$z-\d{8}$r   r   
startswithlenresub)rD   nameprefixs      r/   _normalize_bedrock_model_namer     s     ;;==  D   ??6"" 	F%DE	 6/8T22D 6(B%%D6)R&&D6*b$''DKr1   c                    |                                                                  }|                    d          r|t          d          d         }t	          j        dd|          }|S )u   Normalize Anthropic model name variants to canonical form.

    Handles:
      - Dot notation: claude-opus-4.7 → claude-opus-4-7
      - Short aliases: claude-opus-4.7 → claude-opus-4-7
      - Strips anthropic/ prefix if present
    z
anthropic/Nr   r   r   )rD   r   s     r/   _normalize_anthropic_model_namer     sc     ;;==  D|$$ (C%%&&' 6/8T22DKr1   routeOptional[PricingEntry]c                   | j                                         }t                              | j        |f          }|r|S | j        dk    r:t          |          }||k    r%t                              | j        |f          }|r|S | j        dk    r:t          |          }||k    r%t                              | j        |f          }|r|S d S )Nrf   rl   )rD   r   rq   getrC   r   r   )r   rD   entry
normalizeds       r/   _lookup_official_docs_pricingr     s    KE"&&'>??E ~$$4U;;
*..
/KLLE  ~""2599
*..
/KLLE 4r1   c                J    t          t                      | j        dd          S )Nz>https://openrouter.ai/docs/api/api-reference/models/get-modelszopenrouter-models-apirS   rT   )_pricing_entry_from_metadatar   rD   )r   s    r/   _openrouter_pricing_entryr      s-    'S/	   r1   metadataDict[str, Dict[str, Any]]model_idrS   rT   c                  || vrd S | |                              d          pi }t          |                     d                    }t          |                     d                    }t          |                     d                    }t          |                     d          p)|                     d          p|                     d                    }t          |                     d          p)|                     d	          p|                     d
                    }	|||d S dd}
t           |
|           |
|           |
|           |
|	          |d||t                      	  	        S )Npricingprompt
completionrequest
cache_readcached_promptinput_cache_readcache_writecache_creationinput_cache_writerr   rJ   r*   c                    | d S | t           z  S r,   )_ONE_MILLIONru   s    r/   _per_token_to_per_millionz?_pricing_entry_from_metadata.<locals>._per_token_to_per_million#  s    =4|##r1   r   )	rK   rL   rM   rN   rO   rQ   rS   rT   rV   )rr   rJ   r*   rJ   )r   rv   rI   _UTC_NOW)r   r   rS   rT   r   r   r   r   r   r   r   s              r/   r   r   	  s    xtx $$Y//52GX..//FW[[6677J'++i0011GL!! 	+;;''	+;;)** J
 M"" 	,;;'((	,;;*++ K
 ~*,t$ $ $ $
 88@@ 9 9* E E$=$=j$I$I%>%>{%K%K$'::
 
 
 
r1   api_keyc                   t          | ||          }|j        dk    r)t          t          t          t          t          dd          S |j        dk    rt          |          S |j        rMt          t          |j        |pd          |j	        |j        
                    d	           d
d          }|r|S t          |          S )NrC   rF   r|   r   included-route)rK   rL   rM   rN   rQ   rT   r}   rE   )r   r{   z/modelszopenai-compatible-models-apir   )r   rG   rI   _ZEROrC   r   rF   r   r   rD   rstripr   ry   rC   rF   r   r   r   s         r/   get_pricing_entryr   5  s     "*x(SSSE444#($)(-).,
 
 
 	
 ~%%(///~ ,)%.'-RPPPK.//44===:	
 
 
  	L(///r1   )rC   api_moderesponse_usager   c               .   | st                      S |pd                                                                }|pd                                                                }|dk    s|dk    rzt          t	          | dd                    }t          t	          | dd                    }t          t	          | dd                    }t          t	          | dd                    }n|d	k    rt          t	          | dd                    }	t          t	          | dd                    }t	          | d
d          }
t          |
rt	          |
dd          nd          }t          |
rt	          |
dd          nd          }t          d|	|z
  |z
            }nt          t	          | dd                    }t          t	          | dd                    }t	          | dd          }
t          |
rt	          |
dd          nd          }|st          t	          | dd                    }|st          t	          | dd                    }t          |
rt	          |
dd          nd          }|st          t	          | dd                    }t          d||z
  |z
            }d}t	          | dd          }|rt          t	          |dd                    }|s1t	          | dd          }|rt          t	          |dd                    }t          |||||          S )u  Normalize raw API response usage into canonical token buckets.

    Handles three API shapes:
    - Anthropic: input_tokens/output_tokens/cache_read_input_tokens/cache_creation_input_tokens
    - Codex Responses: input_tokens includes cache tokens; input_tokens_details.cached_tokens separates them
    - OpenAI Chat Completions: prompt_tokens includes cache tokens; prompt_tokens_details.cached_tokens separates them

    In both Codex and OpenAI modes, input_tokens is derived by subtracting cache
    tokens from the total — the API contract is that input/prompt totals include
    cached tokens and the details object breaks them out.
    rE   anthropic_messagesrf   r"   r   r#   cache_read_input_tokenscache_creation_input_tokenscodex_responsesinput_tokens_detailsNcached_tokenscache_creation_tokensr0   completion_tokensprompt_tokens_detailsprompt_cache_hit_tokensr%   output_tokens_detailsr&   completion_tokens_details)r"   r#   r$   r%   r&   )r    r   r   rx   getattrmax)r   rC   r   r   moder"   r#   r$   r%   input_totaldetailsprompt_totalr&   output_detailscompletion_detailss                  r/   normalize_usager   S  st   "   ^**,,2244MN!!##))++D###}'C'Cw~~qIIJJ K KLL#GN<UWX$Y$YZZ$W^=Z\]%^%^__	"	"	"gnnaHHII K KLL.*@$GG#G$ZGG_a$H$H$HYZ[[$<CJGG4a888
 
 1k,==@RRSSw~JJKK8KQ O OPP.*A4HH $G$ZGG_a$H$H$HYZ[[  	_ '@Y[\(](] ^ ^  	 !((A1EE! ! %9@GGG11555a
 
 " 	!((EqII" " 1l->>ASSTT ^-DdKKN S"7>;Mq#Q#QRR $^5PRVWW 	&*,>BB    !#+-)   r1   rC   rF   r   usagec                  t          | ||          }|j        dk    rt          t          dddd          S t	          | |||          }|st          d ddd	
          S g }t          }|j        r|j        t          d d|j        d	
          S |j        r|j	        t          d d|j        d	
          S |j
        r |j        t          d d|j        d	d          S |j        r |j        t          d d|j        d	d          S |j        '|t          |j                  |j        z  t          z  z  }|j	        '|t          |j                  |j	        z  t          z  z  }|j        '|t          |j
                  |j        z  t          z  z  }|j        '|t          |j                  |j        z  t          z  z  }|j        &|j        r|t          |j                  |j        z  z  }d}	d|d}
|j        dk    r|t          k    rd}	d}
|j        dk    r|                    d           t          ||	|j        |
|j        |j        t-          |                    S )Nr   r|   r   r   r   )rY   r[   rQ   r\   rT   r   r   zn/a)rY   r[   rQ   r\   )z(cache-read pricing unavailable for route)rY   r[   rQ   r\   r]   )z)cache-write pricing unavailable for router   z~$.2fr}   zBOpenRouter cost is estimated from the models API until reconciled.)rY   r[   rQ   r\   rV   rT   r]   )r   rG   rX   r   r   r"   rK   rQ   r#   rL   r$   rM   r%   rN   r   r   rO   r(   rC   appendrV   rT   tuple)ry   r   rC   rF   r   r   r   r]   amountr[   r\   s              r/   estimate_usage_costr     s    "*x(SSSE444,
 
 
 	
 j8hX_```E YT)FRWXXXXEF _e:BT)ELX]^^^^ _u<DT)ELX]^^^^ ,4 |C     -5 |D    #/'%,--0LL|[[$0'%-..1NNQ]]](4'%122U5VVYeee)5'%233e6XX[ggg%%*=%'%-..1CCC$FE|v&E//~%%YZZZ|#-Ell   r1   boolc                n    t          | ||          }|j        dk    rdS t          | |||          }|duS )u   Check whether we have pricing data for this model+route.

    Uses direct lookup instead of routing through the full estimation
    pipeline — avoids creating dummy usage objects just to check status.
    r   r|   Tr   N)r   rG   r   r   s         r/   has_known_pricingr     sN     "*x(SSSE444tj8hX_```Er1   secondsfloatc                    | dk     r| ddS | dz  }|dk     r|ddS |dz  }|dk     r;t          |dz            }|rt          |           d| dnt          |           dS |dz  }|dd	S )
N<   .0fsm   zh h.1fd)r!   )r   minuteshoursremaining_mindayss        r/   format_duration_compactr     s    ||     lG||     bLErzzGbL))4AW#e**000000#e**GWGWGWW2:D>>>>r1   c                d   t          t          |                     }|dk     rt          t          |                     S | dk     rdnd}d}|D ]`\  }}||k    rU||z  }|dk     r|d}n|dk     r|d	}n|d
}d|v r(|                    d                              d          }| | | c S a| dS )N  r   -rE   ))i ʚ;B)i@B M)r   K
   r   d   r   r   .r   ,)absr!   rB   r   )rr   	abs_valuesignunits	thresholdsuffixscaledtexts           r/   format_token_count_compactr  "  s    CJJI53u::!))33DBE" + +	6	!!*F{{ #  d{{{{3''..s33*D*&***** " <<r1   )rr   r   r*   rJ   )rr   r   r*   r!   )NN)ry   rB   rC   rR   rF   rR   r*   rA   )rD   rB   r*   rB   )r   rA   r*   r   )
r   r   r   rB   rS   rB   rT   rB   r*   r   )NNN)
ry   rB   rC   rR   rF   rR   r   rR   r*   r   )r   r   rC   rR   r   rR   r*   r    )ry   rB   r   r    rC   rR   rF   rR   r   rR   r*   rX   )
ry   rB   rC   rR   rF   rR   r   rR   r*   r   )r   r   r*   rB   )rr   r!   r*   rB   )/
__future__r   r   dataclassesr   r   r   decimalr   typingr   r	   r
   r   agent.model_metadatar   r   utilsr   DEFAULT_PRICINGr   r   r   rZ   rP   r    rA   rI   rX   r   rq   r=   _base_56rv   rx   r   r   r   r   r   r   r   r   r   r   r   r  r?   r1   r/   <module>r     s   " " " " " " " 				 ! ! ! ! ! ! ' ' ' ' ' ' ' '       / / / / / / / / / / / / T T T T T T T T ' ' ' ' ' '3//wy!!D AB

 $"
 "
 "
 "
 "
 "
 "
 "
J $" " " " " " " " $	* 	* 	* 	* 	* 	* 	* 	* $                .-
}? |&wv ' 0 0$+GFOO%,WV__'E0  !}?2 |&wv ' 0 0$+GFOO%,WW%5%5'E0  9}?J |&wv '$+GFOO%,WV__'E0  Q}?j |&wv ' 0 0$+GFOO%,WV__'M3  q}?B |&ww// ' 0 0$+GFOO%,WW%5%5'I3  I}?d |&wv ' 0 0$+GFOO%,WV__'M9  k}?D |&wv ' 0 0$+GFOO%,WV__'M3  K}?\ |&wv ' 0 0$+GFOO%,WV__'M3  c}?v |&wv ' 0 0$+GFOO%,WV__'M3  }}?N |&wv ' 0 0$+GFOO%,WV__'M3  U}?f |&wv ' 0 0$+GFOO%,WV__'M3  m}?~ |&wv ' 0 0$+GFOO%,WV__'M3  E}?X |&wv ' 0 0$+GFOO%,WV__'M3  _}?p |&wv ' 0 0$+GFOO%,WV__'M3  w}?H |&wv '$+GFOO%,WV__'M3  O}?b |&ww// ' 0 0$+GFOO%,WW%5%5'M3  i}?z |&wv ' 0 0$+GFOO%,WV__'M3  A}? }?T |&wv ' 0 0$+GFOO'43  [}?j |&wv '$+GG$4$4'43  q}?@ |&wv '$+GFOO'43  G}?V |&wv '$+GFOO'43  ]}?l |&wv '$+GG$4$4'43  s}?B	 |&ww// ' 0 0$+GFOO'43  I	}?X	 |&wv '$+GFOO'43  _	}?p	 |&wv ' 0 0$+GFOO%,WV__'M3  w	}?H
 |&wv '$+GFOO%,WV__'M3  O
}?`
 |&ww// ' 0 0$+GFOO%,WW%5%5'M3  g
}?x
 |&wv '$+GFOO%,WV__'M3  
}?X |&wv '$+GH$5$5'F2  _}?n |&wv '$+GH$5$5'F2  u}?D |&ww// '$+GJ$7$7'F2  K}?Z |&wv '$+GH$5$5'F2  a}?r |&wv ' 0 0'23  y}?F |&wv ''23  M}? }? }?Z |&wv ''23  a}?B |&wv ' 0 0$+GFOO%,WV__'<0  I}?Z |&wv ' 0 0$+GFOO%,WV__'<0  a}?r |&wv ' 0 0$+GFOO%,WV__'<0  y}?J |&wv ' 0 0$+GFOO%,WV__'<1  Q}?b |&wv ' 0 0$+GFOO%,WV__'<1  i}?z |&wv ' 0 0$+GFOO%,WV__'<1  A}?R |&wv '$+GFOO%,WV__'<1  Y}?j |&wv ''<1  q}?~ |&wv ''<1  E}?R |&ww// ''<1  Y}?h |&wv ''1	  o}?z |&wv ''1	  A}?V |&wv '$+GFOO'A3  ]}?l |&wv '$+GFOO'A3  s}?B |&wv '$+GFOO'A3  I}?X |&wv '$+GG$4$4'A3  _}? }?t |&wv '$+GG$4$4'A3   |&wv '$+GFOO'A3   |&wv '$+GFOO'A3   |&wv '$+GG$4$4'A3   |&wv '$+GG$4$4'A3   |&wv '$+GFOO'A3   |&wv '$+GFOO'A3   |&wv '$+GFOO'A3   |&wv '$+GFOO'A3   |&wv '$+GFOO'A3   |&wv '$+GFOO'A3   |&wv '$+GFOO'A3  k}? }? }?  } } } }D A  H<R	8=H&7&7&7899        #")[ )[ )[ )[ )[X& & & &R   "   0   ) ) ) )\ #"!	0 0 0 0 0B #"	\ \ \ \ \ \F #"!L L L L L Lb #"!	    &        r1   