o
    F+g                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ e dZe  ee d	e d
dZe Zdd Zdd Zdd Zdd Zd dlZdd Zdd ZdS )    N)OpenAI)QdrantClientmodels)load_dotenv)ThreadPoolExecutor)LateInteractionTextEmbedding)Bm25EMBEDDING_MODEL
QDRANT_URLQDRANT_API_KEY)urlapi_keyc                 C   s   t jj| gtdjd jS )N)inputmodelr   )openai_client
embeddingscreateopenai_embeddings_modeldata	embeddingtext r   3/var/www/html/answerit/server/dependencies/utils.pyget_dense_embedding   s   r   c                 C   s"   t d}t|| d d  S )Nzcolbert-ir/colbertv2.0r   )r   listpassage_embedtolist)r    late_interaction_embedding_modelr   r   r   get_late_interaction_embedding   s   r   c                 C   s   t d}t|| d S )NzQdrant/bm25r   )r   r   query_embed)r   
bm25_modelr   r   r   get_sparse_embedding   s   r"   c           	      C   sx   |  dd}t &}|t|}|t|}|t|}| }| }| }W d    n1 s2w   Y  |||fS )N
 )replacer   submitr   r   r"   result)	queryr   executordense_futurelate_interaction_futuresparse_futuredense_embeddinglate_interaction_embeddingsparse_embeddingr   r   r   get_all_embeddings!   s   

	r0   c                 C   s   t   }t| \}}}t   }td||  tj|dddtjtjdi | dddtj|dddg}t   }td||  tj||tj	tj
jddd	d
}	t   }
td|
|  ddd |	jD S )NzTime=dense_embeddings   )r(   usinglimitbm25late_interactions)fusionT   )prefetchr(   with_payloadr4   r#   c                 S   s   g | ]}|j d  qS r   )payload).0pointr   r   r   
<listcomp>X   s    zget_context.<locals>.<listcomp>r   )timer0   printr   PrefetchSparseVector	as_objectqdrant_clientquery_pointsFusionQueryFusionRRFjoinpoints)r(   collection_namet1dslt2r9   t3resultst4r   r   r   get_context/   sD   	rT   c                 C   sR   t | |}d| d|  d}tjjjtddd|dgdgd	}|jd
 jj	S )Nz
    You are a English literature professor, tasked with finding answer to the question asked by your student from the below passage:
    Passage:z 
    Question: z6
    You need to form you answer only unsing the 
    OPENAI_MODELuserr   )typer   )rolecontent)r   messagesr   )
rT   r   chatcompletionsr   osgetenvchoicesmessagerY   )r(   rK   passagepromptresponser   r   r   answerZ   s"   
rd   )r]   openair   rD   r   r   dotenvr   concurrent.futuresr   fastembed.late_interactionr   fastembed.sparse.bm25r   r^   r   r   r   r   r"   r0   r?   rT   rd   r   r   r   r   <module>   s*    
+