o
    gh                     @   s   d dl mZm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 d dlmZ d d	lmZ d d
lmZ d dlZdddZdd Zd dlmZmZ dd ZdS )    )create_history_aware_retrievercreate_retrieval_chain)create_stuff_documents_chain)ChatPromptTemplateMessagesPlaceholder)
ChatOpenAI)ConversationSummaryBufferMemory)MongoDBAtlasVectorSearch)OpenAIEmbeddings)get_character_by_id)count_tokens)metadataN
   
similarityc                 C   s"   t | t dd}|j|d|idS )NZvector_search_index)
collection	embedding
index_namek)search_typesearch_kwargs)r	   r
   as_retriever)r   r   r   vector_store r   g/var/www/html/aiverses.in/BackEnd/Ai_Agents/services/process_requests/process_request_knowledge_bank.pycreate_retriever   s   r   c                 C   sn   t ddd}t|ddd}|t|  d< ttddg}t|||}td	tddg}t||d
}t||S )Nzgpt-3.5-turbog?)
model_nametemperaturechat_historyi   )llmZ
memory_keyZmax_token_limitmemory)userz{input})systemz Use the context below:
{context})r   prompt)	r   r   r   r   from_messagesr   r   r   r   )sid	retrieverr   r   ZcontextualizeZhistory_aware_retrieverZanswer_promptZcombine_chainr   r   r   create_rag_chain   s*   r&   )HumanMessage	AIMessagec                 C   sL  |d }|d }t |}|dd}|dd}|dd}t|d d d t| d	 d u rB| d
 | }	t|	}
t||
t| d	< t| d	 }t| d }g }|ry|jry|jjD ]}|jdkrj|	t
|jd qY|jdkrx|	t|jd qYd| d| d| d| |d}||}t||d  }|d dd|d|dS )Ncharacter_idmessagecharacter_nameUnknowngender	backstory )r   	rag_chainr0   ZKnowledge_Bankr   human)contentaizYou are z, a z. Your backstory- z.
User: )inputr   answer
z<br>
section_id)responser7   token_usage)r   getr   
setdefaultr   r&   Zchat_memorymessagestypeappendr'   r2   r(   invoker   replace)clientdatar$   r)   question	characternamer-   r.   r   r%   r0   r   r   msgZ	llm_inputr8   r9   r   r   r   process_request4   s<   



rG   )r   r   )langchain.chainsr   r   Z"langchain.chains.combine_documentsr   langchain.promptsr   r   langchain_openair   Zlangchain.memoryr   Zlangchain_mongodbr	   r
   app.database.fetch_datar   -Ai_Agents.services.llm_functions.count_tokensr   app.corer   osr   r&   langchain_core.messagesr'   r(   rG   r   r   r   r   <module>   s    
