
     Sj"                    6   % S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  S	S
SSSSS.SSSSSSS.SSSSSSS.SSSSSSS.SSSSS S!S.S"S#S$S%S&S'S.S(S)SS*S+S,S-S..S/S0S*S1SS2S.S3S3S*S1SS4S.S5S6S7S8S9S:S./
rS;\S<'   SBS= jrSCS> jr " S? S@5      rgA)DuK   Catálogo de modelos OpenAI para agentes: listado, precios y modelo activo.    )annotations)datetime)Decimal)Any)Session)settings)AgentsOpenAIModelzgpt-5.6-solzGPT-5.6 Solg      @g      >@g      ?   )
model_codedisplay_nameinput_per_1m_usdoutput_per_1m_usdcached_input_per_1m_usd
sort_orderzgpt-5.6-terrazGPT-5.6 Terrag      @g      .@g      ?   zgpt-5.5zGPT-5.5   zgpt-5.4zGPT-5.4   zgpt-5.2zGPT-5.2g      ?g      ,@gffffff?   zgpt-5zGPT-5g      ?g      $@g      ?   
gpt-5-miniz
GPT-5 Minig       @g?   T)r   r   r   r   r   r   is_selectedzgpt-4.1zGPT-4.1g       @   o3	   zgpt-4o-minizGPT-4o Minig333333?g333333?g333333?
   zlist[dict[str, Any]]SEED_MODELSc                D    [        [        U b
  U 5      5      $ S5      5      $ )Nr   )r   str)values    `C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\agents_openai_models_class.py_decr"   d   s"    3 1u9::q9::    c                x   U R                   nU R                  U R                  U R                  [	        U R
                  =(       d    S5      [	        U R                  =(       d    S5      Ub  [	        U5      OS [        U R                  =(       d    S5      [        U R                  5      [        U R                  5      U R                   S[	        U R
                  =(       d    S5      S S[	        U R                  =(       d    S5      S S3U R                  (       a  U R                  R                  S5      S.$ S S.$ )Nr   u    — $z.2fz / $z por 1M tokensz%Y-%m-%d %H:%M:%S)idr   r   r   r   r   r   r   	is_activelabel
updated_at)r   r%   r   r   floatr   r   intr   boolr   r&   r(   strftime)rowcacheds     r!   
_serializer/   h   s   ((Fffnn((!#"6"6";!<"3#8#8#=A>4:4F5=D#..-A.COO,#--(  !c**/a05 6c++0q1#6nF GJnncnn--.AB  [_ r#   c                  d    \ rS rSrSS jrSS jrSS jrSS jrSS jrSSS.     SS	 jjr	S
r
g)AgentsOpenAIModelsClass}   c                    Xl         g Ndb)selfr6   s     r!   __init__ AgentsOpenAIModelsClass.__init__~   s    r#   c                    U R                   R                  [        5      R                  5       nUS:  a  g [        R
                  " 5       n[         H  nU R                   R                  [        US   US   [        US   5      [        US   5      UR                  S5      b  [        US   5      OS [        US   5      [        UR                  SS	5      5      S
UUS9
5        M     U R                   R                  5         g )Nr   r   r   r   r   r   r   r   FT)
r   r   r   r   r   r   r   r&   
created_atr(   )r6   queryr	   countr   utcnowr   addr"   getr*   r+   commit)r7   r=   nowitems       r!   ensure_seeded%AgentsOpenAIModelsClass.ensure_seeded   s    /066819ooDGGKK!#L1!%n!5%)$/A*B%C&*40C+D&E  88$=>J T";<=!"4#56 $TXXmU%C D"""  & 	r#   c                   U R                  5         U R                  R                  [        5      R	                  [        R
                  R                  5       [        R                  R                  5       5      R                  5       n[        S U 5       S 5      nUcM  U(       aF  SUS   l
        [        R                  " 5       US   l        U R                  R                  5         US   nU(       a  UR                  OS U(       a  UR                  O[         R"                  =(       d    SU Vs/ s H  n[%        U5      PM     snS.$ s  snf )Nc              3  J   #    U  H  oR                   (       d  M  Uv   M     g 7fr4   )r   ).0rs     r!   	<genexpr>6AgentsOpenAIModelsClass.list_models.<locals>.<genexpr>   s     :DqMMDs   #	#Tr   r   )selected_model_idselected_model_codemodels)rD   r6   r<   r	   order_byr   ascr%   allnextr   r   r>   r(   rA   r   r   agents_modelr/   )r7   rowsselectedrI   s       r!   list_models#AgentsOpenAIModelsClass.list_models   s    GGMM+,X'22668:K:N:N:R:R:TUSU 	
 :D:DA"&DG!)!2DGGGNNAwH08d:B8#6#6I^I^Inbn.23dz!}d3
 	
 4s   ,Ec                H   U R                  5         U R                  R                  [        5      R	                  [        R
                  R                  S5      [        R                  R                  S5      5      R                  [        R                  R                  5       5      R                  5       nU(       aC  UR                  =(       d    SR                  5       =(       d    [        R                  =(       d    S$ [        R                  =(       d    SR                  5       $ )NT r   )rD   r6   r<   r	   filterr   is_r&   rO   r   rP   firstr   stripr   rS   )r7   r-   s     r!   get_selected_model_code/AgentsOpenAIModelsClass.get_selected_model_code   s    GGMM+,V%1155d;=N=X=X=\=\]a=bcX'226689UW	 	 NN(b//1\h6K6K6[|\%%5<<>>r#   c                  ^ U R                  5         U=(       d    SR                  5       R                  5       mT(       d  g U R                  R	                  [
        5      R                  [
        R                  T:H  5      R                  5       nU(       dC  U R                  R	                  [
        5      R                  5       n[        U4S jU 5       S 5      nU(       d  g [        U5      $ )NrY   c              3  x   >#    U  H/  oR                   =(       d    S R                  5       T:X  d  M+  Uv   M1     g7f)rY   N)r   lower)rH   rI   keys     r!   rJ   >AgentsOpenAIModelsClass.get_pricing_by_code.<locals>.<genexpr>   s*     O4aLL,>B+E+E+G3+N4s   *:	:)rD   r]   rb   r6   r<   r	   rZ   r   r\   rQ   rR   r/   )r7   r   r-   rT   rc   s       @r!   get_pricing_by_code+AgentsOpenAIModelsClass.get_pricing_by_code   s    R&&(..0GGMM+,V%00C78UW 	
 77==!23779DO4OQUVC#r#   N)rL   rN   c                  U R                  5         [        R                  " 5       nU(       Ga:  U GH3  nUR                  S5      nUc  M  U R                  R                  [        5      R                  [        R                  [        U5      :H  5      R                  5       nU(       d  My  SU;   a  US   b  [        US   5      Ul        SU;   a  US   b  [        US   5      Ul        SU;   a   US   nUb  US:w  a  [        U5      OS Ul        SU;   a+  US   (       a!  [        US   5      R!                  5       Ul        SU;   a  US   b  [%        US   5      Ul        X6l        GM6     Ub  U R                  R                  [        5      R                  [        R                  [        U5      :H  5      R                  5       nU(       d  SS	S
.$ U R                  R                  [        5      R+                  5        H'  nUR                  UR                  :H  Ul        X6l        M)     U R                  R/                  5         SSU R1                  5       S.$ )Nr%   r   r   r   rY   r   r&   errorz!Modelo seleccionado no encontrado)statusmessagesuccessu"   Configuración de modelos guardada)ri   rj   data)rD   r   r>   r@   r6   r<   r	   rZ   r%   r*   r\   r"   r   r   r   r   r]   r   r+   r&   r(   rQ   r   rA   rV   )	r7   rL   rN   rB   rC   midr-   r.   targets	            r!   save_config#AgentsOpenAIModelsClass.save_config   s     	oohhtn;ggmm$56==>O>R>RVYZ]V^>^_eeg%-$7I2J2V+/5G0H+IC(&$.48K3L3X,06I1J,KC),4!";<FBHBTY_ceYe$v,koC/!T)d>.B'*4+?'@'F'F'HC$$&4+<+H$(k):$;CM!$% ( (/0),,4E0FFG 
 ")6YZZww}}%67;;="%&&FII"5!$ > 	#0T^b^n^n^pqqr#   r5   )r6   r   )returnNone)rq   dict[str, Any])rq   r   )r   z
str | Nonerq   zdict[str, Any] | None)rL   z
int | NonerN   zlist[dict[str, Any]] | Nonerq   rs   )__name__
__module____qualname____firstlineno__r8   rD   rV   r^   re   ro   __static_attributes__ r#   r!   r1   r1   }   sP    4
&
?* )-.2	+r &+r ,	+r
 
+r +rr#   r1   N)r    r   rq   r   )r-   r	   rq   rs   )__doc__
__future__r   r   decimalr   typingr   sqlalchemy.ormr   app.backend.core.configr   *app.backend.db.models.agents_openai_modelsr	   r   __annotations__r"   r/   r1   ry   r#   r!   <module>r      sE   Q "    " , H
 $%!#& &'!#'  !!#&  !!#'  ! !#(  !#( #$  #(  ! #&  #& $%  #(UR%! Rj;*zr zrr#   