a
    =f                     @   s   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mZm	Z	 d dl
mZmZmZmZ d dlmZ d dl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mZ d dlZd dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ e%e%dddZ&dS )    )OpenAIEmbeddings)OpenAI)LLMChain)
ChatOpenAI)ConversationBufferMemoryChatMessageHistoryConversationBufferWindowMemory)ChatPromptTemplateHumanMessagePromptTemplateSystemMessagePromptTemplatePromptTemplate)PostgresChatMessageHistoryN)create_qa_with_sources_chain)StuffDocumentsChain)ConversationalRetrievalChain)
PGVecto_rs)HumanMessageSystemMessage)Document)
Embeddings)get_openai_callback)modelo_chat)preguntasesionc                 C   s  t ddddd}d}d}tddd	}tj|||d
}d}tjd}td| d|dd}	t	|}t
||d}
t|	ddd}t|}tdddgd}t|d|d}t|
| ||d}|d| i}t|}|d }|d }|	|  |	| tj||d}|S ) Ng      ?zgpt-3.5-turbo-0125tokeni,  )Ztemperaturemodelopenai_api_keyZ
max_tokenszJpostgresql+psycopg2://postgres:OzMFq5AZeu48PxL@74.208.117.78:5431/postgresZpruebaztext-embedding-3-large)r   r   )Z	embeddingZcollection_nameZdb_urlu4  Dada la siguiente conversación y una pregunta de seguimiento, reformule la pregunta de seguimiento para que sea una pregunta independiente, en su idioma original.
Asegúrate de evitar el uso de pronombres poco claros. 
conversacion: {chat_history}
Pregunta de seguimiento: {question}
Pregunta independiente:zQ@QMKUrTsFFazpostgresql://tws2admin:zL@198.251.78.201:5432/tws2_db_prod_courier?options=-c%20search_path%3Dlhia-jaZhistorial_chat)Zconnection_stringZ
session_idZ
table_name)llmpromptZchat_history   )Zchat_memoryZ
memory_keykzh
    Actu como un asistente de la cooperativa jardin azuayo
    Content: {page_content}
Source: {source}Zpage_contentsource)templateZinput_variablescontext)Z	llm_chainZdocument_variable_nameZdocument_prompt)Zquestion_generatorZ	retrievermemoryZcombine_docs_chainZquestionanswersources)Z	respuestaZ	documento)r   r   r   Zfrom_collection_nameurllibparse
quote_plusr   r   Zfrom_templater   r   r   r   r   Zas_retrieverrunjsonloadsZadd_user_messageZadd_ai_messager   ZRespuestaPython)r   r   r   ZCONNECTION_STRINGZCOLLECTION_NAMEZ
embeddingsZvectordbZcondense_question_promptZencoded_passwordhistoryZcondense_question_chainr$   Zqa_chainZ
doc_promptZfinal_qa_chainZretrieval_qaresponseZresponseDictr%   r&   Zmodelo r/   C/opt/spring_back/lhia/danec/python-danec/app/langchain_lhia/chat.pyr      sb    	




r   )'Zlangchain_openair   r   Zlangchain.chainsr   r   Zlangchain.memoryr   r   r   Zlangchain_core.prompts.chatr	   r
   r   r   Z*langchain_community.chat_message_historiesr   urllib.parser'   r   Z(langchain.chains.combine_documents.stuffr   r   Z+langchain_community.vectorstores.pgvecto_rsr   Zlangchain_core.messagesr   r   r+   Zlangchain_core.documentsr   Zlangchain_core.embeddingsr   Zlangchain_community.callbacksr   Z
app.modelsr   strr   r/   r/   r/   r0   <module>   s$   