
    u2i8                         d dl Zd dlZd dlZd dlZd dlmZ d dlZ e         eed      sej                  e_
         ej                  dd        ej                  e      Z G d d      Zy)	    N)load_dotenvfloat_ignorez.*np.float_.*)messagec                       e Zd ZdefdZ	 	 	 ddededededef
dZ	 	 ddededed	efd
Zddede	fdZ
	 ddedede	fdZddedede	fdZy)Embeddertextc                     t        j                  d      }t        j                  d      }|r|s&t        j                  d       | j	                  |      S t        j                  d       | j	                  |      S )zKGenerate embeddings using local method (Qdrant embedding API not available)QDRANT_API_URLQDRANT_API_KEYz7Qdrant API URL or API Key not configured in environmentz+Using local embedding instead of Qdrant API)osgetenvloggerwarningembedinfo)selfr	   r   r   s       7/var/www/html/drjob-dev/drjob-ai/services/embeddings.pyembed_with_qdrantzEmbedder.embed_with_qdrant(   s_    #34#34^NNTU::d## 	ABzz$    Njobseeker_id	embeddingcountry_namecountry_header_codec           	      v   	 || j                  |      }t        j                  d      }t        j                  d      }t        j                  d      }t        |||g      st        j                  d       y| d| d}	|d	d
}
	 t        |      }d||||dd ||ddgi}t        j                  |	||
      }|j                          t        j                  d| d       y# t        $ r t        |      dz  }Y lw xY w# t        $ r.}t        j                  d| dt        |              Y d}~yd}~ww xY w)z?Store resume data in Qdrant collection with country informationNQDRANT_COLLECTION_NAMEQDRANT_SEARCH_URLr   :Qdrant configuration not complete in environment variablesF//pointsapplication/jsonzapi-keyzContent-Type        points  )	resume_idr	   r   r   idvectorpayloadjsonheadersSuccessfully stored jobseeker z
 in QdrantTz&Error storing in Qdrant for jobseeker : )r   r   r   allr   r   int
ValueErrorhashrequestsputraise_for_statusr   	Exceptionerrorstr)r   r   r	   r   r   r   collection_namer   r   urlr-   point_idpoint_payloadresponsees                  r   store_in_qdrantzEmbedder.store_in_qdrant6   sa   3	  2248	 ii(@AO "		*= >YY'78N):NKLP &'q(9AC) 2G8|, &"+)5$($K,83F	$	M  ||CmWMH%%'KK8jQR-  8-780  	LL8bQQ 		sC   A5D 8D C$ AD $C>;D =C>>D 	D8
$D33D8payload_datac                 (   	 || j                  |      }t        j                  d      }t        j                  d      }t        j                  d      }t        |||g      st        j                  d       y| d| d}|d	d
}		 t        |      }
||dd d}|r|j                  |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      dd |j                  dg       dd |j                  dd      |j                  dd      |j                  dd      |j                  dg       dd d       d|
||d gi}t        j                  |||	!      }|j                          t        j                  d"| d#       y$# t        $ r t        |      dz  }
Y Ew xY w# t        $ r.}t        j!                  d%| d&t#        |              Y d}~yd}~ww xY w)'zHStore resume data in Qdrant collection with detailed payload informationNr   r   r   r   Fr   r    r!   r"   r#   r%   )r&   r	   r    r   email
first_name	last_nameprofile_summaryi  skills   experience_yearsr   highest_educationcurrent_designation	languages
   )r   r   rD   rE   rF   rG   rH   rJ   rK   rL   rM   r$   r'   r+   r.   z  in Qdrant with detailed payloadTz4Error storing detailed data in Qdrant for jobseeker r/   )r   r   r   r0   r   r   r1   r2   r3   updategetr4   r5   r6   r   r7   r8   r9   )r   r   r	   r   rA   r:   r   r   r;   r-   r<   r*   r=   r>   r?   s                  r   store_in_qdrant_with_detailsz%Embedder.store_in_qdrant_with_detailst   sf   R	  2248	 ii(@AO "		*= >YY'78N):NKLP &'q(9AC) 2G8|, *UdG (4(8(8(L/;/?/?120 ".!1!1'2!>&2&6&6|R&H%1%5%5k2%F+7+;+;<Mr+R S, #/"2"28R"@R# -9,<,<=OQR,S-9-=-=>QSU-V/;/?/?120 &2%5%5k2%FR&'6 &"+#*M  ||CmWMH%%'KK0>^_ k  8-78n  	LLF|nTVWZ[\W]V^_ 		sC   A5G 8G F< D*G <GG GG 	H#$HHquerytop_kc                    	 t        j                  d      }t        j                  d      }t        j                  d      }t        |||g      st        j	                  d       dg iS | j                  |      }| d| d}|dd	}||d
