
    |j0                         S SK J r   S SKJrJrJrJrJrJrJr  S SK	J
r
   " S S\
5      r " S S\
5      r " S S	\
5      r " S
 S\
5      r " S S\
5      r " S S\
5      rg)    )datetime)ColumnDateTimeIntegerNumericStringTextUniqueConstraint)Basec                   b   \ rS rSrSrSr\" \SSS9r\" \SSS9r	\" \SSS9r
\" \SS9r\" \" S	5      SS9r\" \" S
5      SSS9r\" \" S	5      SS9r\" \SSS9r\" \SSS9r\" \SSS9r\" \SSS9r\" \SSS9r\" \" SS5      SSS9r\" \SS9r\" \SS9r\" \" 5       S\R8                  S9rSrg)AgentsTokenUsageModel   z1Consumo de tokens LLM por consulta (por cliente).agents_token_usageTprimary_keyautoincrementFnullableindexr   @       chatr   defaultr          N)__name__
__module____qualname____firstlineno____doc____tablename__r   r   idcustomer_id	school_iduser_idr   agent_idrequest_kindmodelprompt_tokensprompt_cache_hit_tokensprompt_cache_miss_tokenscompletion_tokenstotal_tokensr   estimated_cost_usdr	   
input_textoutput_textr   r   utcnow
created_at__static_attributes__r       TC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\db\models\agents_usage.pyr   r      s    ;(M	T	>B5=KwT:IWt,GfRj40H&*ufEL6":.E7UA>M$WuaH%gqIwB'E1=LAJt,J-K
UHOOLJr7   r   c                       \ rS rSrSrSr\" SSS94r\" \	SSS9r
\" \	S	SS
9r\" \" SS5      S	SS9r\" \" SS5      S	SS9r\" \" 5       S	\R"                  \R"                  S9r\" \" 5       S	\R"                  S9rSrg)AgentsCustomerBudgetModel   uI   Tope de gasto mensual estimado por cliente (+ margen % por imprecisión).agents_customer_budgetsr&   &uq_agents_customer_budgets_customer_idnameTr   Fr   r      r   r         
   )r   r   onupdater   N)r   r    r!   r"   r#   r$   r
   __table_args__r   r   r%   r&   r   monthly_budget_usdbuffer_percentr   r   r4   
updated_atr5   r6   r   r7   r8   r:   r:      s    S-M-UVN 
T	>B5=KAJGAqME2FN
UHOOV^VeVefJ
UHOOLJr7   r:   c                       \ rS rSrSrSr\" \SSS9r\" \SSS9r	\" \
" S5      SSS	9r\" \" S
S5      SSS9r\" \" 5       S\R                   S9r\" \" 5       SSS9rSrg)AgentsBudgetReservationModel/   zQHold estimado mientras un chat/extract corre (uso paralelo sin pasarse del tope).agents_budget_reservationsTr   Fr   r   )r   uniquer   r   r   r   r   N)r   r    r!   r"   r#   r$   r   r   r%   r&   r   reservation_keyr   
amount_usdr   r   r4   r5   
expires_atr6   r   r7   r8   rJ   rJ   /   sp    [0M	T	>B5=KVBZ%EOABJ
UHOOLJ
U$?Jr7   rJ   c                       \ rS rSrSrSr\" \SSS9r\" \SSS9r	\" \SSS9r
\" \SSS9r\" \" 5       S\R                  SS9rS	rg
)AgentsRateLimitHitModel<   zJIntentos de chat para rate limit por minuto (usuario / cliente / colegio).agents_rate_limit_hitsTr   r   Fr   r   r   r   N)r   r    r!   r"   r#   r$   r   r   r%   r(   r&   r'   r   r   r4   r5   r6   r   r7   r8   rR   rR   <   sY    T,M	T	>BWt48G4t<KwT:I
UHOOSWXJr7   rR   c                   R   \ rS rSrSrSr\" \SSS9r\" \	" 5       S\
R                  SS9r\" \	" 5       SSS9r\" \" S	S
5      SSS9r\" \" S	S
5      SSS9r\" \" S	S
5      SSS9r\" \" S	S
5      SSS9r\" \" S5      SSS9r\" \" S5      SS9r\" \	" 5       S\
R                  S9rSrg)AgentsOpenAICostSyncModelH   uB   Últimos syncs de reconciliación OpenAI Costs vs estimado PIE360.agents_openai_cost_syncsTr   FrU   r   r   r   r   r   r   oki   r   r   N)r   r    r!   r"   r#   r$   r   r   r%   r   r   r4   	synced_atmonth_startr   openai_cost_usdpie_cost_usd	delta_usdadjustment_usdr   statusmessager5   r6   r   r7   r8   rW   rW   H   s    L.M	T	>BxzE8??RVWIe4@KWR^eQGO'"a.5!DLwr1~qAIGBNUAFNF2J=FVC[40G
UHOOLJr7   rW   c                   ^   \ rS rSrSrSr\" SSSSSS	94r\" \	S
S
S9r
\" \	SS
S9r\" \	SS
S9r\" \" 5       SS9r\" \	SS9r\" \" SS5      SSS9r\" \" SS5      SSS9r\" \" S5      SS9r\" \" S5      SS9r\" \	SSS9r\" \	SSS9r\" \" 5       S\R2                  S9r\" \" 5       S
S9rSrg)AgentsBudgetAlertModelY   zJAlertas 50/80/100% del tope mensual de Agents (admin / coord / evaluador).agents_budget_alertsr&   r(   r\   threshold_percent,uq_agents_budget_alerts_user_month_thresholdr>   Tr   Fr   r   r   r   r   r   r@      i   r   N)r   r    r!   r"   r#   r$   r
   rE   r   r   r%   r&   r(   r   r\   rg   r   	spent_usd
budget_usdr   titlerb   	status_id
email_sentr   r4   r5   reviewed_atr6   r   r7   r8   rd   rd   Y   s    T*M?	
N 
T	>B5=KWuD9Ge4Kw7wr1~qAIABJ6#;/EVD\E2Gw:I%;J
UHOOLJd3Kr7   rd   N)r   
sqlalchemyr   r   r   r   r   r	   r
   app.backend.db.databaser   r   r:   rJ   rR   rW   rd   r   r7   r8   <module>rr      sf     Y Y Y (MD M.M M 
@4 
@	Yd 	YM M"4T 4r7   