
    ɢiB,                     ^   d dl Z d dlZd dlZd dlmZ  ej
                  e      ZdZdZ		 	 	 	 	 	 d#de
dee   dee   dee   d	ee   d
ee   dee   de
fdZdede
fdZdede
de
fdZdede
fdZdede
fdZdede
fdZdede
fdZde
dede
fdZd$de
de
de
fdZd$de
d efd!Zde
de
fd"Zy)%    N)Optionali.  2   domainglobal_contextproject_contextprofile_configdiscovery_answersbrandkit_summary
niche_datareturnc                    g }|rt        |      }|r|j                  |       |rt        ||       }	|	r|j                  |	       |rt        |      }
|
r|j                  |
       |rt	        |      }|r|j                  |       |rt        |      }|r|j                  |       |rt        |      }|r|j                  |       dj                  |      }t        |      t        kD  rt        |t              }|S )N

)_build_global_context_blockappend_build_project_context_block_build_profile_context_block_build_niche_context_block_build_discovery_context_block_build_brandkit_context_blockjoinlenMAX_CONTEXT_CHARS_smart_truncate)r   r   r   r   r	   r
   r   blocksgc_blockpc_block
prof_blockniche_block
disc_blockbk_blockfull_contexts                  9/sites/domain-asset-master/app/services/context_engine.pyassemble_contextr#      s     F.~>MM(#/HMM(#1.A
MM*%0<MM+&34EF
MM*%01ABMM(#;;v&L
<,,&|5FG    gcc                     dg}| j                  d      r|j                  d| d           | j                  d      re| d   }t        |t              rP|j	                         D cg c]  \  }}|s	d| d|  }}}|r#|j                  ddj                  |      z          | j                  d	      r| d	   }t        |t              rQ|j	                         D cg c]  \  }}|s	d| d|  }}}|r^|j                  d
dj                  |      z          n:t        |t              r*|j                  d
dj                  d |D              z          t        |      dkD  rdj                  |      S dS c c}}w c c}}w )Nz%--- GLOBAL CONTEXT (Master Rules) ---master_ruleszRULES:
style_prefs  - : zSTYLE PREFERENCES:


guardrailszGUARDRAILS:
c              3   &   K   | ]	  }d |   yw)r)   N ).0rs     r"   	<genexpr>z._build_global_context_block.<locals>.<genexpr>N   s     4OAtA3Z4Os       )getr   
isinstancedictitemsr   listr   )r%   partsprefskv
pref_linesrails
rail_liness           r"   r   r   =   sT   45E	vvnx> 2345	vvm=!eT"6;kkmIdaqD2aS/IJI3dii
6KKL	vvl< eT"6;kkmIdaqD2aS/IJI_tyy/DDEt$LL4994O4O+OOP"5zA~499U525 J Js   %
E40
E4
E:&
E:pcc           	      l   d| dg}| j                  di       }|s| j                  d      sy|rs|j                  d      r|j                  d|d           |j                  d      r|j                  d	|d           |j                  d
      r|j                  d|d
           |j                  d      r|j                  d|d           |j                  d      r|j                  d|d           |j                  d      r/|j                  d       |d   D ]  }|j                  d|         |j                  d      r|j                  d|d           |j                  d      r2|j                  d       |d   dd  D ]  }|j                  d|         | j                  dg       }|rm|dd  }|j                  d       |D ]R  }|j                  dd      }	|j                  dd      }
|j                  dd      }|j                  d|	 d|
 d |        T d!j                  |      S )"Nz--- PROJECT CONTEXT (z) ---context_state	event_logr3   selected_nichezCHOSEN NICHE: template_typez
