
    iK                        S SK r S SKrS SKrS SKJr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JrJrJrJrJrJrJr  \(       a  S SKJr   " S S	\\5      r\
 " S
 S5      5       r\
 " S S5      5       rSrSr " S S5      rg)    N)OptionalListLiteralUnionTYPE_CHECKING)	dataclass)datetime)Enum)!ReportEventItemEventData_ProgressReportMetadataEditSuggestionReportResponse
ReportPlanReportBlockReportPlanBlockReport)LlamaReportc                       \ rS rSrSrSrSrg)MessageRole   user	assistant N)__name__
__module____qualname____firstlineno__USER	ASSISTANT__static_attributes__r       \/home/james-whalen/.local/lib/python3.13/site-packages/llama_cloud_services/report/report.pyr   r      s    DIr!   r   c                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)Message   rolecontent	timestampr   N)	r   r   r   r   r   __annotations__strr	   r    r   r!   r"   r$   r$      s    
Lr!   r$   c                   T    \ rS rSr% \\S'   \\S'   \\   \S'   \S   \S'   \	\S'   Sr
g	)

EditAction$   	block_idxold_contentnew_content)approvedrejectedactionr(   r   N)r   r   r   r   intr)   r*   r   r   r	   r    r   r!   r"   r,   r,   $   s)    N#*++r!   r,      iX  c            
          \ rS rSrSrS\S\SS4S jr\S\R                  4S	 j5       r
S\4S
 jrS\4S jrS\\\4   S\4S jrS\\\4   S\4S jrS5S\\   S\4S jjrS5S\\   S\4S jjrS\S\4S jrS\S\4S jr S5S\S   S\\   S\4S jjr S5S\S   S\\   S\4S jjr  S6S\S\S\\\       S\\!   4S jjr"  S6S\S\S\\\       S\\!   4S jjr#\$\%4S \S!\S\4S" jjr&\$\%4S \S!\S\4S# jjr'\$\%4S \S!\S\4S$ jjr(\$\%4S \S!\S\4S% jjr)S\*4S& jr+S\*4S' jr,S7S( jr-S7S) jr.S*\!SS4S+ jr/S*\!SS4S, jr0S*\!SS4S- jr1S*\!SS4S. jr2S/\3S\\   4S0 jr4 S5S1\\   S\\5   4S2 jjr6 S5S1\\   S\\5   4S3 jjr7S4r8g)8ReportClient1   z+Client for operations on a specific report.	report_idnameparent_clientr   c                     Xl         X l        X0l        UR                  U l        UR
                  U l        UR                  U l        / U l        / U l        g N)	r9   r:   _clientheaders_headers	_run_sync
