
    @i                     t    S r SSKrSSKrSSKJrJrJrJr  SSK	J
r
  \R                  " \5      r " S S5      rg)zBIntent mapper for converting LLM intent to user preference vector.    N)DictAnyOptionalList)PatternEmbedderc                   \    \ rS rSrSrS\4S jrS\\\	4   S\
\R                     4S jrSrg	)
IntentMapper   z<Mapper for converting intent JSON to user preference vector.embedderc                     Xl         g)zIInitialize intent mapper.

Args:
    embedder: Pattern embedder instance
Nr   )selfr   s     D   /home/ubuntu/codebase/yexijia/保研/iCoLoc/src/llm/intent_mapper.py__init__IntentMapper.__init__   s	     !    intent_jsonreturnc           	      L    UR                  S/ 5      nU(       d  [        R                  S5        g[        R                  S[	        U5       S35        U Vs/ s H5  o3(       d  M  [        U[        5      (       d  M"  [	        U5      S:  d  M3  UPM7     nnU(       d  [        R                  S5        g[        R                  S[	        U5       S	35        / n[        U5       H  u  pg [        R                  S
US-    S[	        U5       SU 35        U R                  R                  U5      nUb8  UR                  U5        [        R                  SU S[	        U5       S35        M  [        R                  SU S35        M     U(       d  [        R                  S5        g[        R                  S[	        U5       S35        [        R                  " USS9n
[        R                  S[	        U5       S35        [        R                  SU
R                   S[        R                   R#                  U
5      S 35        U
$ s  snf ! [         a'  n	[        R                  SU SU	 35         Sn	A	GM  Sn	A	ff = f! [         a!  n	[        R%                  SU	 3SS9   Sn	A	gSn	A	ff = f)a  Convert intent JSON to user preference vector.

This method implements the feature selection and vector computation process:
1. Extracts pattern_preference from intent JSON (feature selection)
2. Encodes each pattern to embedding using Sentence Transformers
3. Computes mean vector as initial user preference u_llm

Args:
    intent_json: Intent dictionary from IntentEncoder
    
Returns:
    User preference vector (mean of pattern embeddings), or None if conversion fails
pattern_preferencez$No pattern_preference in intent JSONNzIntentMapper: Extracted z patterns from intentr   z'No valid patterns in pattern_preferencezIntentMapper: z valid patterns after filteringzIntentMapper: Encoding pattern    /z: zIntentMapper: Pattern z encoded to vector (dim=)z'IntentMapper: Failed to encode pattern z - returned Nonez6IntentMapper: No valid vectors generated from patternsz#IntentMapper: Successfully encoded z patterns to vectors)axisz/IntentMapper: Generated user vector u_llm from z	 patternsz IntentMapper: Vector dimension: z, norm: z.4fz1IntentMapper: Error converting intent to vector: T)exc_info)getloggerwarninginfolen
isinstancelist	enumeratedebugr   encode_patternappend	Exceptionnpmeanshapelinalgnormerror)r   r   r   pvalid_patternsvectorsipatternvecemean_vectors              r   	to_vectorIntentMapper.to_vector   s`   5	!,1Er!J%EFKK237I3J2KK`ab *<h);AqaZPQSWEXa]`ab]cfg]ga);Nh!HIKK.^)<(==\]^ G'7
LL#B1Q3%q^I\H]]_`g_h!ij--66w?Cs+'=gYF^_bcf_g^hhi%jk)PQXPYYi'jk 8 WXKK=c'l^K_`a '''2KKKI#g,W`abKK:;;L;L:MXVXV_V_VdVdepVqruUvwxM i* ! NN%LWIUWXYWZ#[\&  	LLLQCP[_L`	s   .I8 &I8 
H?%H?<H?H?I8 24I8 'A>I%I8 'I  I8 !BI8 ?I8 
I5I0)I8 0I55I8 8
J#JJ#r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   strr   r   r(   ndarrayr6   __static_attributes__ r   r   r	   r	      s8    F! !CT#s(^ C8L Cr   r	   )r<   numpyr(   loggingtypingr   r   r   r   learning.embedderr   	getLoggerr8   r   r	   r@   r   r   <module>rF      s3    H   , , -			8	$N Nr   