Ë
    ÁÖi#  ã                   ó‚   — d Z ddlmZ ddlmZ ddlmZ ddlZddlZ ej                  e
«      Z G d„ d«      Z e«       Zy)ub   
Servicio de generaciÃ³n de embeddings para consultas RAG.
Llama directamente a OpenAI sin cache.
é    )ÚList)ÚOpenAIEmbeddings)ÚsettingsNc                   ó^   — e Zd ZdZd„ Zdedefd„Zdedee   fd„Z	dee   deee      fd	„Z
y
)ÚEmbeddingsServicez+Servicio para generar embeddings de textos.c                 óª   — t        t        j                  t        j                  t        j                  d¬«      | _        t        j                  | _        y )Né   )ÚmodelÚopenai_api_keyÚ
dimensionsÚtimeout)r   r   ÚEMBEDDING_MODELÚOPENAI_API_KEYÚEMBEDDING_DIMENSIONSÚembeddings_modelr   )Úselfs    ú>/opt/lhia/marcimex/agent/app/rag_service/embeddings_service.pyÚ__init__zEmbeddingsService.__init__   s<   € Ü 0Ü×*Ñ*Ü#×2Ñ2Ü×4Ñ4Øô	!
ˆÔô #×7Ñ7ˆó    ÚtextÚreturnc                 óx   — dj                  |j                  «       j                  «       j                  «       «      S )z-Normaliza texto para embeddings consistentes.Ú )ÚjoinÚlowerÚstripÚsplit)r   r   s     r   Ú_normalize_textz!EmbeddingsService._normalize_text   s)   € àx‰x˜Ÿ
™
›×*Ñ*Ó,×2Ñ2Ó4Ó5Ð5r   Úqueryc                 óŠ  — 	 | j                  |«      }t        j                  d|dd › d«       t        j                  «       }| j                  j                  |«      }t        j                  dt        j                  «       |z
  d›d«       |S # t        $ r*}t        j                  d|dd › d	|› «       g cY d}~S d}~ww xY w)
zT
        Genera embedding para una consulta llamando directamente a OpenAI.
        u   ðŸ”¢ [EMBEDDING OpenAI] 'Né<   ú'u(   â±ï¸ [EMBEDDING OpenAI] completado en z.2fÚsu&   âŒ Error generando embedding (query='z'): )r   ÚloggerÚinfoÚtimer   Úembed_queryÚ	ExceptionÚerror)r   r   Únormalized_queryÚt0Ú	embeddingÚes         r   r'   zEmbeddingsService.embed_query   sº   € ð		Ø#×3Ñ3°EÓ:ÐÜK‰KÐ3°E¸#¸2°J°<¸qÐAÔBÜ—‘“ˆBØ×-Ñ-×9Ñ9Ð:JÓKˆIÜK‰KÐBÄ4Ç9Á9Ã;ÐQSÑCSÐTWÐBXÐXYÐZÔ[ØÐøÜò 	ÜL‰LÐAÀ%ÈÈÀ*ÀÈTÐRSÐQTÐUÔVØIûð	ús   ‚BB Â	CÂB=Â7CÂ=CÚ	documentsc                 ó$  — 	 |D cg c]  }| j                  |«      ‘Œ }}t        j                  dt        |«      › d«       | j                  j                  |«      S c c}w # t        $ r$}t        j                  d|› «       g cY d}~S d}~ww xY w)u?   
        Genera embeddings para mÃºltiples documentos.
        u   ðŸ”¢ Generando embeddings para z documentosu    âŒ Error generando embeddings: N)r   r$   r%   Úlenr   Úembed_documentsr(   r)   )r   r.   ÚdocÚnormalized_docsr-   s        r   r1   z!EmbeddingsService.embed_documents.   sˆ   € ð	ØDMÖN¸S˜t×3Ñ3°CÕ8ÐNˆOÐNÜK‰KÐ9¼#¸i».Ð9IÈÐUÔVØ×(Ñ(×8Ñ8¸ÓIÐIùò Oøô ò 	ÜL‰LÐ;¸A¸3Ð?Ô@ØIûð	ús-   ‚A" †Až>A" ÁA" Á"	BÁ+B
ÂBÂ
BN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   Úfloatr'   r1   © r   r   r   r      sT   „ Ù5ò8ð6 Cð 6¨Có 6ð ð ¨¨e©ó ð
¨¨c©ð 
°t¸DÀ¹KÑ7Hô 
r   r   )r7   Útypingr   Úlangchain_openair   Úconfig.settingsr   Úloggingr&   Ú	getLoggerr4   r$   r   Úembeddings_servicer:   r   r   ú<module>rA      sC   ðñõ
 Ý -Ý $Û Û à	ˆ×	Ñ	˜8Ó	$€÷)ñ )ñZ 'Ó(Ñ r   