
    H{j!                        S r SSKJr  SSKJrJr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S
KJr  SS jrSS jrSSS.             SS jjrSSS jjr " S S5      rg)z.Consumo de tokens LLM por consulta de agentes.    )annotations)datedatetimetimetimezone)Decimal)Any)func)Session)AgentsOpenAIModel)AgentsTokenUsageModel)CustomerModelc                 d    [         R                  " [        R                  5      R	                  S S9$ )N)tzinfo)r   nowr   utcreplace     XC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\agents_usage_class.py_nowr      s#    <<%--T-::r   c                    [         R                  " U [        R                  5      n[         R                  " U [        R                  5      nX4$ N)r   combiner   minmax)daystartends      r   _day_boundsr       s6    S$((+E


3
)C:r   )prompt_cache_hit_tokensprompt_cache_miss_tokensc                   UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       a  [        [        UR                  5      5      O
[        S5      nU(       a  [        [        UR                  5      5      O
[        S5      nU(       a+  UR                  b  [        [        UR                  5      5      OS n	[        S[        U=(       d    S5      5      n
[        S[        U=(       d    S5      5      n[        S[        U=(       d    S5      5      nX-   S::  a	  US:  a  UnO$X-   S:  a  X-   U:w  a  US:  a  [        SX-
  5      nU	bB  U
S:  d  US:  a6  [        U
5      [        S5      -  U	-  [        U5      [        S5      -  U-  -   nO[        U5      [        S5      -  U-  nU[        U5      [        S5      -  U-  -   nUR                  [        S5      5      $ )Nz0.435z0.870r   i@B z0.000001)queryr   filter
model_codefirstr   strinput_per_1m_usdoutput_per_1m_usdcached_input_per_1m_usdr   intquantize)r&   prompt_tokenscompletion_tokensdbr!   r"   rowin_price	out_pricecached_pricehitmissprompt
input_costcosts                  r   _estimate_cost_usdr:      s    	"#	!,,
:	;	  69ws3//01gg>NH7:C1123@PI 3..: 	C//01  a,12
3Cq#.3!45DC*+,F
zQ6A:	aCJ&0VaZ1fl#S1WqclWY%77<GDMGI..K 
 fo	(::hF
!23gi6HHIUUD==,--r   c                r    U c  g U R                  5       nU(       d  g [        U5      U::  a  U$ US US-
   S-   $ )N   u   …)striplen)textmax_lents      r   _cliprB   F   sB    |

A
1v]w{e##r   c                      \ rS rSrSS jrSSSSSS.                         SS jjrSSSSS	.         SS
 jjrSrg)AgentsUsageClassQ   c                    Xl         g r   r0   )selfr0   s     r   __init__AgentsUsageClass.__init__R   s    r   Nr   )total_tokensr!   r"   
input_textoutput_textc               d   [        S[        U=(       d    S5      5      n[        S[        U=(       d    S5      5      n[        S[        U	=(       d    S5      5      n[        S[        U
=(       d    S5      5      nUU-   S::  a	  US:  a  UnO US:  a  US:  a  US::  a  [        SX-
  5      nUb  [        U5      OX-   n[        UUUUUU R                  S9n[	        [        U5      U(       a  [        U5      OS U(       a  [        U5      OS USU=(       d    SR                  5       =(       d    SUUUUUU[        U5      [        U5      [        5       S9nU R                  R                  U5        U R                  R                  5         U R                  R                  U5        SUR                  S.$ )	Nr   )r&   r.   r/   r!   r"   r0   chat unknown)customer_id	school_iduser_idagent_idrequest_kindmodelr.   r!   r"   r/   rK   estimated_cost_usdrL   rM   
created_atsuccess)statusid)r   r,   r:   r0   r   r=   rB   r   addcommitrefreshr\   )rH   rR   rS   rT   rU   rW   r.   r/   rK   r!   r"   rL   rM   ptctr5   r6   ttr9   r1   s                       r   record_chatAgentsUsageClass.record_chatU   st     C*+,C).Q/0!S05A671c27a89:?rAvD!VaDAIq"(#D".":S! $'%)ww
 $K((1c)nt$+CL;B%%'49$'%) #Z(k*v
" 	C#36622r   r<   2   )rR   r   pageper_pagec                  [        S[        U=(       d    S5      5      n[        S[        S[        U=(       d    S5      5      5      nU R                  R	                  [
        5      nUb:  [        U5      S:  a+  UR                  [
        R                  [        U5      :H  5      nUbA  [        U5      u  pgUR                  [
        R                  U:  [
        R                  U:*  5      nUR                  5       nUR                  [        R                  " [        R                  " [
        R                  5      S5      [        R                  " [        R                  " [
        R                   5      S5      [        R                  " [        R                  " [
        R"                  5      S5      [        R                  " [        R                  " [
        R$                  5      S5      [        R                  " [        R                  " [
        R&                  5      S5      [        R                  " [        R                  " [
        R(                  5      S5      5      R+                  5       n	UR-                  [
        R                  R/                  5       5      R1                  US-
  U-  5      R3                  U5      R5                  5       n
U
 Vs1 s H*  oR                  (       d  M  [        UR                  5      iM,     nn0 nU(       Ga  U R                  R	                  [6        5      R                  [6        R8                  R;                  [=        U5      5      5      R5                  5        H  nUR>                  =(       d    SRA                  5       nU(       dW  URB                  =(       d    SRA                  5        SURD                  =(       d    SRA                  5        3RA                  5       nU=(       d    SUR8                   3U[        UR8                  5      '   M     / nU
 GHq  nURG                  0 SUR8                  _S	UR                  _S
URI                  [        UR                  5      SUR                   35      _SURJ                  _SURL                  _SURN                  _SURP                  _SURR                  _SUR                  _S[        [U        USS5      =(       d    S5      _S[        [U        USS5      =(       d    S5      _SUR                   _SUR"                  _S[W        UR$                  =(       d    S5      _SURX                  _SURZ                  _SUR                  (       a  UR                  R]                  SSS9OS _5        GMt     [        SX-   S-
  U-  5      nSUUUUU[        U	S   =(       d    S5      [        U	S   =(       d    S5      [        U	S   =(       d    S5      [W        U	S   =(       d    S5      [        U	S   =(       d    S5      [        U	S   =(       d    S5      S .S!.S".$ s  snf )#Nr<      re   r   rP    zCliente r\   rR   customer_namerS   rT   rU   rV   rW   r.   r!   r"   r/   rK   rX   rL   rM   rY   seconds)septimespecrZ               )r.   r/   rK   rX   r!   r"   )itemstotal_itemstotal_pagescurrent_pageitems_per_pagesummary)r[   data)/r   r,   r   r0   r$   r   r%   rR   r    rY   countwith_entitiesr
   coalescesumr.   r/   rK   rX   r!   r"   oneorder_bydescoffsetlimitallr   r\   in_listcompany_namer=   names	lastnamesappendgetrS   rT   rU   rV   rW   getattrfloatrL   rM   	isoformat)rH   rR   r   rf   rg   qr   r   rt   totalsrowsrcustomer_idsr   clabelrs   ru   s                     r   list_reportAgentsUsageClass.list_report   s    1c$)!n%sC3x~2#678GGMM/0"s;'7!';.::c+>NNOA?$S)JE%00E9%00C7A
 ggiMM$((#8#F#FGKMM$((#8#J#JKQOMM$((#8#E#EFJMM$((#8#K#KLaPMM$((#8#P#PQSTUMM$((#8#Q#QRTUV
 #% 	 JJ,77<<>?VTAX)*U8_SU	 	 59JDqMM*AMM*DJ "m,((,,T,-?@A 
 -2446 !24467q!++:K9R9R9T8UV\\^E#(#=hqttf,=c!$$i  ALL!$$!1== $UYYs1==/AXamm_C]%^  	
 qyy 

 #ANN QWW $Q__ .s#<a@EA0 /#=qAFQ1  ()<)<!" #ANN#$ )%0D0D0I*J%& !!,,'( "1==)* !|| #$,,"8"8S9"8"U/ : !k4q8XEF** $"*%(a%8),VAY^!)<$'q	Q$7*/q	Q*?/26!9>/B03F1IN0C
 	
Y Ks   X< X<rG   )r0   r   returnNone)rR   r,   rS   
int | NonerT   r   rU   
str | NonerW   r(   r.   r,   r/   r,   rK   r   r!   r,   r"   r,   rL   r   rM   r   r   dict[str, Any])
rR   r   r   zdate | Nonerf   r,   rg   r,   r   r   )__name__
__module____qualname____firstlineno__rI   rc   r   __static_attributes__r   r   r   rD   rD   Q   s     $('(()!%"&53 53 	53
 53 53 53 53 53 !53 "%53 #&53 53  53 
53t #'c
  c
 	c

 c
 c
 
c
 c
r   rD   N)r   r   )r   r   r   ztuple[datetime, datetime])r&   r(   r.   r,   r/   r,   r0   r   r!   r,   r"   r,   r   r   )i N  )r?   r   r@   r,   r   r   )__doc__
__future__r   r   r   r   r   decimalr   typingr	   
sqlalchemyr
   sqlalchemy.ormr   *app.backend.db.models.agents_openai_modelsr   "app.backend.db.models.agents_usager   app.backend.db.models.pie_corer   r   r    r:   rB   rD   r   r   r   <module>r      s    4 " 3 3    " H D 8; $%$%(.(. (. 	(.
 	(. !(. "(. (.V$^
 ^
r   