
    i                     r   d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZ dd	lmZ dd
lmZ  e         ej,                  d      r8ej.                  j1                  dd       ej.                  j1                  dd        ee      Z e
       Z ee      Z e       Z e       Z e       Z e       Z  ee      Z!e!jE                  de       e!jE                  de       e!jE                  de       e!jE                  de       e!jE                  de        e!jG                  d       e!jI                  deddd       e!jI                  dedddd       e!jK                  dd       e!jK                  dd       e!jK                  de       e!jM                         Z'de(fdZ) G d d      Z*y)z
Deep Analysis Agent: graph definition and public run API.
State, nodes, and executor logic live in deep_analysis_state, deep_analysis_nodes.
    N)Optional)
StateGraphEND   )DeepAnalysisState)load_analytical_schema)ReasonerNodeExecutorNodeFinalizerNodeFindingsNodeReasonerAbortNodeshould_investigate)load_dotenv)
get_loggerLANGSMITH_API_KEYLANGCHAIN_TRACING_V2trueLANGCHAIN_PROJECTzuser-profiling)analytical_schemareasonerexecutorfindings	finalizerreasoner_abort)executefinalize)r   r   r   returnc            	      t    	 t        dt        t        j                  dd                  S # t        $ r Y yw xY w)Nr   DEEP_ANALYSIS_MAX_TURNS1)maxintosgetenv
ValueError     B/var/www/html/userprofiledev.eatanceapp.com/deep_analysis/agent.py_get_default_max_turnsr)   D   s7    1c"))$=sCDEE s   (+ 	77c            	       .    e Zd Z	 ddededee   defdZy)DeepAnalysisAgentNuser_idprofile_summary	max_turnsr   c                 &   |t               }nt        d|      }t        j                  d|       i dg d|d|d|dd dd d	d d
d dd dg dg dg dddddddd dd dd i}t        j                  |      }|j                  d      xs dS )Nr   zWDeep analysis pipeline start (Reasoner -> Executor -> Findings -> Finalize) for User %smessagesr,   profile_jsonr.   
last_querylast_queries_batch
last_errorfailed_query_indexfixed_queryr   llm_findingsfailed_investigationsretry_countr   tool_call_countcontext_near_limitFbatch_all_emptyempty_turn_decisionfinal_analysisz%Investigation could not be completed.)r)   r!   loggerinfoappinvokeget)selfr,   r-   r.   initial_statefinal_states         r(   runzDeepAnalysisAgent.runL   s1    .0IAy)Ie	

,
,
w,
 O,
 	,

 $,
 !$,
 $,
 !$,
 4,
 ,
 B,
 $R,
 1,
 q,
 !%,
  t!,
" "4#,
$ d%,
* jj//0[4[[r'   )N)__name__
__module____qualname__r"   strr   rG   r&   r'   r(   r+   r+   K   s;    
 $(	%\%\ %\ C=	%\
 
%\r'   r+   )+__doc__r#   typingr   langgraph.graphr   r   stater   helpersr   nodesr	   r
   r   r   r   r   dotenvr   core.logger_configr   r$   environ
setdefaultrH   r?   ANALYTICAL_SCHEMAreasoner_nodeexecutor_nodefinalizer_nodefindings_nodereasoner_abort_nodeworkflowadd_nodeset_entry_pointadd_conditional_edgesadd_edgecompilerA   r"   r)   r+   r&   r'   r(   <module>rb      s  
 
  + $ +
 
  ) 299 !JJ0&9JJ-/?@	H	*,  /@A')  '(   *m ,   *m ,   *m ,   +~ .   "$7 8 	   $   z+=:cn?o p   z+=&@ 
 	  *k *   "J /   +s #  &\ &\r'   