
    ؕg}                        d dl mZ d dlmZ d dlmZ d dl mZ d dlZd dlZ	d dl
mZ d dlZ e         ej                  d      Z ej                  d      Z ej                  d	      Zd
efdZdefdZdededefdZdedefdZy)    )
ChatOpenAI)PromptTemplate)Milvus)OpenAIEmbeddingsN)load_dotenvAPI_KEY_OPENAIHOST_MILVUSDB_NAME_MILVUScollection_namec                 X    t        dt              }t        || t        t        dd      S )Nztext-embedding-3-large)modelopenai_api_key19530)db_namehostport)r   connection_args)r   r   r   r
   r	   )r   
embeddingss     S/opt/lhia/marcimex/python/app/langchain_lhia/funciones_langchain/filtro_vectores.pymilvus_busquedar      s5    !&%J '%
	 	    preguntac                    dg}|D ]^  }t        |      j                  | d      }g }|D ]  \  }}|j                  |        |s?t        |      t	        |      z  }|dkD  s\|c S  t        d      j                  | d      S )NPRODUCTOS_MARCIMEX   k皙?r   similarity_search_with_scoreappendsumlen)r   colecciones	coleccioncoleccion_docspuntajes	documentopuntajepromedios           r   vectoresr+      s    '(K  &	(3PPQY]^P_"0 	%IwOOG$	%8}s8}4H$%%& /0MMhZ[M\\r   question
collectionamountc                    |g}|D ]^  }t        |      j                  | |      }g }|D ]  \  }}|j                  |        |s?t        |      t	        |      z  }	|	dkD  s\|c S  t        |      j                  | |      S )Nr   r   r   )
r,   r-   r.   r$   r%   r&   r'   r(   r)   r*   s
             r   vectors_namer0   /   s    ,K  &	(3PPQY]cPd"0 	%IwOOG$	%8}s8}4H$%%& :&CCHPVCWWr   c                 ^   g }fd}t         j                  j                         5 }| D ci c]  }|j                  ||      | }}t         j                  j	                  |      D ]&  }|j                         }	|	s|j                  |	       ( 	 d d d        |S c c}w # 1 sw Y   |S xY w)Nc                 h    t        |       j                        }|D ]  }|d   }|dkD  s|c S  y )Nr      g?)r   r    )r%   r&   docr)   r.   r,   s       r   procesar_coleccionz0procesar_colecciones.<locals>.procesar_coleccionA   sO    (3PP Q 
 " 	&C!fG~%%	& r   )
concurrentfuturesThreadPoolExecutorsubmitas_completedresultr!   )
r$   r,   r.   lista_coleccionesr5   executorr%   futurosfuturo	resultados
    ``       r   procesar_coleccionesrA   ?   s     
			.	.	0 4H )
 OO.	:IE
 
 !((55g> 	4FI!((3	44 
4 s"   B"B6B"?B"B""B,)langchain_openair   langchain_core.prompts.chatr    langchain_community.vectorstoresr   r   
statisticsconcurrent.futuresr6   dotenvr   osgetenvr   r	   r
   strr   r+   intr0   rA    r   r   <module>rM      s    ' 6 3 -    	 ryy)*BIIm$ryy)*S "]s ] X3 X3 Xc X  S r   