
    U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 d dl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e&de&fdZ'd	S )    )OpenAIEmbeddings)OpenAI)load_dotenv)LLMChain)
ChatOpenAI)ConversationBufferMemoryChatMessageHistory)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                 &   t          dddd          }d}d}t          dd	          }t          j        |||
          }d}t          j                            d          }t          d| d|d          }	t          j	        |          }t          ||          }
t          |	dd          }t          |          }t          dddg          }t          |d|          }t          |
|                                ||          }t!          |           |                    d| i          }t%          j        |          }|d         }|d         }|	                    |            |	                    |           t-          j        ||          }|S ) Ng?zgpt-4-0125-previewz3sk-BJBMLzenOAiK9uGa5s5DT3BlbkFJdlwQPbVPKBFOkChjfD8ri,  )temperaturemodelopenai_api_key
max_tokenszJpostgresql+psycopg2://postgres:OzMFq5AZeu48PxL@74.208.117.78:5431/postgrespruebaztext-embedding-3-large)r   r   )	embeddingcollection_namedb_urlu)  Debes realizar lo siguientes: 1. Responde de manera clara y precisa en estilo de texto plano enfocandote en la pregunta realizada po rle usuario no agregando informacion extra
2. actua como asistente virtual de la cooperativa Jardin Azuayo del Ecuador llamado JARVI usando el rol colaborador de la cooperativa
3. usa solo la informacion proporcionada en el contexto, no acceedas a la informacion de openia y tampoco menciones que eres de Ecuador
4. enfocate en responder la pregunta en 350 tokens usando la informacion porporcionada en el contexto y en una manera informal conocido como tutear
5. no agreges a la respuesta informacion adicional y enlista la respuesta en caso de ser necesario con viñetas, además no aumentes mas información que cabe ser mencionada
6. en caso que la pregunta no se pueda responder o no se tenga informacion recomendar llamar al 55555 de la Mesa de Servicios, opción 2 Soporte Operativo u opción 3 Soporte Técnico ya que los usuarios que porporcionan la pregunta son parte de la cooperativa
7. solicita mas informacion para poder entregar una respuesta si el contexto entregado no es duficiente
8. si existe la informacion necesaria para responder las preguntas no recomiendes llamar al 55555 de la Mesa de Servicios, opción 2 Soporte Operativo u opción 3 Soporte Técnico 
9. si la pregunta es Hola responder con que eres un asistente virtual llamado JARVI de la cooperativa Jardin Azuayo en que puedes ayudar o con 'Hola, soy JARVI tu asistente de Inteligencia Artificial, ¿Que necesitas?'
10. en caso de respuesta en direcciones o ubicaciones si no se logro dar una respuesta pedir mas informacion como ciudad, parroquia o sector.
11. no entregues en la respuesta de donde sacaste la informacion

Historial de Chat:
{chat_history}
Entrada 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_historyT)chat_memory
memory_keyreturn_messagesz(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print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_chainr8   qa_chain
doc_promptfinal_qa_chainretrieval_qaresponseresponseDictr;   r<   modelos                        B/Users/juancaisapanta/Desktop/lhia v2.0/app/langchain_lhia/chat.pyr   r      s   
,@  QF  SV  W  W  WCdO!
"H  J
 .#  H ( |..~>>( O0@  O  O  O! ! !G  .;<TUU&#   &'nfjkkkF+C00H8#X.  J
 )$  N 0.##%%%	  L 
.X 677H:h''L(#F9%GX&&&6"""'&7KKKFM    )(langchain_openair   r   dotenvr   langchain.chainsr   r   langchain.memoryr   r	   langchain_core.prompts.chatr
   r   r   r   *langchain_community.chat_message_historiesr   urllib.parser@   r   (langchain.chains.combine_documents.stuffr   r   +langchain_community.vectorstores.pgvecto_rsr   langchain_core.messagesr   r   rG   langchain_core.documentsr   langchain_core.embeddingsr   langchain_community.callbacksr   
app.modelsr   strr    r\   r[   <module>rm      s   - - - - - - # # # # # #       % % % % % % ' ' ' ' ' ' I I I I I I I I                     9 9 9 9 9 9 H H H H H H 9 9 9 9 9 9 B B B B B B ? ? ? ? ? ? ? ?  - - - - - - 0 0 0 0 0 0 = = = = = = " " " " " "Qc Q Q Q Q Q Q Qr\   