
    |j4              	         % S r SSKJr  SSKJr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
rSrS
S\" S5      \" S5      \" S5      SSS.SS\" S5      \" S5      \" S5      SSS./rS\S'   S S jrS!S jr " S S5      rg)"uG   Catálogo de modelos LLM para Agentes (modelo activo global en la web).    )annotations)datetimetimezone)Decimal)Any)Session)
AgentModel)AgentsAppSettingModel)AgentsOpenAIModelzdeepseek-v4-prozDeepSeek-V4-Proz0.435000z0.870000z0.003625
   T)
model_codedisplay_nameinput_per_1m_usdoutput_per_1m_usdcached_input_per_1m_usd
sort_orderis_selectedzdeepseek-v4-flashzDeepSeek-V4-Flashz0.140000z0.280000z0.002800   Fzlist[dict[str, Any]]_SEED_MODELSc                 d    [         R                  " [        R                  5      R	                  S S9$ )N)tzinfo)r   nowr   utcreplace     ]C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\agents_llm_models_class.py_nowr   )   s#    <<%--T-::r   c                j   U R                   U R                  U R                  [        U R                  =(       d    S5      [        U R
                  =(       d    S5      U R                  b  [        U R                  5      OS U R                  [        U R                  5      [        U R                  5      S.	$ )Nr   )	idr   r   r   r   r   r   r   	is_active)r    r   r   floatr   r   r   r   boolr   r!   )rows    r   _serialize_modelr%   -   s    ffnn((!#"6"6";!<"3#8#8#=A>252M2M2YE#--._cnnCOO,#--( r   c            
          \ 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 jr	SS jr
S	S
.SS jjrS	S	S	SS	SS	S	SS.	                   SS jjrSrg	)AgentsLlmModelsClass=   c                    Xl         g )Ndb)selfr+   s     r   __init__AgentsLlmModelsClass.__init__>   s    r   c                   [        5       nU R                  R                  [        5      R	                  5        Vs0 s H  o"R
                  U_M     nn[         Vs1 s H  oDS   iM	     nn[         H  nUR                  US   5      nUcK  U R                  R                  [        US   US   US   US   US   US   [        US   5      SUUS	9
5        Me  US   Ul
        US   Ul        US   Ul        US   Ul        US   Ul        SUl        Xl        M     U R                  R#                  5         U R                  R                  [        5      R	                  5        H)  nUR
                  U;  d  M  S
Ul        S
Ul        Xl        M+     U R                  R                  [        5      R'                  [        R$                  R)                  S5      [        R                  R)                  S5      5      R+                  5       nU(       d  U R                  R                  [        5      R'                  [        R
                  [,        :H  5      R+                  5       nU R                  R                  [        5      R	                  5        HL  nUS L=(       a    UR.                  UR.                  :H  n	Xl        U	(       a  SUl        [0        Ul
        Xl        MN     U R3                  5         U R                  R5                  5         g s  snf s  snf )Nr   r   r   r   r   r   r   T
r   r   r   r   r   r   r   r!   
created_at
updated_atF)r   r+   queryr   allr   r   getaddr#   r   r   r   r   r   r!   r2   flushr   filteris_first_DEFAULT_MODEL_CODEr    _DEFAULT_MODEL_NAME_ensure_app_settings_rowcommit)
r,   r   mexistingspec
seed_codesr$   selecteddefault_row
is_defaults
             r   ensure_seeded"AgentsLlmModelsClass.ensure_seededA   s   f-1WW]];L-M-Q-Q-ST-SLL!O-ST5AB\T<(\
B D,,tL12C{%#'#5%).%9)-.@)A*./B*C045N0O#'#5$(m)<$="&#&#& $(#7 '+,>'?$(,-@(A%.23L.M+!%l!3 $!$1 !4 	 01557A||:-# %"	 8 GGMM+,V!--11$7!++//5 UW 	 /0)448KKL 
 WW]]#4599;(4O9O
 *"&AK%8AN" < 	%%'{ UBs   LLc                   U R                  5         [        5       nU R                  R                  [        5      R                  [        R                  [        :H  5      R                  5       nU(       d  gU R                  R                  [        5      R                  5        HH  nUR                  UR                  :H  Ul        UR                  UR                  :X  a  SUl        Xl        MJ     U R                  R                  5         g)uA   Usado por la migración: deja DeepSeek-V4-Pro como modelo global.NT)rF   r   r+   r3   r   r8   r   r;   r:   r4   r    r   r!   r2   r>   )r,   r   rD   r?   s       r   force_select_default_model/AgentsLlmModelsClass.force_select_default_model   s    fGGMM+,V%004GGHUW 	
 01557ADDKNN2AMtt{~~%"L	 8
 	r   c                J   U R                   R                  [        5      R                  [        R                  S:H  5      R                  5       nU(       a  U$ [        5       n[        SS S UUS9nU R                   R                  U5        U R                   R                  5         U$ )N   )r    default_agent_idllm_api_keyr1   r2   )	r+   r3   r
   r8   r    r:   r   r6   r7   )r,   r$   r   s      r   r=   -AgentsLlmModelsClass._ensure_app_settings_row   s    ggmm1299:O:R:RVW:WX^^`Jf#!
 	C
r   c                "    U R                  5       $ )zRLegado: ya no se usa el trigger Workspace; reutiliza la API key LLM si hace falta.)get_llm_api_key)r,   s    r   get_workspace_access_token/AgentsLlmModelsClass.get_workspace_access_token   s    ##%%r   c                    U R                  5       nUR                  =(       d    SR                  5       nU(       a  U$ SSKJn  UR
                  =(       d    SR                  5       $ )zIAPI key DeepSeek: primero BD (Configuraciones), luego AGENTS_LLM_API_KEY. r   settings)r=   rN   stripapp.backend.core.configrW   agents_llm_api_key)r,   appkeyrW   s       r   rQ   $AgentsLlmModelsClass.get_llm_api_key   sL    ++-$"++-J4++1r88::r   c                   U R                  5         U R                  R                  [        5      R	                  [        R
                  R                  S5      [        R                  R                  S5      5      R                  5       nU(       aB  UR                  =(       d    SR                  5       (       a  UR                  R                  5       $ [        $ )NTrU   )rF   r+   r3   r   r8   r   r9   r!   r:   r   rX   r;   )r,   r$   s     r   get_selected_model_code,AgentsLlmModelsClass.get_selected_model_code   s    GGMM+,V!--11$7!++//5 UW 	 CNN(b//11>>''))""r   N)customer_idc                  U R                  5         SSKJn  U R                  R	                  [
        5      R                  [
        R                  R                  S5      5      R                  [
        R                  R                  5       [
        R                  R                  5       5      R                  5       nU R                  5       nU R                  R	                  [        5      nUb"  UR                  [        R                   U:H  5      nUR                  [        R"                  R                  5       5      R                  5       nUR$                  =(       d    SR'                  5       nUR(                  =(       d    SR+                  S5      nUR,                  =(       d    SR'                  5       n	U(       a  U	(       a  U SU	 S3OSn
[/        USS 5      =(       d    SR'                  5       nSSKJn  U" 5       n[5        U5      =(       d    [5        U5      nS nU(       aQ   SS Kn[9        UR;                  U5      R=                  S	5      =(       d    S5      R'                  5       nU=(       d    S
nO7U(       a0  UR=                  S	5      (       a  [9        UR=                  S	5      5      n[/        USS 5      =(       d    SR'                  5       =(       d    S nU RA                  5       nUURB                  [5        U5      =(       d,    [5        URD                  =(       d    SR'                  5       5      [G        U5      S:  a  SUSS   3OS U=(       d    S U	=(       d    S U
=(       d    S SURH                  =(       d    SR+                  S5      UUUU=(       d    S U Vs/ s H  n[K        U5      PM     snU Vs/ s H'  nUR                  UR"                  UR                   S.PM)     snS.$ ! [>         a    S
n GNNf = fs  snf s  snf )Nr   rV   TrU   /z/triggergoogle_service_account_json)#_service_account_info_from_env_fileclient_emailzCredenciales en BDgoogle_drive_root_folder_id   z****deepseekzhttps://api.deepseek.com)r    namera   )selected_model_coderM   has_llm_api_keyllm_api_key_hintllm_api_key_valueworkspace_agent_idworkspace_trigger_urlproviderllm_api_baserg   has_google_drive_credentialsgoogle_drive_credentials_hint!google_service_account_json_valuemodelsagents)&rF   rY   rW   r+   r3   r   r8   r!   r9   order_byr   ascr    r4   r=   r	   ra   rk   rN   rX   workspace_agent_api_baserstriprp   getattr%app.backend.utils.school_drive_configre   r#   jsonstrloadsr5   	Exceptionr_   rM   rZ   lenagents_llm_api_baser%   )r,   ra   rW   rw   r[   agents_qrx   
stored_keybaseagent_idtrigger_urlsa_rawre   env_sacreds_ok
creds_hintr   emailroot_idrC   r?   as                         r   get_settings!AgentsLlmModelsClass.get_settings   s,   4 GGMM+,V%//33D9:X'22668:K:N:N:R:R:TUSU	 	 ++-77==,"z'='='LMH"":??#6#6#89==?oo+224
117R??D//52<<>6:xaz2R#<dCIrPPR]46</4<
2DJJv.22>BHbIOOQ":&:
 

>22VZZ78J3 =tDJQQS[W[//1#+ # 4 4#J/d49T9T9ZXZ8a8a8c3d=@_PQ=Q4
23'8!9W[!+!3t"*"2d%0%8D"%99W=W__`cd+2,4-71744:;Fq'*F;    A	 $$FF#$==
  
 	
  21
2( <s   !AO' O:4.O? 'O76O7F)	rl   selected_model_namerM   clear_default_agentrN   clear_llm_api_keyrg   rd   clear_google_drivec       	        `   U R                  5         [        5       n
UGbW  UR                  5       nU(       d  SSS.$ U=(       d    SR                  5       =(       d    UnU R                  R	                  [
        5      R                  [
        R                  U:H  5      R                  5       nU(       dZ  [        UU[        S5      [        S5      S SSSU
U
S9
nU R                  R                  U5        U R                  R                  5         OXl        SUl        Xl        U R                  R	                  [
        5      R                  5        H'  nUR                   UR                   :H  Ul        Xl        M)     U R%                  5       nU(       a  S Ul        Xl        OUb  UR                  5       nU(       d  S Ul        OcU R                  R	                  [(        5      R                  [(        R                   U:H  5      R                  5       nU(       d  SS	U 3S.$ UUl        Xl        U(       a  S Ul        Xl        O'Ub$  UR                  5       nU(       a  UUl        Xl        U	(       a  S Ul        S Ul        Xl        O_Ub&  UR                  5       nU=(       d    S Ul        Xl        Ub3  UR                  5       nU(       a   SS
KJn  U" U5        UUl        Xl        U R                  R9                  5         SSU R;                  5       S.$ ! [4         a  nS[7        U5      S.s S nA$ S nAff = f)Nerroru   Indica el código del modelo.)statusmessagerU   0r   Tr0   zAgente no encontrado: )_parse_service_account_jsonsuccessu#   Configuración de Agentes guardada.)r   r   data)rF   r   rX   r+   r3   r   r8   r   r:   r   r6   r7   r   r!   r2   r4   r    r   r=   rM   r	   rN   rg   rd   r~   r   
ValueErrorr   r>   r   )r,   rl   r   rM   r   rN   r   rg   rd   r   r   coderk   targetr?   r[   aidagentr\   rootrawr   excs                          r   update_settings$AgentsLlmModelsClass.update_settings   s    	f*&,,.D")6UVV'-2446>$D/0)44<= 
 *#!%%,S\&-cl,0  $""" F#&*##' $'!WW]]#4599; !		 1" < ++-#'C  N)"((*C'+$j188#9MNTTV&-<RSVRW:XYY'*$ N"CO N$##%C"%!$.2C+.2C+ N*6288:26,$/!$*61779He3C8 7:C3%(N<%%'
 	
 & H*1c#hGGHs   L 
L-L("L-(L-r*   )r+   r   returnNone)r   r   )r   r
   )r   r   )ra   z
int | Noner   dict[str, Any])rl   
str | Noner   r   rM   r   r   r#   rN   r   r   r#   rg   r   rd   r   r   r#   r   r   )__name__
__module____qualname____firstlineno__r-   rF   rI   r=   rR   rQ   r_   r   r   __static_attributes__r   r   r   r'   r'   =   s    ?B$ &;# 9= <
B +/*.'+$)"&"'2626#(d
 (d
 (	d

 %d
 "d
  d
  d
 &0d
 &0d
 !d
 
d
 d
r   r'   N)r   r   )r$   r   r   r   )__doc__
__future__r   r   r   decimalr   typingr   sqlalchemy.ormr   app.backend.db.models.agentr	   )app.backend.db.models.agents_app_settingsr
   *app.backend.db.models.agents_openai_modelsr   r;   r<   r   __annotations__r   r%   r'   r   r   r   <module>r      s    M " '   " 2 K H ( '  ()#J/$Z0#*:#6 *+#J/$Z0#*:#6&" ,; e
 e
r   