
    @i                     t    d Z ddlZddlZddlmZmZmZmZ ddl	m
Z
  ej                  e      Z G d d      Zy)zBIntent mapper for converting LLM intent to user preference vector.    N)DictAnyOptionalList)PatternEmbedderc                   P    e Zd ZdZdefdZdeeef   de	e
j                     fdZy)IntentMapperz<Mapper for converting intent JSON to user preference vector.embedderc                     || _         y)ziInitialize intent mapper.
        
        Args:
            embedder: Pattern embedder instance
        N)r
   )selfr
   s     H   /home/ubuntu/codebase/yexijia/保研/colocation_mvp/llm/intent_mapper.py__init__zIntentMapper.__init__   s     !    intent_jsonreturnc           	         	 |j                  dg       }|st        j                  d       yt        j                  dt	        |       d       |D cg c]'  }|st        |t              st	        |      dkD  s&|) }}|st        j                  d       yt        j                  dt	        |       d	       g }t        |      D ]  \  }}	 t        j                  d
|dz    dt	        |       d|        | j                  j                  |      }|7|j                  |       t        j                  d| dt	        |       d       nt        j                  d| d        |st        j                  d       yt        j                  dt	        |       d       t        j                  |d      }
t        j                  dt	        |       d       t        j                  d|
j                   dt        j                   j#                  |
      d       |
S c c}w # t        $ r&}	t        j                  d| d|	        Y d}	~	d}	~	ww xY w# t        $ r$}	t        j%                  d|	 d       Y d}	~	yd}	~	ww xY w)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_vectorzIntentMapper.to_vector   s_   5	!,1Er!J%EFKK237I3J2KK`ab *<h);AqZPQSWEX]`ab]cfg]ga);Nh!HIKK.^)<(==\]^ G'7
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`	sx   )I &I HH+H:H>I 5I BH$%I ?BI I $	I-II II 	JI>>JN)__name__
__module____qualname____doc__r   r   r   strr   r   r%   ndarrayr3    r   r   r	   r	      s8    F! !CT#s(^ C8L Cr   r	   )r7   numpyr%   loggingtypingr   r   r   r   learning.embedderr   	getLoggerr4   r   r	   r:   r   r   <module>r@      s5    H   , , -			8	$N Nr   