TEMPLATE: depthzDEPTH: profile_slugz	PROFILE: brand_personalityBRAND PERSONALITY: key_decisionszKEY DECISIONS:r)   content_directionzCONTENT DIRECTION: prior_feedbackz(PRIOR FEEDBACK (user edits/refinements):izRECENT PROJECT EVENTS:	timestampactionunknowndetailz  [z] r*   r+   )r4   r   r   )r@   r   r9   statedfbrC   recentevttsrO   rQ   s               r"   r   r   R   s?   $VHE23EFF?B'E,99%&LL>%0@*A)BCD99_%LL:eO&<%=>?99WLL75>"23499^$LL9U>%:$;<=99()LL.u5H/I.JKL99_%LL)*?+ )tA3Z()99()LL.u5H/I.JKL99%&LLCD,-bc2 *tB4[)* {B'I34-. 	9Cb)BWWXy1FWWXr*FLL3rd"VHBvh78		9 99Ur$   configc                    dg}| j                  di       }|j                  d      r|j                  d|d           | j                  di       }|rO|j                         D cg c]  \  }}|s	| d|  }}}|r#|j                  ddj                  |      z          | j                  d	| j                  d
g             }|r#|j                  ddj                  |              t	        |      dkD  rdj                  |      S dS c c}}w )Nz--- ACTIVE SITE PROFILE ---prompt_overridesglobal_tonezTONE DIRECTIVE: visual_defaultsr*   zVISUAL DEFAULTS: , enabled_sectionssectionszENABLED SECTIONS: r2   r+   r3   )r4   r   r7   r   r   )rX   r9   	overridesvisualr;   r<   	vis_itemsr_   s           r"   r   r   {   s    *+E

-r2I}}]#'	-(@'ABCZZ)2.F-3\\^ATQqs"QC[A	ALL,tyy/CCDzz,fjjR.HIH)$))H*=)>?@"5zA~499U525 Bs   %
D	0	D	nichec                    dg}| j                  d      r|j                  d| d           | j                  d      r|j                  d| d           | j                  d      r|j                  d| d           | j                  d      r|j                  d	| d           | j                  d
      r8| d
   }t        |t              r#|j                  ddj	                  |              t        |      dkD  rdj	                  |      S dS )Nz--- NICHE INTELLIGENCE ---namezNICHE: descriptionzDESCRIPTION: target_audiencezTARGET AUDIENCE: monetization_modelzMONETIZATION: affiliate_programszAFFILIATE PROGRAMS: r]   r2   r+   r3   r4   r   r5   r8   r   r   )rc   r9   programss      r"   r   r      s    )*EyywuV}o./yy}U=%9$:;<yy"#(/@)A(BCDyy%&~e,@&A%BCDyy%&-.h%LL/		(0C/DEF"5zA~499U525r$   answersc                 j   | sydg}ddddddd	d
dddddddd}| j                         D ]h  \  }}|s	t        |      j                         s#|j                  ||j	                         j                  dd            }|j                  | d|        j t        |      dkD  rdj                  |      S dS )Nr3   z+--- DISCOVERY ANSWERS (Client-Provided) ---zPROJECT VISIONzSUCCESS DEFINITIONzCORE PURPOSEzIDEAL VISITORzAUDIENCE JOURNEYzPRIMARY ACTIONzBRAND PERSONALITYzCOLOR PALETTEzVISUAL STYLEzCORE VALUESzDESIRED FEELINGzKEY FEATURESzINSPIRATION SITESzFUTURE VISIONzADDITIONAL NOTES)project_storysuccess_vision	one_thingideal_audienceaudience_journeyprimary_actionrH   color_palettevisual_stylecore_valuesdesired_feelingkey_featuressites_lovedfuture_visionadditional_notes_ r*   r2   r+   )	r7   strstripr4   upperreplacer   r   r   )rl   r9   field_labelskeyvaluelabels         r"   r   r      s    :;E).#).*0(&$,&*(.L" mmo .
USZ%%' $$S#))+*=*=c3*GHELLE7"UG,-.  #5zA~499U525r$   summaryc                 "   | sydg}| j                  d      r|j                  d| d           | j                  d      r8| d   }t        |t              r#|j                  ddj	                  |              | j                  d      r|j                  d	| d           | j                  d
      r|j                  d| d
           | j                  d      r|j                  d| d           t        |      dkD  rdj	                  |      S dS )Nr3   z--- BRAND KIT INTELLIGENCE ---tonezDETECTED TONE: keywordszBRAND KEYWORDS: r]   visual_motifszVISUAL MOTIFS: rH   rI   content_strengthzCONTENT STRENGTH: r2   r+   rj   )r   r9   kws      r"   r   r      s   -.E{{6wv&789{{:Z b$LL+DIIbM?;<{{?#w'?&@AB{{&'*73F+G*HIJ{{%&)'2D*E)FGH"5zA~499U525r$   text	max_charsc                    t        |       |k  r| S | j                  d      }g }g }g }|D ]G  }d|v sd|v r|j                  |       d|v sd|v r|j                  |       7|j                  |       I ||z   |z   }d}|D ]R  }t        |      t        |      z   dz   |kD  r'|t        |      z
  dz
  }	|	d	kD  r|d|d |	 z   d
