
    ەg                     f   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$ d dl%m&Z& d dl'Z' e&         e'jP                  d      Z) e'jP                  d      Z*de+de+fdZ,y)    )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)load_dotenvAPI_KEY_OPENAIAPI_URL_MILVUSpreguntasesionc                    t        dddd      }d}d}t        dd	      }t        j                  |||
      }d}t        j
                  j                  d      }t        d| d|d      }	t        j                  |      }t        ||      }
t        |	dd      }t        |      }t        dddg      }t        |d|      }t        |
|j                         ||      }|j!                  d| i      }t#        j$                  |      }|d   }|d   }|	j'                  |        |	j)                  |       t+        j,                  ||      }|S ) Ng      ?zgpt-3.5-turbo-0125tokeni,  )temperaturemodelopenai_api_key
max_tokens pruebaztext-embedding-3-large)r!   r"   )	embeddingcollection_namedb_urluD  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-jahistorial_chat)connection_string
session_id
table_name)llmpromptchat_history   )chat_memory
memory_keyku  
    1. Actúa como un vendedor de la Empresa Marcimex, que se dedica a la venta de productos para el hogar.
    2. La empresa Marcimex solo realiza venta de productos, no es una marca propia.
    3. Debes obtener todas las características posibles para realizar una búsqueda de productos.
    4. Cuando obtengas todas las características necesarias de un producto, entrega solo el nombre y las características del producto precedidas por la palabra 'producto_encontrado' en el formato '[nombre, características]'.
    5. Si el usuario solicita una lista, obtén solamente el nombre o tipo del producto precedido por la palabra 'listar_producto' en el formato 'nombre producto: xxx'. Resúmelo en una frase.
    6. Si no se encuentra información sobre los productos, responde que no se dispone del producto por el momento.
    7. Si el usuario te pregunta sobre temas diferentes a la búsqueda de información de productos, responde: 'Lamentablemente no puedo ayudarte con esto, solo puedo responder preguntas relacionadas a la temática de productos o información de Marcimex.'
    8. Las respuestas deben ser informativas.
    Content: {page_content}
Source: {source}page_contentsource)templateinput_variablescontext)	llm_chaindocument_variable_namedocument_prompt)question_generator	retrievermemorycombine_docs_chainquestionanswersources)	respuesta	documento)r   r   r   from_collection_nameurllibparse
quote_plusr   r   from_templater   r	   r   r   r   as_retrieverrunjsonloadsadd_user_messageadd_ai_messager   RespuestaPython)r   r   r-   CONNECTION_STRINGCOLLECTION_NAME
embeddingsvectordbcondense_question_promptencoded_passwordhistorycondense_question_chainr>   qa_chain
doc_promptfinal_qa_chainretrieval_qaresponseresponseDictrA   rB   modelos                        4/opt/lhia/marcimex/python/app/langchain_lhia/chat.pyr   r   !   s   
,@PWdg
hCO!&J
 ..' H  ||..~>(/0@/A  BN  O!G  .;;<TU&# ,N^_`F+C0H	1 $X.J )$N 0.##%%	L X 67H::h'L(#F9%GX&6"''&7KFM    )-langchain_openair   r   langchain.chainsr   r   langchain.memoryr   r   r	   langchain_core.prompts.chatr
   r   r   r   *langchain_community.chat_message_historiesr   urllib.parserF   r   (langchain.chains.combine_documents.stuffr   r   +langchain_community.vectorstores.pgvecto_rsr   langchain_core.messagesr   r   rL   langchain_core.documentsr   langchain_core.embeddingsr   langchain_community.callbacksr   
app.modelsr   dotenvr   osgetenvr   r   strr    ra   r`   <module>rt      s    - # % ' h h   9 H 9 B ?  - 0 = "  	 ryy)*ryy)*Nc N Nra   