_build_urlchat_historyedit_history)selfr9   r:   r;   s       r"   __init__ReportClient.__init__4   sH    "	$%--&00'22+-.0r!   returnc                 .    U R                   R                  $ r=   )r>   aclientrE   s    r"   rJ   ReportClient.aclient>   s    ||###r!   c                 <    SU R                    SU R                   S3$ Nz
Report(id=z, name=)r9   r:   rK   s    r"   __str__ReportClient.__str__B        DNN+7499+Q??r!   c                 <    SU R                    SU R                   S3$ rN   rP   rK   s    r"   __repr__ReportClient.__repr__E   rS   r!   blockc                     [        U[        5      (       a  UR                  $ [        U[        5      (       a  UR                  R                  $ [        S[        U5       35      eNzInvalid block type: )
isinstancer   templater   rW   
ValueErrortyperE   rW   s     r"   _get_block_contentReportClient._get_block_contentH   sM    e[))>>!//;;'''3DK=ABBr!   c                     [        U[        5      (       a  UR                  $ [        U[        5      (       a  UR                  R                  $ [        S[        U5       35      erY   )rZ   r   idxr   rW   r\   r]   r^   s     r"   _get_block_idxReportClient._get_block_idxP   sK    e[))99//;;??"3DK=ABBr!   Nversionc                 :  #    / nUb  UR                  SU 35        U R                  SU R                   3U5      I Sh  vN nU R                  R	                  X0R
                  S9I Sh  vN nUR                  5         [        S0 UR                  5       D6$  NX N/7f)z)Get this report's details asynchronously.Nzversion=/api/v1/reports/r?   r   )	appendrB   r9   rJ   getr@   raise_for_statusr   json)rE   re   extra_paramsurlresponses        r"   agetReportClient.agetX   s     (7) 45OO&6t~~6F$GVV))#}})EE!!#000	 WEs!   <BB*B)B*.BBc                 B    U R                  U R                  U5      5      $ )z6Synchronous wrapper for getting this report's details.)rA   rp   )rE   re   s     r"   rj   ReportClient.getd   s    ~~dii011r!   updated_reportc                 (  #    U R                  SU R                   35      I Sh  vN nU R                  R                  X R                  SUR                  5       0S9I Sh  vN nUR                  5         [        S0 UR                  5       D6$  Ni N/7f)z,Update this report's content asynchronously.rg   Nr'   r?   rl   r   )	rB   r9   rJ   patchr@   dictrk   r   rl   )rE   rt   rn   ro   s       r"   aupdate_reportReportClient.aupdate_reporth   s     OO&6t~~6F$GHH++i9L9L9N-O , 
 
 	!!#000 I
s!   "BB;B B!.BBc                 B    U R                  U R                  U5      5      $ )z7Synchronous wrapper for updating this report's content.)rA   ry   )rE   rt   s     r"   update_reportReportClient.update_reportq   s    ~~d11.ABBr!   r3   )approverejecteditupdated_planc                   #    US:X  a  U(       d  [        S5      eU R                  SU R                   S3SU 3/5      I Sh  vN nSnUb$  UR                  5       nUR	                  SS5        UnUc  US:X  a  [        S5      eU R
                  R                  X0R                  US9I Sh  vN nUR                  5         [        S	0 UR                  5       D6$  N N/7f)
z)Update this report's plan asynchronously.r   z.updated_plan is required when action is 'edit'rg   z/planzaction=Ngenerated_atrv   r   )r\   rB   r9   rx   poprJ   rw   r@   rk   r   rl   )rE   r3   r   rn   data	plan_dictro   s          r"   aupdate_planReportClient.aupdate_planu   s      VLMNNOOt~~.e47I6J
 
 #$))+IMM.$/DFf$4MNN++CT+RR!!#000
 Ss%   A CCA(C+C,.CCc                 B    U R                  U R                  X5      5      $ )z4Synchronous wrapper for updating this report's plan.)rA   r   )rE   r3   r   s      r"   update_planReportClient.update_plan   s     ~~d//EFFr!   
user_queryauto_historyrC   c           	        #    U R                   R                  [        [        R                  U[
        R                  " 5       S95        / nU R                   SS  H~  nUR                  nUR                  [        R                  :X  a)  U R                  UR                  5      nU(       a  U SU 3nUR                  UR                  R                  US.5        M     U(       a  UnOU(       a  UnO/ nU R                  SU R                   S35      I Sh  vN nXS.n	U R                  R                  XR                   U	S	9I Sh  vN n
U
R#                  5         U
R%                  5       nU Vs/ s H  n['        S
0 UD6PM     nnU(       aX  U HR  nU R                   R                  [        [        R(                  UR*                  [
        R                  " 5       S95        MT     U$  N Ns  snf 7f)az  Get AI suggestions for edits to this report asynchronously.

Args:
    user_query: The user's request/question about what to edit
    auto_history: Whether to automatically add the user's message to the chat history
    chat_history:
        A list of chat messages to include in the chat history.
        The format being a list of dictionaries with "role" and "content" keys.
)r&   r'   r(   Nz

Actions taken:
)r&   r'   rg   z/suggest_edits)r   rC   rv   r   )rC   ri   r$   r   r   r	   nowr'   r&   _get_edit_summary_after_messager(   valuerB   r9   rJ   postr@   rk   rl   r   r   justification)rE   r   r   rC   chat_history_dictsmsgr'   edit_summaryrn   r   ro   suggestions
suggestions                r"   asuggest_editsReportClient.asuggest_edits   s      	  )):X	

  $$Sb)CkkGxx;+++#CCCMMR!(	)=l^LG%%sxx~~'&RS * !-!3!# OO&6t~~6Fn$UVV(M**3D*QQ!!#mmoFQRk
~3
3kR )
!!(((22 * 8 8"*,,. * ' W R Ss7   DG-G$/G-G&(G-,G(A$G-&G-(G-c                 D    U R                  U R                  XU5      5      $ )z1Synchronous wrapper for getting edit suggestions.)rA   r   )rE   r   r   rC   s       r"   suggest_editsReportClient.suggest_edits   s%     ~~
,G
 	
r!   timeoutpoll_intervalc                   #    [         R                   " 5       n U R                  5       I Sh  vN nUR                  nUS:X  a  UR                  $ US:X  a3  U R	                  5       I Sh  vN n[        SUS   R                   35      e[         R                   " 5       U-
  U:  a  [        SU S35      e[        R                  " U5      I Sh  vN   M   N Nl N
7f)z,Wait for this report to complete processing.N	completederrorReport entered error state: r   zReport did not complete within  seconds)
timerp   statusreportaget_eventsr\   r   TimeoutErrorasynciosleep)rE   r   r   
start_timereport_responser   eventss          r"   await_completionReportClient.await_completion   s      YY[
$(IIK/O$++F$&---7"#//11 #?r
?O!PQQz)G3"%DWIX#VWW--... / 2
 /s4   *CC;C(C)A#CCCCCc                 B    U R                  U R                  X5      5      $ )z3Synchronous wrapper for awaiting report completion.)rA   r   rE   r   r   s      r"   wait_for_completion ReportClient.wait_for_completion   s     ~~d33GKLLr!   c                   #    [         R                   " 5       n U R                  5       I Sh  vN nUR                  nUS:X  a$  U R                  5       I Sh  vN nUR                  $ US:X  a3  U R                  5       I Sh  vN n[        SUS   R                   35      e[         R                   " 5       U-
  U:  a  [        SU S35      e[        R                  " U5      I Sh  vN   M   N N Nn N7f)z3Wait for this report's plan to be ready for review.Nwaiting_approvalr   r   r   zPlan was not ready within r   )r   aget_metadatastaterp   planr   r\   r   r   r   r   )rE   r   r   r   report_metadatar   r   r   s           r"   await_for_planReportClient.await_for_plan   s      YY[
$($6$6$88O#))E**(,		"3&+++'!#//11 #?r
?O!PQQz)G3"%?y#QRR--... 8 #4 2
 /sF   *C3C+)C3C-)C3 C/A#C3$C1%C3-C3/C31C3c                 B    U R                  U R                  X5      5      $ )z0Synchronous wrapper for awaiting plan readiness.)rA   r   r   s      r"   wait_for_planReportClient.wait_for_plan  s     ~~d11'IJJr!   c                 h   #    U R                   R                  U R                  5      I Sh  vN $  N7f)z*Get this report's metadata asynchronously.N)r>   aget_report_metadatar9   rK   s    r"   r   ReportClient.aget_metadata  s$     \\66t~~FFFF   )202c                 @    U R                  U R                  5       5      $ )z7Synchronous wrapper for getting this report's metadata.)rA   r   rK   s    r"   get_metadataReportClient.get_metadata  s    ~~d00233r!   c                 h   #    U R                   R                  U R                  5      I Sh  vN $  N7f)z"Delete this report asynchronously.N)r>   adelete_reportr9   rK   s    r"   adeleteReportClient.adelete  s$     \\00@@@@r   c                 @    U R                  U R                  5       5      $ )z-Synchronous wrapper for deleting this report.)rA   r   rK   s    r"   deleteReportClient.delete  s    ~~dlln--r!   r   c                   ^ ^^#    [        UR                  5      S:X  a  g[        UR                  S   [        5      nT R	                  5       I Sh  vN nU(       a  UR
                  R                  OUR                  R                  n/ nUR                   GHR  m[        UU 4S jU 5       S5      nU(       a  T R                  U5      OSnT R                  T5      nU(       Ga  SR                  TR                   V	s/ s H,  n	SU	R                   SU	R                   SU	R                   3PM.     sn	5      n
TR                  (       a  S	TR                   3OS
nUSU
 SU 3-  nU(       a  SR                  UR                   V	s/ s H,  n	SU	R                   SU	R                   SU	R                   3PM.     sn	5      nUR                  (       a  S	UR                   3OS
nUSU SU 3-  nT R                  R!                  [#        T R%                  T5      UUS[&        R(                  " 5       S95        U(       aq  UR!                  [        [+        TR,                  R.                  T R                  T5      TR,                  R0                  S9TR                  TR                  S95        GM  UR!                  [+        TR.                  T R                  T5      TR0                  S95        GMU     U(       Ga7  U(       a  UR
                  nU Hk  nT R%                  U5      m[        U4S j[3        UR                  5       5       S5      nUb  XR                  U'   MP  UR                  R!                  U5        Mm     T R5                  SU5      I Sh  vN   gUR                  nU Hl  nT R%                  U5      m[        U4S j[3        UR                  5       5       S5      nUb  UUR                  U'   MQ  UR                  R!                  U5        Mn     T R7                  U5      I Sh  vN   gg GNs  sn	f s  sn	f  N N7f)zmAccept a suggested edit.

Args:
    suggestion: The EditSuggestion to accept, typically from suggest_edits()
r   Nc              3   t   >#    U  H-  nTR                  U5      TR                  T5      :X  d  M)  Uv   M/     g 7fr=   )rc   ).0b
edit_blockrE   s     r"   	<genexpr>,ReportClient.aaccept_edit.<locals>.<genexpr><  s8      +**1-1D1DZ1PP A+s   (8	8z[No old content]
zField: z
, Prompt: z, Context: zDepends on:  z

r1   r.   r/   r0   r3   r(   )rb   r[   sources)rW   queries
dependencyc              3   d   >#    U  H%  u  pUR                   R                  T:X  d  M!  Uv   M'     g 7fr=   )rW   rb   r   ir   r.   s      r"   r   r     s,      (> ww{{i7 A(>s    0	0r   c              3   P   >#    U  H  u  pUR                   T:X  d  M  Uv   M     g 7fr=   )rb   r   s      r"   r   r     s"     V'?tq155ICU'?s   &	&)lenblocksrZ   r   rp   r   r   nextr_   joinr   fieldpromptcontextr   rD   ri   r,   rc   r	   r   r   rW   rb   r   	enumerater   ry   )rE   r   is_plan_editr   current_blocks
new_blocks	old_blockr/   r0   qnew_queries_strnew_dependency_strold_queries_strold_dependency_strr   	new_blockexisting_block_idxr   r.   r   s   `                 @@r"   aaccept_editReportClient.aaccept_edit#  s     z  !Q& "*"3"3A"6H !%		+    '' ''.. 	 
$++J+
 I 7@''	2EW  11*=K"&)) ",!3!3!3A "!''*QXXJk!))U!3# ",, #:#8#8"9: #
 o%6b9K8LMM&*ii &/%6%6%6 &aggYj
+aii[Y%6'O %// 'y';';&<= '
  T/):"=O<P#QQK$$"11*= + +%&lln !!#) * 0 0 4 4%)%<%<Z%H$.$4$4$<$<
 !+ 2 2#-#8#8
 !!&NN!%!8!8!D * 2 2I ,X &++ ",I $ 3 3I >I)-(1$++(>
 *& *5:C$67 **95! ",$ ''555 )// ",I $ 3 3I >I)-Vy'?V*&
 *5<E&89 ,,Y7 ", ))&111Y k ,6H 6( 2sR   AP>P-B,P>=3P0
0AP>3P5
7GP>P:BP>&P<'P>0P><P>c                 B    U R                  U R                  U5      5      $ )z*Synchronous wrapper for accepting an edit.)rA   r   rE   r   s     r"   accept_editReportClient.accept_edit      ~~d//
;<<r!   c                    #    UR                    HZ  nU R                  R                  [        U R	                  U5      U R                  U5      SS[        R                  " 5       S95        M\     g7f)zmReject a suggested edit.

Args:
    suggestion: The EditSuggestion to reject, typically from suggest_edits()
Nr2   r   )r   rD   ri   r,   rc   r_   r	   r   )rE   r   r   s      r"   areject_editReportClient.areject_edit  s^      %++J$$"11*= $ 7 7
 C $%&lln ,s   A,A.c                 B    U R                  U R                  U5      5      $ )z*Synchronous wrapper for rejecting an edit.)rA   r   r   s     r"   reject_editReportClient.reject_edit  r   r!   message_timestampc           
         U R                    Vs/ s H  o"R                  U:  d  M  UPM     nnU(       d  gU Vs/ s H  o"R                  S:X  d  M  UPM     nnU Vs/ s H  o"R                  S:X  d  M  UPM     nn/ nU(       aS  UR                  S5        U H<  nUR                  SUR                   SUR
                   SUR                   S35        M>     U(       a^  U(       a  UR                  S	5        UR                  S
5        U H/  nUR                  SUR                   SUR
                   S35        M1     SR                  U5      $ s  snf s  snf s  snf )z>Get a summary of edits that occurred after a specific message.Nr1   r2   zApproved edits:zBlock z: "z" -> ""r   zRejected edits:r   )rD   r(   r3   ri   r.   r/   r0   r   )rE   r   r   relevant_editsr1   r2   summarys          r"   r   ,ReportClient._get_edit_summary_after_message  s;   
 "..
.T..CT2TD. 	 
 %3Q^T{{j7PD^Q%3Q^T{{j7PD^QNN,- T^^,C0@0@/AHXHXGYYZ[ !
 r"NN,- '7s4;K;K:LANO ! yy!!5
 RQs!   EEEEE4Elast_sequencec           	        #    / nUb  UR                  SU 35        U R                  SU R                   S3U5      I Sh  vN nU R                  R	                  X0R
                  S9I Sh  vN nUR                  5         / nUR                  5        H+  nUS   S:X  d  M  UR                  [        S	0 US   D65        M-     U$  N NY7f)
zGet all events for this report asynchronously.

Args:
    last_sequence: If provided, only get events after this sequence number

Returns:
    List of ReportEvent objects
Nzlast_sequence=rg   z/eventsrh   
event_typeprogress
event_datar   )	ri   rB   r9   rJ   rj   r@   rk   rl   r   )rE   r  rm   rn   ro   progress_eventsevents          r"   r   ReportClient.aget_events  s      $. @AOOt~~.g6
 
 ))#}})EE!!#]]_E\"j0&&5Ll8KL % 
 Fs(   =CC *C*C+0C$CCc                 B    U R                  U R                  U5      5      $ )z.Synchronous wrapper for getting report events.)rA   r   )rE   r  s     r"   
get_eventsReportClient.get_events  s     ~~d..}=>>r!   )rB   r>   r@   rA   rC   rD   r:   r9   r=   )TN)rH   N)9r   r   r   r   __doc__r*   rF   propertyhttpxAsyncClientrJ   rQ   rU   r   r   r   r_   r4   rc   r   r   rp   rj   r   ry   r|   r   r   r   r   boolr   rx   r   r   r   DEFAULT_TIMEOUTDEFAULT_POLL_INTERVALr   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   r  r    r   r!   r"   r7   r7   1   sU   51# 1S 1 1 $** $ $@ @@# @Ck?.J(K CPS CCE+*F$G CC C
1(3- 
1> 
128C= 2N 216 1n 1CF C~ C .21341 z*1 
	1: .2G34G z*G 
	G "-1	<< < tDz*	<
 
n	<B "-1		
	
 	
 tDz*		

 
n		
 -CX//=@/	/( -CXMM=@M	M -CX//=@/	/* -CXKK=@K	KG^ G4n 4A.N2^ N2 N2`=n = =^  $=n = ="!)"	#"B .2%c]	/	0> .2?%c]?	/	0? ?r!   r7   ) r   r  r   typingr   r   r   r   r   dataclassesr   r	   enumr
   llama_cloud.typesr   r   r   r   r   r   r   r    llama_cloud_services.report.baser   r*   r   r$   r,   r  r  r7   r   r!   r"   <module>r     s       @ @ !  	 	 	 <#t 
        ^? ^?r!   