d}	t        j                  ||	|      }
|
j                          |
j                         S # t        $ r/}t        j                  dt        |              dg icY d}~S d}~ww xY w)z0Search resumes in Qdrant using vector similarityr   r   r   r   resultr   /points/searchr!   r"   Tr)   topwith_payloadr+   zError searching Qdrant: N)r   r   r0   r   r   r   r4   postr6   r,   r7   r8   r9   )r   rR   rS   r   r   r:   r   r;   r-   r*   r>   r?   s               r   search_with_qdrantzEmbedder.search_with_qdrant   s    	" "		*= >YY'78N ii(@AO)>?KLP !"~% ..u5I&'q(9HC) 2G "+5$OG}}SwHH%%'==?" 	"LL3CF8<=b>!	"s%   A%C (AC 	C<$C71C<7C<filtered_resume_idsc                 n   	 t        j                  d      }t        j                  d      }t        j                  d      }t        |||g      st        j	                  d       dg iS |st        j                  d       dg iS | j                  |      }| d| d}|d	d
}	g }
|D ]  }	 t        |      }|
j                  |       ! ||dddd|idgid}t        j                  |||	      }|j                          |j                         }t        j                  dt        |       dt        |j!                  dg              d       |S # t        $ r" t        |      dz  }|
j                  |       Y w xY w# t"        $ r/}t        j%                  dt'        |              dg icY d}~S d}~ww xY w)z<Search specific candidates in Qdrant using vector similarityr   r   r   r   rU   z1No filtered resume IDs provided for vector searchr   rV   r!   r"   r#   Tmustr&   anykeymatch)r)   rX   rY   filterr+   zVector search on z filtered candidates returned  resultsz/Error searching filtered candidates in Qdrant: N)r   r   r0   r   r   r   r   r1   appendr2   r3   r4   rZ   r6   r,   lenrP   r7   r8   r9   )r   rR   r\   rS   r   r   r:   r   r;   r-   	point_idsr&   r<   r*   r>   rU   r?   s                    r   search_filtered_candidatesz#Embedder.search_filtered_candidates   s   ?	" "		*= >YY'78N ii(@AO)>?KLP !"~%&OP "~% ..u5I&'q(9HC) 2G I0 /	/"9~H$$X./ $ $#. %':&		G   }}SwHH%%']]_FKK#C(;$<#==[\_`f`j`jksuw`x\y[z  {C  D M9 " /#I%8H$$X./<  	"LLJ3q6(STb>!	"sO   A%E< (E< %E< )EBE< (E96E< 8E99E< <	F4$F/)F4/F4filtersc           	         	 t        j                  d      }t        j                  d      }t        j                  d      }t        |||g      st        j	                  d       dg iS | j                  |      }| d| d}|dd	}	||d
d}
|rg }|j                  d      r|j                  dd|d   id       |j                  d      r,t        |d   t              r|j                  dd|d   id       |j                  d      r|j                  dd|d   id       |j                  d      r|j                  dd|d   id       |rd|i|
d<   t        j                  ||
|	      }|j                          |j                         }t        j                  dt        |j                  dg              d       |S # t         $ r/}t        j#                  dt%        |              dg icY d}~S d}~ww xY w)zISearch resumes in Qdrant with advanced filtering by skills, country, etc.r   r   r   r   rU   r   rV   r!   r"   TrW   r   valuer`   rH   r_   	educationrK   min_experience_yearsrJ   gte)ra   ranger^   rc   r+   z$Qdrant search with filters returned rd   z(Error searching with filters in Qdrant: N)r   r   r0   r   r   r   rP   re   
isinstancelistr4   rZ   r6   r,   r   rf   r7   r8   r9   )r   rR   ri   rS   r   r   r:   r   r;   r-   r*   filter_conditionsr>   rU   r?   s                  r   search_with_filterszEmbedder.search_with_filters4  s"   I	" "		*= >YY'78N ii(@AO)>?KLP !"~% ..u5I&'q(9HC) 2G
 "+5$OG $&! ;;45%,,#8&-w7L/M%N ;;x(Z8I4-P%,, (E78;L3MN
 ;;{+%,,#6&-w{/C%D ;;56%,,#5&+W5K-L%M %)/1B(CGH%}}SwHH%%']]_FKK6s6::hPR;S7T6UU]^ M 	"LLCCF8LMb>!	"s%   A%G  (EG   	G8	$G3-G83G8)NrC   rC   )NN)rI   )NrI   )__name__
__module____qualname__r9   r   rq   r@   dictrQ   r1   r[   rh   rs    r   r   r   r      s      c  $ #%<< < 	<
 < !<D !ZZ Z 	Z
 Zx" "C "@ CEC"C"/3C"<?C"JK" K"t K"3 K"r   r   )numpynpwarningsr4   r   dotenvr   logginghasattrfloat64r   filterwarnings	getLoggerrt   r   r   rx   r   r   <module>r      sk       	    r8

BI   / : 
		8	$g" g"r   