
    `gj                        d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ  ed      Z ed      Zd	Zd
Z ed       G d d             ZddZddZ	 	 	 	 ddZddddd	 	 	 	 	 	 	 	 	 	 	 ddZy)zBExpensive-model confirmation helpers for model selection surfaces.    )annotations)	dataclass)DecimalInvalidOperation)Optional)	ModelInfo20100zopenai/gpt-5.5-proz&did you mean to select openai/gpt-5.5?T)frozenc                  N    e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded	<   y
)ExpensiveModelWarningz=Confirmation payload for models above Hermes' cost guardrail.strmodelproviderOptional[Decimal]input_cost_per_millionoutput_cost_per_millionsourcemessageN)__name__
__module____qualname____doc____annotations__     N/root/.hermes/venv/lib/python3.12/site-packages/hermes_cli/model_cost_guard.pyr   r      s%    GJM--..KLr   r   c                \    | y 	 t        t        |             S # t        t        f$ r Y y w xY w)N)r   r   r   
ValueErrorvalues    r   _to_decimalr"      s5    }s5z""j) s    ++c                    | yd| ddS )Nunknown$z.2fz/Mr   r    s    r   _format_moneyr&   '   s    }uSkr   c                ~    | | j                         syt        | j                        t        | j                        dfS )N)NN z
models.dev)has_cost_datar"   
cost_inputcost_output)
model_infos    r   _pricing_from_model_infor-   -   sA     !9!9!;J))*J**+ r   N)r   base_urlapi_keyr,   c          
        | xs dj                         }|syt        |      \  }}}|!||r	 ddlm}	 t         |	||            \  }}}|;|9	 ddlm}
  |
||||      }|$|j                  }|j                  }|j                  }|duxr	 |t        kD  }|duxr	 |t        kD  }|s|sydd| dd	t        |       d
t        |       dg}|r|j                  d| d       |j                         t        k(  r|j                  t                |j                  d       t#        ||xs dj                         |||xs ddj%                  |            S # t        $ r Y w xY w# t        $ r d}Y w xY w)zReturn a warning payload when known pricing exceeds safety thresholds.

    The guard only triggers when pricing is known. Callers should use this after
    model resolution so aliases and provider-specific model IDs have settled.
    r(   Nr   )get_model_info)get_pricing_entry)r   r.   r/   z!!! EXPENSIVE MODEL WARNING !!!z2 has known pricing above Hermes' safety threshold.zInput tokens: zOutput tokens: zJThreshold: more than $20/M input tokens or more than $100/M output tokens.zPricing source: .z-Confirm only if you intend to use this model.r$   
)r   r   r   r   r   r   )stripr-   agent.models_devr1   	Exceptionagent.usage_pricingr2   r   r   r   INPUT_COST_WARNING_THRESHOLDOUTPUT_COST_WARNING_THRESHOLDr&   appendlowerGPT55_PRO_OPENROUTER_IDGPT55_SUGGESTIONr   join)
model_namer   r.   r/   r,   r   
input_costoutput_costr   r1   r2   entry
over_inputover_outputliness                  r   expensive_model_warningrG   9   s    2$$&E&>z&J#JVk1h	7.Fx//+JV
 k1
	=%!!	E 55J77K\\F 	$L:0L#L  	4OK2O$O  k 	*
'CD
z234
-456$
E 'xq12{{}//%&	LL@A .b'')) +"		%  [  		  	E	s#   E E' 	E$#E$'E65E6)r!   objectreturnr   )r!   r   rI   r   )r,   Optional[ModelInfo]rI   z0tuple[Optional[Decimal], Optional[Decimal], str])r@   r   r   Optional[str]r.   rK   r/   rK   r,   rJ   rI   zOptional[ExpensiveModelWarning])r   
__future__r   dataclassesr   decimalr   r   typingr   r6   r   r9   r:   r=   r>   r   r"   r&   r-   rG   r   r   r   <module>rP      s    H " ! -  &  't}  ' . ;  $  	#	5	 #"!&*MM M 	M
 M $M %Mr   