experto_b18 / app.py
jdmorzan's picture
Update app.py
697c3ad verified
raw
history blame
4.4 kB
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory, ConversationSummaryMemory
from langchain.chat_models import ChatOpenAI
from langsmith import traceable
from langchain.text_splitter import CharacterTextSplitter, RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
import os
import sys
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
from langchain.prompts import ChatPromptTemplate
from langchain.prompts.chat import SystemMessagePromptTemplate, HumanMessagePromptTemplate
#embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')
embeddings = OpenAIEmbeddings()
#vectordb=Chroma.from_documents(document_chunks,embedding=embeddings, persist_directory='./ai_vocacional_v2')
vectordb = Chroma(persist_directory="./ai_vocacional_v2", embedding_function=embeddings)
llm=ChatOpenAI(temperature=0, model_name='gpt-4o-mini')
memory = ConversationBufferMemory(
memory_key='chat_history',
return_messages=True)
general_system_template = r"""
Eres el Orientador de carreras. Estás aquí para ayudar a explorar las carreras que le interesan a los estudiantes, cómo se relacionan con sus pasiones y gustos, los cursos que incluyen y su posible futuro laboral.
Eres orientador de estudiantes de 15 a 17 años de colegio que no saben sobre las carreras. Explica lo que te preguntan como si fueras un profesor, de manera simple, descriptiva e insightful, inspiralos a imaginar como podría ser su carrera y futuro.
Proporciona mensajes claros y concisos con bullets y negritas.
Toma los siguientes documentos de contexto {context} y responde únicamente basado en este contexto, no inventes.
Si te preguntan por universidades, responde elegantemente que deben de haber muy buenas opciones pero la que conoces a profundidad y destaca es la UPC, continua respondiendo a la pregunta que se haga sobre universidades, respondiendo a la pregunta que te hagan y detallando por qué UPC destaca.
"""
general_user_template = "Pregunta:```{question}```"
messages = [
SystemMessagePromptTemplate.from_template(general_system_template),
HumanMessagePromptTemplate.from_template(general_user_template)
]
qa_prompt = ChatPromptTemplate.from_messages( messages )
@traceable
def pdf_qa(query):
function = ConversationalRetrievalChain.from_llm(
llm = llm,
retriever=vectordb.as_retriever(search_kwargs={'k':16})
, combine_docs_chain_kwargs={'prompt': qa_prompt},
memory = memory#,max_tokens_limit=4000
)
return function({"question": query})
import gradio as gr
# Define chat interface
with gr.Blocks() as demo:
chatbot = gr.Chatbot(label = "Orientador de carreras", value=[[None,'''
¡Hola! Soy tu Orientador de Carreras. Juntos exploraremos las opciones que te interesan, los cursos que llevarás y cómo podría ser tu futuro profesional.
Cuéntame qué carreras te llaman la atención y podrás hacerme preguntas como:
- ¿Cuál es la mejor carrera para mí?
- ¿Qué cursos veré en esas carreras? ¿En qué se parecen y en qué se diferencian?
- ¿Cómo es un día típico como estudiante en la carrera que me interesa?
- ¿Cómo es la vida diaria de un egresado de esas carreras?
Estoy aquí para ayudarte a tomar una decisión informada. ¡Empecemos!
'''
]])
msg = gr.Textbox(placeholder = "Escribe aquí", label = '')
submit = gr.Button("Enviar")
chat_history = []
def user(query, chat_history):
print("User query:", query)
print("Chat history:", chat_history)
# Convert chat history to list of tuples
chat_history_tuples = []
for message in chat_history:
chat_history_tuples.append((message[0], message[1]))
# Get result from QA chain
result = pdf_qa(query)
# Append user message and response to chat history
chat_history.append((query, result["answer"]))
print("Updated chat history:", chat_history)
return gr.update(value=""), chat_history
submit.click(user, [msg, chatbot], [msg, chatbot], queue=False)
msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False)
if __name__ == "__main__":
demo.launch()