z   z  } |S ||rdnd|z   z  }T |S )Nr   zGLOBAL CONTEXTzDISCOVERY ANSWERSzPROJECT CONTEXTzNICHE INTELLIGENCEr3         d   z
[...truncated])r   splitr   )
r   r   r   prioritynormallowblockresult_blocksresult	remainings
             r"   r   r      s   
4yIZZFHF
C u$(;u(DOOE"%'+?5+HMM% JJu v%+MF 5v;U#a')3!CK/"4I3&5)#447IIIM 	V6u445 Mr$   rO   rQ   c                    |sy ddl m} |j                  |      j                  |j                  | k(        j                         }|s || i g       }|j                  |       |j                  xs g }|j                  t        j                  j                         j                         dz   ||d d d       t        |      t        kD  r
|t         d  }||_        ddlm}  ||d       |j!                          y )	Nr   ProjectContextr   rB   rC   Zi  )rN   rO   rQ   flag_modifiedrC   )
app.modelsr   queryfilterr   firstaddrC   r   datetimeutcnow	isoformatr   MAX_EVENT_LOG_ENTRIESsqlalchemy.orm.attributesr   commit)r   rO   rQ   
db_sessionr   ctxrC   r   s           r"   log_context_eventr      s    )


>
*
1
1.2G2G62Q
R
X
X
ZCF"Ks#I&&--/99;cA#, 
 9~--4456	CM7#{#r$   updatesc                 V   |sy ddl m} |j                  |      j                  |j                  | k(        j                         }|s || i g       }|j                  |       |j                  xs i }|j                  |       ||_        ddl	m
}  ||d       |j                          y )Nr   r   r   r   rB   )r   r   r   r   r   r   r   rB   updater   r   r   )r   r   r   r   r   rR   r   s          r"   update_project_stater      s    )


>
*
1
1.2G2G62Q
R
X
X
ZCF"Ks#E	LLC7#'r$   c           	         ddl m}m}m}m} |j                  |      j                         }d }|r$|j                  |j                  |j                  d}|j                  |      j                  |j                  | k(        j                         }d }	|r!|j                  xs i |j                  xs g d}	d }
|	rr|	j                  di       j                  d      rQ|	d   d   }|j                  |      j                  |j                  |k(        j                         }|r|j                   }
d }|j                  |      j                  |j                  | k(  |j"                  dk(        j                         }|r|j$                  r|j$                  }d }|	r)|	j                  di       j                  d      r|	d   d   }d }|	r)|	j                  di       j                  d	      r|	d   d	   }t'        | ||	|
|||
      S )Nr   )r   GlobalContextBrandKitSiteProfile)r'   r(   r,   )rB   rC   rB   rG   readyr	   r   )r   r   r   r   r	   r
   r   )r   r   r   r   r   r   r   r'   r(   r,   r   r   rB   rC   r4   slugrX   statusr   r#   )r   r   r   r   r   r   gc_rowr%   pc_rowr@   r   r   prof
bk_summarykit	discoveryr   s                    r"   get_full_context_for_domainr     s   OOm,224F	B"//!-- ++
 n-44^5J5Jf5TU[[]F	B#117R))/R

 N	bff_b)--n=/">2,33K4D4D4LMSSU![[NJ


8
$
+
+HOOv,ExZaGa
b
h
h
jC
s{{[[
I	bff_b)--.AB'(;<	J	bff_b)--l;(6
%## r$   )NNNNNN)N)jsonloggingr   typingr   	getLogger__name__loggerr   r   r~   r6   r#   r   r   r   r   r   r   intr   r   r   r   r.   r$   r"   <module>r      s      			8	$  
 &*&*%)(,'+!%..TN. d^. TN	.
  ~. tn. . 	.b6D 6S 6*&T &3 &3 &R6 6# 6 6d 6s 6"6D 6S 6864 6C 6&# # # 6c 3  0 t "0 0C 0r$   