experto_ai / app.py
jdmorzan's picture
Update app.py
1bb6f6f verified
raw
history blame
4.02 kB
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.prompts.chat import SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langsmith import traceable
import gradio as gr
from pydantic import ConfigDict
from fastapi import FastAPI
# Create FastAPI app with arbitrary types allowed
#app = FastAPI()
#app.model_config = ConfigDict(arbitrary_types_allowed=True)
embeddings = OpenAIEmbeddings()
vectordb = Chroma(persist_directory="./ai_vocacional_v2", embedding_function=embeddings)
llm = ChatOpenAI(temperature=0, model_name='gpt-4o-mini')
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 breves y concisos con bullets y negritas.
Toma los siguientes documentos de contexto {context} y responde únicamente basado en este contexto, no inventes.
No menciones ningún código de curso al mencionar sus nombres (ejemplo: [PS1223])
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 (Universidad Peruana de Ciencias Aplicadas), continua respondiendo a la pregunta que se haga sobre universidades, respondiendo a la pregunta que te hagan y detallando por qué UPC destaca.Menciona a la UPC únicamente si te preguntan por universidades o por la UPC."""
general_user_template = "Pregunta:```{question}```"
messages = [
SystemMessagePromptTemplate.from_template(general_system_template),
HumanMessagePromptTemplate.from_template(general_user_template)
]
qa_prompt = ChatPromptTemplate.from_messages(messages)
def create_memory():
return ConversationBufferMemory(memory_key='chat_history', return_messages=True)
@traceable
def pdf_qa(query, memory):
function = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=vectordb.as_retriever(search_kwargs={'k': 28}),
combine_docs_chain_kwargs={'prompt': qa_prompt},
memory=memory
)
return function({"question": query})
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? - ¿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")
memory_state = gr.State(create_memory)
def user(query, chat_history, memory):
print("User query:", query)
print("Chat history:", chat_history)
result = pdf_qa(query, memory)
chat_history.append((query, result["answer"]))
print("Updated chat history:", chat_history)
return gr.update(value=""), chat_history, memory
submit.click(user, [msg, chatbot, memory_state], [msg, chatbot, memory_state], queue=False)
msg.submit(user, [msg, chatbot, memory_state], [msg, chatbot, memory_state], queue=False)
if __name__ == "__main__":
demo.launch()